Files
oh-my-pi/packages/coding-agent/test/issue-1011-repro.test.ts
T
can1357 3ab675a83b fix: added buffered worker inboxing and standardized worker selectors
- Added `WorkerInbox` and `installWorkerInbox(port)` to queue worker messages before bind.
- Added `consumeWorkerInbox()` to replay buffered messages and clear one active inbox.
- Added buffered inbox consumption in JS and tab worker transports before direct message handlers.
- Normalized worker selector arguments to the `__omp_worker_*` naming across workers and tests.
2026-06-15 11:59:44 +02:00

51 lines
2.4 KiB
TypeScript

import { describe, expect, it } from "bun:test";
import * as path from "node:path";
/**
* Regression for https://github.com/can1357/oh-my-pi/issues/1011
*
* In v14.5.13 `spawnTabWorker` (in `src/tools/browser/tab-supervisor.ts`)
* resolved the worker entry as `new URL("./tab-worker-entry.ts", import.meta.url)`
* and passed `.href` to `new Worker(...)`. Bun's `--compile` static analyzer
* cannot discover that pattern, so the entry was never embedded in the
* single-file binary and the runtime symptom was "Timed out initializing
* browser tab worker".
*
* The original fix used an `import "./worker.ts" with { type: "file" }`
* trick. That copied the entry as a raw asset but could not resolve its
* relative imports inside the compiled binary, so the worker still failed
* to load (issue #1027 was the same root cause, retriggered).
*
* The current contract is simpler: when the process was started from the omp
* CLI (source, npm bundle, or compiled binary), spawn sites re-enter the
* declared worker-host entry — `new Worker(workerHostEntry(), { argv })` — and
* the CLI dispatches the hidden argv selector. Outside a CLI host (bun test,
* SDK embedding) they load the worker module directly. No separate worker
* module is ever bundled or listed as a `--compile` entrypoint.
*/
describe("issue #1011 — tab worker must re-enter the CLI entrypoint", () => {
const packageDir = path.resolve(import.meta.dir, "..");
const supervisorPath = path.join(packageDir, "src/tools/browser/tab-supervisor.ts");
const buildBinaryPath = path.join(packageDir, "scripts/build-binary.ts");
const workerArg = "__omp_worker_tab";
it("tab-supervisor re-enters the worker-host entry with the argv selector", async () => {
const source = await Bun.file(supervisorPath).text();
expect(
source.includes("workerHostEntry()"),
"tab-supervisor.ts must spawn via the declared worker-host entry",
).toBe(true);
expect(source).toContain(`argv: ["${workerArg}"]`);
expect(
source.includes('new URL("./tab-worker-entry.ts", import.meta.url)'),
"tab-supervisor.ts must keep the direct-module fallback for non-CLI hosts",
).toBe(true);
});
it("build-binary.ts no longer lists tab-worker-entry as a separate --compile entrypoint", async () => {
const source = await Bun.file(buildBinaryPath).text();
expect(source).not.toContain("./src/tools/browser/tab-worker-entry.ts");
});
});