diff options
| author | Albert O'Shea <[email protected]> | 2025-11-18 17:46:49 +1100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-11-18 00:46:49 -0600 |
| commit | 5e13527416e183c7ea6d1baa3528b5c30108372e (patch) | |
| tree | 6d839be0118b84974eacc670a93823974787faba /packages | |
| parent | aba94c658f5c0987443196a5e850fdf7293d5006 (diff) | |
| download | opencode-5e13527416e183c7ea6d1baa3528b5c30108372e.tar.gz opencode-5e13527416e183c7ea6d1baa3528b5c30108372e.zip | |
feat: nix support for the nix folks (#3924)
Co-authored-by: opencode <[email protected]>
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/opencode/src/cli/cmd/tui/thread.ts | 15 | ||||
| -rw-r--r-- | packages/opencode/src/provider/models-macro.ts | 7 | ||||
| -rw-r--r-- | packages/opencode/src/tool/bash.ts | 14 |
3 files changed, 29 insertions, 7 deletions
diff --git a/packages/opencode/src/cli/cmd/tui/thread.ts b/packages/opencode/src/cli/cmd/tui/thread.ts index 5b6f5e83b..bd9b9dbab 100644 --- a/packages/opencode/src/cli/cmd/tui/thread.ts +++ b/packages/opencode/src/cli/cmd/tui/thread.ts @@ -57,11 +57,16 @@ export const TuiThreadCommand = cmd({ // Resolve relative paths against PWD to preserve behavior when using --cwd flag const baseCwd = process.env.PWD ?? process.cwd() const cwd = args.project ? path.resolve(baseCwd, args.project) : process.cwd() - let workerPath: string | URL = new URL("./worker.ts", import.meta.url) - - if (typeof OPENCODE_WORKER_PATH !== "undefined") { - workerPath = OPENCODE_WORKER_PATH - } + const defaultWorker = new URL("./worker.ts", import.meta.url) + // Nix build creates a bundled worker next to the binary; prefer it when present. + const execDir = path.dirname(process.execPath) + const bundledWorker = path.join(execDir, "opencode-worker.js") + const hasBundledWorker = await Bun.file(bundledWorker).exists() + const workerPath = (() => { + if (typeof OPENCODE_WORKER_PATH !== "undefined") return OPENCODE_WORKER_PATH + if (hasBundledWorker) return bundledWorker + return defaultWorker + })() try { process.chdir(cwd) } catch (e) { diff --git a/packages/opencode/src/provider/models-macro.ts b/packages/opencode/src/provider/models-macro.ts index 91a0348e8..6c8492a70 100644 --- a/packages/opencode/src/provider/models-macro.ts +++ b/packages/opencode/src/provider/models-macro.ts @@ -1,4 +1,11 @@ export async function data() { + const path = Bun.env.MODELS_DEV_API_JSON + if (path) { + const file = Bun.file(path) + if (await file.exists()) { + return await file.text() + } + } const json = await fetch("https://models.dev/api.json").then((x) => x.text()) return json } diff --git a/packages/opencode/src/tool/bash.ts b/packages/opencode/src/tool/bash.ts index f184d5efe..445c7b68a 100644 --- a/packages/opencode/src/tool/bash.ts +++ b/packages/opencode/src/tool/bash.ts @@ -11,6 +11,7 @@ import { $ } from "bun" import { Filesystem } from "@/util/filesystem" import { Wildcard } from "@/util/wildcard" import { Permission } from "@/permission" +import { fileURLToPath } from "url" const MAX_OUTPUT_LENGTH = 30_000 const DEFAULT_TIMEOUT = 1 * 60 * 1000 @@ -19,20 +20,29 @@ const SIGKILL_TIMEOUT_MS = 200 export const log = Log.create({ service: "bash-tool" }) +const resolveWasm = (asset: string) => { + if (asset.startsWith("file://")) return fileURLToPath(asset) + if (asset.startsWith("/")) return asset + const url = new URL(asset, import.meta.url) + return fileURLToPath(url) +} + const parser = lazy(async () => { const { Parser } = await import("web-tree-sitter") const { default: treeWasm } = await import("web-tree-sitter/tree-sitter.wasm" as string, { with: { type: "wasm" }, }) + const treePath = resolveWasm(treeWasm) await Parser.init({ locateFile() { - return treeWasm + return treePath }, }) const { default: bashWasm } = await import("tree-sitter-bash/tree-sitter-bash.wasm" as string, { with: { type: "wasm" }, }) - const bashLanguage = await Language.load(bashWasm) + const bashPath = resolveWasm(bashWasm) + const bashLanguage = await Language.load(bashPath) const p = new Parser() p.setLanguage(bashLanguage) return p |
