Instead of placing user before the orchestrator allowlist (which prevents
users from restricting allowed tools), keep user in the normal position
but add an explicit bash deny after user. This way:
- User can still deny orchestrator-allowed tools (e.g. webfetch)
- User cannot re-enable bash since the post-user deny wins via findLast
Move `user` before the orchestrator-specific PermissionNext.fromConfig()
so that findLast() returns the orchestrator's rules (which appear later
in the merged array), preventing user config from re-enabling bash.
This mirrors the pattern already used by the `ask` agent.
Also removes the dead commented-out bash line since `*: deny` already
covers it.
The orchestrator mode had `bash: "allow"` in its permission ruleset, creating a
loophole where the LLM could use shell commands (sed, echo >, tee, etc.) to write
files directly instead of delegating to sub-agents via the task tool.
This is inconsistent with the orchestrator system prompt which says "Do not edit
files directly" and with how kilocode-legacy handled this (no command access at
all for orchestrator).
Removes bash from the allowed tools. The orchestrator still has read, grep, glob,
and list for lightweight codebase investigation, plus task for delegation.
Closes#7575
- Set process.type in mcp/index.ts so MCP SDK's StdioClientTransport
uses windowsHide:true when spawning MCP servers on Windows (the SDK
only enables this in Electron, checking 'type' in process)
- Add windowsHide:true to GitOps.ts git execFile calls
- Add windowsHide:true to marketplace installer tar execFile call
* fix(cli,vscode): prevent infinite loading in commit message generation
Add timeout-based AbortController to both server-side LLM stream (30s)
and client-side HTTP request (35s) so the SCM progress spinner cannot
hang indefinitely. Make the VS Code progress indicator cancellable so
users can abort manually. Also fix outdated test mocks that referenced
the removed getHttpClient API instead of the current SDK getClient.
* fix(cli,vscode): consume stream explicitly to prevent infinite loading
Replace `await stream.text` with `for await (chunk of stream.textStream)`
so that stream-level errors surface immediately instead of leaving the
promise hanging indefinitely. With some providers and Vercel AI SDK
versions, the `.text` promise never resolves when the underlying stream
errors out early, causing the spinner to load forever (fixes#7345).
Add a catch block that distinguishes timeout aborts from other errors
and re-throws with a human-readable message (partially addresses #6568).
In the VS Code extension, log the actual error in the getClient catch
block instead of silently discarding it.
---------
Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>
The upstream merge in PR #7240 introduced channel-based database path
separation, causing non-latest/beta channels (including local dev) to
open a different DB file (e.g. kilo-local.db) instead of kilo.db. This
made all existing sessions invisible.
Remove the channel-based path logic and always use kilo.db. Also remove
the now-unused KILO_DISABLE_CHANNEL_DB flag.
Closes#7472
Previously, bash commands inherited the global "*": "allow" wildcard default,
meaning they would execute without approval. Add an explicit bash: "ask" rule
to the agent defaults so users are prompted before shell commands run.
Update the VS Code extension's TOOL_DEFAULTS mirror to match.
Closes#7436
- kilo.ai/docs/github/#usage-examples was a 404 (page never created).
Replaced with kilo.ai/docs/automate/integrations in github.ts:245.
- vercel.link redirects to a login page that blocks bots — added to
lychee.toml exclusions.
The cleanup() function calls `git gc` without the Windows-required
config parameters (core.autocrlf, core.longpaths, core.symlinks)
that are used in every other git command in the same file. This
causes `git gc --prune` to fail with exit code 128 on Windows,
leaving temporary pack files that consume 10-20 GB per session.
Fixes#7415
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Update upstream merge scripts to use a generic x-opencode- → x-kilo- regex
that catches all current and future headers automatically. Apply the same
replacement to all source files so the codebase is ready for the next
upstream merge.
* feat(vscode): track session status for busy-session warnings
* feat(vscode): warn before saving settings when sessions are running
* feat(vscode): add draft state and save/discard to config context
* feat(vscode): Save button on Settings panel
* fix(vscode): pass remove permission commands correctly to backend
* feat(vscode): handle permission removals
* fix(vscode): detect other sessions in settings panel
* feat(vscode): translations
* feat(vscode): refresh config state on auto-approve tab
* fix(vscode): formatting and unit tests
* fix: reset Config.state cache on no-dispose config write
* fix(vscode): Detect sessions opened before Settings tab is opened
* fix(vscode): Removed previous fix changes
The kilo provider always autoloads with free models and apiKey="anonymous",
causing useConnected() to return true even for first-time users without any
API key. This prevented the onboarding tip from ever appearing.
Update the existing /status tip to mention config paths alongside
MCP servers and system info, directing users to the newly added
config section in the status dialog.
First-time users with no connected provider now see a targeted tip
on the home screen: 'Using a free model — run /connect to add your
API key'. Once a provider is connected or the user has sessions,
normal random tip behavior resumes.
Display global config path (from Global.Path.config) and project
directory in the status dialog so users can quickly verify which
config files are being loaded. Paths are shortened with ~ for
readability, matching existing TUI conventions.