* fix: support remote MCP server migration in mcp-migrator
The MCP migrator only handled stdio/local MCP servers. When a user
configured a remote streamable-http or sse MCP server in
.kilocode/mcp_settings.json, it failed with:
The "file" argument must be of type string. Received undefined
This happened because convertServer() always assumed local servers,
building a command array from server.command (which is undefined for
remote servers).
Changes:
- Add remote transport type detection (streamable-http, sse)
- Convert remote servers to Config.McpRemote (type: "remote")
- Pass through url and headers fields
- Make command optional in KilocodeMcpServer interface
- Add comprehensive tests for remote server migration
* fix: validate url/command before use in mcp-migrator
Add guard clauses for missing url on remote servers and missing command
on local servers instead of using non-null assertions that could crash
on malformed config files.
---------
Co-authored-by: Kilo Agent <agent@kilo.ai>
Co-authored-by: marius-kilocode <marius@kilocode.ai>
* feat: changelog generation
* refactor: rename all ENV variables to KILO prefix
* refactor: publish rework
* refactor: publish rework
* refactor: unify git commiter action
* refactor: add all kilobots to the team
* feat: add ask agent for read-only Q&A mode
Add a new primary 'ask' agent that answers questions and explains code
without making changes. Permissions are read-only: read, grep, glob,
list, question, webfetch, websearch, codesearch — edit, bash, and task
are denied. Migrators already had 'ask' in their known mode lists.
* fix: preserve .env read gating in ask agent, clarify read-only prompt
Address PR review feedback:
- Re-state *.env pattern map in ask agent permissions so the blanket
deny+allow doesn't bypass the default env file gating
- Update prompt to say 'this agent is read-only' instead of implying
edits are possible on request
- Add .env gating assertions to ask agent test
* fix: handle AbortError during kilo login and org selection
Async onSelect handlers in DialogKiloOrganization and team selection
were not wrapped in try/catch. Since DialogSelect calls onSelect
without awaiting the returned promise, any rejection (e.g. AbortError
from SDK signal) became an unhandled rejection that Bun dumped raw to
the terminal. Wrap all async SDK calls in org/team selection with
proper error handling and silently ignore AbortErrors.
* fix: log non-abort errors during fallback sync reset
Replace try/catch wrapping ~400 lines with a finished flag pattern to
minimize upstream merge conflicts. Combine multiple kilocode_change
markers into single blocks.
Addresses review feedback from marius-kilocode on PR #155.
The Kilocode extension stores project-level MCP settings in
.kilocode/mcp.json, but the migrator was looking for
.kilocode/mcp_settings.json (which is only used for global settings).
This meant local MCP servers were never picked up by the CLI.
refactor(opencode): improve project ID resolution and normalization
Implement logic to resolve a unique project identifier with priority given
to `.kilocode/config.json` and falling back to the git origin remote URL.
The resolved ID is normalized, cached per-instance, and sent as a header
to the Kilo Gateway provider to enable project-specific tracking.
* fix: use 'max' instead of 'xhigh' as highest reasoning effort for Anthropic models on Kilo Gateway
Anthropic's native effort levels are low/medium/high/max, not xhigh.
The upstream merge replaced the Kilo-specific effort mapping with
OPENAI_EFFORTS which uses xhigh. This restores 'max' as the
user-facing variant name while mapping it to 'xhigh' on the wire
for OpenRouter API compatibility.
* fix: clarify comment about OpenRouter effort naming vs Anthropic naming
* feat: add Kilo soul prompt for consistent personality across all models
* fix: gate soul prompt behind Codex check to match existing prompt delivery pattern
Codex sessions deliver prompts via options.instructions, not system messages.
Prepend the soul to options.instructions for Codex, and skip it from the
system array, matching how SystemPrompt.provider() is already handled.
* fix: make Ctrl+C interrupt instead of kill, require double-press to exit
* fix: revert config changes, handle ctrl+c double-press in event handlers only
Reverts keybind default changes (unnecessary — ctrl+c overlap is handled
by event priority in onKeyDown). Adds missing preventDefault() in
child-session ctrl+c handler to prevent SIGINT.
Add the x-kilocode-machineid HTTP header to outgoing requests when using
the kilo-gateway. This enables the cloud backend to track machine IDs
in the microdollar_usage_metadata table (Kilo-Org/cloud#90).
The header is set alongside the existing x-kilocode-mode header when
the model API uses @kilocode/kilo-gateway.