diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 4eddd59b669..6c363628499 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -78,13 +78,15 @@ "@gitlab/opencode-gitlab-auth": "1.3.2", "@hono/standard-validator": "0.1.5", "@hono/zod-validator": "catalog:", + "@kilocode/kilo-gateway": "workspace:*", + "@kilocode/kilo-telemetry": "workspace:*", + "@kilocode/plugin": "workspace:*", + "@kilocode/sdk": "workspace:*", "@modelcontextprotocol/sdk": "1.25.2", "@octokit/graphql": "9.0.2", "@octokit/rest": "catalog:", "@openauthjs/openauth": "catalog:", - "@kilocode/plugin": "workspace:*", "@opencode-ai/script": "workspace:*", - "@kilocode/sdk": "workspace:*", "@opencode-ai/util": "workspace:*", "@openrouter/ai-sdk-provider": "1.5.4", "@opentui/core": "0.1.79", @@ -115,6 +117,7 @@ "opentui-spinner": "0.0.6", "partial-json": "0.1.7", "remeda": "catalog:", + "simple-git": "3.31.1", "solid-js": "catalog:", "strip-ansi": "7.1.2", "tree-sitter-bash": "0.25.0", @@ -125,10 +128,7 @@ "xdg-basedir": "5.1.0", "yargs": "18.0.0", "zod": "catalog:", - "zod-to-json-schema": "3.24.5", - "@kilocode/kilo-gateway": "workspace:*", - "@kilocode/kilo-telemetry": "workspace:*", - "simple-git": "3.31.1" + "zod-to-json-schema": "3.24.5" }, "overrides": { "drizzle-orm": "1.0.0-beta.12-a5629fb" diff --git a/packages/opencode/script/build.ts b/packages/opencode/script/build.ts index 1f1fef8d41c..88444cb5f9f 100755 --- a/packages/opencode/script/build.ts +++ b/packages/opencode/script/build.ts @@ -109,6 +109,30 @@ const targets = singleFlag }) : allTargets +const migrationDirs = (await fs.promises.readdir(path.join(dir, "migration"), { withFileTypes: true })) + .filter((entry) => entry.isDirectory() && /^\d{4}\d{2}\d{2}\d{2}\d{2}\d{2}/.test(entry.name)) + .map((entry) => entry.name) + .sort() + +const migrationEntries = await Promise.all( + migrationDirs.map(async (name) => { + const sql = await Bun.file(path.join(dir, "migration", name, "migration.sql")).text() + const match = /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/.exec(name) + const timestamp = match + ? Date.UTC( + Number(match[1]), + Number(match[2]) - 1, + Number(match[3]), + Number(match[4]), + Number(match[5]), + Number(match[6]), + ) + : 0 + return { sql, timestamp } + }), +) +console.log(`Loaded ${migrationEntries.length} migrations`) + await $`rm -rf dist` const binaries: Record = {} @@ -160,6 +184,7 @@ for (const item of targets) { KILO_WORKER_PATH: workerPath, KILO_CHANNEL: `'${Script.channel}'`, // kilocode_change KILO_LIBC: item.os === "linux" ? `'${item.abi ?? "glibc"}'` : "", + KILO_MIGRATIONS: JSON.stringify(migrationEntries), }, }) diff --git a/packages/opencode/src/storage/db.ts b/packages/opencode/src/storage/db.ts index 50aa76384e7..bb0046ecded 100644 --- a/packages/opencode/src/storage/db.ts +++ b/packages/opencode/src/storage/db.ts @@ -13,7 +13,7 @@ import path from "path" import { readFileSync, readdirSync } from "fs" import * as schema from "./schema" -declare const OPENCODE_MIGRATIONS: { sql: string; timestamp: number }[] | undefined +declare const KILO_MIGRATIONS: { sql: string; timestamp: number }[] | undefined export const NotFoundError = NamedError.create( "NotFoundError", @@ -79,13 +79,13 @@ export namespace Database { // Apply schema migrations const entries = - typeof OPENCODE_MIGRATIONS !== "undefined" - ? OPENCODE_MIGRATIONS + typeof KILO_MIGRATIONS !== "undefined" + ? KILO_MIGRATIONS : migrations(path.join(import.meta.dirname, "../../migration")) if (entries.length > 0) { log.info("applying migrations", { count: entries.length, - mode: typeof OPENCODE_MIGRATIONS !== "undefined" ? "bundled" : "dev", + mode: typeof KILO_MIGRATIONS !== "undefined" ? "bundled" : "dev", }) migrate(db, entries) }