merge: reconcile updated v1.18.15 base into v1.18.18

This commit is contained in:
Johnny Eric Amancio
2026-08-27 12:22:26 +02:00
368 changed files with 7450 additions and 2125 deletions
@@ -1,5 +0,0 @@
---
"kilo-code": minor
---
Add an agent_manager answer action so orchestrating agents can resolve a managed session's pending question instead of only stopping it. Prompting a session that waits on input now fails immediately with the pending question named.
-5
View File
@@ -1,5 +0,0 @@
---
"kilo-code": patch
---
Move Agent Manager worktree settings into the Kilo Settings editor and add project selection for multi-project workspaces.
@@ -1,5 +0,0 @@
---
"kilo-code": patch
---
Render Agent Manager terminal output with the WebGL renderer instead of the DOM renderer, and pause rendering for terminals hidden in the background
@@ -1,5 +0,0 @@
---
"kilo-code": patch
---
Even out the Agent Manager toolbar: every context button now shares one height and spacing, and the Run, terminal, and new-session split buttons use identical chevrons, so the row stays tidy no matter which optional actions are shown.
@@ -1,5 +0,0 @@
---
"kilo-code": patch
---
Ensure Enter and Tab execute the slash command highlighted in the VS Code command picker.
@@ -1,5 +0,0 @@
---
"kilo-code": patch
---
Keep answered questions expanded in chat history and improve their text wrapping.
@@ -1,5 +0,0 @@
---
"@kilocode/cli": patch
---
Clarify when to use foreground subagents and wait for required background results before the final answer.
-5
View File
@@ -1,5 +0,0 @@
---
"kilo-code": patch
---
Add a button to copy pull request links from the Agent Manager PR panel.
+5
View File
@@ -0,0 +1,5 @@
---
"kilo-code": patch
---
Update DOMPurify to 3.4.13 to fix XSS vulnerabilities flagged by Dependabot in markdown sanitization.
-5
View File
@@ -1,5 +0,0 @@
---
"kilo-code": minor
---
Open edit, write, and patch changes in the Agent Manager side panel instead of a new editor tab. Clicking a tool or file name expands the change inline, while the open-diff button shows the full change in the Agent Manager panel, or in a diff tab outside Agent Manager. Multi-file patches now open every changed file, each sized to its own diff, and the panel keeps the unified or split view you last selected.
@@ -1,6 +0,0 @@
---
"@kilocode/cli": patch
"kilo-code": patch
---
Enable background subagents by default, including automatic completion notifications and foreground-to-background promotion. Running background agents now appear in a collapsible strip in the chat header, so they stay visible after the task card scrolls away and can be opened from there.
-5
View File
@@ -1,5 +0,0 @@
---
"@kilocode/cli": patch
---
Prevent provider errors when agents reach their step limit by sending the final summary instruction as user input instead of an assistant prefill.
@@ -1,5 +0,0 @@
---
"@kilocode/cli": patch
---
Fix PTY cleanup on Windows when POSIX process-tree inspection is unavailable.
@@ -1,5 +0,0 @@
---
"kilo-code": patch
---
Keep the working indicator and the session actions row flush with the prompt input, so the row above the composer no longer jumps when a turn finishes.
-5
View File
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": minor
---
Add an Advanced settings page with a Logging section to configure diagnostic log level and message previews, reveal the log in your file manager, and download the backend log in remote development.
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": patch
---
Show compact Agent Manager activity icons for running and waiting sessions while keeping idle rows aligned with a smaller idle dot.
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": patch
---
Offer Move to Worktree in the chat toolbar whenever the repository has local changes, even before the chat has a session — the worktree gets your changes and starts its own session. New Worktree from the chat toolbar now opens its dialog first and only switches to Agents once you confirm, and the dialog opens narrower.
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": patch
---
Keep session header popups beside the chat by choosing the roomier left or right side and sizing them so IntelliJ does not flip them above or below.
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": patch
---
Use regular PR title text and vertically center the PR badge in the JetBrains chat tool window.
@@ -0,0 +1,5 @@
---
"@kilocode/kilo-jetbrains": patch
---
Stop showing a running badge for a session that was just deleted.
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": patch
---
Show the chat New Worktree and Move to Worktree actions only while the session is idle, and keep the transcript pinned to the newest message when that row appears or disappears.
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": patch
---
Add standard horizontal padding to the empty chat recent sessions list.
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": patch
---
Keep list descriptions muted while their row is selected, mute the worktree row icons to match the description text, and paint the running spinner in the neutral icon grey so it stays legible in light and dark themes.
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": patch
---
Keep settings, history, and session lists on the same row and scroll position when they refresh, and select the neighbouring row after a delete.
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": patch
---
Keep Agent Manager worktree selection stable when reordering worktrees and switching tabs.
-5
View File
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": patch
---
Use `kilo.log` as the active JetBrains plugin diagnostic log, rotate old logs to `kilo.log.0` and `kilo.log.1`, and delete legacy `kilo-dev.log*` files when logging starts.
-5
View File
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": minor
---
Show proposed file changes in permission prompts before approval.
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": patch
---
Fix an IDE freeze when a chat session reports an error, which could hang the whole IDE while opening a worktree session editor.
-5
View File
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": patch
---
Use the Kilo running spinner across session progress indicators.
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": patch
---
Keep the slash-command completion popup open while typing quickly and reopen it if it closes mid-token, so fast typing filters commands instead of dismissing the list. Refresh the popup when server commands finish loading, and return focus to the prompt after picking a model, agent, or reasoning option from a slash command.
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": patch
---
Show why and how each tool call was allowed. Expanded tool cards (edits, shell commands, and every other tool) now display a shield footer such as "Auto-approved by your global config", including the matched rule or agent and an outside-workspace note. A new "Show approval reason on tool cards" toggle at the bottom of Auto-Approve settings (on by default) controls the footer.
-5
View File
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": patch
---
Show the JetBrains tool window Chat and Agents views as tabs with shorter labels.
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": minor
---
Support opening, editing, and deleting workflows from JetBrains settings.
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": minor
---
Reorder Agent Manager worktrees by dragging them in the JetBrains plugin.
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": patch
---
Show branch icons on Agent Manager worktree rows again, and mark the current checkout with a local machine icon.
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": patch
---
Scope chat session history to the worktree you have open, so a worktree no longer lists sessions from the main checkout or sibling worktrees, and show sessions started in another project frame in Agent Manager as they happen.
@@ -1,5 +0,0 @@
---
"@kilocode/cli": patch
---
Prevent encrypted reasoning state from incorrectly reducing the output token budget for long-running sessions.
+6
View File
@@ -0,0 +1,6 @@
---
"@opencode-ai/ui": patch
"@kilocode/kilo-docs": patch
---
Update Mermaid to 11.17.2 to resolve Dependabot security advisories.
@@ -1,5 +0,0 @@
---
"kilo-code": patch
---
Allow model selector searches to match provider prefixes in colon-separated model names.
@@ -1,6 +0,0 @@
---
"@kilocode/cli": patch
"kilo-code": patch
---
Prefer PowerShell 7 over legacy Windows PowerShell 5.1 when running agent commands on Windows. PowerShell 7 installs are now found even when `pwsh` is missing from PATH, Agent Manager setup and run scripts launch pwsh when available, and an explicit `shell` in kilo.json still overrides detection.
@@ -1,5 +0,0 @@
---
"kilo-code": patch
---
Use a shared responsive minimum gutter for prompt inputs across the VS Code sidebar, Agent Manager, and worktree dialogs.
-7
View File
@@ -1,7 +0,0 @@
---
"@kilocode/cli": minor
"@kilocode/kilo-ui": minor
"kilo-code": minor
---
View current provider plan usage and quota windows in the CLI and VS Code profile.
+5
View File
@@ -0,0 +1,5 @@
---
"kilo-code": patch
---
Reduce Agent Manager background Git and GitHub activity without adding file watchers.
-5
View File
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": patch
---
Improve JetBrains Agent Manager session status badges, selection persistence, and PR badge theming.
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": patch
---
Avoid showing JetBrains internal error popups when Kilo workspace data fails to load, and include HTTP status and response details in diagnostics.
@@ -1,5 +0,0 @@
---
"@kilocode/cli": patch
---
Avoid creating project-local dependency trees when configuration directories contain no file plugins.
@@ -1,5 +0,0 @@
---
"kilo-code": patch
---
Load the correct Agent Manager session history on the first worktree switch between projects.
-5
View File
@@ -1,5 +0,0 @@
---
"kilo-code": patch
---
Remove the model reset button from the chat and worktree prompt controls.
@@ -1,5 +0,0 @@
---
"kilo-code": minor
---
Add an Agent Manager document inspector that previews Markdown files with inline review comments that can be sent to the agent, while source files open in the VS Code editor.
@@ -0,0 +1,5 @@
---
"@kilocode/cli": patch
---
Prevent the CLI from opening to a blank terminal on startup.
@@ -0,0 +1,5 @@
---
"kilo-code": patch
---
Restore the session title and branch subtitle immediately when opening an existing session in a worktree.
-5
View File
@@ -1,5 +0,0 @@
---
"kilo-code": patch
---
Restore attached images when undoing the last prompt.
@@ -1,5 +0,0 @@
---
"@kilocode/cli": patch
---
Retry reasoning-only incomplete model responses within the bounded recovery budget instead of silently ending the turn.
-5
View File
@@ -1,5 +0,0 @@
---
"kilo-code": patch
---
Show review comment text directly in the chat message instead of hiding it behind a click. Each comment is now a row with the file, line and a two-line preview, expands in place to reveal the full body and code snippet, and long lists collapse to the first few comments with a "Show more" toggle. Opening a source file from a review comment now uses a native VS Code editor tab.
-5
View File
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": minor
---
Open sub-agent task sessions in read-only editor tabs from JetBrains task cards.
-5
View File
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": patch
---
Show the current branch first in Agent Manager and replace worktree activity tags with status icons. Running, question, and error activity now share one color between the row icon and the text badge, add an error state, and surface a notification dot on the Agents tab when a session needs attention.
-5
View File
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": patch
---
Report failures when moving a chat into a worktree instead of leaving the row stuck, clean up worktrees left by a failed move, and stop clicks in empty list space from selecting the last row.
@@ -1,5 +0,0 @@
---
"@kilocode/kilo-jetbrains": patch
---
Show worktree creation and move progress in the Agent Manager row instead of the chat dock.
-5
View File
@@ -1,5 +0,0 @@
---
"kilo-code": patch
---
Prevent Agent Manager terminal processes from escaping cleanup while a worktree is deleted.
+5 -5
View File
@@ -249,12 +249,10 @@ jobs:
export XDG_CACHE_HOME="$root/cache"
export XDG_CONFIG_HOME="$root/config"
export XDG_STATE_HOME="$root/state"
export KILO_PTY_SMOKE=1 # kilocode_change
export KILO_DISABLE_MODELS_FETCH=1
export KILO_DISABLE_PROJECT_CONFIG=1
export KILO_CONFIG_CONTENT='\''{"enabled_providers":["anthropic"]}'\''
export ANTHROPIC_API_KEY=dummy
"$binary" --pure __pty-smoke # kilocode_change
"$binary" --pure models anthropic | grep -q "^anthropic/"
'
@@ -311,13 +309,15 @@ jobs:
$env:XDG_CACHE_HOME = Join-Path $root "cache"
$env:XDG_CONFIG_HOME = Join-Path $root "config"
$env:XDG_STATE_HOME = Join-Path $root "state"
$env:KILO_PTY_SMOKE = "1" # kilocode_change
$env:KILO_DISABLE_MODELS_FETCH = "1"
$env:KILO_DISABLE_PROJECT_CONFIG = "1"
$env:KILO_CONFIG_CONTENT = '{"enabled_providers":["anthropic"]}'
$env:ANTHROPIC_API_KEY = "dummy"
& $binary --pure __pty-smoke # kilocode_change
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } # kilocode_change
if ("${{ matrix.arch }}" -eq "x64") {
$env:KILO_PTY_SMOKE = "1"
& $binary --pure __pty-smoke
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
}
$output = & $binary --pure models anthropic
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
if (-not ($output -match "(?m)^anthropic/")) {
+1
View File
@@ -59,6 +59,7 @@ tsconfig.tsbuildinfo
.kilo/yarn.lock
.kilo/node_modules
.kilo/plans/*upstream-merge-report-*.md
**/.kilo/jetbrains.json
.kilocode/.gitignore
.kilocode/package.json
.kilocode/package-lock.json
+2 -2
View File
@@ -16,7 +16,7 @@ The Kilo Community is [on Discord](https://kilo.ai/discord).
## Prerequisites
- **Bun 1.3.14+** — required for all packages.
- **Bun 1.4.0+** — required for all packages.
- **Java 21** — required by the JetBrains plugin. The root `bun turbo typecheck` and `bun turbo test:ci` commands include `@kilocode/kilo-jetbrains` and will fail without Java 21.
The preferred way to install Java is via [SDKMAN](https://sdkman.io/install):
@@ -41,7 +41,7 @@ The Kilo Community is [on Discord](https://kilo.ai/discord).
## Developing Kilo CLI
- **Requirements:** Bun 1.3.14+, Java 21 (see [Prerequisites](#prerequisites) above)
- **Requirements:** Bun 1.4.0+, Java 21 (see [Prerequisites](#prerequisites) above)
- Install dependencies and start the CLI from the repo root:
```bash
+1 -1
View File
@@ -21,5 +21,5 @@
"@types/react-dom": "^19.2.3",
"typescript": "^5.8.2"
},
"version": "7.4.23"
"version": "7.5.0"
}
+52 -47
View File
@@ -32,7 +32,7 @@
},
"packages/client": {
"name": "@opencode-ai/client",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"@opencode-ai/protocol": "workspace:*",
"@opencode-ai/schema": "workspace:*",
@@ -56,7 +56,7 @@
},
"packages/codemode": {
"name": "@opencode-ai/codemode",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"acorn": "8.15.0",
"effect": "catalog:",
@@ -70,7 +70,7 @@
},
"packages/core": {
"name": "@opencode-ai/core",
"version": "7.4.23",
"version": "7.5.0",
"bin": {
"opencode": "./bin/opencode",
},
@@ -168,7 +168,7 @@
},
"packages/effect-drizzle-sqlite": {
"name": "@opencode-ai/effect-drizzle-sqlite",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"drizzle-orm": "catalog:",
"effect": "catalog:",
@@ -182,7 +182,7 @@
},
"packages/effect-sqlite-node": {
"name": "@opencode-ai/effect-sqlite-node",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"effect": "catalog:",
},
@@ -194,7 +194,7 @@
},
"packages/http-recorder": {
"name": "@opencode-ai/http-recorder",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"@effect/platform-node": "4.0.0-beta.83",
"@effect/platform-node-shared": "4.0.0-beta.83",
@@ -215,7 +215,7 @@
},
"packages/httpapi-codegen": {
"name": "@opencode-ai/httpapi-codegen",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"effect": "catalog:",
"prettier": "3.6.2",
@@ -228,7 +228,7 @@
},
"packages/kilo-console": {
"name": "@kilocode/kilo-console",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"@kilocode/kilo-indexing": "workspace:*",
"@kilocode/kilo-web-ui": "workspace:*",
@@ -251,7 +251,7 @@
},
"packages/kilo-docs": {
"name": "@kilocode/kilo-docs",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"@docsearch/css": "^4",
"@docsearch/js": "^4",
@@ -260,7 +260,7 @@
"@vscode/codicons": "^0.0.44",
"@xyflow/react": "12.10.2",
"js-yaml": "^4.1.0",
"mermaid": "11.15.0",
"mermaid": "11.17.2",
"next": "^16.1.5",
"posthog-js": "^1.335.3",
"prismjs": "^1.30.0",
@@ -281,7 +281,7 @@
},
"packages/kilo-gateway": {
"name": "@kilocode/kilo-gateway",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"@ai-sdk/anthropic": "3.0.82",
"@ai-sdk/openai": "3.0.88",
@@ -315,7 +315,7 @@
},
"packages/kilo-i18n": {
"name": "@kilocode/kilo-i18n",
"version": "7.4.23",
"version": "7.5.0",
"devDependencies": {
"@tsconfig/node22": "catalog:",
"@types/bun": "catalog:",
@@ -325,7 +325,7 @@
},
"packages/kilo-indexing": {
"name": "@kilocode/kilo-indexing",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"@aws-sdk/client-bedrock-runtime": "3.1005.0",
"@aws-sdk/credential-provider-ini": "3.972.31",
@@ -361,7 +361,7 @@
},
"packages/kilo-memory": {
"name": "@kilocode/kilo-memory",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"effect": "catalog:",
"zod": "catalog:",
@@ -375,7 +375,7 @@
},
"packages/kilo-sandbox": {
"name": "@kilocode/sandbox",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"@anthropic-ai/sandbox-runtime": "catalog:",
"effect": "catalog:",
@@ -390,7 +390,7 @@
},
"packages/kilo-telemetry": {
"name": "@kilocode/kilo-telemetry",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"@kilocode/kilo-gateway": "workspace:*",
"posthog-node": "4.4.0",
@@ -404,7 +404,7 @@
},
"packages/kilo-ui": {
"name": "@kilocode/kilo-ui",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"@kilocode/sdk": "workspace:*",
"@kobalte/core": "0.13.11",
@@ -442,7 +442,7 @@
},
"packages/kilo-vscode": {
"name": "kilo-code",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"@anthropic-ai/sdk": "^0.39.0",
"@kilocode/kilo-gateway": "workspace:*",
@@ -461,7 +461,6 @@
"@xterm/addon-fit": "0.11.0",
"@xterm/addon-unicode-graphemes": "0.4.0",
"@xterm/addon-web-links": "0.12.0",
"@xterm/addon-webgl": "0.19.0",
"@xterm/xterm": "6.0.0",
"diff": "8.0.4",
"fastest-levenshtein": "^1.0.16",
@@ -516,7 +515,7 @@
},
"packages/kilo-web-ui": {
"name": "@kilocode/kilo-web-ui",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"@kilocode/kilo-ui": "workspace:*",
"@kobalte/core": "catalog:",
@@ -533,7 +532,7 @@
},
"packages/llm": {
"name": "@opencode-ai/llm",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"@opencode-ai/schema": "workspace:*",
"@smithy/eventstream-codec": "4.2.14",
@@ -552,7 +551,7 @@
},
"packages/opencode": {
"name": "@kilocode/cli",
"version": "7.4.23",
"version": "7.5.0",
"bin": {
"kilo": "./bin/kilo",
"kilocode": "./bin/kilo",
@@ -720,7 +719,7 @@
},
"packages/plugin": {
"name": "@kilocode/plugin",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"@ai-sdk/provider": "3.0.8",
"@kilocode/sdk": "workspace:*",
@@ -749,7 +748,7 @@
},
"packages/plugin-atomic-chat": {
"name": "@kilocode/plugin-atomic-chat",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"@kilocode/plugin": "workspace:*",
},
@@ -763,7 +762,7 @@
},
"packages/protocol": {
"name": "@opencode-ai/protocol",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"@opencode-ai/schema": "workspace:*",
"effect": "catalog:",
@@ -776,7 +775,7 @@
},
"packages/schema": {
"name": "@opencode-ai/schema",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"effect": "catalog:",
},
@@ -788,7 +787,7 @@
},
"packages/script": {
"name": "@opencode-ai/script",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"semver": "^7.6.3",
},
@@ -799,7 +798,7 @@
},
"packages/sdk-next": {
"name": "@opencode-ai/sdk-next",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"@opencode-ai/client": "workspace:*",
"@opencode-ai/core": "workspace:*",
@@ -814,7 +813,7 @@
},
"packages/sdk/js": {
"name": "@kilocode/sdk",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"cross-spawn": "catalog:",
},
@@ -829,7 +828,7 @@
},
"packages/server": {
"name": "@opencode-ai/server",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"@opencode-ai/core": "workspace:*",
"@opencode-ai/protocol": "workspace:*",
@@ -844,7 +843,7 @@
},
"packages/session-ui": {
"name": "@opencode-ai/session-ui",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"@kilocode/sdk": "workspace:*",
"@kobalte/core": "catalog:",
@@ -861,7 +860,7 @@
"@solidjs/meta": "catalog:",
"@solidjs/router": "catalog:",
"diff": "catalog:",
"dompurify": "3.3.1",
"dompurify": "3.4.13",
"fuzzysort": "catalog:",
"katex": "0.16.27",
"luxon": "catalog:",
@@ -889,7 +888,7 @@
},
"packages/storybook": {
"name": "@opencode-ai/storybook",
"version": "7.4.23",
"version": "7.5.0",
"devDependencies": {
"@opencode-ai/session-ui": "workspace:*",
"@opencode-ai/ui": "workspace:*",
@@ -914,7 +913,7 @@
},
"packages/tui": {
"name": "@opencode-ai/tui",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"@kilocode/plugin": "workspace:*",
"@kilocode/sdk": "workspace:*",
@@ -940,7 +939,7 @@
},
"packages/ui": {
"name": "@opencode-ai/ui",
"version": "7.4.23",
"version": "7.5.0",
"dependencies": {
"@kilocode/sdk": "workspace:*",
"@kobalte/core": "catalog:",
@@ -956,14 +955,14 @@
"@solidjs/router": "catalog:",
"@typescript/native-preview": "catalog:",
"diff": "catalog:",
"dompurify": "3.4.2",
"dompurify": "3.4.13",
"fuzzysort": "catalog:",
"katex": "0.16.27",
"luxon": "catalog:",
"marked": "catalog:",
"marked-katex-extension": "5.1.6",
"marked-shiki": "catalog:",
"mermaid": "11.15.0",
"mermaid": "11.17.2",
"morphdom": "2.7.8",
"motion": "12.34.5",
"motion-dom": "12.34.3",
@@ -1034,7 +1033,7 @@
"@xmldom/xmldom": ">=0.8.12",
"defu": "6.1.6",
"diff": "8.0.4",
"dompurify": "3.4.2",
"dompurify": "3.4.13",
"effect": "catalog:",
"fastify": ">=5.8.3",
"happy-dom": ">=20.8.9",
@@ -1073,7 +1072,7 @@
"@tanstack/solid-virtual": "3.13.32",
"@tsconfig/bun": "1.0.9",
"@tsconfig/node22": "22.0.2",
"@types/bun": "1.3.14",
"@types/bun": "1.4.0",
"@types/cross-spawn": "6.0.6",
"@types/luxon": "3.7.1",
"@types/node": "24.12.4",
@@ -1082,7 +1081,7 @@
"ai": "6.0.235",
"cross-spawn": "7.0.6",
"diff": "8.0.4",
"dompurify": "3.4.2",
"dompurify": "3.4.13",
"drizzle-kit": "1.0.0-rc.2",
"drizzle-orm": "1.0.0-rc.2",
"effect": "4.0.0-beta.83",
@@ -1776,7 +1775,7 @@
"@mdx-js/react": ["@mdx-js/react@3.1.1", "", { "dependencies": { "@types/mdx": "^2.0.0" }, "peerDependencies": { "@types/react": ">=16", "react": ">=16" } }, "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw=="],
"@mermaid-js/parser": ["@mermaid-js/parser@1.2.0", "", { "dependencies": { "@chevrotain/types": "~11.1.2" } }, "sha512-oYPyv8A4As1yH5Bx+04iQEQxXuIQDe0GKCNSRgao6z8AM9jixXIfP0vsppRLvGf+nKIOb9/LdpWA4YuJiVvESA=="],
"@mermaid-js/parser": ["@mermaid-js/parser@1.2.1", "", { "dependencies": { "@chevrotain/types": "~11.1.2" } }, "sha512-n12NohV3mrUyUL2o93IgG/ifeW9FTyeJn3zDxkhwa8MJ9Fxg3HQMlA3RiGmD/3UnJvheztkjjQAjA2T4LmUcpw=="],
"@mixmark-io/domino": ["@mixmark-io/domino@2.2.0", "", {}, "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw=="],
@@ -2540,7 +2539,7 @@
"@types/babel__traverse": ["@types/babel__traverse@7.28.0", "", { "dependencies": { "@babel/types": "^7.28.2" } }, "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q=="],
"@types/bun": ["@types/bun@1.3.14", "", { "dependencies": { "bun-types": "1.3.14" } }, "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw=="],
"@types/bun": ["@types/bun@1.4.0", "", { "dependencies": { "bun-types": "1.4.0" } }, "sha512-K+lZULY23vRgK/CfTjFIV+tyifaNdSMlPh9j+6mQ/cLfpOznLyAuzgV/JQysyECpkBQLVMSyvjlr2fBUSA9wFQ=="],
"@types/cacache": ["@types/cacache@20.0.1", "", { "dependencies": { "@types/node": "*", "minipass": "*" } }, "sha512-QlKW3AFoFr/hvPHwFHMIVUH/ZCYeetBNou3PCmxu5LaNDvrtBlPJtIA6uhmU9JRt9oxj7IYoqoLcpxtzpPiTcw=="],
@@ -2798,8 +2797,6 @@
"@xterm/addon-web-links": ["@xterm/addon-web-links@0.12.0", "", {}, "sha512-4Smom3RPyVp7ZMYOYDoC/9eGJJJqYhnPLGGqJ6wOBfB8VxPViJNSKdgRYb8NpaM6YSelEKbA2SStD7lGyqaobw=="],
"@xterm/addon-webgl": ["@xterm/addon-webgl@0.19.0", "", {}, "sha512-b3fMOsyLVuCeNJWxolACEUED0vm7qC0cy4wRvf3oURSzDTYVQiGPhTnhWZwIHdvC48Y+oLhvYXnY4XDXPoJo6A=="],
"@xterm/xterm": ["@xterm/xterm@6.0.0", "", {}, "sha512-TQwDdQGtwwDt+2cgKDLn0IRaSxYu1tSUjgKarSDkUM0ZNiSRXFpjxEsvc/Zgc5kq5omJ+V0a8/kIM2WD3sMOYg=="],
"@xyflow/react": ["@xyflow/react@12.10.2", "", { "dependencies": { "@xyflow/system": "0.0.76", "classcat": "^5.0.3", "zustand": "^4.4.0" }, "peerDependencies": { "react": ">=17", "react-dom": ">=17" } }, "sha512-CgIi6HwlcHXwlkTpr0fxLv/0sRVNZ8IdwKLzzeCscaYBwpvfcH1QFOCeaTCuEn1FQEs/B8CjnTSjhs8udgmBgQ=="],
@@ -2978,7 +2975,7 @@
"bun-pty": ["bun-pty@0.4.8", "", {}, "sha512-rO70Mrbr13+jxHHHu2YBkk2pNqrJE5cJn29WE++PUr+GFA0hq/VgtQPZANJ8dJo6d7XImvBk37Innt8GM7O28w=="],
"bun-types": ["bun-types@1.3.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="],
"bun-types": ["bun-types@1.4.0", "", { "dependencies": { "@types/node": "*" } }, "sha512-iIKw23BspnQQYd3prITOBxeUsxBHnwzX6YJfGMuNOZzeNcMmVqzIIVGRm1l69ogaPQmb4wB6BN8mA5bE9YuC5Q=="],
"bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="],
@@ -3280,7 +3277,7 @@
"domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="],
"dompurify": ["dompurify@3.4.2", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-lHeS9SA/IKeIFFyYciHBr2n0v1VMPlSj843HdLOwjb2OxNwdq9Xykxqhk+FE42MzAdHvInbAolSE4mhahPpjXA=="],
"dompurify": ["dompurify@3.4.13", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-2vmYIoqjze2d+kakP8S/nS5shfsl587kzwEjcGlTdiksUVgFHnFCsLYDVj/JNqJVOQZGSYBTmuycv0PodwmnMQ=="],
"domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="],
@@ -3432,6 +3429,8 @@
"fast-xml-parser": ["fast-xml-parser@5.10.1", "", { "dependencies": { "@nodable/entities": "^3.0.0", "fast-xml-builder": "^1.2.0", "is-unsafe": "^2.0.0", "path-expression-matcher": "^1.6.2", "strnum": "^2.4.1", "xml-naming": "^0.3.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-IEMIf7298kXuZSRFoGfMYrl7is8LpavODgbNz1cwIudv7KwVFnuU+UsMporfq6PD6aXSlawZlARiA3UywCTfMw=="],
"fastdom": ["fastdom@1.0.12", "", { "dependencies": { "strictdom": "^1.0.1" } }, "sha512-LB+xjSTEbjHE1cWsxu+tN2Xqr1kpi+V9aADI7sVM5ZMaXyYGPHULQMzpJMYqOTULK/73pUkWVzzObFRBkPr+hg=="],
"fastest-levenshtein": ["fastest-levenshtein@1.0.16", "", {}, "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg=="],
"fastify": ["fastify@5.11.2", "", { "dependencies": { "@fastify/ajv-compiler": "^4.0.5", "@fastify/error": "^4.0.0", "@fastify/fast-json-stringify-compiler": "^5.0.0", "@fastify/proxy-addr": "^5.0.0", "abstract-logging": "^2.0.1", "avvio": "^9.0.0", "fast-json-stringify": "^7.0.0", "find-my-way": "^9.6.0", "light-my-request": "^6.0.0", "pino": "^9.14.0 || ^10.1.0", "process-warning": "^5.0.0", "rfdc": "^1.3.1", "secure-json-parse": "^4.0.0", "semver": "^7.6.0", "toad-cache": "^3.7.0" } }, "sha512-i/eJG7nXR9OkbFgoX4jFiPOHoRq0rXqDACVAXELh5Fdg6BFBErIVZ8MyibGCwup9Go1pYrxZJ0ogIub8vVdEcQ=="],
@@ -3926,7 +3925,7 @@
"merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="],
"mermaid": ["mermaid@11.15.0", "", { "dependencies": { "@braintree/sanitize-url": "^7.1.1", "@iconify/utils": "^3.0.2", "@mermaid-js/parser": "^1.1.1", "@types/d3": "^7.4.3", "@upsetjs/venn.js": "^2.0.0", "cytoscape": "^3.33.1", "cytoscape-cose-bilkent": "^4.1.0", "cytoscape-fcose": "^2.2.0", "d3": "^7.9.0", "d3-sankey": "^0.12.3", "dagre-d3-es": "7.0.14", "dayjs": "^1.11.19", "dompurify": "^3.3.1", "es-toolkit": "^1.45.1", "katex": "^0.16.25", "khroma": "^2.1.0", "marked": "^16.3.0", "roughjs": "^4.6.6", "stylis": "^4.3.6", "ts-dedent": "^2.2.0", "uuid": "^11.1.0 || ^12 || ^13 || ^14.0.0" } }, "sha512-pTMbcf3rWdtLiYGpmoTjHEpeY8seiy6sR+9nD7LOs8KfUbHE4lOUAprTRqRAcWSQ6MQpdX+YEsxShtGsINtPtw=="],
"mermaid": ["mermaid@11.17.2", "", { "dependencies": { "@braintree/sanitize-url": "^7.1.2", "@iconify/utils": "^3.0.2", "@mermaid-js/parser": "^1.2.1", "@types/d3": "^7.4.3", "@upsetjs/venn.js": "^2.0.0", "cytoscape": "^3.34.0", "cytoscape-cose-bilkent": "^4.1.0", "cytoscape-fcose": "^2.2.0", "d3": "^7.9.0", "d3-sankey": "^0.12.3", "dagre-d3-es": "7.0.14", "dayjs": "^1.11.21", "dompurify": "^3.3.3", "es-toolkit": "^1.45.1", "fastdom": "1.0.12", "katex": "^0.16.47", "khroma": "^2.1.0", "marked": "^16.3.0", "roughjs": "^4.6.6", "stylis": "^4.3.6", "ts-dedent": "^2.2.0", "uuid": "^11.1.0 || ^12 || ^13 || ^14.0.0" } }, "sha512-V6K3C8EBdEsPFZXSKMJe6ppQOENxuHARr9GvHX4hh47lAbhMRD9qf4oEK7LoaRQxULMa80/qt5gHO73aCleBBg=="],
"methods": ["methods@1.1.2", "", {}, "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="],
@@ -4558,6 +4557,8 @@
"streamx": ["streamx@2.28.0", "", { "dependencies": { "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" } }, "sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw=="],
"strictdom": ["strictdom@1.0.1", "", {}, "sha512-cEmp9QeXXRmjj/rVp9oyiqcvyocWab/HaoN4+bwFeZ7QzykJD6L3yD4v12K1x0tHpqRqVpJevN3gW7kyM39Bqg=="],
"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=="],
"string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
@@ -5502,6 +5503,8 @@
"matcher/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="],
"mermaid/katex": ["katex@0.16.47", "", { "dependencies": { "commander": "^8.3.0" }, "bin": { "katex": "cli.js" } }, "sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg=="],
"mermaid/marked": ["marked@16.4.2", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA=="],
"minipass-flush/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="],
@@ -6094,6 +6097,8 @@
"log-symbols/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="],
"mermaid/katex/commander": ["commander@8.3.0", "", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="],
"mocha/glob/jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="],
"mocha/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="],
+1 -1
View File
@@ -2,7 +2,7 @@
exact = true
# Keep Kilo's longer supply-chain quarantine while allowing packages that must track coordinated releases.
minimumReleaseAge = 410520 # seconds (~4.75 days / ~114 hours)
minimumReleaseAgeExcludes = ["mermaid", "@mermaid-js/parser", "@ai-sdk/amazon-bedrock", "@ai-sdk/anthropic", "@opentui/core", "@opentui/core-darwin-arm64", "@opentui/core-darwin-x64", "@opentui/core-linux-arm64", "@opentui/core-linux-arm64-musl", "@opentui/core-linux-x64", "@opentui/core-linux-x64-musl", "@opentui/core-win32-arm64", "@opentui/core-win32-x64", "@opentui/keymap", "@opentui/solid", "opentui-spinner", "gitlab-ai-provider", "opencode-gitlab-auth", "@ff-labs/fff-node", "@ff-labs/fff-bun", "@ff-labs/fff-bin-darwin-arm64", "@ff-labs/fff-bin-darwin-x64", "@ff-labs/fff-bin-linux-arm64-gnu", "@ff-labs/fff-bin-linux-arm64-musl", "@ff-labs/fff-bin-linux-x64-gnu", "@ff-labs/fff-bin-linux-x64-musl", "@ff-labs/fff-bin-win32-arm64", "@ff-labs/fff-bin-win32-x64", "@pierre/diffs", "@pierre/theming", "app-builder-lib", "dmg-builder", "electron-builder", "electron-publish"]
minimumReleaseAgeExcludes = ["mermaid", "@mermaid-js/parser", "@ai-sdk/amazon-bedrock", "@ai-sdk/anthropic", "@opentui/core", "@opentui/core-darwin-arm64", "@opentui/core-darwin-x64", "@opentui/core-linux-arm64", "@opentui/core-linux-arm64-musl", "@opentui/core-linux-x64", "@opentui/core-linux-x64-musl", "@opentui/core-win32-arm64", "@opentui/core-win32-x64", "@opentui/keymap", "@opentui/solid", "opentui-spinner", "gitlab-ai-provider", "opencode-gitlab-auth", "@ff-labs/fff-node", "@ff-labs/fff-bun", "@ff-labs/fff-bin-darwin-arm64", "@ff-labs/fff-bin-darwin-x64", "@ff-labs/fff-bin-linux-arm64-gnu", "@ff-labs/fff-bin-linux-arm64-musl", "@ff-labs/fff-bin-linux-x64-gnu", "@ff-labs/fff-bin-linux-x64-musl", "@ff-labs/fff-bin-win32-arm64", "@ff-labs/fff-bin-win32-x64", "@pierre/diffs", "@pierre/theming", "app-builder-lib", "dmg-builder", "electron-builder", "electron-publish", "@types/bun", "bun-types"] # kilocode_change
[test]
root = "./do-not-run-tests-from-root"
+4 -4
View File
@@ -14,19 +14,19 @@ let
sources = {
"aarch64-linux" = {
name = "bun-linux-aarch64";
hash = "sha256-on/7Y6gxA3WDbg1vZorhf6jY0YuIw3yCHGUzGXOhmjs=";
hash = "sha256-SxozLuhhmD65O8/m93D/+U4+MbLDiL2uo8jtNeWO7Q4=";
};
"x86_64-linux" = {
name = "bun-linux-x64";
hash = "sha256-lR7iruhV8IWVruxiJSJqKY0/6oOj3NZGXAnLzN9+hI8=";
hash = "sha256-LQP7X7g6yLVnrKCigbLOGhoZ1Ij1bClo2Iw/Jekv5FI=";
};
"aarch64-darwin" = {
name = "bun-darwin-aarch64";
hash = "sha256-2LliIYKK1vl6x6wKt+lYcjQa92MAHogD6CZ2UsJlJiA=";
hash = "sha256-xmnpf2Fk4cluBwF0jbmN+ndJKQjL2DlMdVcTSnNd44E=";
};
"x86_64-darwin" = {
name = "bun-darwin-x64";
hash = "sha256-QYPfM3RiPlurMVxUfPoJdFM81FfYa3O2OfeoeXTNZjM=";
hash = "sha256-HQIRuPHcmRGCNEaHrRXnLuhvFUhFpff6R3mUzTQd2bA=";
};
};
source =
+5 -5
View File
@@ -4,7 +4,7 @@
"description": "AI-powered development tool",
"private": true,
"type": "module",
"packageManager": "bun@1.3.14",
"packageManager": "bun@1.4.0",
"scripts": {
"dev": "KILO_CLIENT=cli bun run --cwd packages/opencode --conditions=node src/index.ts",
"dev:stats": "bun sst shell --stage=production -- bun run --cwd packages/stats/app dev",
@@ -35,7 +35,7 @@
"@effect/platform-node": "4.0.0-beta.83",
"@anthropic-ai/sandbox-runtime": "0.0.63",
"@npmcli/arborist": "9.4.0",
"@types/bun": "1.3.14",
"@types/bun": "1.4.0",
"@types/cross-spawn": "6.0.6",
"@octokit/rest": "22.0.0",
"@opentui/core": "0.4.5",
@@ -53,7 +53,7 @@
"@solid-primitives/storage": "4.3.3",
"@tailwindcss/vite": "4.1.11",
"diff": "8.0.4",
"dompurify": "3.4.2",
"dompurify": "3.4.13",
"drizzle-kit": "1.0.0-rc.2",
"drizzle-orm": "1.0.0-rc.2",
"effect": "4.0.0-beta.83",
@@ -152,7 +152,7 @@
"fastify": ">=5.8.3",
"vite": "7.3.5",
"diff": "8.0.4",
"dompurify": "3.4.2",
"dompurify": "3.4.13",
"happy-dom": ">=20.8.9",
"@opentui/core": "catalog:",
"@opentui/solid": "catalog:",
@@ -180,6 +180,6 @@
"solid-js@1.9.12": "patches/solid-js@1.9.12.patch",
"@ai-sdk/openai-compatible@2.0.48": "patches/@ai-sdk%2Fopenai-compatible@2.0.48.patch"
},
"version": "7.4.23",
"version": "7.5.0",
"peerDependencies": {}
}
+1 -1
View File
@@ -38,5 +38,5 @@
"@typescript/native-preview": "catalog:",
"effect": "catalog:"
},
"version": "7.4.23"
"version": "7.5.0"
}
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode-ai/codemode",
"version": "7.4.23",
"version": "7.5.0",
"description": "Effect-native confined code execution over schema-described tools",
"private": true,
"type": "module",
+1 -1
View File
@@ -6,7 +6,7 @@ FROM ${REGISTRY}/build/base:24.04
SHELL ["/bin/bash", "-lc"]
ARG NODE_VERSION=24.4.0
ARG BUN_VERSION=1.3.14
ARG BUN_VERSION=1.4.0
ENV BUN_INSTALL=/opt/bun
ENV PATH=/opt/bun/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json.schemastore.org/package.json",
"version": "7.4.23",
"version": "7.5.0",
"name": "@opencode-ai/core",
"type": "module",
"license": "MIT",
+1 -1
View File
@@ -35,7 +35,7 @@ function wrapSSE(res: Response, ms: number, ctl: AbortController) {
const id = setTimeout(() => {
const err = new Error("SSE read timed out")
ctl.abort(err)
void reader.cancel(err)
void reader.cancel(err).catch(() => undefined) // kilocode_change - handle Bun 1.4 cancellation rejection
reject(err)
}, ms)
+53 -2
View File
@@ -4,6 +4,56 @@ import { spawn } from "#pty"
const TIMEOUT = 15_000
async function render() {
const proc = spawn(process.execPath, ["--pure"], {
name: "xterm-256color",
cwd: process.cwd(),
env: {
...process.env,
TERM: "xterm-256color",
KILO_TERMINAL: "1",
KILO_NO_DAEMON: "1",
KILO_DISABLE_AUTOUPDATE: "1",
KILO_DISABLE_MODELS_FETCH: "1",
KILO_DISABLE_PROJECT_CONFIG: "1",
KILO_DISABLE_DEFAULT_PLUGINS: "1",
KILO_DISABLE_TERMINAL_TITLE: "0",
KILO_CONFIG_CONTENT: "{}",
KILO_AUTH_CONTENT: "{}",
} as Record<string, string>,
cols: 100,
rows: 40,
})
const state = { output: "", exited: false }
const ready = Promise.withResolvers<void>()
const data = proc.onData((chunk) => {
state.output = (state.output + chunk).slice(-20_000)
if (state.output.includes("Ask anything...")) ready.resolve()
})
const exit = proc.onExit((event) => {
state.exited = true
ready.reject(new Error(`TUI exited before rendering (code ${event.exitCode}): ${JSON.stringify(state.output)}`))
})
const timeout = AbortSignal.timeout(TIMEOUT)
try {
await Promise.race([
ready.promise,
new Promise<never>((_, reject) =>
timeout.addEventListener(
"abort",
() => reject(new Error(`TUI produced no rendered frame within ${TIMEOUT}ms: ${JSON.stringify(state.output)}`)),
{ once: true },
),
),
])
} finally {
data.dispose()
exit.dispose()
if (!state.exited) await KiloPtyTermination.terminate(proc)
}
}
export async function smoke() {
const proc = spawn(Shell.preferred(), [], {
name: "xterm-256color",
@@ -17,8 +67,7 @@ export async function smoke() {
const exited = Promise.withResolvers<number>()
const data = proc.onData((chunk) => {
state.output += chunk
const lines = state.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "").split(/\r?\n/)
if (lines.some((line) => line.trim() === "KILO_PTY_READY")) output.resolve()
if (/(?:^|[\r\n])KILO_PTY_READY(?:\r?\n|$)/.test(state.output)) output.resolve()
})
const exit = proc.onExit((event) => {
state.exited = true
@@ -67,6 +116,8 @@ export async function smoke() {
} finally {
if (!stopped) active.kill()
}
await render()
}
export * as PtySmoke from "./smoke"
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json.schemastore.org/package.json",
"version": "7.4.23",
"version": "7.5.0",
"name": "@opencode-ai/effect-drizzle-sqlite",
"type": "module",
"license": "MIT",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json.schemastore.org/package.json",
"version": "7.4.23",
"version": "7.5.0",
"name": "@opencode-ai/effect-sqlite-node",
"type": "module",
"license": "MIT",
+6 -6
View File
@@ -1,7 +1,7 @@
id = "kilo"
name = "Kilo"
description = "The open source coding agent."
version = "7.4.23"
version = "7.5.0"
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.4.23/opencode-darwin-arm64.zip"
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.5.0/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.4.23/opencode-darwin-x64.zip"
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.5.0/opencode-darwin-x64.zip"
cmd = "./opencode"
args = ["acp"]
[agent_servers.opencode.targets.linux-aarch64]
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.4.23/opencode-linux-arm64.tar.gz"
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.5.0/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.4.23/opencode-linux-x64.tar.gz"
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.5.0/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.4.23/opencode-windows-x64.zip"
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v7.5.0/opencode-windows-x64.zip"
cmd = "./opencode.exe"
args = ["acp"]
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json.schemastore.org/package.json",
"version": "7.4.23",
"version": "7.5.0",
"name": "@opencode-ai/http-recorder",
"description": "Record and replay Effect HTTP client traffic with deterministic cassettes",
"type": "module",
+1 -1
View File
@@ -20,5 +20,5 @@
"@types/bun": "catalog:",
"@typescript/native-preview": "catalog:"
},
"version": "7.4.23"
"version": "7.5.0"
}
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@kilocode/kilo-console",
"version": "7.4.23",
"version": "7.5.0",
"private": true,
"type": "module",
"scripts": {
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@kilocode/kilo-docs",
"version": "7.4.23",
"version": "7.5.0",
"private": true,
"scripts": {
"dev": "next dev --webpack --port 3002",
@@ -19,7 +19,7 @@
"@vscode/codicons": "^0.0.44",
"@xyflow/react": "12.10.2",
"js-yaml": "^4.1.0",
"mermaid": "11.15.0",
"mermaid": "11.17.2",
"next": "^16.1.5",
"posthog-js": "^1.335.3",
"prismjs": "^1.30.0",
@@ -214,7 +214,7 @@ The tool supports two modes:
| `worktree` | Creates one Agent Manager git worktree and session per task |
| `local` | Creates Agent Manager sessions in the current workspace without git worktree isolation |
Each request can include 1-20 tasks. Each task must include at least one of `prompt`, `name`, or `branchName`. Prompted tasks inherit the model and reasoning variant used by the chat turn that starts them. A task can override that selection with a `model` (by name, e.g. `Claude Opus 4.1`) when you explicitly request a different model, or with one of the current model's reasoning `variant` values when you request a different variant. Agent Manager resolves the provider for a model override, preferring the provider used by the current turn and falling back to the Kilo Gateway; a qualified `provider/model` ID is also accepted to force a specific provider. Prepared sessions without an initial prompt use the normal model defaults. Use `versions: true` only when the tasks are alternate versions of the same work to compare; otherwise, multiple tasks start as independent sessions.
Each request can include 1-20 tasks. Each task must include at least one of `prompt`, `name`, or `branchName`. Prompted tasks inherit the model and reasoning variant used by the chat turn that starts them. A task can override that selection with a `model` (by name, e.g. `Claude Opus 4.1`) when you explicitly request a different model, or with one of the current model's reasoning `variant` values when you request a different variant. Add `provider` beside `model` to force a model-name match to one of the listed provider IDs. Agent Manager resolves the provider for a model override when `provider` is omitted, preferring the provider used by the current turn and falling back to the Kilo Gateway; a qualified `provider/model` ID is also accepted. Prepared sessions without an initial prompt use the normal model defaults. Use `versions: true` only when the tasks are alternate versions of the same work to compare; otherwise, multiple tasks start as independent sessions.
The companion `agent_manager_models` tool searches models and their supported reasoning variants on demand. Results are grouped by model name (with the offering providers listed for reference) and limited to 20 per call, so the full catalog is never added to the conversation context.
@@ -16,7 +16,7 @@ This document will help you set up your development environment and understand h
Before you begin, make sure you have the following installed:
1. **Git** - For version control
2. **Bun 1.3.14+** - Required for installing dependencies and running scripts
2. **Bun 1.4.0+** - Required for installing dependencies and running scripts
3. **Visual Studio Code** - Our recommended IDE for development
4. **Java 21** - Required only when running JetBrains plugin checks or repo-level checks that include `@kilocode/kilo-jetbrains`
+22 -9
View File
@@ -30,8 +30,8 @@ importers:
specifier: ^4.1.0
version: 4.3.1
mermaid:
specifier: 11.15.0
version: 11.15.0
specifier: 11.17.2
version: 11.17.2
next:
specifier: ^16.1.5
version: 16.3.0(@types/node@25.9.5)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
@@ -303,8 +303,8 @@ packages:
next: '*'
react: '*'
'@mermaid-js/parser@1.2.0':
resolution: {integrity: sha512-oYPyv8A4As1yH5Bx+04iQEQxXuIQDe0GKCNSRgao6z8AM9jixXIfP0vsppRLvGf+nKIOb9/LdpWA4YuJiVvESA==}
'@mermaid-js/parser@1.2.1':
resolution: {integrity: sha512-n12NohV3mrUyUL2o93IgG/ifeW9FTyeJn3zDxkhwa8MJ9Fxg3HQMlA3RiGmD/3UnJvheztkjjQAjA2T4LmUcpw==}
'@next/env@16.3.0':
resolution: {integrity: sha512-o9r1S0BNiNreHP9Vs+Qnqd9kviDkJh8xIACY7UFZSmiGbbQRzPBBosvHzAU4TULHOIuOj/18RSsyz2qrREmIFw==}
@@ -989,6 +989,9 @@ packages:
resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==}
engines: {node: '>=12.0.0'}
fastdom@1.0.12:
resolution: {integrity: sha512-LB+xjSTEbjHE1cWsxu+tN2Xqr1kpi+V9aADI7sVM5ZMaXyYGPHULQMzpJMYqOTULK/73pUkWVzzObFRBkPr+hg==}
fdir@6.5.0:
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
engines: {node: '>=12.0.0'}
@@ -1209,8 +1212,8 @@ packages:
engines: {node: '>= 20'}
hasBin: true
mermaid@11.15.0:
resolution: {integrity: sha512-pTMbcf3rWdtLiYGpmoTjHEpeY8seiy6sR+9nD7LOs8KfUbHE4lOUAprTRqRAcWSQ6MQpdX+YEsxShtGsINtPtw==}
mermaid@11.17.2:
resolution: {integrity: sha512-V6K3C8EBdEsPFZXSKMJe6ppQOENxuHARr9GvHX4hh47lAbhMRD9qf4oEK7LoaRQxULMa80/qt5gHO73aCleBBg==}
nanoid@3.3.17:
resolution: {integrity: sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==}
@@ -1353,6 +1356,9 @@ packages:
std-env@4.2.0:
resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==}
strictdom@1.0.1:
resolution: {integrity: sha512-cEmp9QeXXRmjj/rVp9oyiqcvyocWab/HaoN4+bwFeZ7QzykJD6L3yD4v12K1x0tHpqRqVpJevN3gW7kyM39Bqg==}
styled-jsx@5.1.6:
resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==}
engines: {node: '>= 12.0.0'}
@@ -1695,7 +1701,7 @@ snapshots:
next: 16.3.0(@types/node@25.9.5)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
react: 19.2.8
'@mermaid-js/parser@1.2.0':
'@mermaid-js/parser@1.2.1':
dependencies:
'@chevrotain/types': 11.1.2
@@ -2347,6 +2353,10 @@ snapshots:
expect-type@1.4.0: {}
fastdom@1.0.12:
dependencies:
strictdom: 1.0.1
fdir@6.5.0(picomatch@4.0.5):
optionalDependencies:
picomatch: 4.0.5
@@ -2494,11 +2504,11 @@ snapshots:
marked@16.4.2: {}
mermaid@11.15.0:
mermaid@11.17.2:
dependencies:
'@braintree/sanitize-url': 7.1.2
'@iconify/utils': 3.1.4
'@mermaid-js/parser': 1.2.0
'@mermaid-js/parser': 1.2.1
'@types/d3': 7.4.3
'@upsetjs/venn.js': 2.0.0
cytoscape: 3.34.0
@@ -2510,6 +2520,7 @@ snapshots:
dayjs: 1.11.21
dompurify: 3.4.13
es-toolkit: 1.50.0
fastdom: 1.0.12
katex: 0.16.47
khroma: 2.1.0
marked: 16.4.2
@@ -2688,6 +2699,8 @@ snapshots:
std-env@4.2.0: {}
strictdom@1.0.1: {}
styled-jsx@5.1.6(react@19.2.8):
dependencies:
client-only: 0.0.1
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:00088eaafbe9b65c5baf0eb1ce185a95da3e8492bf3c77a940f20d329ff93046
size 39409
oid sha256:490320ae56acbbc5ea7283d72fb8dd4b93a28ce3f1ec9678ce8ff3ea1bab953e
size 34649
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:bbe086983757d02e90c26f3798a6a8e3883ac57e009bebdde0852836684c7595
size 32553
oid sha256:208d1aed2d0a3a3b5397d1a11155871f6bd8c01ee8772b81fb45875c36d43a17
size 32340
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d866d08bc0d18ee2abc4c2bd246f2a958107ca1cb1771cb61e37aa2597504ed8
size 28266
oid sha256:e50f52681c7c255f4f65bea146dd4adbbb8a5d3a0027777406e42572c58378f4
size 29904
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c2c8b3e4ded1bde02fe2c72764d16c4e056a91e9fa935c9925b8095bfaf9a748
size 27272
oid sha256:7403709acf8593873394ba15f23a50b56b2008e7d99440df503089a3f21b2fe6
size 30279
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:fbdc00f26ece2fc49d25c26b128b9f69fa562c2c0b2d54c4fd88f8c476145046
size 25076
oid sha256:13eac6bc48399a603b5c339d392babe871dc049b41921a628b1b66b146d277d5
size 25120
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:efeff70e266d94ae5b40b05694eb2011c84d2da9e91eafe2dc01f775797e9135
size 19048
oid sha256:e304be0d46ff4090863282dd248bd48c868e80541e9aa4eceec028120ff9e309
size 19091
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@kilocode/kilo-gateway",
"version": "7.4.23",
"version": "7.5.0",
"type": "module",
"license": "MIT",
"description": "Unified Kilo Gateway package for OpenCode - authentication, provider, and API integration",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@kilocode/kilo-i18n",
"version": "7.4.23",
"version": "7.5.0",
"type": "module",
"license": "MIT",
"description": "Kilo-specific i18n translations and overrides",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@kilocode/kilo-indexing",
"version": "7.4.23",
"version": "7.5.0",
"type": "module",
"license": "MIT",
"description": "Standalone indexing engine and host helpers for Kilo Code",
+95
View File
@@ -4,6 +4,76 @@
### Minor Changes
- [#13239](https://github.com/Kilo-Org/kilocode/pull/13239) [`3b8b18f`](https://github.com/Kilo-Org/kilocode/commit/3b8b18ff33d2a51b620859e5bc644424ed6d5ae2) - Add an Advanced settings page with a Logging section to configure diagnostic log level and message previews, reveal the log in your file manager, and download the backend log in remote development.
- [#13242](https://github.com/Kilo-Org/kilocode/pull/13242) [`d9b7f7c`](https://github.com/Kilo-Org/kilocode/commit/d9b7f7c6bc45693ffbbbbfcb4cd732b827e42576) - Show proposed file changes in permission prompts before approval.
- [#13240](https://github.com/Kilo-Org/kilocode/pull/13240) [`6bd3e4b`](https://github.com/Kilo-Org/kilocode/commit/6bd3e4b2c00235467aa0698e9290989ce926bab2) - Support opening, editing, and deleting workflows from JetBrains settings.
- [#13315](https://github.com/Kilo-Org/kilocode/pull/13315) [`59d1ec8`](https://github.com/Kilo-Org/kilocode/commit/59d1ec8a22b8fc055c988db365ec89fd3aa66c43) - Reorder Agent Manager worktrees by dragging them in the JetBrains plugin.
- [#13255](https://github.com/Kilo-Org/kilocode/pull/13255) [`cbd4b1c`](https://github.com/Kilo-Org/kilocode/commit/cbd4b1cbf3ead7a5311bd673e8d03b18b7129392) - Open sub-agent task sessions in read-only editor tabs from JetBrains task cards.
### Patch Changes
- [#13315](https://github.com/Kilo-Org/kilocode/pull/13315) [`ac98f5c`](https://github.com/Kilo-Org/kilocode/commit/ac98f5c77460d9627ccc3e6b1a9bc09bfd327bb3) - Show compact Agent Manager activity icons for running and waiting sessions while keeping idle rows aligned with a smaller idle dot.
- [#13315](https://github.com/Kilo-Org/kilocode/pull/13315) [`98928ae`](https://github.com/Kilo-Org/kilocode/commit/98928aeed0c10cfe82ca2011bc49b437008bb62c) - Offer Move to Worktree in the chat toolbar whenever the repository has local changes, even before the chat has a session — the worktree gets your changes and starts its own session. New Worktree from the chat toolbar now opens its dialog first and only switches to Agents once you confirm, and the dialog opens narrower.
- [#13315](https://github.com/Kilo-Org/kilocode/pull/13315) [`e9f56d4`](https://github.com/Kilo-Org/kilocode/commit/e9f56d48afb1a9117f102ebfd680077012af1452) - Keep session header popups beside the chat by choosing the roomier left or right side and sizing them so IntelliJ does not flip them above or below.
- [#13315](https://github.com/Kilo-Org/kilocode/pull/13315) [`d24cedd`](https://github.com/Kilo-Org/kilocode/commit/d24cedd170353033b7886ed27359c378f0990df5) - Use regular PR title text and vertically center the PR badge in the JetBrains chat tool window.
- [#13315](https://github.com/Kilo-Org/kilocode/pull/13315) [`32573a0`](https://github.com/Kilo-Org/kilocode/commit/32573a0a1d94c4369ce5ee8a69b9e11c1cbf5e8d) - Show the chat New Worktree and Move to Worktree actions only while the session is idle, and keep the transcript pinned to the newest message when that row appears or disappears.
- [#13315](https://github.com/Kilo-Org/kilocode/pull/13315) [`f73f947`](https://github.com/Kilo-Org/kilocode/commit/f73f9474ec9ee893ac58fca0b65d55009d451daf) - Add standard horizontal padding to the empty chat recent sessions list.
- [#13315](https://github.com/Kilo-Org/kilocode/pull/13315) [`31b7297`](https://github.com/Kilo-Org/kilocode/commit/31b7297dd05264e4b665ad3d2248e11ecc9a8ae1) - Keep list descriptions muted while their row is selected, mute the worktree row icons to match the description text, and paint the running spinner in the neutral icon grey so it stays legible in light and dark themes.
- [#13315](https://github.com/Kilo-Org/kilocode/pull/13315) [`f60e8dc`](https://github.com/Kilo-Org/kilocode/commit/f60e8dc84165fc4bbdd13a04218265fdb13da545) - Keep settings, history, and session lists on the same row and scroll position when they refresh, and select the neighbouring row after a delete.
- [#13315](https://github.com/Kilo-Org/kilocode/pull/13315) [`07d2189`](https://github.com/Kilo-Org/kilocode/commit/07d2189d319c47e78e70ed428b96abe4fd33de18) - Keep Agent Manager worktree selection stable when reordering worktrees and switching tabs.
- [#13239](https://github.com/Kilo-Org/kilocode/pull/13239) [`f292625`](https://github.com/Kilo-Org/kilocode/commit/f292625b6d264040e1379b606336631f1ca93e2f) - Use `kilo.log` as the active JetBrains plugin diagnostic log, rotate old logs to `kilo.log.0` and `kilo.log.1`, and delete legacy `kilo-dev.log*` files when logging starts.
- [#13315](https://github.com/Kilo-Org/kilocode/pull/13315) [`082b38b`](https://github.com/Kilo-Org/kilocode/commit/082b38b2349aaf5b02f22dadf4bec2eff228c4c0) - Fix an IDE freeze when a chat session reports an error, which could hang the whole IDE while opening a worktree session editor.
- [#13315](https://github.com/Kilo-Org/kilocode/pull/13315) [`34a7eb3`](https://github.com/Kilo-Org/kilocode/commit/34a7eb34a1b9ea945a613ef0df1685676dc479a6) - Use the Kilo running spinner across session progress indicators.
- [#13287](https://github.com/Kilo-Org/kilocode/pull/13287) [`09a08fb`](https://github.com/Kilo-Org/kilocode/commit/09a08fbac6073f67abd1360be329f29cdf1218b5) - Keep the slash-command completion popup open while typing quickly and reopen it if it closes mid-token, so fast typing filters commands instead of dismissing the list. Refresh the popup when server commands finish loading, and return focus to the prompt after picking a model, agent, or reasoning option from a slash command.
- [#13242](https://github.com/Kilo-Org/kilocode/pull/13242) [`94c01f2`](https://github.com/Kilo-Org/kilocode/commit/94c01f28565fe7b17b956250fbbf0cb3165c9afd) - Show why and how each tool call was allowed. Expanded tool cards (edits, shell commands, and every other tool) now display a shield footer such as "Auto-approved by your global config", including the matched rule or agent and an outside-workspace note. A new "Show approval reason on tool cards" toggle at the bottom of Auto-Approve settings (on by default) controls the footer.
- [#13315](https://github.com/Kilo-Org/kilocode/pull/13315) [`2aee16b`](https://github.com/Kilo-Org/kilocode/commit/2aee16b2ebbf4d9c607840e29f83755fd444fd9f) - Show the JetBrains tool window Chat and Agents views as tabs with shorter labels.
- [#13423](https://github.com/Kilo-Org/kilocode/pull/13423) [`047c989`](https://github.com/Kilo-Org/kilocode/commit/047c9893a209aee6d0c0df98fbdf07325c69af6b) - Show worktree session titles in regular weight, keep the account switcher hidden when a new worktree starts with a prompt, add new worktrees at the top of the Agent Manager list, keep the running indicator on worktree rows when a stopped session is resumed, mark failed and waiting sessions on their worktree row and in session lists, keep the Agents tab notification dot up until every session that needs you is resolved, and keep session card popups inside the visible session view while pointing at their card.
- [#13423](https://github.com/Kilo-Org/kilocode/pull/13423) [`a5f62bc`](https://github.com/Kilo-Org/kilocode/commit/a5f62bc2dbfd5f857eaaab51003941c18c0a779a) - Keep the PR badge in the JetBrains Agent Manager worktree list clickable and aligned with the rest of the row.
- [#13315](https://github.com/Kilo-Org/kilocode/pull/13315) [`34a7eb3`](https://github.com/Kilo-Org/kilocode/commit/34a7eb34a1b9ea945a613ef0df1685676dc479a6) - Show branch icons on Agent Manager worktree rows again, and mark the current checkout with a local machine icon.
- [#13431](https://github.com/Kilo-Org/kilocode/pull/13431) [`2127b8b`](https://github.com/Kilo-Org/kilocode/commit/2127b8b4ebb379ab5734dcf989e4817423655f13) - Keep JetBrains Agent Manager worktrees in the main repository storage, prevent nested worktree deletion from removing child worktrees, and show a clear missing-folder error for deleted workspaces.
- [#13315](https://github.com/Kilo-Org/kilocode/pull/13315) [`d4f869d`](https://github.com/Kilo-Org/kilocode/commit/d4f869d971a20e1a254e7994de4d40093609b10f) - Scope chat session history to the worktree you have open, so a worktree no longer lists sessions from the main checkout or sibling worktrees, and show sessions started in another project frame in Agent Manager as they happen.
- [#13423](https://github.com/Kilo-Org/kilocode/pull/13423) [`80e8213`](https://github.com/Kilo-Org/kilocode/commit/80e82130cd3f40af5ae5977bec9245f5404fd4c7) - Let session overlays such as the connection banner take the pointer over from the transcript beneath them, so a covered card no longer stays hovered or keeps its popup open behind the overlay.
- [#13423](https://github.com/Kilo-Org/kilocode/pull/13423) [`e1e0f75`](https://github.com/Kilo-Org/kilocode/commit/e1e0f7538142b9c86e09d7af6e5c803acac37db3) - Render Agent Manager worktree list labels in normal weight with quieter idle icons, tint monochrome row icons to the selection foreground while leaving status icons colored, and clear a deleted session's question/error status from the session list, worktree list, and tab attention dot.
- [#13315](https://github.com/Kilo-Org/kilocode/pull/13315) [`0161c3a`](https://github.com/Kilo-Org/kilocode/commit/0161c3a4baf1c710e96dc60de58927f629c940c5) - Improve JetBrains Agent Manager session status badges, selection persistence, and PR badge theming.
- [#13217](https://github.com/Kilo-Org/kilocode/pull/13217) [`254acc9`](https://github.com/Kilo-Org/kilocode/commit/254acc92a4fdf782404e7fb807a0bbea5e7b3287) - Avoid showing JetBrains internal error popups when Kilo workspace data fails to load, and include HTTP status and response details in diagnostics.
- [#13315](https://github.com/Kilo-Org/kilocode/pull/13315) [`3e152b7`](https://github.com/Kilo-Org/kilocode/commit/3e152b75fd98ac2cf5f56ddbfa0b94b017b12e45) - Show the current branch first in Agent Manager and replace worktree activity tags with status icons. Running, question, and error activity now share one color between the row icon and the text badge, add an error state, and surface a notification dot on the Agents tab when a session needs attention.
- [#13315](https://github.com/Kilo-Org/kilocode/pull/13315) [`d94f2bf`](https://github.com/Kilo-Org/kilocode/commit/d94f2bf1c944129054dda983ff1df3d50ddced90) - Report failures when moving a chat into a worktree instead of leaving the row stuck, clean up worktrees left by a failed move, and stop clicks in empty list space from selecting the last row.
- [#13315](https://github.com/Kilo-Org/kilocode/pull/13315) [`ce5a71e`](https://github.com/Kilo-Org/kilocode/commit/ce5a71e5f07fb3ab50f4215278f6e2a1557ef148) - Show worktree creation and move progress in the Agent Manager row instead of the chat dock.
## 7.5.0
### Minor Changes
- [#13092](https://github.com/Kilo-Org/kilocode/pull/13092) [`1500843`](https://github.com/Kilo-Org/kilocode/commit/1500843a342d66b56bc64ac26fa6f9d60e7d255f) - Show the collapsed hover preview on more transcript cards: grep, glob, other tool calls, and to-dos now open the same popup that shell and diffs use.
- [#12433](https://github.com/Kilo-Org/kilocode/pull/12433) [`46eac53`](https://github.com/Kilo-Org/kilocode/commit/46eac53716dd4c5eb31e782f55f08bcf13772ad7) - Reveal rename and delete buttons on hover in JetBrains session history, rename sessions through an inline popover instead of a modal dialog, and move the selection to the neighbouring session after deleting the selected one.
@@ -240,9 +310,32 @@
## [Unreleased]
## [7.1.0-rc.4] - 2026-08-25
### Added
- Let Agent Manager tasks choose both provider and model so similarly named models across providers can be selected reliably.
- Show clearer missing-folder states for deleted or moved JetBrains worktrees.
### Fixed
- Keep JetBrains Agent Manager worktrees anchored to the main repository's managed storage, preventing nested worktree data loss when the IDE is opened inside a linked worktree.
- Harden JetBrains worktree cleanup by pruning stale git metadata, hiding dead managed worktrees, refusing unmanaged paths, and blocking parent removal while nested worktrees are live.
- Surface failed JetBrains sessions consistently in worktree and session lists, and keep the Agents attention dot active until the problem is resolved.
- Restore running indicators when resuming sessions instead of leaving stale stopped or error state visible.
- Keep JetBrains session hover popups attached to the correct card, within the visible session area, and hidden behind blocking overlays.
- Keep worktree PR badges clickable after row reuse and layout changes.
### Changed
- Improve Kilo Core startup speed for JetBrains and other clients, especially default TUI launch and short-lived commands.
- Put new, imported, or moved JetBrains Agent Manager worktrees at the top of the list and keep that ordering across reloads unless manually reordered.
- Make JetBrains Agent Manager rows visually quieter with regular-weight labels, subdued idle icons, and pruning of stale deleted-session status.
## [7.1.0-rc.3] - 2026-08-24
### Added
- Add JetBrains logging settings with log reveal and backend log download actions for easier diagnostics.
- Add JetBrains workflow settings so workflows can be reviewed and managed from the plugin.
- Show permission-prompt diffs and approval reasons on JetBrains tool cards before acting on tool requests.
@@ -250,6 +343,7 @@
- Improve JetBrains Agent Manager worktrees and chat with worktree branch/PR actions, drag-and-drop reordering, worktree progress, stable activity rows, and session-history scoping.
### Fixed
- Detect unsupported JetBrains remote workspaces and surface the problem in the session instead of failing ambiguously.
- Keep slash completion open and responsive while typing quickly.
- Prevent chat header popups, PR badges, row heights, row spacing, and worktree metadata from drifting out of alignment.
@@ -257,6 +351,7 @@
- Improve Core reliability for JetBrains by preserving output budgets, retrying reasoning-only incomplete responses, sending max-step instructions correctly, preserving Cerebras completion limits, and clarifying background task orchestration.
### Changed
- Bump the pinned Kilo Core CLI used by JetBrains releases to 7.4.23.
- Remove an unused JetBrains Compose compiler plugin dependency.
@@ -89,7 +89,14 @@ class KiloBackendActivityManager(
is ChatEventDto.Error -> event.sessionID?.let { errors.add(it) }
is ChatEventDto.TurnOpen -> errors.remove(event.sessionID)
is ChatEventDto.SessionIdle -> clear(event.sessionID)
is ChatEventDto.SessionStatusChanged -> if (event.status.type == "idle") clear(event.sessionID)
is ChatEventDto.SessionStatusChanged -> when (event.status.type) {
"idle" -> clear(event.sessionID)
// Work restarted, so whatever ended the previous turn (a Stop publishes
// MessageAbortedError) is stale. Not every resume path publishes a turn event, so
// busy has to clear the error itself.
"busy" -> errors.remove(event.sessionID)
else -> Unit
}
else -> Unit
}
}
@@ -115,8 +122,11 @@ class KiloBackendActivityManager(
if (pending.values.any { it }) return SessionActivityKindDto.PLAN
return SessionActivityKindDto.QUESTION
}
if (id in errors) return SessionActivityKindDto.ERROR
// Live work outranks a past error: the status stream and the chat events are separate
// collectors, so a resumed session can go busy before the event that clears its error
// arrives, and the row must keep spinning instead of resting on the stale error.
if (busy) return SessionActivityKindDto.RUNNING
if (id in errors) return SessionActivityKindDto.ERROR
return null
}
@@ -508,6 +508,10 @@ class KiloWorkspaceRpcApiImpl internal constructor(
status = KiloWorkspaceStatusDto.UNSUPPORTED,
error = state.reason,
)
is KiloWorkspaceState.Missing -> KiloWorkspaceStateDto(
status = KiloWorkspaceStatusDto.MISSING,
error = state.path,
)
is KiloWorkspaceState.Error -> KiloWorkspaceStateDto(
status = KiloWorkspaceStatusDto.ERROR,
error = state.message,
@@ -83,9 +83,10 @@ class KiloWorktreeRpcApiImpl : KiloWorktreeRpcApi {
val res = runGit(base, "worktree", "list", "--porcelain")
if (!res.ok) return@withContext WorktreeListDto()
val items = managedWorktrees(parseWorktreeList(res.stdout))
val store = worktreeNameStore(items)
val state = store?.let { syncWorktreeState(it, worktreePaths(items)) } ?: WorktreeState()
val named = overlayWorktreeNames(items, state.names)
val alive = items.filter { it.main || Files.isDirectory(Path.of(it.path)) }
val store = worktreeNameStore(alive)
val state = store?.let { syncWorktreeState(it, worktreePaths(alive)) } ?: WorktreeState()
val named = overlayWorktreeNames(alive, state.names)
WorktreeListDto(orderWorktrees(named, state.worktreeOrder))
}
@@ -276,6 +277,14 @@ class KiloWorktreeRpcApiImpl : KiloWorktreeRpcApi {
return Path.of(lines[0]).normalize() != Path.of(lines[1]).normalize()
}
/** Main working tree for the repo containing [base]; falls back to [base] when git fails. */
private fun mainWorktree(base: Path): Path {
val res = runGit(base, "worktree", "list", "--porcelain")
if (!res.ok) return base
val main = parseWorktreeList(res.stdout).firstOrNull { it.main } ?: return base
return Path.of(main.path).normalize()
}
override suspend fun create(directory: String, request: CreateWorktreeRequestDto): CreateWorktreeResultDto =
withContext(Dispatchers.IO) {
val base = Path.of(directory).normalize()
@@ -312,7 +321,12 @@ class KiloWorktreeRpcApiImpl : KiloWorktreeRpcApi {
/** Runs `git worktree add` under `<base>/.kilo/worktrees/<slug>` and records list bookkeeping. */
private fun addWorktree(base: Path, branch: String, existing: Boolean, baseRef: String?): CreateWorktreeResultDto {
val dir = base.resolve(".kilo").resolve("worktrees").resolve(branch.replace('/', '-'))
val root = mainWorktree(base)
val storage = root.resolve(".kilo").resolve("worktrees").normalize()
val parts = branch.split('/')
if (parts.any { it.isBlank() || it == "." || it == ".." }) return CreateWorktreeResultDto(error = "Invalid branch name")
val dir = storage.resolve(branch.replace('/', '-')).normalize()
if (dir.parent != storage) return CreateWorktreeResultDto(error = "Invalid branch name")
Files.createDirectories(dir.parent)
val args = buildList {
addAll(listOf("worktree", "add"))
@@ -327,7 +341,7 @@ class KiloWorktreeRpcApiImpl : KiloWorktreeRpcApi {
}
}
LOG.info("worktree add requested: branch=$branch existing=$existing base=${baseRef ?: "(current)"} dir=$dir")
val res = runGit(base, *args.toTypedArray())
val res = add(base, args)
if (!res.ok) {
LOG.warn("worktree add failed: branch=$branch exit=${res.exit} stderr=${res.stderr.trim()}")
return CreateWorktreeResultDto(error = res.stderr.ifBlank { "git worktree add failed" })
@@ -338,7 +352,7 @@ class KiloWorktreeRpcApiImpl : KiloWorktreeRpcApi {
val items = if (list.ok) managedWorktrees(parseWorktreeList(list.stdout)) else emptyList()
val store = worktreeNameStore(items) ?: base.resolve(".kilo").resolve(WORKTREE_NAMES_FILE)
val paths = worktreePaths(items).ifEmpty { listOf(path) }
appendWorktreeOrder(store, path, paths)
prependWorktreeOrder(store, path, paths)
return CreateWorktreeResultDto(worktree = WorktreeDto(path, dir.fileName.toString(), branch, path))
}
@@ -347,15 +361,42 @@ class KiloWorktreeRpcApiImpl : KiloWorktreeRpcApi {
val base = Path.of(directory).normalize()
LOG.info("worktree remove requested: path=$path branch=${branch ?: "(none)"} force=$force base=$base")
val list = runGit(base, "worktree", "list", "--porcelain")
val store = (if (list.ok) worktreeNameStore(managedWorktrees(parseWorktreeList(list.stdout))) else null)
?: base.resolve(".kilo").resolve(WORKTREE_NAMES_FILE)
if (!list.ok) return@withContext RemoveWorktreeResultDto(error = list.stderr.ifBlank { "git worktree list failed" })
val all = parseWorktreeList(list.stdout)
val items = managedWorktrees(all)
val main = all.firstOrNull { it.main }
val storage = main?.let { Path.of(it.path).normalize().resolve(".kilo").resolve("worktrees").normalize() }
val target = all.firstOrNull {
val item = Path.of(it.path).normalize()
!it.main && samePath(it.path, path) && item.parent == storage
}
?: return@withContext RemoveWorktreeResultDto(error = "Refusing to remove unmanaged worktree: $path")
// Compare canonical (symlink-resolved) paths: on macOS the temp/repo root is a symlink
// (/var -> /private/var), so a raw startsWith against normalized porcelain paths would miss
// a live child and let `git worktree remove --force` delete it recursively.
val root = realPath(path)
val nested = all.filter {
!it.prunable && Files.isDirectory(Path.of(it.path)) && !samePath(it.path, path) && realPath(it.path).startsWith(root)
}
if (nested.isNotEmpty()) {
val names = nested.joinToString("\n") { it.path }
return@withContext RemoveWorktreeResultDto(error = "Delete nested worktrees first:\n$names")
}
val store = worktreeNameStore(items) ?: base.resolve(".kilo").resolve(WORKTREE_NAMES_FILE)
// Force means the user accepted removing a locked worktree; unlock first so the plain
// remove succeeds. Unlock fails harmlessly when the tree isn't actually locked.
if (force) {
val unlock = runGit(base, "worktree", "unlock", path)
val unlock = runGit(base, "worktree", "unlock", target.path)
if (!unlock.ok) LOG.info("worktree unlock skipped: path=$path exit=${unlock.exit} stderr=${unlock.stderr.trim()}")
}
val res = runGit(base, "worktree", "remove", "--force", path)
// Only skip git's own removal when the checkout directory is actually gone. Git also flags a
// worktree prunable when its admin metadata is stale while the files remain; those must still
// be deleted so a later create of the same slug is not blocked by leftovers.
val res = if (!Files.isDirectory(Path.of(target.path))) {
GitResult(0, "", "")
} else {
runGit(base, "worktree", "remove", "--force", target.path)
}
if (!res.ok) {
val locked = res.stderr.contains("locked working tree", ignoreCase = true)
LOG.warn("worktree remove failed: path=$path locked=$locked exit=${res.exit} stderr=${res.stderr.trim()}")
@@ -370,7 +411,11 @@ class KiloWorktreeRpcApiImpl : KiloWorktreeRpcApi {
if (!del.ok) LOG.warn("worktree branch delete failed: branch=$it exit=${del.exit} stderr=${del.stderr.trim()}")
}
LOG.info("worktree removed: path=$path branch=${branch ?: "(none)"}")
removeWorktreeState(store, path)
removeWorktreeState(store, target.path)
val prune = runGit(base, "worktree", "prune")
if (!prune.ok) LOG.warn("worktree prune failed: exit=${prune.exit} stderr=${prune.stderr.trim()}")
runCatching { service<KiloBackendAppService>().workspaces.remove(target.path) }
.onFailure { err -> LOG.info("workspace cache eviction skipped: path=${target.path} message=${err.message}") }
RemoveWorktreeResultDto(ok = true)
}
@@ -471,6 +516,20 @@ class KiloWorktreeRpcApiImpl : KiloWorktreeRpcApi {
}
}
private fun add(base: Path, args: List<String>): GitResult {
val first = runGit(base, *args.toTypedArray())
if (first.ok || !stale(first.stderr)) return first
val prune = runGit(base, "worktree", "prune")
if (!prune.ok) LOG.warn("worktree prune before retry failed: exit=${prune.exit} stderr=${prune.stderr.trim()}")
return runGit(base, *args.toTypedArray())
}
private fun stale(text: String): Boolean {
return text.contains("is already checked out", ignoreCase = true) ||
text.contains("already used by worktree", ignoreCase = true) ||
text.contains("missing but already registered worktree", ignoreCase = true)
}
private suspend fun <T, R> parallel(items: List<T>, block: suspend (T) -> R): List<R> = coroutineScope {
val sem = Semaphore(4)
items.map { item -> async { sem.withPermit { block(item) } } }.map { it.await() }
@@ -637,16 +696,18 @@ internal fun parseWorktreeList(raw: String): List<WorktreeDto> {
var branch = "(detached)"
var locked = false
var lockReason: String? = null
var prunable = false
var first = true
fun flush() {
val p = path ?: return
val name = p.substringAfterLast('/').ifBlank { p }
out.add(WorktreeDto(p, name, branch, p, main = first, locked = locked, lockReason = lockReason))
out.add(WorktreeDto(p, name, branch, p, main = first, locked = locked, lockReason = lockReason, prunable = prunable))
first = false
path = null
branch = "(detached)"
locked = false
lockReason = null
prunable = false
}
for (line in raw.lines()) {
when {
@@ -656,6 +717,7 @@ internal fun parseWorktreeList(raw: String): List<WorktreeDto> {
locked = true
lockReason = line.removePrefix("locked").trim().takeIf { it.isNotEmpty() }
}
line == "prunable" || line.startsWith("prunable ") -> prunable = true
line.isBlank() -> flush()
}
}
@@ -669,8 +731,9 @@ internal fun managedWorktrees(items: List<WorktreeDto>): List<WorktreeDto> {
val storage = root.resolve(".kilo").resolve("worktrees").normalize()
return items.filter { item ->
if (item.main) return@filter true
if (item.prunable) return@filter false
val path = Path.of(item.path).normalize()
path.startsWith(storage) && path != storage
path.parent == storage
}
}
@@ -748,13 +811,12 @@ private fun syncWorktreeState(file: Path, paths: List<String>): WorktreeState {
return next
}
private fun appendWorktreeOrder(file: Path, path: String, paths: List<String>) {
private fun prependWorktreeOrder(file: Path, path: String, paths: List<String>) {
val state = readWorktreeState(file)
val set = paths.toSet()
val order = state.worktreeOrder.filter { it in set && !samePath(it, path) } +
paths.filter { it !in state.worktreeOrder && !samePath(it, path) } +
path
writeWorktreeState(file, state.copy(worktreeOrder = order.distinct()))
val rest = state.worktreeOrder.filter { it in set && !samePath(it, path) } +
paths.filter { it !in state.worktreeOrder && !samePath(it, path) }
writeWorktreeState(file, state.copy(worktreeOrder = (listOf(path) + rest).distinct()))
}
private fun removeWorktreeState(file: Path, path: String) {
@@ -28,6 +28,8 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import okhttp3.OkHttpClient
import okhttp3.Request
import java.nio.file.Files
import java.nio.file.Path
import java.util.concurrent.atomic.AtomicReference
/**
@@ -77,6 +79,11 @@ class KiloBackendWorkspace(
_state.value = KiloWorkspaceState.Unsupported(reason)
return@launch
}
if (!Files.isDirectory(Path.of(directory))) {
log.info("Workspace directory is missing: $directory")
_state.value = KiloWorkspaceState.Missing(directory)
return@launch
}
val progress = AtomicReference(KiloWorkspaceLoadProgress())
_state.value = KiloWorkspaceState.Loading(progress.get())
@@ -8,6 +8,8 @@ import ai.kilocode.jetbrains.api.client.DefaultApi
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.SharedFlow
import okhttp3.OkHttpClient
import java.nio.file.Files
import java.nio.file.Path
import java.util.concurrent.ConcurrentHashMap
/**
@@ -74,8 +76,26 @@ class KiloBackendWorkspaceManager(
}
}
/** Remove a workspace (e.g. when a worktree is deleted). */
/**
* Remove any cached workspace whose directory resolves to the same real path as [dir].
* Callers pass git porcelain paths, while workspaces are often keyed by the resolved
* (`toRealPath`) path or the IDE base path, so an exact-string match would miss the entry
* and leave a deleted worktree cached as Ready — still producing backend errors.
*/
fun remove(dir: String) {
workspaces.remove(dir)?.stop()
val target = canonical(dir)
workspaces.keys.filter { canonical(it) == target }.forEach { key ->
log.info("Removing cached workspace for $key")
workspaces.remove(key)?.stop()
}
}
/** Resolve symlinks on the parent so `/var/...` and `/private/var/...` compare equal even after the leaf is deleted. */
private fun canonical(dir: String): String {
val path = Path.of(dir).normalize()
val parent = path.parent ?: return path.toString()
val name = path.fileName ?: return path.toString()
val root = runCatching { if (Files.exists(parent)) parent.toRealPath() else parent }.getOrDefault(parent)
return root.resolve(name).toString()
}
}
@@ -20,6 +20,7 @@ sealed class KiloWorkspaceState {
val skills: List<SkillInfo>,
) : KiloWorkspaceState()
data class Unsupported(val reason: String) : KiloWorkspaceState()
data class Missing(val path: String) : KiloWorkspaceState()
data class Error(val message: String, val errors: List<LoadError> = emptyList()) : KiloWorkspaceState()
}
@@ -102,10 +102,8 @@ class KiloBackendActivityManagerTest {
statuses.value = mapOf("ses_1" to SessionStatusDto("busy"))
start()
// Turn ends on an error: the session goes idle but the error must stay visible.
events.emit(ChatEventDto.Error("ses_1"))
await("ses_1", SessionActivityKindDto.ERROR)
// Turn ends: session goes idle but the error must stay visible.
statuses.value = mapOf("ses_1" to SessionStatusDto("idle"))
events.emit(ChatEventDto.SessionIdle("ses_1"))
await("ses_1", SessionActivityKindDto.ERROR)
@@ -116,6 +114,35 @@ class KiloBackendActivityManagerTest {
assertFalse("ses_1" in manager.activity.value)
}
@Test
fun `busy outranks a pending error so a resumed session runs`() = runBlocking {
directories["ses_1"] = "/repo/wt"
start()
// A Stop leaves the session errored and idle.
events.emit(ChatEventDto.Error("ses_1"))
await("ses_1", SessionActivityKindDto.ERROR)
// Resumed: busy arrives before anything clears the error.
statuses.value = mapOf("ses_1" to SessionStatusDto("busy"))
await("ses_1", SessionActivityKindDto.RUNNING)
}
@Test
fun `busy status event clears a pending error`() = runBlocking {
directories["ses_1"] = "/repo/wt"
start()
events.emit(ChatEventDto.Error("ses_1"))
await("ses_1", SessionActivityKindDto.ERROR)
events.emit(ChatEventDto.SessionStatusChanged("ses_1", SessionStatusDto("busy")))
withTimeout(5_000) { manager.activity.first { "ses_1" !in it } }
assertFalse("ses_1" in manager.activity.value)
}
@Test
fun `global error without session is ignored`() = runBlocking {
directories["ses_1"] = "/repo/wt"

Some files were not shown because too many files have changed in this diff Show More