Repository navigation
chore(upstream): sync v2.1.0 (9d90d892dcb) - #15284
Conversation
Co-authored-by: rekram1-node <rekram1-node@users.noreply.github.com>
Co-authored-by: dajiaohuang <mikewushuwen@outlook.com>
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
…vailable (#55852) Co-authored-by: rekram1-node <rekram1-node@users.noreply.github.com> Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
Co-authored-by: Daniel Smolsky <dannysmo@gmail.com>
…55871) Co-authored-by: argszero <argszero@users.noreply.github.com> Co-authored-by: Tarquinen <78942835+Tarquinen@users.noreply.github.com>
…592) Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
…s (#54486) Co-authored-by: kimnamu <kimnamu@users.noreply.github.com>
… (#57166) Co-authored-by: R44VC0RP <89211796+R44VC0RP@users.noreply.github.com> Co-authored-by: vprdev <mail@alanrice.me>
…7239) Co-authored-by: rekram1-node <63023139+rekram1-node@users.noreply.github.com>
…s (#57255) Co-authored-by: rekram1-node <63023139+rekram1-node@users.noreply.github.com>
…ithout coercion, skip flatMap holes, and truncate fractional radixes (#57285) Co-authored-by: r266-tech <r266-tech@users.noreply.github.com> Co-authored-by: sdivyanshu90 <divyanshu74.80@gmail.com> Co-authored-by: icearia0219 <133481415+icearia0219@users.noreply.github.com>
# Conflicts: # .github/actions/setup-bun/action.yml # .github/workflows/deploy-changelog.yml # .github/workflows/deploy-files.yml # .github/workflows/deploy-posts.yml # .github/workflows/deploy-update.yml # .github/workflows/deploy-www.yml # .github/workflows/deploy.yml # .github/workflows/models-snapshot.yml # .github/workflows/nix-hashes.yml # .github/workflows/publish.yml # .github/workflows/test.yml # bun.lock # infra/app.ts # infra/console.ts # packages/app/AGENTS.md # packages/app/README.md # packages/app/component-tests/composer.spec.ts # packages/app/e2e/regression/command-palette.spec.ts # packages/app/e2e/regression/mobile-timeline-scroll.spec.ts # packages/app/e2e/regression/review.spec.ts # packages/app/e2e/regression/session-location-sync.spec.ts # packages/app/e2e/regression/session-summary.spec.ts # packages/app/e2e/regression/side-panels.spec.ts # packages/app/e2e/regression/subagent-child-navigation.spec.ts # packages/app/e2e/regression/tabs.spec.ts # packages/app/e2e/regression/timeline-cache.spec.ts # packages/app/e2e/regression/whats-new.spec.ts # packages/app/e2e/tsconfig.json # packages/app/e2e/utils/prompt-motion.ts # packages/app/e2e/utils/timeline.ts # packages/app/package.json # packages/app/playwright.config.ts # packages/app/src/composer/dropzone.tsx # packages/app/src/home/projects/controller.tsx # packages/app/src/index.css # packages/app/src/new-session/workspace/selector.tsx # packages/app/src/providers/models/models.tsx # packages/app/src/providers/models/select-dialog.tsx # packages/app/src/providers/models/unpaid.tsx # packages/app/src/runtime/extension/side-region.tsx # packages/app/src/session/composer/location-missing.tsx # packages/app/src/session/route.tsx # packages/app/src/session/screen-layout.ts # packages/app/src/session/screen.tsx # packages/app/src/session/timeline/observe-element-offset.test.ts # packages/app/src/session/timeline/observe-element-offset.ts # packages/app/test-browser/playwright-config.test.ts # packages/app/tsconfig.json # packages/cli/package.json # packages/console/app/package.json # packages/console/app/public/robots.txt # packages/console/app/script/generate-sitemap.ts # packages/console/app/src/app.tsx # packages/console/app/src/component/email-signup.tsx # packages/console/app/src/component/faq.tsx # packages/console/app/src/component/go-models.ts # packages/console/app/src/component/go-plan-chart.tsx # packages/console/app/src/component/header.tsx # packages/console/app/src/component/limits-graph.tsx # packages/console/app/src/config.ts # packages/console/app/src/context/language.tsx # packages/console/app/src/entry-server.tsx # packages/console/app/src/i18n/ar.ts # packages/console/app/src/i18n/br.ts # packages/console/app/src/i18n/da.ts # packages/console/app/src/i18n/de.ts # packages/console/app/src/i18n/en.ts # packages/console/app/src/i18n/es.ts # packages/console/app/src/i18n/fr.ts # packages/console/app/src/i18n/it.ts # packages/console/app/src/i18n/ja.ts # packages/console/app/src/i18n/ko.ts # packages/console/app/src/i18n/no.ts # packages/console/app/src/i18n/pl.ts # packages/console/app/src/i18n/ru.ts # packages/console/app/src/i18n/th.ts # packages/console/app/src/i18n/tr.ts # packages/console/app/src/i18n/uk.ts # packages/console/app/src/i18n/zh.ts # packages/console/app/src/i18n/zht.ts # packages/console/app/src/lib/aws.ts # packages/console/app/src/lib/enterprise.ts # packages/console/app/src/lib/language.ts # packages/console/app/src/middleware.ts # packages/console/app/src/routes/brand/index.css # packages/console/app/src/routes/brand/index.tsx # packages/console/app/src/routes/changelog/index.tsx # packages/console/app/src/routes/docs/[...path].ts # packages/console/app/src/routes/docs/index.ts # packages/console/app/src/routes/download/index.css # packages/console/app/src/routes/download/index.tsx # packages/console/app/src/routes/enterprise/index.tsx # packages/console/app/src/routes/go/index.tsx # packages/console/app/src/routes/index.tsx # packages/console/app/src/routes/zen/index.tsx # packages/console/app/src/style/index.css # packages/console/app/test/consoleMarketing.test.ts # packages/core/package.json # packages/core/src/plugin/sdk.ts # packages/desktop/AGENTS.md # packages/desktop/README.md # packages/desktop/package.json # packages/desktop/scripts/dev.ts # packages/desktop/src/main/lifecycle/configure.ts # packages/desktop/src/main/service/background-service.ts # packages/function/package.json # packages/function/src/api.ts # packages/gui-extensions/AGENTS.md # packages/gui-extensions/package.json # packages/gui-extensions/src/file/artifact-view.tsx # packages/gui-extensions/src/file/list.tsx # packages/gui-extensions/src/file/tree-v2.tsx # packages/gui-extensions/src/microsoft-office/worker-rpc.fixture.ts # packages/gui-extensions/src/microsoft-office/worker-rpc.test.ts # packages/gui-extensions/src/terminal/panel.tsx # packages/gui-extensions/src/updater/main.ts # packages/gui-extensions/src/updater/platform.ts # packages/session-ui/component-tests/tool-group.spec.ts # packages/session-ui/package.json # packages/session-ui/src/message/message-content.tsx # packages/session-ui/src/storybook/current-session-fixtures.ts # packages/session-ui/src/timeline/mermaid.stories.tsx # packages/session-ui/src/timeline/rows-current.test.ts # packages/session-ui/src/timeline/timeline-row.stories.tsx # packages/session-ui/src/tools/tool-group.stories.tsx # packages/session-ui/src/tools/tool-renderer.tsx # packages/stats/app/package.json # packages/stats/app/test/model-catalog.test.ts # packages/stats/core/package.json # packages/stats/core/src/domain/inference.test.ts # packages/stats/core/src/domain/model-normalization.ts # packages/stats/server/package.json # packages/storybook/.storybook/main.ts # packages/storybook/.storybook/preview.tsx # packages/storybook/playwright/README.md # packages/storybook/playwright/config.ts # packages/storybook/playwright/story.ts # packages/tui/package.json # packages/web/package.json # packages/web/src/content/docs/agents.mdx # packages/web/src/content/docs/ar/agents.mdx # packages/web/src/content/docs/ar/commands.mdx # packages/web/src/content/docs/ar/config.mdx # packages/web/src/content/docs/ar/custom-tools.mdx # packages/web/src/content/docs/ar/permissions.mdx # packages/web/src/content/docs/ar/plugins.mdx # packages/web/src/content/docs/ar/tools.mdx # packages/web/src/content/docs/ar/tui.mdx # packages/web/src/content/docs/bs/agents.mdx # packages/web/src/content/docs/bs/commands.mdx # packages/web/src/content/docs/bs/config.mdx # packages/web/src/content/docs/bs/custom-tools.mdx # packages/web/src/content/docs/bs/permissions.mdx # packages/web/src/content/docs/bs/plugins.mdx # packages/web/src/content/docs/bs/tools.mdx # packages/web/src/content/docs/bs/tui.mdx # packages/web/src/content/docs/cli.mdx # packages/web/src/content/docs/commands.mdx # packages/web/src/content/docs/config.mdx # packages/web/src/content/docs/custom-tools.mdx # packages/web/src/content/docs/da/agents.mdx # packages/web/src/content/docs/da/commands.mdx # packages/web/src/content/docs/da/config.mdx # packages/web/src/content/docs/da/custom-tools.mdx # packages/web/src/content/docs/da/permissions.mdx # packages/web/src/content/docs/da/plugins.mdx # packages/web/src/content/docs/da/tools.mdx # packages/web/src/content/docs/da/tui.mdx # packages/web/src/content/docs/de/agents.mdx # packages/web/src/content/docs/de/commands.mdx # packages/web/src/content/docs/de/config.mdx # packages/web/src/content/docs/de/custom-tools.mdx # packages/web/src/content/docs/de/permissions.mdx # packages/web/src/content/docs/de/plugins.mdx # packages/web/src/content/docs/de/tools.mdx # packages/web/src/content/docs/de/tui.mdx # packages/web/src/content/docs/es/agents.mdx # packages/web/src/content/docs/es/commands.mdx # packages/web/src/content/docs/es/config.mdx # packages/web/src/content/docs/es/custom-tools.mdx # packages/web/src/content/docs/es/permissions.mdx # packages/web/src/content/docs/es/plugins.mdx # packages/web/src/content/docs/es/tools.mdx # packages/web/src/content/docs/es/tui.mdx # packages/web/src/content/docs/fr/agents.mdx # packages/web/src/content/docs/fr/commands.mdx # packages/web/src/content/docs/fr/config.mdx # packages/web/src/content/docs/fr/custom-tools.mdx # packages/web/src/content/docs/fr/permissions.mdx # packages/web/src/content/docs/fr/plugins.mdx # packages/web/src/content/docs/fr/tools.mdx # packages/web/src/content/docs/fr/tui.mdx # packages/web/src/content/docs/it/agents.mdx # packages/web/src/content/docs/it/commands.mdx # packages/web/src/content/docs/it/config.mdx # packages/web/src/content/docs/it/custom-tools.mdx # packages/web/src/content/docs/it/permissions.mdx # packages/web/src/content/docs/it/plugins.mdx # packages/web/src/content/docs/it/tools.mdx # packages/web/src/content/docs/it/tui.mdx # packages/web/src/content/docs/ja/agents.mdx # packages/web/src/content/docs/ja/commands.mdx # packages/web/src/content/docs/ja/config.mdx # packages/web/src/content/docs/ja/custom-tools.mdx # packages/web/src/content/docs/ja/permissions.mdx # packages/web/src/content/docs/ja/plugins.mdx # packages/web/src/content/docs/ja/tools.mdx # packages/web/src/content/docs/ja/tui.mdx # packages/web/src/content/docs/ko/agents.mdx # packages/web/src/content/docs/ko/commands.mdx # packages/web/src/content/docs/ko/config.mdx # packages/web/src/content/docs/ko/custom-tools.mdx # packages/web/src/content/docs/ko/permissions.mdx # packages/web/src/content/docs/ko/plugins.mdx # packages/web/src/content/docs/ko/tools.mdx # packages/web/src/content/docs/ko/tui.mdx # packages/web/src/content/docs/nb/agents.mdx # packages/web/src/content/docs/nb/commands.mdx # packages/web/src/content/docs/nb/config.mdx # packages/web/src/content/docs/nb/custom-tools.mdx # packages/web/src/content/docs/nb/permissions.mdx # packages/web/src/content/docs/nb/plugins.mdx # packages/web/src/content/docs/nb/tools.mdx # packages/web/src/content/docs/nb/tui.mdx # packages/web/src/content/docs/permissions.mdx # packages/web/src/content/docs/pl/agents.mdx # packages/web/src/content/docs/pl/commands.mdx # packages/web/src/content/docs/pl/config.mdx # packages/web/src/content/docs/pl/custom-tools.mdx # packages/web/src/content/docs/pl/permissions.mdx # packages/web/src/content/docs/pl/plugins.mdx # packages/web/src/content/docs/pl/tools.mdx # packages/web/src/content/docs/pl/tui.mdx # packages/web/src/content/docs/plugins.mdx # packages/web/src/content/docs/pt-br/agents.mdx # packages/web/src/content/docs/pt-br/commands.mdx # packages/web/src/content/docs/pt-br/config.mdx # packages/web/src/content/docs/pt-br/custom-tools.mdx # packages/web/src/content/docs/pt-br/permissions.mdx # packages/web/src/content/docs/pt-br/plugins.mdx # packages/web/src/content/docs/pt-br/tools.mdx # packages/web/src/content/docs/pt-br/tui.mdx # packages/web/src/content/docs/ru/agents.mdx # packages/web/src/content/docs/ru/commands.mdx # packages/web/src/content/docs/ru/config.mdx # packages/web/src/content/docs/ru/custom-tools.mdx # packages/web/src/content/docs/ru/permissions.mdx # packages/web/src/content/docs/ru/plugins.mdx # packages/web/src/content/docs/ru/tools.mdx # packages/web/src/content/docs/ru/tui.mdx # packages/web/src/content/docs/th/agents.mdx # packages/web/src/content/docs/th/commands.mdx # packages/web/src/content/docs/th/config.mdx # packages/web/src/content/docs/th/custom-tools.mdx # packages/web/src/content/docs/th/permissions.mdx # packages/web/src/content/docs/th/plugins.mdx # packages/web/src/content/docs/th/tools.mdx # packages/web/src/content/docs/th/tui.mdx # packages/web/src/content/docs/tools.mdx # packages/web/src/content/docs/tr/agents.mdx # packages/web/src/content/docs/tr/commands.mdx # packages/web/src/content/docs/tr/config.mdx # packages/web/src/content/docs/tr/custom-tools.mdx # packages/web/src/content/docs/tr/permissions.mdx # packages/web/src/content/docs/tr/plugins.mdx # packages/web/src/content/docs/tr/tools.mdx # packages/web/src/content/docs/tr/tui.mdx # packages/web/src/content/docs/tui.mdx # packages/web/src/content/docs/zh-cn/agents.mdx # packages/web/src/content/docs/zh-cn/commands.mdx # packages/web/src/content/docs/zh-cn/config.mdx # packages/web/src/content/docs/zh-cn/custom-tools.mdx # packages/web/src/content/docs/zh-cn/permissions.mdx # packages/web/src/content/docs/zh-cn/plugins.mdx # packages/web/src/content/docs/zh-cn/tools.mdx # packages/web/src/content/docs/zh-cn/tui.mdx # packages/web/src/content/docs/zh-tw/agents.mdx # packages/web/src/content/docs/zh-tw/commands.mdx # packages/web/src/content/docs/zh-tw/config.mdx # packages/web/src/content/docs/zh-tw/custom-tools.mdx # packages/web/src/content/docs/zh-tw/permissions.mdx # packages/web/src/content/docs/zh-tw/plugins.mdx # packages/web/src/content/docs/zh-tw/tools.mdx # packages/web/src/content/docs/zh-tw/tui.mdx # sdks/vscode/package.json # sst.config.ts # turbo.json
Upstream v2.1.0 removed the @typescript/native-preview catalog entry (anomalyco/opencode#56300). Kilo packages now use @typescript/native and tsc, and list the bun types, as upstream packages do.
Upstream's new build step filters on @opencode/app, which Kilo removed, and turbo fails on a filter with no package. Move the Kilo sdk job back to the end of the file, so its diff with upstream stays readable.
Upstream now has the Windows Bun cache skip, the transit test hashing, the separate build job and the two-commit PR checkout that Kilo carried. Marked lines go from 316 to 280, unmarked lines from 50 to 38.
|
➖ v2 migration progress: 0.9% → 0.9% (0 done, 0 total, 0 dropped; 87/9829 cells) Placement: 7 new marked lines in shared files (7 seam), 0 new Ratchets: 9 core-internal imports (base 9); shared patches by rung 29 seam, 2 patch (base 29 seam, 2 patch). No change to the progress map. |
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
|
Warning Review the following alerts detected in dependencies. According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.
|
Upstream v2.1.0 runs every package with a test script in CI, so the kilo-plugin tests run on Windows for the first time. With core.autocrlf the agent-switch template has CRLF line endings and the reminder test fails. Upstream keeps packages/core/src/**/*.txt LF the same way.
# Conflicts: # script/upstream/shared-patches.json
Code Review SummaryStatus: 2 Issues Found | Recommendation: Address before merge Overview
Kilo-changes audit: the Kilo patches of all 314 shared/Kilo files outside Upstream impact: no break found in the Kilo seams touched by v2.1.0 — Issue Details (click to expand)SUGGESTION
Files Reviewed (315 files)
Fix these issues in Kilo Cloud Reviewed by deepseek-v4.1-flash-1017 · Input: 201.1K · Output: 51.6K · Cached: 14M Review guidance: REVIEW.md from base branch |
|
.opencode needs to get removed after: #15282 lands |
Upstream sync of the v2 line (#15020) to OpenCode
v2.1.0. Previous sync: #15136 (v2.0.30).Merge with 'Create a merge commit'. Do not squash or rebase. A squash drops the upstream ancestry, and the next sync conflicts again. The annotation check and the shared-patch counter also find the pinned upstream release from the merge commit message.
Release
v2.1.0, tag commit60c68d145a1(2026-10-20)9d90d892dcb(parent of the tag, onupstream/dev, newestv2.x.ytag at merge time)v2.0.31(d889cb20447, 2026-10-16),v2.0.32(d4a6223d017, 2026-10-16),v2.1.0(9d90d892dcb, 2026-10-20)v2.0.30release commit775d1d0d713b70010d8dfechore(upstream): sync v2.1.0 (9d90d892dcb)v2.0.31,v2.0.32,v2.1.0), 4.5 daysWhy three releases in one PR
migration-context.mdallows several pending releases in one sync when the PR says why. Per release, measured against the files that Kilo adds or changes sincev2.0.30(files in the removed product areas of #15151 are left out, becauseskipFilesresolves them):v2.0.31setup-bun/action.yml,test.yml,AGENTS.md,bun.lock, 4package.json,cli/src/server-process.ts,tui/src/component/dialog-integration.tsx,turbo.json, 4 core test filesv2.0.32test.yml,bun.lock, 4package.json,turbo.jsonv2.1.0README.md,bun.lock, 4package.json,cli/src/server-process.ts,core/src/plugin/sdk.ts,tui/src/plugin/builtins.ts,core/test/config/config.test.tsTogether, 2 files need a manual resolution (
test.yml,turbo.json), and both are CI files that upstream restructured inv2.0.31andv2.0.32. Stacked PRs would resolve the same two files twice and repeat the checks, self-tests and CI three times. The merge used--allow-skip.v2.1.0is a minor release. Its breaking changes (anomalyco/opencode#57260: session events, compaction,credential-legacy, plugin session API) were checked against every Kilo-owned path and everykilocode_changehunk. No Kilo code uses a renamed or removed symbol.How it was made
bun script/upstream/merge.ts --version v2.1.0 --base-branch HEAD --allow-skipon a fresh branch fromorigin/v2(052f6a6bedf), with Bun 1.4.2 onPATH. The tool removed 9 workflows and 280 skipped files, resolvedsdk.tsandsetup-bun/action.ymlwith mergiraf, transformed 2package.jsonfiles, kept the lock file, and stopped ontest.ymlandturbo.json.Conflicts and resolutions
deploy*.yml,models-snapshot.yml,nix-hashes.yml,publish.yml)sst.config.tsand 280 files in removed product areasskipFiles). Done by the toolpackages/core/src/plugin/sdk.tssdk.plugin.updatedglobally (anomalyco/opencode#57181) on the line that the Kilo phase seam wraps. Result: Kilophasesmap kept,{ global: true }taken. Rung 3, unchanged.github/actions/setup-bun/action.ymlif:keys onRestore Bun dependencies. Upstream now skips the Bun cache on Windows itself (anomalyco/opencode#55866), so the Kilo copy of that change is dropped and upstream's lines are taken. The Kilo Defender step stayspackages/{cli,core,tui}/package.jsontsc(TypeScript 7, anomalyco/opencode#56300). The package.json transform took upstream and dropped Kilo'stest:ciscripts and the@opencode/cli./*export (tooling gap). Rebuilt from upstream with the Kilo lines added again; the Kilo diff of all three files is now identical to beforeturbo.jsontransittask and a generictesttask ontransitthat runs every package with a test script (anomalyco/opencode#55866, anomalyco/opencode#56117). Took upstream. Dropped Kilo's owntransitand@kilocode/gateway-core#test, which upstream now covers. Kept the three Kilotest:citasks, now withdependsOn: ["transit"]like upstream'stest(tests no longer wait for dependency builds).github/workflows/test.ymlv2push trigger,if: falseonaffected, shard matrix, Turbo cache step, shardedtest:cirun, JUnit report steps,sdkjob. Upstream now has the separatebuildjob and the two-commit PR checkout, so Kilo's copies are dropped. See the next section for two new adaptationsbun.lockPlugin-first check: no conflict hit a Kilo code patch.
sdk.ts(rung 3 seam) kept its shape.server-process.ts,builtins.tsanddialog-integration.tsxmerged without conflict, and their Kilo hunks are identical.Follow-up commits
c1a31af8f77chore(kilo): typecheck Kilo packages with TypeScript 7. Upstream removed the@typescript/native-previewcatalog entry, sobun installfailed forkilo-cli,kilo-pluginandkilo-gateway-core. They now use@typescript/nativeandtsc --noEmit, and list"types": ["bun"]intsconfig.json, as every upstream package does since TypeScript 7 (it no longer loads@types/*by default). Kilo-owned files only.bun.lockregenerated here.3d4426c2903fix(ci): keep the v2.1.0 test workflow working without the app packages.Build workspace librariesstep filters on@opencode/app^.... Kilo removed that package, and turbo fails withNo package found with name '@opencode/app'(reproduced locally). The filter is now@opencode/cli^...only, marked.e2e (linux)ande2e (windows)result jobs requireaffectedto succeed. Kilo skipsaffected, so they would always fail. They getif: false, marked.v2has no required status checks, so skipped checks block nothing.sdkjob moves back to the end of the file, so git aligns the diff with upstream correctly (otherwise upstream'sCheck generated clientsteps showed as unmarked Kilo lines).0d9a9fb8c84chore(upstream): lower the shared-patch baseline after v2.1.0. Limits lowered, seam texts forsetup-bun/action.yml,test.ymlandturbo.jsonupdated.35881134692fix(kilo-plugin): check out prompt templates with LF on Windows(see CI).c2eaa870ff5merge oforigin/v2(docs(migration): record the direction rule in the placement rules and skills #15281). The only conflict was themarkedLineslimit: 280 here plus the oneAGENTS.mdline of docs(migration): record the direction rule in the placement rules and skills #15281 gives 281.Kilo changes kept
Kilo's diff against upstream was compared before the sync (
775d1d0d713..origin/v2) and after it (9d90d892dcb..HEAD), file by file on the added and removed lines. Outside the removed product areas, the file lists match. Every Kilo patch is identical, except these intended differences:setup-bun/action.yml,test.yml,turbo.json: smaller, because upstream adopted the Windows cache skip, thetransithashing, the separatebuildjob and the two-commit checkout (see above).packages/kilo-{cli,plugin,gateway-core}/{package,tsconfig}.json: TypeScript 7.script/upstream/shared-patches.json: baseline.bun.lock: generated.Shared files touched
Shared-patch counter against
9d90d892dcb: 31 shared files, 281 marked lines (316 onorigin/v2before #15281, 317 after it), 38 unmarked lines (was 50), 0 deleted shared files, 28 deleted upstream workflows (not counted). Annotation check: ok (60 shared files).Placement rules (
v2-host-strategy.mdsection 5, #15281): no change in this PR moves code from a Kilo-owned file into an upstream file, and no upstream test file is edited. The two new marked lines intest.ymladapt Kilo's CI to jobs that upstream added. The Windows fix is a Kilo-owned file. Note for U-L3-01: theturbo.jsontest:cientries namescript/kilocode/paths, so under the new rung-4 test they are rung 4; the relabel comes with the checker, as the plan says.Mirror drift and dependency impact
Mirror drift (
v2-host-strategy.mdsection 7, done by hand untilmirroredFileslands):775d1d0d713..9d90d892dcbpackages/kilo-cli/src/index.tspackages/cli/src/index.tspackages/kilo-cli/src/serve.tspackages/cli/src/commands/handlers/serve.tsDependency impact (by hand,
script/upstream/impact.tsdoes not exist yet): upstream files that each Kilo feature imports, resolved from its imports, and the ones this sync changes.kilo-plugin/src/gateway,tui/src/kilocode,schema/src/kilocode)core/variant.ts,core/bus.ts,schema/credential.ts,schema/model.ts,tui/ui/dialog-select.tsx,tui/ui/dialog.tsx,tui/context/theme.tsxVariant.resolvehas more provider packages,Key.configurationremoved (Kilo uses OAuth), dialogs rebuilt onDialogLayoutwith unchanged props. Retested: identical Kilo model lists, packages and 771 variants (see Verification)kilo-plugin/src/agent)core/permission.ts,core/shell.ts,schema/session-event.tsundefinedvalues;AgentSelectedandShell.DIRECTORYunchanged. Retested: agent behavior (see Verification)kilo-cli/src,kilo-plugin/src/index.ts)cli/server-process.ts,core/plugin/sdk.ts,core/bus.ts,util/npm.ts, 3 CLI import handlersserver-process.ts: servicechdirfailure is non-fatal, and the service applies its saved environment; the Kilooverrideshunk is unchanged. Retested:bun dev, TUI, standalone servercore/src/kilocode)util/fs-util.tsEPERMis read like not-foundUpstream behavior that affects Kilo
big-picklefirst, when every enabled model is a free OpenCode model (anomalyco/opencode#55852, anomalyco/opencode#55972). The Kilo Gateway keeps providerkiloenabled and sets an explicit default, so the default stayskilo/kilo-auto/free(verified, see Self-test). Only when the Gateway catalog fails or is empty does the fallback becomeopencode/big-pickleinstead of the first OpenCode model./modelsopens on the current model and keeps the server's model order (anomalyco/opencode#57151). The Kilo group now follows the Gateway catalog order instead of an alphabetical sort.storeis now sent only to OpenAI and Azure (anomalyco/opencode#57239), so Kilo chat requests no longer sendstore: false. Gateway answers in the self-test are fine.streamUsageis a new compatibility option, default on (anomalyco/opencode#57255).testscript, so@kilocode/kilo-pluginand@kilocode/kilo-clitests run in CI shard 1 too.session.list(anomalyco/opencode#56264),todowritebehind an experimental flag (anomalyco/opencode#56947), a new TUI dialog design behind thenew-designsexperiment.Open PRs
git merge-treeagainst the only openv2PR, #15281: one conflict on themarkedLineslimit inshared-patches.json(316 to 317 there, 316 to 280 here). After this PR merges, the value is 281.Tests
Same command on
origin/v2(052f6a6bedf) and on this branch:bun run testin each package, withOPENCODE_TEST_HOMEandXDG_*in a temp directory, from detached worktrees outside the repository (Bun 1.4.2, macOS).origin/v2The failures in both columns are local-environment failures, the same as in #15136:
Session.shelltiming (6, each hits the 5 s limit) anddebug paths command(1). Skipped tests added by this PR: 0.CI
Run 1 (before the Windows fix): every check green except
unit (windows, 1/3). Upstream's generic Turbotesttask now runs@kilocode/kilo-plugintests in CI for the first time, and on Windows the agent-switch reminder test failed. Withcore.autocrlf,packages/kilo-plugin/src/agent/agent-switch.txtis checked out with CRLF, so the reminder text has\r\n. The bug is onorigin/v2too (it never ran there), and it also affects Windows users: the reminder and the Ask, Debug and Orchestrator prompts carry CRLF. Fix (35881134692):packages/kilo-plugin/.gitattributeswithsrc/**/*.txt text eol=lf, the same rule upstream has forpackages/core/src/**/*.txtin the root file. Kilo-owned file (rung 2), no shared file changed.Run 2 (after the fix and the
origin/v2merge): thekilo-plugintests pass on Windows. The same job then failed in@opencode/util#testwith a Bun crash:panic(main thread): Segmentation fault at address 0x100000000,error: script "test" exited with code 3, Bun 1.4.2 Windows x64. All util tests passed before the crash (0 fail), and the crash is at process exit. This is a Bun defect, not a test failure, and it is not caused by this sync:packages/utilhas one upstream change (the sandboxEPERMread handling infs-util.ts), no assertion failed, and the same package is green on Linux. One rerun of that job was started, and it passed (3m34s). The whole workflow is green atc2eaa870ff5.Verification
bun install --frozen-lockfilewith Bun 1.4.2: no lock change.bun script/check-workflows.ts: ok (3 workflows).bun script/check-opencode-annotations.ts: ok (60 shared files against9d90d892dcb).bun script/check-shared-patches.ts: ok (counts above).bun script/upstream/find-reset-candidates.ts --dry-run: no file to reset (the 28local-missingentries are the deleted upstream workflows).packages/protocolandpackages/clientcheck:generated: pass.bun script/upstream/progress.ts --check: up to date.bun typecheckinkilo-gateway-core,kilo-plugin,kilo-cli: pass (also from the Agent Manager worktree, now that TypeScript 7 limits the loaded types).bun run checkfrom a worktree outside the repository: pass (28 of 28 tasks).bun turbo build --filter='@opencode/cli^...'(the CI library build step): pass (14 of 14 tasks).KILO_V2_PROFILEper test, signed out unless noted:bun dev run --standalone --format json "Reply with only the word ok."with no--model: answersokwithkilo/kilo-auto/free, nolevel=ERRORlog lines. Pass. (script/dev-isolated.tssetsmodelthroughOPENCODE_CONFIG_CONTENT, so the Gateway default is checked separately below.)bun dev serve) on this branch and onorigin/v2,OPENCODE_CONFIG_CONTENT='{}',GET /api/modeland/api/model/default:kilo/kilo-auto/freeon both.KILO_API_KEYfrom the v1 auth file): 295 Kilo models on both, the same default on both.packageand reasoning variants (771) identical. The only difference in the full list: 2 Bedrock bare IDs hidden by upstream on purpose (anomalyco/opencode#54486). Pass.bun dev run --agent <id>with "Create a new file named made-by-.txt", on this branch and onorigin/v2:--agentuses Code.subagentand the file is written (on this branch, the first run withkilo-auto/freereturned an unrelated answer instead; a rerun delegated and wrote the file).Code · Auto Free Kilo Gateway. Pass.What is 2 + 2? Reply with only the number.: answered4. Pass.ctrl+x m):● Auto Freeselected, the Kilo(free)models listed. The same check onorigin/v2shows the same layout; only the order inside the Kilo group differs (see above). Pass./connect, searchkilo: lists Kilo Gateway. Pass.level=ERRORlines in the CLI log. Pass.bun dev models --standaloneon this branch and onorigin/v2: identicalkilo/list (17 models) andopencode/list (10 models). Pass.chooseKiloAccountteam chooser after/connectneeds a real Kilo login, so it was not run. Its code merged without change, and typecheck passes.Tooling gaps
transforms/transform-package-json.tstakes upstream for a conflictedpackage.jsonand re-applies only the rootdevandlintscripts. It dropped Kilo'stest:ciscripts incli,coreandtui, and the@opencode/cli./*export. Restored by hand. The transform should re-apply every Kilo line from the base diff.if:key insetup-bun/action.ymlwhen both sides added the same condition. Fixed by hand.merge.tscannot regeneratebun.lockwhen upstream removes a catalog entry that a Kilo-owned package uses. The lock is regenerated in the follow-up commit.v2-migrationskill reads CLI logs fromdata/opencode/log. Since #15270 the profile usesdata/kilo2/log.merge.tsneeds--allow-skipfor a multi-release sync. This works as designed.