From 6131ed269f37ae8e258c1b91929c3170a4cf2767 Mon Sep 17 00:00:00 2001 From: marius-kilocode Date: Tue, 18 Aug 2026 11:01:00 +0200 Subject: [PATCH 1/2] fix(cli): preserve Kilo upgrade version lookup --- .../restore-kilo-upgrade-version-lookup.md | 5 +++++ packages/opencode/src/installation/index.ts | 16 ++-------------- .../opencode/src/kilocode/installation/latest.ts | 14 ++++++++++++++ .../test/kilocode/installation/upgrade.test.ts | 6 +++++- 4 files changed, 26 insertions(+), 15 deletions(-) create mode 100644 .changeset/restore-kilo-upgrade-version-lookup.md create mode 100644 packages/opencode/src/kilocode/installation/latest.ts diff --git a/.changeset/restore-kilo-upgrade-version-lookup.md b/.changeset/restore-kilo-upgrade-version-lookup.md new file mode 100644 index 000000000000..9bc312c4bcb1 --- /dev/null +++ b/.changeset/restore-kilo-upgrade-version-lookup.md @@ -0,0 +1,5 @@ +--- +"@kilocode/cli": patch +--- + +Keep `kilo upgrade` on the Kilo CLI release channel when GitHub's latest release is a JetBrains release. diff --git a/packages/opencode/src/installation/index.ts b/packages/opencode/src/installation/index.ts index cc0e7bebd723..82d14ea90d9f 100644 --- a/packages/opencode/src/installation/index.ts +++ b/packages/opencode/src/installation/index.ts @@ -21,6 +21,7 @@ import { Release as KiloRelease, Scoop as KiloScoop, } from "@/kilocode/installation" +import { latest as kiloLatest } from "@/kilocode/installation/latest" // kilocode_change end import { InstallationEvent } from "@opencode-ai/schema/installation-event" @@ -70,7 +71,6 @@ export class UpgradeFailedError extends Schema.TaggedErrorClass { () => "", (request) => { release.push(request.url) + if (request.url === "https://api.github.com/repos/Kilo-Org/kilocode/releases/latest") { + return json({ tag_name: "jetbrains/v7.0.16" }) + } return json({ version: "8.8.8" }) }, ), - ).effect("reads fallback versions from the Kilo npm registry", () => + ).effect("does not use polluted GitHub release tags for fallback versions", () => Effect.gen(function* () { const result = yield* Installation.Service.use((svc) => svc.latest("unknown")) expect(result).toBe("8.8.8") expect(release).toContain(`https://registry.npmjs.org/@kilocode%2fcli/${InstallationChannel}`) + expect(release).not.toContain("https://api.github.com/repos/Kilo-Org/kilocode/releases/latest") }), ) From dfd7a487a7cc6d43d9c013d56ee16fc68dddc088 Mon Sep 17 00:00:00 2001 From: marius-kilocode Date: Tue, 18 Aug 2026 11:09:58 +0200 Subject: [PATCH 2/2] docs(cli): explain Kilo upgrade version source --- packages/opencode/src/kilocode/installation/latest.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/opencode/src/kilocode/installation/latest.ts b/packages/opencode/src/kilocode/installation/latest.ts index c1a70c6ddb00..cc35e15490ee 100644 --- a/packages/opencode/src/kilocode/installation/latest.ts +++ b/packages/opencode/src/kilocode/installation/latest.ts @@ -3,6 +3,8 @@ import { HttpClient, HttpClientRequest, HttpClientResponse } from "effect/unstab const Package = Schema.Struct({ version: Schema.String }) +// GitHub's latest Kilo release can be a JetBrains release, not a CLI release. +// Use the public npm channel so curl installs resolve only Kilo CLI versions. export function latest(http: HttpClient.HttpClient, path: string, channel: string) { return Effect.gen(function* () { const response = yield* http.execute(