summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
authorAlbert O'Shea <[email protected]>2025-11-18 17:46:49 +1100
committerGitHub <[email protected]>2025-11-18 00:46:49 -0600
commit5e13527416e183c7ea6d1baa3528b5c30108372e (patch)
tree6d839be0118b84974eacc670a93823974787faba /packages
parentaba94c658f5c0987443196a5e850fdf7293d5006 (diff)
downloadopencode-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.ts15
-rw-r--r--packages/opencode/src/provider/models-macro.ts7
-rw-r--r--packages/opencode/src/tool/bash.ts14
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