feat: Bun single-file executable distribution (#819)

* feat: add Bun single-file executable distribution

- Add 7 platform packages for standalone CLI binaries
- Add bin/platform.js for shared platform detection
- Add bin/oh-my-opencode.js ESM wrapper
- Add postinstall.mjs for binary verification
- Add script/build-binaries.ts for cross-compilation
- Update publish workflow for multi-package publishing
- Add CI guard against @ast-grep/napi in CLI
- Add unit tests for platform detection (12 tests)
- Update README to remove Bun runtime requirement

Platforms supported:
- macOS ARM64 & x64
- Linux x64 & ARM64 (glibc)
- Linux x64 & ARM64 (musl/Alpine)
- Windows x64

Closes #816

* chore: remove unnecessary @ast-grep/napi CI check

* chore: gitignore compiled platform binaries

* fix: use require() instead of top-level await import() for Bun compile compatibility

* refactor: use static ESM import for package.json instead of require()
This commit is contained in:
Kenny
2026-01-15 10:33:07 -05:00
committed by GitHub
parent 72a3975799
commit c67ca8275e
26 changed files with 695 additions and 30 deletions
+17 -2
View File
@@ -6,10 +6,12 @@
"types": "dist/index.d.ts",
"type": "module",
"bin": {
"oh-my-opencode": "./dist/cli/index.js"
"oh-my-opencode": "./bin/oh-my-opencode.js"
},
"files": [
"dist"
"dist",
"bin",
"postinstall.mjs"
],
"exports": {
".": {
@@ -20,8 +22,11 @@
},
"scripts": {
"build": "bun build src/index.ts --outdir dist --target bun --format esm --external @ast-grep/napi && tsc --emitDeclarationOnly && bun build src/cli/index.ts --outdir dist/cli --target bun --format esm --external @ast-grep/napi && bun run build:schema",
"build:all": "bun run build && bun run build:binaries",
"build:binaries": "bun run script/build-binaries.ts",
"build:schema": "bun run script/build-schema.ts",
"clean": "rm -rf dist",
"postinstall": "node postinstall.mjs",
"prepublishOnly": "bun run clean && bun run build",
"typecheck": "tsc --noEmit",
"test": "bun test"
@@ -55,6 +60,7 @@
"@opencode-ai/plugin": "^1.1.19",
"@opencode-ai/sdk": "^1.1.19",
"commander": "^14.0.2",
"detect-libc": "^2.0.0",
"hono": "^4.10.4",
"js-yaml": "^4.1.1",
"jsonc-parser": "^3.3.1",
@@ -70,6 +76,15 @@
"bun-types": "latest",
"typescript": "^5.7.3"
},
"optionalDependencies": {
"oh-my-opencode-darwin-arm64": "0.0.0",
"oh-my-opencode-darwin-x64": "0.0.0",
"oh-my-opencode-linux-arm64": "0.0.0",
"oh-my-opencode-linux-arm64-musl": "0.0.0",
"oh-my-opencode-linux-x64": "0.0.0",
"oh-my-opencode-linux-x64-musl": "0.0.0",
"oh-my-opencode-windows-x64": "0.0.0"
},
"trustedDependencies": [
"@ast-grep/cli",
"@ast-grep/napi",