Repair the active-only credential import with a v3 data migration that
restores every account without duplicating users who already ran v2,
while keeping the active account effective. Restore upstream Snowflake
Cortex OAuth account/token resolution and combined refresh fetch path.
PR #12249 was reverted (open PR #12435) because its test imported three
modules that v1.17.4 compat (2855ebbe48) removed/moved:
- Reference/RepositoryCache from ../../src/reference/* (now packages/core)
- Ripgrep from @opencode-ai/core/filesystem/ripgrep
Re-land the production fix by pointing RepositoryCache and Ripgrep at
@opencode-ai/core/{repository-cache,ripgrep} and dropping the now-gone
Reference.defaultLayer from the layer stack, matching the current
full-stack sibling (session-prompt-compaction-safety.test.ts).
Typecheck passes; all 3 watchdog tests pass.
- Drop test-only component() seams on SettingsPathDialog and
InstructionEditDialog; test layout helpers and public dialog API directly
- Remove unused settings.rules.files.remove bundle key across all locales
- Note cloud session history import fix in the changeset
The plugin runs the CLI release pinned in package.json (was 7.4.11), which contains the pre-fix cloud-import path that returns HTTP 400 BadRequest in compiled builds. The fix (#12329) first ships in CLI v7.4.13. No stable release contains it yet (7.4.14 is a draft with no assets), so pin to the v7.4.13 pre-release; the automated jetbrains-cli-pin-bump PR will move to a stable release >= 7.4.13 later. kilo.cli.pinned stays true.
Adds a Rules page under Agent Behavior for managing additional instruction files (config `instructions`) with a Skills-style list: open in editor, in-dialog content editor, and delete. Unifies the add/edit path dialog into a shared SettingsPathDialog (OK button, focused input) and hides in-place list action buttons when the list is not focused.
* fix(cli): prevent stalled agent streams
* docs(cli): clarify stream timeout scope
* test(cli): stabilize global skill permission timing
* fix(cli): make stream timeout tool-aware
* fix(cli): let the idle watchdog cancel a stalled pull immediately
An async generator's return() cannot preempt an in-flight internal
await; when suspended mid-await it only applies once that await
settles on its own. For a genuinely stalled stream that await never
settles, so interrupting a session mid-stream (e.g. aborting while a
local tool call is pending) hung instead of cancelling.
Replace the generator with a hand-rolled AsyncIterator whose return()
runs immediately and forwards to the source's return() without
waiting on any outstanding pull, matching how interruption already
behaves for the unwrapped upstream iterator.
Fixes CI failures in test/session/processor-effect.test.ts and
test/session/prompt.test.ts that hung/timed out on this branch.
* test(cli): give Windows more time for the watchdog integration bash gate
git-bash on Windows CI runners spawns and writes the readiness marker
file noticeably slower than the Unix shells this suite otherwise
runs under, so tests A and C's 5s file-poll and 30s scenario timeout
were too tight there and failed with 'readiness marker never
appeared' even though the tool was already running. Double both on
win32, matching the existing platform-aware timeout doubling in
test/kilocode/background-process.test.ts.
* test(cli): use POSIX-style paths in the watchdog bash gate script
path.join() yields backslash-separated paths on Windows. Embedded
inside a double-quoted git-bash string, a literal backslash is an
escape character, so the ready/release marker paths could resolve to
the wrong file (or nothing) instead of erroring, making 'touch' and
the '[ -f ... ]' poll silently miss each other. Normalize to forward
slashes before interpolating into the script; git-bash/MSYS accept
them natively on every platform this suite runs on.
This is the actual root cause of the 'readiness marker never
appeared' failures on Windows shards; the previous commit's timeout
doubling was only masking symptoms.
* test(cli): extend Windows margins further for the watchdog bash gate
The production bash tool runs every command through a login shell
(bash -l -c ..., src/shell/shell.ts) so ~/.bashrc/aliases behave like
an interactive terminal. Git for Windows' login-shell startup rescans
the full Windows PATH and is known to take several seconds on CI
hardware, well past the previous 15s/60s Windows margins, before the
script's own touch ever runs. Extend waitForFile to 30s and the two
affected scenario timeouts to 90s on win32.
* test(cli): give the watchdog bash gate an explicit shell so it runs on Windows
Root cause, finally isolated: without a config-level shell field, the
bash tool defaultShell() falls back to cmd.exe on Windows (see
packages/core/src/tool/bash.ts). cmd.exe cannot run bashGate POSIX
syntax (touch, test -f, while/done), so touch failed instantly and
silently and the readiness marker never appeared - no timeout was
ever going to fix that, which is why the previous two commits margin
increases did not help. Set shell to bash in tests A and C config so
the bash tool resolves real git-bash via src/shell/shell.ts on
Windows, and drop the speculative timeout inflation back to the
original values plus a small, now-accurate margin for git-bash slower
login-shell startup.
The v2 integration refresh converted event metadata directly into a
Location.Ref, so the global routing sentinel (directory "global") was
sent to the server as a real filesystem location. LocationServiceMap
built the full project graph for it, and Fff.create({ basePath: "global" })
failed on every refresh after OAuth callback disposal. Map global events
back to the current default location instead.
Main's per-instance watcher lands without the unit-test disable env on
the exerciser job, so 289 scenario instance boots spawn inotify watchers
on Linux and the process dies with EBADF. Mirror the unit step's
KILO_EXPERIMENTAL_DISABLE_FILEWATCHER for the exerciser.
The pruning was only wired into the conflict-resolution path, but the
unconditional pre-merge pass and the ref reconciler kept the naive
additive merge, so stale upstream patch entries survived whenever the
root package.json did not hit a git conflict. Extract
prunePatchedDependencies and call it before the preserve loop in all
three paths.
The transform dropped Kilo's test:ci scripts in six upstream-shared
packages, the dev:local root entrypoint, and Kilo's trustedDependencies
install policy on every merge, and merged patchedDependencies naively,
keeping stale upstream entries whose patch files never come over. Extend
PRESERVE_SCRIPTS, add a trustedDependencies deny-list, and drop patch
entries superseded by Kilo pins or missing patch files.
The upstream connector.test.ts deletion dropped Kilo's six settlement
guard tests (persistence failure, cancellation race, callback and
persistence timeouts). Ports them to the Integration API with the
restored guards.