The JetBrains backend eagerly warmed the v2 location stack for every
instance, which starts a native @parcel/watcher subscription that lives
for the whole session. On macOS FSEvents watches the entire subtree
recursively (the ignore list is only a userspace filter), so this
always-on watcher burns CPU and leaks native memory while the IDE is
idle — the cause of the 150%+ CPU and multi-GB RSS growth reported in
`kilo serve` on macOS.
The watcher's only consumer is the CLI/TUI sidebar branch label via the
vcs.branch.updated event. JetBrains, like VS Code, has its own git
integration and does not consume that event, so eager watchers are pure
overhead for it. Extend the existing VS Code gate to also exclude
jetbrains; the standalone CLI/TUI stays eager, and editor clients still
build the stack lazily if a real file/pty route needs it.
Fixes#12721
The /privacy command wrote only to global config but read the effective
config, so a project-level privacy_mode could shadow the global toggle
and the UI would not change even though the command reported success.
Since privacy mode is a personal preference, persist and read it only
from the global config.
The sidebar footer used tone() for both the bullet and masked balance,
so the bullet color still revealed whether the balance was low. Use
theme().textMuted for both while masked, retaining tone() only when
privacy mode is off.
The binary branch returned an object without before/after while the normal
branch included them, so the result was a union and callers could not read
before/after without narrowing (the diff-full test failed typecheck). Return
before/after as undefined for binary files so the shape is uniform; JSON still
omits the undefined keys, so serialized output is unchanged.
The diff editor tab now shows whole-file diffs (with collapsible unchanged
regions) for modified files, while inline session cards stay hunk-bounded.
diffSides resolves full before/after with a safe precedence:
1. Authoritative: query the CLI's snapshot diff (full=true&file=...), which
reads the exact turn's before/after from snapshot commits via git show and
is correct even for historical/reverted turns.
2. Fallback: reverse-apply the hunk patch onto the working-tree file locally,
so it works against the current pinned CLI until the new one is released.
3. Hunk view: if neither yields full content (drift/binary/added/deleted),
render the existing patch.
The CLI change is minimal and additive: full-content logic lives in the
kilo-owned diff-full.ts (DiffFull.detail); shared files only gain thin
kilocode_change hooks (FileDiff before/after, Snapshot.diffFile, the summary
full/file branch, and the diff query fields).
Roll back the CLI diff full/file server changes and rebuild whole-file
diffs entirely in the JetBrains plugin: the backend reads the working-tree
file and reverse-applies the existing hunk patch to recover the full before
side, falling back to the hunk view when the tree has drifted. Works against
any pinned CLI with no server change.
Add on-demand full-content diff loading for the JetBrains diff editor
tab while keeping inline turn cards hunk-bounded. Adds a full/file query
path to the CLI session diff endpoint and a diffFile RPC that matches the
requested path so multi-file turns are not collapsed to a single entry.