Commit Graph

26319 Commits

Author SHA1 Message Date
Igor Šćekić aa22680fee refactor(cli): shared-process remote sessions with safe per-session exit (#12327)
* refactor(cli): run remote sessions in one process with safe per-session exit

Consolidate remote session handling into a single CLI process instead of
spawning one process per remote-created session (addresses the PR review):

- restore in-process create_session (accepts an absent sessionId and targets
  the connection directory); remove the session spawner, the
  KILO_REMOTE_ATTACH_SESSION attach-on-boot path, the child-advertisement gate,
  and their tests
- retain instance advertisement and fire one immediate out-of-band heartbeat on
  (re)connect when advertising, so a headless `kilo remote` host is discoverable
  without delay

Make /exit (wire command exit_cli, unchanged for compatibility) detach only the
target session instead of terminating the CLI:

- AttachedState.detach with a presence-suppression tombstone; detach also clears
  the target's SessionStatus so the negative-containment heartbeat fence resolves
  deterministically for busy/retry/offline sessions
- exit_cli handler verifies ownership, cancels the active prompt, detaches and
  awaits the detach heartbeat, then ACKs; the interactive RemoteExit callback is
  invoked only after the ACK when the last owned session exits; a headless
  `kilo remote` host stays alive and advertising at zero sessions
- add an optional canExitSession boolean to the list_commands v1 catalog
  (always true, independent of exitAvailable) so clients can detect safe
  session-exit semantics

History and stored sessions are preserved on exit.

* fix(cli): break module-load cycle in remote session prompt-cancel

The K1 in-process exit_cli seam added a static `import { SessionPrompt }`
to kilo-sessions.ts. @/session/prompt evaluates KiloSessionPrompt at module
load, so the new static edge raced that init and left the namespace in TDZ,
crashing unrelated test files with 'undefined is not an object (evaluating
KiloSessionPrompt.shouldAskPlanFollowup)'. Defer to a dynamic import at the
single call site, mirroring remote-command.ts.

* fix(cli): correct AttachedState announce/detach concurrency and rollback

Address review findings on the shared-process session lifecycle:

- announce/detach no longer join the OPPOSITE in-flight operation. Joining
  detach's negative-containment fence made announce resolve success for a
  detached id (and vice versa: detach joined announce and resolved success
  while still attached, which exit_cli treats as license to ACK/close). Each
  path now joins only a same-kind in-flight op and, when the opposite op is
  in flight, awaits it to settle and then performs the real work.
- Failed-detach rollback now releases the suppression tombstone, so a
  still-attached session is not dropped by the next setPresence (the tombstone
  loop would otherwise remove the still-present id and never clear).
- Both catch/rollback branches now honor the lifecycle generation guard
  (mirroring the success path); a stale in-flight op that rejects after
  reset() no longer mutates the new lifecycle's presence/pending/suppressed
  sets (reset clears the same Set instances).

Adds regression tests for each fix, plus AC6f covering the remote-ws
detachSessionId negative-containment waiter.
2026-07-24 09:39:07 +02:00
Igor Šćekić bdb9070a9e fix(cli): bound time-to-first-content by request timeout, not the idle watchdog (#12481)
* test(cli): red repro for first-content watchdog conflation

* fix(cli): bound time-to-first-content by request timeout, not the idle watchdog

* fix(cli): make the SSE chunk-idle watchdog first-content-aware

* chore(cli): changeset and upstream annotations for first-content watchdog fix

* chore(cli): address review findings (docs, AC9a assertion, comments)

* docs(cli): clarify iterableFromSchedule test comment

* refactor(cli): extract SSE first-content watchdog to kilocode mirror; bound decoder buffer

* fix(cli): raise default chunk-idle stall timeout from 60s to 5 min
2026-07-23 17:52:23 +02:00
hdcode.dev d0e8a86bfc fix(vscode): ignore Enter when no list result is highlighted (#12486) 2026-07-23 15:30:05 +00:00
rakshith1928 0d830cbd32 fix: avoid write-on-read mutation of config file (#11940)
* fix: avoid write-on-read mutation of config file

* fix: update test description for schema injection case

* Apply suggestion from @kilo-code-bot[bot]

Co-authored-by: kilo-code-bot[bot] <240665456+kilo-code-bot[bot]@users.noreply.github.com>

* chore: add changeset

* fix(cli): preserve  as first config property via getInsertionIndex

* fix(cli): close missing brackets in config test preventing syntax error

* Removed test for preserving environment variables when adding $schema to config.

Removed test for preserving environment variables when adding $schema to config.

* fix(cli): add  ordering assertions to existing injection tests

* docs(changeset): clarify per-load churn scope for comment-first JSONC

* test(cli): use FSUtil in config schema tests after upstream refactor

* chore: combine changeset lines

---------

Co-authored-by: kilo-code-bot[bot] <240665456+kilo-code-bot[bot]@users.noreply.github.com>
2026-07-23 16:12:01 +02:00
Johnny Eric Amancio 182d18bb28 fix(cli): harden plan edit permissions (#12458) 2026-07-23 15:15:42 +02:00
Christiaan Arnoldus cbbf7d48e4 Merge pull request #12488 from Kilo-Org/fix/show-vercel-response-id
fix: show Vercel ID for incomplete responses
2026-07-23 14:29:12 +02:00
Marius bf2cf9375b Merge pull request #12456 from Kilo-Org/correct-session-scoping
feat: reference past chats with @-mentions
2026-07-23 14:15:56 +02:00
marius-kilocode 7eaa47b62a fix: address session mention review 2026-07-23 12:54:02 +02:00
Christiaan Arnoldus d4250199fb chore(vscode): format request ID label 2026-07-23 12:35:26 +02:00
Christiaan Arnoldus 804242b04b fix(vscode): label Vercel ID as request ID 2026-07-23 12:23:03 +02:00
Christiaan Arnoldus c25f041eb3 fix: show Vercel ID for incomplete responses 2026-07-23 12:14:46 +02:00
hdcode.dev b367105c8d feat(vscode): support deleting queued chat messages (#12370)
* feat(vscode): support deleting queued chat messages

* feat(vscode): support deleting queued chat messages

* fix(ui): add missing deleteQueued i18n key to all locales

Add ui.message.deleteQueued to 19 locale files so the shared
UI translation test passes. Values left untranslated.

* style(vscode): fix prettier formatting in TranscriptRow

* Add changeset

* fix(ui): translate queued delete label

* docs(cli): preserve queue transition rationale

* refactor(cli): preserve queue naming from main

* test(cli): separate queued deletion coverage

* test(cli): await queue events deterministically

* docs(cli): clarify queued slot cancellation

* Update comment

* fix(cli): handle queued deletion race

* docs(cli): clarify queued deletion result

* Update .changeset/grumpy-cougars-see.md

Co-authored-by: hdcode.dev <hdcodedev@gmail.com>

* chore: remove kilocode_change markers from i18n dictionary entries

* chore(ui): annotate deleteQueued i18n entries with kilocode_change

---------

Co-authored-by: Marius <marius@kilocode.ai>
Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>
2026-07-23 11:59:53 +02:00
Marius fa452196bf Merge pull request #12484 from Kilo-Org/fix-aws-sso-credential-parsing-error
fix(dev): preserve AWS profile credential loading
2026-07-23 11:55:06 +02:00
Thomas Brugman dcc0d64a32 feat(opencode): show token throughput metrics (#12434)
* feat(opencode): record per-step token throughput metrics

Capture prompt-processing and text-generation tokens/sec on every
StepFinishPart. The metrics helper prefers provider-reported rates
from llama.cpp / vLLM timings and falls back to wall-clock computation.
A new kilocode tui usage route renders PP/TG inline.

chore(sdk): regenerate types for StepFinishPart.metrics
feat(tui): render PP/TG in sidebar usage panel

feat(vscode): per-message and aggregated token throughput display

Surface throughput on each AssistantMessage badge (behind the
showTokenThroughput toggle) and as a compact PP/TG row in the
expanded TaskHeader. Adds session helpers, i18n entries in 20 locales,
and StepFinishPart.metrics to extension/webview messages.

Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>

* fix(vscode): wire token throughput toggle and drop unreachable provider branch

- Replace the dead sendThroughputSetting() private with the shared
  buildThroughputSettingMessage() helper and add validThroughputSetting
  to handleUpdateSetting so the showTokenThroughput setting has the same
  guard as the chat/indexing twins (fixes Knip regression).
- Bind the DisplayTab Switch to the local settings draft so the toggle
  flips on click instead of waiting for a Save round-trip (the user-facing
  kill switch for #6579).
- Narrow StepThroughputMetrics.source to "computed"; backend hard-codes
  computed metrics today because the upstream AI SDK drops provider
  timings. Drop the unused provider branches from AssistantMessage and
  TaskHeader so the rendering code has no dead paths.

Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>

* fix(opencode): centralize token throughput labels and tighten type guard

- Replace inline PP/TG labels in the CLI sidebar with a throughputLabel
  constant in model-usage so a future i18n sweep is one file instead
  of every rendering site.
- Tighten isStepMetrics in sidebar-usage back to a real discriminator
  check after dropping the unreachable "provider" union member.
- Drop formatPP/formatTG exports from model-usage since callers already
  use the shared formatRateValue; mirror the swap in the TUI usage test.

Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>

* feat(token-throughput-v2): wire aggregation through DisplayProvider and test computed-only

- aggregateMetrics adopts the first non-empty computed sample per field
  across every step-finish in the session, replacing the dead provider-
  ranked last-wins strategy that shipped with the unreachable branch.
- Share the throughputVisible signal through DisplayProvider so every
  AssistantMessage and the TaskHeader row react to a single onMount
  requestThroughputSetting round-trip, instead of each message posting
  its own handshake.
- Drop the unused routes/session/usage.tsx TUI route (no remaining
  imports) and add the chat-layout badge/header pill styles it was
  gating on.
- Refresh session-utils tests to exercise only source: "computed"
  samples and follow the new first-wins rule.

Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>

* fix(token-throughput-v2): seed settings on hydration, drop dead provider branch

Seed the DisplayTab "Show Token Throughput" Switch on initial load by
mirroring the throughputSettingLoaded message into settings() (same
pattern as chat.shiftTabCyclesVariant). Without this, a persisted-true
setting renders unchecked on first open because the Switch was bound to
settings()["showTokenThroughput"] but no handler ever populated it.

Drop the dead data-source attributes on the per-message and task-header
throughput surfaces now that StepThroughputMetrics.source is narrowed
to "computed" only — the attribute was always the literal string.

Drop the unreachable chat.throughput.badge.provider and
.chat.throughput.badge.tooltip.provider i18n keys across all 20 locales.
The badges no longer branch on source === "provider" since the
provider-source branch is removed (the AI SDK adapter upstream strips
llama.cpp timings before they reach providerMetadata).

Co-Authored-By: Claude <noreply@anthropic.com>

Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>

* fix(token-throughput-v2): drop PP display until llama.cpp wiring lands

PP (prompt-processing rate) has no signal in this build: the AI SDK
adapter upstream strips llama.cpp's `prompt_per_second` before it reaches
providerMetadata, and computeMetrics has nothing else to derive it from.
Ship the TG (text-generation) rate only — the UI no longer renders the
"PP –" placeholder that made the feature look broken.

CLI sidebar drops the PP row; per-message badge and aggregated header
pill both lose the "PP – ·" prefix. The wire shape keeps the optional
prompt field so the follow-up that wires the upstream metadataExtractor
can populate it without another schema bump.

The `throughputLabel` constant on the opencode side and the `formatPP`
helper on the webview side are removed; tests that fabricated prompt
values are pruned to match.

Co-Authored-By: Claude <noreply@anthropic.com>

Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>

* fix(token-throughput-v2): integrate TG into Tokens row, plain-text style

The standalone blue pills read as loud for what is secondary session
info. Move the aggregated TG into the existing Tokens row as another
spanned value (alongside ↑ input, ↑ cache, ↓ output) and restyle the
per-message badge as plain text in descriptionForeground so both surfaces
match the tokens family.

TaskUsage now accepts a `throughput` prop and renders `TG <rate> t/s`
inline in the Summary component when the toggle is on. TaskHeader no
longer emits a standalone [data-slot="task-header-throughput"] element;
its [data-slot="task-header-throughput"] CSS rule is removed. The
throughputText / throughputTooltip memos and the unused formatTG
import are dropped — the values flow straight into TaskUsage.

Co-Authored-By: Claude <noreply@anthropic.com>

Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>

* fix(token-throughput-v2): finish removing memory badge from AssistantMessage

The "Merge origin/main into feat/token-throughput-v2" resolution kept the
throughput branch's memory-badge code (already removed from main by
28d015f8fe), which broke the kilo-ui-contract test and the i18n-keys test.

Drop the dead code: `useMemory`/`MemoryMarkerMeta` imports, `mem`, the
`meta`/`recall`/`fmt`/`count`/`items`/`verbose` createMemos, the `tip`
function, and the `<Show when={mem.enabled() && recall()}>` block. The
file lands at 349 lines (down from 391), matching main + throughput only.

Verified locally:
- i18n-keys + kilo-ui-contract: 53 pass, 0 fail
- Full kilo-vscode suite: failures 138 → 136 (+2 from the two fixes)

Co-Authored-By: Claude <noreply@anthropic.com>

Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>

* fix(token-throughput-v2): finish removing memory badge from AssistantMessage

Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>

* formatting fixes

Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>

* fix(token-throughput-v2): address Marius review comments

- Rename 'TG' to 'Generation speed' in en.ts and add a 'gauge' icon to
  packages/kilo-ui so the per-message badge and the Tokens row show
  '<icon> Generation speed <rate> t/s' instead of the cryptic 'TG <rate>'.
  Centralize the opencode sidebar label in throughputLabel.generation.
- Switch aggregateMetrics (both webview and CLI) to the latest non-empty
  step-finish snapshot so only the most recent assistant turn's generation
  rate is shown rather than a session-wide aggregate. Update tests and
  comments to match.
- Translate the throughput strings in no.ts to Norwegian; mirror the new
  key shape across the other locales (English fallback for untranslated
  strings).

Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>

* fix(token-throughput-v2): close unclosed CSS block and apply prettier formatting

The throughput rebases left a duplicated .vscode-session-turn-diffs
selector and let three files drift from prettier's expectations. Fix
the CSS unclosed-block (which broke the Storybook preview build) and
re-run prettier --write on the touched files.

Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>

* ci: re-run after fixing CSS unclosed-block + prettier drift

Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>

* fix(token-throughput-v2): address kilo-code-bot review

Kilo:
- CRITICAL: Remove the section === '' guard in KiloProvider.ts that
  blocked persistence of every top-level setting key. The throughput
  validator is now redundant, so drop it from throughput-settings.ts.
- WARNING: Reset samples in sidebar-usage.tsx when props.session_id
  changes via a keyed createEffect, so a session switch no longer
  blends step-finish metrics from the previous session and the array
  no longer grows without bound across long-lived plugin instances.
- WARNING: Pass {speed} to language.t for the TaskUsage throughput
  tooltip and reuse the shared formatTG helper instead of reformatting
  the value inline. Drop the dead [data-component='assistant-memory-badge']
  rule whose target component no longer exists in the tree.
- SUGGESTION: Drop redundant guards in model-usage.ts (undefined check
  after Number.isFinite, and the ?? 0 on an already-required number
  field). Use typeof === 'number' for the type narrowing.

* feat(token-throughput-v2): weighted per-turn rate, plain text footer

Address Marius's review of the throughput UI:

Calculation
- Persist per-step timing (start/end/elapsed) on step-start and
  step-finish parts in the session processor.
- Add wire schemas in core/src/v1/session.ts and packages/sdk/openapi.json
  so the new time field round-trips end-to-end.
- Replace the last-wins 'latest step rate' snapshot with a weighted
  aggregate: sum(output + reasoning tokens) / sum(active generation
  duration) across the turn's step-finish parts. Tool execution and
  idle waiting are excluded.
- The CLI sidebar (model-usage.ts) gains the same weighted semantics
  when timing is available, falling back to last-wins otherwise so
  older callers keep working.

Presentation
- Strip the per-message badge to plain muted text (no icon, no label,
  no border). The chip in the upstream action row reads as metadata.
- Move throughput out of the task header Tokens row so each turn owns
  its own value (no flicker across turns, single source of truth).
- Read the throughput memo from the full message parts in the data
  store rather than the chunked row slice, so step-finish in any
  chunk produces the badge.

i18n
- Replace chat.throughput.speed.{label,row,tooltip,tooltip.missing}
  with chat.throughput.tooltip and chat.throughput.tooltip.missing
  across all 19 locale files.

Tests
- Add messageThroughput and sessionThroughput describe blocks
  exercising the weighted aggregate across multiple steps.
- Cover weighted + fallback paths in the CLI aggregateMetrics tests.

* fix(token-throughput-v2): render t/s inline beside copy/feedback buttons

Move the throughput badge from a footer line below the assistant message
into the copy/feedback action row of the text part that carries the copy
button. This avoids the extra vertical space the footer consumed.

Also apply prettier formatting to drifted PR files (i18n line wraps,
TaskHeader/session-utils/test reflows).

* fix(token-throughput-v2): correct changeset package name to @kilocode/cli

* fix(token-throughput-v2): annotate step-start time field with kilocode_change

---------

Co-authored-by: Thomas Brugman <thomas@kilocode.ai>
Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>
Co-authored-by: marius-kilocode <marius@kilocode.ai>
2026-07-23 09:43:13 +00:00
Marius cee5ceee32 Merge branch 'main' into fix-aws-sso-credential-parsing-error 2026-07-23 11:34:15 +02:00
hdcode.dev 8eeaa546ae feat(vscode): add searchable session tab switcher (#12462)
* feat(vscode): add searchable session tab switcher

* Add screenshot

* fix(vscode): label search popover dialogs

* fix(vscode): select first result on Enter in session tab switcher

* fix(ui): wrap kilocode_change marker around Enter fallback block

---------

Co-authored-by: marius-kilocode <marius@kilocode.ai>
2026-07-23 09:08:02 +00:00
marius-kilocode 70396e5f91 fix(dev): preserve AWS profile credential loading 2026-07-23 09:56:37 +02:00
Joshua Lambert 2d16c00dd9 Merge pull request #12459 from Kilo-Org/fix/qwen-late-tool-events
fix(cli): ignore late tool input events
2026-07-22 14:37:05 -04:00
Igor Šćekić e72238a665 feat(cli): accept mobile file attachments in remote sessions (#12394)
* feat(cli): accept mobile file attachments in remote sessions

The mobile client uploads each attachment to R2 and sends a first-class
FilePartInput with a server-issued <uuid>.<ext> basename. The CLI fetches
the file over HTTPS, re-emits it as a data: URL for text / image / PDF, or
writes it to a per-session scratch directory for generic binaries so the
agent's tools can read it.

- Fetches are HTTPS-only, reject redirects, never forward credentials, are
  bounded to 5 MB + 1 byte (partial deleted on overflow), and time out.
- Any per-attachment failure becomes an explanatory text part so the rest
  of the prompt still runs; the send_message ACK is unaffected because
  materialization happens inside the long-running dispatch before prompt().
- Scratch directory (0700 / files 0600) lives under Global.Path.tmp and is
  removed on session deletion and sender dispose. Basenames derive from the
  attachment id + validated extension, never the client-supplied filename.
- The relay heartbeat now advertises capabilities.attachments so the mobile
  app only enables attachments for CLIs that support them.

* fix(cli): secure remote attachment materialization

* chore(cli): remove redundant change markers

* fix(cli): coordinate remote attachment lifetime

* fix(cli): fail closed during attachment cleanup

* fix(cli): track idle attachment cleanup
2026-07-22 17:14:18 +02:00
Kirill Kalishev f41da4e207 Merge pull request #12455 from Kilo-Org/chore/jetbrains-cli-pin-v7.4.15
chore(jetbrains): bump CLI pin to v7.4.15
2026-07-22 11:01:39 -04:00
Josh Lambert e957130df9 chore(cli): annotate upstream divergence 2026-07-22 10:31:09 -04:00
Evgeny Shurakov fe01f53e2b Cloud Agent - Add kilo cloud command for running asynchronous cloud agent tasks (#11849) 2026-07-22 15:48:29 +02:00
Josh Lambert 4850dd1c68 fix(cli): ignore late tool input events 2026-07-22 09:31:09 -04:00
Igor Šćekić 16988a5581 feat(cli): add notify_user push-notification tool (#12392)
* feat(cli): add notify_user push-notification tool

Add a notify_user tool that lets an agent send a push notification to the
user's phone for explicitly requested pings and significant mid-run
milestones. It emits a single agent_notification item over the session's
existing authenticated ingest channel via a new result-bearing
KiloSessions.sendAgentNotification operation with a bounded readiness wait,
returns friendly failure text when the session is not connected, and never
prompts for permission. Provide KiloSessions to the tool-registry graph via
a lazy layer node to satisfy the tool's dependency without eager init.

* chore: retrigger CI and review after GitHub Actions outage

* fix(cli): store the real bootstrap promise for coalescing

trackBootstrap stored the promise from inside the Promise executor, before
the variable was assigned, so bootstrapInflight held undefined and concurrent
create()/sendAgentNotification callers could not coalesce onto the in-flight
bootstrap. Build the outcome promise as a synchronous expression and register
it before any await.

* fix(cli): hide notification tool when remote is disabled
2026-07-22 12:19:50 +00:00
Igor Šćekić 9262f2b49a fix(cli): recover remote session connection that silently dies and never reconnects (#12393)
* fix(cli): bound token and connection attempts with a single fenced retry owner

* fix(cli): bounded heartbeat gather with freshness-fenced attach

* chore: changeset for CLI live reconnect fix

* fix(cli): harden heartbeat gather slot release and connection-close signalling

* fix(cli): ignore late token continuation for a settled connection generation

open() only bailed on `closed` after awaiting getToken(); if the connect-
attempt deadline settled the generation while the token was still pending,
the late continuation would construct and assign a WebSocket for an expired
generation, clobbering the newer generation's live socket. Bail on
`g.settled` too so a settled generation never builds a socket.

Also make the AC2a token-rejection test genuinely exercise rejection (flush
the rejection before the deadline can fire) and add AC3g covering the late-
token continuation.

* fix(cli): fence attach announcements on heartbeat session-id containment

An attach announcement resolved on any fresh heartbeat, even one whose
gathered session list omitted the announced id (getSessions() drops a
session whose per-id lookup fails via Effect.orElseSucceed while the gather
still succeeds). That falsely reported a session as attached when the relay
never received it. Thread an optional requireSessionId through
Connection.heartbeat: an id-gated waiter now resolves only when a fresh
heartbeat whose payload contains that id is actually sent, and is otherwise
requeued for the next fresh cycle (rejecting on connection shutdown).
announce(id) forwards the id; presence heartbeats remain id-agnostic.

Adds AC4a (degraded heartbeat preserves last known-good sessions), AC6d
(id-containment fence), and AC6e (in-flight-cycle waiter rejects on
permanent close).

* ci: retrigger checks after GitHub Actions incident recovery
2026-07-22 13:46:19 +02:00
Igor Šćekić bcff5cb360 feat(cli): emit session queue state for remote clients (#12297)
* feat(cli): emit session queue state for remote clients

* chore: retrigger CI (HttpApi exerciser stuck on a Blacksmith cache/stickydisk hang for 5 consecutive runs on the previous head)

* chore(cli): remove kilocode_change markers from kilo-owned files
2026-07-22 13:42:35 +02:00
marius-kilocode 3d648d7fcd feat: reference past chats with @-mentions 2026-07-22 11:46:10 +02:00
kilo-maintainer[bot] 3572898618 chore: update nix node_modules hashes 2026-07-22 09:38:42 +00:00
Marius 54a9109b46 Merge pull request #12404 from Kilo-Org/marius-kilocode/kilo-opencode-v1.17.5
OpenCode v1.17.5
2026-07-22 11:28:52 +02:00
kilo-maintainer[bot] f210ac596c chore(jetbrains): bump CLI pin to v7.4.15 2026-07-22 09:28:21 +00:00
kilo-maintainer[bot] 13e4259662 release: v7.4.15 v7.4.15 2026-07-22 09:21:25 +00:00
Marius fc5b22fb68 Merge pull request #12454 from Kilo-Org/fix-reload-while-session-running
fix(vscode): show clear warning when reload is blocked by a running session
2026-07-22 10:58:31 +02:00
Marius 2f389f9fb1 fix(vscode): show clear warning when reload is blocked by a running session 2026-07-22 10:53:20 +02:00
marius-kilocode 74ba761c8b Merge remote-tracking branch 'origin/main' into marius-kilocode/kilo-opencode-v1.17.5 2026-07-22 10:30:49 +02:00
marius-kilocode 610f956b76 fix: preserve multi-account auth and Snowflake OAuth
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.
2026-07-22 10:27:09 +02:00
Kirill Kalishev 3cab1bd2d5 Merge pull request #12440 from Kilo-Org/jetbrains/release/v7.0.9
release(jetbrains): v7.0.9
2026-07-21 16:18:23 -04:00
Kirill Kalishev 724473e32f docs(jetbrains): edit changelog for v7.0.9 2026-07-21 16:14:33 -04:00
kilo-maintainer[bot] 05b5e9bcdd release(jetbrains): v7.0.9 2026-07-21 20:05:30 +00:00
Kirill Kalishev 5c7978c202 Merge pull request #12437 from Kilo-Org/feat/jetbrains-rules-settings
feat(jetbrains): add Rules settings page; pin CLI to v7.4.13
jetbrains/v7.0.9
2026-07-21 16:00:15 -04:00
Igor Šćekić 016fa42db9 fix(cli): rewire stalled-stream watchdog test to post-v1.17.4 modules (#12438)
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.
2026-07-21 15:52:56 -04:00
kirillk 3d5ee24ef5 fix(jetbrains): address rules settings PR review
- 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
2026-07-21 15:51:10 -04:00
Kirill Kalishev d016a09e45 Merge branch 'main' into feat/jetbrains-rules-settings 2026-07-21 15:21:35 -04:00
kirillk c7c7d775cd fix(jetbrains): pin CLI to v7.4.13 to repair cloud session history import
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.
2026-07-21 15:11:13 -04:00
kirillk af33eded9e feat(jetbrains): add Rules settings page with instruction files and Claude Code compatibility
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.
2026-07-21 15:01:08 -04:00
Igor Šćekić cd205d857a fix(cli): prevent stalled agent streams (#12249)
* 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.
2026-07-21 18:16:57 +02:00
kilo-maintainer[bot] f206b13196 chore: update nix node_modules hashes 2026-07-21 15:40:05 +00:00
Christiaan Arnoldus 9f7c8e58b1 Merge pull request #12427 from Kilo-Org/cherry-pick/improve-xai-cache-hit-rate
fix: improve xai cache hit rate
2026-07-21 17:17:45 +02:00
Mohammad Javad Naderi 232d7f2c61 fix(script): add worktree mode to annotation check (#11842)
* fix(script): add worktree mode to annotation check

* fix(script): limit worktree annotation check to local changes
2026-07-21 16:31:35 +02:00
marius-kilocode d054f394e4 fix(tui): treat global events as default location for integration refresh
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.
2026-07-21 15:23:25 +02:00
Christiaan Arnoldus 8465c1d749 Merge pull request #12430 from Kilo-Org/fix/routed-model-openrouter
fix(cli): allow openrouter models in routed model resolution
2026-07-21 15:15:28 +02:00