mirror of
https://github.com/Kilo-Org/kilocode.git
synced 2026-08-30 17:14:40 +08:00
Merge branch 'main' into session/agent_2b4968a6-6808-4df7-9d6b-e11307fcadbb
This commit is contained in:
@@ -13,6 +13,7 @@ permissions:
|
||||
|
||||
jobs:
|
||||
close-non-compliant:
|
||||
if: false # kilocode_change - disabled: not needed in kilocode repo
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Close non-compliant issues and PRs after 2 hours
|
||||
|
||||
@@ -6,7 +6,7 @@ on:
|
||||
|
||||
jobs:
|
||||
check-duplicates:
|
||||
if: github.event.action == 'opened'
|
||||
if: false # kilocode_change - disabled: not needed in kilocode repo
|
||||
runs-on: blacksmith-4vcpu-ubuntu-2404
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
@@ -7,6 +7,7 @@ on:
|
||||
jobs:
|
||||
# kilocode_change start
|
||||
check-author:
|
||||
if: false # kilocode_change - disabled: not needed in kilocode repo
|
||||
uses: ./.github/workflows/check-org-member.yml
|
||||
with:
|
||||
username: ${{ github.event.pull_request.user.login }}
|
||||
@@ -16,7 +17,7 @@ jobs:
|
||||
|
||||
check-duplicates:
|
||||
needs: check-author
|
||||
if: needs.check-author.outputs['is-member'] == 'false'
|
||||
if: false # kilocode_change - disabled: not needed in kilocode repo
|
||||
# kilocode_change end
|
||||
runs-on: blacksmith-4vcpu-ubuntu-2404
|
||||
permissions:
|
||||
@@ -88,6 +89,7 @@ jobs:
|
||||
fi
|
||||
|
||||
add-contributor-label:
|
||||
if: false # kilocode_change - disabled: not needed in kilocode repo
|
||||
runs-on: blacksmith-2vcpu-ubuntu-2404 # kilocode_change
|
||||
permissions:
|
||||
pull-requests: write
|
||||
|
||||
@@ -7,6 +7,7 @@ on:
|
||||
jobs:
|
||||
# kilocode_change start
|
||||
check-author:
|
||||
if: false # kilocode_change - disabled: not needed in kilocode repo
|
||||
uses: ./.github/workflows/check-org-member.yml
|
||||
with:
|
||||
username: ${{ github.event.pull_request.user.login }}
|
||||
@@ -16,7 +17,7 @@ jobs:
|
||||
|
||||
check-standards:
|
||||
needs: check-author
|
||||
if: needs.check-author.outputs['is-member'] == 'false'
|
||||
if: false # kilocode_change - disabled: not needed in kilocode repo
|
||||
# kilocode_change end
|
||||
runs-on: blacksmith-4vcpu-ubuntu-2404
|
||||
permissions:
|
||||
|
||||
Vendored
+18
@@ -99,6 +99,24 @@
|
||||
"label": "VSCode - Tests (Composite)",
|
||||
"dependsOn": ["VSCode - Watch", "VSCode - Tests"],
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "install-dev-extension",
|
||||
"type": "shell",
|
||||
"command": "bun script/install-dev-extension.ts",
|
||||
"group": "build",
|
||||
"presentation": {
|
||||
"echo": true,
|
||||
"reveal": "always",
|
||||
"focus": false,
|
||||
"panel": "shared",
|
||||
"showReuseMessage": true,
|
||||
"clear": false
|
||||
},
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/packages/kilo-vscode"
|
||||
},
|
||||
"problemMatcher": []
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
},
|
||||
"packages/app": {
|
||||
"name": "@opencode-ai/app",
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"dependencies": {
|
||||
"@kilocode/kilo-i18n": "workspace:*",
|
||||
"@kilocode/kilo-ui": "workspace:*",
|
||||
@@ -77,7 +77,7 @@
|
||||
},
|
||||
"packages/desktop": {
|
||||
"name": "@opencode-ai/desktop",
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"dependencies": {
|
||||
"@opencode-ai/app": "workspace:*",
|
||||
"@opencode-ai/ui": "workspace:*",
|
||||
@@ -110,7 +110,7 @@
|
||||
},
|
||||
"packages/kilo-docs": {
|
||||
"name": "@kilocode/kilo-docs",
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"dependencies": {
|
||||
"@docsearch/css": "^4",
|
||||
"@docsearch/js": "^4",
|
||||
@@ -138,7 +138,7 @@
|
||||
},
|
||||
"packages/kilo-gateway": {
|
||||
"name": "@kilocode/kilo-gateway",
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"dependencies": {
|
||||
"@clack/prompts": "1.0.0-alpha.1",
|
||||
"@kilocode/plugin": "workspace:*",
|
||||
@@ -170,7 +170,7 @@
|
||||
},
|
||||
"packages/kilo-i18n": {
|
||||
"name": "@kilocode/kilo-i18n",
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"devDependencies": {
|
||||
"@tsconfig/node22": "catalog:",
|
||||
"@types/bun": "catalog:",
|
||||
@@ -180,7 +180,7 @@
|
||||
},
|
||||
"packages/kilo-telemetry": {
|
||||
"name": "@kilocode/kilo-telemetry",
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"dependencies": {
|
||||
"@kilocode/kilo-gateway": "workspace:*",
|
||||
"@opentelemetry/api": "1.9.0",
|
||||
@@ -200,7 +200,7 @@
|
||||
},
|
||||
"packages/kilo-ui": {
|
||||
"name": "@kilocode/kilo-ui",
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"dependencies": {
|
||||
"@kobalte/core": "0.13.11",
|
||||
},
|
||||
@@ -223,7 +223,7 @@
|
||||
},
|
||||
"packages/kilo-vscode": {
|
||||
"name": "kilo-code",
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"dependencies": {
|
||||
"@anthropic-ai/sdk": "^0.39.0",
|
||||
"@kilocode/kilo-i18n": "workspace:*",
|
||||
@@ -267,7 +267,7 @@
|
||||
},
|
||||
"packages/opencode": {
|
||||
"name": "@kilocode/cli",
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"bin": {
|
||||
"opencode": "./bin/opencode",
|
||||
},
|
||||
@@ -384,7 +384,7 @@
|
||||
},
|
||||
"packages/plugin": {
|
||||
"name": "@kilocode/plugin",
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"dependencies": {
|
||||
"@kilocode/sdk": "workspace:*",
|
||||
"zod": "catalog:",
|
||||
@@ -398,14 +398,14 @@
|
||||
},
|
||||
"packages/script": {
|
||||
"name": "@opencode-ai/script",
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"devDependencies": {
|
||||
"@types/bun": "catalog:",
|
||||
},
|
||||
},
|
||||
"packages/sdk/js": {
|
||||
"name": "@kilocode/sdk",
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"devDependencies": {
|
||||
"@hey-api/openapi-ts": "0.90.10",
|
||||
"@tsconfig/node22": "catalog:",
|
||||
@@ -416,7 +416,7 @@
|
||||
},
|
||||
"packages/ui": {
|
||||
"name": "@opencode-ai/ui",
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"dependencies": {
|
||||
"@kilocode/sdk": "workspace:*",
|
||||
"@kobalte/core": "catalog:",
|
||||
@@ -458,7 +458,7 @@
|
||||
},
|
||||
"packages/util": {
|
||||
"name": "@opencode-ai/util",
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"dependencies": {
|
||||
"zod": "catalog:",
|
||||
},
|
||||
@@ -488,7 +488,7 @@
|
||||
"@kobalte/core": "0.13.11",
|
||||
"@octokit/rest": "22.0.0",
|
||||
"@openauthjs/openauth": "0.0.0-20250322224806",
|
||||
"@pierre/diffs": "1.1.0-beta.13",
|
||||
"@pierre/diffs": "1.1.0-beta.17",
|
||||
"@playwright/test": "1.51.0",
|
||||
"@solid-primitives/storage": "4.3.3",
|
||||
"@solidjs/meta": "0.29.4",
|
||||
@@ -1254,7 +1254,9 @@
|
||||
|
||||
"@parcel/watcher-win32-x64": ["@parcel/watcher-win32-x64@2.5.1", "", { "os": "win32", "cpu": "x64" }, "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA=="],
|
||||
|
||||
"@pierre/diffs": ["@pierre/diffs@1.1.0-beta.13", "", { "dependencies": { "@shikijs/transformers": "^3.0.0", "diff": "8.0.3", "hast-util-to-html": "9.0.5", "lru_map": "0.4.1", "shiki": "^3.0.0" }, "peerDependencies": { "react": "^18.3.1 || ^19.0.0", "react-dom": "^18.3.1 || ^19.0.0" } }, "sha512-D35rxDu5V7XHX5aVGU6PF12GhscL+I+9QYgxK/i3h0d2XSirAxDdVNm49aYwlOhgmdvL0NbS1IHxPswVB5yJvw=="],
|
||||
"@pierre/diffs": ["@pierre/diffs@1.1.0-beta.17", "", { "dependencies": { "@pierre/theme": "0.0.22", "@shikijs/transformers": "^3.0.0", "diff": "8.0.3", "hast-util-to-html": "9.0.5", "lru_map": "0.4.1", "shiki": "^3.0.0" }, "peerDependencies": { "react": "^18.3.1 || ^19.0.0", "react-dom": "^18.3.1 || ^19.0.0" } }, "sha512-iUpiueYogZppIOs+vdZfR895nzfOfWeip0RwfezCJTAQOsfKblZtuc/wKS3IQjp2IN5bUaFhLr2ur9AwXowRUw=="],
|
||||
|
||||
"@pierre/theme": ["@pierre/theme@0.0.22", "", {}, "sha512-ePUIdQRNGjrveELTU7fY89Xa7YGHHEy5Po5jQy/18lm32eRn96+tnYJEtFooGdffrx55KBUtOXfvVy/7LDFFhA=="],
|
||||
|
||||
"@pinojs/redact": ["@pinojs/redact@0.4.0", "", {}, "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg=="],
|
||||
|
||||
|
||||
+4
-4
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"nodeModules": {
|
||||
"x86_64-linux": "sha256-utTYqUonliUhPsQ5poaFNqTDZwyrkumIJDyo/AO0P3g=",
|
||||
"aarch64-linux": "sha256-gb1iD6JhXoax9FO/rjai/fcn82PLLYUT385Aqwqvzh8=",
|
||||
"aarch64-darwin": "sha256-AjFreLPU98pmHR6l/pIfn0mHsQCoBD2dOqxt5CLZzk8=",
|
||||
"x86_64-darwin": "sha256-jPFXp0zKyisrbOr9daY1raXzFK5066b4dJDIJUOXkLE="
|
||||
"x86_64-linux": "sha256-IphXhm4kQf1MvCV7ScZICmc5aJnk0i4XmgJywMBcRis=",
|
||||
"aarch64-linux": "sha256-g3ycB5E4rSKeOVL+yq83JqXyZCrtG3qTzkBUsWAIrpo=",
|
||||
"aarch64-darwin": "sha256-dM0SDzJUUuJJ+Yp8iRQ8IXBcbVuLRA5JZL1Yt5fGwkU=",
|
||||
"x86_64-darwin": "sha256-39OwFt8bdClBPRdURrXZ6jTPHhYddkDqPpb5wrkoTlU="
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -33,7 +33,7 @@
|
||||
"@tsconfig/bun": "1.0.9",
|
||||
"@cloudflare/workers-types": "4.20251008.0",
|
||||
"@openauthjs/openauth": "0.0.0-20250322224806",
|
||||
"@pierre/diffs": "1.1.0-beta.13",
|
||||
"@pierre/diffs": "1.1.0-beta.17",
|
||||
"@solid-primitives/storage": "4.3.3",
|
||||
"@tailwindcss/vite": "4.1.11",
|
||||
"diff": "8.0.2",
|
||||
@@ -107,6 +107,6 @@
|
||||
"@openrouter/ai-sdk-provider@1.5.4": "patches/@openrouter%2Fai-sdk-provider@1.5.4.patch",
|
||||
"ghostty-web@0.3.0": "patches/ghostty-web@0.3.0.patch"
|
||||
},
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"peerDependencies": {}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@opencode-ai/app",
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"description": "",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@opencode-ai/desktop",
|
||||
"private": true,
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
id = "kilo"
|
||||
name = "Kilo"
|
||||
description = "The open source coding agent."
|
||||
version = "7.0.28"
|
||||
version = "7.0.29"
|
||||
schema_version = 1
|
||||
authors = ["Anomaly"]
|
||||
repository = "https://github.com/Kilo-Org/kilocode"
|
||||
@@ -11,26 +11,26 @@ name = "Kilo"
|
||||
icon = "./icons/opencode.svg"
|
||||
|
||||
[agent_servers.opencode.targets.darwin-aarch64]
|
||||
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.0.28/opencode-darwin-arm64.zip"
|
||||
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.0.29/opencode-darwin-arm64.zip"
|
||||
cmd = "./opencode"
|
||||
args = ["acp"]
|
||||
|
||||
[agent_servers.opencode.targets.darwin-x86_64]
|
||||
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.0.28/opencode-darwin-x64.zip"
|
||||
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.0.29/opencode-darwin-x64.zip"
|
||||
cmd = "./opencode"
|
||||
args = ["acp"]
|
||||
|
||||
[agent_servers.opencode.targets.linux-aarch64]
|
||||
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.0.28/opencode-linux-arm64.tar.gz"
|
||||
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.0.29/opencode-linux-arm64.tar.gz"
|
||||
cmd = "./opencode"
|
||||
args = ["acp"]
|
||||
|
||||
[agent_servers.opencode.targets.linux-x86_64]
|
||||
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.0.28/opencode-linux-x64.tar.gz"
|
||||
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.0.29/opencode-linux-x64.tar.gz"
|
||||
cmd = "./opencode"
|
||||
args = ["acp"]
|
||||
|
||||
[agent_servers.opencode.targets.windows-x86_64]
|
||||
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.0.28/opencode-windows-x64.zip"
|
||||
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.0.29/opencode-windows-x64.zip"
|
||||
cmd = "./opencode.exe"
|
||||
args = ["acp"]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@kilocode/kilo-docs",
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev --webpack --port 3002",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"$schema": "https://json.schemastore.org/package.json",
|
||||
"name": "@kilocode/kilo-gateway",
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"description": "Unified Kilo Gateway package for OpenCode - authentication, provider, and API integration",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"$schema": "https://json.schemastore.org/package.json",
|
||||
"name": "@kilocode/kilo-i18n",
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"description": "Kilo-specific i18n translations and overrides",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"$schema": "https://json.schemastore.org/package.json",
|
||||
"name": "@kilocode/kilo-telemetry",
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"description": "Telemetry for Kilo CLI - PostHog analytics integration",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@kilocode/kilo-ui",
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"exports": {
|
||||
|
||||
@@ -17,6 +17,8 @@ vsc-extension-quickstart.md
|
||||
**/.vscode-test.*
|
||||
AGENTS.md
|
||||
.prettierignore
|
||||
.env
|
||||
.env.*
|
||||
|
||||
# Include dist/ directory for compiled extension (production)
|
||||
!dist/**
|
||||
|
||||
@@ -1,23 +1,15 @@
|
||||
# Browser Session Controls
|
||||
|
||||
Interactive controls for browser automation sessions surfaced in the chat UI.
|
||||
**Priority:** P3
|
||||
**Status:** 🔨 Partial
|
||||
|
||||
## Location
|
||||
## What Exists
|
||||
|
||||
- Implied from browser session components (to be located/confirmed)
|
||||
`BrowserTab` settings UI has enable/disable toggle, system Chrome, and headless mode options. `BrowserAutomationService` handles Playwright MCP server registration. Browser tool calls appear as generic MCP tool entries in chat.
|
||||
|
||||
## Interactions
|
||||
## Remaining Work
|
||||
|
||||
- Interactive controls for browser automation sessions
|
||||
- In-chat browser session controls (start/stop/navigate)
|
||||
- Action replay and control buttons
|
||||
- Screenshot viewing
|
||||
|
||||
## Suggested migration
|
||||
|
||||
**Reimplement?** Likely yes (unless Kilo CLI adds browser tooling).
|
||||
|
||||
- This feature appears to be Kilo-specific (browser automation tools + UI controls). Kilo CLI’s standard surface area centers on sessions/messages/tools/permissions and does not obviously include browser automation.
|
||||
- If browser automation remains a required capability, plan to:
|
||||
- keep the existing Kilo browser toolchain in the extension host, or
|
||||
- implement an Kilo CLI tool/plugin that drives a browser and emits the same UI events currently expected by the webview.
|
||||
- Consider deferring until after Phase 3 (permissions) in [`docs/opencode-core/opencode-migration-plan.md`](docs/opencode-core/opencode-migration-plan.md:1).
|
||||
- Screenshot viewing within chat messages
|
||||
- Dedicated browser tool rendering (currently falls through to generic MCP tool display)
|
||||
|
||||
@@ -1,21 +1,26 @@
|
||||
# Checkpoint & Task Management
|
||||
|
||||
Checkpoint restore/navigation and task-level UX actions.
|
||||
**Priority:** P1
|
||||
**Status:** 🔨 Partial
|
||||
|
||||
## Location
|
||||
## What Exists
|
||||
|
||||
- Various checkpoint components
|
||||
- `CheckpointsTab` settings toggle to enable/disable snapshot creation before file edits (`config.snapshot`)
|
||||
|
||||
## Interactions
|
||||
## Remaining Work
|
||||
|
||||
### Backend / Service
|
||||
|
||||
- Checkpoint service with shadow git repo for per-task snapshots
|
||||
- Restore files only vs restore files + task state
|
||||
- Safety checks to avoid problematic paths/nested repos
|
||||
- Evaluate whether CLI session undo/redo/revert maps to Kilo's checkpoint model or if extension needs its own git-based implementation
|
||||
|
||||
### Chat UI
|
||||
|
||||
- Checkpoint restore dialogs
|
||||
- Checkpoint navigation menu
|
||||
- Checkpoint navigation menu / timeline
|
||||
- Diff viewing between checkpoints
|
||||
- "See New Changes" buttons to view git diffs for completed tasks
|
||||
|
||||
## Suggested migration
|
||||
|
||||
**Reimplement?** Partial.
|
||||
|
||||
- If “checkpoints” are implemented as Kilo-side git snapshots, they can remain a VS Code integration owned by the extension host (still valid under the new architecture).
|
||||
- If you want to align with Kilo CLI-native session operations (undo/redo/fork/diff), implement adapter support that maps those Kilo CLI session controls into existing Kilo UI affordances (or add new controls).
|
||||
- Kilo CLI references: session-level undo/redo/fork appear as first-class concepts in the app UI (see command labels in [`packages/app/src/i18n/en.ts`](https://github.com/Kilo-Org/kilocode/blob/main/packages/app/src/i18n/en.ts:1)) and diff rendering in [`packages/ui/src/components/session-turn.tsx`](https://github.com/Kilo-Org/kilocode/blob/main/packages/ui/src/components/session-turn.tsx:1).
|
||||
- Integration with CLI session undo/redo/fork operations
|
||||
- Consider reusing kilo-ui's `MessageNav` component (used by the desktop app but not yet by this extension)
|
||||
|
||||
@@ -1,32 +1,20 @@
|
||||
# Connection State UI (Loading / Error / Reconnecting)
|
||||
|
||||
**Priority:** P0
|
||||
**Status:** ❌ Not started
|
||||
**Source:** [JetBrains plugin analysis](../../LESSONS_LEARNED_JETBRAINS.md)
|
||||
**Status:** 🔨 Partial
|
||||
|
||||
## Description
|
||||
## What Exists
|
||||
|
||||
The chat view renders regardless of connection state. When the extension is connecting, reconnecting, or in an error state, users see an empty chat with no feedback. The UI should show appropriate loading spinners, error messages, and retry options.
|
||||
- `ServerProvider` tracks `connectionState` signal ("connecting"/"connected"/"disconnected"/"error")
|
||||
- `PromptInput` disables the textarea when disconnected and shows "Connecting to server..." placeholder
|
||||
- `AboutKiloCodeTab` shows a connection status dot
|
||||
|
||||
## Requirements
|
||||
## Remaining Work
|
||||
|
||||
- Show a loading spinner with "Connecting to Kilo..." when connection state is `"connecting"`
|
||||
- Show a reconnecting indicator when connection state is `"reconnecting"` (depends on [SSE Auto-Reconnect](../infrastructure/sse-auto-reconnect.md))
|
||||
- Show an error panel with message and "Retry" button when connection state is `"error"`
|
||||
- Show an initializing state while server is starting
|
||||
- Only render the chat interface when connection state is `"connected"`
|
||||
|
||||
## Current State
|
||||
|
||||
[`App.tsx`](../../webview-ui/src/App.tsx:83) renders `<ChatView />` unconditionally regardless of connection state. The [`server.tsx`](../../webview-ui/src/context/server.tsx:27) context tracks connection state but it's not used to gate the UI.
|
||||
|
||||
## Gaps
|
||||
|
||||
- No loading/connecting spinner
|
||||
- No error panel with retry
|
||||
- No reconnecting indicator
|
||||
- Chat renders even when disconnected — prompt input accepts text that can't be sent
|
||||
- The [`PromptInput`](../../webview-ui/src/components/chat/PromptInput.tsx) should be disabled when not connected
|
||||
- Loading spinner overlay with "Connecting to Kilo..." when state is `"connecting"`
|
||||
- Reconnecting indicator (depends on [SSE Auto-Reconnect](../infrastructure/sse-auto-reconnect.md) adding `"reconnecting"` state)
|
||||
- Error panel with message and "Retry" button when state is `"error"`
|
||||
- Gate the chat interface — only render when `"connected"`
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
@@ -48,6 +36,4 @@ The chat view renders regardless of connection state. When the extension is conn
|
||||
Files to change:
|
||||
|
||||
- [`webview-ui/src/App.tsx`](../../webview-ui/src/App.tsx) or [`webview-ui/src/components/chat/ChatView.tsx`](../../webview-ui/src/components/chat/ChatView.tsx) — add connection state gating
|
||||
- New file `webview-ui/src/components/LoadingPanel.tsx` — loading spinner component
|
||||
- New file `webview-ui/src/components/ErrorPanel.tsx` — error display with retry
|
||||
- [`webview-ui/src/styles/chat.css`](../../webview-ui/src/styles/chat.css) — styles for loading/error states
|
||||
- New components for loading/error panels (consider kilo-ui `Spinner` and `Card`)
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
# Context Menus & Tooltips (Webview)
|
||||
|
||||
Right-click/context actions and tooltip affordances within the chat webview UI.
|
||||
|
||||
> **Note:** For VS Code-native context menus (editor right-click, terminal right-click, code action lightbulb), see [Editor Context Menus & Code Actions](../non-agent-features/editor-context-menus-and-code-actions.md).
|
||||
|
||||
## Scope
|
||||
|
||||
This document covers **webview-internal** context menus and tooltips — i.e., right-click menus and hover tooltips rendered inside the Kilo Code chat panel.
|
||||
|
||||
## Current State
|
||||
|
||||
- kilo-ui provides `Tooltip` and `Popover` components, already in use throughout the webview (TaskHeader, ModelSelector, etc.)
|
||||
- No webview-internal right-click context menu exists yet
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Add hover tooltips with explanatory text for all interactive buttons in the chat UI
|
||||
- Implement right-click context menus on chat messages (copy, retry, edit, delete)
|
||||
- Consider context menus on code blocks (copy code, insert at cursor, apply diff)
|
||||
|
||||
## Location
|
||||
|
||||
- [`webview-ui/src/components/common/ContextMenu.tsx`](../../webview-ui/src/components/common/ContextMenu.tsx:1)
|
||||
- kilo-ui `Tooltip` component usage throughout webview
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
These are presentation-layer affordances; the CLI backend is not involved. kilo-ui already provides the tooltip infrastructure needed.
|
||||
@@ -1,33 +0,0 @@
|
||||
# File Permission Dialogs
|
||||
|
||||
Batch approval UI for file read operations.
|
||||
|
||||
## Location
|
||||
|
||||
Permissions are now rendered through kilo-ui's `DataProvider` pattern using `Dialog` + `BasicTool` + `data-component="permission-prompt"`. There is no standalone `BatchFilePermission.tsx` — the permission UI is integrated into the kilo-ui message rendering pipeline.
|
||||
|
||||
## Interactions
|
||||
|
||||
- Batch file read approval interface
|
||||
- Per-file permission management
|
||||
- Approve/deny multiple file read requests
|
||||
|
||||
## Suggested migration
|
||||
|
||||
**Reimplement?** Partial (UI can stay; semantics need remapping).
|
||||
|
||||
- Kilo CLI uses a permission-request queue (asked/replied) model; the extension host must translate Kilo CLI permission events into Kilo's existing approval UX per [`docs/opencode-core/opencode-migration-plan.md`](docs/opencode-core/opencode-migration-plan.md:1).
|
||||
- If Kilo CLI permission prompts are per-tool-call (not "batch per-file"), you may need to:
|
||||
- either keep a batch UI but respond to permissions one-by-one, or
|
||||
- simplify the UI to match Kilo CLI's permission granularity.
|
||||
- Kilo CLI UI reference: permission prompt actions exist in [`packages/ui/src/components/message-part.tsx`](https://github.com/Kilo-Org/kilocode/blob/main/packages/ui/src/components/message-part.tsx:1).
|
||||
|
||||
## TODO: Render permissions inline instead of in a modal Dialog
|
||||
|
||||
Both the desktop app ([`packages/app/src/pages/session.tsx:2727-2774`](../../packages/app/src/pages/session.tsx:2727)) and the old extension render permission prompts **inline in the prompt area**, replacing the text input while a permission is pending. The current vscode rebuild uses a modal `Dialog` wrapper instead.
|
||||
|
||||
This should be changed to match the inline pattern:
|
||||
|
||||
- Render the `BasicTool` + `permission-prompt` block in the prompt dock area (where `PromptInput` sits), conditionally replacing the input when `permissions().length > 0`.
|
||||
- Remove the `Dialog` / `useDialog()` wrapper.
|
||||
- This also enables the prompt area to naturally block user input while permissions are pending, matching the app's `blocked()` memo pattern.
|
||||
@@ -1,25 +0,0 @@
|
||||
# Follow-Up Questions
|
||||
|
||||
Suggested replies presented as interactive chips/buttons.
|
||||
|
||||
## Location
|
||||
|
||||
- [`webview-ui/src/components/chat/FollowUpSuggest.tsx`](../../webview-ui/src/components/chat/FollowUpSuggest.tsx:1)
|
||||
|
||||
## Interactions
|
||||
|
||||
- Click to submit suggested response
|
||||
- Shift-click or dedicated button to copy suggestion to chat input
|
||||
- Mode indicators for suggestions that switch modes
|
||||
- Auto-approval countdown timer (default 60s) for automatic selection
|
||||
- Timer cancellation on user interaction (pausing input or selecting suggestion)
|
||||
|
||||
## Suggested migration
|
||||
|
||||
**Reimplement?** Likely yes (feature may not exist in Kilo CLI).
|
||||
|
||||
- This feature requires explicit “suggestions” data. Kilo CLI’s core API/events focus on sessions/messages/permissions; follow-up suggestion generation is not obviously part of that contract.
|
||||
- Options:
|
||||
- Keep the current Kilo-side follow-up suggestion generation (if it’s already Kilo-generated), or
|
||||
- Add an adapter step that asks Kilo CLI for suggested follow-ups after a turn completes (and then surfaces them to the webview).
|
||||
- Treat this as **non-blocking** for Phase 2 MVP in [`docs/opencode-core/opencode-migration-plan.md`](docs/opencode-core/opencode-migration-plan.md:1) unless UX parity requires it immediately.
|
||||
@@ -1,24 +0,0 @@
|
||||
# Inline Actions on Tool Messages
|
||||
|
||||
Inline affordances on tool messages to navigate, inspect, and track progress.
|
||||
|
||||
## Location
|
||||
|
||||
- Various tool message components
|
||||
|
||||
## Interactions
|
||||
|
||||
- **FastApplyResult Display**: Shows results of fast-apply operations
|
||||
- **Jump to File**: Opens files directly from file operation messages
|
||||
- **External Link Icons**: Navigate to related files/resources
|
||||
- **Progress Indicators**: Real-time status for long-running operations
|
||||
|
||||
## Suggested migration
|
||||
|
||||
**Reimplement?** Partial.
|
||||
|
||||
- Inline actions are mostly presentation-layer, but they depend on tool/result metadata being present in the message stream.
|
||||
- With Kilo CLI owning orchestration, ensure the adapter:
|
||||
- preserves tool-call identifiers and status transitions (start/progress/finish) so existing progress indicators continue to work,
|
||||
- preserves file/diff references so jump-to-file and diff UIs remain functional.
|
||||
- Kilo CLI UI reference: tool-part wrappers and permission prompts live in [`packages/ui/src/components/message-part.tsx`](https://github.com/Kilo-Org/kilocode/blob/main/packages/ui/src/components/message-part.tsx:1), which is a good reference for the minimal metadata needed to support inline actions.
|
||||
@@ -2,10 +2,12 @@
|
||||
|
||||
Interactive actions around Mermaid diagram rendering, error handling, and AI-assisted fixes.
|
||||
|
||||
## Location
|
||||
## Location (kilocode-legacy)
|
||||
|
||||
- [`webview-ui/src/components/common/MermaidBlock.tsx`](../../webview-ui/src/components/common/MermaidBlock.tsx:1)
|
||||
- [`webview-ui/src/components/common/MermaidButton.tsx`](../../webview-ui/src/components/common/MermaidButton.tsx:1)
|
||||
These components exist in the [kilocode-legacy](https://github.com/Kilo-Org/kilocode-legacy) repo, not in this extension:
|
||||
|
||||
- `webview-ui/src/components/common/MermaidBlock.tsx`
|
||||
- `webview-ui/src/components/common/MermaidButton.tsx`
|
||||
|
||||
## Interactions
|
||||
|
||||
@@ -24,4 +26,4 @@ Interactive actions around Mermaid diagram rendering, error handling, and AI-ass
|
||||
- The **"Fix with AI"** action currently relies on Kilo-side AI plumbing. With the agent runtime moving to Kilo CLI per [`docs/opencode-core/opencode-migration-plan.md`](docs/opencode-core/opencode-migration-plan.md:1), you likely need to re-route this button to:
|
||||
- either a dedicated Kilo CLI prompt/tool that returns corrected Mermaid source, or
|
||||
- a small Kilo-side helper that asks Kilo CLI to fix the snippet (so the button remains functional without the legacy Kilo orchestration loop).
|
||||
- Kilo CLI UI doesn’t appear to ship an equivalent Mermaid renderer/fixer (only a Mermaid file icon is present in [`packages/ui/src/components/file-icons/types.ts`](https://github.com/Kilo-Org/kilocode/blob/main/packages/ui/src/components/file-icons/types.ts:1)).
|
||||
- Kilo CLI UI doesn't appear to ship an equivalent Mermaid renderer/fixer (only a Mermaid file icon is present in [`packages/ui/src/components/file-icons/types.ts`](https://github.com/Kilo-Org/kilocode/blob/main/packages/ui/src/components/file-icons/types.ts:1)).
|
||||
|
||||
@@ -1,27 +1,13 @@
|
||||
# Message Editing & Management
|
||||
|
||||
Interactive editing and message management for user-authored messages.
|
||||
**Priority:** P1
|
||||
**Status:** ❌ Not started
|
||||
|
||||
## Location
|
||||
## Remaining Work
|
||||
|
||||
- [`webview-ui/src/components/chat/ChatRow.tsx`](../../webview-ui/src/components/chat/ChatRow.tsx:1)
|
||||
|
||||
## Interactions
|
||||
|
||||
- Edit user messages inline with full chat input features
|
||||
- Edit user messages inline (with full chat input features — mode selector, image attachments, cancel/save)
|
||||
- Delete user messages from conversation
|
||||
- Click-to-edit on message text
|
||||
- Mode selector integration during edit
|
||||
- Image attachment support during edit
|
||||
- Cancel/Save actions
|
||||
- Optional timestamp display
|
||||
|
||||
## Suggested migration
|
||||
|
||||
**Reimplement?** **Partial** (depends on who owns history).
|
||||
|
||||
- If Kilo CLI becomes the source of truth for session history, Kilo can’t “just edit/delete locally” anymore; it needs adapter support to express edits as Kilo CLI session operations.
|
||||
- Recommended approach:
|
||||
- Keep the current UI affordances.
|
||||
- Implement edit/delete by mapping to Kilo CLI session operations (e.g. revert/undo/fork-from-message + re-run) as part of the extension-host adapter described in [`docs/opencode-core/opencode-migration-plan.md`](docs/opencode-core/opencode-migration-plan.md:1).
|
||||
- Kilo CLI’s app UI includes session-level undo/redo/fork concepts (see command labels in [`packages/app/src/i18n/en.ts`](https://github.com/Kilo-Org/kilocode/blob/main/packages/app/src/i18n/en.ts:1)), which suggests parity exists at the session-operation layer, but not necessarily “inline edit message text”.
|
||||
- Timestamp display on messages
|
||||
- Redo previous message via up-arrow key
|
||||
- Map edit/delete to CLI session operations (fork-from-message + re-run) since CLI is the source of truth for session history
|
||||
|
||||
@@ -1,24 +1,17 @@
|
||||
# Special Content Types
|
||||
|
||||
Interactive elements for specialized message content beyond plain markdown/code.
|
||||
**Priority:** P1
|
||||
**Status:** 🔨 Partial
|
||||
|
||||
## Location
|
||||
## What Exists
|
||||
|
||||
Content type rendering is now handled by kilo-ui's `<KiloMessage>` component which includes renderers for reasoning blocks, tool results, and other part types. The old standalone components (`ReasoningBlock`, `OpenMarkdownPreviewButton`, etc.) don't exist in the new extension.
|
||||
- Reasoning blocks render as collapsible sections via `PART_MAPPING["reasoning"]`
|
||||
- Rich per-tool renderers for read, edit, write, apply_patch, bash, glob, grep, webfetch, task, todowrite, todoread, question
|
||||
- Error cards with icon, title, and message via `Card variant="error"`
|
||||
- Unregistered/MCP tools fall through to `GenericTool` display
|
||||
|
||||
## Interactions
|
||||
## Remaining Work
|
||||
|
||||
- **OpenMarkdownPreviewButton**: Opens markdown in VS Code preview
|
||||
- **ReasoningBlock**: Collapsible AI reasoning display
|
||||
- **MCP Tool/Resource Rows**: Interactive MCP server tool execution
|
||||
- **Error Rows**: Expandable error details with copy functionality
|
||||
|
||||
## Suggested migration
|
||||
|
||||
**Reimplement?** Mixed.
|
||||
|
||||
- UI components like collapsible reasoning and expandable errors can remain in the webview.
|
||||
- MCP tool/resource interactions should be revalidated:
|
||||
- If the extension remains the MCP host, keep current behavior.
|
||||
- If MCP moves to Kilo CLI (`GET /mcp` / `POST /mcp` are referenced in [`docs/opencode-core/opencode-migration-plan.md`](docs/opencode-core/opencode-migration-plan.md:1)), you’ll need adapter work to map Kilo CLI MCP events/results into the existing Kilo MCP rows.
|
||||
- “Open markdown preview in VS Code” is inherently a VS Code integration; keep it in the extension/webview.
|
||||
- Copy button on error cards (error text displays but no dedicated copy action)
|
||||
- Dedicated MCP tool/resource rows with specialized rendering (beyond generic fallback)
|
||||
- "Open markdown preview" button (opens rendered markdown in VS Code's preview pane)
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
# Toggle Thinking
|
||||
|
||||
**Priority:** P2
|
||||
**Status:** 🔨 Partial (linked)
|
||||
|
||||
## Description
|
||||
|
||||
Allow users to enable or disable "thinking" (extended reasoning) for models that support it.
|
||||
|
||||
## Requirements
|
||||
|
||||
- Toggle control to enable/disable thinking mode
|
||||
- When thinking is enabled, model uses extended reasoning (e.g., Claude's extended thinking)
|
||||
- When thinking is disabled, model responds without extended thinking
|
||||
- Toggle should be accessible from the chat UI (e.g., in prompt input area or task header)
|
||||
- Setting should persist across sessions
|
||||
|
||||
## Current State
|
||||
|
||||
Reasoning/thinking blocks already render in the chat (collapsible sections in [`Message.tsx`](../../webview-ui/src/components/chat/Message.tsx)). A linked PR (#127) exists suggesting work is in progress.
|
||||
|
||||
## Gaps
|
||||
|
||||
- No toggle control in the UI to enable/disable thinking
|
||||
- No setting persistence for thinking preference
|
||||
- Need to determine how to pass thinking preference to CLI backend
|
||||
@@ -0,0 +1,29 @@
|
||||
# Re-add Architect Mode / Enhance Plan Mode to Write Plan Files
|
||||
|
||||
**Priority:** P2
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [#6230](https://github.com/Kilo-Org/kilocode/issues/6230)
|
||||
|
||||
## Problem
|
||||
|
||||
The old Kilo Code extension had an "Architect mode" that would write the resulting plan as a `.md` file into a `/plans` directory in the project root. Users adopted this workflow and now miss it.
|
||||
|
||||
The new extension has Plan mode, but plans are stored only inside `.opencode/` — not as human-readable `.md` files in the project. Users can't see or reference their plans easily.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
Options (pick one or combine):
|
||||
|
||||
1. **Enhance Plan mode** — After a plan is finalized, automatically write it as a `.md` file to a `/plans` directory in the project root. The filename could be based on the plan title or a timestamp. This happens in addition to the internal `.opencode/` storage.
|
||||
|
||||
2. **Re-add Architect mode** — Add a distinct "Architect" mode that is specifically focused on writing plans as `.md` files to `/plans`.
|
||||
|
||||
3. **Prompt Plan mode** — When finishing a plan, offer the user a choice: "Save plan to `/plans/plan-name.md`?" with accept/dismiss.
|
||||
|
||||
Option 3 is the least disruptive. The recommended approach is to add an "Export plan" action button in the Plan mode UI that saves the current plan to `/plans/`.
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- This requires CLI-side changes to the Plan mode behavior and/or an extension-side "export plan" button
|
||||
- The plan content is available in the session; extracting it requires identifying what parts constitute the plan output
|
||||
- `/plans/` directory creation should be done safely (don't overwrite existing files without confirmation)
|
||||
@@ -0,0 +1,24 @@
|
||||
# Ask Mode Should Not Make Edits
|
||||
|
||||
**Priority:** P1
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [#6235](https://github.com/Kilo-Org/kilocode/issues/6235)
|
||||
|
||||
## Problem
|
||||
|
||||
In Ask mode, the agent is supposed to answer questions and discuss code without making any file edits. However, it has been observed making edits anyway. This violates the expected behavior of Ask mode and can surprise users who switch to Ask mode specifically to avoid accidental changes.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Review the Ask mode system prompt and tool configuration in `packages/opencode/src/`
|
||||
- Ensure that in Ask mode, the file write/edit tools (`write_file`, `edit_file`, `fast_edit`, etc.) are either:
|
||||
- Removed from the available tool set entirely for Ask mode sessions, or
|
||||
- The system prompt explicitly and firmly instructs the model not to use them
|
||||
- The preferred fix is to disable the write tools at the tool configuration level, not just via prompt instruction, since models can sometimes ignore prompt-level restrictions
|
||||
- Verify that read-only tools (read file, list directory, grep, etc.) remain available in Ask mode
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- Mode-specific tool availability is configured in the CLI's mode/agent setup
|
||||
- Look for where the tool list is assembled for a session based on the active mode in `packages/opencode/src/`
|
||||
- This is a CLI-side change; no extension-side changes needed
|
||||
@@ -0,0 +1,24 @@
|
||||
# /init Pre-Commit Secret Check
|
||||
|
||||
**Priority:** P2
|
||||
**Status:** 🔨 Partial (assigned)
|
||||
**Issue:** [#6077](https://github.com/Kilo-Org/kilocode/issues/6077)
|
||||
|
||||
## Problem
|
||||
|
||||
The `/init` command sets up a project for agentic engineering. As a security best practice, it should check whether the repository has a pre-commit secret scanning hook configured (e.g., `detect-secrets`, `gitleaks`, or `pre-commit` framework hooks). If not, it should suggest adding one.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- In the CLI's `/init` command implementation (`packages/opencode/`), after writing AGENTS.md and other init files, check if the repository has:
|
||||
- A `.pre-commit-config.yaml` with a secret scanning hook
|
||||
- A `.git/hooks/pre-commit` file
|
||||
- A `detect-secrets` baseline file (`.secrets.baseline`)
|
||||
- If none are found, output a recommendation to the user with a brief explanation and a link to getting started with `detect-secrets` or `gitleaks`
|
||||
- Optionally: offer to install `detect-secrets` as part of the init flow (with user confirmation)
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- This is a CLI-side change in `packages/opencode/src/`
|
||||
- The extension surfaces the `/init` command through the chat interface; the output will appear as agent output in the chat
|
||||
- The check should be informational (a warning/suggestion), not a hard failure that blocks init
|
||||
@@ -0,0 +1,23 @@
|
||||
# Plan Mode Over-Prompting to Implement
|
||||
|
||||
**Priority:** P1
|
||||
**Status:** 🔨 Partial (assigned)
|
||||
**Issue:** [#6143](https://github.com/Kilo-Org/kilocode/issues/6143)
|
||||
|
||||
## Problem
|
||||
|
||||
In Plan mode, the agent repeatedly asks "Should I implement this?" even when the user wants to continue refining the plan. This interrupts the planning workflow and is frustrating for users who want to stay in discussion mode.
|
||||
|
||||
The agent appears to have been over-prompted toward implementation in a recent change to the Plan mode system prompt.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Review the Plan mode system prompt in `packages/opencode/src/` for language that encourages the agent to switch to implementation
|
||||
- The prompt should make clear that in Plan mode, the agent's job is to help create and refine a plan — not to implement it. The user explicitly controls when to switch to implementation
|
||||
- The "Should I implement this?" question should be asked at most once, after the plan appears settled — not repeatedly during ongoing discussion
|
||||
- Consider: the question should only appear if the user hasn't already answered "no" in the current conversation
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- This is a CLI-side change to the mode prompt in `packages/opencode/src/`
|
||||
- Coordinate with the team on what the correct Plan mode behavior should be before changing the prompt
|
||||
@@ -0,0 +1,24 @@
|
||||
# Autocomplete Broken Notice — Settings Link Not Clickable
|
||||
|
||||
**Priority:** P1
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [#6284](https://github.com/Kilo-Org/kilocode/issues/6284)
|
||||
|
||||
## Problem
|
||||
|
||||
The VS Code status bar or a notification reports that autocomplete is broken, but the "settings" link in the message is not clickable. Users cannot navigate to the autocomplete settings to fix the issue.
|
||||
|
||||
Additionally, the autocomplete model selector shows no model selected even though the user has not changed any autocomplete settings.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Fix the "settings" link in the autocomplete broken notice: it should navigate to the Autocomplete tab in the Settings view
|
||||
- If the link is inside the webview, ensure it fires the correct navigation action
|
||||
- If it is a VS Code notification or status bar item, use `vscode.commands.executeCommand` to open the settings view on the autocomplete tab
|
||||
- Investigate why the autocomplete model selector shows "no model selected" for users who haven't explicitly configured it — add a sensible default fallback
|
||||
- Check whether the "autocomplete broken" state is correctly detected and cleared when the user fixes the configuration
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- The autocomplete status lives in the status bar item registered by the extension
|
||||
- The "settings" link may need to be a command URI (`vscode:command:kilo-code.new.openSettings?tab=autocomplete`) rather than a plain text link
|
||||
@@ -0,0 +1,33 @@
|
||||
# Surface CLI Startup Errors in the Extension
|
||||
|
||||
**Priority:** P1
|
||||
**Status:** 🔨 Partial (assigned)
|
||||
**Issue:** [#6209](https://github.com/Kilo-Org/kilocode/issues/6209)
|
||||
|
||||
## Problem
|
||||
|
||||
If the CLI fails to start (e.g., due to a malformed `opencode.json`, missing binary, or port conflict), the extension gets stuck on "connecting to the server..." indefinitely. The user receives no feedback about what went wrong.
|
||||
|
||||
Common failure cases:
|
||||
|
||||
- Malformed `opencode.json` — CLI exits immediately with a JSON parse error
|
||||
- Missing or corrupted CLI binary at `bin/kilo`
|
||||
- Another process already holding the port
|
||||
- OS permission denied when trying to execute the binary
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- In `ServerManager`, detect when the CLI process exits unexpectedly (before a port is announced)
|
||||
- Capture the last N lines of stderr output from the process
|
||||
- Show a clear error notification to the user:
|
||||
- `vscode.window.showErrorMessage('Kilo Code: Failed to start CLI server. ' + reason, 'Show Logs', 'Retry')`
|
||||
- "Show Logs" should open the extension's output channel with the full stderr
|
||||
- "Retry" should attempt to restart the CLI process
|
||||
- Update the `ConnectionState` to a `'failed'` state and show it in the webview (currently only `'connecting'`, `'connected'`, `'disconnected'` states exist)
|
||||
- For the specific case of malformed config: parse the error message and show a human-readable hint ("Your opencode.json appears to be invalid JSON. Open it to fix?")
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- The `ServerManager.start()` method currently waits for a port line on stdout; add a `process.on('exit', ...)` handler to detect premature exit
|
||||
- Use the existing output channel from the [Dedicated Output Channel](../infrastructure/dedicated-output-channel.md) work for "Show Logs"
|
||||
- See also: [#6146 Propagate CLI Errors](propagate-cli-errors-to-ui.md) for the general error propagation case
|
||||
@@ -0,0 +1,22 @@
|
||||
# Extension View Doesn't Refresh on Restart/Update
|
||||
|
||||
**Priority:** P1
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [#6086](https://github.com/Kilo-Org/kilocode/issues/6086)
|
||||
|
||||
## Problem
|
||||
|
||||
When the extension updates and VS Code restarts the extensions, an already-open Kilo Code webview panel does not reload. It continues showing the old version's UI until the user manually closes and reopens the panel.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Subscribe to `vscode.extensions.onDidChange` to detect when an extension is updated
|
||||
- When the Kilo Code extension itself is updated (compare version strings), force-reload the webview panel: dispose the existing panel and recreate it
|
||||
- Alternatively, post a message to the webview to trigger a page reload (`panel.webview.postMessage({ type: 'reload' })`) and handle it in the webview with `window.location.reload()`
|
||||
- If the extension host restarts (not just the webview), the `activate()` function will re-run — ensure the panel is properly disposed and recreated in this case too
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- `vscode.extensions.onDidChange` fires when extension installations change
|
||||
- The webview panel object (`KiloProvider.panel`) should be checked for staleness after an extension host restart
|
||||
- A simpler approach: on activation, if a previously-persisted panel view state exists, recreate the panel fresh instead of restoring the stale one
|
||||
@@ -0,0 +1,24 @@
|
||||
# CPU Spike / Crash When Switching Pre-Release ↔ Release
|
||||
|
||||
**Priority:** P0
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [#6083](https://github.com/Kilo-Org/kilocode/issues/6083)
|
||||
|
||||
## Problem
|
||||
|
||||
When users switch between the release and pre-release versions of the extension, VS Code crashes or experiences significant CPU consumption (2–3 minutes of high CPU) before recovering. This is a blocking issue for pre-release users.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Reproduce: install the release version, then switch to pre-release (or vice versa) via the VS Code extensions panel
|
||||
- Profile the CPU usage during the switch to identify what is spinning
|
||||
- Hypothesis: both extension versions may attempt to spawn `kilo serve` simultaneously, causing port conflicts or race conditions in the process lifecycle code
|
||||
- Check `ServerManager` for guard conditions: does it handle the case where a `kilo serve` process is already running (e.g., from the other version)?
|
||||
- Ensure proper cleanup when the extension deactivates: the old version's `kilo serve` child process must be terminated before the new version starts
|
||||
- Check for file lock conflicts on shared state (e.g., both versions trying to read/write `agent-manager.json` or the same CLI config)
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- The extension's `deactivate()` hook in `src/extension.ts` should fully terminate the server process and release any file handles
|
||||
- Test by: (1) installing release, opening it, then switching to pre-release, and (2) the reverse
|
||||
- The fix may be entirely in `ServerManager.ts` — ensure it kills the child process synchronously on deactivate
|
||||
@@ -0,0 +1,27 @@
|
||||
# Propagate All CLI Errors to the UI
|
||||
|
||||
**Priority:** P1
|
||||
**Status:** 🔨 Partial (assigned)
|
||||
**Issue:** [#6146](https://github.com/Kilo-Org/kilocode/issues/6146)
|
||||
|
||||
## Problem
|
||||
|
||||
Errors that occur inside the CLI (e.g., TypeScript compilation failures, missing dependencies, tool errors) are not surfaced in the chat UI. The extension silently shows no response, leaving users with no indication of what went wrong.
|
||||
|
||||
Example: in a fresh clone without `bun install`, the CLI fails with a module resolution error. The extension shows nothing — the user has to run the CLI manually to discover the problem.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Intercept CLI error output (stderr) in `ServerManager` and/or `KiloConnectionService`
|
||||
- Surface errors to the user in one or more ways:
|
||||
1. Show a VS Code error notification for critical/startup errors (`vscode.window.showErrorMessage`)
|
||||
2. For errors that occur mid-session, inject an error message into the chat UI as a system message
|
||||
3. Ensure the CLI's error SSE events are forwarded to the webview and rendered as error cards
|
||||
- Distinguish between startup errors (before connection is established) and runtime errors (during a session)
|
||||
- For startup errors: capture stderr output from the CLI process in `ServerManager` and show it to the user with a "Show details" button
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- `ServerManager` already captures the process stdout for port detection; extend it to also capture stderr
|
||||
- If the process exits with a non-zero code, show `vscode.window.showErrorMessage` with the last N lines of stderr
|
||||
- See also: [#6209 CLI Startup Errors](cli-startup-errors.md) which covers the specific startup error case
|
||||
@@ -0,0 +1,29 @@
|
||||
# Anonymous Sign-In Prompts
|
||||
|
||||
**Priority:** P1
|
||||
**Status:** 🔨 Partial (assigned)
|
||||
**Issue:** [#6082](https://github.com/Kilo-Org/kilocode/issues/6082)
|
||||
|
||||
## Problem
|
||||
|
||||
Anonymous (unauthenticated) users must be prompted to sign up when they hit usage limits:
|
||||
|
||||
1. When they try to use a paid/non-free model
|
||||
2. When they exceed 100 messages in anonymous mode
|
||||
|
||||
The new extension does not yet show these prompts. Users either get a silent failure or a generic error.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Detect when the current user is anonymous (check auth state from the CLI or extension auth service)
|
||||
- Show a sign-in prompt in the chat UI when:
|
||||
- The user selects a paid model and is anonymous
|
||||
- The user sends a message and has exceeded the 100-message anonymous limit
|
||||
- The prompt should explain the limit, offer a "Sign In" button that triggers the existing auth flow, and a "Dismiss" option
|
||||
- Match the tone and copy from the legacy extension's equivalent prompts
|
||||
- The check can be done client-side (extension knows auth state) or by intercepting a 402/403 response from the CLI
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- Auth state is available via the extension's `KiloConnectionService` or the profile endpoint
|
||||
- A modal or inline banner in the chat are both reasonable UI patterns; the legacy extension used an inline banner
|
||||
@@ -0,0 +1,32 @@
|
||||
# Custom OpenAI-Compatible Provider UI
|
||||
|
||||
**Priority:** P1
|
||||
**Status:** 🔨 Partial (assigned)
|
||||
**Issue:** [#6163](https://github.com/Kilo-Org/kilocode/issues/6163)
|
||||
|
||||
## What Exists
|
||||
|
||||
The Settings → Providers tab shows the list of built-in providers and lets users enable/disable them and set API keys. There is no UI for adding custom OpenAI-compatible providers (e.g., Ollama, LM Studio, enterprise endpoints). Users must manually edit `opencode.json`.
|
||||
|
||||
The web/TUI app (`packages/app`) already has a full custom provider dialog (`dialog-custom-provider.tsx`) with form validation.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Port the `DialogCustomProvider` component from `packages/app/src/components/dialog-custom-provider.tsx` to the extension's webview
|
||||
- Add a "Add custom provider" button to the Providers tab in the Settings view
|
||||
- The dialog should collect:
|
||||
- Provider ID (unique identifier)
|
||||
- Display name
|
||||
- Base URL (with format validation)
|
||||
- API key (supports `{env:VAR_NAME}` syntax)
|
||||
- One or more model entries (model ID + display name)
|
||||
- Optional: custom HTTP headers
|
||||
- On save, write the new provider to the CLI config via the existing `handleUpdateConfig()` endpoint (HTTP POST to `/global/config`)
|
||||
- Validate inputs before saving; show inline errors
|
||||
- After adding, the new provider should appear in the providers list and its models should be available in the model selector
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- The backend plumbing already exists: `KiloProvider.handleUpdateConfig()` and the `/global/config` HTTP endpoint
|
||||
- Auth for the new provider can be set via `/global/auth/set` endpoint
|
||||
- Reference the web app implementation closely — do not duplicate validation logic differently
|
||||
@@ -0,0 +1,24 @@
|
||||
# Expandable MCP Tools in Chat
|
||||
|
||||
**Priority:** P2
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [#6229](https://github.com/Kilo-Org/kilocode/issues/6229)
|
||||
|
||||
## Problem
|
||||
|
||||
Regular (non-MCP) tool calls in the chat can be expanded to see their inputs and outputs. MCP tool calls currently render as non-expandable entries, so users cannot inspect what was sent or received.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Make MCP tool call rows in the chat expandable, matching the expand/collapse behavior of regular tool rows
|
||||
- Expanded view should show:
|
||||
- Tool name and MCP server name
|
||||
- Input arguments (JSON formatted)
|
||||
- Tool output / result
|
||||
- The expand toggle should use the same UI pattern as regular tools (chevron/arrow icon, collapsible section)
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- MCP tool calls arrive as message parts from the CLI with a specific part type
|
||||
- The rendering component for MCP tools is in kilo-ui or `webview-ui/src/`; identify where the non-expandable MCP tool row is rendered and add expand logic
|
||||
- Input/output data should already be present in the message part payload — this is a rendering-only change
|
||||
@@ -0,0 +1,26 @@
|
||||
# File Attachments in Chat Input
|
||||
|
||||
**Priority:** P2
|
||||
**Status:** 🔨 Partial (assigned)
|
||||
**Issue:** [#6078](https://github.com/Kilo-Org/kilocode/issues/6078)
|
||||
|
||||
## What Exists
|
||||
|
||||
Image attachments are already supported. Non-image file attachments (markdown plans, text files, PDFs, etc.) are not.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Add a file attachment button to the chat input toolbar (paperclip icon or similar)
|
||||
- Support drag-and-drop of files onto the chat input area
|
||||
- Support a file picker dialog via the button
|
||||
- For text-based files (`.md`, `.txt`, `.json`, `.ts`, etc.): read the file content and include it as a text part in the message
|
||||
- For binary files: show an unsupported notice or pass as a binary attachment if the CLI API supports it
|
||||
- Show attached files as chips/tags above the input before sending, with a remove button
|
||||
- Limit attachment size with a clear error if exceeded
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- The webview cannot directly read files from the filesystem due to VS Code CSP restrictions
|
||||
- Pattern: webview sends a `requestFilePick` message → extension opens `vscode.window.showOpenDialog()` → extension reads the file and sends content back as a `fileAttachment` message
|
||||
- Alternatively, drag-and-drop within the webview can use the browser File API to read file content (works because the file is dropped into the webview DOM)
|
||||
- The CLI's message send API accepts text parts; embed the file content inline in the message text or as a separate part
|
||||
@@ -0,0 +1,23 @@
|
||||
# Prompt Improvement Feature
|
||||
|
||||
**Priority:** P3
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [Kilo-Org/kilo#594](https://github.com/Kilo-Org/kilo/issues/594) (private)
|
||||
|
||||
## Summary
|
||||
|
||||
A feature to help users improve their prompts before sending — likely an "Improve prompt" button in the chat input that rewrites or enhances the user's message using AI assistance.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
Details are tracked in the private issue. At a high level:
|
||||
|
||||
- Add an "Improve prompt" button or keyboard shortcut in the chat input area
|
||||
- When triggered, send the current draft message to the CLI/API to be rewritten into a more effective prompt
|
||||
- Show the improved version as a preview; let the user accept, edit, or dismiss it
|
||||
- The improvement request should go through the existing session or a lightweight one-shot endpoint
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- This feature requires CLI-side support for a "rewrite prompt" endpoint, or it can be done client-side by sending a meta-prompt to the model
|
||||
- Design should avoid blocking the main chat input while the improvement request is in flight
|
||||
@@ -0,0 +1,23 @@
|
||||
# Remember Last Model Choice
|
||||
|
||||
**Priority:** P2
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [#6211](https://github.com/Kilo-Org/kilocode/issues/6211)
|
||||
|
||||
## Problem
|
||||
|
||||
Every new session defaults to "Kilo: Auto" regardless of the user's previous model selection. Users who prefer a specific model must re-select it each time they start a new session.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- When the user changes the model selector in the chat input, persist the choice
|
||||
- When creating a new session, pre-select the last-used model instead of the default
|
||||
- Existing sessions are unaffected — they keep their model
|
||||
- The persisted value should survive extension restarts (use `vscode.ExtensionContext.globalState`)
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- Model selection state is currently managed in the webview
|
||||
- On model change: webview posts a message to the extension → extension saves to `globalState.update('lastModel', modelId)`
|
||||
- On new session creation: extension reads `globalState.get('lastModel')` and passes it as the initial model to the session create request (or as a default in the webview's session context)
|
||||
- If the stored model is no longer available (provider disabled, etc.), fall back to the default gracefully
|
||||
@@ -0,0 +1,25 @@
|
||||
# Session Preview Improvements
|
||||
|
||||
**Priority:** P2
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [#6234](https://github.com/Kilo-Org/kilocode/issues/6234)
|
||||
|
||||
## Problem
|
||||
|
||||
The session list on the home screen shows AI-generated session titles. These titles are often very short (3-5 words) and don't give enough context to distinguish between sessions at a glance. Users can't easily identify which session is which.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Evaluate the session list display: compare auto-generated titles with showing the first message snippet (first ~100 characters of the user's opening message)
|
||||
- Options to consider:
|
||||
1. Show the first user message as a subtitle below the title
|
||||
2. Improve title generation by prompting the CLI to generate more descriptive titles (e.g., include the key file or topic)
|
||||
3. Show a message count or timestamp to provide additional context
|
||||
- Also review the three "recent sessions" cards on the start/home screen — ensure they have enough context for recognition
|
||||
- User testing preferred: present the options to a small group to determine what is most useful
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- Session metadata (title, message count, timestamps) comes from the CLI's session list endpoint
|
||||
- The session list component is in `webview-ui/src/`; the "first message snippet" approach requires fetching or caching the first message text
|
||||
- If improving title generation: the CLI controls this; it may require a prompt change in `packages/opencode/`
|
||||
@@ -0,0 +1,25 @@
|
||||
# Subagent Visibility
|
||||
|
||||
**Priority:** P2
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [#6252](https://github.com/Kilo-Org/kilocode/issues/6252)
|
||||
|
||||
## Problem
|
||||
|
||||
When the main agent spawns a subagent (a nested agent task), the chat UI shows no indication of what the subagent is doing. Users see the parent agent appear idle while subagent work proceeds silently. This makes the UI feel unresponsive.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Show an inline indicator in the chat when a subagent is active, showing:
|
||||
- That a subagent is running
|
||||
- The subagent's current action (e.g., "Subagent: reading src/index.ts")
|
||||
- Progress if available
|
||||
- When the subagent completes, collapse the indicator into a summary (e.g., "Subagent completed: modified 3 files")
|
||||
- The indicator should be collapsible — expanded by default while running, collapsible after
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- Subagent events come through the CLI's SSE stream as a distinct message or part type
|
||||
- Identify the relevant event/part type in the CLI's session message schema
|
||||
- The rendering component is in kilo-ui or `webview-ui/src/`; add a subagent status part renderer
|
||||
- For the Agent Manager (multi-session view), subagent sessions may already have separate tabs — this issue is specifically about the single-session sidebar view
|
||||
@@ -0,0 +1,27 @@
|
||||
# Task Completion Notification
|
||||
|
||||
**Priority:** P2
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [#6084](https://github.com/Kilo-Org/kilocode/issues/6084)
|
||||
|
||||
## Problem
|
||||
|
||||
Agent tasks can take minutes. Users often switch to another window while waiting. There is currently no way for the extension to alert the user that:
|
||||
|
||||
- A task has completed
|
||||
- The agent is waiting for user input (permission request, question prompt)
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- When a session transitions to "complete" or "awaiting input" state, show a VS Code notification (toast) if the Kilo Code window is not currently focused
|
||||
- Use `vscode.window.showInformationMessage()` for task completion
|
||||
- Use `vscode.window.showWarningMessage()` for permission requests requiring attention
|
||||
- Add a setting to enable/disable these notifications (default: on)
|
||||
- Notifications should include a "Show" button that focuses the Kilo Code webview panel
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- Session state changes come via SSE events in `KiloConnectionService`
|
||||
- Track whether the webview panel is currently visible/focused (`KiloProvider.panel.visible`)
|
||||
- Only fire the notification when the panel is not visible — avoid notifying when the user is already watching
|
||||
- The `vscode.window.createStatusBarItem()` could also be used as a persistent indicator showing "1 task awaiting input"
|
||||
@@ -0,0 +1,29 @@
|
||||
# Terminal Command Output Visibility
|
||||
|
||||
**Priority:** P1
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [#6256](https://github.com/Kilo-Org/kilocode/issues/6256)
|
||||
|
||||
## Problem
|
||||
|
||||
When the agent executes a terminal command, the chat shows only a generic heading (e.g., "Running command"). It does not show:
|
||||
|
||||
- The actual command being run
|
||||
- Any output from the command
|
||||
- Whether the command succeeded or failed
|
||||
|
||||
The CLI TUI already shows this information. The lack of visibility makes the extension feel opaque and makes the permission model harder to evaluate ("do I want to allow this command if I can't even see what it is?").
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Show the actual command string in the terminal tool call row (not just a generic "executing terminal command" label)
|
||||
- Show truncated command output (e.g., first 10 lines or 500 characters) in an expandable section below the command
|
||||
- Show a clear success/failure indicator (green checkmark / red × with exit code)
|
||||
- For long-running commands, show streaming output in real-time if the CLI sends incremental output via SSE
|
||||
- The full output should be accessible via expand (not shown in full by default to avoid cluttering the chat)
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- Terminal tool calls are a specific part type in the CLI's message schema; the command string and result/output are in the part payload
|
||||
- The rendering is in kilo-ui or `webview-ui/src/`
|
||||
- The CLI may send output as a single result part after completion, or incrementally via SSE — check what the CLI actually sends and design the renderer accordingly
|
||||
@@ -0,0 +1,24 @@
|
||||
# Show Changelog on Extension Update
|
||||
|
||||
**Priority:** P3
|
||||
**Status:** 🔨 Partial (assigned)
|
||||
**Issue:** [#6079](https://github.com/Kilo-Org/kilocode/issues/6079)
|
||||
|
||||
## Problem
|
||||
|
||||
When the extension updates, users are not notified of what changed. They have no way to discover new features or understand bug fixes without manually navigating to the marketplace.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- On activation, compare the current extension version (`context.extension.packageJSON.version`) against the last-seen version stored in `globalState`
|
||||
- If the version has changed (i.e., an update just occurred), show a notification:
|
||||
- `vscode.window.showInformationMessage('Kilo Code updated to v${version}', "What's New", 'Dismiss')`
|
||||
- "What's New" should either open a webview panel rendering the changelog, or open the browser to the CHANGELOG.md on GitHub/marketplace
|
||||
- Update the stored version in `globalState` after showing the notification
|
||||
- Do not show on first install (when there is no previous version in `globalState`)
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- A simple approach: open the browser to the GitHub releases page or the CHANGELOG.md URL
|
||||
- A richer approach: show a webview panel rendering the relevant section of `CHANGELOG.md` bundled with the extension
|
||||
- The check should happen in `activate()` in `src/extension.ts`
|
||||
@@ -1,31 +1,21 @@
|
||||
# Dedicated Output Channel
|
||||
|
||||
**Priority:** P2
|
||||
**Status:** ❌ Not started
|
||||
**Status:** 🔨 Partial
|
||||
**Source:** [JetBrains plugin analysis](../../LESSONS_LEARNED_JETBRAINS.md)
|
||||
|
||||
## Description
|
||||
## What Exists
|
||||
|
||||
All extension logging uses `console.log("[Kilo New] ...")` which goes to the Extension Host output channel mixed with all other extensions. A dedicated "Kilo Code" output channel would make logs easier to find and filter.
|
||||
- Agent Manager creates `vscode.window.createOutputChannel("Kilo Agent Manager")` for setup script output
|
||||
|
||||
## Requirements
|
||||
## Remaining Work
|
||||
|
||||
- Create a `vscode.window.createOutputChannel("Kilo Code")` during activation
|
||||
- Create a general `vscode.window.createOutputChannel("Kilo Code")` during activation
|
||||
- Centralized logging utility with log levels (debug, info, warn, error)
|
||||
- Route all `[Kilo New]` log messages to this channel
|
||||
- Keep console.log as a secondary target for debugging
|
||||
- Optionally support log levels (debug, info, warn, error)
|
||||
- Dispose the channel on deactivation
|
||||
|
||||
## Current State
|
||||
|
||||
All debug output uses `console.log("[Kilo New] ...")` per the [AGENTS.md](../../AGENTS.md) convention. Users must find extension logs in the "Extension Host" output channel and manually filter for `[Kilo New]`.
|
||||
|
||||
## Gaps
|
||||
|
||||
- No dedicated output channel
|
||||
- No centralized logging utility
|
||||
- No log level control
|
||||
- Hard to filter Kilo logs from other extension noise
|
||||
- Migrate existing `console.log("[Kilo New] ...")` calls throughout KiloProvider, connection-service, http-client, sse-client
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
@@ -47,4 +37,4 @@ Files to change:
|
||||
|
||||
- [`src/extension.ts`](../../src/extension.ts) — create output channel
|
||||
- New file `src/utils/logger.ts` — centralized logging utility
|
||||
- All files currently using `console.log("[Kilo New] ...")` — optionally migrate
|
||||
- All files currently using `console.log("[Kilo New] ...")` — migrate to logger
|
||||
|
||||
@@ -4,32 +4,16 @@
|
||||
**Status:** ❌ Not started
|
||||
**Source:** [JetBrains plugin analysis](../../LESSONS_LEARNED_JETBRAINS.md)
|
||||
|
||||
## Description
|
||||
## Remaining Work
|
||||
|
||||
The HTTP client uses bare `fetch()` with no connect or request timeouts. A hung request (e.g., server is unresponsive but connection stays open) will block the caller indefinitely.
|
||||
|
||||
## Requirements
|
||||
|
||||
- Add configurable request timeout (default: 60s) using `AbortController`
|
||||
- Add configurable request timeout (default: 60s) using `AbortController` in `HttpClient.request()`
|
||||
- Add shorter connect timeout where possible (default: 10s)
|
||||
- Timeout should abort the request cleanly and throw a descriptive error
|
||||
- Ensure timeout cleanup on successful response (no leaked timers)
|
||||
|
||||
## Current State
|
||||
|
||||
[`HttpClient.request()`](../../src/services/cli-backend/http-client.ts:37) calls `fetch()` directly with no `AbortController` or timeout. The only timeout in the codebase is the 30s server startup timeout in [`ServerManager`](../../src/services/cli-backend/server-manager.ts:112).
|
||||
|
||||
## Gaps
|
||||
|
||||
- No `AbortController` usage in HTTP client
|
||||
- No request timeout configuration
|
||||
- No connect timeout
|
||||
- Hung requests will block indefinitely
|
||||
Note: `HttpClient.request()` already accepts an optional `signal?: AbortSignal` parameter and passes it to `fetch()`, but no timeout is ever created — the signal is only used for user-initiated cancellation in one caller.
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
The JetBrains plugin uses 10s connect timeout and 60s request timeout. Basic pattern:
|
||||
|
||||
```typescript
|
||||
const controller = new AbortController()
|
||||
const timeout = setTimeout(() => controller.abort(), 60_000)
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
# Publish to OpenVSX
|
||||
|
||||
**Priority:** P3
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [#6080](https://github.com/Kilo-Org/kilocode/issues/6080)
|
||||
|
||||
## Problem
|
||||
|
||||
The extension is currently only published to the VS Code Marketplace. OpenVSX is the alternative registry used by VS Code forks (VS Codium, Eclipse Theia, Gitpod, etc.). Users on these platforms cannot install Kilo Code from their built-in extension manager.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Create an OpenVSX publisher account for Kilo Code at [open-vsx.org](https://open-vsx.org)
|
||||
- Add an OpenVSX publish step to the CI/CD pipeline:
|
||||
- Use `ovsx publish` (the `ovsx` CLI tool) with the OpenVSX token
|
||||
- Run after the VS Code Marketplace publish step succeeds
|
||||
- Ensure the `.vsix` artifact is compatible with OpenVSX (it should be the same file)
|
||||
- Set up the OpenVSX token as a CI secret
|
||||
- Test the publish manually first to verify the extension appears correctly
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- The `vsce` package produces a `.vsix` that works for both marketplaces
|
||||
- OpenVSX tokens are per-publisher and stored as CI secrets
|
||||
- Check if any VS Code API calls used by the extension are not available in OpenVSX-supported editors (most are fine)
|
||||
@@ -0,0 +1,27 @@
|
||||
# Use SDK Over Direct HTTP Requests
|
||||
|
||||
**Priority:** P2
|
||||
**Status:** 🔨 Partial (assigned)
|
||||
**Issue:** [#6243](https://github.com/Kilo-Org/kilocode/issues/6243)
|
||||
|
||||
## Problem
|
||||
|
||||
The extension's `HttpClient` (`src/services/cli-backend/http-client.ts`) makes raw `fetch()` calls to the CLI server. The monorepo already has an auto-generated `@kilocode/sdk` package that provides typed methods for all CLI endpoints. Using the raw HTTP client means:
|
||||
|
||||
- No type safety for request/response shapes
|
||||
- No automatic updates when the CLI API changes (the SDK is regenerated from the server spec)
|
||||
- Duplicated endpoint URL construction and authentication logic
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Replace direct `fetch()` calls in `HttpClient` and `KiloProvider` with `@kilocode/sdk` client methods
|
||||
- The SDK is already in the monorepo at `packages/sdk/js/`; add it as a dependency if not already present
|
||||
- Initialize an SDK client instance with the dynamic server URL and auth token in `KiloConnectionService`
|
||||
- Replace each HTTP call site one by one, verifying correct types at each step
|
||||
- Remove the now-redundant hand-written response types from `src/services/cli-backend/types.ts` where the SDK provides equivalent types
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- The SDK client is generated from the server spec — do not edit `packages/sdk/js/src/gen/` manually
|
||||
- The SDK client needs the base URL and auth token; these are available from `KiloConnectionService` once the server is started
|
||||
- SSE subscriptions may not be covered by the SDK; keep the manual `SSEClient` for those
|
||||
@@ -0,0 +1,26 @@
|
||||
# Switch to Session Turn
|
||||
|
||||
**Priority:** P2
|
||||
**Status:** 🔨 Partial (assigned)
|
||||
**Issue:** [#6244](https://github.com/Kilo-Org/kilocode/issues/6244)
|
||||
|
||||
## Problem
|
||||
|
||||
The CLI introduced a `Session Turn` concept — a structured unit of work within a session that groups related messages, tool calls, and results. The extension currently works at the raw message/part level, which makes it harder to:
|
||||
|
||||
- Track the lifecycle of a single agent turn (start, running, complete, error)
|
||||
- Group messages for display (e.g., collapsing all tool calls within one turn)
|
||||
- Implement features like "retry this turn" or "edit and retry"
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Understand the `Session Turn` API in the CLI — look at `packages/opencode/src/session/` for the turn model
|
||||
- Update the extension's session state management to track turns, not just individual messages
|
||||
- Adjust the webview's message rendering to group content by turn where appropriate
|
||||
- The SDK (once [#6243](sdk-over-http.md) is done) should expose turn-level endpoints natively
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- This is primarily an architectural refactor of how the extension consumes session data
|
||||
- The Agent Manager is particularly relevant here: turn-level tracking enables better "what is this agent doing?" visibility
|
||||
- Coordinate with the [Session Turn](sdk-over-http.md) SDK work — the SDK should expose turn methods cleanly before migrating the extension
|
||||
@@ -4,38 +4,17 @@
|
||||
**Status:** ❌ Not started
|
||||
**Source:** [JetBrains plugin analysis](../../LESSONS_LEARNED_JETBRAINS.md)
|
||||
|
||||
## Description
|
||||
## Remaining Work
|
||||
|
||||
The SSE connection to the CLI backend has no reconnect logic. If the connection drops (network hiccup, laptop sleep/wake, server restart), the extension goes dead with no recovery path. Users must manually reload the window.
|
||||
|
||||
## Requirements
|
||||
|
||||
- Auto-reconnect on SSE connection loss with exponential backoff
|
||||
- Backoff starts at 2s, doubles on each failure, caps at 30s
|
||||
- Auto-reconnect on SSE connection loss with exponential backoff (2s → 4s → 8s → … → 30s cap)
|
||||
- Reset backoff delay on successful reconnect
|
||||
- Add `"reconnecting"` state to [`ConnectionState`](../../src/services/cli-backend/connection-service.ts:7)
|
||||
- Add `"reconnecting"` state to `ConnectionState` in both extension and webview
|
||||
- Surface reconnecting state in the webview UI (e.g., banner or status indicator)
|
||||
- Clean up reconnect timer on intentional disconnect/dispose
|
||||
|
||||
## Current State
|
||||
|
||||
The [`SSEClient`](../../src/services/cli-backend/sse-client.ts:13) emits `"disconnected"` on error (line 78-83) and stops. No retry logic exists.
|
||||
|
||||
[`ConnectionState`](../../src/services/cli-backend/connection-service.ts:7) only supports `"connecting" | "connected" | "disconnected" | "error"` — no `"reconnecting"`.
|
||||
|
||||
The webview [`ConnectionState`](../../webview-ui/src/types/messages.ts:6) mirrors this.
|
||||
|
||||
## Gaps
|
||||
|
||||
- No reconnect logic in [`SSEClient`](../../src/services/cli-backend/sse-client.ts:13)
|
||||
- No `"reconnecting"` connection state
|
||||
- No webview UI for reconnecting state
|
||||
- No backoff/retry timer management
|
||||
- No cleanup of retry timers on dispose
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
The JetBrains plugin implements exponential backoff reconnection (2s → 4s → 8s → … → 30s cap). The pattern:
|
||||
The JetBrains plugin implements exponential backoff reconnection. Pattern:
|
||||
|
||||
```typescript
|
||||
// In SSEClient
|
||||
|
||||
@@ -1,32 +1,21 @@
|
||||
# VSCode Error Notifications for Critical Failures
|
||||
|
||||
**Priority:** P1
|
||||
**Status:** ❌ Not started
|
||||
**Status:** 🔨 Partial
|
||||
**Source:** [JetBrains plugin analysis](../../LESSONS_LEARNED_JETBRAINS.md)
|
||||
|
||||
## Description
|
||||
## What Exists
|
||||
|
||||
Critical errors (CLI binary not found, server startup failure, connection lost) are only shown inside the webview. If the webview is not visible or hasn't loaded, users get no feedback. Platform-native error notifications should be used for critical failures.
|
||||
- `showErrorMessage()` used in peripheral services: commit message service (5 calls), Agent Manager (worktree failures), autocomplete (Copilot conflicts)
|
||||
- `showWarningMessage()` used for: reset settings confirmation, worktree git requirement
|
||||
- `showInformationMessage()` used for: terminal actions ("no terminal content available")
|
||||
|
||||
## Requirements
|
||||
## Remaining Work
|
||||
|
||||
- Show `vscode.window.showErrorMessage()` when CLI binary is missing
|
||||
- Show `vscode.window.showErrorMessage()` when server fails to start
|
||||
- Show `vscode.window.showErrorMessage()` when CLI binary is missing or server fails to start
|
||||
- Show `vscode.window.showWarningMessage()` when SSE connection is lost (with "Retry" action)
|
||||
- Avoid notification spam — throttle or deduplicate repeated errors
|
||||
|
||||
## Current State
|
||||
|
||||
All errors are posted to the webview as `{ type: "error" }` messages. No `vscode.window.showErrorMessage()` or `vscode.window.showWarningMessage()` calls exist in the extension host.
|
||||
|
||||
The CLI binary check at [`ServerManager.startServer()`](../../src/services/cli-backend/server-manager.ts:52) throws an error string that is caught in [`KiloProvider.initializeConnection()`](../../src/KiloProvider.ts:261) and sent to the webview only.
|
||||
|
||||
## Gaps
|
||||
|
||||
- No `vscode.window.showErrorMessage()` for server startup failures
|
||||
- No `vscode.window.showWarningMessage()` for connection loss
|
||||
- No actionable notifications (e.g., "Retry" button)
|
||||
- Users may miss errors if webview is collapsed or not focused
|
||||
- Currently all core connection errors only go to `console.error` and webview `postMessage` — if webview is hidden, user sees nothing
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
@@ -40,4 +29,4 @@ vscode.window.showErrorMessage(`Kilo Code: Failed to start CLI server — ${erro
|
||||
Files to change:
|
||||
|
||||
- [`src/KiloProvider.ts`](../../src/KiloProvider.ts) — add `vscode.window.showErrorMessage()` calls in error paths
|
||||
- [`src/services/cli-backend/connection-service.ts`](../../src/services/cli-backend/connection-service.ts) — optionally surface critical errors to callers
|
||||
- [`src/services/cli-backend/connection-service.ts`](../../src/services/cli-backend/connection-service.ts) — surface critical errors to callers
|
||||
|
||||
@@ -1,246 +0,0 @@
|
||||
# Settings Migration Plan: Desktop App → VSCode Extension
|
||||
|
||||
## Overview
|
||||
|
||||
The desktop app (`packages/app`) has settings spread across four tabs:
|
||||
|
||||
- **General** — appearance, notifications, sounds, updates, linux display
|
||||
- **Shortcuts** — keybinds (not applicable to VSCode — handled by VS Code keybindings)
|
||||
- **Providers** — connect/disconnect providers, custom providers
|
||||
- **Models** — toggle model visibility per provider
|
||||
|
||||
Additionally, backend `Config` (persisted by the CLI server) controls agent behavior, permissions, MCP, commands, and experimental flags. The app's **Permissions** component (`settings-permissions.tsx`) manages per-tool permission levels (allow/ask/deny) via `globalSync.updateConfig({ permission: … })`.
|
||||
|
||||
This document maps every setting to an extension tab and describes the implementation path.
|
||||
|
||||
---
|
||||
|
||||
## 1. Backend Config Settings (via `PATCH /config`)
|
||||
|
||||
These are server-side settings stored in the opencode config file. All reads use `GET /config` (with optional `?directory=`), all writes use `PATCH /config` (merges the partial `Config` object).
|
||||
|
||||
### 1.1 Mapping to Extension Tabs
|
||||
|
||||
| Backend Config Field | Type | Extension Tab | Notes |
|
||||
| ------------------------------------ | -------------------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `permission` | `PermissionConfig` | **Auto Approve** | Per-tool allow/ask/deny — matches app's `settings-permissions.tsx` |
|
||||
| `permission.<tool>` | `allow \| ask \| deny` | **Auto Approve** | Tools: read, edit, glob, grep, list, bash, task, skill, lsp, todoread, todowrite, webfetch, websearch, codesearch, external_directory, doom_loop |
|
||||
| `model` | `string` | **Providers** | Default model (format: `provider/model`) |
|
||||
| `small_model` | `string` | **Providers** | Small model for title generation etc. |
|
||||
| `default_agent` | `string` | **Agent Behaviour** | Default agent when none specified |
|
||||
| `agent` | `Record<string, AgentConfig>` | **Agent Behaviour** | Per-agent config (model, prompt, temperature, etc.) |
|
||||
| `agent.<name>.model` | `string` | **Agent Behaviour** (Agents subtab) | Override model per agent |
|
||||
| `agent.<name>.prompt` | `string` | **Agent Behaviour** (Agents subtab) | Custom system prompt per agent |
|
||||
| `agent.<name>.temperature` | `number` | **Agent Behaviour** (Agents subtab) | Temperature override |
|
||||
| `agent.<name>.top_p` | `number` | **Agent Behaviour** (Agents subtab) | Top-p override |
|
||||
| `agent.<name>.steps` | `number` | **Agent Behaviour** (Agents subtab) | Max agentic iterations |
|
||||
| `agent.<name>.permission` | `PermissionConfig` | **Agent Behaviour** (Agents subtab) | Per-agent permission overrides |
|
||||
| `provider` | `Record<string, ProviderConfig>` | **Providers** | Custom provider configuration |
|
||||
| `disabled_providers` | `string[]` | **Providers** | Providers to disable |
|
||||
| `enabled_providers` | `string[]` | **Providers** | Exclusive provider allowlist |
|
||||
| `mcp` | `Record<string, McpConfig>` | **Agent Behaviour** (MCP subtab) | MCP server configurations |
|
||||
| `command` | `Record<string, CommandConfig>` | **Agent Behaviour** (Commands subtab) | Custom commands |
|
||||
| `instructions` | `string[]` | **Prompts** | Additional instruction file paths |
|
||||
| `skills.paths` | `string[]` | **Agent Behaviour** (Skills subtab) | Additional skill folder paths |
|
||||
| `skills.urls` | `string[]` | **Agent Behaviour** (Skills subtab) | Skill URLs |
|
||||
| `snapshot` | `boolean` | **Checkpoints** | Enable/disable snapshots |
|
||||
| `share` | `manual \| auto \| disabled` | **Experimental** | Sharing behavior |
|
||||
| `username` | `string` | **Display** | Custom username in conversations |
|
||||
| `watcher.ignore` | `string[]` | **Context** | File watcher ignore patterns |
|
||||
| `formatter` | `false \| Record<…>` | **Experimental** | Formatter configuration |
|
||||
| `lsp` | `false \| Record<…>` | **Experimental** | LSP configuration |
|
||||
| `compaction.auto` | `boolean` | **Agent Behaviour** | Auto-compaction when context is full |
|
||||
| `compaction.prune` | `boolean` | **Agent Behaviour** | Prune old tool outputs |
|
||||
| `tools` | `Record<string, boolean>` | **Experimental** | Enable/disable specific tools globally |
|
||||
| `layout` | `auto \| stretch` | **Display** | Layout mode |
|
||||
| `experimental.disable_paste_summary` | `boolean` | **Experimental** | Disable paste summary |
|
||||
| `experimental.batch_tool` | `boolean` | **Experimental** | Enable batch tool |
|
||||
| `experimental.primary_tools` | `string[]` | **Experimental** | Primary-agent-only tools |
|
||||
| `experimental.continue_loop_on_deny` | `boolean` | **Experimental** | Continue on permission deny |
|
||||
| `experimental.mcp_timeout` | `number` | **Experimental** | MCP request timeout (ms) |
|
||||
|
||||
### 1.2 Desktop-Only / Not Applicable in VSCode
|
||||
|
||||
| Setting | Reason |
|
||||
| ------------------------------------------------------- | ----------------------------------------- |
|
||||
| `theme` | VSCode owns theming |
|
||||
| `keybinds` | VSCode keybindings system |
|
||||
| `tui.*` (scroll_speed, scroll_acceleration, diff_style) | TUI-specific |
|
||||
| `server.*` | Server managed by extension automatically |
|
||||
|
||||
---
|
||||
|
||||
## 2. Client-Side Settings (from `app/src/context/settings.tsx`)
|
||||
|
||||
These are persisted client-side in the app (localStorage). In the extension, the equivalent would be VS Code's `ExtensionContext.globalState` or webview-local storage.
|
||||
|
||||
| App Setting | Type | Extension Tab | Notes |
|
||||
| --------------------------- | --------- | ----------------- | ------------------------------------------------------------------------------------------------- |
|
||||
| `appearance.font` | `string` | **Display** | Mono font selection — VSCode has its own font settings, could be skipped or kept for webview only |
|
||||
| `appearance.fontSize` | `number` | **Display** | Font size — same consideration as above |
|
||||
| `notifications.agent` | `boolean` | **Notifications** | Notify when agent completes |
|
||||
| `notifications.permissions` | `boolean` | **Notifications** | Notify on permission requests |
|
||||
| `notifications.errors` | `boolean` | **Notifications** | Notify on errors |
|
||||
| `sounds.agent` | `string` | **Notifications** | Sound on agent completion |
|
||||
| `sounds.permissions` | `string` | **Notifications** | Sound on permission request |
|
||||
| `sounds.errors` | `string` | **Notifications** | Sound on error |
|
||||
| `general.releaseNotes` | `boolean` | **Experimental** | Show release notes |
|
||||
| `general.autoSave` | `boolean` | N/A | VSCode has its own auto-save |
|
||||
| `updates.startup` | `boolean` | N/A | VSCode handles extension updates |
|
||||
|
||||
---
|
||||
|
||||
## 3. Provider & Model Settings (from app)
|
||||
|
||||
| Feature | Extension Tab | Backend API | Notes |
|
||||
| ------------------------------- | ------------- | -------------------------------------------------------- | -------------------------------- |
|
||||
| List connected providers | **Providers** | `GET /provider` | Already implemented in extension |
|
||||
| Connect provider (OAuth) | **Providers** | `POST /provider/{id}/oauth/authorize` + `callback` | Already implemented |
|
||||
| Disconnect provider | **Providers** | `DELETE /auth/{id}` + config `disabled_providers` update | Already implemented |
|
||||
| Custom provider (OpenAI-compat) | **Providers** | `PATCH /config` with `provider` field | New |
|
||||
| Toggle model visibility | **Providers** | `PATCH /config` with model visibility config | New |
|
||||
|
||||
---
|
||||
|
||||
## 4. Implementation Plan
|
||||
|
||||
### Phase 1: Infrastructure — Config Read/Write
|
||||
|
||||
1. **Add `getConfig()` to [`HttpClient`](src/services/cli-backend/http-client.ts)**
|
||||
|
||||
```typescript
|
||||
async getConfig(directory: string): Promise<Config> {
|
||||
return this.request<Config>("GET", "/config", undefined, { directory })
|
||||
}
|
||||
```
|
||||
|
||||
2. **Add `updateConfig()` to [`HttpClient`](src/services/cli-backend/http-client.ts)**
|
||||
|
||||
```typescript
|
||||
async updateConfig(config: Partial<Config>, directory: string): Promise<Config> {
|
||||
return this.request<Config>("PATCH", "/config", config, { directory })
|
||||
}
|
||||
```
|
||||
|
||||
3. **Add Config types to [`types.ts`](src/services/cli-backend/types.ts)**
|
||||
Import or re-define `Config`, `PermissionConfig`, `AgentConfig`, `ProviderConfig` etc. from the SDK types.
|
||||
|
||||
4. **Add cached config message pattern in [`KiloProvider`](src/KiloProvider.ts)**
|
||||
- `fetchAndSendConfig()` method
|
||||
- Handle `requestConfig` message from webview
|
||||
- Handle `updateConfig` message from webview (call `httpClient.updateConfig()`, then re-fetch and push)
|
||||
|
||||
5. **Add message types to [`messages.ts`](webview-ui/src/types/messages.ts)**
|
||||
- `ConfigLoadedMessage` (extension→webview)
|
||||
- `RequestConfigMessage` (webview→extension)
|
||||
- `UpdateConfigMessage` (webview→extension, carries partial Config)
|
||||
- `ConfigUpdatedMessage` (extension→webview, confirmation)
|
||||
|
||||
6. **Create config context in `webview-ui/src/context/config.tsx`**
|
||||
- Subscribe to `ConfigLoadedMessage`
|
||||
- Expose `config()` accessor and `updateConfig(partial)` method
|
||||
- `updateConfig` posts `UpdateConfigMessage` to extension, optimistically updates local state
|
||||
|
||||
### Phase 2: Populate Existing Tabs with Backend Settings
|
||||
|
||||
Each tab should read from the config context and call `updateConfig()` on change.
|
||||
|
||||
#### Auto Approve Tab
|
||||
|
||||
- Per-tool permission selects (allow/ask/deny) for all 16 tools
|
||||
- Reference: [`settings-permissions.tsx`](../app/src/components/settings-permissions.tsx)
|
||||
|
||||
#### Agent Behaviour Tab
|
||||
|
||||
- Default agent selector (`config.default_agent`)
|
||||
- Compaction settings (`config.compaction.auto`, `config.compaction.prune`)
|
||||
- **Agents subtab**: Per-agent config — model override, prompt, temperature, top_p, max steps, per-agent permissions
|
||||
- **MCP subtab**: MCP server configurations (`config.mcp`)
|
||||
- **Commands subtab**: Custom commands (`config.command`)
|
||||
- **Skills subtab**: Skill folder paths and URLs (`config.skills`)
|
||||
|
||||
#### Providers Tab
|
||||
|
||||
- Default model (`config.model`)
|
||||
- Small model (`config.small_model`)
|
||||
- Custom provider creation (`config.provider`)
|
||||
- Provider enable/disable (`config.disabled_providers`, `config.enabled_providers`)
|
||||
- Model visibility toggles (reference: [`settings-models.tsx`](../app/src/components/settings-models.tsx))
|
||||
|
||||
#### Prompts Tab
|
||||
|
||||
- Per-agent prompt (`config.agent.<name>.prompt`)
|
||||
- Additional instructions (`config.instructions`)
|
||||
|
||||
#### Checkpoints Tab
|
||||
|
||||
- Snapshot toggle (`config.snapshot`)
|
||||
|
||||
#### Display Tab
|
||||
|
||||
- Username (`config.username`)
|
||||
- Layout mode (`config.layout`)
|
||||
|
||||
#### Context Tab
|
||||
|
||||
- Watcher ignore patterns (`config.watcher.ignore`)
|
||||
|
||||
#### Notifications Tab
|
||||
|
||||
- Client-side notification toggles (agent, permissions, errors)
|
||||
- Sound selection (agent, permissions, errors)
|
||||
- These are client-side only; store in VS Code `globalState` or webview localStorage
|
||||
|
||||
#### Experimental Tab
|
||||
|
||||
- Share mode (`config.share`)
|
||||
- Formatter config (`config.formatter`)
|
||||
- LSP config (`config.lsp`)
|
||||
- Tool toggles (`config.tools`)
|
||||
- Remaining `config.experimental.*` flags
|
||||
|
||||
#### Language Tab
|
||||
|
||||
- Already implemented (client-side locale selection)
|
||||
|
||||
### Phase 3: Client-Side Settings
|
||||
|
||||
For notification and sound settings (not backed by the CLI server):
|
||||
|
||||
1. **Option A**: Store in VS Code `globalState` via extension messages (preferred — survives webview reloads)
|
||||
2. **Option B**: Store in webview `localStorage` (simpler but resets on webview rebuild)
|
||||
|
||||
Recommended: Option A — add `SaveLocalSettingMessage` / `LocalSettingLoadedMessage` message types, persist via `context.globalState`.
|
||||
|
||||
---
|
||||
|
||||
## 5. Settings not relevant for VSCode extension
|
||||
|
||||
| Setting | Reason |
|
||||
| ----------------------------------------- | ----------------------------------------------------------------------------- |
|
||||
| `theme` / `colorScheme` | VS Code owns theming |
|
||||
| `keybinds` | VS Code keybindings |
|
||||
| `tui.*` | TUI-only settings |
|
||||
| `server.*` | Server lifecycle managed by extension |
|
||||
| `general.autoSave` | VS Code has native auto-save |
|
||||
| `updates.startup` | VS Code handles extension updates |
|
||||
| `appearance.font` / `appearance.fontSize` | VS Code editor font settings (could optionally be kept for webview chat font) |
|
||||
| Wayland display backend | Linux desktop app only |
|
||||
|
||||
---
|
||||
|
||||
## 6. Priority Order
|
||||
|
||||
1. **P0 — Permissions** (Auto Approve tab): Most impactful for daily use
|
||||
2. **P0 — Default model/agent** (Providers + Agent Behaviour): Core workflow
|
||||
3. **P1 — Agent config** (Agent Behaviour): model overrides, temperature, steps
|
||||
4. **P1 — MCP servers** (Agent Behaviour subtab): Server configuration
|
||||
5. **P1 — Notifications & sounds** (Notifications tab): User experience
|
||||
6. **P2 — Prompts/instructions** (Prompts tab): Custom system prompts
|
||||
7. **P2 — Compaction settings** (Agent Behaviour): Auto-compaction
|
||||
8. **P2 — Checkpoints/snapshots** (Checkpoints tab): Snapshot toggle
|
||||
9. **P3 — Display settings** (Display tab): Username, layout
|
||||
10. **P3 — Context settings** (Context tab): Watcher ignore
|
||||
11. **P3 — Experimental flags** (Experimental tab): All experimental.\* flags
|
||||
12. **P3 — Custom providers** (Providers tab): OpenAI-compatible providers
|
||||
13. **P3 — Model visibility** (Providers tab): Per-model show/hide
|
||||
@@ -0,0 +1,27 @@
|
||||
# MemoryBank Migration
|
||||
|
||||
**Priority:** P1
|
||||
**Status:** 🔨 Partial (assigned)
|
||||
**Issue:** [#6091](https://github.com/Kilo-Org/kilocode/issues/6091)
|
||||
|
||||
## Problem
|
||||
|
||||
The old extension had a "MemoryBank" feature where users stored persistent context (project notes, preferences, important information) that was automatically injected into agent sessions. This feature is deprecated in the new extension.
|
||||
|
||||
However, users who had MemoryBank content need a migration path. The CLI uses `AGENTS.md` files (and similar rule files) as the equivalent mechanism.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Detect whether the user has MemoryBank content in the old extension's storage
|
||||
- On first activation (or on user request), offer to migrate MemoryBank content:
|
||||
- Read the existing MemoryBank content
|
||||
- Offer to write it to `AGENTS.md` in the workspace root (or `~/.kilocode/rules/` for global rules)
|
||||
- Show the content to the user for review before writing — do not silently overwrite existing `AGENTS.md`
|
||||
- If `AGENTS.md` already exists, offer to append the MemoryBank content at the end with a clear delimiter
|
||||
- Show documentation or a tooltip explaining that the equivalent of MemoryBank in the new extension is `AGENTS.md` / rules files
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- MemoryBank was stored per-workspace in VS Code's `workspaceState` under the old extension
|
||||
- The user should always review and approve before the content is written to their filesystem
|
||||
- The migration UI can be a simple modal or a confirmation notification with a "Review and Import" button
|
||||
@@ -0,0 +1,25 @@
|
||||
# Session Migration from Old Extension
|
||||
|
||||
**Priority:** P3
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [#6090](https://github.com/Kilo-Org/kilocode/issues/6090)
|
||||
|
||||
## Problem
|
||||
|
||||
Users upgrading from the old extension lose all their chat session history. The old extension stored sessions in VS Code's `globalState`. The new extension stores sessions in the CLI's session directory (`~/.local/share/opencode/sessions/` or equivalent). The formats are incompatible.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Investigate: what format does the old extension use for sessions (JSON in globalState, files on disk, etc.)?
|
||||
- Investigate: what format does the CLI use for sessions?
|
||||
- Determine if the old session format can be converted to the new format with reasonable fidelity
|
||||
- If conversion is feasible:
|
||||
- On first activation (or on explicit user request), offer to import old sessions
|
||||
- Convert old sessions to CLI session format and write them to the CLI sessions directory
|
||||
- Show a count of sessions imported / sessions that could not be converted
|
||||
- If conversion is not feasible (too complex or lossy): at minimum, show the user a notice that their old sessions are not accessible and explain where the old data still lives
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- This is low-priority because session history import is a "nice to have" — users can still access their old session data by temporarily reinstalling the old extension
|
||||
- The old extension's session format should be reverse-engineered from `kilocode-legacy`
|
||||
@@ -0,0 +1,25 @@
|
||||
# Settings Migration from Old Extension
|
||||
|
||||
**Priority:** P1
|
||||
**Status:** 🔨 Partial (assigned)
|
||||
**Issue:** [#6089](https://github.com/Kilo-Org/kilocode/issues/6089)
|
||||
|
||||
## Problem
|
||||
|
||||
Users upgrading from the old Kilo Code extension have their settings stored in VS Code's `globalState` under the old extension's keys. The new extension uses the CLI's `opencode.json` for configuration. Without migration, users lose all their settings (API keys, model preferences, auto-approve rules, etc.) on upgrade.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- On first activation, detect whether the old extension's settings exist in `vscode.ExtensionContext.globalState` or `vscode.workspace.getConfiguration('kilo-code')` (the old extension's config namespace)
|
||||
- Read relevant settings from the old extension: API keys, provider configuration, model preferences, auto-approve rules, custom instructions, etc.
|
||||
- Map old settings keys to their new CLI config equivalents in `opencode.json`
|
||||
- If the CLI config already has settings (user may have manually configured it), show a diff of what would be imported and ask the user to confirm before overwriting
|
||||
- Write approved settings to the CLI config via the `/global/config` endpoint or directly to `opencode.json`
|
||||
- Show the user what was migrated and what was not (e.g., settings that have no equivalent)
|
||||
- Mark migration as complete in `globalState` so it doesn't run again
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- Old extension settings namespace: `kilo-code` (VS Code `package.json` `contributes.configuration` prefix)
|
||||
- The CLI config path is typically `~/.config/opencode/opencode.json` or equivalent
|
||||
- If the CLI is already configured, prefer showing a diff (VS Code diff editor via `vscode.commands.executeCommand('vscode.diff', ...)`) rather than silently overwriting
|
||||
@@ -0,0 +1,28 @@
|
||||
# Upgrade Onboarding Experience
|
||||
|
||||
**Priority:** P1
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [#6188](https://github.com/Kilo-Org/kilocode/issues/6188)
|
||||
|
||||
## Problem
|
||||
|
||||
When the new extension activates for a user who has previously used the old extension, it greets them with a generic "Welcome to Kilo" screen — as if they're a brand-new user. Their old sessions are not visible, and there is no explanation of what changed or what they need to do next.
|
||||
|
||||
This is disorienting for longtime users.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Detect whether the user is an upgrader (had the old extension installed — check for old `globalState` keys or old workspace settings)
|
||||
- Show a distinct onboarding screen for upgraders that:
|
||||
- Acknowledges they are an existing user
|
||||
- Explains that the new extension uses a different backend (Kilo CLI) and sessions are not directly imported
|
||||
- Shows what settings have been migrated (link to settings migration) and what hasn't
|
||||
- Offers a button to go to the session migration flow if available
|
||||
- Links to documentation on what changed and how to get started with the new extension
|
||||
- Do not show the generic "new user" welcome screen to upgraders
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- The detection can be done by checking for any key in `vscode.ExtensionContext.globalState` that the old extension would have written (e.g., `kilo-code.taskHistory`, etc.)
|
||||
- Store a flag `kilo-code.new.upgradeOnboardingShown` in `globalState` after displaying; do not show again
|
||||
- The onboarding can be a webview panel or a sequence of VS Code notifications/modals
|
||||
+11
-16
@@ -1,21 +1,16 @@
|
||||
# Authentication / organization / enterprise enforcement
|
||||
# Authentication / Organization / Enterprise Enforcement
|
||||
|
||||
- **What it is**: Cloud auth and organization-aware behavior.
|
||||
**Priority:** P1
|
||||
**Status:** 🔨 Partial
|
||||
|
||||
## Capabilities
|
||||
## What Exists
|
||||
|
||||
- Device-code style auth.
|
||||
- Org feature flags.
|
||||
- MDM policy enforcement.
|
||||
- Full device auth flow UI with QR code, verification code, countdown, copy/open actions in `DeviceAuthCard.tsx`
|
||||
- Profile page with user header, org switching via `setOrganization`, balance display, dashboard link, logout in `ProfileView.tsx`
|
||||
- Auth methods: `removeAuth()`, `oauthAuthorize()`, `oauthCallback()`, `getProfile()`, `setOrganization()`
|
||||
|
||||
## Suggested migration
|
||||
## Remaining Work
|
||||
|
||||
- **Kilo CLI availability**: Partial.
|
||||
- **Migration recommendation**:
|
||||
- Split responsibilities: Kilo CLI handles its own auth/session for server APIs.
|
||||
- The VS Code extension remains responsible for org/MDM enforcement and for supplying/mediating credentials as needed.
|
||||
- **Reimplementation required?**: Partial.
|
||||
|
||||
## Primary implementation anchors
|
||||
|
||||
Auth is handled via [`DeviceAuthCard.tsx`](../../webview-ui/src/components/DeviceAuthCard.tsx) for the device auth flow and [`ProfileView.tsx`](../../webview-ui/src/components/ProfileView.tsx) for login state display. The CLI backend manages the actual auth tokens. The old `src/services/kilocode/` and `src/services/mdm/` directories don't exist in the new extension.
|
||||
- Dropdown to choose between org or personal account, passing the selection via `kilo serve` to the backend when using the Kilo gateway
|
||||
- Organization feature flags (restrict features based on org plan/tier)
|
||||
- MDM policy enforcement (managed device policies, enterprise admin controls, restriction enforcement)
|
||||
|
||||
@@ -1,15 +1,11 @@
|
||||
# Auto-purge (task storage cleanup)
|
||||
# Auto-Purge (Task Storage Cleanup)
|
||||
|
||||
- **What it is**: Scheduled cleanup of old task/history storage to prevent uncontrolled disk growth.
|
||||
**Priority:** P3
|
||||
**Status:** ❌ Not started
|
||||
|
||||
## Suggested migration
|
||||
## Remaining Work
|
||||
|
||||
- **Kilo CLI availability**: Not present.
|
||||
- **Migration recommendation**:
|
||||
- Decide storage ownership (server vs extension) and implement purge accordingly.
|
||||
- Until server-side storage is authoritative, keep purge logic in the extension host.
|
||||
- **Reimplementation required?**: Yes.
|
||||
|
||||
## Primary implementation anchors
|
||||
|
||||
- [`src/services/auto-purge/`](../../src/services/auto-purge/)
|
||||
- Scheduled cleanup of old task/history storage to prevent uncontrolled disk growth
|
||||
- Decide storage ownership (CLI server vs extension) and implement purge accordingly
|
||||
- Configurable retention period
|
||||
- Safe deletion with user confirmation for bulk purge
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
# Browser automation + URL ingestion
|
||||
|
||||
- **What it is**:
|
||||
- Browser control for deterministic actions and screenshots.
|
||||
- URL-to-markdown extraction for ingesting web content.
|
||||
|
||||
## Docs references
|
||||
|
||||
- [`apps/kilocode-docs/pages/code-with-ai/features/browser-use.md`](../../apps/kilocode-docs/pages/code-with-ai/features/browser-use.md)
|
||||
|
||||
## Suggested migration
|
||||
|
||||
- **Kilo CLI availability**: Partial.
|
||||
- **Migration recommendation**:
|
||||
- Move URL ingestion / content fetching to Kilo CLI server (web fetch) where possible.
|
||||
- Keep browser automation in the extension host until Kilo CLI gains full automation primitives (or add a new server feature).
|
||||
- **Reimplementation required?**: Partial.
|
||||
|
||||
## Primary implementation anchors
|
||||
|
||||
- [`src/services/browser-automation/`](../../src/services/browser-automation/)
|
||||
@@ -1,25 +0,0 @@
|
||||
# Checkpoints (shadow versioning, workspace time travel)
|
||||
|
||||
- **What it is**: Task-scoped snapshots stored in a shadow git repository, with UI to diff/restore.
|
||||
|
||||
## Capabilities
|
||||
|
||||
- Per-task checkpoint history.
|
||||
- Restore files only vs restore files + task state.
|
||||
- Safety checks to avoid problematic paths/nested repos.
|
||||
|
||||
## Docs references
|
||||
|
||||
- [`apps/kilocode-docs/pages/code-with-ai/features/checkpoints.md`](../../apps/kilocode-docs/pages/code-with-ai/features/checkpoints.md)
|
||||
|
||||
## Suggested migration
|
||||
|
||||
- **Kilo CLI availability**: Partial.
|
||||
- **Migration recommendation**:
|
||||
- Evaluate whether Kilo CLI snapshots/revert semantics map to Kilo checkpoints (per-task, excludes, UX expectations).
|
||||
- If they map, delegate snapshot creation/storage/revert to Kilo CLI; otherwise keep the existing Kilo checkpoint service.
|
||||
- **Reimplementation required?**: Partial.
|
||||
|
||||
## Primary implementation anchors
|
||||
|
||||
- [`src/services/checkpoints/`](../../src/services/checkpoints/)
|
||||
@@ -1,29 +1,18 @@
|
||||
# Cloud Task Support
|
||||
|
||||
**Priority:** P2
|
||||
**Status:** ❌ Not started
|
||||
**Status:** 🔨 Partial
|
||||
|
||||
## Description
|
||||
## What Exists
|
||||
|
||||
Support for persisting tasks to the Kilo cloud, and restoring sessions that were saved to the Kilo cloud but started on other devices or clients.
|
||||
- Read-only cloud session retrieval: `getCloudSessions()`, `getCloudSession()`, `importCloudSession()` HTTP methods
|
||||
- `CloudSessionList` component showing paginated cloud sessions grouped by date with repo filtering
|
||||
- Cloud session preview (read-only message display)
|
||||
- Cloud session import (one-way import into local storage)
|
||||
- "Cloud History" toolbar button in sidebar
|
||||
|
||||
## Requirements
|
||||
## Remaining Work
|
||||
|
||||
- Save task state to Kilo cloud storage
|
||||
- Restore/resume tasks that were started on other devices or clients
|
||||
- Sync task history across devices
|
||||
- Handle conflict resolution when tasks are modified on multiple devices
|
||||
- Require Kilo authentication for cloud features
|
||||
|
||||
## Current State
|
||||
|
||||
No cloud task support exists. Tasks are stored locally by the CLI.
|
||||
|
||||
## Gaps
|
||||
|
||||
- No cloud sync infrastructure
|
||||
- No API endpoints for cloud task storage (may need backend work)
|
||||
- No conflict resolution strategy
|
||||
- No UI for cloud task browsing/restoring
|
||||
- Depends on [Task History](task-history.md) being implemented first
|
||||
- Depends on [Authentication](authentication-organization-enterprise-enforcement.md) for Kilo cloud access
|
||||
- Upload/sync local sessions to cloud
|
||||
- Real-time sync between devices
|
||||
- Conflict resolution when sessions are modified on multiple devices
|
||||
|
||||
@@ -1,24 +1,12 @@
|
||||
# Code reviews (local and cloud workflows)
|
||||
# Code Reviews (Local and Cloud Workflows)
|
||||
|
||||
- **What it is**: Automated AI review on PR open/update (cloud) plus a local “Review Mode”.
|
||||
**Priority:** P2
|
||||
**Status:** ❌ Not started
|
||||
|
||||
## Review scopes (service scan)
|
||||
## Remaining Work
|
||||
|
||||
- Uncommitted (working tree).
|
||||
- Branch vs base branch (main/master/develop detection).
|
||||
|
||||
## Docs references
|
||||
|
||||
- [`apps/kilocode-docs/pages/automate/code-reviews.md`](../../apps/kilocode-docs/pages/automate/code-reviews.md)
|
||||
|
||||
## Suggested migration
|
||||
|
||||
- **Kilo CLI availability**: Partial.
|
||||
- **Migration recommendation**:
|
||||
- Keep Kilo's review-mode UX in the VS Code extension host.
|
||||
- Optionally reuse Kilo CLI review templates/prompts server-side, but avoid depending on server UI that doesn't exist.
|
||||
- **Reimplementation required?**: Partial.
|
||||
|
||||
## Primary implementation anchors
|
||||
|
||||
- [`src/services/review/`](../../src/services/review/)
|
||||
- Local "Review Mode" for AI review of uncommitted changes
|
||||
- Branch vs base branch review (main/master/develop detection)
|
||||
- Automated AI review on PR open/update (cloud workflow)
|
||||
- VS Code review UX integration
|
||||
- Reuse CLI review templates/prompts where available
|
||||
|
||||
@@ -1,26 +1,18 @@
|
||||
# Codebase indexing & semantic search (Code Index)
|
||||
# Codebase Indexing & Semantic Search
|
||||
|
||||
- **What it is**: Vector-based indexing and semantic search over the repository.
|
||||
**Priority:** P2
|
||||
**Status:** ❌ Not started
|
||||
|
||||
## Capabilities
|
||||
## Remaining Work
|
||||
|
||||
- Local indexing (embeddings + local/remote vector DB).
|
||||
- Managed indexing (cloud).
|
||||
- Incremental updates via file watchers and hashing.
|
||||
- Multiple embedding providers and storage backends.
|
||||
- Vector-based indexing with embeddings (local and/or cloud)
|
||||
- Semantic search over the repository
|
||||
- Incremental updates via file watchers and hashing
|
||||
- Multiple embedding providers and storage backends
|
||||
- Integration with existing CLI grep/glob for hybrid search
|
||||
|
||||
## Docs references
|
||||
## Primary Implementation Anchors (kilocode-legacy)
|
||||
|
||||
- [`apps/kilocode-docs/pages/customize/context/codebase-indexing.md`](../../apps/kilocode-docs/pages/customize/context/codebase-indexing.md)
|
||||
These exist in the [kilocode-legacy](https://github.com/Kilo-Org/kilocode-legacy) repo, not in this extension:
|
||||
|
||||
## Suggested migration
|
||||
|
||||
- **Kilo CLI availability**: Partial.
|
||||
- **Migration recommendation**:
|
||||
- Use Kilo CLI server grep/glob/search endpoints for basic repo scanning.
|
||||
- Keep Kilo code-index + semantic search locally for now, or plan a server-side semantic indexing equivalent.
|
||||
- **Reimplementation required?**: Partial.
|
||||
|
||||
## Primary implementation anchors
|
||||
|
||||
- [`src/services/code-index/`](../../src/services/code-index/)
|
||||
- `src/services/code-index/`
|
||||
|
||||
@@ -1,21 +1,18 @@
|
||||
# Contribution tracking (AI attribution)
|
||||
# Contribution Tracking (AI Attribution)
|
||||
|
||||
- **What it is**: Tracks AI-assisted modifications for organizational reporting.
|
||||
**Priority:** P3
|
||||
**Status:** ❌ Not started
|
||||
|
||||
## Notable characteristics
|
||||
## Remaining Work
|
||||
|
||||
- Formatting-aware diffing.
|
||||
- Line hashing/fingerprinting.
|
||||
- Token/JWT handling for attribution APIs.
|
||||
- Track AI-assisted modifications for organizational reporting
|
||||
- Formatting-aware diffing
|
||||
- Line hashing/fingerprinting
|
||||
- Token/JWT handling for attribution APIs
|
||||
- Reporting UI
|
||||
|
||||
## Suggested migration
|
||||
## Primary Implementation Anchors (kilocode-legacy)
|
||||
|
||||
- **Kilo CLI availability**: Not present.
|
||||
- **Migration recommendation**:
|
||||
- Keep contribution tracking in the VS Code extension host.
|
||||
- If required later, add server-side storage/aggregation, but assume extension ownership for now.
|
||||
- **Reimplementation required?**: Yes.
|
||||
These exist in the [kilocode-legacy](https://github.com/Kilo-Org/kilocode-legacy) repo, not in this extension:
|
||||
|
||||
## Primary implementation anchors
|
||||
|
||||
- [`src/services/contribution-tracking/`](../../src/services/contribution-tracking/)
|
||||
- `src/services/contribution-tracking/`
|
||||
|
||||
@@ -1,21 +1,23 @@
|
||||
# Custom command system
|
||||
# Custom Command System
|
||||
|
||||
- **What it is**: Built-in + user-defined + project-defined reusable commands (often surfaced as slash commands).
|
||||
**Priority:** P2
|
||||
**Status:** ❌ Not started
|
||||
|
||||
## Capabilities
|
||||
## What Exists
|
||||
|
||||
- Project overrides global overrides built-in.
|
||||
- YAML frontmatter metadata.
|
||||
- Symlink-aware command discovery.
|
||||
- `CommandConfig` type in `types.ts` with `command` and `description` fields
|
||||
|
||||
## Suggested migration
|
||||
## Remaining Work
|
||||
|
||||
- **Kilo CLI availability**: Already.
|
||||
- **Migration recommendation**:
|
||||
- Prefer Kilo CLI's custom command system for definition and execution.
|
||||
- Keep VS Code UI entry points (command palette, menus) in the extension host as an adapter.
|
||||
- **Reimplementation required?**: Partial.
|
||||
- Slash command input handling in chat (detect `/` prefix, show command list)
|
||||
- Project-level command discovery (scan `.kilocode/commands/` or similar)
|
||||
- YAML frontmatter metadata support
|
||||
- Symlink-aware command discovery
|
||||
- VS Code command palette entry points
|
||||
- Wire to CLI's custom command system for execution
|
||||
|
||||
## Primary implementation anchors
|
||||
## Primary Implementation Anchors (kilocode-legacy)
|
||||
|
||||
- [`src/services/command/`](../../src/services/command/)
|
||||
These exist in the [kilocode-legacy](https://github.com/Kilo-Org/kilocode-legacy) repo, not in this extension:
|
||||
|
||||
- `src/services/command/`
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
# Deploy & Secure surfaces (navigation implies)
|
||||
|
||||
- **What it is**: Product areas hinted by docs navigation (deploy workflows, managed indexing, security reviews).
|
||||
|
||||
## Docs references
|
||||
|
||||
- [`apps/kilocode-docs/lib/nav/deploy-secure.ts`](../../apps/kilocode-docs/lib/nav/deploy-secure.ts)
|
||||
|
||||
## Suggested migration
|
||||
|
||||
- **Kilo CLI availability**: Not present.
|
||||
- **Migration recommendation**:
|
||||
- Keep deploy/security approval and policy UX in the VS Code extension host.
|
||||
- Add server-side policy surfaces only if/when Kilo CLI needs centralized enforcement beyond basic permissions.
|
||||
- **Reimplementation required?**: Yes.
|
||||
+15
-452
@@ -1,461 +1,24 @@
|
||||
# Editor Context Menus & Code Actions
|
||||
|
||||
Full spec of the VS Code-native menu, command, code action, keyboard shortcut, and prompt template system from the old Kilo Code extension. All of these need to be rebuilt in the new extension.
|
||||
**Priority:** P1
|
||||
**Status:** 🔨 Partial
|
||||
|
||||
> **Note:** For webview-internal context menus (right-click inside the chat panel), see [Context Menus & Tooltips (Webview)](../chat-ui-features/context-menus-tooltips.md).
|
||||
> For SCM commit message generation, see [Git Commit Message Generation](git-commit-message-generation.md).
|
||||
> This document supersedes the old stub at [`code-actions.md`](code-actions.md).
|
||||
## What Exists
|
||||
|
||||
---
|
||||
- **CodeActionProvider**: `KiloCodeActionProvider` provides lightbulb quick fixes (QuickFix for "Fix with Kilo Code" when diagnostics exist, RefactorRewrite for "Add/Explain/Improve with Kilo Code")
|
||||
- **Editor context menu**: "Kilo Code" submenu under `editor/context` with Explain, Fix, Improve, Add to Context
|
||||
- **Terminal context menu**: "Kilo Code" submenu under `terminal/context` with Add Terminal Content, Fix Command, Explain Command
|
||||
- **Keyboard shortcuts**: `Cmd+Shift+A` (focus chat), `Cmd+Shift+M` (agent manager), `Cmd+K Cmd+A` (add selection to context), plus Agent Manager shortcuts
|
||||
- **Prompt templates**: Hardcoded prompt templates for all actions
|
||||
- All commands registered in `extension.ts` and `package.json contributes`
|
||||
|
||||
## Overview
|
||||
## Remaining Work
|
||||
|
||||
The old extension registered a comprehensive set of VS Code contributions:
|
||||
- Terminal content capture — `getTerminalSelection()` is a **placeholder** returning empty string. Needs VS Code shell integration API for actual terminal content reading
|
||||
- Custom prompt overrides via extension settings (user-customizable prompt templates)
|
||||
|
||||
- A **"Kilo Code" submenu** in the editor right-click context menu
|
||||
- A **"Kilo Code" submenu** in the terminal right-click context menu
|
||||
- A **CodeActionProvider** for lightbulb quick fixes
|
||||
- **Keyboard shortcuts** for common actions
|
||||
- **Prompt templates** (user-customizable) that turn captured context into agent task instructions
|
||||
## Prompt Templates Reference
|
||||
|
||||
None of these exist yet in the rebuild.
|
||||
The following prompt templates are implemented with hardcoded defaults. The old extension allowed users to override these via `customSupportPrompts` settings — that override mechanism is the remaining gap.
|
||||
|
||||
---
|
||||
|
||||
## Editor Context Menus
|
||||
|
||||
Right-clicking in the editor shows a "Kilo Code" submenu with these commands:
|
||||
|
||||
| Command ID | Label | Captured Context | Behavior |
|
||||
| -------------- | -------------- | ------------------------------------------------- | ------------------------------------------------------------------------ |
|
||||
| `explainCode` | Explain Code | File path, selected text, line range | Starts an agent task with the EXPLAIN prompt |
|
||||
| `fixCode` | Fix Code | File path, selected text, line range, diagnostics | Starts an agent task with the FIX prompt |
|
||||
| `improveCode` | Improve Code | File path, selected text, line range | Starts an agent task with the IMPROVE prompt |
|
||||
| `addToContext` | Add to Context | File path, selected text, line range | Injects formatted code block into chat input (does **not** start a task) |
|
||||
|
||||
All commands use the VS Code editor API to capture the active editor's file path (`document.uri`), current selection (`editor.selection`), and the selected text. `fixCode` additionally captures diagnostics from `vscode.languages.getDiagnostics()` for the selection range.
|
||||
|
||||
---
|
||||
|
||||
## Terminal Context Menus
|
||||
|
||||
Right-clicking in the terminal shows a "Kilo Code" submenu:
|
||||
|
||||
| Command ID | Label | Captured Context | Behavior |
|
||||
| ------------------------ | --------------- | ----------------------------------- | ----------------------------------------------------- |
|
||||
| `terminalAddToContext` | Add to Context | Terminal selection or recent buffer | Injects terminal output into chat input |
|
||||
| `terminalFixCommand` | Fix Command | Last executed command + output | Starts an agent task with the TERMINAL_FIX prompt |
|
||||
| `terminalExplainCommand` | Explain Command | Last executed command + output | Starts an agent task with the TERMINAL_EXPLAIN prompt |
|
||||
|
||||
Terminal context capture uses `vscode.window.activeTerminal` and the terminal selection API.
|
||||
|
||||
> See also [Terminal / Shell Integration](terminal-shell-integration.md) for the underlying terminal command execution and PTY management that these context menu actions depend on.
|
||||
|
||||
---
|
||||
|
||||
## Code Action Provider (Lightbulb Quick Fixes)
|
||||
|
||||
A `CodeActionProvider` is registered for all languages. When the user clicks the lightbulb or presses the quick fix shortcut:
|
||||
|
||||
| Condition | Actions shown |
|
||||
| ------------------------------ | --------------------------------------------------- |
|
||||
| Always | **Add to Kilo Code** → triggers `addToContext` |
|
||||
| Diagnostics in selection range | **Fix with Kilo Code** → triggers `fixCode` |
|
||||
| No diagnostics | **Explain with Kilo Code** → triggers `explainCode` |
|
||||
| No diagnostics | **Improve with Kilo Code** → triggers `improveCode` |
|
||||
|
||||
Controlled by the `enableCodeActions` extension setting (default: `true`).
|
||||
|
||||
---
|
||||
|
||||
## Keyboard Shortcuts
|
||||
|
||||
| Shortcut (Mac / Win+Linux) | Command | Description |
|
||||
| ------------------------------- | ------------------------- | ----------------------------- |
|
||||
| `Cmd+Shift+A` / `Ctrl+Shift+A` | Focus chat input | Opens/focuses the chat panel |
|
||||
| `Cmd+K Cmd+A` / `Ctrl+K Ctrl+A` | Add selection to context | Runs `addToContext` |
|
||||
| `Cmd+Shift+G` / `Ctrl+Shift+G` | Generate terminal command | Starts TERMINAL_GENERATE task |
|
||||
| `Cmd+Alt+A` / `Ctrl+Alt+A` | Toggle auto-approve | Toggles auto-approval setting |
|
||||
|
||||
---
|
||||
|
||||
## Prompt Templates
|
||||
|
||||
The old extension defined prompt templates in `support-prompt.ts` that format captured context into agent task instructions. Each template is user-customizable via extension settings.
|
||||
|
||||
| Template | Used by | Purpose |
|
||||
| ------------------------- | ------------------------- | ------------------------------------------------------- |
|
||||
| `EXPLAIN` | `explainCode` | Ask the agent to explain the selected code |
|
||||
| `FIX` | `fixCode` | Ask the agent to fix code, including diagnostic details |
|
||||
| `IMPROVE` | `improveCode` | Ask the agent to improve/refactor selected code |
|
||||
| `ADD_TO_CONTEXT` | `addToContext` | Format a code block for injection into chat input |
|
||||
| `TERMINAL_ADD_TO_CONTEXT` | `terminalAddToContext` | Format terminal output for injection into chat input |
|
||||
| `TERMINAL_FIX` | `terminalFixCommand` | Ask the agent to fix a failed terminal command |
|
||||
| `TERMINAL_EXPLAIN` | `terminalExplainCommand` | Ask the agent to explain a terminal command/output |
|
||||
| `TERMINAL_GENERATE` | Generate terminal command | Ask the agent to generate a terminal command |
|
||||
| `COMMIT_MESSAGE` | SCM integration | Generate a commit message (tracked separately) |
|
||||
|
||||
---
|
||||
|
||||
## Data Flow
|
||||
|
||||
There are two distinct patterns:
|
||||
|
||||
### 1. Action → Agent Task
|
||||
|
||||
Commands like `explainCode`, `fixCode`, `improveCode`, `terminalFixCommand`, and `terminalExplainCommand` follow this flow:
|
||||
|
||||
1. User triggers command (context menu, code action, or keybinding)
|
||||
2. Extension captures context from VS Code APIs (editor selection, diagnostics, terminal buffer)
|
||||
3. Extension fills in the prompt template with captured context
|
||||
4. Extension sends the formatted prompt as a new message to the CLI session (creating a new task)
|
||||
|
||||
### 2. Action → Context Injection
|
||||
|
||||
Commands like `addToContext` and `terminalAddToContext` follow a different flow:
|
||||
|
||||
1. User triggers command
|
||||
2. Extension captures context from VS Code APIs
|
||||
3. Extension formats the context as a code block using the template
|
||||
4. Extension posts a message to the webview to **set the chat input text** (not submit it)
|
||||
5. User can review and edit before sending
|
||||
|
||||
---
|
||||
|
||||
## Implementation Notes for Rebuild
|
||||
|
||||
### `package.json` Contributions
|
||||
|
||||
Register in `contributes`:
|
||||
|
||||
- `submenus`: Define "Kilo Code" submenus for editor and terminal contexts
|
||||
- `menus`: Register commands under `editor/context` and `terminal/context` menu groups
|
||||
- `commands`: Register all command IDs with titles and icons
|
||||
- `keybindings`: Register keyboard shortcuts with `key`, `mac`, and `when` clauses
|
||||
|
||||
> **Note:** [`package.json`](../../package.json) already has `contributes.commands` (8 commands) and `contributes.menus` (`view/title` + `editor/title` menus) registered. New commands, submenus, and keybindings should be **added alongside** the existing entries, not replace them.
|
||||
|
||||
### CodeActionProvider
|
||||
|
||||
- Register a `CodeActionProvider` for `*` (all languages)
|
||||
- Check `vscode.languages.getDiagnostics()` to decide which actions to show
|
||||
- Gate behind the `enableCodeActions` setting
|
||||
- Return `CodeAction` instances with `command` set to the appropriate command ID
|
||||
|
||||
### Editor Context Capture
|
||||
|
||||
- `vscode.window.activeTextEditor` for file path, selection, document
|
||||
- `editor.document.getText(selection)` for selected text
|
||||
- `selection.start.line` / `selection.end.line` for line range
|
||||
- `vscode.languages.getDiagnostics(document.uri)` filtered to selection range for `fixCode`
|
||||
|
||||
### Terminal Context Capture
|
||||
|
||||
- `vscode.window.activeTerminal` for the active terminal
|
||||
- Terminal selection API for selected text in terminal
|
||||
- Shell integration API for last command and its output (where available)
|
||||
|
||||
### Prompt Templates
|
||||
|
||||
Need an equivalent template system in the extension. Options:
|
||||
|
||||
- Hardcode templates with settings overrides (like the old extension)
|
||||
- Delegate prompt construction to the CLI (if it supports parameterized task creation)
|
||||
|
||||
### "Add to Context" Pattern
|
||||
|
||||
The webview needs to handle an incoming message that **sets the chat input text** without submitting it. This requires:
|
||||
|
||||
- A new message type (e.g., `SetChatInput`) in the extension→webview protocol
|
||||
- The `PromptInput` component to accept externally-set text
|
||||
|
||||
---
|
||||
|
||||
## Prompt Templates (Full Text)
|
||||
|
||||
Below are the exact prompt templates from the old extension's `src/shared/support-prompt.ts`. Each template uses `${variable}` interpolation. These are the defaults; users can customize any template via the `customSupportPrompts` extension setting.
|
||||
|
||||
> **Note:** The `diagnosticText` variable used in the FIX template is auto-generated from VS Code diagnostics using the format `- [source] message (code)`.
|
||||
|
||||
### EXPLAIN
|
||||
|
||||
**Variables:** `filePath`, `startLine`, `endLine`, `userInput`, `selectedText`
|
||||
|
||||
```
|
||||
Explain the following code from file path ${filePath}:${startLine}-${endLine}
|
||||
${userInput}
|
||||
|
||||
\`\`\`
|
||||
${selectedText}
|
||||
\`\`\`
|
||||
|
||||
Please provide a clear and concise explanation of what this code does, including:
|
||||
1. The purpose and functionality
|
||||
2. Key components and their interactions
|
||||
3. Important patterns or techniques used
|
||||
```
|
||||
|
||||
### FIX
|
||||
|
||||
**Variables:** `filePath`, `startLine`, `endLine`, `diagnosticText`, `userInput`, `selectedText`
|
||||
|
||||
```
|
||||
Fix any issues in the following code from file path ${filePath}:${startLine}-${endLine}
|
||||
${diagnosticText}
|
||||
${userInput}
|
||||
|
||||
\`\`\`
|
||||
${selectedText}
|
||||
\`\`\`
|
||||
|
||||
Please:
|
||||
1. Address all detected problems listed above (if any)
|
||||
2. Identify any other potential bugs or issues
|
||||
3. Provide corrected code
|
||||
4. Explain what was fixed and why
|
||||
```
|
||||
|
||||
### IMPROVE
|
||||
|
||||
**Variables:** `filePath`, `startLine`, `endLine`, `userInput`, `selectedText`
|
||||
|
||||
```
|
||||
Improve the following code from file path ${filePath}:${startLine}-${endLine}
|
||||
${userInput}
|
||||
|
||||
\`\`\`
|
||||
${selectedText}
|
||||
\`\`\`
|
||||
|
||||
Please suggest improvements for:
|
||||
1. Code readability and maintainability
|
||||
2. Performance optimization
|
||||
3. Best practices and patterns
|
||||
4. Error handling and edge cases
|
||||
|
||||
Provide the improved code along with explanations for each enhancement.
|
||||
```
|
||||
|
||||
### ADD_TO_CONTEXT
|
||||
|
||||
**Variables:** `filePath`, `startLine`, `endLine`, `selectedText`
|
||||
|
||||
```
|
||||
${filePath}:${startLine}-${endLine}
|
||||
\`\`\`
|
||||
${selectedText}
|
||||
\`\`\`
|
||||
```
|
||||
|
||||
### TERMINAL_ADD_TO_CONTEXT
|
||||
|
||||
**Variables:** `userInput`, `terminalContent`
|
||||
|
||||
```
|
||||
${userInput}
|
||||
Terminal output:
|
||||
\`\`\`
|
||||
${terminalContent}
|
||||
\`\`\`
|
||||
```
|
||||
|
||||
### TERMINAL_FIX
|
||||
|
||||
**Variables:** `userInput`, `terminalContent`
|
||||
|
||||
```
|
||||
${userInput}
|
||||
Fix this terminal command:
|
||||
\`\`\`
|
||||
${terminalContent}
|
||||
\`\`\`
|
||||
|
||||
Please:
|
||||
1. Identify any issues in the command
|
||||
2. Provide the corrected command
|
||||
3. Explain what was fixed and why
|
||||
```
|
||||
|
||||
### TERMINAL_EXPLAIN
|
||||
|
||||
**Variables:** `userInput`, `terminalContent`
|
||||
|
||||
```
|
||||
${userInput}
|
||||
Explain this terminal command:
|
||||
\`\`\`
|
||||
${terminalContent}
|
||||
\`\`\`
|
||||
|
||||
Please provide:
|
||||
1. What the command does
|
||||
2. Explanation of each part/flag
|
||||
3. Expected output and behavior
|
||||
```
|
||||
|
||||
### TERMINAL*GENERATE *(Kilo-specific addition)\_
|
||||
|
||||
**Variables:** `userInput`, `operatingSystem`, `currentDirectory`, `shell`
|
||||
|
||||
```
|
||||
Generate a terminal command based on this description: "${userInput}"
|
||||
|
||||
Context:
|
||||
- Operating System: ${operatingSystem}
|
||||
- Current Directory: ${currentDirectory}
|
||||
- Shell: ${shell}
|
||||
|
||||
Requirements:
|
||||
1. Generate ONLY the command, no explanations or formatting
|
||||
2. Ensure the command is safe and appropriate
|
||||
3. Use common command-line tools and best practices
|
||||
4. Consider the current working directory context
|
||||
5. Return only the raw command that can be executed directly
|
||||
```
|
||||
|
||||
### ENHANCE
|
||||
|
||||
**Variables:** `userInput`
|
||||
|
||||
```
|
||||
Generate an enhanced version of this prompt (reply with only the enhanced prompt - no conversation, explanations, lead-in, bullet points, placeholders, or surrounding quotes):
|
||||
|
||||
${userInput}
|
||||
```
|
||||
|
||||
### CONDENSE
|
||||
|
||||
**Variables:** none (system prompt for conversation summary)
|
||||
|
||||
```
|
||||
Your task is to create a detailed summary of the conversation so far, paying close attention to the user's explicit requests and your previous actions.
|
||||
This summary should be thorough in capturing technical details, code patterns, and architectural decisions that would be essential for continuing with the conversation and supporting any continuing tasks.
|
||||
|
||||
Your summary should be structured as follows:
|
||||
Context: The context to continue the conversation with. If applicable based on the current task, this should include:
|
||||
1. Previous Conversation: High level details about what was discussed throughout the entire conversation with the user. This should be written to allow someone to be able to follow the general overarching conversation flow.
|
||||
2. Current Work: Describe in detail what was being worked on prior to this request to summarize the conversation. Pay special attention to the more recent messages in the conversation.
|
||||
3. Key Technical Concepts: List all important technical concepts, technologies, coding conventions, and frameworks discussed, which might be relevant for continuing with this work.
|
||||
4. Relevant Files and Code: If applicable, enumerate specific files and code sections examined, modified, or created for the task continuation. Pay special attention to the most recent messages and changes.
|
||||
5. Problem Solving: Document problems solved thus far and any ongoing troubleshooting efforts.
|
||||
6. Pending Tasks and Next Steps: Outline all pending tasks that you have explicitly been asked to work on, as well as list the next steps you will take for all outstanding work, if applicable. Include code snippets where they add clarity. For any next steps, include direct quotes from the most recent conversation showing exactly what task you were working on and where you left off. This should be verbatim to ensure there's no information loss in context between tasks.
|
||||
|
||||
Example summary structure:
|
||||
1. Previous Conversation:
|
||||
[Detailed description]
|
||||
2. Current Work:
|
||||
[Detailed description]
|
||||
3. Key Technical Concepts:
|
||||
- [Concept 1]
|
||||
- [Concept 2]
|
||||
- [...]
|
||||
4. Relevant Files and Code:
|
||||
- [File Name 1]
|
||||
- [Summary of why this file is important]
|
||||
- [Summary of the changes made to this file, if any]
|
||||
- [Important Code Snippet]
|
||||
- [File Name 2]
|
||||
- [Important Code Snippet]
|
||||
- [...]
|
||||
5. Problem Solving:
|
||||
[Detailed description]
|
||||
6. Pending Tasks and Next Steps:
|
||||
- [Task 1 details & next steps]
|
||||
- [Task 2 details & next steps]
|
||||
- [...]
|
||||
|
||||
Output only the summary of the conversation so far, without any additional commentary or explanation.
|
||||
```
|
||||
|
||||
### COMMIT*MESSAGE *(Kilo-specific addition, tracked separately in [git-commit-message-generation.md](git-commit-message-generation.md))\_
|
||||
|
||||
**Variables:** `customInstructions`, `gitContext`
|
||||
|
||||
````
|
||||
# Conventional Commit Message Generator
|
||||
## System Instructions
|
||||
You are an expert Git commit message generator that creates conventional commit messages based on staged changes. Analyze the provided git diff output and generate appropriate conventional commit messages following the specification.
|
||||
|
||||
${customInstructions}
|
||||
|
||||
## CRITICAL: Commit Message Output Rules
|
||||
- DO NOT include any internal status indicators or bracketed metadata (e.g. "[Status: Active]", "[Context: Missing]")
|
||||
- DO NOT include any task-specific formatting or artifacts from other rules
|
||||
- ONLY Generate a clean conventional commit message as specified below
|
||||
|
||||
${gitContext}
|
||||
|
||||
## Conventional Commits Format
|
||||
Generate commit messages following this exact structure:
|
||||
```
|
||||
<type>[optional scope]: <description>
|
||||
[optional body]
|
||||
[optional footer(s)]
|
||||
```
|
||||
|
||||
### Core Types (Required)
|
||||
- **feat**: New feature or functionality (MINOR version bump)
|
||||
- **fix**: Bug fix or error correction (PATCH version bump)
|
||||
|
||||
### Additional Types (Extended)
|
||||
- **docs**: Documentation changes only
|
||||
- **style**: Code style changes (whitespace, formatting, semicolons, etc.)
|
||||
- **refactor**: Code refactoring without feature changes or bug fixes
|
||||
- **perf**: Performance improvements
|
||||
- **test**: Adding or fixing tests
|
||||
- **build**: Build system or external dependency changes
|
||||
- **ci**: CI/CD configuration changes
|
||||
- **chore**: Maintenance tasks, tooling changes
|
||||
- **revert**: Reverting previous commits
|
||||
|
||||
### Scope Guidelines
|
||||
- Use parentheses: `feat(api):`, `fix(ui):`
|
||||
- Common scopes: `api`, `ui`, `auth`, `db`, `config`, `deps`, `docs`
|
||||
- For monorepos: package or module names
|
||||
- Keep scope concise and lowercase
|
||||
|
||||
### Description Rules
|
||||
- Use imperative mood ("add" not "added" or "adds")
|
||||
- Start with lowercase letter
|
||||
- No period at the end
|
||||
- Maximum 50 characters
|
||||
- Be concise but descriptive
|
||||
|
||||
### Body Guidelines (Optional)
|
||||
- Start one blank line after description
|
||||
- Explain the "what" and "why", not the "how"
|
||||
- Wrap at 72 characters per line
|
||||
- Use for complex changes requiring explanation
|
||||
|
||||
### Footer Guidelines (Optional)
|
||||
- Start one blank line after body
|
||||
- **Breaking Changes**: `BREAKING CHANGE: description`
|
||||
|
||||
## Analysis Instructions
|
||||
When analyzing staged changes:
|
||||
1. Determine Primary Type based on the nature of changes
|
||||
2. Identify Scope from modified directories or modules
|
||||
3. Craft Description focusing on the most significant change
|
||||
4. Determine if there are Breaking Changes
|
||||
5. For complex changes, include a detailed body explaining what and why
|
||||
6. Add appropriate footers for issue references or breaking changes
|
||||
|
||||
For significant changes, include a detailed body explaining the changes.
|
||||
|
||||
Return ONLY the commit message in the conventional format, nothing else.
|
||||
````
|
||||
|
||||
### NEW_TASK
|
||||
|
||||
**Variables:** `userInput`
|
||||
|
||||
```
|
||||
${userInput}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Already Done / Tracked Elsewhere
|
||||
|
||||
- **View title bar buttons**: ✅ Done ([#181](https://github.com/Kilo-Org/kilocode/issues/181))
|
||||
- **SCM commit message generation**: Tracked in [git-commit-message-generation.md](git-commit-message-generation.md)
|
||||
Templates: EXPLAIN, FIX, IMPROVE, ADD_TO_CONTEXT, TERMINAL_ADD_TO_CONTEXT, TERMINAL_FIX, TERMINAL_EXPLAIN, TERMINAL_GENERATE, ENHANCE, CONDENSE, COMMIT_MESSAGE, NEW_TASK
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
# Fast edits (diff-based editing)
|
||||
|
||||
- **What it is**: A file-editing strategy preference to apply diffs/patches rather than rewriting full files.
|
||||
- **Why it matters**: Improves speed and reduces risk of truncation/large rewrites; includes match-precision tuning.
|
||||
|
||||
## Docs references
|
||||
|
||||
- [`apps/kilocode-docs/pages/code-with-ai/features/fast-edits.md`](../../apps/kilocode-docs/pages/code-with-ai/features/fast-edits.md)
|
||||
|
||||
## Suggested migration
|
||||
|
||||
- **Kilo CLI availability**: Already.
|
||||
- **Migration recommendation**:
|
||||
- Prefer Kilo CLI server patch/apply tooling for generating and applying edits.
|
||||
- Keep VS Code-specific diff/preview/confirmation UX in the extension host.
|
||||
- **Reimplementation required?**: Partial.
|
||||
|
||||
## Implementation notes
|
||||
|
||||
- This often spans “tooling” and edit-application code, and may not appear as a single service directory under `src/services`.
|
||||
@@ -1,26 +0,0 @@
|
||||
# Git commit message generation
|
||||
|
||||
- **What it is**: Generates commit messages from git context (commonly staged changes; some implementations also consider selected files).
|
||||
|
||||
## Notable characteristics
|
||||
|
||||
- VS Code Source Control integration (fills commit message box).
|
||||
- Filtering for lockfiles/build noise.
|
||||
- Regeneration support to avoid repeating similar messages.
|
||||
- Adapter support for JetBrains.
|
||||
|
||||
## Docs references
|
||||
|
||||
- [`apps/kilocode-docs/pages/code-with-ai/features/git-commit-generation.md`](../../apps/kilocode-docs/pages/code-with-ai/features/git-commit-generation.md)
|
||||
|
||||
## Suggested migration
|
||||
|
||||
- **Kilo CLI availability**: Not present.
|
||||
- **Migration recommendation**:
|
||||
- Keep commit message generation in the VS Code extension host (Git integration, UX, and local repo context).
|
||||
- Reimplement any agent-loop dependencies as needed, but do not block on server support.
|
||||
- **Reimplementation required?**: Yes.
|
||||
|
||||
## Primary implementation anchors
|
||||
|
||||
- [`src/services/commit-message/`](../../src/services/commit-message/)
|
||||
@@ -1,15 +0,0 @@
|
||||
# Integrations (for example GitHub connectivity)
|
||||
|
||||
- **What it is**: Connecting external systems (notably GitHub) to enable higher-level workflows.
|
||||
|
||||
## Docs references
|
||||
|
||||
- [`apps/kilocode-docs/pages/automate/integrations.md`](../../apps/kilocode-docs/pages/automate/integrations.md)
|
||||
|
||||
## Suggested migration
|
||||
|
||||
- **Kilo CLI availability**: Partial.
|
||||
- **Migration recommendation**:
|
||||
- Use Kilo CLI's plugin system where it covers the integration (non-IDE-specific).
|
||||
- Keep IDE-specific integrations (VS Code APIs, UI hooks) in the extension and decide per integration.
|
||||
- **Reimplementation required?**: Partial.
|
||||
@@ -1,21 +1,16 @@
|
||||
# Marketplace (installable Modes, MCP servers, Skills)
|
||||
# Marketplace (Installable Modes, MCP Servers, Skills)
|
||||
|
||||
- **What it is**: A catalog-driven install system for extending Kilo Code via remote configs.
|
||||
**Priority:** P2
|
||||
**Status:** ❌ Not started
|
||||
|
||||
## Installs
|
||||
## What Exists
|
||||
|
||||
- Modes (behavior packages).
|
||||
- MCP servers (tool servers).
|
||||
- Skills (reusable instruction packs).
|
||||
- Toolbar button registered (`kilo-code.new.marketplaceButtonClicked`) with `$(extensions)` icon
|
||||
- Renders `<DummyView title="Marketplace" />` — a placeholder with no functionality
|
||||
|
||||
## Suggested migration
|
||||
## Remaining Work
|
||||
|
||||
- **Kilo CLI availability**: Not present.
|
||||
- **Migration recommendation**:
|
||||
- Keep the Marketplace feature in the VS Code extension host (install/update UX and IDE integration).
|
||||
- Reimplement server-side support only if Kilo CLI introduces a marketplace concept later.
|
||||
- **Reimplementation required?**: Yes.
|
||||
|
||||
## Primary implementation anchors
|
||||
|
||||
No marketplace service directory exists in the new extension. The marketplace feature needs to be built from scratch.
|
||||
- Catalog browsing (Modes, MCP servers, Skills)
|
||||
- Install/uninstall/update capabilities
|
||||
- Marketplace API endpoints (may need backend work)
|
||||
- Search and filtering within the catalog
|
||||
|
||||
@@ -1,26 +1,19 @@
|
||||
# MCP (Model Context Protocol) + MCP Hub
|
||||
# MCP (Model Context Protocol) & MCP Hub
|
||||
|
||||
- **What it is**: A protocol for connecting external tool/resource servers, plus a hub that manages MCP connections.
|
||||
**Priority:** P1
|
||||
**Status:** 🔨 Partial
|
||||
|
||||
## Capabilities
|
||||
## What Exists
|
||||
|
||||
- Multiple transports (local stdio, remote HTTP/SSE).
|
||||
- OAuth support for remote servers.
|
||||
- Allowlisting/disablement of tools.
|
||||
- Auto-reconnect and error history.
|
||||
- HTTP client methods: `getMcpStatus()`, `addMcpServer()`, `connectMcpServer()`, `disconnectMcpServer()`
|
||||
- `BrowserAutomationService` uses MCP API to register Playwright MCP server
|
||||
- AgentBehaviour settings tab has "MCP Servers" subtab showing a **read-only list** of configured MCP servers (names, commands/args, URLs)
|
||||
|
||||
## Docs references
|
||||
## Remaining Work
|
||||
|
||||
- [`apps/kilocode-docs/pages/automate/mcp/overview.md`](../../apps/kilocode-docs/pages/automate/mcp/overview.md)
|
||||
|
||||
## Suggested migration
|
||||
|
||||
- **Kilo CLI availability**: Already.
|
||||
- **Migration recommendation**:
|
||||
- Prefer Kilo CLI server MCP endpoints for MCP lifecycle, tool routing, and execution.
|
||||
- Keep VS Code UI and approval/consent surfaces in the extension host.
|
||||
- **Reimplementation required?**: No.
|
||||
|
||||
## Primary implementation anchors
|
||||
|
||||
MCP is managed by the CLI backend, not local extension services. The extension interacts with MCP via HTTP client methods in [`http-client.ts`](../../src/services/cli-backend/http-client.ts): `getMcpStatus`, `addMcpServer`, `connectMcpServer`, `disconnectMcpServer`. The [`BrowserAutomationService`](../../src/services/browser-automation/browser-automation-service.ts) uses these methods to register Playwright as an MCP server.
|
||||
- Add/edit/delete MCP server controls in the settings UI
|
||||
- Connect/disconnect controls per server
|
||||
- Tool allowlisting/disablement per server
|
||||
- Connection status display per server (connected/disconnected/error)
|
||||
- Auto-reconnect and error history display
|
||||
- MCP Hub for discovering available MCP servers
|
||||
|
||||
@@ -3,25 +3,12 @@
|
||||
**Priority:** P3
|
||||
**Status:** ❌ Not started
|
||||
|
||||
## Description
|
||||
## Remaining Work
|
||||
|
||||
Support for the `/init` command — initialize a repository for agentic engineering. This sets up the project with appropriate configuration files, rules, and conventions for working with Kilo Code.
|
||||
|
||||
## Requirements
|
||||
|
||||
- Command or button to initialize a repository
|
||||
- Creates appropriate configuration files (e.g., AGENTS.md, .kilocode/ directory)
|
||||
- Command or button to initialize a repository for agentic engineering
|
||||
- Creates configuration files (e.g., AGENTS.md, .kilocode/ directory)
|
||||
- Detects existing project structure and tailors initialization
|
||||
- May scaffold rules, workflows, or skill configurations
|
||||
- Should be accessible from VS Code command palette and/or chat UI
|
||||
|
||||
## Current State
|
||||
|
||||
No initialization support exists in the extension. The CLI supports `/init`.
|
||||
|
||||
## Gaps
|
||||
|
||||
- No init command registered in the extension
|
||||
- No UI for triggering initialization
|
||||
- Need to determine if this calls a CLI endpoint or replicates CLI logic
|
||||
- No progress/status feedback during initialization
|
||||
- Accessible from VS Code command palette and/or chat UI
|
||||
- Determine if this calls a CLI `/init` endpoint or replicates CLI logic
|
||||
- Progress/status feedback during initialization
|
||||
|
||||
@@ -1,28 +1,16 @@
|
||||
# Rules & Workflows
|
||||
|
||||
**Priority:** P3
|
||||
**Status:** ❌ Not started
|
||||
**Status:** 🔨 Partial
|
||||
|
||||
## Description
|
||||
## What Exists
|
||||
|
||||
Support for rules and workflows. Rules define constraints and guidelines for the AI agent. Workflows define multi-step automated processes.
|
||||
- Rules subtab in AgentBehaviour settings allows managing instruction file paths (add/remove paths like `./INSTRUCTIONS.md`), persisted to `config.instructions`
|
||||
|
||||
## Requirements
|
||||
## Remaining Work
|
||||
|
||||
- View and manage rules (project-level, user-level, global)
|
||||
- Create/edit/delete rules via the extension UI
|
||||
- View and manage workflows
|
||||
- Rules are applied to agent sessions automatically
|
||||
- Workflow management UI (currently a `<Placeholder>` stub in AgentBehaviour settings)
|
||||
- Workflow definition and execution format
|
||||
- UI for browsing `.kilocode/rules/` and similar rule sources
|
||||
|
||||
## Current State
|
||||
|
||||
No rules or workflow UI exists. The CLI backend supports rules (AGENTS.md, .kilocode/rules/).
|
||||
|
||||
## Gaps
|
||||
|
||||
- No rules management UI
|
||||
- No workflow definition or execution UI
|
||||
- Need to determine CLI endpoints for rules CRUD
|
||||
- Need to determine workflow format and execution model
|
||||
- Determine CLI endpoints for workflow CRUD
|
||||
- Related to [Custom Commands](custom-command-system.md) and [Skills System](skills-system.md)
|
||||
|
||||
-18
@@ -1,18 +0,0 @@
|
||||
# Search & repo scanning infrastructure
|
||||
|
||||
- **What it is**: High-performance repo scanning and search utilities used across multiple features.
|
||||
|
||||
## Suggested migration
|
||||
|
||||
- **Kilo CLI availability**: Already.
|
||||
- **Migration recommendation**:
|
||||
- Delegate grep/glob/repo scanning to Kilo CLI server endpoints.
|
||||
- Keep VS Code UX (search UI, previews, navigation) in the extension host.
|
||||
- **Reimplementation required?**: No.
|
||||
|
||||
## Primary implementation anchors
|
||||
|
||||
- [`src/services/ripgrep/`](../../src/services/ripgrep/)
|
||||
- [`src/services/search/`](../../src/services/search/)
|
||||
- [`src/services/glob/`](../../src/services/glob/)
|
||||
- [`src/services/roo-config/`](../../src/services/roo-config/)
|
||||
@@ -1,15 +1,10 @@
|
||||
# Settings Sync integration
|
||||
# Settings Sync Integration
|
||||
|
||||
- **What it is**: Registers an allowlist of extension state/settings for VS Code settings sync.
|
||||
**Priority:** P3
|
||||
**Status:** ❌ Not started
|
||||
|
||||
## Suggested migration
|
||||
## Remaining Work
|
||||
|
||||
- **Kilo CLI availability**: Not present.
|
||||
- **Migration recommendation**:
|
||||
- Keep Settings Sync integration in the VS Code extension host (VS Code Settings Sync APIs).
|
||||
- Optionally mirror a subset of settings into Kilo CLI config, but do not require server support.
|
||||
- **Reimplementation required?**: Yes.
|
||||
|
||||
## Primary implementation anchors
|
||||
|
||||
- [`src/services/settings-sync/`](../../src/services/settings-sync/)
|
||||
- Register allowlist of extension state/settings for VS Code Settings Sync
|
||||
- Determine which settings should sync (extension settings in `settings.json` vs CLI config)
|
||||
- Optionally mirror a subset of settings into CLI config
|
||||
|
||||
@@ -3,23 +3,13 @@
|
||||
**Priority:** P1
|
||||
**Status:** 🔨 Partial
|
||||
|
||||
## Description
|
||||
## What Exists
|
||||
|
||||
Replicate the settings that are available in OpenCode (CLI) and allow users to customize them through the VS Code extension UI.
|
||||
12 of 14 tabs are functional: Providers, AgentBehaviour (agents/MCP/rules/skills subtabs work; workflows is a stub), AutoApprove, Browser, Checkpoints, Display, Autocomplete, Notifications, Context, Experimental, Language, About Kilo Code.
|
||||
|
||||
## Requirements
|
||||
## Remaining Work
|
||||
|
||||
- Settings UI that mirrors OpenCode's configuration options
|
||||
- Organized into logical tabs/sections
|
||||
- Settings persist and sync with CLI configuration
|
||||
- Changes take effect immediately or with clear save/apply semantics
|
||||
- Include all major setting categories: providers, models, behaviour, display, etc.
|
||||
|
||||
## Current State
|
||||
|
||||
14 tabs are functional: Providers (model selection + allow/block lists), AgentBehaviour (MCP read-only, rules, skills), AutoApprove (per-tool allow/ask/deny dropdowns), Browser, Autocomplete, Display, Notifications, Context, Terminal, Prompts, Experimental, Language, AboutKiloCode.
|
||||
|
||||
## Gaps
|
||||
|
||||
- Workflows subtab inside AgentBehaviour is a `<Placeholder>` (not implemented)
|
||||
- No import/export settings functionality
|
||||
- **Terminal tab**: Shows "Not implemented" message
|
||||
- **Prompts tab**: Shows "Not implemented" message
|
||||
- **Workflows subtab** (inside AgentBehaviour): Renders a `<Placeholder>` with no functionality
|
||||
- Import/export settings functionality
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
# Skills system
|
||||
# Skills System
|
||||
|
||||
- **What it is**: Discovery and management of local skills (instruction packs) with override and hot reload behavior.
|
||||
**Priority:** P2
|
||||
**Status:** 🔨 Partial
|
||||
|
||||
## Suggested migration
|
||||
## What Exists
|
||||
|
||||
- **Kilo CLI availability**: Already.
|
||||
- **Migration recommendation**:
|
||||
- Prefer Kilo CLI skills as the execution/runtime mechanism.
|
||||
- Keep packaging/shipping of Kilo-specific skills and any VS Code UI around them in the extension host.
|
||||
- **Reimplementation required?**: Partial.
|
||||
- AgentBehaviour settings "skills" subtab manages skill paths (local directories) and skill URLs (remote endpoints), persisted to `config.skills.paths` and `config.skills.urls`
|
||||
|
||||
## Primary implementation anchors
|
||||
## Remaining Work
|
||||
|
||||
- [`src/services/skills/`](../../src/services/skills/)
|
||||
- Skill execution runtime integration in the extension
|
||||
- Skill discovery (browse available skills)
|
||||
- Hot-reload when skill files change
|
||||
- CLI has the skills runtime — extension needs UI beyond config management
|
||||
|
||||
@@ -1,15 +1,17 @@
|
||||
# Speech-to-text (voice input)
|
||||
# Speech-to-Text (Voice Input)
|
||||
|
||||
- **What it is**: A streaming STT subsystem for dictation/voice input.
|
||||
**Priority:** P3
|
||||
**Status:** ❌ Not started
|
||||
|
||||
## Suggested migration
|
||||
## Remaining Work
|
||||
|
||||
- **Kilo CLI availability**: Already.
|
||||
- **Migration recommendation**:
|
||||
- Keep speech capture and UX in the webview/UI (microphone permissions and streaming).
|
||||
- Use Kilo CLI-compatible STT flows where helpful, but avoid making STT a required server capability.
|
||||
- **Reimplementation required?**: Partial.
|
||||
- Microphone capture in webview
|
||||
- Streaming STT integration
|
||||
- Voice input button in prompt area
|
||||
- Determine STT provider (browser API, CLI-compatible, or external service)
|
||||
|
||||
## Primary implementation anchors
|
||||
## Primary Implementation Anchors (kilocode-legacy)
|
||||
|
||||
- [`src/services/stt/`](../../src/services/stt/)
|
||||
These exist in the [kilocode-legacy](https://github.com/Kilo-Org/kilocode-legacy) repo, not in this extension:
|
||||
|
||||
- `src/services/stt/`
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
# Terminal / shell integration
|
||||
|
||||
- **What it is**: Execute terminal commands and capture output without manual copy/paste, tracking exit codes and working directory changes.
|
||||
|
||||
## Docs references
|
||||
|
||||
- [`apps/kilocode-docs/pages/automate/extending/shell-integration.md`](../../apps/kilocode-docs/pages/automate/extending/shell-integration.md)
|
||||
|
||||
## Suggested migration
|
||||
|
||||
- **Kilo CLI availability**: Already.
|
||||
- **Migration recommendation**:
|
||||
- Delegate command execution and PTY/shell management to Kilo CLI server endpoints.
|
||||
- Keep VS Code terminal UX (presentation, streaming, approvals) in the extension as an adapter.
|
||||
- **Reimplementation required?**: Partial.
|
||||
|
||||
## Implementation notes
|
||||
|
||||
- Some shell integration may live outside `src/services` (for example in tool implementations), but is a foundational automation substrate.
|
||||
@@ -6,107 +6,122 @@ This extension is a **ground-up rebuild** of the [old Kilo Code extension](https
|
||||
|
||||
This document tracks remaining work needed for feature parity with the old extension. Each feature links to its detailed parity requirement doc. Features sourced from the [GitHub project board](https://github.com/orgs/Kilo-Org/projects/25/views/1) include issue links.
|
||||
|
||||
## Current State Summary
|
||||
|
||||
The rebuild has a working foundation:
|
||||
|
||||
- **CLI backend**: server lifecycle (spawn, port detection, auth, dispose) in [`server-manager.ts`](../src/services/cli-backend/server-manager.ts), HTTP client with 20 endpoints in [`http-client.ts`](../src/services/cli-backend/http-client.ts), SSE client with event subscriptions in [`sse-client.ts`](../src/services/cli-backend/sse-client.ts)
|
||||
- **Chat UI**: message list with text/tool/reasoning parts, streaming text deltas, auto-scroll in [`ChatView.tsx`](../webview-ui/src/components/chat/ChatView.tsx) and [`MessageList.tsx`](../webview-ui/src/components/chat/MessageList.tsx). Markdown rendering via kilo-ui's `<KiloMessage>` component with syntax-highlighted code blocks and per-tool renderers.
|
||||
- **Tool parts**: delegation to kilo-ui per-tool renderers with status icons, expandable input/output sections, status-based styling in [`Message.tsx`](../webview-ui/src/components/chat/Message.tsx)
|
||||
- **Prompt input**: send/abort controls with integrated model selector and mode switcher in [`PromptInput.tsx`](../webview-ui/src/components/chat/PromptInput.tsx)
|
||||
- **Permissions**: rendered through kilo-ui's DataProvider/permission components — reject/once/always with expandable tool details
|
||||
- **Sessions**: create, list, select, load messages via [`session.tsx`](../webview-ui/src/context/session.tsx)
|
||||
- **Todo list**: `todo.updated` SSE event → session store → kilo-ui `PART_MAPPING["todowrite"]` renders todo lists with checkboxes
|
||||
- **Auth**: full device auth flow with QR code, verification code, countdown in [`DeviceAuthCard.tsx`](../webview-ui/src/components/DeviceAuthCard.tsx); org switching implemented
|
||||
- **Profile**: login state, balance, dashboard link, logout in [`ProfileView.tsx`](../webview-ui/src/components/ProfileView.tsx)
|
||||
- **Session history**: search, date-grouped list, relative timestamps, rename/delete in [`SessionList.tsx`](../webview-ui/src/components/history/SessionList.tsx)
|
||||
- **Settings**: 14-tab settings (Providers, AgentBehaviour, AutoApprove, Browser, Autocomplete, Display, Notifications, Context, Terminal, Prompts, Experimental, Language, AboutKiloCode — all functional; Workflows subtab is a placeholder) in [`Settings.tsx`](../webview-ui/src/components/Settings.tsx)
|
||||
- **Message protocol**: 41 message types (22 ExtensionMessage + 19 WebviewMessage) in [`messages.ts`](../webview-ui/src/types/messages.ts)
|
||||
- **Build pipeline**: dual esbuild (extension + webview), CLI binary provisioning in [`esbuild.js`](../esbuild.js) and [`prepare-cli-binary.mjs`](../scripts/prepare-cli-binary.mjs)
|
||||
- **View title bar button**: ✅ Done —
|
||||
- **Browser automation**: Playwright MCP integration with settings toggle, lifecycle service, and CLI MCP hub registration in [`BrowserAutomationService`](../src/services/browser-automation/browser-automation-service.ts)
|
||||
- **kilo-ui integration**: Webview uses `@kilocode/kilo-ui` shared component library — ThemeProvider, MarkedProvider, DataProvider, Button, IconButton, Tooltip, Popover, Switch, Select, Toast, KiloMessage
|
||||
- **Task header**: Session title, cost display, context token usage with percentage, compact button in [`TaskHeader.tsx`](../webview-ui/src/components/chat/TaskHeader.tsx)
|
||||
- **Model selector**: Popover-based model picker with search, provider grouping, free model tags in [`ModelSelector.tsx`](../webview-ui/src/components/chat/ModelSelector.tsx)
|
||||
- **Mode switcher**: Agent/mode selector with descriptions in [`ModeSwitcher.tsx`](../webview-ui/src/components/chat/ModeSwitcher.tsx)
|
||||
- **Localization**: Full i18n system with 16 locales, three-layer dict merging, locale auto-detection in [`language.tsx`](../webview-ui/src/context/language.tsx) and [`i18n/`](../webview-ui/src/i18n/)
|
||||
- **Context compaction**: summarize endpoint + CompactRequest message + compact button in TaskHeader
|
||||
- **Code blocks**: copy buttons, expand/collapse, syntax highlighting via kilo-ui KiloMessage + MarkedProvider + shiki
|
||||
- **Diff viewing**: full diff viewer via kilo-ui `Diff`/`DiffChanges` components for file edit/write/patch tools
|
||||
- **Command execution**: expandable bash tool output in BasicTool accordion via kilo-ui PART_MAPPING["bash"]
|
||||
- **Image handling**: clipboard paste, drag-and-drop, thumbnails in PromptInput, ImagePreview dialog in [`useImageAttachments.ts`](../webview-ui/src/hooks/useImageAttachments.ts)
|
||||
- **Autocomplete**: FIM inline completions via `AutocompleteInlineCompletionProvider` with debouncing, LRU cache, tree-sitter context
|
||||
- **Agent Manager**: parallel worktree sessions, git worktree lifecycle, WorktreeSelector in [`AgentManagerProvider.ts`](../src/agent-manager/AgentManagerProvider.ts)
|
||||
- **Telemetry**: `TelemetryProxy` POSTs to CLI `/telemetry/capture`; webview telemetry forwarded via message protocol
|
||||
- **Auto-approval config**: per-tool allow/ask/deny dropdowns for all 16 tools in AutoApproveTab
|
||||
- **Provider configuration**: default/small model selection, disabled/enabled provider lists in ProvidersTab
|
||||
|
||||
---
|
||||
|
||||
## Chat UI Feature Parity
|
||||
|
||||
| Feature | Status | Details | Backend | Priority |
|
||||
| -------------------------------------------------------------------------------------- | -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | -------- |
|
||||
| Auto-Approval Controls | ✅ Done | `AutoApproveTab` in Settings implements per-tool allow/ask/deny dropdowns for all 16 tools with a "Set All" bulk control. Changes written to backend config via `updateConfig({ permission: {...} })`. | CLI owns permissions; webview needs config UI | P1 |
|
||||
| [Browser Session Controls](chat-ui-features/browser-session-controls.md) | 🔨 Partial | BrowserTab settings UI implemented with enable/disable toggle, system Chrome and headless options. Missing: in-chat browser session controls, action replay, screenshot viewing. | CLI-side (if browser tool exists) + webview | P3 |
|
||||
| [Checkpoint & Task Management](chat-ui-features/checkpoint-task-management.md) | ❌ Not started | No checkpoint restore, navigation, or "See New Changes" diff buttons. | CLI session undo/redo/fork + extension git integration | P1 |
|
||||
| Code Block Interactions | ✅ Done | Code blocks render with syntax highlighting, copy buttons, and expand/collapse via kilo-ui's KiloMessage + MarkedProvider + shiki. User messages and assistant text parts both have copy buttons. | Webview-only | P0 |
|
||||
| Command Execution | ✅ Done | Bash tool output renders in an expandable BasicTool accordion via kilo-ui's PART_MAPPING["bash"]. Command output shown in a scrollable code block with ANSI stripping. | CLI executes commands; webview renders output | P0 |
|
||||
| [Connection State UI](chat-ui-features/connection-state-ui.md) | 🔨 Partial | `ServerProvider` context tracks `connectionState` ("connecting"/"connected"/"disconnected"/"error"). Prompt input is disabled when disconnected. Missing: dedicated blocking spinner/error panel overlay. | Webview-only (consumes connection state) | P0 |
|
||||
| [Context Menus & Tooltips](chat-ui-features/context-menus-tooltips.md) | ❌ Not started | No right-click context menus or hover tooltips on interactive elements. | Webview-only | P2 |
|
||||
| Diff Viewing & File Operations | ✅ Done | Full diff viewer via kilo-ui `Diff` + `DiffChanges` components (built on `@pierre/diffs`) with line selection, find shortcuts, and worker-pool syntax highlighting. `DiffComponentProvider` registered in App.tsx. File edit/write/patch tools all use this. | CLI provides diff data; webview renders | P0 |
|
||||
| [File Permission Dialogs](chat-ui-features/file-permission-dialogs.md) | 🔨 Partial | Basic permission dialog exists (reject/once/always). Missing batch file read approval and per-file granularity. | CLI permission model; webview UI | P1 |
|
||||
| [Follow-Up Questions](chat-ui-features/follow-up-questions.md) | ❌ Not started | No suggested reply chips, click-to-submit, auto-approval countdown, or mode indicators. | Likely extension-side generation | P2 |
|
||||
| Image Handling | ✅ Done | `useImageAttachments` hook handles clipboard paste, drag-and-drop, and file reading. Thumbnails with remove buttons shown in PromptInput. kilo-ui `ImagePreview` dialog for viewing attached images in messages. | CLI provides image data; webview renders + VS Code integration | P1 |
|
||||
| [Inline Actions on Tool Messages](chat-ui-features/inline-actions-on-tool-messages.md) | 🔨 Partial | Tool parts render with status icons (⏳⚙️✓✕), expandable sections with input/output, and status-based CSS classes. File path links render as clickable anchors in tool subtitles via kilo-ui. Missing: explicit VS Code file-opener wired via postMessage, inline action buttons. | CLI provides tool metadata; webview renders | P1 |
|
||||
| Kilo Themed Chat Session | ✅ Done | kilo-ui components throughout: ThemeProvider with `defaultTheme="kilo-vscode"`, KiloMessage for rendering, MarkedProvider for markdown, Button/IconButton/Tooltip/Popover from kilo-ui. | Webview-only (styling/theming) | P0 |
|
||||
| Markdown Rendering | ✅ Done | Message.tsx delegates to kilo-ui's `<KiloMessage>` component. MarkedProvider in App.tsx provides markdown context. Syntax highlighting via shiki. | Webview-only | P0 |
|
||||
| [Mermaid Diagram Features](chat-ui-features/mermaid-diagram-features.md) | ❌ Not started | No mermaid rendering, "Fix with AI" button, copy, or open-as-PNG. Requires markdown rendering first. | Webview-only (rendering); CLI for "Fix with AI" | P2 |
|
||||
| [Message Editing & Management](chat-ui-features/message-editing-management.md) | ❌ Not started | No inline editing, deletion, timestamp display, or redo-previous-message (up-arrow). | CLI session fork/undo for edit semantics | P1 |
|
||||
| [Special Content Types](chat-ui-features/special-content-types.md) | 🔨 Partial | Reasoning blocks render (collapsible). Missing: open-markdown-preview button, MCP tool/resource rows, expandable error rows with copy. | Mixed: CLI for MCP data; webview for rendering | P1 |
|
||||
| Task Header | ✅ Done | TaskHeader.tsx implements session title, cost display (formatted USD), context token usage with percentage, compact button with tooltip. Uses kilo-ui IconButton and Tooltip. | CLI provides cost/context data; webview renders | P0 |
|
||||
| Todo List Management | ✅ Done | `todo.updated` SSE event handled through full pipeline: KiloProvider → webview message → session store. kilo-ui `PART_MAPPING["todowrite"]` renders todo lists with checkboxes showing completed/total counts. | CLI tool or extension-side feature | P2 |
|
||||
| [Toggle Thinking](chat-ui-features/toggle-thinking.md) | 🔨 Partial | Reasoning blocks render but no toggle to enable/disable thinking. Linked. | CLI controls thinking; webview provides toggle UI | P2 |
|
||||
| Feature | Status | Remaining Work | Backend | Priority |
|
||||
| ------------------------------------------------------------------------------ | -------------- | ------------------------------------------------------------------------------------------ | ------------------------------------------------------ | -------- |
|
||||
| [Browser Session Controls](chat-ui-features/browser-session-controls.md) | 🔨 Partial | In-chat browser controls, action replay, screenshot viewing | CLI-side (if browser tool exists) + webview | P3 |
|
||||
| [Checkpoint & Task Management](chat-ui-features/checkpoint-task-management.md) | ❌ Not started | Checkpoint restore, navigation, "See New Changes" diff buttons | CLI session undo/redo/fork + extension git integration | P1 |
|
||||
| [Connection State UI](chat-ui-features/connection-state-ui.md) | 🔨 Partial | Loading spinner overlay, error panel with retry, reconnecting indicator | Webview-only (consumes connection state) | P0 |
|
||||
| [Mermaid Diagram Features](chat-ui-features/mermaid-diagram-features.md) | ❌ Not started | Mermaid rendering, "Fix with AI" button, copy, open-as-PNG | Webview-only (rendering); CLI for "Fix with AI" | P2 |
|
||||
| [Message Editing & Management](chat-ui-features/message-editing-management.md) | ❌ Not started | Inline editing, deletion, timestamp display, redo-previous-message (up-arrow) | CLI session fork/undo for edit semantics | P1 |
|
||||
| [Special Content Types](chat-ui-features/special-content-types.md) | 🔨 Partial | Copy button on error cards, dedicated MCP tool/resource rows, open-markdown-preview button | Mixed: CLI for MCP data; webview for rendering | P1 |
|
||||
|
||||
---
|
||||
|
||||
## Non-Agent Feature Parity
|
||||
|
||||
| Feature | Status | Details | Backend | Priority |
|
||||
| ------------------------------------------------------------------------------------------------------- | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | -------- |
|
||||
| Agent Manager | ✅ Done | `AgentManagerProvider` opens editor panel, creates git worktrees for parallel sessions, full `createWorktreeSession` lifecycle (worktree → session → first message). `WorktreeManager` handles `git worktree add`, metadata, and discovery. `WorktreeSelector` in PromptInput toggles local/worktree mode. | Extension orchestrates multiple CLI sessions | P1 |
|
||||
| [Authentication & Enterprise](non-agent-features/authentication-organization-enterprise-enforcement.md) | 🔨 Partial | Device auth flow works, organization switching implemented. Missing: org feature flags, MDM policy enforcement. | CLI handles its auth; extension handles org/MDM | P1 |
|
||||
| [Auto-Purge](non-agent-features/auto-purge.md) | ❌ Not started | No scheduled cleanup of old session/task storage. | Extension-side (storage ownership TBD) | P3 |
|
||||
| Autocomplete / Ghost | ✅ Done | `AutocompleteInlineCompletionProvider` implements `vscode.InlineCompletionItemProvider` with FIM completions via Kilo Gateway. Includes debouncing, LRU cache, tree-sitter context, bracket matching, and stream-based completion. `AutocompleteServiceManager` registers/unregisters the provider. | Extension-side (VS Code InlineCompletionProvider) | P1 |
|
||||
| [Browser Automation & URL Ingestion](non-agent-features/browser-automation-url-ingestion.md) | 🔨 Partial | Playwright MCP integration implemented: settings toggle, BrowserAutomationService, CLI MCP hub registration, BrowserTab settings UI. Missing: URL-to-markdown ingestion, screenshot viewing in chat. | CLI MCP hub (POST /mcp); extension manages lifecycle | P3 |
|
||||
| [Checkpoints](non-agent-features/checkpoints.md) | ❌ Not started | No shadow git repo, per-task snapshots, restore UI, or diff viewing. Settings tab is a stub. | CLI (partial: session undo/redo); extension for git snapshots | P1 |
|
||||
| [Cloud Task Support](non-agent-features/cloud-task-support.md) | ❌ Not started | No cloud sync for tasks across devices. | Kilo cloud API + CLI; extension provides UI | P2 |
|
||||
| [Code Actions & Editor Menus](non-agent-features/editor-context-menus-and-code-actions.md) | 🔨 Partial | Editor/terminal right-click submenus, CodeActionProvider lightbulb, keyboard shortcuts, and prompt templates implemented. Terminal content capture is a stub (needs shell integration API). Missing: custom prompt overrides via settings. | Extension-side (VS Code CodeActionProvider + menus + keybindings) | P1 |
|
||||
| [Code Reviews](non-agent-features/code-reviews.md) | ❌ Not started | No local review mode or automated AI review of uncommitted/branch changes. | CLI (partial); extension for VS Code review UX | P2 |
|
||||
| [Codebase Indexing & Semantic Search](non-agent-features/codebase-indexing-semantic-search.md) | ❌ Not started | No vector indexing, semantic search, or embeddings infrastructure. | CLI has grep/glob endpoints; semantic indexing is extension or cloud | P2 |
|
||||
| [Contribution Tracking](non-agent-features/contribution-tracking.md) | ❌ Not started | No AI attribution tracking, line fingerprinting, or reporting. | Extension-side | P3 |
|
||||
| [Custom Commands](non-agent-features/custom-command-system.md) | ❌ Not started | No slash commands, project-level command discovery, or YAML frontmatter support. | CLI has custom commands; extension provides UI entry points | P2 |
|
||||
| [Deploy & Secure Surfaces](non-agent-features/deploy-and-secure-surfaces.md) | ❌ Not started | No deploy workflows, managed indexing UI, or security review surfaces. | Extension-side | P3 |
|
||||
| [Fast Edits](non-agent-features/fast-edits.md) | ❌ Not started | No fast edit mode for quick inline code changes. | CLI fast-edit runtime; extension provides UI | P2 |
|
||||
| [Git Commit Message Generation](non-agent-features/git-commit-message-generation.md) | ❌ Not started | No AI commit message generation or VS Code Source Control integration. | Extension-side (VS Code Git API) | P2 |
|
||||
| [Integrations](non-agent-features/integrations.md) | ❌ Not started | No external system integrations (GitHub, etc.) beyond basic auth. | CLI plugin system (partial); extension for IDE hooks | P3 |
|
||||
| Kilo Gateway | ✅ Done | Kilo Gateway (`KILO_GATEWAY_ID = "kilo"`) is the default provider, listed first in ModelSelector via `PROVIDER_ORDER`. Login/logout/org switching fully implemented in `KiloProvider.ts` and `ProfileView.tsx`. Default model selection in ProvidersTab. | CLI handles gateway connection; extension provides config UI | P0 |
|
||||
| Localization | ✅ Done | Full i18n system with 16 locales in [`i18n/`](../webview-ui/src/i18n/), three-layer dict merging, locale auto-detection, LanguageTab settings UI with locale selector. | Extension + webview; CLI locale mapping needed | P3 |
|
||||
| [Marketplace](non-agent-features/marketplace.md) | 🔨 Partial | Placeholder view exists but is non-functional. No catalog, install, or update capabilities. | Extension-side | P2 |
|
||||
| [MCP & MCP Hub](non-agent-features/mcp-and-mcp-hub.md) | 🔨 Partial | MCP types and HTTP client methods added (getMcpStatus, addMcpServer, connectMcpServer, disconnectMcpServer). Used by BrowserAutomationService. Missing: general MCP configuration UI, server management, tool allowlisting, connection status display. | CLI owns MCP lifecycle; extension provides config UI | P1 |
|
||||
| [Mode Switcher](non-agent-features/mode-switcher.md) | ✅ Done | ModeSwitcher.tsx implements popover-based agent/mode selector with descriptions, persisted via session.selectAgent(). Integrated into PromptInput. | CLI manages modes; extension provides switcher UI | P2 |
|
||||
| [Model Switcher](non-agent-features/model-switcher.md) | ✅ Done | ModelSelector.tsx implements popover-based selector with search/filter, keyboard navigation, provider grouping, free model tags. Integrated into PromptInput. | CLI provides model list; extension provides switcher UI | P1 |
|
||||
| [Provider Configuration](non-agent-features/provider-configuration.md) | 🔨 Partial | Provider context fetches and exposes provider data, connected providers, defaults, model lists — wired into ModelSelector. ProvidersTab UI still a stub. | CLI manages providers; extension provides config UI | P1 |
|
||||
| [Repository Initialization](non-agent-features/repository-initialization.md) | ❌ Not started | No /init command support for setting up agentic engineering. | CLI /init endpoint; extension provides UI trigger | P3 |
|
||||
| [Rules & Workflows](non-agent-features/rules-and-workflows.md) | ❌ Not started | No rules or workflow management UI. | CLI owns rules runtime; extension provides management UI | P3 |
|
||||
| [Search & Repo Scanning](non-agent-features/search-and-repo-scanning-infrastructure.md) | ❌ Not started | No search infrastructure beyond CLI grep/glob. | CLI has grep/glob; extension may add UI | P2 |
|
||||
| [Settings Sync](non-agent-features/settings-sync-integration.md) | ❌ Not started | No VS Code Settings Sync allowlist registration. Settings tabs are all stubs. | Extension-side (VS Code API) | P3 |
|
||||
| [Settings UI](non-agent-features/settings-ui.md) | 🔨 Partial | 15-tab settings shell exists. BrowserTab has real settings controls (enable/disable, system Chrome, headless toggles). LanguageTab has working locale selector. Remaining 13 tabs are stubs. | CLI exposes config; extension provides settings forms | P1 |
|
||||
| [Skills System](non-agent-features/skills-system.md) | ❌ Not started | No skill discovery, management, or hot-reload in extension. | CLI has skills runtime; extension provides packaging/UI | P2 |
|
||||
| [Speech-to-Text](non-agent-features/speech-to-text.md) | ❌ Not started | No voice input or streaming STT. | Webview (mic capture); CLI-compatible STT optional | P3 |
|
||||
| [Task History](non-agent-features/task-history.md) | 🔨 Partial | Session list exists but lacks search, metadata, and full persistence. | CLI session storage; extension provides history UI | P1 |
|
||||
| [Telemetry](non-agent-features/telemetry.md) | ❌ Not started | Dual-layer telemetry (PostHog Node server-side + PostHog JS client-side) for extension usage, errors, LLM completions, and AI interactions. Includes privacy controls, typed events, and structured error tracking. See detailed plan. | Extension-side (PostHog + kilo-telemetry) | P1 |
|
||||
| [Terminal / Shell Integration](non-agent-features/terminal-shell-integration.md) | ❌ Not started | No VS Code terminal integration for command execution display, exit code tracking, or working directory changes. | CLI executes commands; extension provides terminal UX | P1 |
|
||||
| Feature | Status | Remaining Work | Backend | Priority |
|
||||
| ------------------------------------------------------------------------------------------------------- | -------------- | ------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | -------- |
|
||||
| [Authentication & Enterprise](non-agent-features/authentication-organization-enterprise-enforcement.md) | 🔨 Partial | Org feature flags, MDM policy enforcement | CLI handles its auth; extension handles org/MDM | P1 |
|
||||
| [Auto-Purge](non-agent-features/auto-purge.md) | ❌ Not started | Scheduled cleanup of old session/task storage | Extension-side (storage ownership TBD) | P3 |
|
||||
| [Cloud Task Support](non-agent-features/cloud-task-support.md) | 🔨 Partial | Upload local sessions to cloud, real-time sync, conflict resolution | Kilo cloud API + CLI; extension provides UI | P2 |
|
||||
| [Code Actions & Editor Menus](non-agent-features/editor-context-menus-and-code-actions.md) | 🔨 Partial | Terminal content capture (shell integration API), custom prompt overrides via settings | Extension-side (VS Code CodeActionProvider + menus + keybindings) | P1 |
|
||||
| [Code Reviews](non-agent-features/code-reviews.md) | ❌ Not started | Local review mode, automated AI review of uncommitted/branch changes | CLI (partial); extension for VS Code review UX | P2 |
|
||||
| [Codebase Indexing & Semantic Search](non-agent-features/codebase-indexing-semantic-search.md) | ❌ Not started | Vector indexing, semantic search, embeddings infrastructure | CLI has grep/glob endpoints; semantic indexing is extension or cloud | P2 |
|
||||
| [Contribution Tracking](non-agent-features/contribution-tracking.md) | ❌ Not started | AI attribution tracking, line fingerprinting, reporting | Extension-side | P3 |
|
||||
| [Custom Commands](non-agent-features/custom-command-system.md) | ❌ Not started | Slash command system, project-level command discovery, YAML frontmatter support | CLI has custom commands; extension provides UI entry points | P2 |
|
||||
| [Marketplace](non-agent-features/marketplace.md) | ❌ Not started | Catalog, install, update capabilities (toolbar button exists but renders a stub) | Extension-side | P2 |
|
||||
| [MCP & MCP Hub](non-agent-features/mcp-and-mcp-hub.md) | 🔨 Partial | MCP configuration UI (add/edit/delete servers), tool allowlisting, connection status display | CLI owns MCP lifecycle; extension provides config UI | P1 |
|
||||
| [Repository Initialization](non-agent-features/repository-initialization.md) | ❌ Not started | /init command support for setting up agentic engineering | CLI /init endpoint; extension provides UI trigger | P3 |
|
||||
| [Rules & Workflows](non-agent-features/rules-and-workflows.md) | 🔨 Partial | Workflow management UI (rules subtab exists, workflows subtab is a stub) | CLI owns rules runtime; extension provides management UI | P3 |
|
||||
| [Settings Sync](non-agent-features/settings-sync-integration.md) | ❌ Not started | VS Code Settings Sync allowlist registration | Extension-side (VS Code API) | P3 |
|
||||
| [Settings UI](non-agent-features/settings-ui.md) | 🔨 Partial | Terminal and Prompts tabs (show "Not implemented"), Workflows subtab stub, import/export settings | CLI exposes config; extension provides settings forms | P1 |
|
||||
| [Skills System](non-agent-features/skills-system.md) | 🔨 Partial | Skill execution, discovery, hot-reload (config UI for paths/URLs exists) | CLI has skills runtime; extension provides packaging/UI | P2 |
|
||||
| [Speech-to-Text](non-agent-features/speech-to-text.md) | ❌ Not started | Voice input, streaming STT | Webview (mic capture); CLI-compatible STT optional | P3 |
|
||||
|
||||
---
|
||||
|
||||
## Project Board Issues
|
||||
|
||||
Open issues from the [GitHub project board](https://github.com/orgs/Kilo-Org/projects/25/views/1) not covered by the feature docs above. Each item has its own detailed doc.
|
||||
|
||||
### UI Polish & Bugs
|
||||
|
||||
| Feature | Status | Remaining Work | Priority |
|
||||
| ---------------------------------------------------------------------------------------- | -------------- | ------------------------------------------------------------------------------------- | -------- |
|
||||
| [Diff: Jump to Changed Lines](ui-polish/diff-jump-to-changed-lines.md) | ❌ Not started | Make diff entries clickable to open file at changed line in VS Code editor | P2 |
|
||||
| [Context Compression Icon](ui-polish/context-compression-icon.md) | ❌ Not started | Replace icon that looks like a close button with a clear "compress" icon | P2 |
|
||||
| [Copy Button Copies Extra Fields](ui-polish/copy-button-extra-fields.md) | 🔨 Partial | Fix copy to strip markdown fence markers; only copy inner code content | P1 |
|
||||
| [Chat Input Cursor Misplacement](ui-polish/chat-input-cursor-misplacement.md) | 🔨 Partial | Fix textarea height auto-resize so cursor doesn't desync from insertion point | P1 |
|
||||
| [Markdown Rendering Improvements](ui-polish/markdown-rendering-improvements.md) | 🔨 Partial | Add CSS for heading sizes, weights, spacing so headings look different from body text | P1 |
|
||||
| [Approval Box Missing Full Path](ui-polish/approval-box-full-path.md) | 🔨 Partial | Always show full absolute path for out-of-workspace permission requests | P1 |
|
||||
| [Profile View Missing Back Button](ui-polish/profile-view-back-button.md) | ❌ Not started | Add back button to Profile view header matching Settings view pattern | P2 |
|
||||
| [New Task Discoverability](ui-polish/new-task-discoverability.md) | ❌ Not started | Add "New task" button below chat and close button on session header | P1 |
|
||||
| [Reasoning Block Styling](ui-polish/reasoning-block-styling.md) | ❌ Not started | Style reasoning blocks with distinct background/italic; collapse by default | P2 |
|
||||
| [Clickable Items Cursor](ui-polish/clickable-cursor-styles.md) | ❌ Not started | Add `cursor: pointer` to all interactive elements in chat | P2 |
|
||||
| [Chat Input Overflow on Narrow Sidebar](ui-polish/chat-input-narrow-sidebar-overflow.md) | ❌ Not started | Make chat input toolbar wrap when sidebar is too narrow | P2 |
|
||||
| [Chat Background Color](ui-polish/chat-background-color.md) | 🔨 Partial | Use `--vscode-sideBar-background` instead of editor background | P2 |
|
||||
|
||||
### Features
|
||||
|
||||
| Feature | Status | Remaining Work | Priority |
|
||||
| ----------------------------------------------------------------------------- | -------------- | -------------------------------------------------------------------------------- | -------- |
|
||||
| [File Attachments](features/file-attachments.md) | 🔨 Partial | Add non-image file attachment via button, drag-and-drop, or file picker | P2 |
|
||||
| [Anonymous Sign-In Prompts](features/anonymous-signin-prompts.md) | 🔨 Partial | Show prompt when anonymous user hits paid model or 100-message limit | P1 |
|
||||
| [Task Completion Notification](features/task-completion-notification.md) | ❌ Not started | VS Code toast when task completes or awaits input while panel is hidden | P2 |
|
||||
| [Custom OpenAI-Compatible Provider UI](features/custom-openai-provider-ui.md) | 🔨 Partial | Port `DialogCustomProvider` from `packages/app` to extension webview | P1 |
|
||||
| [Remember Last Model Choice](features/remember-last-model.md) | ❌ Not started | Persist last-used model and pre-select it for new sessions | P2 |
|
||||
| [Expandable MCP Tools](features/expandable-mcp-tools.md) | ❌ Not started | Make MCP tool rows expandable to show inputs/outputs like regular tools | P2 |
|
||||
| [Session Preview Improvements](features/session-preview-improvements.md) | ❌ Not started | Evaluate showing first message snippet or improving title generation | P2 |
|
||||
| [Subagent Visibility](features/subagent-visibility.md) | ❌ Not started | Show inline indicator of what a subagent is doing in single-session sidebar view | P2 |
|
||||
| [Terminal Command Output Visibility](features/terminal-output-visibility.md) | ❌ Not started | Show actual command, truncated output, and success/failure in chat | P1 |
|
||||
| [Prompt Improvement Feature](features/prompt-improvement.md) | ❌ Not started | Button/shortcut to rewrite the current draft message into a better prompt | P3 |
|
||||
|
||||
### Migration (old extension → new)
|
||||
|
||||
| Feature | Status | Remaining Work | Priority |
|
||||
| --------------------------------------------------------- | -------------- | ---------------------------------------------------------------------------- | -------- |
|
||||
| [Settings Migration](migration/settings-migration.md) | 🔨 Partial | Read old extension settings and offer to import into CLI config on first run | P1 |
|
||||
| [Sessions Migration](migration/sessions-migration.md) | ❌ Not started | Convert old session format to CLI session format; preserve chat history | P3 |
|
||||
| [MemoryBank Migration](migration/memorybank-migration.md) | 🔨 Partial | Detect MemoryBank content and offer to migrate it to AGENTS.md | P1 |
|
||||
| [Upgrade Onboarding](migration/upgrade-onboarding.md) | ❌ Not started | Show distinct onboarding for upgraders explaining what changed | P1 |
|
||||
|
||||
### Error Handling & Reliability
|
||||
|
||||
| Feature | Status | Remaining Work | Priority |
|
||||
| ----------------------------------------------------------------------------------------- | -------------- | ---------------------------------------------------------------------------- | -------- |
|
||||
| [Pre-Release Switch CPU Spike](error-handling/pre-release-switch-crash.md) | ❌ Not started | Fix race condition / process conflict when switching release ↔ pre-release | P0 |
|
||||
| [Extension View Doesn't Refresh on Update](error-handling/extension-refresh-on-update.md) | ❌ Not started | Force webview reload when extension version changes | P1 |
|
||||
| [Propagate CLI Errors to UI](error-handling/propagate-cli-errors-to-ui.md) | 🔨 Partial | Surface CLI stderr errors in chat or as VS Code notifications | P1 |
|
||||
| [CLI Startup Errors](error-handling/cli-startup-errors.md) | 🔨 Partial | Detect CLI process exit before connection; show error with details and retry | P1 |
|
||||
| [Autocomplete Settings Link Broken](error-handling/autocomplete-settings-link.md) | ❌ Not started | Fix "settings" link in autocomplete broken notice; fix missing default model | P1 |
|
||||
|
||||
### Performance
|
||||
|
||||
| Feature | Status | Remaining Work | Priority |
|
||||
| --------------------------------------------------------------------------------------- | -------------- | ---------------------------------------------------------------------------------- | -------- |
|
||||
| [Markdown Syntax Highlighting Performance](performance/markdown-syntax-highlighting.md) | ❌ Not started | Two-pass render: show plain text first, highlight async with `requestIdleCallback` | P0 |
|
||||
|
||||
### Infrastructure / Refactoring
|
||||
|
||||
| Feature | Status | Remaining Work | Priority |
|
||||
| ----------------------------------------------------------------- | -------------- | ------------------------------------------------------------------------------ | -------- |
|
||||
| [Show Changelog on Update](infrastructure/changelog-on-update.md) | 🔨 Partial | Detect version change on activation and offer "What's New" notification | P3 |
|
||||
| [Publish to OpenVSX](infrastructure/openvsx-publish.md) | ❌ Not started | Add `ovsx publish` step to CI/CD pipeline after VS Code Marketplace publish | P3 |
|
||||
| [Use SDK Over Direct HTTP](infrastructure/sdk-over-http.md) | 🔨 Partial | Replace raw `fetch()` calls in `HttpClient` with `@kilocode/sdk` typed methods | P2 |
|
||||
| [Switch to Session Turn](infrastructure/session-turn.md) | 🔨 Partial | Refactor session state to track turns, enabling better lifecycle management | P2 |
|
||||
|
||||
### CLI-Side (tracked here for awareness)
|
||||
|
||||
| Feature | Status | Remaining Work | Priority |
|
||||
| -------------------------------------------------------------------- | -------------- | ------------------------------------------------------------------------- | -------- |
|
||||
| [/init Pre-Commit Secret Check](cli-side/init-secret-check.md) | 🔨 Partial | Check for secret scanning hooks in `/init`; suggest adding one if missing | P2 |
|
||||
| [Plan Mode Over-Prompting](cli-side/plan-mode-over-prompting.md) | 🔨 Partial | Fix Plan mode system prompt so agent stops repeatedly asking to implement | P1 |
|
||||
| [Architect Mode / Plan Files](cli-side/architect-mode-plan-files.md) | ❌ Not started | Export plan as `.md` to `/plans/` directory from Plan mode | P2 |
|
||||
| [Ask Mode Should Not Edit](cli-side/ask-mode-no-edits.md) | ❌ Not started | Disable write tools at configuration level in Ask mode | P1 |
|
||||
|
||||
---
|
||||
|
||||
@@ -114,12 +129,12 @@ The rebuild has a working foundation:
|
||||
|
||||
These items were identified from the [JetBrains plugin analysis](../LESSONS_LEARNED_JETBRAINS.md) — patterns the JetBrains plugin implements that are missing in the VSCode extension. They primarily affect reliability and developer experience rather than feature parity.
|
||||
|
||||
| Feature | Status | Details | Scope | Priority |
|
||||
| -------------------------------------------------------------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | -------- |
|
||||
| [SSE Auto-Reconnect](infrastructure/sse-auto-reconnect.md) | ❌ Not started | SSE connection has no reconnect logic. Network hiccups, laptop sleep, or server restart kill the extension with no recovery. | Extension (SSEClient + ConnectionService) | P0 |
|
||||
| [HTTP Request Timeouts](infrastructure/http-request-timeouts.md) | ❌ Not started | HTTP client uses bare `fetch()` with no timeouts. Hung requests block indefinitely. | Extension (HttpClient) | P1 |
|
||||
| [VSCode Error Notifications](infrastructure/vscode-error-notifications.md) | ❌ Not started | Critical errors (CLI missing, server crash) are only shown in the webview. No `vscode.window.showErrorMessage()` notifications. | Extension (KiloProvider) | P1 |
|
||||
| [Dedicated Output Channel](infrastructure/dedicated-output-channel.md) | ❌ Not started | All logging goes to console.log mixed with other extensions. No dedicated "Kilo Code" output channel. | Extension (new logger utility) | P2 |
|
||||
| Feature | Status | Remaining Work | Scope | Priority |
|
||||
| -------------------------------------------------------------------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | -------- |
|
||||
| [SSE Auto-Reconnect](infrastructure/sse-auto-reconnect.md) | ❌ Not started | Reconnect logic, exponential backoff, "reconnecting" state | Extension (SSEClient + ConnectionService) | P0 |
|
||||
| [HTTP Request Timeouts](infrastructure/http-request-timeouts.md) | ❌ Not started | AbortController with timeout in HttpClient.request() | Extension (HttpClient) | P1 |
|
||||
| [VSCode Error Notifications](infrastructure/vscode-error-notifications.md) | 🔨 Partial | Error notifications for core connection failures (CLI start, SSE disconnect, HTTP errors). Peripheral services already use showErrorMessage(). | Extension (KiloProvider) | P1 |
|
||||
| [Dedicated Output Channel](infrastructure/dedicated-output-channel.md) | 🔨 Partial | General "Kilo Code" output channel (Agent Manager has its own already). Centralized logging utility. | Extension (new logger utility) | P2 |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
# Markdown Syntax Highlighting Performance
|
||||
|
||||
**Priority:** P0
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [#6221](https://github.com/Kilo-Org/kilocode/issues/6221)
|
||||
|
||||
## Problem
|
||||
|
||||
When switching sessions in the Agent Manager (or loading a large session), the webview main thread is blocked for **2.3+ seconds** by synchronous syntax highlighting. During this time, the UI is completely frozen.
|
||||
|
||||
**Root cause:** The `Markdown` component uses `marked-shiki` which calls `highlighter.codeToHtml()` synchronously on the main thread via the Oniguruma WASM regex engine. A session with 45 messages containing code blocks can trigger 91.4% of render time in `findNextMatchSync` (Oniguruma regex).
|
||||
|
||||
## Remaining Work
|
||||
|
||||
The recommended fix is a **two-pass render (Option A)**:
|
||||
|
||||
1. **First pass (instant):** Parse markdown but render code blocks as plain `<pre><code>` with no syntax highlighting. Messages appear immediately.
|
||||
2. **Second pass (deferred):** After the initial paint, progressively highlight code blocks using `requestIdleCallback` or `setTimeout(0)`.
|
||||
|
||||
Implementation:
|
||||
|
||||
- Add a `skipHighlighting` option to the `markedShiki` plugin that returns plain `<pre><code>` blocks
|
||||
- On first render, use skip mode
|
||||
- Schedule full highlight pass after initial paint
|
||||
- Replace plain blocks with highlighted HTML once ready
|
||||
|
||||
**Also investigate (Option D):** Verify that the JS regex engine (`createJavaScriptRegexEngine()`) is actually being used on the main thread instead of Oniguruma WASM. The code configures `preferredHighlighter: "shiki-js"` but the profiling trace shows Oniguruma being called — this may be a configuration bug.
|
||||
|
||||
## Relevant Files
|
||||
|
||||
- `packages/ui/src/context/marked.tsx` — Shiki highlighter setup (lines 426–460, 511–526)
|
||||
- `packages/ui/src/components/markdown.tsx` — `Markdown` component with 200-entry LRU cache
|
||||
- `packages/ui/src/components/message-part.tsx` — `TextPart` renders `<Markdown>`
|
||||
- `packages/ui/src/pierre/worker.ts` — Web Worker pool (reference pattern for off-thread highlighting)
|
||||
@@ -0,0 +1,23 @@
|
||||
# Approval Box Missing Full Path for Out-of-Workspace Requests
|
||||
|
||||
**Priority:** P1
|
||||
**Status:** 🔨 Partial (assigned)
|
||||
**Issue:** [#6092](https://github.com/Kilo-Org/kilocode/issues/6092)
|
||||
|
||||
## Problem
|
||||
|
||||
When the CLI requests permission to read or list a path outside the current workspace, the approval dialog only shows the relative directory name — not the full absolute path. This makes it impossible for the user to verify what is actually being accessed before approving.
|
||||
|
||||
For example, if the agent tries to list `/home/user/.config/someapp/`, the approval box might show only `someapp/` instead of the full path.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- In the permission/approval rendering component, always display the full absolute path for file system operations
|
||||
- When the path is inside the workspace, a relative path is acceptable (and may be preferred for readability), but append a visual indicator if it is _outside_ the workspace (e.g., "⚠ outside workspace")
|
||||
- For paths outside the workspace, never truncate — show the complete absolute path
|
||||
- Consider truncating only the beginning of very long paths with an ellipsis, ensuring the trailing file/dir name is always visible
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- Permission prompts are rendered by kilo-ui's permission prompt component; the path data comes from the CLI's tool call
|
||||
- This is a webview-side rendering change — the path value itself is already available in the message data
|
||||
@@ -0,0 +1,20 @@
|
||||
# Chat Background Color Should Differ from Editor
|
||||
|
||||
**Priority:** P2
|
||||
**Status:** 🔨 Partial (assigned)
|
||||
**Issue:** [#6276](https://github.com/Kilo-Org/kilocode/issues/6276)
|
||||
|
||||
## Problem
|
||||
|
||||
The chat panel uses the same background color as the VS Code editor (`editor.background`). This makes the extension blend into the editor area, with only a thin border separating them. Other panels in VS Code (Explorer, Source Control, etc.) typically use `sideBar.background`, which is intentionally distinct.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Change the webview's root background color from `editor.background` (or no explicit color) to `sideBar.background`
|
||||
- Use the VS Code CSS variable `--vscode-sideBar-background` which is already injected into webviews
|
||||
- Verify the change looks correct in multiple themes — dark, light, and high-contrast; the sidebar background is typically slightly darker/lighter than the editor background
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- The background color is likely set in `webview-ui/src/styles/chat.css` or on the root element in `index.tsx`
|
||||
- Replace with `var(--vscode-sideBar-background)` or `var(--vscode-panel-background)` depending on which token is more appropriate for a sidebar panel
|
||||
@@ -0,0 +1,22 @@
|
||||
# Chat Input Cursor Misplacement
|
||||
|
||||
**Priority:** P1
|
||||
**Status:** 🔨 Partial (assigned)
|
||||
**Issue:** [#6087](https://github.com/Kilo-Org/kilocode/issues/6087)
|
||||
|
||||
## Problem
|
||||
|
||||
After typing a long prompt (roughly 10+ lines, especially with pasted content), the cursor in the chat textarea becomes visually decoupled from the actual insertion point. The cursor renders in the wrong position while text continues to be inserted at a different location.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Reproduce the issue: open the extension, paste a large block of text into the chat input, then continue typing until several line-wraps occur
|
||||
- Investigate whether the textarea has a fixed height that isn't auto-resizing correctly, causing scroll offset to desync from cursor position
|
||||
- Check if the issue is in a `<textarea>` element or a custom contenteditable div; the fix differs significantly
|
||||
- For a `<textarea>`: ensure `height` is recalculated after each input event (listen to `input`, set `element.style.height = 'auto'` then `element.style.height = element.scrollHeight + 'px'`)
|
||||
- For contenteditable: check for CSS `transform` or absolute positioning that might shift the rendered cursor
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- The chat input component lives in `webview-ui/src/`
|
||||
- This is a webview-only fix — no extension host changes needed
|
||||
@@ -0,0 +1,22 @@
|
||||
# Chat Input Overflows on Narrow Sidebar
|
||||
|
||||
**Priority:** P2
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [#6273](https://github.com/Kilo-Org/kilocode/issues/6273)
|
||||
|
||||
## Problem
|
||||
|
||||
When the sidebar is narrow, the model selector dropdown, variant selector, and send button row overflows horizontally off-screen. The buttons become inaccessible.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Make the chat input toolbar responsive: when the available width is too small to show all controls in one row, wrap them to a second row
|
||||
- The send button should always remain visible and ideally stay anchored to the bottom-right
|
||||
- The model/variant selectors can wrap to a row above the input textarea when needed
|
||||
- Use CSS flexbox `flex-wrap: wrap` or a media-query-like approach using container queries (or `ResizeObserver` in JS)
|
||||
- Test at sidebar widths of ~200px, ~280px, and ~350px
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- The chat input component is in `webview-ui/src/`
|
||||
- VS Code sidebar width is not directly controllable, so the layout must be purely CSS-responsive
|
||||
@@ -0,0 +1,21 @@
|
||||
# Clickable Items Should Change the Cursor
|
||||
|
||||
**Priority:** P2
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [#6255](https://github.com/Kilo-Org/kilocode/issues/6255)
|
||||
|
||||
## Problem
|
||||
|
||||
Interactive elements in the chat (file links, diff headers, tool call rows, buttons without clear button styling) do not change the mouse cursor to `pointer` on hover. Users can't tell what is clickable.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Audit all interactive elements in the chat message area and ensure they have `cursor: pointer` set
|
||||
- Specifically check: file path links, diff expand/collapse headers, tool call rows, MCP tool entries, any clickable text spans
|
||||
- Links rendered inside markdown content should also show `pointer` cursor (check the markdown CSS)
|
||||
- Apply globally where possible via a CSS rule on `[role="button"], button, a, [onClick]` selectors, but also patch individual components that override cursor
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- This is a CSS-only change in `webview-ui/src/styles/chat.css` and/or kilo-ui component styles
|
||||
- VS Code webviews reset most default browser styles; `cursor: pointer` must be explicitly set
|
||||
@@ -0,0 +1,21 @@
|
||||
# Context Compression Icon
|
||||
|
||||
**Priority:** P2
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [#6081](https://github.com/Kilo-Org/kilocode/issues/6081)
|
||||
|
||||
## Problem
|
||||
|
||||
The context compression button in the chat header uses an icon that users mistake for a close/dismiss button. Its placement near the top-right of the chat adds to the confusion. Users have accidentally triggered context compression thinking they were closing something.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Replace the current icon with one that more clearly conveys "compress" or "summarize context" — not an X or close glyph
|
||||
- Consider adding a tooltip label so the action is unambiguous on hover
|
||||
- Check kilo-ui icon set for a suitable alternative (e.g., a compress/fold icon); if none exists, add one
|
||||
- Evaluate placement: moving the button away from the close-button region may also help
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- The button is rendered in the chat toolbar in the webview (`webview-ui/src/`)
|
||||
- This is a purely webview-side change — no extension host or CLI involvement needed
|
||||
@@ -0,0 +1,21 @@
|
||||
# Copy Button Copies Extra Fields
|
||||
|
||||
**Priority:** P1
|
||||
**Status:** 🔨 Partial (assigned)
|
||||
**Issue:** [#6085](https://github.com/Kilo-Org/kilocode/issues/6085)
|
||||
|
||||
## Problem
|
||||
|
||||
The copy button on code blocks in the chat sometimes copies more than just the visible code. For example, it copies the surrounding markdown fence markers (` ``` `) in addition to the code content. The rendered UI doesn't show the fences, but they end up in the clipboard.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Audit the copy logic on the code block component: confirm whether it copies from the raw markdown source or from the rendered DOM text content
|
||||
- The copy should extract only the inner code content — not the fence markers, language identifier, or any other metadata
|
||||
- Verify fix works for all code block types (bash, python, json, etc.) and for fenced blocks inside tool output messages
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- The copy button is part of the code block rendering in kilo-ui or the webview's markdown component
|
||||
- If copying from raw markdown: strip the leading/trailing ` ``` ` lines and optional language tag before writing to clipboard
|
||||
- If copying from DOM: use the `textContent` of the inner `<code>` element, not the outer `<pre>`
|
||||
@@ -0,0 +1,22 @@
|
||||
# Diff: Jump to Changed Lines
|
||||
|
||||
**Priority:** P2
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [#6076](https://github.com/Kilo-Org/kilocode/issues/6076)
|
||||
|
||||
## What Exists
|
||||
|
||||
Diffs from agent tool calls (file edits) are rendered in the chat as read-only diff views. They are not interactive.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Make diff entries in the chat clickable: clicking a hunk should open the corresponding file in the VS Code editor and scroll to the start of the changed lines
|
||||
- Use `vscode.window.showTextDocument()` with a `selection` range pointing to the first changed line
|
||||
- The diff component in kilo-ui needs to emit an event or accept an `onClick` callback carrying the file path and line number
|
||||
- The `KiloProvider` (or a message handler) needs to translate that into a `vscode.commands.executeCommand('vscode.open', uri, { selection })` call
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- File paths in diff messages come from the CLI's tool output — they are absolute paths in the workspace
|
||||
- Wire up: diff click → webview posts `openFile` message with `{ path, line }` → extension opens file at line
|
||||
- Pattern already exists for other "open file" actions in the extension; follow the same message/handler path
|
||||
@@ -0,0 +1,24 @@
|
||||
# Markdown Rendering Improvements
|
||||
|
||||
**Priority:** P1
|
||||
**Status:** 🔨 Partial (assigned)
|
||||
**Issue:** [#6088](https://github.com/Kilo-Org/kilocode/issues/6088)
|
||||
|
||||
## Problem
|
||||
|
||||
Markdown headers (h1, h2, h3, etc.) render at the same visual size as body text — there are no size, weight, or spacing differences between heading levels. The chat output looks flat and hard to scan.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Add CSS rules for heading elements (`h1`–`h6`) rendered inside the markdown output area:
|
||||
- Distinct font sizes (e.g., h1: 1.5em, h2: 1.3em, h3: 1.1em)
|
||||
- Increased font weight
|
||||
- Vertical spacing (margin-top/margin-bottom) to visually separate sections
|
||||
- Verify that heading styles don't bleed outside the markdown content area (scope with a parent selector)
|
||||
- Check that styles work across VS Code's built-in themes (light, dark, high-contrast) using CSS variables from kilo-ui or VS Code's theme tokens
|
||||
- Also verify: bullet lists, numbered lists, blockquotes, horizontal rules, and bold/italic all render visually correctly
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- Markdown is rendered by the kilo-ui `<Markdown>` component or the webview's own markdown handler
|
||||
- CSS for chat content lives in `webview-ui/src/styles/chat.css` — add the heading rules there, or in kilo-ui if the component lives there
|
||||
@@ -0,0 +1,28 @@
|
||||
# New Task Discoverability
|
||||
|
||||
**Priority:** P1
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [#6250](https://github.com/Kilo-Org/kilocode/issues/6250)
|
||||
|
||||
## Problem
|
||||
|
||||
The new extension only supports starting a new task by clicking the "+" button in the header. The legacy extension offered three clear affordances:
|
||||
|
||||
1. A "+" button in the header
|
||||
2. A prominent "Start new Task" button at the bottom of the active task
|
||||
3. An "×" close button on the task header to end the current task
|
||||
|
||||
Users coming from the legacy extension are confused and don't know how to start fresh. Long-running sessions accumulate context, so having obvious ways to start new tasks is important for usability.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Add a "New task" button at the bottom of the chat, visible when a session is active (below the last message, above the input box, or as a floating button)
|
||||
- Add a close/end button on the active session header that ends the session and returns to the session list or a clean input state
|
||||
- Both actions should create a new CLI session (equivalent to what the "+" header button already does)
|
||||
- Keep the existing "+" header button as a third entry point
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- Session creation is done by calling the CLI's session create endpoint via the extension's HTTP client
|
||||
- The webview posts a message to the extension which triggers the session create call; follow the existing pattern
|
||||
- New UI elements go in `webview-ui/src/`
|
||||
@@ -0,0 +1,23 @@
|
||||
# Profile View Missing Back Button
|
||||
|
||||
**Priority:** P2
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [#6140](https://github.com/Kilo-Org/kilocode/issues/6140)
|
||||
|
||||
## Problem
|
||||
|
||||
The Profile view has no way to navigate back to the chat. Users who open the Profile page are stuck and must reload the extension or find another workaround.
|
||||
|
||||
The Settings view already has a back button (arrow-left icon in the header) that returns to the chat. The Profile view should have the same.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Add a back button to the Profile view header, matching the pattern used in the Settings view
|
||||
- The back button should navigate back to the chat/home view
|
||||
- Use the same arrow-left icon and header layout as Settings for visual consistency
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- The Profile view component lives in `webview-ui/src/`
|
||||
- Copy the back button pattern from the Settings view header
|
||||
- This is a purely webview-side change
|
||||
@@ -0,0 +1,24 @@
|
||||
# Reasoning Block Styling
|
||||
|
||||
**Priority:** P2
|
||||
**Status:** ❌ Not started
|
||||
**Issue:** [#6254](https://github.com/Kilo-Org/kilocode/issues/6254)
|
||||
|
||||
## Problem
|
||||
|
||||
Reasoning traces (the model's internal "thinking" output) are not visually distinguishable from the regular agent output. When reasoning and response text look identical, users can't tell what the model is "thinking" versus what it's actually saying, and the UI can feel slow because there's no clear progress indicator.
|
||||
|
||||
## Remaining Work
|
||||
|
||||
- Apply a distinct visual style to reasoning block content in the chat:
|
||||
- A subtly different background (e.g., a slightly muted/transparent overlay using VS Code's sidebar background token)
|
||||
- An italic font or reduced opacity to signal this is internal thinking, not final output
|
||||
- A label or icon at the top of the block (e.g., a small "Thinking…" label or brain icon) to identify the block type
|
||||
- The styling must work across light, dark, and high-contrast themes — use CSS variables, not hardcoded colors
|
||||
- Collapse reasoning blocks by default with an expand toggle, since they can be very long (see PR [#6217](https://github.com/Kilo-Org/kilocode/pull/6217) for prior work)
|
||||
- Follow existing kilo-ui patterns for collapsible sections
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- Reasoning blocks are a specific message part type in the CLI's message schema
|
||||
- The rendering component is in kilo-ui or `webview-ui/src/`; identify which component handles `reasoning` or `thinking` part types
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "kilo-code",
|
||||
"displayName": "Kilo Code: AI Coding Agent, Copilot, and Autocomplete",
|
||||
"description": "Open Source AI coding agent that generates code from natural language, automates tasks, and runs terminal commands. Features inline autocomplete, browser automation, automated refactoring, and custom modes for planning, coding, and debugging. Supports 500+ AI models including Claude (Anthropic), Gemini, Grok, GPT, Codex and GLM.",
|
||||
"version": "7.0.28",
|
||||
"version": "7.0.29",
|
||||
"icon": "assets/icons/logo-outline-black.png",
|
||||
"publisher": "kilocode",
|
||||
"repository": {
|
||||
@@ -113,6 +113,12 @@
|
||||
"category": "Kilo Code",
|
||||
"icon": "$(terminal)"
|
||||
},
|
||||
{
|
||||
"command": "kilo-code.new.agentManager.toggleDiff",
|
||||
"title": "Agent Manager: Toggle Diff Panel",
|
||||
"category": "Kilo Code",
|
||||
"icon": "$(diff)"
|
||||
},
|
||||
{
|
||||
"command": "kilo-code.new.agentManager.focusPanel",
|
||||
"title": "Agent Manager: Focus Panel",
|
||||
@@ -348,6 +354,12 @@
|
||||
"mac": "cmd+/",
|
||||
"when": "activeWebviewPanelId == 'kilo-code.new.AgentManagerPanel'"
|
||||
},
|
||||
{
|
||||
"command": "kilo-code.new.agentManager.toggleDiff",
|
||||
"key": "ctrl+d",
|
||||
"mac": "cmd+d",
|
||||
"when": "activeWebviewPanelId == 'kilo-code.new.AgentManagerPanel'"
|
||||
},
|
||||
{
|
||||
"command": "kilo-code.new.agentManager.focusPanel",
|
||||
"key": "ctrl+.",
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env bun
|
||||
import { $ } from "bun"
|
||||
import { join } from "node:path"
|
||||
import { rmSync, mkdirSync, existsSync, statSync } from "node:fs"
|
||||
|
||||
const root = join(import.meta.dir, "..")
|
||||
const outDir = join(root, "out")
|
||||
const pkgPath = join(root, "package.json")
|
||||
|
||||
if (existsSync(outDir) && !statSync(outDir).isDirectory()) {
|
||||
rmSync(outDir)
|
||||
}
|
||||
mkdirSync(outDir, { recursive: true })
|
||||
|
||||
const pkg = await Bun.file(pkgPath).json()
|
||||
const sha = (await $`git rev-parse --short HEAD`.text()).trim()
|
||||
const devVersion = `${pkg.version}-dev+${sha}`
|
||||
|
||||
await Bun.write(pkgPath, JSON.stringify({ ...pkg, version: devVersion }, null, 2) + "\n")
|
||||
|
||||
try {
|
||||
await $`bun script/local-bin.ts`.cwd(root)
|
||||
await $`bun run check-types`.cwd(root)
|
||||
await $`bun run lint`.cwd(root)
|
||||
await $`node ${join(root, "esbuild.js")} --production`.cwd(root)
|
||||
await $`bunx @vscode/vsce package --no-dependencies --skip-license -o ${outDir}/`.cwd(root)
|
||||
} finally {
|
||||
await Bun.write(pkgPath, JSON.stringify(pkg, null, 2) + "\n")
|
||||
}
|
||||
|
||||
const vsix = (await $`ls -1v ${outDir}/*.vsix`.text()).trim().split("\n").at(-1)!
|
||||
await $`code --force --install-extension ${vsix}`
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user