mirror of
https://github.com/rowboatlabs/rowboat.git
synced 2026-04-25 00:16:29 +02:00
pass @-mention notes by reference, not by inlined content
Mentions now route through the structured-attachment path, sending only path/filename/mimeType. The agent fetches content on demand via workspace-readFile (line-prefixed, paginated). Avoids freezing a stale snapshot of the note into the conversation and saves tokens on long notes. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
f4dc5e7db4
commit
4a2dfbf16f
1 changed files with 4 additions and 28 deletions
|
|
@ -2144,8 +2144,9 @@ function App() {
|
|||
}
|
||||
|
||||
let titleSource = userMessage
|
||||
const hasMentions = (mentions?.length ?? 0) > 0
|
||||
|
||||
if (hasAttachments) {
|
||||
if (hasAttachments || hasMentions) {
|
||||
type ContentPart =
|
||||
| { type: 'text'; text: string }
|
||||
| {
|
||||
|
|
@ -2182,7 +2183,7 @@ function App() {
|
|||
if (userMessage) {
|
||||
contentParts.push({ type: 'text', text: userMessage })
|
||||
} else {
|
||||
titleSource = stagedAttachments[0]?.filename ?? ''
|
||||
titleSource = stagedAttachments[0]?.filename ?? mentions?.[0]?.displayName ?? mentions?.[0]?.path ?? ''
|
||||
}
|
||||
|
||||
// Shared IPC payload types can lag until package rebuilds; runtime validation still enforces schema.
|
||||
|
|
@ -2200,32 +2201,9 @@ function App() {
|
|||
searchEnabled: searchEnabled || undefined,
|
||||
})
|
||||
} else {
|
||||
// Legacy path: plain string with optional XML-formatted @mentions.
|
||||
let formattedMessage = userMessage
|
||||
if (mentions && mentions.length > 0) {
|
||||
const attachedFiles = await Promise.all(
|
||||
mentions.map(async (mention) => {
|
||||
try {
|
||||
const result = await window.ipc.invoke('workspace:readFile', { path: mention.path })
|
||||
return { path: mention.path, content: result.data as string }
|
||||
} catch (err) {
|
||||
console.error('Failed to read mentioned file:', mention.path, err)
|
||||
return { path: mention.path, content: `[Error reading file: ${mention.path}]` }
|
||||
}
|
||||
})
|
||||
)
|
||||
|
||||
if (attachedFiles.length > 0) {
|
||||
const filesXml = attachedFiles
|
||||
.map((file) => `<file path="${file.path}">\n${file.content}\n</file>`)
|
||||
.join('\n')
|
||||
formattedMessage = `<attached-files>\n${filesXml}\n</attached-files>\n\n${userMessage}`
|
||||
}
|
||||
}
|
||||
|
||||
await window.ipc.invoke('runs:createMessage', {
|
||||
runId: currentRunId,
|
||||
message: formattedMessage,
|
||||
message: userMessage,
|
||||
voiceInput: pendingVoiceInputRef.current || undefined,
|
||||
voiceOutput: ttsEnabledRef.current ? ttsModeRef.current : undefined,
|
||||
searchEnabled: searchEnabled || undefined,
|
||||
|
|
@ -2235,8 +2213,6 @@ function App() {
|
|||
voiceOutput: ttsEnabledRef.current ? ttsModeRef.current : undefined,
|
||||
searchEnabled: searchEnabled || undefined,
|
||||
})
|
||||
|
||||
titleSource = formattedMessage
|
||||
}
|
||||
|
||||
pendingVoiceInputRef.current = false
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue