Commit Graph
25270 Commits
Author SHA1 Message Date
Marius 1d6ab47105 Merge pull request #12162 from Kilo-Org/fix-gemini-auth-key-change
fix(cli): explain Gemini API key rejections
2026-07-13 11:53:11 +02:00
Marius 65a0f6646b docs(kilo-docs): exclude Google AI Studio API keys page from link checker (#12163)
The Google AI Studio API keys page (aistudio.google.com/api-keys)
redirects to Google account sign-in for unauthenticated requests, so
lychee sees a 302 and fails the link check. The URL is correct and is
the one Google's own Gemini API key documentation links to, so exclude
it from the link checker like the already-excluded console.cloud.google.com.
2026-07-13 11:39:40 +02:00
Marius d74a04d01a Merge pull request #12092 from Kilo-Org/fix-gpt-reasoning-display
fix: restore GPT-5.6 reasoning summaries
2026-07-13 11:32:21 +02:00
kilo-maintainer[bot] 3d6cbd8f53 chore: update kilo-vscode visual regression baselines 2026-07-13 09:24:55 +00:00
marius-kilocode 1ed710a994 fix(ui): preserve reasoning after incomplete comments 2026-07-13 11:21:38 +02:00
marius-kilocode 3ee91448ee fix(cli): explain Gemini API key rejections 2026-07-13 11:13:39 +02:00
Marius f3abace24d Merge pull request #11837 from mjnaderi/fix-kilo-gateway-login-rate-limit-message
fix(cli): show Kilo Gateway login rate limit message
2026-07-13 10:57:57 +02:00
Marius 92c4b3bfb4 Merge pull request #12151 from Kilo-Org/fix-flaky-test
test(sandbox): stabilize fragmented ClientHello coverage
2026-07-13 10:53:46 +02:00
Marius 857c496f7d chore(script): reconcile team list with active maintainers (#12154)
The hardcoded team list in packages/script/src/index.ts (Script.team)
and its duplicate in script/changelog-github.cjs had drifted apart and
both included accounts no longer in the Kilo-Org. This list is consumed
by script/raw-changelog.ts to strip 'Thanks @user!' attribution for
internal members, so stale entries let departed contributors keep
receiving credit while active ones still get thanked.

Reconcile both copies against the live org-member and repo-collaborator
rosters: remove departed humans, add missing active accounts, keep all
bot/CI accounts, and alphabetize for parity between the two files.
2026-07-13 10:52:43 +02:00
Marius 6cfa52bb7a Merge pull request #12155 from Kilo-Org/feat/vscode-chat-search-supersede
feat(vscode): add in-chat search for the current session
2026-07-13 10:44:58 +02:00
marius-kilocode 54a27c3fc3 chore(script): drop kilo-engineering from team list
It does not author commits, so stripping its attribution from release
notes is unnecessary.
2026-07-13 10:44:44 +02:00
kilo-maintainer[bot] 167c304a4d chore: update kilo-vscode visual regression baselines 2026-07-13 08:35:17 +00:00
Marius d6720d2afe Merge pull request #12028 from sylwester-liljegren/feat/vscode-file-picker-mention
feat(vscode): add file picker to @ mention dropdown
2026-07-13 10:34:00 +02:00
Sylwester Liljegren 064be73fef fix(vscode): strip markdown links from non-JSON MCP/generic tool output
McpTool's formattedOutput() only fences output when it parses as JSON;
non-JSON output (the common case for a tool returning prose or
markdown) is fed straight into the real Markdown renderer, which does
parse [label](url) into a link, hiding the URL half. toolText() was
treating all non-bash tool output the same as bash's (never stripped),
which reintroduced the exact mismatch this PR fixes for JSON-shaped
output on plain-text results. Now mirrors McpTool's own JSON.parse-or-
fallback branching: JSON output stays raw (rendered fenced, literal),
non-JSON output gets the same link stripping as text/reasoning chunks.

(cherry picked from commit e33a1a7ebc)
2026-07-13 10:30:52 +02:00
Sylwester Liljegren fb44bb8dc3 fix(vscode): don't strip markdown link syntax from tool/bash text; revert history-search cap
WARNING: stripMarkdownLinkUrls was applied to tool/bash chunks too.
Bash output is rendered via escapeHtml + syntax highlighting -- never
through Markdown -- and the generic/MCP fallback renderer wraps its
output in a fenced code block before it ever reaches Markdown. Both
show link-like `[x](y)` text literally, so stripping it searched text
that no longer matched what's on screen (e.g. a shell command that
echoes/cats a markdown link, or JSON with bracket+paren sequences).
Stripping is now only applied to text/reasoning chunks, which do go
through the real Markdown renderer.

Reverted the auto-load-history cap/opt-in from the previous commit: a
partial match count while some history remains unsearched can actively
mislead a user into the wrong conclusion, which outweighs the cost of
loading a long session's full history. Search now simply auto-loads
the entire session before reporting a final count/"No results", same
as originally requested. Revisit with a cap or lazy/incremental search
strategy in a follow-up PR if this proves too slow/expensive in
practice on very long sessions.

(cherry picked from commit f0ff4d3066)
2026-07-13 10:30:48 +02:00
Sylwester Liljegren e841aca8f9 fix(vscode): don't strip markdown link syntax from user message text
User messages render via UserMessageDisplay/HighlightedText
(message-part.tsx), which never parses markdown at all -- [label](url)
always shows literally, brackets and all, unlike assistant text/
reasoning/tool content which goes through the real Markdown renderer.
Stripping link URLs there collapsed two genuinely visible literal
occurrences into one. Stripping now only applies to non-user rows.

(cherry picked from commit 097124d7ed)
2026-07-13 10:30:44 +02:00
Sylwester Liljegren b0d19df9b9 fix(vscode): strip markdown link/image URLs before counting search matches
(cherry picked from commit 9487abb538)
2026-07-13 10:30:38 +02:00
Sylwester Liljegren f96771d302 fix(vscode): address chat search review findings from testing round
High: visible tool content (e.g. a todowrite checklist) could be
highlighted in the DOM while the counter still reported "No results"
and navigation was disabled. toolText() previously only indexed
state.title for non-bash tools, independently of what
transcript-search-highlight.ts actually scans in the DOM. Rewrote it
to recursively collect every string leaf from state.input/state.metadata
plus state.output for any tool, so matching and highlighting draw from
one canonical, much more comprehensive notion of "the tool's text"
instead of two divergent ones. read/glob/grep/list remain excluded --
kilo-ui's context-tool-results.tsx confirmed they never render raw
input/output text, even expanded, so including it there would
reintroduce the same class of mismatch for those tools.

High: search only covered the initially-loaded message page (80
messages), silently missing older history in long sessions. MessageList
now auto-requests older pages (session.loadOlderMessages()) while a
search is active with a non-empty query, looping via reactivity on
hasOlderMessages()/loadingOlderMessages() until history is exhausted.
A new searchingHistory state surfaces this to the widget, which shows
"Searching earlier messages..." and withholds a final "No results"
until the whole session has actually been searched (a live match count
still updates progressively as pages load).

Medium: whole-word matching used plain \b, which only treats ASCII
letters/digits/underscore as word characters and silently breaks for
Cyrillic, Arabic, CJK, and similar text. Replaced with Unicode-aware
boundary lookarounds using \p{L}/\p{M}/\p{N} property escapes, with the
`u` flag applied to every compiled pattern.

New chat.search.searchingHistory i18n key added across all 20 locales.

(cherry picked from commit 47d4ebd73b)
2026-07-13 10:30:34 +02:00
Sylwester Liljegren 3d28bfc50e fix(vscode): style No results as neutral text, not an error
(cherry picked from commit d78770d444)
2026-07-13 10:30:31 +02:00
Sylwester Liljegren db9da24a37 feat(vscode): show No results text in chat search when nothing matches
(cherry picked from commit 82bfb6342f)
2026-07-13 10:30:24 +02:00
Sylwester Liljegren d402df2cfe fix(vscode): jump to first match automatically while typing/toggling
(cherry picked from commit e6deb63f32)
2026-07-13 10:30:19 +02:00
Sylwester Liljegren f4f23e1e39 fix(vscode): match search text to error-row rendering for all variants
errorText() previously only matched ErrorDisplay.tsx's default card body
(unwrapped error.data.message). It now mirrors the component's full
Switch/Match classification (parseAssistantError/parseProviderAuthError,
isUnauthorizedPaidModelError/isUnauthorizedPromotionLimitError, and the
same canAuth() gate used to decide whether the provider-auth prompt or
the default card renders), so search text matches whichever variant is
actually shown: paid-model, promotion-limit, provider-auth (including
the ChatGPT oauth copy), or the default unwrapped message.

(cherry picked from commit 7e9a984f08)
2026-07-13 10:30:14 +02:00
Sylwester Liljegren 628ce6da93 fix(vscode): address CI failure and review feedback on chat search
- Wrap StoryProviders in TranscriptSearchProvider - fixes the failing
  Visual Regression check (5 stories threw because TaskHeader/MessageList
  call useTranscriptSearch() unconditionally with no fallback context).
- Reset the whole search widget when the current session changes so
  stale query/matches don't linger across a session switch.
- Search error rows via the same unwrapped error.data.message shown by
  ErrorDisplay, instead of the internal, never-rendered error.name.
- Reorder bash tool search text to description -> command -> output,
  matching the actual DOM order in shell-rolling-results.tsx, so
  occurrence numbering lines up with what gets highlighted.
- Surface invalid regular expressions explicitly instead of leaving them
  indistinguishable from "no matches".
- Track both legs of the chained highlight rAF so cleanup can cancel
  either one, preventing a stray callback from touching state after
  unmount.
- Widen Escape/Enter handling to the whole search widget, not just the
  text input.
- Add an aria-label to the search input and type the search provider's
  children as ParentComponent instead of any.

New chat.search.invalidRegex i18n key added across all 20 locales.

(cherry picked from commit 64dd8e3a2b)
2026-07-13 10:30:11 +02:00
Sylwester Liljegren 7a7c28c271 feat(vscode): add in-chat search for the current session
Add a search widget to the VS Code sidebar and editor-tab chat header.
Clicking the header search icon opens an inline, VS Code-style find bar
with match case, whole word, and regular expression options. Matches are
highlighted across the transcript via the CSS Custom Highlight API, and
next/previous controls step through each occurrence, recentering only
when a match drifts near the viewport edge.

All user-facing strings are localized across the 20 supported locales.

(cherry picked from commit 3f8b4443c3)
2026-07-13 10:30:05 +02:00
Marius f6149e8b1f fix(agent-manager): accept Windows workspace path casing (#12152)
* test(agent-manager): cover Windows local path casing

* fix(agent-manager): accept Windows workspace path casing
2026-07-13 10:29:21 +02:00
marius-kilocode d17041f7a9 chore(script): reconcile team list with active maintainers
The hardcoded team list in packages/script/src/index.ts (Script.team)
and its duplicate in script/changelog-github.cjs had drifted apart and
both included accounts no longer in the Kilo-Org. This list is consumed
by script/raw-changelog.ts to strip 'Thanks @user!' attribution for
internal members, so stale entries let departed contributors keep
receiving credit while active ones still get thanked.

Reconcile both copies against the live org-member and repo-collaborator
rosters: remove departed humans, add missing active accounts, keep all
bot/CI accounts, and alphabetize for parity between the two files.
2026-07-13 10:26:35 +02:00
Ulises Millánandmarius-kilocode 77f7983995 fix(cli): resolve latest CLI release when GitHub latest points to non-CLI tag (#12148)
* fix(cli): resolve latest CLI release when install script hits non-CLI tag

The GitHub releases/latest endpoint can point to non-CLI releases
(e.g., jetbrains/v7.0.4), whose tag prefix doesn't match the existing
version regex. Query the paginated releases endpoint, pick the first
tag starting with 'v', and use that version for both display and the
download URL instead of trusting releases/latest.

Closes #12125

* fix(cli): select stable installer release

---------

Co-authored-by: marius-kilocode <marius@kilocode.ai>
2026-07-13 08:25:31 +00:00
marius-kilocode 76f6002ab7 fix(vscode): use unknown bridge for migration message casts
Direct as-casts from { type: string } to a shape with source/operationId
fail TS2352 under the extension tsconfig (tsgo). Cast through unknown first.
2026-07-13 10:24:55 +02:00
marius-kilocode 6d61b45ddd refactor(vscode): extract legacy-migration message cases out of webview switch
Move the five legacy-migration webview message cases out of the large
onDidReceiveMessage switch into an early-return handler, matching the
existing routeEarlyMessage/handleMemoryMessage pattern. The switch's
async arrow function exceeded the complexity cap of 150 after the
recent main merge; extracting these cases lowers it below the cap.
2026-07-13 10:19:29 +02:00
Marius 411125ea39 Merge branch 'main' into feat/vscode-file-picker-mention 2026-07-13 10:10:28 +02:00
Thomas Brugman bf2b33b87b fix(cli): use filePath in Gemini prompt 2026-07-13 09:24:23 +02:00
marius-kilocode 135c2c4e96 test(sandbox): stabilize fragmented ClientHello coverage 2026-07-13 08:53:26 +02:00
kilo-maintainer[bot] 3cb82a0907 chore: update nix node_modules hashes 2026-07-12 05:54:36 +00:00
Marius b8e07791dd Merge pull request #12075 from Kilo-Org/network-domain-exceptions
feat: allow sandbox network destinations
2026-07-12 07:39:34 +02:00
Kirill Kalishev 619b595f4b Merge pull request #12119 from Kilo-Org/jetbrains/release/v7.0.4
release(jetbrains): v7.0.4
2026-07-10 18:44:57 -04:00
Kirill Kalishev c63a0eae90 docs(jetbrains): edit changelog for v7.0.4 2026-07-10 18:36:34 -04:00
kilo-maintainer[bot] cc8f66bdde release(jetbrains): v7.0.4 2026-07-10 22:29:49 +00:00
Kirill Kalishev 53465232e4 Merge pull request #12118 from Kilo-Org/relic-king
fix(jetbrains): stop orphaned CLI on Windows (app-close deadlock + kill-on-close job)
jetbrains/v7.0.4
2026-07-10 18:25:48 -04:00
kirillk 0ff7a3be3e fix(jetbrains): kill CLI on Windows via kill-on-close job to prevent orphan
On Windows the spawned `kilo serve` process could outlive the IDE and then
block the next IDE launch (a surviving child inherits IDE handles). The
app-close teardown also deadlocked: closeForShutdown() closed the CLI's
streams before killing it, and on Windows closing a process stream while a
reader thread is mid-read hangs until the process dies — so IDE shutdown
blocked, the JVM stayed alive, the kill-on-close job never fired, and the
CLI lingered until killed by hand (which is what unblocked restart).

- Bind the CLI tree to the IDE via a Windows Job Object with
  JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE, so the OS terminates the tree when
  the IDE exits for any reason (clean exit, halt(), crash, force-kill).
- Reorder app-close teardown to kill first, then close streams
  (shutdownTree), removing the deadlock. Order is regression-tested.
- Map the Job Object kernel32 functions directly (the IDE's bundled JNA
  omits them) using only the platform's core JNA; JNA is not bundled to
  avoid a jnidispatch collision. Guard on JnaLoader.isLoaded() before any
  Native access and release handles via try/finally ownership.
- Best-effort / Windows-only: assign() returns null off-Windows, without
  JNA, on non-64-bit, or on any native failure, so callers keep the
  existing process-tree kill. No CLI changes.

Adds diagnostics on the setup/app-close paths, a Windows-gated integration
test, and ordering regression tests.

Known limitation: kill-on-close also terminates `persistent=true`
background processes on Windows; full support needs a coordinated CLI
breakaway change (CREATE_BREAKAWAY_FROM_JOB + JOB_OBJECT_LIMIT_BREAKAWAY_OK).
2026-07-10 18:03:23 -04:00
Kirill Kalishev ec20023845 Merge pull request #12115 from Kilo-Org/jetbrains/release/v7.0.3
release(jetbrains): v7.0.3
2026-07-10 15:00:52 -04:00
Kirill Kalishevandkilo-code-bot[bot] 0dbec200b8 Update packages/kilo-jetbrains/CHANGELOG.md
Co-authored-by: kilo-code-bot[bot] <240665456+kilo-code-bot[bot]@users.noreply.github.com>
2026-07-10 14:52:29 -04:00
Kirill Kalishevandkilo-code-bot[bot] ce234e5d73 Update packages/kilo-jetbrains/CHANGELOG.md
Co-authored-by: kilo-code-bot[bot] <240665456+kilo-code-bot[bot]@users.noreply.github.com>
2026-07-10 14:52:19 -04:00
Kirill Kalishev 6ab1d8b7b8 docs(jetbrains): edit changelog for v7.0.3 2026-07-10 14:44:45 -04:00
kilo-maintainer[bot] 015c614488 release(jetbrains): v7.0.3 2026-07-10 18:37:13 +00:00
Kirill Kalishev 56c5b7fedf Merge pull request #12104 from Kilo-Org/goldenrod-butternut
fix(jetbrains): show revert progress inline
jetbrains/v7.0.3
2026-07-10 14:31:39 -04:00
Kirill Kalishev 12fd290d4d Merge pull request #12105 from Kilo-Org/plan-address-issue-12048
fix(jetbrains): stop CLI on app close
2026-07-10 14:31:10 -04:00
kirillk 06ac6d90a4 fix(jetbrains): treat killed orphan zombies as exited in tree-kill test
The process-tree kill test flaked on Linux CI ("child still alive"): a
SIGKILLed orphan reparents to init and lingers as an unreaped zombie that
ProcessHandle still reports alive (onExit never fires for a non-child), so the
kill worked but was unobservable. The test now treats a zombie ('Z' in /proc)
or already-reaped process as exited, with an isAlive fallback off Linux.

Also simplify confirmKilled to wait only on the tracked parent (our real
child, reliably reaped) and report descendants best-effort, so wait=true
shutdown no longer blocks on an orphan exit it cannot observe.
2026-07-10 14:14:14 -04:00
kirillk af99c2b134 test(jetbrains): dispose ignores late SSE callbacks without reconnecting
Locks in the disposal terminal-state guarantee (R5): after dispose(), a late SSE onClosed/onFailure with a stale source must not resurrect the connection or schedule a reconnect. Deterministic — drives the listener directly, no sleeps.
2026-07-10 13:50:14 -04:00
kirillk 1fe08892f0 fix(jetbrains): defer turn state across revert instead of dropping it
Address review: guarding TurnOpen/TurnClose/status with revertOp dropped
the transitions entirely, so a turn that started just before a rollback
could leave the prompt idle while the server turn was still active. Record
the underlying turn/status transition in revertDeferred while the revert is
held and reconcile it when the operation releases: an aborted turn releases
to Idle, a still-active turn releases back to Busy/Retry/Offline. Failed
reverts still surface the error explicitly.
2026-07-10 13:49:29 -04:00
kirillk e0bfed308c fix: harden Kilo CLI shutdown and prevent orphaned processes
Confirm process-tree exit after SIGKILL on the non-Windows kill path, and
escalate SIGTERM to SIGKILL on the shutdown-hook (no-wait) path so a
SIGTERM-ignoring tree is not orphaned on JVM exit. Deflake the process-tree
kill test by capturing both children deterministically and add coverage for
the no-wait escalation.

Make JetBrains IDE app-close teardown non-blocking: send SIGTERM and return,
letting the JVM shutdown hook confirm exit, so quitting the IDE no longer
stalls the EDT for up to several seconds. Stop plugin-unload teardown from
waiting on the lifecycle mutex behind an in-flight download.

Add a parent-death watchdog to `kilo serve`: the VS Code extension and
JetBrains plugin pass their PID via KILO_PARENT_PID and the server exits when
that process disappears, covering hard client kills where no signal or
shutdown hook runs.
2026-07-10 13:40:30 -04:00