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 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).
* fix: make tool invalid-arguments errors clearly actionable to the model
* fix: address kilo-code-bot review on schema error formatting
Return a jargon-free actionable message when the schema formatter yields no issues (instead of the raw SchemaError), and match Effect's missing-key message case-insensitively so it survives library wording changes.
Signed-off-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
* Address review: cap rendered issues, isolate Kilo logic, harden the fallbacks
- Move formatter/format/path/reason out of the shared upstream tool.ts into
packages/opencode/src/kilocode/tool/tool.ts.
- Cap output at 20 issues / 4 KiB with an '...and N more' suffix, since
validation fails before the normal output truncation.
- Return a readable message when the formatter yields zero issues instead of
falling back to SchemaError jargon.
- Match missing-key messages with a regex instead of an exact string compare.
- Rewrite the changeset around the user-visible outcome.
* chore: annotate the reformatted decode call with kilocode_change markers
The multi-line reformat left lines 122-125 unannotated in a shared upstream
file. Wrap the whole statement in a start/end block instead of per-line inline
markers, and drop the two now-redundant inline ones. Comments only.
---------
Signed-off-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Christiaan Arnoldus <christiaan.arnoldus@outlook.com>
* feat(tui): expand a collapsed paste on a second identical paste
* chore: retrigger review
* chore(tui): add paste expansion changeset
* fix(cli): target paste changeset
* fix(tui): refresh autocomplete after expanding a paste
Call auto()?.onInput on the expand-placeholder path so open autocomplete
matches onContentChange when a second identical paste expands text.