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")