Browse Source

fix(tui): double file content injection in commands using $ARGUMENTS (#31245)

Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
Tony Worm 2 months ago
parent
commit
a9c810cbbc
1 changed files with 7 additions and 1 deletions
  1. 7 1
      packages/opencode/src/session/prompt.ts

+ 7 - 1
packages/opencode/src/session/prompt.ts

@@ -1491,6 +1491,12 @@ export const layer = Layer.effect(
       }
 
       const templateParts = yield* resolvePromptParts(template)
+      const inputFiles = new Set(
+        input.parts?.filter((part) => new URL(part.url).protocol === "file:").map((part) => fileURLToPath(part.url)),
+      )
+      const uniqueTemplateParts = templateParts.filter(
+        (part) => part.type !== "file" || !inputFiles.has(fileURLToPath(part.url)),
+      )
       const isSubtask = (agent.mode === "subagent" && cmd.subtask !== false) || cmd.subtask === true
       const parts = isSubtask
         ? [
@@ -1503,7 +1509,7 @@ export const layer = Layer.effect(
               prompt: templateParts.find((y) => y.type === "text")?.text ?? "",
             },
           ]
-        : [...templateParts, ...(input.parts ?? [])]
+        : [...uniqueTemplateParts, ...(input.parts ?? [])]
 
       const userAgent = isSubtask ? (input.agent ?? (yield* agents.defaultInfo()).name) : agent.name
       const userModel = isSubtask