diff --git a/.gitignore b/.gitignore
index 6bd9245c08b..a8bee54501a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,10 @@ node_modules
.worktrees
.sst
.env
-.idea
+.idea/*
+!.idea/gradle.xml
+!.idea/.run
+.idea/*.iml
.vscode/*
!.vscode/extensions.json
!.vscode/launch.json
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 00000000000..f9fe116bbd6
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
## Get Started with the CLI
diff --git a/bun.lock b/bun.lock
index 0ee8e5ca95b..2b6c228e4e2 100644
--- a/bun.lock
+++ b/bun.lock
@@ -27,7 +27,7 @@
},
"packages/app": {
"name": "@opencode-ai/app",
- "version": "7.1.11",
+ "version": "7.1.21",
"dependencies": {
"@kilocode/kilo-i18n": "workspace:*",
"@kilocode/kilo-ui": "workspace:*",
@@ -80,7 +80,7 @@
},
"packages/desktop": {
"name": "@opencode-ai/desktop",
- "version": "7.1.11",
+ "version": "7.1.21",
"dependencies": {
"@opencode-ai/app": "workspace:*",
"@opencode-ai/ui": "workspace:*",
@@ -113,7 +113,7 @@
},
"packages/desktop-electron": {
"name": "@opencode-ai/desktop-electron",
- "version": "7.1.11",
+ "version": "7.1.21",
"dependencies": {
"@opencode-ai/app": "workspace:*",
"@opencode-ai/ui": "workspace:*",
@@ -144,7 +144,7 @@
},
"packages/kilo-docs": {
"name": "@kilocode/kilo-docs",
- "version": "7.1.11",
+ "version": "7.1.21",
"dependencies": {
"@docsearch/css": "^4",
"@docsearch/js": "^4",
@@ -173,7 +173,7 @@
},
"packages/kilo-gateway": {
"name": "@kilocode/kilo-gateway",
- "version": "7.1.11",
+ "version": "7.1.21",
"dependencies": {
"@ai-sdk/anthropic": "2.0.65",
"@ai-sdk/openai": "2.0.101",
@@ -208,7 +208,7 @@
},
"packages/kilo-i18n": {
"name": "@kilocode/kilo-i18n",
- "version": "7.1.11",
+ "version": "7.1.21",
"devDependencies": {
"@tsconfig/node22": "catalog:",
"@types/bun": "catalog:",
@@ -216,9 +216,12 @@
"typescript": "catalog:",
},
},
+ "packages/kilo-jetbrains": {
+ "name": "@kilocode/kilo-jetbrains",
+ },
"packages/kilo-telemetry": {
"name": "@kilocode/kilo-telemetry",
- "version": "7.1.11",
+ "version": "7.1.21",
"dependencies": {
"@kilocode/kilo-gateway": "workspace:*",
"@opentelemetry/api": "1.9.0",
@@ -238,7 +241,7 @@
},
"packages/kilo-ui": {
"name": "@kilocode/kilo-ui",
- "version": "7.1.11",
+ "version": "7.1.21",
"dependencies": {
"@kobalte/core": "0.13.11",
"@opencode-ai/util": "workspace:*",
@@ -273,7 +276,7 @@
},
"packages/kilo-vscode": {
"name": "kilo-code",
- "version": "7.1.11",
+ "version": "7.1.21",
"dependencies": {
"@anthropic-ai/sdk": "^0.39.0",
"@kilocode/kilo-i18n": "workspace:*",
@@ -326,7 +329,7 @@
},
"packages/opencode": {
"name": "@kilocode/cli",
- "version": "7.1.11",
+ "version": "7.1.21",
"bin": {
"kilo": "./bin/kilo",
"kilocode": "./bin/kilo",
@@ -404,9 +407,11 @@
"opentui-spinner": "0.0.6",
"partial-json": "0.1.7",
"remeda": "catalog:",
+ "rotating-file-stream": "3.2.9",
"semver": "^7.6.3",
"simple-git": "3.31.1",
"solid-js": "catalog:",
+ "stream-chat": "9.38.0",
"strip-ansi": "7.1.2",
"tree-sitter-bash": "0.25.0",
"turndown": "7.2.0",
@@ -452,7 +457,7 @@
},
"packages/plugin": {
"name": "@kilocode/plugin",
- "version": "7.1.11",
+ "version": "7.1.21",
"dependencies": {
"@kilocode/sdk": "workspace:*",
"zod": "catalog:",
@@ -466,7 +471,7 @@
},
"packages/script": {
"name": "@opencode-ai/script",
- "version": "7.1.11",
+ "version": "7.1.21",
"dependencies": {
"semver": "^7.6.3",
},
@@ -477,7 +482,7 @@
},
"packages/sdk/js": {
"name": "@kilocode/sdk",
- "version": "7.1.11",
+ "version": "7.1.21",
"devDependencies": {
"@hey-api/openapi-ts": "0.90.10",
"@tsconfig/node22": "catalog:",
@@ -488,7 +493,7 @@
},
"packages/storybook": {
"name": "@opencode-ai/storybook",
- "version": "7.1.11",
+ "version": "7.1.21",
"devDependencies": {
"@opencode-ai/ui": "workspace:*",
"@solidjs/meta": "catalog:",
@@ -511,7 +516,7 @@
},
"packages/ui": {
"name": "@opencode-ai/ui",
- "version": "7.1.11",
+ "version": "7.1.21",
"dependencies": {
"@kilocode/sdk": "workspace:*",
"@kobalte/core": "catalog:",
@@ -558,7 +563,7 @@
},
"packages/util": {
"name": "@opencode-ai/util",
- "version": "7.1.11",
+ "version": "7.1.21",
"dependencies": {
"zod": "catalog:",
},
@@ -1224,6 +1229,8 @@
"@kilocode/kilo-i18n": ["@kilocode/kilo-i18n@workspace:packages/kilo-i18n"],
+ "@kilocode/kilo-jetbrains": ["@kilocode/kilo-jetbrains@workspace:packages/kilo-jetbrains"],
+
"@kilocode/kilo-telemetry": ["@kilocode/kilo-telemetry@workspace:packages/kilo-telemetry"],
"@kilocode/kilo-ui": ["@kilocode/kilo-ui@workspace:packages/kilo-ui"],
@@ -2008,6 +2015,8 @@
"@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="],
+ "@types/jsonwebtoken": ["@types/jsonwebtoken@9.0.10", "", { "dependencies": { "@types/ms": "*", "@types/node": "*" } }, "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA=="],
+
"@types/katex": ["@types/katex@0.16.7", "", {}, "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ=="],
"@types/keyv": ["@types/keyv@3.1.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg=="],
@@ -3296,6 +3305,8 @@
"linkify-it": ["linkify-it@5.0.0", "", { "dependencies": { "uc.micro": "^2.0.0" } }, "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ=="],
+ "linkifyjs": ["linkifyjs@4.3.2", "", {}, "sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA=="],
+
"load-json-file": ["load-json-file@7.0.1", "", {}, "sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ=="],
"locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="],
@@ -3842,6 +3853,8 @@
"rollup": ["rollup@4.59.0", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.59.0", "@rollup/rollup-android-arm64": "4.59.0", "@rollup/rollup-darwin-arm64": "4.59.0", "@rollup/rollup-darwin-x64": "4.59.0", "@rollup/rollup-freebsd-arm64": "4.59.0", "@rollup/rollup-freebsd-x64": "4.59.0", "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", "@rollup/rollup-linux-arm-musleabihf": "4.59.0", "@rollup/rollup-linux-arm64-gnu": "4.59.0", "@rollup/rollup-linux-arm64-musl": "4.59.0", "@rollup/rollup-linux-loong64-gnu": "4.59.0", "@rollup/rollup-linux-loong64-musl": "4.59.0", "@rollup/rollup-linux-ppc64-gnu": "4.59.0", "@rollup/rollup-linux-ppc64-musl": "4.59.0", "@rollup/rollup-linux-riscv64-gnu": "4.59.0", "@rollup/rollup-linux-riscv64-musl": "4.59.0", "@rollup/rollup-linux-s390x-gnu": "4.59.0", "@rollup/rollup-linux-x64-gnu": "4.59.0", "@rollup/rollup-linux-x64-musl": "4.59.0", "@rollup/rollup-openbsd-x64": "4.59.0", "@rollup/rollup-openharmony-arm64": "4.59.0", "@rollup/rollup-win32-arm64-msvc": "4.59.0", "@rollup/rollup-win32-ia32-msvc": "4.59.0", "@rollup/rollup-win32-x64-gnu": "4.59.0", "@rollup/rollup-win32-x64-msvc": "4.59.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg=="],
+ "rotating-file-stream": ["rotating-file-stream@3.2.9", "", {}, "sha512-i9i0KkHh12ryl4xtELg+0gyoFre2PJ9RcQQLzquWsiqygyYsrZLckrqqYrthhnJZGZb4g+KUHtcoWYVq34gaug=="],
+
"roughjs": ["roughjs@4.6.6", "", { "dependencies": { "hachure-fill": "^0.5.2", "path-data-parser": "^0.1.0", "points-on-curve": "^0.2.0", "points-on-path": "^0.2.1" } }, "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ=="],
"router": ["router@2.2.0", "", { "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="],
@@ -4022,6 +4035,8 @@
"storybook-solidjs-vite": ["storybook-solidjs-vite@10.0.9", "", { "dependencies": { "@joshwooding/vite-plugin-react-docgen-typescript": "^0.6.1", "@storybook/builder-vite": "^10.0.0", "@storybook/global": "^5.0.0", "vite-plugin-solid": "^2.11.8" }, "peerDependencies": { "solid-js": "^1.9.0", "storybook": "^0.0.0-0 || ^10.0.0", "typescript": ">= 4.9.x", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" }, "optionalPeers": ["typescript"] }, "sha512-n6MwWCL9mK/qIaUutE9vhGB0X1I1hVnKin2NL+iVC5oXfAiuaABVZlr/1oEeEypsgCdyDOcbEbhJmDWmaqGpPw=="],
+ "stream-chat": ["stream-chat@9.38.0", "", { "dependencies": { "@types/jsonwebtoken": "^9.0.8", "@types/ws": "^8.5.14", "axios": "^1.12.2", "base64-js": "^1.5.1", "form-data": "^4.0.4", "isomorphic-ws": "^5.0.0", "jsonwebtoken": "^9.0.3", "linkifyjs": "^4.3.2", "ws": "^8.18.1" } }, "sha512-nyTFKHnhGfk1Op/xuZzPKzM9uNTy4TBma69+ApwGj/UtrK2pT6rSaU0Qy/oAqub+Bh7jR2/5vlV/8FWJ2BObFg=="],
+
"streamx": ["streamx@2.23.0", "", { "dependencies": { "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" } }, "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg=="],
"string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="],
diff --git a/flake.nix b/flake.nix
index ed9a99e8a6e..1fa4fae94e1 100644
--- a/flake.nix
+++ b/flake.nix
@@ -150,28 +150,54 @@
'';
in
pkgs.mkShell {
- packages = with pkgs; [
- bun
- nodejs_20
- pkg-config
- openssl
- git
- gh
- playwright-driver.browsers
- vsce
- unzip
- gnutar
- gzip
- patchelf
- ripgrep
- kilo-dev
- kilo-install-bin
- kilo-bin
- ];
+ packages =
+ with pkgs;
+ [
+ bun
+ nodejs_20
+ pkg-config
+ openssl
+ git
+ gh
+ playwright-driver.browsers
+ vsce
+ unzip
+ gnutar
+ gzip
+ patchelf
+ ripgrep
+ jetbrains.jdk
+ jdk21
+ kilo-dev
+ kilo-install-bin
+ kilo-bin
+ ]
+ ++ lib.optionals stdenv.isLinux [
+ libX11
+ libXext
+ libXrender
+ libXtst
+ libXi
+ fontconfig
+ freetype
+ ];
shellHook = ''
export KILO_ROOT="$PWD"
export PLAYWRIGHT_BROWSERS_PATH="${pkgs.playwright-driver.browsers}"
export PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS=true
+ ''
+ + pkgs.lib.optionalString pkgs.stdenv.isLinux ''
+ export LD_LIBRARY_PATH="${
+ pkgs.lib.makeLibraryPath [
+ pkgs.libX11
+ pkgs.libXext
+ pkgs.libXrender
+ pkgs.libXtst
+ pkgs.libXi
+ pkgs.fontconfig
+ pkgs.freetype
+ ]
+ }:$LD_LIBRARY_PATH"
'';
};
});
diff --git a/nix/hashes.json b/nix/hashes.json
index 80015c18486..fffa19cd003 100644
--- a/nix/hashes.json
+++ b/nix/hashes.json
@@ -1,8 +1,8 @@
{
"nodeModules": {
- "x86_64-linux": "sha256-YjB3YfaA79nztpZoYEAlFBakS//G/Guprlqk4BYFgOA=",
- "aarch64-linux": "sha256-ru470M8RVwyOPNGr6I4VfApQRHhYFFMPjOBneTRBJtc=",
- "aarch64-darwin": "sha256-M6LIPBHnYH9AtIRAKyW44VN71Kb28nztzFteCkL0588=",
- "x86_64-darwin": "sha256-HURoot79BFHYwoEp0XqVdI6cRdV7KGvmRRqOf+hUa9Q="
+ "x86_64-linux": "sha256-4yd8H4UN7YIhdIQ607UoxSqwsQEKqUWkOifjQ2PEvn0=",
+ "aarch64-linux": "sha256-EuzzDc/j63eRV8QEFgDmQRIsiSq4ZPr9RJSdB9dH+kI=",
+ "aarch64-darwin": "sha256-BLCZubMC/n06HsUeO3FsvREwfsmjtiTBseSMDPPZNYM=",
+ "x86_64-darwin": "sha256-gU1uhExpYJhhVHbspCwCry/DwUiuddRvYl72RZqWzNo="
}
}
diff --git a/package.json b/package.json
index bf3cc813576..f65be458b09 100644
--- a/package.json
+++ b/package.json
@@ -113,6 +113,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.1.11",
+ "version": "7.1.21",
"peerDependencies": {}
}
diff --git a/packages/app/package.json b/packages/app/package.json
index a2511c60da9..4f328f5e8ea 100644
--- a/packages/app/package.json
+++ b/packages/app/package.json
@@ -1,6 +1,6 @@
{
"name": "@opencode-ai/app",
- "version": "7.1.11",
+ "version": "7.1.21",
"description": "",
"type": "module",
"exports": {
diff --git a/packages/desktop-electron/package.json b/packages/desktop-electron/package.json
index f24b84b4377..0479df63eb7 100644
--- a/packages/desktop-electron/package.json
+++ b/packages/desktop-electron/package.json
@@ -1,7 +1,7 @@
{
"name": "@opencode-ai/desktop-electron",
"private": true,
- "version": "7.1.11",
+ "version": "7.1.21",
"type": "module",
"license": "MIT",
"homepage": "https://opencode.ai",
diff --git a/packages/desktop/package.json b/packages/desktop/package.json
index 75eec5cdc73..ad500440bfa 100644
--- a/packages/desktop/package.json
+++ b/packages/desktop/package.json
@@ -1,7 +1,7 @@
{
"name": "@opencode-ai/desktop",
"private": true,
- "version": "7.1.11",
+ "version": "7.1.21",
"type": "module",
"license": "MIT",
"scripts": {
diff --git a/packages/extensions/zed/extension.toml b/packages/extensions/zed/extension.toml
index 12b55abae7e..4026a0d9708 100644
--- a/packages/extensions/zed/extension.toml
+++ b/packages/extensions/zed/extension.toml
@@ -1,7 +1,7 @@
id = "kilo"
name = "Kilo"
description = "The open source coding agent."
-version = "7.1.11"
+version = "7.1.21"
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.1.11/opencode-darwin-arm64.zip"
+archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.1.21/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.1.11/opencode-darwin-x64.zip"
+archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.1.21/opencode-darwin-x64.zip"
cmd = "./opencode"
args = ["acp"]
[agent_servers.opencode.targets.linux-aarch64]
-archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.1.11/opencode-linux-arm64.tar.gz"
+archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.1.21/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.1.11/opencode-linux-x64.tar.gz"
+archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.1.21/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.1.11/opencode-windows-x64.zip"
+archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.1.21/opencode-windows-x64.zip"
cmd = "./opencode.exe"
args = ["acp"]
diff --git a/packages/kilo-docs/components/Tabs.tsx b/packages/kilo-docs/components/Tabs.tsx
index 6cc69abda61..ecffe35dc6d 100644
--- a/packages/kilo-docs/components/Tabs.tsx
+++ b/packages/kilo-docs/components/Tabs.tsx
@@ -1,5 +1,7 @@
import React, { useState, useEffect, Children, isValidElement, ReactNode, ReactElement } from "react"
+const TAB_SYNC_EVENT = "kilo-tab-select"
+
interface TabProps {
label: string
children: ReactNode
@@ -39,13 +41,26 @@ export function Tabs({ children }: TabsProps) {
setActiveIndex(indexFromHash())
const onHashChange = () => setActiveIndex(indexFromHash())
window.addEventListener("hashchange", onHashChange)
- return () => window.removeEventListener("hashchange", onHashChange)
+
+ const onSync = (e: Event) => {
+ const label = (e as CustomEvent- We've replatformed our extensions on the new Kilo CLI. - Contribute at Kilo-Org/kilocode. + The all-new Kilo Code extension is here, rebuilt on the{" "} + Kilo CLI for speed, flexibility, and continued access to 500+ models via the Kilo Gateway + →
## Developer Setup
diff --git a/packages/kilo-vscode/package.json b/packages/kilo-vscode/package.json
index 233cd852845..8b7d9b1221d 100644
--- a/packages/kilo-vscode/package.json
+++ b/packages/kilo-vscode/package.json
@@ -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.1.11",
+ "version": "7.1.21",
"icon": "assets/icons/logo-outline-black.png",
"galleryBanner": {
"color": "#FFFFFF",
@@ -373,6 +373,26 @@
"command": "kilo-code.new.openInTab",
"group": "navigation",
"when": "true"
+ },
+ {
+ "command": "kilo-code.new.plusButtonClicked",
+ "group": "navigation@0",
+ "when": "activeWebviewPanelId == kilo-code.new.TabPanel"
+ },
+ {
+ "command": "kilo-code.new.historyButtonClicked",
+ "group": "navigation@1",
+ "when": "activeWebviewPanelId == kilo-code.new.TabPanel"
+ },
+ {
+ "command": "kilo-code.new.profileButtonClicked",
+ "group": "navigation@2",
+ "when": "activeWebviewPanelId == kilo-code.new.TabPanel"
+ },
+ {
+ "command": "kilo-code.new.settingsButtonClicked",
+ "group": "navigation@3",
+ "when": "activeWebviewPanelId == kilo-code.new.TabPanel"
}
],
"editor/context": [
@@ -633,7 +653,8 @@
"th",
"bs",
"tr",
- "nl"
+ "nl",
+ "uk"
],
"enumDescriptions": [
"Auto (VS Code language)",
@@ -654,7 +675,8 @@
"ภาษาไทย",
"Bosanski",
"Türkçe",
- "Nederlands"
+ "Nederlands",
+ "Українська"
]
},
"kilo-code.new.model.providerID": {
@@ -682,6 +704,11 @@
"default": false,
"description": "Enable chat textarea autocomplete"
},
+ "kilo-code.new.claudeCodeCompat": {
+ "type": "boolean",
+ "default": false,
+ "description": "Load CLAUDE.md instructions and skills from your Claude Code configuration directory into Kilo sessions. Enable this if you want Kilo to use your Claude Code instructions and skills."
+ },
"kilo-code.new.browserAutomation.enabled": {
"type": "boolean",
"default": false,
diff --git a/packages/kilo-vscode/script/build.ts b/packages/kilo-vscode/script/build.ts
index 86eb685dcbc..ee00dbb778e 100644
--- a/packages/kilo-vscode/script/build.ts
+++ b/packages/kilo-vscode/script/build.ts
@@ -36,10 +36,9 @@ const targets = [
const binDir = join(import.meta.dir, "..", "bin")
const distDir = join(import.meta.dir, "..", "dist")
const outDir = join(import.meta.dir, "..", "out")
-const outDirProd = join(import.meta.dir, "..", "out", "prod")
console.log("\n🧹 Cleaning up directories...")
-for (const dir of [binDir, distDir, outDir, outDirProd]) {
+for (const dir of [binDir, distDir, outDir]) {
if (existsSync(dir)) {
rmSync(dir, { recursive: true, force: true })
console.log(` ✓ Cleaned ${dir}`)
@@ -48,7 +47,6 @@ for (const dir of [binDir, distDir, outDir, outDirProd]) {
mkdirSync(outDir, { recursive: true })
mkdirSync(distDir, { recursive: true })
-mkdirSync(outDirProd, { recursive: true })
console.log("\n🔄 Rebuilding SDK types (ensures dist/ is in sync with server API)...")
await $`bun run --cwd ${join(import.meta.dir, "..", "..", "sdk", "js")} build`
@@ -84,18 +82,11 @@ for (const config of targets) {
console.log(` 📦 Packaging .vsix for ${config.target}...`)
const vsixPath = join(outDir, `kilo-vscode-${config.target}.vsix`)
- await $`vsce package --pre-release --no-dependencies --skip-license --target ${config.target} -o ${vsixPath}`.env({
+ await $`vsce package --no-dependencies --skip-license --target ${config.target} -o ${vsixPath}`.env({
...process.env,
npm_config_ignore_scripts: "true",
})
console.log(` ✅ Created ${vsixPath}`)
-
- const prodVsixPath = join(outDirProd, `kilo-vscode-${config.target}.vsix`)
- await $`vsce package --no-dependencies --skip-license --target ${config.target} -o ${prodVsixPath}`.env({
- ...process.env,
- npm_config_ignore_scripts: "true",
- })
- console.log(` ✅ Created ${prodVsixPath}`)
}
console.log("\n✨ All VSIX packages built successfully!")
diff --git a/packages/kilo-vscode/script/publish.ts b/packages/kilo-vscode/script/publish.ts
index 3a526e86d5a..ef891606266 100755
--- a/packages/kilo-vscode/script/publish.ts
+++ b/packages/kilo-vscode/script/publish.ts
@@ -7,7 +7,6 @@ import { Script } from "@opencode-ai/script"
console.log(`Publishing VSCode extension for release: v${Script.version}`)
const outDir = process.env.VSIX_DIR || join(import.meta.dir, "..", "out")
-const outDirProd = join(outDir, "prod")
console.log(`Using VSIX directory: ${outDir}`)
@@ -40,13 +39,12 @@ console.log(`\nFound ${vsixFiles.length} VSIX files`)
for (const target of targets) {
const vsixPath = join(outDir, `kilo-vscode-${target}.vsix`)
console.log(`\n🚀 Publishing ${target} to VS Code Marketplace...`)
- await $`vsce publish --pre-release --packagePath ${vsixPath}`
+ await $`vsce publish --packagePath ${vsixPath}`
console.log(` ✅ Published ${target} to VS Code Marketplace`)
- const prodVsixPath = join(outDirProd, `kilo-vscode-${target}.vsix`)
console.log(`\n📤 Publishing ${target} to Open VSX...`)
- await $`npx ovsx publish --pat ${process.env.OPENVSX_TOKEN} --packagePath ${prodVsixPath}`
- console.log(` ✅ Published Prod ${target} to Open VSX`)
+ await $`npx ovsx publish --pat ${process.env.OPENVSX_TOKEN} --packagePath ${vsixPath}`
+ console.log(` ✅ Published ${target} to Open VSX`)
}
if (Script.release) {
diff --git a/packages/kilo-vscode/src/KiloProvider.ts b/packages/kilo-vscode/src/KiloProvider.ts
index c6e1a046da1..372d076d5c4 100644
--- a/packages/kilo-vscode/src/KiloProvider.ts
+++ b/packages/kilo-vscode/src/KiloProvider.ts
@@ -39,11 +39,13 @@ import { MarketplaceService } from "./services/marketplace"
import { resolveProjectDirectory } from "./project-directory"
import { getBusySessionCount, seedSessionStatuses } from "./session-status"
import { slimPart, slimParts } from "./kilo-provider/slim-metadata"
+import { matchFollowup, recordFollowup, type Followup } from "./kilo-provider/followup-session"
// legacy-migration start
import {
checkAndShowMigrationWizard,
handleRequestLegacyMigrationData,
handleStartLegacyMigration,
+ handleFinalizeLegacyMigration,
handleSkipLegacyMigration,
handleClearLegacyData,
type MigrationContext,
@@ -74,6 +76,7 @@ import {
computeDefaultSelection,
fetchProviderData,
validateRecents,
+ validateFavorites,
connectProvider as connectProviderAction,
authorizeProviderOAuth as authorizeOAuthAction,
completeProviderOAuth as completeOAuthAction,
@@ -143,7 +146,10 @@ export class KiloProvider implements vscode.WebviewViewProvider, TelemetryProper
private unsubscribeNotificationDismiss: (() => void) | null = null
private unsubscribeLanguageChange: (() => void) | null = null
private unsubscribeProfileChange: (() => void) | null = null
+ private unsubscribeFavoritesChange: (() => void) | null = null
private unsubscribeMigrationComplete: (() => void) | null = null // legacy-migration
+ private unsubscribeClearPendingPrompts: (() => void) | null = null
+ private unsubscribeDirectoryProvider: (() => void) | null = null
private initConnectionPromise: Promise+ {language.t("settings.aboutKiloCode.telemetry.description")} +
+ +