diff --git a/.changeset/agent-manager-prompt-preview.md b/.changeset/agent-manager-prompt-preview.md new file mode 100644 index 000000000000..5ffa770674c6 --- /dev/null +++ b/.changeset/agent-manager-prompt-preview.md @@ -0,0 +1,6 @@ +--- +"@kilocode/cli": patch +"kilo-code": patch +--- + +Show the target session and full outgoing prompt when asking permission to send a prompt through Agent Manager. diff --git a/packages/kilo-vscode/webview-ui/src/components/chat/PermissionDock.tsx b/packages/kilo-vscode/webview-ui/src/components/chat/PermissionDock.tsx index dde269b93427..6c362e7b6c86 100644 --- a/packages/kilo-vscode/webview-ui/src/components/chat/PermissionDock.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/chat/PermissionDock.tsx @@ -299,7 +299,13 @@ export const PermissionDock: Component<{ when={skillShellCommands().length > 0} fallback={ <> - {(desc) =>
{desc()}
}
+ + {(desc) => ( +
+ {desc()} +
+ )} +
{(cmd) => } diff --git a/packages/kilo-vscode/webview-ui/src/styles/permission-dock.css b/packages/kilo-vscode/webview-ui/src/styles/permission-dock.css index f588a969134e..83df8c733813 100644 --- a/packages/kilo-vscode/webview-ui/src/styles/permission-dock.css +++ b/packages/kilo-vscode/webview-ui/src/styles/permission-dock.css @@ -131,6 +131,7 @@ font-size: var(--kilo-font-size-12); &[data-wrap] { + white-space: pre-wrap; overflow-wrap: anywhere; word-break: normal; } diff --git a/packages/opencode/src/kilocode/tool/agent-manager.ts b/packages/opencode/src/kilocode/tool/agent-manager.ts index a5fef9b17d20..6df15867d96b 100644 --- a/packages/opencode/src/kilocode/tool/agent-manager.ts +++ b/packages/opencode/src/kilocode/tool/agent-manager.ts @@ -281,18 +281,23 @@ export const AgentManagerTool = Tool.define< } } if (params.action === "prompt") { + const prompt = params.prompt.trim() yield* ctx.ask({ permission: "agent_manager", patterns: ["prompt"], always: ["prompt"], - metadata: { action: "prompt", sessionID: params.sessionID }, + metadata: { + action: "prompt", + sessionID: params.sessionID, + description: `Send a prompt to Agent Manager session ${params.sessionID}:\n\n${prompt}`, + }, }) const result = yield* run( host.request({ operation: "prompt", sessionID: ctx.sessionID, targetSessionID: params.sessionID, - prompt: params.prompt.trim(), + prompt, }), ctx.abort, ) diff --git a/packages/opencode/test/kilocode/agent-manager-tool.test.ts b/packages/opencode/test/kilocode/agent-manager-tool.test.ts index 7ac4e1cce27e..4c1bd467546f 100644 --- a/packages/opencode/test/kilocode/agent-manager-tool.test.ts +++ b/packages/opencode/test/kilocode/agent-manager-tool.test.ts @@ -501,7 +501,12 @@ describe("agent_manager tool", () => { await rt.dispose() }) - test("prompts one existing session with a separate mutation permission pattern", async () => { + test.each([ + { name: "single-line", prompt: "Continue the fix" }, + { name: "multiline", prompt: 'Review .\n\n Keep `code` and **markup** literal.' }, + { name: "long", prompt: "Review the next file.\n".repeat(500) + "Report the final result." }, + ])("previews the full $name prompt before sending it to one session", async (item) => { + const prompt = item.prompt const requests: unknown[] = [] const rt = makeRuntime("test", { request: (input) => @@ -519,8 +524,15 @@ describe("agent_manager tool", () => { const result = await rt.runPromise( provideTmpdirInstance(() => tool.execute( - { action: "prompt", sessionID: SessionID.make("ses_target"), prompt: " Continue the fix " }, - { ...ctx, ask: (input: unknown) => Effect.sync(() => permissions.push(input)) }, + { action: "prompt", sessionID: SessionID.make("ses_target"), prompt: ` ${prompt}\n ` }, + { + ...ctx, + ask: (input: unknown) => + Effect.sync(() => { + expect(requests).toEqual([]) + permissions.push(input) + }), + }, ), ).pipe(Effect.scoped), ) @@ -530,7 +542,11 @@ describe("agent_manager tool", () => { permission: "agent_manager", patterns: ["prompt"], always: ["prompt"], - metadata: { action: "prompt", sessionID: "ses_target" }, + metadata: { + action: "prompt", + sessionID: "ses_target", + description: `Send a prompt to Agent Manager session ses_target:\n\n${prompt}`, + }, }, ]) expect(requests).toEqual([ @@ -538,7 +554,7 @@ describe("agent_manager tool", () => { operation: "prompt", sessionID: ctx.sessionID, targetSessionID: "ses_target", - prompt: "Continue the fix", + prompt, }, ]) expect(result.title).toBe("Prompt accepted")