diff --git a/packages/kilo-vscode/src/agent-manager/AgentManagerProvider.ts b/packages/kilo-vscode/src/agent-manager/AgentManagerProvider.ts index 3cb37941533..424d0b54b07 100644 --- a/packages/kilo-vscode/src/agent-manager/AgentManagerProvider.ts +++ b/packages/kilo-vscode/src/agent-manager/AgentManagerProvider.ts @@ -250,6 +250,10 @@ export class AgentManagerProvider implements Disposable { this.openWorktreeDirectory(m.worktreeId) return null } + if (m.type === "agentManager.copyToClipboard") { + this.host.copyToClipboard(m.text) + return null + } if (m.type === "previewImage") { return msg } diff --git a/packages/kilo-vscode/src/agent-manager/host.ts b/packages/kilo-vscode/src/agent-manager/host.ts index 80d151ba8d4..34bbdd3b7f3 100644 --- a/packages/kilo-vscode/src/agent-manager/host.ts +++ b/packages/kilo-vscode/src/agent-manager/host.ts @@ -101,6 +101,9 @@ export interface Host { /** Get the CLI server port (for webview CSP). */ serverPort(): number | undefined + /** Copy text to the system clipboard. */ + copyToClipboard(text: string): void + /** Capture a telemetry event. */ capture(event: string, properties?: Record): void diff --git a/packages/kilo-vscode/src/agent-manager/types.ts b/packages/kilo-vscode/src/agent-manager/types.ts index c9ebb5dd12f..aeffd54bbce 100644 --- a/packages/kilo-vscode/src/agent-manager/types.ts +++ b/packages/kilo-vscode/src/agent-manager/types.ts @@ -262,6 +262,11 @@ interface OpenWorktreeIn { worktreeId: string } +interface CopyToClipboardIn { + type: "agentManager.copyToClipboard" + text: string +} + interface ShowExistingLocalTerminalIn { type: "agentManager.showExistingLocalTerminal" } @@ -462,6 +467,7 @@ export type AgentManagerInMessage = | ShowTerminalIn | ShowLocalTerminalIn | OpenWorktreeIn + | CopyToClipboardIn | ShowExistingLocalTerminalIn | RequestRepoInfoIn | CreateMultiVersionIn diff --git a/packages/kilo-vscode/src/agent-manager/vscode-host.ts b/packages/kilo-vscode/src/agent-manager/vscode-host.ts index f21e39bd0e6..f3f3a4c969f 100644 --- a/packages/kilo-vscode/src/agent-manager/vscode-host.ts +++ b/packages/kilo-vscode/src/agent-manager/vscode-host.ts @@ -152,6 +152,10 @@ export class VscodeHost implements Host { return this.connectionService.getServerInfo()?.port } + copyToClipboard(text: string): void { + void vscode.env.clipboard.writeText(text) + } + capture(event: string, properties?: Record): void { TelemetryProxy.capture(event as TelemetryEventName, properties) } diff --git a/packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx b/packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx index 8c69841d95a..49d7728424e 100644 --- a/packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx +++ b/packages/kilo-vscode/webview-ui/agent-manager/AgentManagerApp.tsx @@ -2340,7 +2340,9 @@ const AgentManagerContent: Component = () => { onCommitRename={() => commitRename(wt.id)} onCancelRename={cancelRename} onRemoveStale={() => confirmRemoveStaleWorktree(wt.id)} - onCopyPath={() => navigator.clipboard.writeText(wt.path)} + onCopyPath={() => + vscode.postMessage({ type: "agentManager.copyToClipboard", text: wt.path }) + } onOpen={() => vscode.postMessage({ type: "agentManager.openWorktree", worktreeId: wt.id }) } diff --git a/packages/kilo-vscode/webview-ui/src/types/messages.ts b/packages/kilo-vscode/webview-ui/src/types/messages.ts index bedfec5e918..34a85e8fa0e 100644 --- a/packages/kilo-vscode/webview-ui/src/types/messages.ts +++ b/packages/kilo-vscode/webview-ui/src/types/messages.ts @@ -1772,6 +1772,12 @@ export interface OpenWorktreeRequest { worktreeId: string } +// Copy text to the system clipboard via the extension host +export interface CopyToClipboardRequest { + type: "agentManager.copyToClipboard" + text: string +} + // Show existing local terminal when switching to local context (no-op if none exists) export interface ShowExistingLocalTerminalRequest { type: "agentManager.showExistingLocalTerminal" @@ -2096,6 +2102,7 @@ export type WebviewMessage = | ShowTerminalRequest | ShowLocalTerminalRequest | OpenWorktreeRequest + | CopyToClipboardRequest | ShowExistingLocalTerminalRequest | AgentManagerOpenFileRequest | CreateMultiVersionRequest