From 3c2bd04c0f36fd2f33b22c513b9ebd75489530bb Mon Sep 17 00:00:00 2001 From: Ian Pascoe Date: Thu, 2 Jul 2026 13:30:02 -0400 Subject: [PATCH] fix: restore packaged CLI startup --- .changeset/clever-needles-start.md | 8 +++++ package.json | 4 +-- packages/core/package.json | 1 + packages/core/rolldown.config.ts | 2 +- .../core/test/telemetry-source-maps.test.ts | 3 +- packages/opencode/package.json | 3 +- packages/opencode/rolldown.config.ts | 2 +- packages/pi/package.json | 3 +- packages/pi/rolldown.config.ts | 2 +- pnpm-lock.yaml | 9 +++++ scripts/check-package-runtime.mjs | 33 +++++++++++++++++++ 11 files changed, 62 insertions(+), 8 deletions(-) create mode 100644 .changeset/clever-needles-start.md create mode 100644 scripts/check-package-runtime.mjs diff --git a/.changeset/clever-needles-start.md b/.changeset/clever-needles-start.md new file mode 100644 index 00000000..afc01ae0 --- /dev/null +++ b/.changeset/clever-needles-start.md @@ -0,0 +1,8 @@ +--- +"@caplets/core": patch +"caplets": patch +"@caplets/opencode": patch +"@caplets/pi": patch +--- + +Fix the published CLI startup path by externalizing jsonc-parser from the Node bundle and checking the built package can answer `caplets --version`. diff --git a/package.json b/package.json index 2f62608d..f9571e31 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "benchmark:live:pi": "pnpm --filter @caplets/benchmarks benchmark:live:pi", "benchmark:live:pi-eval": "pnpm --filter @caplets/benchmarks benchmark:live:pi-eval", "benchmark:live:pi-eval:competitors": "pnpm --filter @caplets/benchmarks benchmark:live:pi-eval:competitors", - "build": "turbo build", + "build": "turbo build && node scripts/check-package-runtime.mjs", "build:watch": "turbo build:watch", "catalog:check": "tsx ./scripts/generate-catalog-index.ts --check", "catalog:generate": "tsx ./scripts/generate-catalog-index.ts", @@ -31,7 +31,7 @@ "lint:fix": "oxlint --fix .", "lint:staged": "lint-staged", "prepare": "husky", - "release": "turbo build --force && changeset publish", + "release": "turbo build --force && node scripts/check-package-runtime.mjs && changeset publish", "release:publish": "pnpm telemetry:prepare-release-env && pnpm release", "schema:check": "tsx ./scripts/generate-config-schema.ts --check", "schema:generate": "tsx ./scripts/generate-config-schema.ts", diff --git a/packages/core/package.json b/packages/core/package.json index 400704e8..62e6d583 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -111,6 +111,7 @@ "graphql": "^17.0.1", "headers-polyfill": "^5.0.1", "hono": "^4.12.27", + "jsonc-parser": "^3.3.1", "posthog-node": "^5.38.6", "quickjs-emscripten": "^0.32.0", "semver": "^7.8.5", diff --git a/packages/core/rolldown.config.ts b/packages/core/rolldown.config.ts index 094d9165..b543c7d9 100644 --- a/packages/core/rolldown.config.ts +++ b/packages/core/rolldown.config.ts @@ -17,7 +17,7 @@ export default defineConfig([ sourcemap: sentryConfigured(), }, plugins: runtimeSentryPlugins("core"), - external: ["quickjs-emscripten", "typescript"], + external: ["jsonc-parser", "quickjs-emscripten", "typescript"], platform: "node", }, { diff --git a/packages/core/test/telemetry-source-maps.test.ts b/packages/core/test/telemetry-source-maps.test.ts index 03567b09..78a0490b 100644 --- a/packages/core/test/telemetry-source-maps.test.ts +++ b/packages/core/test/telemetry-source-maps.test.ts @@ -38,7 +38,8 @@ describe("Sentry source-map readiness", () => { expect(cliConfig).toContain('runtimeSentryPlugins("cli")'); expect(opencodeConfig).toContain('runtimeSentryPlugins("opencode")'); expect(piConfig).toContain('runtimeSentryPlugins("pi")'); - expect(packageJson).toContain('"release": "turbo build --force && changeset publish"'); + expect(packageJson).toContain('"release": "turbo build --force &&'); + expect(packageJson).toContain("changeset publish"); expect(packageJson).not.toContain("telemetry:upload-runtime-source-maps"); expect(packageJson).not.toContain("sentry-cli"); }); diff --git a/packages/opencode/package.json b/packages/opencode/package.json index f1eab08c..9ed48967 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -34,7 +34,8 @@ "test": "vitest run" }, "dependencies": { - "@caplets/core": "workspace:*" + "@caplets/core": "workspace:*", + "jsonc-parser": "^3.3.1" }, "devDependencies": { "@jitl/quickjs-wasmfile-release-sync": "^0.32.0", diff --git a/packages/opencode/rolldown.config.ts b/packages/opencode/rolldown.config.ts index 2ede1572..faf789aa 100644 --- a/packages/opencode/rolldown.config.ts +++ b/packages/opencode/rolldown.config.ts @@ -11,5 +11,5 @@ export default defineConfig({ plugins: runtimeSentryPlugins("opencode"), platform: "node", tsconfig: true, - external: ["@opencode-ai/plugin"], + external: ["@opencode-ai/plugin", "jsonc-parser"], }); diff --git a/packages/pi/package.json b/packages/pi/package.json index e6ff71c3..eef99bdf 100644 --- a/packages/pi/package.json +++ b/packages/pi/package.json @@ -34,7 +34,8 @@ "test": "vitest run" }, "dependencies": { - "@caplets/core": "workspace:*" + "@caplets/core": "workspace:*", + "jsonc-parser": "^3.3.1" }, "devDependencies": { "@jitl/quickjs-wasmfile-release-sync": "^0.32.0", diff --git a/packages/pi/rolldown.config.ts b/packages/pi/rolldown.config.ts index 6e539ebc..f49801f0 100644 --- a/packages/pi/rolldown.config.ts +++ b/packages/pi/rolldown.config.ts @@ -11,5 +11,5 @@ export default defineConfig({ plugins: runtimeSentryPlugins("pi"), platform: "node", tsconfig: true, - external: ["@earendil-works/pi-coding-agent"], + external: ["@earendil-works/pi-coding-agent", "jsonc-parser"], }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dcc70729..d0bbcde9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -340,6 +340,9 @@ importers: hono: specifier: ^4.12.27 version: 4.12.27 + jsonc-parser: + specifier: ^3.3.1 + version: 3.3.1 posthog-node: specifier: ^5.38.6 version: 5.38.6 @@ -401,6 +404,9 @@ importers: '@opencode-ai/plugin': specifier: '>=1' version: 1.17.11 + jsonc-parser: + specifier: ^3.3.1 + version: 3.3.1 devDependencies: '@jitl/quickjs-wasmfile-release-sync': specifier: ^0.32.0 @@ -432,6 +438,9 @@ importers: '@earendil-works/pi-tui': specifier: '*' version: 0.80.2 + jsonc-parser: + specifier: ^3.3.1 + version: 3.3.1 devDependencies: '@jitl/quickjs-wasmfile-release-sync': specifier: ^0.32.0 diff --git a/scripts/check-package-runtime.mjs b/scripts/check-package-runtime.mjs new file mode 100644 index 00000000..4d21ccae --- /dev/null +++ b/scripts/check-package-runtime.mjs @@ -0,0 +1,33 @@ +import { spawnSync } from "node:child_process"; +import { fileURLToPath } from "node:url"; +import { dirname, join } from "node:path"; + +const repoRoot = dirname(dirname(fileURLToPath(import.meta.url))); + +const result = spawnSync( + process.execPath, + [join(repoRoot, "packages/cli/dist/index.js"), "--version"], + { + cwd: repoRoot, + encoding: "utf8", + env: { + ...process.env, + NO_COLOR: "1", + }, + }, +); + +if (result.status !== 0) { + process.stderr.write("Built Caplets CLI failed to start with --version.\n"); + if (result.stdout) process.stderr.write(result.stdout); + if (result.stderr) process.stderr.write(result.stderr); + process.exit(result.status ?? 1); +} + +const version = result.stdout.trim(); +if (!/^\d+\.\d+\.\d+(?:[-+][\w.-]+)?$/u.test(version)) { + process.stderr.write( + `Built Caplets CLI printed an invalid version: ${JSON.stringify(version)}\n`, + ); + process.exit(1); +}