docs: remove markdown table padding, add formatting rule

This commit is contained in:
Mark IJbema
2026-02-12 13:09:52 +01:00
parent 3e3385fbb3
commit 181dd9a7d7
5 changed files with 151 additions and 146 deletions
+1
View File
@@ -2,3 +2,4 @@ node_modules
dist
out
pnpm-lock.yaml
*.md
+4
View File
@@ -107,6 +107,10 @@ Follow monorepo root AGENTS.md style guide:
- Avoid `try`/`catch`, avoid `any` type
- ESLint enforces: curly braces, strict equality, semicolons, camelCase/PascalCase imports
## Markdown Tables
Do not pad markdown table cells for column alignment. Use `| content |` with single spaces, not `| content |` with extra padding. Padding creates spurious diffs. Markdown files are excluded from prettier (via `.prettierignore`) to prevent auto-reformatting of tables.
## Committing
- Before committing, always run `pnpm run format` so commits don't accidentally include formatting/styling-only diffs.
@@ -50,11 +50,11 @@ Some Kilo Code locale identifiers represent the same language but use different
Mapping rules (when constructing Kilo CLI-facing locale values):
| Kilo Code locale | Kilo CLI locale | Notes |
| Kilo Code locale | Kilo CLI locale | Notes |
| ---------------- | --------------- | -------------------- |
| `pt-BR` | `br` | Brazilian Portuguese |
| `zh-CN` | `zh` | Simplified Chinese |
| `zh-TW` | `zht` | Traditional Chinese |
| `pt-BR` | `br` | Brazilian Portuguese |
| `zh-CN` | `zh` | Simplified Chinese |
| `zh-TW` | `zht` | Traditional Chinese |
All other supported locales map 1:1 (e.g. `de → de`, `fr → fr`).
@@ -29,67 +29,67 @@ The rebuild has a working foundation:
## Chat UI Feature Parity
| Feature | Status | Details | Backend | Priority |
| Feature | Status | Details | Backend | Priority |
| -------------------------------------------------------------------------------------- | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | -------- |
| [Auto-Approval Controls](chat-ui-features/auto-approval-controls.md) | ❌ Not started | No auto-approval toggle, scope selectors, or timeout config. Permission dialog exists but only supports per-request decisions. [#171](https://github.com/Kilo-Org/kilo/issues/171) | CLI owns permissions; webview needs config UI | P1 |
| [Browser Session Controls](chat-ui-features/browser-session-controls.md) | ❌ Not started | No browser automation UI, action replay, or screenshot viewing in chat. | 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](chat-ui-features/code-block-interactions.md) | ❌ Not started | No markdown rendering, syntax highlighting, copy button, expand/collapse, or sticky buttons on code blocks. Messages render as plain text. | Webview-only | P0 |
| [Command Execution](chat-ui-features/command-execution.md) | 🔨 Partial | Tool messages render but lack expandable terminal output, abort-by-PID, exit status indicators, command pattern selectors, and syntax highlighting. | CLI executes commands; webview renders output | P0 |
| [Connection State UI](chat-ui-features/connection-state-ui.md) | ❌ Not started | No loading/connecting spinner, error panel with retry, or reconnecting indicator. Chat renders even when disconnected. | 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](chat-ui-features/diff-viewing-file-operations.md) | ❌ Not started | No diff rendering, file change stats, jump-to-file, syntax-highlighted diffs, or batch approval UI. | 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. [#171](https://github.com/Kilo-Org/kilo/issues/171) | 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](chat-ui-features/image-handling.md) | ❌ Not started | No image viewer, zoom/pan modal, thumbnails, file attachment support in prompt input, or image paste support. | 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. Missing: jump-to-file links and inline action buttons. | CLI provides tool metadata; webview renders | P1 |
| [Kilo Themed Chat Session](chat-ui-features/kilo-themed-chat-session.md) | 🔨 Partial | Basic chat exists but lacks Kilo theming, markdown rendering, and visual polish. [#161](https://github.com/Kilo-Org/kilo/issues/161) | Webview-only (styling/theming) | P0 |
| [Markdown Rendering](chat-ui-features/markdown-rendering.md) | ❌ Not started | Assistant messages render as plain text. No markdown parsing, code syntax highlighting, or clickable links. Blocks Code Block Interactions and Mermaid features. [#161](https://github.com/Kilo-Org/kilo/issues/161) | 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). [#177](https://github.com/Kilo-Org/kilo/issues/177) | 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](chat-ui-features/task-header.md) | ❌ Not started | No task header with initial prompt, cost, context size, or compaction button. [#166](https://github.com/Kilo-Org/kilo/issues/166) | CLI provides cost/context data; webview renders | P0 |
| [Todo List Management](chat-ui-features/todo-list-management.md) | 🔨 Partial | `todo.updated` SSE event is handled through the full pipeline: KiloProvider → webview message → session store with `todos()` accessor. Missing: UI component to render, display, or interact with todo items. | 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 [PR #127](https://github.com/Kilo-Org/kilo/pull/127). [#172](https://github.com/Kilo-Org/kilo/issues/172) | CLI controls thinking; webview provides toggle UI | P2 |
| [Auto-Approval Controls](chat-ui-features/auto-approval-controls.md) | ❌ Not started | No auto-approval toggle, scope selectors, or timeout config. Permission dialog exists but only supports per-request decisions. [#171](https://github.com/Kilo-Org/kilo/issues/171) | CLI owns permissions; webview needs config UI | P1 |
| [Browser Session Controls](chat-ui-features/browser-session-controls.md) | ❌ Not started | No browser automation UI, action replay, or screenshot viewing in chat. | 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](chat-ui-features/code-block-interactions.md) | ❌ Not started | No markdown rendering, syntax highlighting, copy button, expand/collapse, or sticky buttons on code blocks. Messages render as plain text. | Webview-only | P0 |
| [Command Execution](chat-ui-features/command-execution.md) | 🔨 Partial | Tool messages render but lack expandable terminal output, abort-by-PID, exit status indicators, command pattern selectors, and syntax highlighting. | CLI executes commands; webview renders output | P0 |
| [Connection State UI](chat-ui-features/connection-state-ui.md) | ❌ Not started | No loading/connecting spinner, error panel with retry, or reconnecting indicator. Chat renders even when disconnected. | 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](chat-ui-features/diff-viewing-file-operations.md) | ❌ Not started | No diff rendering, file change stats, jump-to-file, syntax-highlighted diffs, or batch approval UI. | 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. [#171](https://github.com/Kilo-Org/kilo/issues/171) | 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](chat-ui-features/image-handling.md) | ❌ Not started | No image viewer, zoom/pan modal, thumbnails, file attachment support in prompt input, or image paste support. | 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. Missing: jump-to-file links and inline action buttons. | CLI provides tool metadata; webview renders | P1 |
| [Kilo Themed Chat Session](chat-ui-features/kilo-themed-chat-session.md) | 🔨 Partial | Basic chat exists but lacks Kilo theming, markdown rendering, and visual polish. [#161](https://github.com/Kilo-Org/kilo/issues/161) | Webview-only (styling/theming) | P0 |
| [Markdown Rendering](chat-ui-features/markdown-rendering.md) | ❌ Not started | Assistant messages render as plain text. No markdown parsing, code syntax highlighting, or clickable links. Blocks Code Block Interactions and Mermaid features. [#161](https://github.com/Kilo-Org/kilo/issues/161) | 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). [#177](https://github.com/Kilo-Org/kilo/issues/177) | 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](chat-ui-features/task-header.md) | ❌ Not started | No task header with initial prompt, cost, context size, or compaction button. [#166](https://github.com/Kilo-Org/kilo/issues/166) | CLI provides cost/context data; webview renders | P0 |
| [Todo List Management](chat-ui-features/todo-list-management.md) | 🔨 Partial | `todo.updated` SSE event is handled through the full pipeline: KiloProvider → webview message → session store with `todos()` accessor. Missing: UI component to render, display, or interact with todo items. | 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 [PR #127](https://github.com/Kilo-Org/kilo/pull/127). [#172](https://github.com/Kilo-Org/kilo/issues/172) | CLI controls thinking; webview provides toggle UI | P2 |
---
## Non-Agent Feature Parity
| Feature | Status | Details | Backend | Priority |
| Feature | Status | Details | Backend | Priority |
| ------------------------------------------------------------------------------------------------------- | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | -------- |
| [Agent Manager](non-agent-features/agent-manager.md) | 🔨 Partial | Panel exists but renders only `<h1>Agent Manager</h1>`. No session orchestration, parallel worktrees, or resumable sessions. [#178](https://github.com/Kilo-Org/kilo/issues/178) | Extension orchestrates multiple CLI sessions | P1 |
| [Authentication & Enterprise](non-agent-features/authentication-organization-enterprise-enforcement.md) | 🔨 Partial | Device auth flow works. Missing: org feature flags, MDM policy enforcement. [#160](https://github.com/Kilo-Org/kilo/issues/160) | 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](non-agent-features/autocomplete-ghost.md) | ❌ Not started | No inline editor completions, fill-in-the-middle, or chat-input autocomplete. [#164](https://github.com/Kilo-Org/kilo/issues/164) | Extension-side (VS Code InlineCompletionProvider) | P1 |
| [Browser Automation & URL Ingestion](non-agent-features/browser-automation-url-ingestion.md) | ❌ Not started | No browser control, screenshots, or URL-to-markdown extraction. | CLI (partial); extension for browser automation | 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. [#168](https://github.com/Kilo-Org/kilo/issues/168) | Kilo cloud API + CLI; extension provides UI | P2 |
| [Code Actions](non-agent-features/code-actions.md) | ❌ Not started | No VS Code lightbulb/context menu integrations (explain, fix, improve). | Extension-side (VS Code CodeActionProvider) | P2 |
| [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. [#165](https://github.com/Kilo-Org/kilo/issues/165) | 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](non-agent-features/kilo-gateway.md) | 🔨 Partial | Auth flow works but no explicit gateway provider selection or default model. [#176](https://github.com/Kilo-Org/kilo/issues/176) | CLI handles gateway connection; extension provides config UI | P0 |
| [Localization](non-agent-features/localization-and-locale-alignment.md) | ❌ Not started | No i18n or locale normalization. All UI is English-only. | 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. [#169](https://github.com/Kilo-Org/kilo/issues/169) | Extension-side | P2 |
| [MCP & MCP Hub](non-agent-features/mcp-and-mcp-hub.md) | ❌ Not started | No MCP configuration UI, server management, tool allowlisting, or connection status. CLI owns MCP runtime. | CLI owns MCP lifecycle; extension provides config UI | P1 |
| [Mode Switcher](non-agent-features/mode-switcher.md) | ❌ Not started | No mode switching UI (Code, Architect, Ask, Debug, etc.). [#162](https://github.com/Kilo-Org/kilo/issues/162) | CLI manages modes; extension provides switcher UI | P2 |
| [Model Switcher](non-agent-features/model-switcher.md) | 🔨 Partial | No model switching UI. In progress. [#163](https://github.com/Kilo-Org/kilo/issues/163) | CLI provides model list; extension provides switcher UI | P1 |
| [Provider Configuration](non-agent-features/provider-configuration.md) | ❌ Not started | No provider add/edit/remove or switching UI. ProvidersTab is a stub. [#175](https://github.com/Kilo-Org/kilo/issues/175) | 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. [#174](https://github.com/Kilo-Org/kilo/issues/174) | 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. [#173](https://github.com/Kilo-Org/kilo/issues/173) | 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 | 14-tab settings shell exists, all tabs are stubs. [#170](https://github.com/Kilo-Org/kilo/issues/170) | 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. [#167](https://github.com/Kilo-Org/kilo/issues/167) | CLI session storage; extension provides history UI | 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 |
| [Agent Manager](non-agent-features/agent-manager.md) | 🔨 Partial | Panel exists but renders only `<h1>Agent Manager</h1>`. No session orchestration, parallel worktrees, or resumable sessions. [#178](https://github.com/Kilo-Org/kilo/issues/178) | Extension orchestrates multiple CLI sessions | P1 |
| [Authentication & Enterprise](non-agent-features/authentication-organization-enterprise-enforcement.md) | 🔨 Partial | Device auth flow works. Missing: org feature flags, MDM policy enforcement. [#160](https://github.com/Kilo-Org/kilo/issues/160) | 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](non-agent-features/autocomplete-ghost.md) | ❌ Not started | No inline editor completions, fill-in-the-middle, or chat-input autocomplete. [#164](https://github.com/Kilo-Org/kilo/issues/164) | Extension-side (VS Code InlineCompletionProvider) | P1 |
| [Browser Automation & URL Ingestion](non-agent-features/browser-automation-url-ingestion.md) | ❌ Not started | No browser control, screenshots, or URL-to-markdown extraction. | CLI (partial); extension for browser automation | 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. [#168](https://github.com/Kilo-Org/kilo/issues/168) | Kilo cloud API + CLI; extension provides UI | P2 |
| [Code Actions](non-agent-features/code-actions.md) | ❌ Not started | No VS Code lightbulb/context menu integrations (explain, fix, improve). | Extension-side (VS Code CodeActionProvider) | P2 |
| [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. [#165](https://github.com/Kilo-Org/kilo/issues/165) | 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](non-agent-features/kilo-gateway.md) | 🔨 Partial | Auth flow works but no explicit gateway provider selection or default model. [#176](https://github.com/Kilo-Org/kilo/issues/176) | CLI handles gateway connection; extension provides config UI | P0 |
| [Localization](non-agent-features/localization-and-locale-alignment.md) | ❌ Not started | No i18n or locale normalization. All UI is English-only. | 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. [#169](https://github.com/Kilo-Org/kilo/issues/169) | Extension-side | P2 |
| [MCP & MCP Hub](non-agent-features/mcp-and-mcp-hub.md) | ❌ Not started | No MCP configuration UI, server management, tool allowlisting, or connection status. CLI owns MCP runtime. | CLI owns MCP lifecycle; extension provides config UI | P1 |
| [Mode Switcher](non-agent-features/mode-switcher.md) | ❌ Not started | No mode switching UI (Code, Architect, Ask, Debug, etc.). [#162](https://github.com/Kilo-Org/kilo/issues/162) | CLI manages modes; extension provides switcher UI | P2 |
| [Model Switcher](non-agent-features/model-switcher.md) | 🔨 Partial | No model switching UI. In progress. [#163](https://github.com/Kilo-Org/kilo/issues/163) | CLI provides model list; extension provides switcher UI | P1 |
| [Provider Configuration](non-agent-features/provider-configuration.md) | ❌ Not started | No provider add/edit/remove or switching UI. ProvidersTab is a stub. [#175](https://github.com/Kilo-Org/kilo/issues/175) | 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. [#174](https://github.com/Kilo-Org/kilo/issues/174) | 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. [#173](https://github.com/Kilo-Org/kilo/issues/173) | 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 | 14-tab settings shell exists, all tabs are stubs. [#170](https://github.com/Kilo-Org/kilo/issues/170) | 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. [#167](https://github.com/Kilo-Org/kilo/issues/167) | CLI session storage; extension provides history UI | 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 |
---
@@ -97,12 +97,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 |
| 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 |
| [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 |
---
@@ -37,23 +37,23 @@ VSCodeProvider → ServerProvider → SessionProvider → AppContent
### What is hand-built vs what could use kilo-ui
| Area | Current | kilo-ui available? |
| Area | Current | kilo-ui available? |
| ------------------------------------- | ----------------------------------------------------- | ------------------------------------------------- |
| Buttons (send, abort, login, etc.) | Raw `<button>` + inline styles | Yes — `Button`, `IconButton` |
| Cards (profile, balance, device auth) | Raw `<div>` + inline styles | Yes — `Card` |
| Permission dialog | Custom overlay div + CSS | Yes — `Dialog` |
| Settings tabs | Custom signal-based tab nav (~80 lines inline styles) | Yes — `Tabs` |
| Session list | Custom `<div>` items + CSS | Yes — `List` |
| Tool call expand/collapse | Custom toggle buttons | Yes — `Collapsible`, `Accordion` |
| Loading indicators | Emoji (`⏳`, `⚙️`) | Yes — `Spinner` |
| Code blocks | Raw `<pre>` tags | Yes — `Code` (with shiki) |
| Markdown rendering | **Not implemented** (plain text) | Yes — `Markdown` |
| Diff display | **Not implemented** | Yes — `Diff`, `DiffChanges` |
| Tooltips | **Not implemented** | Yes — `Tooltip` |
| Toast notifications | **Not implemented** | Yes — `Toast` |
| Icons | `lucide-solid` in Settings; emoji elsewhere | Yes — `Icon` |
| Theming | Raw `--vscode-*` CSS vars | Yes — `ThemeProvider` + `kilo-vscode` theme |
| Settings form controls | **Not implemented** (14 stub tabs) | Yes — `Select`, `Switch`, `Checkbox`, `TextField` |
| Buttons (send, abort, login, etc.) | Raw `<button>` + inline styles | Yes — `Button`, `IconButton` |
| Cards (profile, balance, device auth) | Raw `<div>` + inline styles | Yes — `Card` |
| Permission dialog | Custom overlay div + CSS | Yes — `Dialog` |
| Settings tabs | Custom signal-based tab nav (~80 lines inline styles) | Yes — `Tabs` |
| Session list | Custom `<div>` items + CSS | Yes — `List` |
| Tool call expand/collapse | Custom toggle buttons | Yes — `Collapsible`, `Accordion` |
| Loading indicators | Emoji (`⏳`, `⚙️`) | Yes — `Spinner` |
| Code blocks | Raw `<pre>` tags | Yes — `Code` (with shiki) |
| Markdown rendering | **Not implemented** (plain text) | Yes — `Markdown` |
| Diff display | **Not implemented** | Yes — `Diff`, `DiffChanges` |
| Tooltips | **Not implemented** | Yes — `Tooltip` |
| Toast notifications | **Not implemented** | Yes — `Toast` |
| Icons | `lucide-solid` in Settings; emoji elsewhere | Yes — `Icon` |
| Theming | Raw `--vscode-*` CSS vars | Yes — `ThemeProvider` + `kilo-vscode` theme |
| Settings form controls | **Not implemented** (14 stub tabs) | Yes — `Select`, `Switch`, `Checkbox`, `TextField` |
---
@@ -340,23 +340,23 @@ Before migrating, the following icons must be added to the `icons` map in [`ui/s
##### Migration mapping
| Settings Tab | lucide-solid | kilo-ui `name` | Notes |
| Settings Tab | lucide-solid | kilo-ui `name` | Notes |
| --------------- | -------------------- | --------------- | ----------------------------- |
| Back button | `ArrowLeft` | `arrow-left` | Exact match |
| Providers | `Plug` | `providers` | Semantic match |
| Terminal | `SquareTerminal` | `console` | Good match |
| Prompts | `MessageSquare` | `speech-bubble` | Good match |
| Checkpoints | `GitBranch` | `branch` | Good match |
| Browser | `SquareMousePointer` | `window-cursor` | Approximate — review visually |
| About | `Info` | `help` | Approximate — `?` vs `i` icon |
| Context | `Database` | `server` | Approximate — review visually |
| Auto-Approve | `CheckCheck` | `checklist` | Approximate — review visually |
| Display | `Monitor` | `monitor` | **New icon needed** |
| Autocomplete | `Bot` | `bot` | **New icon needed** |
| Notifications | `Bell` | `bell` | **New icon needed** |
| Agent Behaviour | `Users2` | `users` | **New icon needed** |
| Experimental | `FlaskConical` | `flask` | **New icon needed** |
| Language | `Globe` | `globe` | **New icon needed** |
| Back button | `ArrowLeft` | `arrow-left` | Exact match |
| Providers | `Plug` | `providers` | Semantic match |
| Terminal | `SquareTerminal` | `console` | Good match |
| Prompts | `MessageSquare` | `speech-bubble` | Good match |
| Checkpoints | `GitBranch` | `branch` | Good match |
| Browser | `SquareMousePointer` | `window-cursor` | Approximate — review visually |
| About | `Info` | `help` | Approximate — `?` vs `i` icon |
| Context | `Database` | `server` | Approximate — review visually |
| Auto-Approve | `CheckCheck` | `checklist` | Approximate — review visually |
| Display | `Monitor` | `monitor` | **New icon needed** |
| Autocomplete | `Bot` | `bot` | **New icon needed** |
| Notifications | `Bell` | `bell` | **New icon needed** |
| Agent Behaviour | `Users2` | `users` | **New icon needed** |
| Experimental | `FlaskConical` | `flask` | **New icon needed** |
| Language | `Globe` | `globe` | **New icon needed** |
Once all lucide icons are replaced and the 6 new icons are added to kilo-ui, remove `lucide-solid` from `package.json` dependencies.
@@ -604,31 +604,31 @@ Use for: model selector, mode selector, provider info cards.
## 6. Component Migration Reference Table
| Current Component | File | kilo-ui Replacement | Import Path |
| Current Component | File | kilo-ui Replacement | Import Path |
| ----------------------------- | --------------------------------------- | ------------------- | --------------------------------- |
| Raw `<button>` elements | Multiple files | `Button` | `@kilocode/kilo-ui/button` |
| SVG icon buttons | `PromptInput.tsx` | `IconButton` | `@kilocode/kilo-ui/icon-button` |
| Emoji spinners (`⏳`, `⚙️`) | `Message.tsx` | `Spinner` | `@kilocode/kilo-ui/spinner` |
| Custom overlay dialog | `PermissionDialog.tsx` | `Dialog` | `@kilocode/kilo-ui/dialog` |
| Inline-styled cards | `ProfileView.tsx`, `DeviceAuthCard.tsx` | `Card` | `@kilocode/kilo-ui/card` |
| Custom tab navigation | `Settings.tsx` | `Tabs` | `@kilocode/kilo-ui/tabs` |
| Custom list items | `SessionList.tsx` | `List` | `@kilocode/kilo-ui/list` |
| Custom toggle expand/collapse | `Message.tsx` | `Collapsible` | `@kilocode/kilo-ui/collapsible` |
| Lucide icons | `Settings.tsx` | `Icon` | `@kilocode/kilo-ui/icon` |
| Plain text messages | `Message.tsx` | `Markdown` | `@kilocode/kilo-ui/markdown` |
| Raw `<pre>` code blocks | `Message.tsx` | `Code` | `@kilocode/kilo-ui/code` |
| Custom message parts | `Message.tsx` | `MessagePart` | `@kilocode/kilo-ui/message-part` |
| Custom tool display | `Message.tsx` | `BasicTool` | `@kilocode/kilo-ui/basic-tool` |
| _(not implemented)_ | — | `Tooltip` | `@kilocode/kilo-ui/tooltip` |
| _(not implemented)_ | — | `Toast` | `@kilocode/kilo-ui/toast` |
| _(not implemented)_ | — | `DropdownMenu` | `@kilocode/kilo-ui/dropdown-menu` |
| _(not implemented)_ | — | `ContextMenu` | `@kilocode/kilo-ui/context-menu` |
| _(not implemented)_ | — | `Select` | `@kilocode/kilo-ui/select` |
| _(not implemented)_ | — | `Switch` | `@kilocode/kilo-ui/switch` |
| _(not implemented)_ | — | `Checkbox` | `@kilocode/kilo-ui/checkbox` |
| _(not implemented)_ | — | `TextField` | `@kilocode/kilo-ui/text-field` |
| _(not implemented)_ | — | `DiffChanges` | `@kilocode/kilo-ui/diff-changes` |
| _(not implemented)_ | — | `Popover` | `@kilocode/kilo-ui/popover` |
| Raw `<button>` elements | Multiple files | `Button` | `@kilocode/kilo-ui/button` |
| SVG icon buttons | `PromptInput.tsx` | `IconButton` | `@kilocode/kilo-ui/icon-button` |
| Emoji spinners (`⏳`, `⚙️`) | `Message.tsx` | `Spinner` | `@kilocode/kilo-ui/spinner` |
| Custom overlay dialog | `PermissionDialog.tsx` | `Dialog` | `@kilocode/kilo-ui/dialog` |
| Inline-styled cards | `ProfileView.tsx`, `DeviceAuthCard.tsx` | `Card` | `@kilocode/kilo-ui/card` |
| Custom tab navigation | `Settings.tsx` | `Tabs` | `@kilocode/kilo-ui/tabs` |
| Custom list items | `SessionList.tsx` | `List` | `@kilocode/kilo-ui/list` |
| Custom toggle expand/collapse | `Message.tsx` | `Collapsible` | `@kilocode/kilo-ui/collapsible` |
| Lucide icons | `Settings.tsx` | `Icon` | `@kilocode/kilo-ui/icon` |
| Plain text messages | `Message.tsx` | `Markdown` | `@kilocode/kilo-ui/markdown` |
| Raw `<pre>` code blocks | `Message.tsx` | `Code` | `@kilocode/kilo-ui/code` |
| Custom message parts | `Message.tsx` | `MessagePart` | `@kilocode/kilo-ui/message-part` |
| Custom tool display | `Message.tsx` | `BasicTool` | `@kilocode/kilo-ui/basic-tool` |
| _(not implemented)_ | — | `Tooltip` | `@kilocode/kilo-ui/tooltip` |
| _(not implemented)_ | — | `Toast` | `@kilocode/kilo-ui/toast` |
| _(not implemented)_ | — | `DropdownMenu` | `@kilocode/kilo-ui/dropdown-menu` |
| _(not implemented)_ | — | `ContextMenu` | `@kilocode/kilo-ui/context-menu` |
| _(not implemented)_ | — | `Select` | `@kilocode/kilo-ui/select` |
| _(not implemented)_ | — | `Switch` | `@kilocode/kilo-ui/switch` |
| _(not implemented)_ | — | `Checkbox` | `@kilocode/kilo-ui/checkbox` |
| _(not implemented)_ | — | `TextField` | `@kilocode/kilo-ui/text-field` |
| _(not implemented)_ | — | `DiffChanges` | `@kilocode/kilo-ui/diff-changes` |
| _(not implemented)_ | — | `Popover` | `@kilocode/kilo-ui/popover` |
---
@@ -728,40 +728,40 @@ Each phase has specific acceptance criteria (listed above). The general verifica
### Specific test scenarios
| Scenario | What to verify |
| Scenario | What to verify |
| ------------------- | ---------------------------------------------------------------- |
| Fresh webview load | Styles load, no FOUC, providers initialize |
| Send a message | Button works, message appears, streaming works |
| Permission dialog | Dialog opens, buttons work, dialog closes |
| Settings navigation | Tabs switch, form controls work |
| Session history | List renders, selection works, navigation back to chat |
| Login flow | Device auth card renders, QR code displays, success/error states |
| Theme switching | Change VS Code theme → webview updates automatically |
| Sidebar ↔ tab | Both webview hosts render identically |
| Markdown content | Headers, lists, code blocks, links render correctly |
| Long conversations | Auto-scroll works, performance is acceptable |
| Fresh webview load | Styles load, no FOUC, providers initialize |
| Send a message | Button works, message appears, streaming works |
| Permission dialog | Dialog opens, buttons work, dialog closes |
| Settings navigation | Tabs switch, form controls work |
| Session history | List renders, selection works, navigation back to chat |
| Login flow | Device auth card renders, QR code displays, success/error states |
| Theme switching | Change VS Code theme → webview updates automatically |
| Sidebar ↔ tab | Both webview hosts render identically |
| Markdown content | Headers, lists, code blocks, links render correctly |
| Long conversations | Auto-scroll works, performance is acceptable |
---
## 9. Progress Tracker
| Phase | Status | Date | Notes |
| Phase | Status | Date | Notes |
| ---------------------------- | ------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Phase 0: Foundation | ✅ Complete | 2026-02-10 | Build system, CSP, providers, styles wired up. `I18nProvider` locale corrected to accessor. Font loaders (`.woff`, `.woff2`, `.ttf`) added to esbuild. `solidDedupePlugin` added to force single solid-js copy across monorepo. |
| Phase 1.1: Buttons | ✅ Complete | 2026-02-10 | All buttons in PromptInput, PermissionDialog, ProfileView, DeviceAuthCard, Settings replaced with `Button`. `IconButton` not used — requires named `icon` prop incompatible with inline SVGs. Settings tab sidebar buttons left as native `<button>` (complex active state styling). |
| Phase 1.2: Spinners | ✅ Complete | 2026-02-10 | Emoji loading indicators (`⏳`, `⚙️`) in Message.tsx and DeviceAuthCard.tsx replaced with `Spinner`. Status icons (`✓`, `✕`) kept as-is. |
| Phase 1.3: Permission Dialog | ✅ Complete | 2026-02-11 | Custom overlay replaced with `Dialog` via `useDialog()` hook + `BasicTool` for collapsible header + `data-component="permission-prompt"` for actions. Removed 7 custom CSS classes. Direct `@kobalte/core` dep removed to avoid dual-package context mismatch. |
| Phase 1.4: Cards | ✅ Complete | 2026-02-11 | Inline-styled card divs in ProfileView (profile + balance) and DeviceAuthCard (5 state cards) replaced with `Card` component. Removed `cardStyle` constant. |
| Phase 1.5: Icons | ✅ Complete | 2026-02-11 | All 15 lucide-solid icons replaced with kilo-ui `Icon`. `lucide-solid` dep removed. Many icons use approximate matches (see deviation #7). |
| Phase 2: Settings shell | ✅ Complete | 2026-02-11 | Settings shell uses kilo-ui `Tabs` (vertical, `variant="settings"`). ~80 lines of inline styles removed. Icons use `Icon` component. Settings tab _content_ (form controls, backend wiring) is out of scope for this plan. `LanguageTab` demonstrates `Select` usage as reference. |
| Phase 3: Chat UI | ✅ Complete | 2026-02-11 | Surpassed original plan: `Message.tsx` now uses kilo-ui's higher-level `Message` component (from `@kilocode/kilo-ui/message-part`) which internally handles Markdown, tool calls (BasicTool), reasoning (Collapsible), and more. `DataProvider` bridge in `App.tsx` adapts session store to SDK format. `MarkedProvider` active. `DiffComponentProvider` and `CodeComponentProvider` deferred (not needed while `Message` handles rendering internally). |
| Phase 4.5: Popover | ✅ Complete | 2026-02-11 | ModelSelector and ModeSwitcher replaced with kilo-ui `Popover`. Removed ~85 lines of custom CSS (positioning, click-outside, z-index). Popover handles dismiss, positioning, and animations via Kobalte. |
| I18n system | ✅ Complete | 2026-02-11 | **Beyond original plan.** Full `LanguageProvider` context with 16 locales, 3-layer dictionary merging (app + ui + kilo-i18n), locale resolution (user override → VS Code → browser → "en"), template parameter interpolation. `@kilocode/kilo-i18n` added as dependency. |
| Phase 4.1: Tooltips | ✅ Complete | 2026-02-11 | Added `Tooltip` to send/abort buttons (PromptInput), settings back button, and profile refresh button. Uses `value` prop (not `content`) with i18n keys. |
| Phase 4.3: Toast | ✅ Complete | 2026-02-11 | `Toast.Region` added to `App.tsx`. `showToast()` used for copy confirmations in `DeviceAuthCard`. Removed `copied` signal state in favor of toast feedback. |
| Phase 4.4: List | ✅ Complete | 2026-02-11 | `SessionList` replaced custom `<div>`-based list with kilo-ui `List` component. Gains keyboard navigation (arrow keys + Enter), fuzzy search on session titles, and `[data-component="list"]` styling. Removed ~55 lines of custom session-list CSS. |
| CSS cleanup | ✅ Complete | 2026-02-11 | Removed 91 lines: unused `.prompt-send-button`/`.prompt-abort-button` classes (replaced by kilo-ui `Button`), and `.session-item`/`.session-list-empty` classes (replaced by kilo-ui `List`). `chat.css` now at ~306 lines. |
| Phase 4.2: Menus | ⬚ Not started | — | DropdownMenu + ContextMenu for session list actions (rename, delete) and message actions (copy, retry). Depends on backend supporting these operations. |
| Phase 0: Foundation | ✅ Complete | 2026-02-10 | Build system, CSP, providers, styles wired up. `I18nProvider` locale corrected to accessor. Font loaders (`.woff`, `.woff2`, `.ttf`) added to esbuild. `solidDedupePlugin` added to force single solid-js copy across monorepo. |
| Phase 1.1: Buttons | ✅ Complete | 2026-02-10 | All buttons in PromptInput, PermissionDialog, ProfileView, DeviceAuthCard, Settings replaced with `Button`. `IconButton` not used — requires named `icon` prop incompatible with inline SVGs. Settings tab sidebar buttons left as native `<button>` (complex active state styling). |
| Phase 1.2: Spinners | ✅ Complete | 2026-02-10 | Emoji loading indicators (`⏳`, `⚙️`) in Message.tsx and DeviceAuthCard.tsx replaced with `Spinner`. Status icons (`✓`, `✕`) kept as-is. |
| Phase 1.3: Permission Dialog | ✅ Complete | 2026-02-11 | Custom overlay replaced with `Dialog` via `useDialog()` hook + `BasicTool` for collapsible header + `data-component="permission-prompt"` for actions. Removed 7 custom CSS classes. Direct `@kobalte/core` dep removed to avoid dual-package context mismatch. |
| Phase 1.4: Cards | ✅ Complete | 2026-02-11 | Inline-styled card divs in ProfileView (profile + balance) and DeviceAuthCard (5 state cards) replaced with `Card` component. Removed `cardStyle` constant. |
| Phase 1.5: Icons | ✅ Complete | 2026-02-11 | All 15 lucide-solid icons replaced with kilo-ui `Icon`. `lucide-solid` dep removed. Many icons use approximate matches (see deviation #7). |
| Phase 2: Settings shell | ✅ Complete | 2026-02-11 | Settings shell uses kilo-ui `Tabs` (vertical, `variant="settings"`). ~80 lines of inline styles removed. Icons use `Icon` component. Settings tab _content_ (form controls, backend wiring) is out of scope for this plan. `LanguageTab` demonstrates `Select` usage as reference. |
| Phase 3: Chat UI | ✅ Complete | 2026-02-11 | Surpassed original plan: `Message.tsx` now uses kilo-ui's higher-level `Message` component (from `@kilocode/kilo-ui/message-part`) which internally handles Markdown, tool calls (BasicTool), reasoning (Collapsible), and more. `DataProvider` bridge in `App.tsx` adapts session store to SDK format. `MarkedProvider` active. `DiffComponentProvider` and `CodeComponentProvider` deferred (not needed while `Message` handles rendering internally). |
| Phase 4.5: Popover | ✅ Complete | 2026-02-11 | ModelSelector and ModeSwitcher replaced with kilo-ui `Popover`. Removed ~85 lines of custom CSS (positioning, click-outside, z-index). Popover handles dismiss, positioning, and animations via Kobalte. |
| I18n system | ✅ Complete | 2026-02-11 | **Beyond original plan.** Full `LanguageProvider` context with 16 locales, 3-layer dictionary merging (app + ui + kilo-i18n), locale resolution (user override → VS Code → browser → "en"), template parameter interpolation. `@kilocode/kilo-i18n` added as dependency. |
| Phase 4.1: Tooltips | ✅ Complete | 2026-02-11 | Added `Tooltip` to send/abort buttons (PromptInput), settings back button, and profile refresh button. Uses `value` prop (not `content`) with i18n keys. |
| Phase 4.3: Toast | ✅ Complete | 2026-02-11 | `Toast.Region` added to `App.tsx`. `showToast()` used for copy confirmations in `DeviceAuthCard`. Removed `copied` signal state in favor of toast feedback. |
| Phase 4.4: List | ✅ Complete | 2026-02-11 | `SessionList` replaced custom `<div>`-based list with kilo-ui `List` component. Gains keyboard navigation (arrow keys + Enter), fuzzy search on session titles, and `[data-component="list"]` styling. Removed ~55 lines of custom session-list CSS. |
| CSS cleanup | ✅ Complete | 2026-02-11 | Removed 91 lines: unused `.prompt-send-button`/`.prompt-abort-button` classes (replaced by kilo-ui `Button`), and `.session-item`/`.session-list-empty` classes (replaced by kilo-ui `List`). `chat.css` now at ~306 lines. |
| Phase 4.2: Menus | ⬚ Not started | — | DropdownMenu + ContextMenu for session list actions (rename, delete) and message actions (copy, retry). Depends on backend supporting these operations. |
### Deviations from plan