diff --git a/packages/kilo-ui/src/components/text-field.css b/packages/kilo-ui/src/components/text-field.css index 4b9d18e4321..12be2757517 100644 --- a/packages/kilo-ui/src/components/text-field.css +++ b/packages/kilo-ui/src/components/text-field.css @@ -6,7 +6,8 @@ border-radius: 2px; &:focus-within:not(:has([data-readonly])) { - box-shadow: 0 0 0 1px var(--border-focus); + border-color: var(--border-focus); + box-shadow: none; } } diff --git a/packages/kilo-vscode/src/KiloProvider.ts b/packages/kilo-vscode/src/KiloProvider.ts index 09b6327fee1..05f4c307923 100644 --- a/packages/kilo-vscode/src/KiloProvider.ts +++ b/packages/kilo-vscode/src/KiloProvider.ts @@ -233,6 +233,10 @@ export class KiloProvider implements vscode.WebviewViewProvider, TelemetryProper void this.handleLoadSessions() } + public openCloudSession(sessionId: string): void { + this.postMessage({ type: "openCloudSession", sessionId }) + } + /** * Attach to a webview that already has its own HTML set. * Sets up message handling and connection without overriding HTML content. diff --git a/packages/kilo-vscode/src/extension.ts b/packages/kilo-vscode/src/extension.ts index 866e495f503..def50b5c415 100644 --- a/packages/kilo-vscode/src/extension.ts +++ b/packages/kilo-vscode/src/extension.ts @@ -108,6 +108,20 @@ export function activate(context: vscode.ExtensionContext) { }), ) + // Register URI handler for session imports (vscode://kilocode.kilo-code/s/{sessionId}) + context.subscriptions.push( + vscode.window.registerUriHandler({ + async handleUri(uri: vscode.Uri) { + const match = uri.path.match(/^\/kilocode\/s\/([a-zA-Z0-9_-]+)$/) + if (!match) return + const sessionId = match[1] + console.log("[Kilo New] URI handler: opening cloud session:", sessionId) + await vscode.commands.executeCommand(`${KiloProvider.viewType}.focus`) + provider.openCloudSession(sessionId) + }, + }), + ) + // Register autocomplete provider registerAutocompleteProvider(context, connectionService) diff --git a/packages/kilo-vscode/webview-ui/src/App.tsx b/packages/kilo-vscode/webview-ui/src/App.tsx index 95f51747ff8..8de7e3d14f4 100644 --- a/packages/kilo-vscode/webview-ui/src/App.tsx +++ b/packages/kilo-vscode/webview-ui/src/App.tsx @@ -164,6 +164,11 @@ const AppContent: Component = () => { console.log("[Kilo New] App: 🧭 navigate:", message.view) setCurrentView(message.view as ViewType) } + if (message?.type === "openCloudSession" && message.sessionId) { + console.log("[Kilo New] App: ☁️ openCloudSession:", message.sessionId) + session.selectCloudSession(message.sessionId) + setCurrentView("newTask") + } } window.addEventListener("message", handler) onCleanup(() => window.removeEventListener("message", handler)) diff --git a/packages/kilo-vscode/webview-ui/src/types/messages.ts b/packages/kilo-vscode/webview-ui/src/types/messages.ts index 721cc46a44a..882e6f2e357 100644 --- a/packages/kilo-vscode/webview-ui/src/types/messages.ts +++ b/packages/kilo-vscode/webview-ui/src/types/messages.ts @@ -447,6 +447,11 @@ export interface CloudSessionImportFailedMessage { error: string } +export interface OpenCloudSessionMessage { + type: "openCloudSession" + sessionId: string +} + export interface ActionMessage { type: "action" action: string @@ -759,6 +764,7 @@ export type ExtensionMessage = | CloudSessionDataLoadedMessage | CloudSessionImportedMessage | CloudSessionImportFailedMessage + | OpenCloudSessionMessage | AgentManagerBranchesMessage | AgentManagerExternalWorktreesMessage | AgentManagerImportResultMessage