fix: ship built opencode plugin assets

This commit is contained in:
Affaan Mustafa
2026-04-05 14:09:10 -07:00
parent 60b6de003b
commit db6d52e4af
4 changed files with 169 additions and 3 deletions

View File

@@ -42,6 +42,7 @@
".codex/",
".cursor/",
".opencode/commands/",
".opencode/dist/",
".opencode/instructions/",
".opencode/plugins/",
".opencode/prompts/",
@@ -112,7 +113,9 @@
"orchestrate:worker": "bash scripts/orchestrate-codex-worker.sh",
"orchestrate:tmux": "node scripts/orchestrate-worktrees.js",
"test": "node scripts/ci/check-unicode-safety.js && node scripts/ci/validate-agents.js && node scripts/ci/validate-commands.js && node scripts/ci/validate-rules.js && node scripts/ci/validate-skills.js && node scripts/ci/validate-hooks.js && node scripts/ci/validate-install-manifests.js && node scripts/ci/validate-no-personal-paths.js && npm run catalog:check && node tests/run-all.js",
"coverage": "c8 --all --include=\"scripts/**/*.js\" --check-coverage --lines 80 --functions 80 --branches 80 --statements 80 --reporter=text --reporter=lcov node tests/run-all.js"
"coverage": "c8 --all --include=\"scripts/**/*.js\" --check-coverage --lines 80 --functions 80 --branches 80 --statements 80 --reporter=text --reporter=lcov node tests/run-all.js",
"build:opencode": "node scripts/build-opencode.js",
"prepack": "npm run build:opencode"
},
"dependencies": {
"@iarna/toml": "^2.2.5",
@@ -121,10 +124,13 @@
},
"devDependencies": {
"@eslint/js": "^9.39.2",
"@opencode-ai/plugin": "^1.0.0",
"@types/node": "^20.19.24",
"c8": "^11.0.0",
"eslint": "^9.39.2",
"globals": "^17.1.0",
"markdownlint-cli": "^0.48.0"
"markdownlint-cli": "^0.48.0",
"typescript": "^5.9.3"
},
"engines": {
"node": ">=18"

24
scripts/build-opencode.js Normal file
View File

@@ -0,0 +1,24 @@
#!/usr/bin/env node
const fs = require("node:fs")
const path = require("node:path")
const { execFileSync } = require("node:child_process")
const rootDir = path.resolve(__dirname, "..")
const opencodeDir = path.join(rootDir, ".opencode")
const distDir = path.join(opencodeDir, "dist")
fs.rmSync(distDir, { recursive: true, force: true })
const tscBin = path.join(rootDir, "node_modules", ".bin", process.platform === "win32" ? "tsc.cmd" : "tsc")
if (!fs.existsSync(tscBin)) {
throw new Error(
"TypeScript compiler not found. Install root dev dependencies before publishing so .opencode/dist can be built."
)
}
execFileSync(tscBin, ["-p", path.join(opencodeDir, "tsconfig.json")], {
cwd: rootDir,
stdio: "inherit",
})

View File

@@ -0,0 +1,63 @@
/**
* Tests for scripts/build-opencode.js
*/
const assert = require("assert")
const fs = require("fs")
const path = require("path")
const { spawnSync } = require("child_process")
function runTest(name, fn) {
try {
fn()
console.log(`${name}`)
return true
} catch (error) {
console.log(`${name}`)
console.error(` ${error.message}`)
return false
}
}
function main() {
console.log("\n=== Testing build-opencode.js ===\n")
let passed = 0
let failed = 0
const repoRoot = path.join(__dirname, "..", "..")
const packageJson = JSON.parse(
fs.readFileSync(path.join(repoRoot, "package.json"), "utf8")
)
const buildScript = path.join(repoRoot, "scripts", "build-opencode.js")
const distEntry = path.join(repoRoot, ".opencode", "dist", "index.js")
const tests = [
["package.json exposes the OpenCode build and prepack hooks", () => {
assert.strictEqual(packageJson.scripts["build:opencode"], "node scripts/build-opencode.js")
assert.strictEqual(packageJson.scripts.prepack, "npm run build:opencode")
assert.ok(packageJson.files.includes(".opencode/dist/"))
}],
["build script generates .opencode/dist", () => {
const result = spawnSync("node", [buildScript], {
cwd: repoRoot,
encoding: "utf8",
})
assert.strictEqual(result.status, 0, result.stderr)
assert.ok(fs.existsSync(distEntry), ".opencode/dist/index.js should exist after build")
}],
]
for (const [name, fn] of tests) {
if (runTest(name, fn)) {
passed += 1
} else {
failed += 1
}
}
console.log(`\nPassed: ${passed}`)
console.log(`Failed: ${failed}`)
process.exit(failed > 0 ? 1 : 0)
}
main()

View File

@@ -169,6 +169,33 @@ __metadata:
languageName: node
linkType: hard
"@opencode-ai/plugin@npm:^1.0.0":
version: 1.3.15
resolution: "@opencode-ai/plugin@npm:1.3.15"
dependencies:
"@opencode-ai/sdk": "npm:1.3.15"
zod: "npm:4.1.8"
peerDependencies:
"@opentui/core": ">=0.1.96"
"@opentui/solid": ">=0.1.96"
peerDependenciesMeta:
"@opentui/core":
optional: true
"@opentui/solid":
optional: true
checksum: 10c0/1a662ff700812223310612f3c8c7fd4465eda5763d726ec4d29d0eae26babf344ef176c9b987d79fe1e29c8a498178881a47d7080bb9f4db3e70dad59eb8cd9e
languageName: node
linkType: hard
"@opencode-ai/sdk@npm:1.3.15":
version: 1.3.15
resolution: "@opencode-ai/sdk@npm:1.3.15"
dependencies:
cross-spawn: "npm:7.0.6"
checksum: 10c0/3957ae62e0ec1e339d9493e03a2440c95afdd64a608a2dc9db8383338650318a294280b2142305db5b0147badacbefa0d07e949d31167e5a4a49c9d057d016fa
languageName: node
linkType: hard
"@types/debug@npm:^4.0.0":
version: 4.1.12
resolution: "@types/debug@npm:4.1.12"
@@ -213,6 +240,15 @@ __metadata:
languageName: node
linkType: hard
"@types/node@npm:^20.19.24":
version: 20.19.39
resolution: "@types/node@npm:20.19.39"
dependencies:
undici-types: "npm:~6.21.0"
checksum: 10c0/1d16da7b5f47a7415b827fcf3b94d279febf4c14671afec74a03e47856b5270023d9beb1b9aeab4d3b622fd97d61a60206cfc2cca588663181331bc592468289
languageName: node
linkType: hard
"@types/unist@npm:^2.0.0":
version: 2.0.11
resolution: "@types/unist@npm:2.0.11"
@@ -444,7 +480,7 @@ __metadata:
languageName: node
linkType: hard
"cross-spawn@npm:^7.0.6":
"cross-spawn@npm:7.0.6, cross-spawn@npm:^7.0.6":
version: 7.0.6
resolution: "cross-spawn@npm:7.0.6"
dependencies:
@@ -512,12 +548,15 @@ __metadata:
dependencies:
"@eslint/js": "npm:^9.39.2"
"@iarna/toml": "npm:^2.2.5"
"@opencode-ai/plugin": "npm:^1.0.0"
"@types/node": "npm:^20.19.24"
ajv: "npm:^8.18.0"
c8: "npm:^11.0.0"
eslint: "npm:^9.39.2"
globals: "npm:^17.1.0"
markdownlint-cli: "npm:^0.48.0"
sql.js: "npm:^1.14.1"
typescript: "npm:^5.9.3"
bin:
ecc: scripts/ecc.js
ecc-install: scripts/install-apply.js
@@ -1744,6 +1783,26 @@ __metadata:
languageName: node
linkType: hard
"typescript@npm:^5.9.3":
version: 5.9.3
resolution: "typescript@npm:5.9.3"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5
languageName: node
linkType: hard
"typescript@patch:typescript@npm%3A^5.9.3#optional!builtin<compat/typescript>":
version: 5.9.3
resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin<compat/typescript>::version=5.9.3&hash=5786d5"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430
languageName: node
linkType: hard
"uc.micro@npm:^2.0.0, uc.micro@npm:^2.1.0":
version: 2.1.0
resolution: "uc.micro@npm:2.1.0"
@@ -1751,6 +1810,13 @@ __metadata:
languageName: node
linkType: hard
"undici-types@npm:~6.21.0":
version: 6.21.0
resolution: "undici-types@npm:6.21.0"
checksum: 10c0/c01ed51829b10aa72fc3ce64b747f8e74ae9b60eafa19a7b46ef624403508a54c526ffab06a14a26b3120d055e1104d7abe7c9017e83ced038ea5cf52f8d5e04
languageName: node
linkType: hard
"uri-js@npm:^4.2.2":
version: 4.4.1
resolution: "uri-js@npm:4.4.1"
@@ -1835,3 +1901,10 @@ __metadata:
checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f
languageName: node
linkType: hard
"zod@npm:4.1.8":
version: 4.1.8
resolution: "zod@npm:4.1.8"
checksum: 10c0/5eae39da09d7bd0564a30dfd2348811e4e2e7dd15955d8f3444f8e196f35e5422b1482eda234b722fafb0738f4a8b718adb042b860936bfdd2cc19cdbdac8a9a
languageName: node
linkType: hard