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 c7c85cebbe6..870af0cd652 100644
--- a/bun.lock
+++ b/bun.lock
@@ -27,7 +27,7 @@
},
"packages/app": {
"name": "@opencode-ai/app",
- "version": "7.1.12",
+ "version": "7.1.20",
"dependencies": {
"@kilocode/kilo-i18n": "workspace:*",
"@kilocode/kilo-ui": "workspace:*",
@@ -79,7 +79,7 @@
},
"packages/desktop": {
"name": "@opencode-ai/desktop",
- "version": "7.1.12",
+ "version": "7.1.20",
"dependencies": {
"@opencode-ai/app": "workspace:*",
"@opencode-ai/ui": "workspace:*",
@@ -112,7 +112,7 @@
},
"packages/desktop-electron": {
"name": "@opencode-ai/desktop-electron",
- "version": "7.1.12",
+ "version": "7.1.20",
"dependencies": {
"@opencode-ai/app": "workspace:*",
"@opencode-ai/ui": "workspace:*",
@@ -142,7 +142,7 @@
},
"packages/kilo-docs": {
"name": "@kilocode/kilo-docs",
- "version": "7.1.12",
+ "version": "7.1.20",
"dependencies": {
"@docsearch/css": "^4",
"@docsearch/js": "^4",
@@ -171,7 +171,7 @@
},
"packages/kilo-gateway": {
"name": "@kilocode/kilo-gateway",
- "version": "7.1.12",
+ "version": "7.1.20",
"dependencies": {
"@ai-sdk/anthropic": "2.0.65",
"@ai-sdk/openai": "2.0.101",
@@ -206,7 +206,7 @@
},
"packages/kilo-i18n": {
"name": "@kilocode/kilo-i18n",
- "version": "7.1.12",
+ "version": "7.1.20",
"devDependencies": {
"@tsconfig/node22": "catalog:",
"@types/bun": "catalog:",
@@ -214,9 +214,12 @@
"typescript": "catalog:",
},
},
+ "packages/kilo-jetbrains": {
+ "name": "@kilocode/kilo-jetbrains",
+ },
"packages/kilo-telemetry": {
"name": "@kilocode/kilo-telemetry",
- "version": "7.1.12",
+ "version": "7.1.20",
"dependencies": {
"@kilocode/kilo-gateway": "workspace:*",
"@opentelemetry/api": "1.9.0",
@@ -236,7 +239,7 @@
},
"packages/kilo-ui": {
"name": "@kilocode/kilo-ui",
- "version": "7.1.12",
+ "version": "7.1.20",
"dependencies": {
"@kobalte/core": "0.13.11",
"@opencode-ai/util": "workspace:*",
@@ -271,7 +274,7 @@
},
"packages/kilo-vscode": {
"name": "kilo-code",
- "version": "7.1.12",
+ "version": "7.1.20",
"dependencies": {
"@anthropic-ai/sdk": "^0.39.0",
"@kilocode/kilo-i18n": "workspace:*",
@@ -324,7 +327,7 @@
},
"packages/opencode": {
"name": "@kilocode/cli",
- "version": "7.1.12",
+ "version": "7.1.20",
"bin": {
"kilo": "./bin/kilo",
"kilocode": "./bin/kilo",
@@ -401,8 +404,10 @@
"opentui-spinner": "0.0.6",
"partial-json": "0.1.7",
"remeda": "catalog:",
+ "rotating-file-stream": "3.2.9",
"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",
@@ -446,7 +451,7 @@
},
"packages/plugin": {
"name": "@kilocode/plugin",
- "version": "7.1.12",
+ "version": "7.1.20",
"dependencies": {
"@kilocode/sdk": "workspace:*",
"zod": "catalog:",
@@ -460,14 +465,14 @@
},
"packages/script": {
"name": "@opencode-ai/script",
- "version": "7.1.12",
+ "version": "7.1.20",
"devDependencies": {
"@types/bun": "catalog:",
},
},
"packages/sdk/js": {
"name": "@kilocode/sdk",
- "version": "7.1.12",
+ "version": "7.1.20",
"devDependencies": {
"@hey-api/openapi-ts": "0.90.10",
"@tsconfig/node22": "catalog:",
@@ -478,7 +483,7 @@
},
"packages/storybook": {
"name": "@opencode-ai/storybook",
- "version": "7.1.12",
+ "version": "7.1.20",
"devDependencies": {
"@opencode-ai/ui": "workspace:*",
"@solidjs/meta": "catalog:",
@@ -501,7 +506,7 @@
},
"packages/ui": {
"name": "@opencode-ai/ui",
- "version": "7.1.12",
+ "version": "7.1.20",
"dependencies": {
"@kilocode/sdk": "workspace:*",
"@kobalte/core": "catalog:",
@@ -548,7 +553,7 @@
},
"packages/util": {
"name": "@opencode-ai/util",
- "version": "7.1.12",
+ "version": "7.1.20",
"dependencies": {
"zod": "catalog:",
},
@@ -1211,6 +1216,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"],
@@ -1983,6 +1990,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=="],
@@ -3261,6 +3270,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=="],
@@ -3797,6 +3808,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=="],
@@ -3977,6 +3990,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 832994311a2..904a5a290d6 100644
--- a/package.json
+++ b/package.json
@@ -112,6 +112,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.12",
+ "version": "7.1.20",
"peerDependencies": {}
}
diff --git a/packages/app/package.json b/packages/app/package.json
index 79e2d4a7f5f..5a118458382 100644
--- a/packages/app/package.json
+++ b/packages/app/package.json
@@ -1,6 +1,6 @@
{
"name": "@opencode-ai/app",
- "version": "7.1.12",
+ "version": "7.1.20",
"description": "",
"type": "module",
"exports": {
diff --git a/packages/desktop-electron/package.json b/packages/desktop-electron/package.json
index aed0249011e..fda4582038e 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.12",
+ "version": "7.1.20",
"type": "module",
"license": "MIT",
"homepage": "https://opencode.ai",
diff --git a/packages/desktop/package.json b/packages/desktop/package.json
index b9b67e28063..d13399bae9e 100644
--- a/packages/desktop/package.json
+++ b/packages/desktop/package.json
@@ -1,7 +1,7 @@
{
"name": "@opencode-ai/desktop",
"private": true,
- "version": "7.1.12",
+ "version": "7.1.20",
"type": "module",
"license": "MIT",
"scripts": {
diff --git a/packages/extensions/zed/extension.toml b/packages/extensions/zed/extension.toml
index f9f644386dd..522d8ecbbb0 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.12"
+version = "7.1.20"
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.12/opencode-darwin-arm64.zip"
+archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.1.20/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.12/opencode-darwin-x64.zip"
+archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.1.20/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.12/opencode-linux-arm64.tar.gz"
+archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.1.20/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.12/opencode-linux-x64.tar.gz"
+archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.1.20/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.12/opencode-windows-x64.zip"
+archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.1.20/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 69ef88cbe9c..f6cc9503fdd 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.12",
+ "version": "7.1.20",
"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": {
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..633fb7e3c34 100644
--- a/packages/kilo-vscode/src/KiloProvider.ts
+++ b/packages/kilo-vscode/src/KiloProvider.ts
@@ -39,6 +39,7 @@ 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,
@@ -74,6 +75,7 @@ import {
computeDefaultSelection,
fetchProviderData,
validateRecents,
+ validateFavorites,
connectProvider as connectProviderAction,
authorizeProviderOAuth as authorizeOAuthAction,
completeProviderOAuth as completeOAuthAction,
@@ -143,7 +145,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")} +
+ +