Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
154 commits
Select commit Hold shift + click to select a range
afc4c83
tweak: use theme tokens for debug bar surface
jayair Mar 24, 2026
1398674
chore: update nix node_modules hashes
opencode-agent[bot] Mar 24, 2026
15dc33d
feat(tui): add heap snapshot functionality for TUI and server (#19028)
thdxr Mar 24, 2026
35884de
ci
thdxr Mar 24, 2026
4586b41
change model for changelog
thdxr Mar 24, 2026
0dcdf5f
release: v1.3.2
Mar 24, 2026
50f6aa3
fix(opencode): skip typechecking generated models snapshot (#19018)
kitlangton Mar 24, 2026
cbe1337
Revert "fix(app): more startup efficiency (#18985)"
adamdotdevin Mar 24, 2026
a379eb3
Revert "fix(app): startup efficiency (#18854)"
adamdotdevin Mar 24, 2026
4647aa8
effectify Worktree service (#18679)
kitlangton Mar 25, 2026
958a80c
fix: increase operations-per-run to 1000 and pin stale action to v10.2.0
thdxr Mar 25, 2026
79e9d19
Add close-issues script and GitHub Action
thdxr Mar 25, 2026
45c2573
Fix close-issues workflow permissions
thdxr Mar 25, 2026
be142b0
Process issues sequentially to avoid rate limits
thdxr Mar 25, 2026
4f9667c
Change issue close reason from not_planned to completed
thdxr Mar 25, 2026
0a80ef4
fix(opencode): avoid snapshotting files over 2MB (#19043)
thdxr Mar 25, 2026
700f571
fix: provide merge context to beta conflict resolver (#19055)
Hona Mar 25, 2026
71693cc
tweak: only spawn lsp servers for files in current instance (or cwd i…
rekram1-node Mar 25, 2026
9a64bdb
fix: beta resolver typecheck + build smoke check (#19060)
Hona Mar 25, 2026
aa11fa8
fix: unblock beta conflict recovery (#19068)
Hona Mar 25, 2026
5d9e780
electron: add createDirectory to open directory picker (#19071)
Brendonovich Mar 25, 2026
9717383
electron: remove file extension from electron-store wrapper (#19082)
Brendonovich Mar 25, 2026
3ea72ae
app: pre-warm project globalSync state when navigate project via keyb…
Brendonovich Mar 25, 2026
d1c49ba
fix(app): move message navigation off cmd+arrow (#18728)
nexxeln Mar 25, 2026
0dbfefa
Reapply "fix(app): startup efficiency (#18854)"
adamdotdevin Mar 24, 2026
2b0baf9
Reapply "fix(app): more startup efficiency (#18985)"
adamdotdevin Mar 24, 2026
53d0b58
fix(app): hash inline script for csp
adamdotdevin Mar 25, 2026
898456a
Revert "fix(app): startup efficiency"
adamdotdevin Mar 25, 2026
1041ae9
Reapply "fix(app): startup efficiency"
adamdotdevin Mar 25, 2026
4167e25
fix(app): opencode web server url
adamdotdevin Mar 25, 2026
b480a38
chore(app): markdown playground in storyboard
adamdotdevin Mar 25, 2026
0c0c6f3
chore(app): markdown playground in storyboard
adamdotdevin Mar 25, 2026
b0017bf
feat(core): initial implementation of syncing (#17814)
jlongster Mar 25, 2026
9713836
chore: generate
opencode-agent[bot] Mar 25, 2026
ad40b65
chore: bump modelcontextprotocol/sdk to 1.27.1 (#19064)
rekram1-node Mar 25, 2026
b746aec
chore: storybook tweaks
adamdotdevin Mar 25, 2026
73e1072
feat: restore git-backed review modes with effectful git service (#18…
nexxeln Mar 25, 2026
fac0dd8
chore: generate
opencode-agent[bot] Mar 25, 2026
36709aa
chore: update nix node_modules hashes
opencode-agent[bot] Mar 25, 2026
cafc2b2
chore: cleanup
adamdotdevin Mar 25, 2026
77fc88c
chore: remove dead code for todoread tool (#19128)
rekram1-node Mar 25, 2026
d6fc5f4
chore: storybook tweaks
adamdotdevin Mar 25, 2026
7123aad
fix(opencode): classify ZlibError from Bun fetch as retryable instead…
edevil Mar 25, 2026
66a5655
fix(task): respect agent permission config for todowrite tool (#19125)
ariane-emory Mar 25, 2026
5179b87
fix(app): agent normalization (#19169)
adamdotdevin Mar 25, 2026
8864fdc
fix: Windows e2e stability (CrossSpawnSpawner, snapshot isolation, se…
kitlangton Mar 25, 2026
b90de75
fix+refactor(mcp): lifecycle tests, cancelPending fix, Effect migrati…
kitlangton Mar 26, 2026
97c15a0
effectify Bus service: migrate to Effect PubSub + InstanceState (#18579)
kitlangton Mar 26, 2026
f54e4b6
file: use Effect.cached for scan deduplication (#19164)
kitlangton Mar 26, 2026
05c3cfb
ignore: update disavowed list (#19184)
rekram1-node Mar 26, 2026
ea04b23
skill: use Effect.cached for load deduplication (#19165)
kitlangton Mar 26, 2026
31ad6e8
chore: generate
opencode-agent[bot] Mar 26, 2026
7cb690d
fix: bump gitlab-ai-provider to 5.3.3 for DWS tool approval support (…
vglafirov Mar 26, 2026
ba244a6
test: restore 5 workers on Windows e2e (#19188)
kitlangton Mar 26, 2026
1a4a6ea
fix(opencode): image paste on Windows Terminal 1.25+ with kitty keybo…
Hona Mar 26, 2026
652313e
chore: update nix node_modules hashes
opencode-agent[bot] Mar 26, 2026
16742af
wip: zen
fwang Mar 24, 2026
2ad190e
wip: zen
fwang Mar 26, 2026
2d502d6
go: do not respect disabled zen models
fwang Mar 26, 2026
d500a84
fix: ensure enterprise url is set properly during auth flow (#19212)
rekram1-node Mar 26, 2026
1b028d0
revert: roll back git-backed review modes (#19295)
nexxeln Mar 26, 2026
1d363fa
chore: generate
opencode-agent[bot] Mar 26, 2026
83ed1c4
tui: bypass local SSE event streaming in worker (#19183)
thdxr Mar 26, 2026
ec20efc
feat: embed WebUI in binary with proxy flags (#19299)
thdxr Mar 26, 2026
54443bf
release: v1.3.3
Mar 26, 2026
9a2482a
chore: generate
opencode-agent[bot] Mar 26, 2026
bcf18ed
changelog ci tweaks
thdxr Mar 26, 2026
c7d2309
refactor(lsp): effectify LSP service with InstanceState (#19150)
kitlangton Mar 26, 2026
17e8f57
chore: generate
opencode-agent[bot] Mar 26, 2026
da1d372
feat: add gpt prompt so non codex gpt models have their own system pr…
rekram1-node Mar 26, 2026
3845044
feat(core): remove workspace server, WorkspaceContext, start work tow…
jlongster Mar 26, 2026
28f5176
effectify Config service (#19139)
kitlangton Mar 26, 2026
9f94bdb
chore: generate
opencode-agent[bot] Mar 26, 2026
1ebc92f
refactor(config): use cachedInvalidateWithTTL, bump effect to beta.37…
kitlangton Mar 26, 2026
2e6ac8f
fix(mcp): close transport on failed/timed-out connections (#19200)
kitlangton Mar 26, 2026
c7760b4
fix(app): more startup perf (#19288)
adamdotdevin Mar 26, 2026
c333e91
chore: generate
opencode-agent[bot] Mar 26, 2026
98a31e3
chore: update nix node_modules hashes
opencode-agent[bot] Mar 26, 2026
b8fb75a
fix(app): don't bundle fonts (#19329)
adamdotdevin Mar 26, 2026
590523d
chore: generate
opencode-agent[bot] Mar 26, 2026
ad3b350
fix(app): default shell tool to collapsed
adamdotdevin Mar 26, 2026
311ba41
fix(app): remove fork session button
adamdotdevin Mar 26, 2026
b7a06e1
fix(ui): reduce markdown jank while responses stream (#19304)
nexxeln Mar 26, 2026
ef7d1f7
fix: web ui bundle build on windows (#19337)
Hona Mar 26, 2026
9c6f1ed
refactor(effect): yield services instead of promise facades (#19325)
kitlangton Mar 27, 2026
b242a8d
chore: generate
opencode-agent[bot] Mar 27, 2026
e96eead
refactor(vcs): replace async git() with ChildProcessSpawner (#19361)
kitlangton Mar 27, 2026
7715252
fix(opencode): ignore generated models snapshot files (#19362)
kitlangton Mar 27, 2026
d341499
fix(ui): keep partial markdown readable while responses stream (#19403)
nexxeln Mar 27, 2026
3fb60d0
chore: update nix node_modules hashes
opencode-agent[bot] Mar 27, 2026
d2bfa92
fix(app): persist queued followups across project switches (#19421)
nexxeln Mar 27, 2026
7b44918
refactor(tool-registry): yield Config/Plugin services, use Effect.for…
kitlangton Mar 27, 2026
d8ad833
chore: generate
opencode-agent[bot] Mar 27, 2026
6274b06
tui plugins (#19347)
kommander Mar 27, 2026
2102333
chore: generate
opencode-agent[bot] Mar 27, 2026
decb5e6
effectify Skill service internals (#19364)
kitlangton Mar 27, 2026
bb8d2cd
chore: update nix node_modules hashes
opencode-agent[bot] Mar 27, 2026
e528ed5
effectify Plugin service internals (#19365)
kitlangton Mar 27, 2026
a76be69
refactor(core): split out instance and route through workspaces (#19335)
jlongster Mar 27, 2026
af2ccc9
chore(app): more spacing controls
adamdotdevin Mar 27, 2026
a93374c
fix(ui): make streamed markdown feel more continuous (#19404)
nexxeln Mar 27, 2026
bdd7829
fix(app): resize layout viewport when mobile keyboard appears (#15841)
BYK Mar 27, 2026
d36b38e
fix(desktop-electron): match dev dock icon inset on macOS (#19429)
kitlangton Mar 27, 2026
e973bbf
fix(app): default file tree to closed with minimum width (#19426)
kitlangton Mar 27, 2026
ff13524
fix flaky plugin tests (no mock.module for bun) (#19445)
kommander Mar 27, 2026
6f5b70e
tweak: add additional overflow error patterns (#19446)
rekram1-node Mar 27, 2026
7a7643c
no theme override in dev (#19456)
kommander Mar 27, 2026
c33d999
feat: AI SDK v6 support (#18433)
rekram1-node Mar 27, 2026
e5f0e81
refactor(session): effectify Session service (#19449)
kitlangton Mar 27, 2026
4b9660b
refactor(core): move more responsibility to workspace routing (#19455)
jlongster Mar 27, 2026
c890990
chore: update nix node_modules hashes
opencode-agent[bot] Mar 27, 2026
5cd54ec
refactor(format): use ChildProcessSpawner instead of Process.spawn (#…
kitlangton Mar 27, 2026
02b19bc
chore: generate
opencode-agent[bot] Mar 27, 2026
f3997d8
Single target plugin entrypoints (#19467)
kommander Mar 27, 2026
2145d97
refactor(session): effectify SessionCompaction service (#19459)
kitlangton Mar 28, 2026
82fc493
feat(ci): use Azure Artifact Signing for Windows releases (#15201)
Hona Mar 28, 2026
f736116
fix(app): more startup efficiency (#19454)
adamdotdevin Mar 28, 2026
43bc555
update effect to 4.0.0-beta.42 (#19484)
kitlangton Mar 28, 2026
48326e8
chore: update nix node_modules hashes
opencode-agent[bot] Mar 28, 2026
15a8c22
tweak: adjust bash tool description to increase cache hit rates betwe…
rekram1-node Mar 28, 2026
8446719
refactor(session): move context into prompt footer (#19486)
thdxr Mar 28, 2026
81eb6e6
refactor(prompt): remove variant cycle display from footer (#19489)
thdxr Mar 28, 2026
41b0d03
feat: add model variant selection dialog (#19488)
thdxr Mar 28, 2026
c3a9ec4
fix: restore subagent footer and fix style guide violations (#19491)
thdxr Mar 28, 2026
6c14ea1
tweak(session): add top spacing and remove obsolete docs prompt
thdxr Mar 28, 2026
6086072
upgrade opentui to 0.1.91 (#19440)
kommander Mar 28, 2026
aa9ed00
refactor(file): use AppFileSystem instead of raw Filesystem (#19458)
kitlangton Mar 28, 2026
0981b8e
chore: generate
opencode-agent[bot] Mar 28, 2026
26382c6
chore: update nix node_modules hashes
opencode-agent[bot] Mar 28, 2026
8ac2fbb
kv theme before default fallback (#19523)
kommander Mar 28, 2026
2b86b36
feat: open dialog for model variant selection instead of cycling (#19…
thdxr Mar 28, 2026
860531c
refactor(session): effectify session processor (#19485)
kitlangton Mar 28, 2026
aa2d753
feat: dialog variant menu and subagent improvements (#19537)
thdxr Mar 28, 2026
77d4f99
use theme color for prompt placeholder (#19535)
kommander Mar 28, 2026
1f290fc
fix: update opencode-gitlab-auth to 2.0.1 (#19552)
vglafirov Mar 28, 2026
772059a
chore: update nix node_modules hashes
opencode-agent[bot] Mar 28, 2026
38af99d
prompt slot (#19563)
kommander Mar 28, 2026
4f96eb2
fix: respect semver build identifiers for nix (#11915)
gigamonster256 Mar 28, 2026
ff37d7c
fix: nix embedded web-ui support (#19561)
gigamonster256 Mar 28, 2026
36aeb32
ignore: kill todo (#19566)
rekram1-node Mar 29, 2026
6639f92
chore: update nix node_modules hashes
opencode-agent[bot] Mar 29, 2026
f7c2ef8
wip: zen
fwang Mar 26, 2026
62ac45a
wip: zen
fwang Mar 27, 2026
a94ac5a
zen: ZDR policy
fwang Mar 29, 2026
fee1e25
ci: cancel stale nix-hashes runs (#19571)
Hona Mar 29, 2026
f0a9075
release: v1.3.4
Mar 29, 2026
72cb9df
tweak: adjust gpt prompt to be more minimal, fix file reference annoy…
rekram1-node Mar 29, 2026
55895d0
core: fix plugin hooks to properly handle async operations ensuring p…
rekram1-node Mar 29, 2026
0bc2f99
release: v1.3.5
Mar 29, 2026
0c1bf82
refactor: kilo compat for v1.3.5
johnnyeric Apr 12, 2026
203a6bf
Merge branch 'johnnyamancio/opencode-v1.3.5' into johnnyamancio/kilo-…
johnnyeric Apr 12, 2026
1c4ca7a
fix: Fix typecheck issues
johnnyeric Apr 12, 2026
3f25fd5
Merge remote-tracking branch 'origin/main' into johnnyamancio/kilo-op…
johnnyeric Apr 12, 2026
c35d9d4
style(kilo-vscode): adjust formatting in parts-util and PopupSelector
imanolmzd-svg Apr 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/app/src/entry.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ if (!(root instanceof HTMLElement) && import.meta.env.DEV) {
const getCurrentUrl = () => {
if (location.hostname.includes("opencode.ai")) return "http://localhost:4096"
if (import.meta.env.DEV)
return `http://${import.meta.env.VITE_OPENCODE_SERVER_HOST ?? "localhost"}:${import.meta.env.VITE_OPENCODE_SERVER_PORT ?? "4096"}`
return `http://${import.meta.env.VITE_KILO_SERVER_HOST ?? "localhost"}:${import.meta.env.VITE_KILO_SERVER_PORT ?? "4096"}`
return location.origin
}

Expand Down
2 changes: 1 addition & 1 deletion packages/desktop-electron/electron-builder.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ async function signWindows(configuration: { path: string }) {
}

const channel = (() => {
const raw = process.env.OPENCODE_CHANNEL
const raw = process.env.KILO_CHANNEL
if (raw === "dev" || raw === "beta" || raw === "prod") return raw
return "dev"
})()
Expand Down
4 changes: 2 additions & 2 deletions packages/desktop-electron/electron.vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@ import { defineConfig } from "electron-vite"
import appPlugin from "@opencode-ai/app/vite"

const channel = (() => {
const raw = process.env.OPENCODE_CHANNEL
const raw = process.env.KILO_CHANNEL
if (raw === "dev" || raw === "beta" || raw === "prod") return raw
return "dev"
})()

export default defineConfig({
main: {
define: {
"import.meta.env.OPENCODE_CHANNEL": JSON.stringify(channel),
"import.meta.env.KILO_CHANNEL": JSON.stringify(channel),
},
build: {
rollupOptions: {
Expand Down
4 changes: 2 additions & 2 deletions packages/desktop-electron/scripts/finalize-latest-yml.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ if (!dir) throw new Error("LATEST_YML_DIR is required")
const repo = process.env.GH_REPO
if (!repo) throw new Error("GH_REPO is required")

const version = process.env.OPENCODE_VERSION
if (!version) throw new Error("OPENCODE_VERSION is required")
const version = process.env.KILO_VERSION
if (!version) throw new Error("KILO_VERSION is required")

type FileEntry = {
url: string
Expand Down
2 changes: 1 addition & 1 deletion packages/desktop-electron/scripts/predev.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { $ } from "bun"

import { copyBinaryToSidecarFolder, getCurrentSidecar, windowsify } from "./utils"

await $`bun ./scripts/copy-icons.ts ${process.env.OPENCODE_CHANNEL ?? "dev"}`
await $`bun ./scripts/copy-icons.ts ${process.env.KILO_CHANNEL ?? "dev"}`

const RUST_TARGET = Bun.env.RUST_TARGET

Expand Down
2 changes: 1 addition & 1 deletion packages/desktop-electron/scripts/prepare.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ await Bun.write("./package.json", JSON.stringify(pkg, null, 2) + "\n")
console.log(`Updated package.json version to ${Script.version}`)

const sidecarConfig = getCurrentSidecar()
const artifact = process.env.OPENCODE_CLI_ARTIFACT ?? "opencode-cli"
const artifact = process.env.KILO_CLI_ARTIFACT ?? "kilo-cli" // kilocode_change

const dir = "resources/opencode-binaries"

Expand Down
2 changes: 1 addition & 1 deletion packages/desktop-electron/scripts/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { $ } from "bun"
export type Channel = "dev" | "beta" | "prod"

export function resolveChannel(): Channel {
const raw = Bun.env.OPENCODE_CHANNEL
const raw = Bun.env.KILO_CHANNEL
if (raw === "dev" || raw === "beta" || raw === "prod") return raw
return "dev"
}
Expand Down
10 changes: 5 additions & 5 deletions packages/desktop-electron/src/main/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,8 @@ export function syncCli() {
export function serve(hostname: string, port: number, password: string) {
const args = `--print-logs --log-level WARN serve --hostname ${hostname} --port ${port}`
const env = {
OPENCODE_SERVER_USERNAME: "opencode",
OPENCODE_SERVER_PASSWORD: password,
KILO_SERVER_USERNAME: "opencode",
KILO_SERVER_PASSWORD: password,
}

return spawnCommand(args, env)
Expand All @@ -137,9 +137,9 @@ export function spawnCommand(args: string, extraEnv: Record<string, string>) {
)
const envs = {
...base,
OPENCODE_EXPERIMENTAL_ICON_DISCOVERY: "true",
OPENCODE_EXPERIMENTAL_FILEWATCHER: "true",
OPENCODE_CLIENT: "desktop",
KILO_EXPERIMENTAL_ICON_DISCOVERY: "true",
KILO_EXPERIMENTAL_FILEWATCHER: "true",
KILO_CLIENT: "desktop",
XDG_STATE_HOME: app.getPath("userData"),
...extraEnv,
}
Expand Down
2 changes: 1 addition & 1 deletion packages/desktop-electron/src/main/constants.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { app } from "electron"

type Channel = "dev" | "beta" | "prod"
const raw = import.meta.env.OPENCODE_CHANNEL
const raw = import.meta.env.KILO_CHANNEL
export const CHANNEL: Channel = raw === "dev" || raw === "beta" || raw === "prod" ? raw : "dev"

export const SETTINGS_STORE = "opencode.settings"
Expand Down
2 changes: 1 addition & 1 deletion packages/desktop-electron/src/main/env.d.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
interface ImportMetaEnv {
readonly OPENCODE_CHANNEL: string
readonly KILO_CHANNEL: string
}

interface ImportMeta {
Expand Down
4 changes: 2 additions & 2 deletions packages/desktop-electron/src/main/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ function ensureLoopbackNoProxy() {
}

async function getSidecarPort() {
const fromEnv = process.env.OPENCODE_PORT
const fromEnv = process.env.KILO_PORT
if (fromEnv) {
const parsed = Number.parseInt(fromEnv, 10)
if (!Number.isNaN(parsed)) return parsed
Expand All @@ -302,7 +302,7 @@ async function getSidecarPort() {
function sqliteFileExists() {
const xdg = process.env.XDG_DATA_HOME
const base = xdg && xdg.length > 0 ? xdg : join(homedir(), ".local", "share")
return existsSync(join(base, "opencode", "opencode.db"))
return existsSync(join(base, "opencode", "kilo.db"))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CRITICAL: Startup migration check points at the wrong data directory

The CLI now stores the database at ~/.local/share/kilo/kilo.db (Global.Path.data uses the kilo app name), but this probe still looks under .../opencode/kilo.db. For existing installs that already have the migrated DB, needsMigration stays true and initialize() waits forever for a sqlite-migration:done event that will never be emitted.

Suggested change
return existsSync(join(base, "opencode", "kilo.db"))
return existsSync(join(base, "kilo", "kilo.db"))

}

function setupAutoUpdater() {
Expand Down
2 changes: 1 addition & 1 deletion packages/desktop-electron/src/main/windows.ts
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ function injectGlobals(win: BrowserWindow, globals: Globals) {
deepLinks: Array.isArray(deepLinks) ? deepLinks.splice(0) : deepLinks,
}
void win.webContents.executeJavaScript(
`window.__OPENCODE__ = Object.assign(window.__OPENCODE__ ?? {}, ${JSON.stringify(data)})`,
`window.__KILO__ = Object.assign(window.__KILO__ ?? {}, ${JSON.stringify(data)})`,
)
})
}
Expand Down
16 changes: 8 additions & 8 deletions packages/desktop-electron/src/renderer/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,14 @@ const deepLinkEvent = "opencode:deep-link"

const emitDeepLinks = (urls: string[]) => {
if (urls.length === 0) return
window.__OPENCODE__ ??= {}
const pending = window.__OPENCODE__.deepLinks ?? []
window.__OPENCODE__.deepLinks = [...pending, ...urls]
window.__KILO__ ??= {}
const pending = window.__KILO__.deepLinks ?? []
window.__KILO__.deepLinks = [...pending, ...urls]
window.dispatchEvent(new CustomEvent(deepLinkEvent, { detail: { urls } }))
}

const listenForDeepLinks = () => {
const startUrls = window.__OPENCODE__?.deepLinks ?? []
const startUrls = window.__KILO__?.deepLinks ?? []
if (startUrls.length) emitDeepLinks(startUrls)
return window.api.onDeepLink((urls) => emitDeepLinks(urls))
}
Expand All @@ -58,12 +58,12 @@ const createPlatform = (): Platform => {
})()

const wslHome = async () => {
if (os !== "windows" || !window.__OPENCODE__?.wsl) return undefined
if (os !== "windows" || !window.__KILO__?.wsl) return undefined
return window.api.wslPath("~", "windows").catch(() => undefined)
}

const handleWslPicker = async <T extends string | string[]>(result: T | null): Promise<T | null> => {
if (!result || !window.__OPENCODE__?.wsl) return result
if (!result || !window.__KILO__?.wsl) return result
if (Array.isArray(result)) {
return Promise.all(result.map((path) => window.api.wslPath(path, "linux").catch(() => path))) as any
}
Expand Down Expand Up @@ -137,7 +137,7 @@ const createPlatform = (): Platform => {
if (os === "windows") {
const resolvedApp = app ? await window.api.resolveAppPath(app).catch(() => null) : null
const resolvedPath = await (async () => {
if (window.__OPENCODE__?.wsl) {
if (window.__KILO__?.wsl) {
const converted = await window.api.wslPath(path, "windows").catch(() => null)
if (converted) return converted
}
Expand Down Expand Up @@ -197,7 +197,7 @@ const createPlatform = (): Platform => {
getWslEnabled: async () => {
const next = await window.api.getWslConfig().catch(() => null)
if (next) return next.enabled
return window.__OPENCODE__!.wsl ?? false
return window.__KILO__!.wsl ?? false
},

setWslEnabled: async (enabled) => {
Expand Down
2 changes: 1 addition & 1 deletion packages/desktop-electron/src/renderer/updater.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { initI18n, t } from "./i18n"

export const UPDATER_ENABLED = () => window.__OPENCODE__?.updaterEnabled ?? false
export const UPDATER_ENABLED = () => window.__KILO__?.updaterEnabled ?? false

export async function runUpdater({ alertOnFail }: { alertOnFail: boolean }) {
await initI18n()
Expand Down
8 changes: 4 additions & 4 deletions packages/desktop/scripts/finalize-latest-json.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ import { parseArgs } from "node:util"
const repo = process.env.GH_REPO
if (!repo) throw new Error("GH_REPO is required")

const releaseId = process.env.OPENCODE_RELEASE
if (!releaseId) throw new Error("OPENCODE_RELEASE is required")
const releaseId = process.env.KILO_RELEASE
if (!releaseId) throw new Error("KILO_RELEASE is required")

const version = process.env.OPENCODE_VERSION
if (!releaseId) throw new Error("OPENCODE_VERSION is required")
const version = process.env.KILO_VERSION
if (!releaseId) throw new Error("KILO_VERSION is required")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WARNING: KILO_VERSION validation still checks releaseId

If KILO_VERSION is missing, this guard never fires because it re-checks releaseId. The script then continues with version === undefined and generates invalid release asset URLs.

Suggested change
if (!releaseId) throw new Error("KILO_VERSION is required")
if (!version) throw new Error("KILO_VERSION is required")


const token = process.env.GH_TOKEN ?? process.env.GITHUB_TOKEN
if (!token) throw new Error("GH_TOKEN or GITHUB_TOKEN is required")
Expand Down
2 changes: 1 addition & 1 deletion packages/desktop/scripts/prepare.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ await Bun.write("./package.json", JSON.stringify(pkg, null, 2) + "\n")
console.log(`Updated package.json version to ${Script.version}`)

const sidecarConfig = getCurrentSidecar()
const artifact = process.env.OPENCODE_CLI_ARTIFACT ?? "opencode-cli"
const artifact = process.env.KILO_CLI_ARTIFACT ?? "kilo-cli"

const dir = "src-tauri/target/kilo-binaries"

Expand Down
12 changes: 6 additions & 6 deletions packages/extensions/zed/extension.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
id = "kilo"
name = "Kilo"
description = "The open source coding agent."
version = "1.3.4"
version = "1.3.5"
schema_version = 1
authors = ["Anomaly"]
repository = "https://github.com/Kilo-Org/kilocode"
Expand All @@ -11,26 +11,26 @@ name = "Kilo"
icon = "./icons/opencode.svg"

[agent_servers.opencode.targets.darwin-aarch64]
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.4/opencode-darwin-arm64.zip"
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.5/opencode-darwin-arm64.zip"
cmd = "./opencode"
args = ["acp"]

[agent_servers.opencode.targets.darwin-x86_64]
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.4/opencode-darwin-x64.zip"
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.5/opencode-darwin-x64.zip"
cmd = "./opencode"
args = ["acp"]

[agent_servers.opencode.targets.linux-aarch64]
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.4/opencode-linux-arm64.tar.gz"
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.5/opencode-linux-arm64.tar.gz"
cmd = "./opencode"
args = ["acp"]

[agent_servers.opencode.targets.linux-x86_64]
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.4/opencode-linux-x64.tar.gz"
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.5/opencode-linux-x64.tar.gz"
cmd = "./opencode"
args = ["acp"]

[agent_servers.opencode.targets.windows-x86_64]
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.4/opencode-windows-x64.zip"
archive = "https://github.com/Kilo-Org/kilocode/releases/download/v1.3.5/opencode-windows-x64.zip"
cmd = "./opencode.exe"
args = ["acp"]
1 change: 1 addition & 0 deletions packages/kilo-docs/markdoc/partials/cli-commands-table.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 15 additions & 0 deletions packages/kilo-docs/pages/code-with-ai/platforms/cli-reference.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions packages/opencode/specs/tui-plugins.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ npm plugins can declare a version compatibility range in `package.json` using th
- There is no uninstall, list, or update CLI command for external plugins.
- Local file plugins are configured directly in `tui.json`.

When `plugin` entries exist in a writable `.opencode` dir or `OPENCODE_CONFIG_DIR`, OpenCode installs `@kilocode/plugin` into that dir and writes:
When `plugin` entries exist in a writable `.opencode` dir or `KILO_CONFIG_DIR`, OpenCode installs `@kilocode/plugin` into that dir and writes:

- `package.json`
- `bun.lock`
Expand Down Expand Up @@ -330,7 +330,7 @@ Metadata is persisted by plugin id.

- Internal TUI plugins load first.
- External TUI plugins load from `tuiConfig.plugin`.
- `--pure` / `OPENCODE_PURE` skips external TUI plugins only.
- `--pure` / `KILO_PURE` skips external TUI plugins only.
- External plugin resolution and import are parallel.
- External plugin activation is sequential to keep command, route, and side-effect order deterministic.
- File plugins that fail initially are retried once after waiting for config dependency installation.
Expand Down
2 changes: 1 addition & 1 deletion packages/opencode/src/acp/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ opencode acp --cwd /path/to/project
ACP excludes `QuestionTool` by default.

```bash
OPENCODE_ENABLE_QUESTION_TOOL=1 opencode acp
KILO_ENABLE_QUESTION_TOOL=1 opencode acp
```

Enable this only for ACP clients that support interactive question prompts.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// kilocode_change - retained; upstream moved session header into prompt footer in #19486, Kilo keeps the dedicated header UI
import { type Accessor, createMemo, createSignal, Match, Show, Switch } from "solid-js"
import { useRouteData } from "@tui/context/route"
import { useSync } from "@tui/context/sync"
Expand Down
1 change: 1 addition & 0 deletions packages/opencode/src/control-plane/workspace-context.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// kilocode_change - retained; upstream removed workspace-server subsystem in #19316, routing refactor incomplete in v1.3.5
import { Context } from "../util/context"
import type { WorkspaceID } from "./schema"

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// kilocode_change - retained; upstream removed workspace-server subsystem in #19316, routing refactor incomplete in v1.3.5
import type { MiddlewareHandler } from "hono"
import { Flag } from "../flag/flag"
import { getAdaptor } from "./adaptors"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// kilocode_change - retained; upstream removed workspace-server subsystem in #19316, routing refactor incomplete in v1.3.5
import { GlobalBus } from "../../bus/global"
import { Hono } from "hono"
import { streamSSE } from "hono/streaming"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// kilocode_change - retained; upstream removed workspace-server subsystem in #19316, routing refactor incomplete in v1.3.5
import { Hono } from "hono"
import { Instance } from "../../project/instance"
import { InstanceBootstrap } from "../../project/bootstrap"
Expand Down
2 changes: 1 addition & 1 deletion packages/opencode/src/plugin/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,7 @@ export namespace Plugin {
for (const hook of state.hooks) {
const fn = hook[name] as any
if (!fn) continue
yield* Effect.promise(() => fn(input, output))
yield* Effect.promise(async () => fn(input, output))
}
return output
})
Expand Down
2 changes: 2 additions & 0 deletions packages/opencode/src/project/project.ts
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,9 @@ export namespace Project {
time: { created: Date.now(), updated: Date.now() },
}

// kilocode_change start
if (Flag.KILO_EXPERIMENTAL_ICON_DISCOVERY) yield* discover(existing).pipe(Effect.ignore, Effect.forkIn(scope))
// kilocode_change end

const result: Info = {
...existing,
Expand Down
7 changes: 7 additions & 0 deletions packages/opencode/src/session/message-v2.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,13 @@ interface FetchDecompressionError extends Error {
path: string
}

/** Error shape thrown by Bun's fetch() when gzip/br decompression fails mid-stream */
interface FetchDecompressionError extends Error {
code: "ZlibError"
errno: number
path: string
}

export namespace MessageV2 {
export function isMedia(mime: string) {
return mime.startsWith("image/") || mime === "application/pdf"
Expand Down
Loading
Loading