* Migrate from Node.js/npm/Jest to Bun runtime
- Replace npm with bun for package management (bun.lock)
- Replace Jest with bun:test for testing
- Update tsconfig for Bun (ESNext module, bundler resolution)
- Update Dockerfile to use oven/bun:1-slim
- Update CI workflow to use oven-sh/setup-bun@v2
- Remove dynamic import hack from codex.ts (direct ESM imports)
- Fix test mocking for Bun (export execFileAsync, use spyOn)
- Update all documentation (CLAUDE.md, README.md, CONTRIBUTING.md)
All 395 tests pass, type-check passes, E2E validated with curl.
* ci: retrigger CI build
* fix: make execFileAsync a function for better Bun mockability
* fix: ensure execFileAsync returns string not Buffer
* fix: rename _execFileAsync to comply with naming convention
* fix: make mkdirAsync mockable for Bun tests
* fix: update engines to bun>=1.0.0 and add mkdirAsync mock
* fix: pin Bun to 1.3.4 in CI to fix mock.module test failures
Newer Bun versions have different mock.module() behavior that causes
cross-test module pollution, resulting in 71 test failures in CI while
tests pass locally. Pinning to 1.3.4 ensures consistent behavior.
* fix: run orchestrator tests last to avoid mock.module pollution
Bun's mock.module() pollutes the global module cache, causing tests to
fail when orchestrator.test.ts (which mocks command-handler and factory)
runs before those modules' own test files.
Fix by running tests in two batches:
1. All tests except orchestrator
2. Orchestrator tests last
This ensures orchestrator's mocks don't affect other test files.