Merge remote-tracking branch 'origin/main' into feat/cli-local-run

# Conflicts:
#	package.json
This commit is contained in:
Alex Alecu
2026-04-27 15:08:21 +03:00
195 changed files with 9198 additions and 4786 deletions
+1 -17
View File
@@ -126,12 +126,10 @@ const allTargets: {
arch: "x64",
avx2: false,
},
// kilocode_change start - Windows ARM64 target
{
os: "win32",
arch: "arm64",
},
// kilocode_change end
{
os: "win32",
arch: "x64",
@@ -141,12 +139,6 @@ const allTargets: {
arch: "x64",
avx2: false,
},
// kilocode_change start - added Windows ARM64 target
{
os: "win32",
arch: "arm64",
},
// kilocode_change end
]
const targets = singleFlag
@@ -195,7 +187,6 @@ for (const item of targets) {
const rootPath = path.resolve(dir, "../../node_modules/@opentui/core/parser.worker.js")
const parserWorker = fs.realpathSync(fs.existsSync(localPath) ? localPath : rootPath)
const workerPath = "./src/cli/cmd/tui/worker.ts"
const rgPath = "./src/file/ripgrep.worker.ts"
// Use platform-specific bunfs root path based on target OS
const bunfsRoot = item.os === "win32" ? "B:/~BUN/root/" : "/$bunfs/root/"
@@ -220,19 +211,12 @@ for (const item of targets) {
windows: {},
},
files: embeddedFileMap ? { "opencode-web-ui.gen.ts": embeddedFileMap } : {},
entrypoints: [
"./src/index.ts",
parserWorker,
workerPath,
rgPath,
...(embeddedFileMap ? ["opencode-web-ui.gen.ts"] : []),
],
entrypoints: ["./src/index.ts", parserWorker, workerPath, ...(embeddedFileMap ? ["opencode-web-ui.gen.ts"] : [])],
define: {
KILO_VERSION: `'${Script.version}'`,
KILO_MIGRATIONS: JSON.stringify(migrations),
OTUI_TREE_SITTER_WORKER_PATH: bunfsRoot + workerRelativePath,
KILO_WORKER_PATH: workerPath,
KILO_RIPGREP_WORKER_PATH: rgPath,
KILO_CHANNEL: `'${Script.channel}'`,
KILO_LIBC: item.os === "linux" ? `'${item.abi ?? "glibc"}'` : "",
KILO_BUILD_KIND: Script.release ? `'release'` : `'source'`, // kilocode_change
+1 -1
View File
@@ -77,10 +77,10 @@ const image = "ghcr.io/kilo-org/kilo" // kilocode_change
const platforms = "linux/amd64,linux/arm64"
const tags = [`${image}:${version}`, `${image}:${Script.channel}`]
const tagFlags = tags.flatMap((t) => ["-t", t])
await $`docker buildx build --platform ${platforms} ${tagFlags} --push .`
// registries
if (!Script.preview) {
await $`docker buildx build --platform ${platforms} ${tagFlags} --push .`
// Calculate SHA values
// kilocode_change start
const arm64Sha = await $`sha256sum ./dist/kilo-linux-arm64.tar.gz | cut -d' ' -f1`.text().then((x) => x.trim())
+106
View File
@@ -0,0 +1,106 @@
#!/usr/bin/env bun
// This script runs a separate OpenCode server to be used as a remote
// workspace, simulating a remote environment but all local to make
// debugger easier
//
// *Important*: make sure you add the debug workspace plugin first.
// In `.opencode/opencode.jsonc` in the root of this project add:
//
// "plugin": ["../packages/opencode/src/control-plane/dev/debug-workspace-plugin.ts"]
//
// Afterwards, run `./packages/opencode/script/run-workspace-server`
import { stat } from "node:fs/promises"
import { setTimeout as sleep } from "node:timers/promises"
const DEV_DATA_FILE = "/tmp/opencode-workspace-dev-data.json"
const RESTART_POLL_INTERVAL = 250
async function readData() {
return await Bun.file(DEV_DATA_FILE).json()
}
async function readDataMtime() {
return await stat(DEV_DATA_FILE)
.then((info) => info.mtimeMs)
.catch((error) => {
if (typeof error === "object" && error && "code" in error && error.code === "ENOENT") {
return undefined
}
throw error
})
}
async function readSnapshot() {
while (true) {
try {
const before = await readDataMtime()
if (before === undefined) {
await sleep(RESTART_POLL_INTERVAL)
continue
}
const data = await readData()
const after = await readDataMtime()
if (before === after) {
return { data, mtime: after }
}
} catch (error) {
if (typeof error === "object" && error && "code" in error && error.code === "ENOENT") {
await sleep(RESTART_POLL_INTERVAL)
continue
}
throw error
}
}
}
function startDevServer(data: any) {
const env = Object.fromEntries(Object.entries(data.env ?? {}).filter(([, value]) => value !== undefined))
return Bun.spawn(["bun", "run", "dev", "serve", "--port", String(data.port), "--print-logs"], {
env: {
...process.env,
...env,
XDG_DATA_HOME: "/tmp/data",
},
stdin: "inherit",
stdout: "inherit",
stderr: "inherit",
})
}
async function waitForRestartSignal(mtime: number, signal: AbortSignal) {
while (!signal.aborted) {
await sleep(RESTART_POLL_INTERVAL)
if (signal.aborted) return false
if ((await readDataMtime()) !== mtime) return true
}
return false
}
while (true) {
const { data, mtime } = await readSnapshot()
const proc = startDevServer(data)
const restartAbort = new AbortController()
const result = await Promise.race([
proc.exited.then((code) => ({ type: "exit" as const, code })),
waitForRestartSignal(mtime, restartAbort.signal).then((restart) => ({ type: "restart" as const, restart })),
])
restartAbort.abort()
if (result.type === "restart" && result.restart) {
proc.kill()
await proc.exited
continue
}
process.exit(result.code)
}
+1 -1
View File
@@ -55,7 +55,7 @@ const configFile = process.argv[2]
const tuiFile = process.argv[3]
console.log(configFile)
await Bun.write(configFile, JSON.stringify(generate(Config.Info), null, 2))
await Bun.write(configFile, JSON.stringify(generate(Config.Info.zod), null, 2))
if (tuiFile) {
console.log(tuiFile)