You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
chore: remove upstream desktop, web app and hosted platform packages - #15151
v2 carries upstream product areas that Kilo does not ship: the Electron desktop app, the web app, and the hosted opencode.ai platform. Each upstream sync has to merge, review, install, and test them. After the v2.0.30 sync (#15136), the packages/app component tests fail on Windows CI and needed a temporary guard.
v1 removed the same areas (#253, #9845, #10381, #11450) and keeps them out with skipFiles. On v2, skipFiles was empty.
packages/app imports assets from packages/desktop, and session-ui and storybook are used only by app (their component tests import packages/app). So they go together. No package in the CLI, SDK, or Kilo plugin closure depends on any of them.
How future syncs stay free of manual work:
All removed paths are in skipFiles (script/upstream/utils/config.ts). During a sync, transforms/skip-files.ts removes upstream changes and additions under these paths, which also resolves their modify/delete conflicts.
script/upstream/utils/shared.ts does not count skipFiles paths, so the shared-patch counter stays at its baseline (deletedFiles: 0).
transform-package-json.ts re-applies the root lint script, like the root dev script.
Leftover references in shared upstream files are not edited, because they are harmless and each edit is a new conflict point: turbo.json task names (Turborepo ignores a task for a missing package, checked with 2.10.2), workspace globs (Bun accepts a glob with no match), dev:* scripts, .oxlintrc.json overrides, nix files, script/publish.ts.
Shared upstream files changed (all rung 3, listed in shared-patches.json):
File
Change
Why no lower rung
packages/cli/script/app-assets.ts
Build an empty web UI archive when packages/app does not exist. Covers build.ts and build-node.ts
Build scripts call buildAppArchive directly
packages/cli/script/service-smoke.ts
Accept a 404 for the web UI shell
Smoke script has no option to skip the check
.github/workflows/test.yml
if: false on the affected job, so the e2e job (app and session-ui only) is skipped. One job-level line, so upstream changes to the e2e steps still merge. The temporary Windows guard from #15136 is reverted to upstream
Job conditions cannot be set from outside the file
package.json
Root lint runs only oxlint (the ast-grep and sdk-docs.ts steps check gui-extensions)
JSON, root scripts
migration-tracking/plans/v2-plan-delta-2026-10-13.md section 7 records the decision. It replaces "keep inert" for F-V2-055 / U-E0-04 and covers the desktop and web app part of Q-PROD-01 (U-E9-15).
User Impact
The CLI binary embeds no web UI. Non-API server paths return 404, as on v1. The TUI, run, and the API are unchanged.
The TUI /pair (/web) command still exists and its links lead to that 404. Hiding it is follow-up work in U-E9-15.
Kept for now: packages/ui (TUI sounds, VS Code port), services/, nix/, install, github/. Their removal waits for the release lane (U-E3-06, U-E3-07).
Evidence
bun run check: lint 0 errors, typecheck 27/27 tasks. Run on a copy outside the main checkout: inside a nested .kilo/worktrees checkout, TypeScript picks up the parent checkout's @types/node 22 and fails @opencode/ai on zstdCompressSync. That happens on origin/v2 too, because neither tree puts @types/node in the root node_modules.
bun install --frozen-lockfile with Bun 1.4.2 (lock regenerated with the pinned Bun).
CI CLI steps: script/build.ts --single --skip-install + script/service-smoke.ts, and script/build-node.ts --single --skip-install --outdir=dist/node + script/service-smoke.ts --node: pass.
script/upstream: bun test 78 pass, bun run typecheck pass. New tests: the counter ignores removed product areas, and the config skips them but not live packages.
check-workflows, check-opencode-annotations, check-shared-patches, progress.ts --check: ok.
Sync dry run against upstream/dev (39 commits after v2.0.30): 71 conflicts, all auto-resolved by the tool (67 skip, 3 workflow, 1 lock-file), none manual. 70 of the 241 files that upstream changed are in the removed paths.
Self-test: KILO_V2_PROFILE=<tmp> bun dev run --standalone "Reply with exactly: PRUNE-OK" with kilo-auto/free: answered PRUNE-OK, no errors in the log.
Reviewed the ~14 changed non-generated files (plus the bun.lock regeneration and the deleted product-area tree). The seam patches correctly handle the removed packages/app: packages/cli/script/app-assets.ts emits an empty archive when the directory is gone, and packages/cli/script/service-smoke.ts accepts a 404 for the web shell so the compiled-service smoke test still validates the API, auth, and plugins. script/upstream/utils/shared.ts and script/upstream/utils/config.ts filter the removed paths out of the shared-patch counter, and the raised shared-patches.json limits (files 12→14, markedLines 45→48, unmarkedLines 17→18) match the added markers and unmarked comment line. The affected/e2e jobs are correctly gated off, and the root lint seam drops only checks that targeted the removed packages/gui-extensions. The skipFiles list covers every top-level path deleted by this PR (desktop, app, gui-extensions, session-ui, storybook, console, web, posts, function, stats, infra, sst.config.ts, salesforce, sdks/vscode, script/sdk-docs.ts, script/ast-grep/gui-extensions), and no kept package imports a removed one.
Note: leftover references to removed paths (package.jsondev:*/bench:* scripts, .oxlintrc.json overrides, workspace globs, script/raw-changelog.ts) are acknowledged in the PR as intentional merge-conflict avoidance.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What Problem This Solves
v2carries upstream product areas that Kilo does not ship: the Electron desktop app, the web app, and the hosted opencode.ai platform. Each upstream sync has to merge, review, install, and test them. After the v2.0.30 sync (#15136), thepackages/appcomponent tests fail on Windows CI and needed a temporary guard.v1 removed the same areas (#253, #9845, #10381, #11450) and keeps them out with
skipFiles. Onv2,skipFileswas empty.Why This Change Was Made
Removed (3,339 files, about 616k lines):
packages/desktop,packages/app,packages/gui-extensions,packages/session-ui,packages/storybookpackages/console,packages/web,packages/posts,packages/function,packages/stats,infra/,sst.config.ts,salesforce/sdks/vscodepackages/appimports assets frompackages/desktop, andsession-uiandstorybookare used only byapp(their component tests importpackages/app). So they go together. No package in the CLI, SDK, or Kilo plugin closure depends on any of them.How future syncs stay free of manual work:
skipFiles(script/upstream/utils/config.ts). During a sync,transforms/skip-files.tsremoves upstream changes and additions under these paths, which also resolves their modify/delete conflicts.script/upstream/utils/shared.tsdoes not countskipFilespaths, so the shared-patch counter stays at its baseline (deletedFiles: 0).transform-package-json.tsre-applies the rootlintscript, like the rootdevscript.turbo.jsontask names (Turborepo ignores a task for a missing package, checked with 2.10.2), workspace globs (Bun accepts a glob with no match),dev:*scripts,.oxlintrc.jsonoverrides, nix files,script/publish.ts.Shared upstream files changed (all rung 3, listed in
shared-patches.json):packages/cli/script/app-assets.tspackages/appdoes not exist. Coversbuild.tsandbuild-node.tsbuildAppArchivedirectlypackages/cli/script/service-smoke.ts.github/workflows/test.ymlif: falseon theaffectedjob, so the e2e job (app and session-ui only) is skipped. One job-level line, so upstream changes to the e2e steps still merge. The temporary Windows guard from #15136 is reverted to upstreampackage.jsonlintruns onlyoxlint(the ast-grep andsdk-docs.tssteps checkgui-extensions)migration-tracking/plans/v2-plan-delta-2026-10-13.mdsection 7 records the decision. It replaces "keep inert" for F-V2-055 / U-E0-04 and covers the desktop and web app part of Q-PROD-01 (U-E9-15).User Impact
run, and the API are unchanged./pair(/web) command still exists and its links lead to that 404. Hiding it is follow-up work in U-E9-15.packages/ui(TUI sounds, VS Code port),services/,nix/,install,github/. Their removal waits for the release lane (U-E3-06, U-E3-07).Evidence
bun run check: lint 0 errors, typecheck 27/27 tasks. Run on a copy outside the main checkout: inside a nested.kilo/worktreescheckout, TypeScript picks up the parent checkout's@types/node22 and fails@opencode/aionzstdCompressSync. That happens onorigin/v2too, because neither tree puts@types/nodein the rootnode_modules.bun install --frozen-lockfilewith Bun 1.4.2 (lock regenerated with the pinned Bun).script/build.ts --single --skip-install+script/service-smoke.ts, andscript/build-node.ts --single --skip-install --outdir=dist/node+script/service-smoke.ts --node: pass.script/upstream:bun test78 pass,bun run typecheckpass. New tests: the counter ignores removed product areas, and the config skips them but not live packages.check-workflows,check-opencode-annotations,check-shared-patches,progress.ts --check: ok.upstream/dev(39 commits after v2.0.30): 71 conflicts, all auto-resolved by the tool (67skip, 3workflow, 1lock-file), none manual. 70 of the 241 files that upstream changed are in the removed paths.KILO_V2_PROFILE=<tmp> bun dev run --standalone "Reply with exactly: PRUNE-OK"withkilo-auto/free: answeredPRUNE-OK, no errors in the log.