Commit Graph

7112 Commits

Author SHA1 Message Date
Christiaan Arnoldus 2d2cf1f708 Merge pull request #8263 from VastCosmic/fix/openai-compat-reasoning-params
fix: gate OpenAI Responses API params for openai-compatible providers
2026-05-07 14:20:50 +02:00
Marius 98f5f65c1a Support global and project indexing toggles (#9993)
* fix: support global indexing enablement

* chore: update kilo-vscode visual regression baselines

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-07 14:15:48 +02:00
Mark IJbema 361fea31ec Merge pull request #9978 from Kilo-Org/markijbema/kilo-opencode-v1.14.33
Upstream merge v1.14.33
2026-05-07 11:56:06 +02:00
Marius 3095efcc4c fix(vscode): restore inline tool diffs (#9688)
* fix(vscode): restore inline tool diffs

* fix(vscode): render tool patches in kilo ui

* style: format long regex assignments and add change marker comment

Reformat multi-line regex match assignments in kilo-ui-contract test
to satisfy line length limits, and annotate the `contents(diff)` call
in session-diff with a kilocode_change tracking comment.

* fix(kilo-vscode): append trailing newlines to expected diff content assertions

Update test expectations in diff-session-source to include trailing
newlines in before/after content, matching actual file content behavior.

* fix(vscode): guard empty-patch diffs in session turn accordion

Match diff-session-source.ts:99 behavior by short-circuiting contents()
when the patch is empty (binary or summarized files), so the accordion
content stays empty instead of rendering a confusing whitespace-only
diff.

---------

Co-authored-by: Imanol Maiztegui <imanol.mzd@gmail.com>
2026-05-07 11:01:47 +02:00
Mark IJbema a2bb05726f Merge remote-tracking branch 'origin/main' into markijbema/kilo-opencode-v1.14.33 2026-05-07 10:44:08 +02:00
Mark IJbema 279b604537 fix(cli): restore external_directory whitelist in explore patch
Upstream 2283979199 (Preapprove agent tmp directory access) extended the
agent.ts whitelistedDirs with Global.Path.tmp/*, and the new v1.14.33 test
asserts tmp/agent-work -> allow on the explore agent. Kilo's patchAgents
replaces the whole explore permission and had only Truncate.GLOB in its
external_directory block, so both /some/other/path (expected ask) and
tmp/agent-work (expected allow) resolved to deny via the outer '*':'deny'
catch-all (findLast picks it over any defaults external_directory rule).

Commit d2e21c5006 tried to fix this by dropping the '*':'ask' on the
assumption that defaults already provided it — that rationale was wrong,
since defaults' rules come before the patch's catch-all in the merged
ruleset. Mirror upstream's inline shape instead: thread whitelistedDirs
through to patchAgents and rebuild the explore external_directory as
{ '*':'ask', ...whitelistedDirs -> 'allow' }, matching what upstream's
explore does natively.
2026-05-07 10:09:02 +02:00
Mark IJbema a1b0923a3c test(cli): rewrite InstanceStore ALS test to match Kilo contract
Upstream's v1.14.33 test asserts Instance.current throws during Effect init
(ALS not installed around init). Commit d2e21c5006 intentionally inverts
that: Kilo wraps init in the Instance ALS so KilocodeBootstrap — and the
KiloIndexing.init that it forkDetaches — can read Instance.directory.
Rewrite the test to assert Kilo's contract instead of restoring upstream
behaviour.
2026-05-07 10:07:49 +02:00
Josh Holmer c1ea8100e1 fix(core): ensure user permission overrides apply correctly (#9975) 2026-05-07 09:29:26 +02:00
Josh Lambert bef0183738 fix(vscode): close runtime telemetry consent gap with the CLI
The previous `watchTelemetryState` fix updated the webview UI in real
time but left the CLI subprocess's PostHog client stuck on its
spawn-time `KILO_TELEMETRY_LEVEL` value. A user who started VS Code
with telemetry off and toggled it on at runtime saw the thumbs UI
appear (good) but every webview event was silently dropped at the
CLI's `Client.capture()` gate (bad).

Add a runtime sync channel:

- New `POST /telemetry/setEnabled` Hono route on the CLI server that
  calls `Telemetry.setEnabled(enabled)` to flip the `posthog-node`
  client's opt state.
- New `TelemetryProxy.setEnabled(enabled)` method that POSTs to it,
  using the same fire-and-forget pattern as `capture`.
- Extension calls `telemetry.setEnabled(vscode.env.isTelemetryEnabled)`
  immediately after `telemetry.configure(...)` on every `connected`
  state change, so a freshly-spawned CLI gets corrected even when its
  spawn-time env var is stale.
- Extension subscribes to `vscode.env.onDidChangeTelemetryEnabled` to
  forward runtime consent changes to the CLI as they happen.

All three changes live in Kilo-owned files (the route is already a
`kilocode_change - new file`, and the extension is Kilo-only). Zero
upstream OpenCode merge surface.

Closes #9872 fully (the previous `d67c5e307c` covered only the webview
UI).
2026-05-06 23:29:55 -04:00
Josh Lambert 363e337ca8 refactor: move feedback additions out of upstream-shared files
Addresses review feedback: Kilo-specific additions belong in Kilo-owned
packages so the diff against upstream OpenCode stays minimal.

- Icons: move thumbs-up/-down/-up-filled/-down-filled paths from
  packages/ui/src/components/icon.tsx into packages/kilo-ui's icon
  registry. Extend the kilo-ui Icon registry to carry per-icon viewBox
  (Heroicons thumbs are 20x20; existing Kilo icons are 16x16). Replace
  packages/kilo-ui/src/components/icon-button.tsx (previously a re-export
  of @opencode-ai/ui/icon-button) with a local implementation that
  uses the kilo-ui Icon so the new names resolve.

- i18n: move the three feedback strings (helpful, notHelpful,
  clearRating) from each of 19 packages/ui/src/i18n/<locale>.ts files
  into the corresponding packages/kilo-i18n/src/<locale>.ts. The
  webview's language.tsx already merges kilo-i18n on top of upstream,
  so the runtime keys remain available.

- TUI: extract submitFeedback from
  packages/opencode/src/cli/cmd/tui/routes/session/index.tsx into a
  new Kilo-owned helper at
  packages/opencode/src/kilocode/cli/cmd/tui/feedback.ts. The session
  route now imports and invokes it, passing { toast, session, messages }.
  Also tightens the Kilo Gateway gate from startsWith("kilo") to
  === "kilo" to match the equivalent fix in the webview.
2026-05-06 23:29:55 -04:00
Josh Lambert 0eab152b25 fix: use <leader>= for thumbs-up keybind and wrap story providers
- Replace <leader>+ with <leader>= in messages_feedback_up: the TUI
  parser normalizes <leader> to 'leader+' and splits on '+', producing
  an empty key name for '<leader>+' so the binding never fires. The
  = key sits on the same physical key as + on most layouts, pairs
  visually with <leader>-, and parses to a real key name.
- Wrap StoryProviders with FeedbackProvider so stories that render
  VscodeSessionTurn (e.g. Diff Summary Collapsed) don't throw
  'useFeedback must be used within a FeedbackProvider' under
  Storybook visual regression.
- Sync changeset and docs page to mention the new keybind.
2026-05-06 23:28:50 -04:00
Josh Lambert dcaccf3865 feat: per-message thumbs up/down feedback
Adds thumbs up/down buttons next to the copy button on every assistant
message in the VS Code sidebar, and <leader>+/<leader>- keybinds in the
TUI. UI state is in-memory only — ratings reset on reload / session
switch. Persistence can be added later without changing the telemetry
contract.

Events are sent to PostHog via the existing telemetry pipeline. For
Kilo Gateway turns the payload includes session and message IDs so
feedback can be correlated against gateway logs; for direct providers
those IDs are omitted since we cannot correlate them to upstream data.
2026-05-06 23:28:50 -04:00
Mark IJbema 0c1be058e3 fix(cli): skip Workspace.sessionRestore tests
Both tests rely on JS-level spies that the upstream Workspace refactor bypasses:

1. spyOn(globalThis, "fetch") doesn't intercept anymore. The Effect FetchHttpClient layer holds fetch as a fiber-ref with defaultValue: () => globalThis.fetch, captured at fiber start. The spy descriptor isn't observed through that ref — calls go to the original fetch and produce Transport errors against workspace.test.

2. spyOn(SyncEvent, "replayAll") spies the module-level wrapper. Upstream's Workspace.Service now yields SyncEvent.Service inside the layer and calls sync.replayAll(events) on the Service directly, never touching the module-level export.

Restoring coverage requires injecting Effect-side mock layers (custom HttpClient + SyncEvent.Service). Out of scope for the merge resolution. Tracked for follow-up.
2026-05-06 22:36:44 +02:00
Mark IJbema 8cdfaea017 fix(cli): skip HttpApi JSON parity tests
Two structural divergences make the upstream-added parity test unrunnable on Kilo:

1. Effect's HttpApi runtime emits 'field: null' for Schema.optional() values when the source data has the property as undefined. Hono uses JSON.stringify which omits undefined keys. Kilo-specific Model fields (ai_sdk_provider, prompt, recommendedIndex, isFree) and Command fields (agent, model, subtask) all hit this.
2. Reading /config twice in sequence (legacy then httpapi) returns different defaults as Kilo's ConfigService cache mutates between calls.

The test is upstream-added; opencode's schema doesn't carry these extra fields, so it doesn't trip the divergence. Skip until either Kilo migrates the affected schemas to NullOr (changing the public surface) or the parity test learns to ignore Kilo-specific fields.
2026-05-06 22:34:04 +02:00
Mark IJbema d2e21c5006 fix(cli): address CI test failures
- InstanceStore: run Instance.provide init inside the ALS context so KilocodeBootstrap (and any forkDetach work it spawns like KiloIndexing.init) can read Instance.directory. Upstream refactor moved init out of the ALS scope; kilo-main's pre-merge Instance.provide wrapped it. Without this, KiloIndexing.init silently fails with "No context found for instance".
- kilocode/agent: thread worktree through planGuard/patchAgents instead of reading Instance.worktree at agent state construction time. Agent state is built inside Effect (no ALS) via InstanceState.make — reading the ALS-backed Instance.worktree there crashed under the new architecture.
- kilocode/agent: drop the "*": "ask" from explore external_directory — defaults already provides it, and redefining here overwrites the tmp/skill allowlist via findLast().
- test/server/httpapi-instance.test.ts: revert the ported Hono-bridge tests. Upstream put the same tests in httpapi-instance.legacy.test.ts (renamed file); the port duplicated them.
- test/server/httpapi-instance.legacy.test.ts: mark the catalog test test.skip with Kilo's original rationale (/agent 500s via the bridge; the bridge is not enabled in any production client).
- test/server/httpapi-ui.test.ts: delete. Tests upstream's proxy-to-app.opencode.ai fallback that Kilo intentionally removed (src/server/routes/ui.ts kilocode_change).
- test/server/httpapi-raw-route-auth.test.ts: basic("opencode", ...) → basic("kilo", ...) to match the Kilo username default.
- test/provider/models.test.ts: skip describe block. Upstream tests assert raw-fixture passthrough but Kilo's ModelsDev.get() filters/injects providers based on Config.get(), which needs an Instance context the test doesn't provide.
2026-05-06 22:25:16 +02:00
Mark IJbema 71bb5a1253 fix(cli): use established double-cast for PromptInput in HttpApi handler
Replace 'as SessionPrompt.PromptInput' with 'as unknown as SessionPrompt.PromptInput' to match the pre-existing pattern in the legacy Hono handler (instance/session.ts:901,936). The single cast was rejected by TypeScript because the schema-derived ctx.payload has readonly arrays while Kilo's PromptInput override declares parts as mutable PartInputUnion[]. The double cast is the established Kilo workaround for this readonly→mutable mismatch and keeps the Kilo diff vs upstream minimal.
2026-05-06 21:58:47 +02:00
Mark IJbema 5f5853a2e3 fix: align Kilo source/tests with v1.14.33 API renames
Mechanical follow-up to the v1.14.33 merge:

- src/server/routes/ui.ts: remove dead proxy fallback (proxy/createHash/csp were intentionally commented out by Kilo; the Effect/Promise paths still referenced them)
- src/kilocode/{plan-followup,session/prompt}.ts: pass Instance.current to Session.plan(input, instance)
- src/server/routes/instance/httpapi/handlers/session.ts: cast PromptPayload spread to PromptInput (readonly→mutable schema/runtime mismatch)
- src/plugin/index.ts: cast external @opencode-ai/plugin auth plugins through unknown to bridge to local @kilocode/plugin types
- script/build.ts: drop duplicate sourcemap key (Kilo's release-aware version wins)
- test/kilocode/indexing-{startup,worktree}.test.ts: switch from Instance.disposeAll/InstanceBootstrap-as-effect to disposeAllInstances/getBootstrapRunEffect
- test/kilocode/model-cache-org.test.ts: convert Instance.provide init from async fn to Effect
- test/kilocode/kilo-loader-auth.test.ts: drop ModelsDev.Data.reset() (no longer exists)
- test/kilocode/plan-exit-detection.test.ts, plan-followup.test.ts: pass Instance.current to Session.plan
- test/kilocode/{plan-followup,session-list}.test.ts: replace Session.list() with AppRuntime.runPromise(Session.Service.use((svc) => svc.list()))
2026-05-06 21:53:19 +02:00
Mark IJbema 1ea9ad2af0 resolve merge conflicts 2026-05-06 21:32:26 +02:00
Catriel Müller f40970557f refactor: renegare sdk 2026-05-06 14:26:06 -03:00
Catriel Müller 7bb9914a06 refactor: update implementation 2026-05-06 14:01:53 -03:00
Catriel Müller 622e1263d2 refactor: address comments 2026-05-06 14:01:53 -03:00
Catriel Müller 4aedc1b47f fix: ulid 2026-05-06 14:01:53 -03:00
Catriel Müller 98866740af feat: kiloclaw chat rework 2026-05-06 14:01:51 -03:00
Marius e5e9d0ba37 Delete custom providers from config (#9921)
* fix: delete custom providers from config

* fix: clear project custom provider config
2026-05-06 17:12:23 +02:00
Marian Alexandru Alecu b1da38e9ac Merge branch 'main' into fix/plan-mode-mkdir-recursive-onedrive-9755 2026-05-06 14:50:22 +03:00
VastCosmic 7f8d2911bd fix: annotate OpenAI responses params guard 2026-05-06 19:40:50 +08:00
VastCosmic 6c8e269861 Merge branch 'main' into fix/openai-compat-reasoning-params 2026-05-06 19:39:26 +08:00
Marian Alexandru Alecu f4f5a001ce Merge pull request #9915 from Kilo-Org/fix/compact-thinking-level
fix(cli): preserve variant on compact
2026-05-06 14:38:20 +03:00
Alex Alecu b537c6191f chore(review): merge main 2026-05-06 14:05:01 +03:00
VastCosmic eede3e46c8 fix: minimize OpenAI responses params conflict resolution 2026-05-06 18:36:22 +08:00
Christiaan Arnoldus fb3438556e Remove Kilo-specific claude code header
Can't imagine this makes sense
2026-05-06 12:21:32 +02:00
Mark IJbema a77843cbab refactor: kilo compat for v1.14.33 2026-05-06 12:13:06 +02:00
VastCosmic 9f81004c2b fix: resolve OpenAI responses params merge conflicts 2026-05-06 18:06:50 +08:00
Mark IJbema 82fc494cdd Merge pull request #9911 from Kilo-Org/markijbema/kilo-opencode-v1.14.30
Merge opencode v1.14.30
2026-05-06 11:20:42 +02:00
kilo-maintainer[bot] b1349843c8 release: v7.2.42 2026-05-06 09:05:30 +00:00
Alex Alecu bd6bbdddf3 style(cli): use marker block 2026-05-06 11:01:50 +03:00
Mark IJbema f3efadfe62 Merge branch 'main' into markijbema/kilo-opencode-v1.14.30 2026-05-06 09:48:59 +02:00
Mark IJbema aa59e70660 test(cli): fix TUI sync provider setup 2026-05-06 09:22:21 +02:00
kiloconnect[bot] 1a3a53f881 Merge remote-tracking branch 'origin/main' into fix/encoding-flat-exports
# Conflicts:
#	packages/opencode/src/kilocode/encoding.ts
2026-05-06 07:01:29 +00:00
Christiaan Arnoldus d0d5296e6d Merge pull request #9920 from Kilo-Org/simplify-bom-detection
refactor(cli): dedupe BOM byte sequences in encoding module
2026-05-06 08:58:12 +02:00
Christiaan Arnoldus 3f968d00b7 Merge pull request #9923 from Kilo-Org/chore/replace-jschardet-with-chardet
chore(cli): replace jschardet with chardet
2026-05-06 08:57:16 +02:00
Mark IJbema 1fcd9a6a40 Merge branch 'main' into markijbema/kilo-opencode-v1.14.30 2026-05-06 08:53:54 +02:00
Mark IJbema 8d63212fb9 Merge pull request #9908 from Kilo-Org/catrielmuller/test-stability
test(cli): stabilize flaky unit test CI
2026-05-06 08:45:37 +02:00
Catriel Müller f3e156cc96 fix: fix test on windows 2026-05-05 16:30:24 -03:00
Mark IJbema 05d5061653 fix(cli): align HttpApi auth default with Hono and skip un-migrated parity tests
The HttpApi authorization middleware defaulted the username to
"opencode", while the Hono AuthMiddleware already defaulted to "kilo"
(kilocode_change). The parity tests added by upstream in
packages/opencode/test/server/httpapi-sdk.test.ts exposed the
inconsistency. Align the HttpApi middleware to also default to "kilo"
and update the pre-existing basic-auth test creds that hit it.

Two new httpapi-sdk parity tests also hit Kilo overlay routes
(/config/providers, /agent) that aren't yet wired onto the Effect
HttpApi bridge, returning 500. Skip those two with kilocode_change
markers pointing at the same "migrate Kilo overlay routes onto the
HttpApi bridge" follow-up the existing httpapi-bridge.test.ts comment
references.
2026-05-05 21:23:09 +02:00
Catriel Müller 8002771629 fix: fix flasky test 2026-05-05 15:58:37 -03:00
Catriel Müller 4b03814092 refactor: enabled skiped test 2026-05-05 14:44:11 -03:00
Josh Holmer 520922ff39 fix(indexing): prevent indexing home directory when no project is open (#9928) 2026-05-05 18:46:40 +02:00
Josh Holmer 914bbdfd05 fix(core): restore Skill tool as allow by default (#9924) 2026-05-05 18:21:48 +02:00
kiloconnect[bot] 2c90fa8945 fix(cli): remove redundant per-line kilocode_change markers
The three lines are already inside a kilocode_change start/end block,
so the individual line markers are unnecessary.
2026-05-05 16:21:27 +00:00