Farfield now routes both providers through one strict unified surface.
- Server entrypoints for the web app are under
/api/unified/*. - Codex runs through native app-server methods only.
- OpenCode runs through SDK type mappings only.
- Web UI consumes unified schemas and does not import provider SDK/protocol types.
- Feature gating comes from typed unified feature availability, not provider-specific conditionals in UI logic.
POST /api/unified/commandGET /api/unified/featuresGET /api/unified/threadsGET /api/unified/thread/:idGET /api/unified/events(SSE)
Run this before pushing:
bun run verify:strictThis runs:
verify:no-cheatsverify:no-provider-ui-imports- workspace
typecheck - workspace
test - generated artifact cleanliness checks for Codex and OpenCode manifests
Farfield now vendors official Codex app-server schemas and generates protocol Zod validators from them.
bun run generate:codex-schemaThis command updates:
packages/codex-protocol/vendor/codex-app-server-schema/(stable + experimental TypeScript and JSON Schema)packages/codex-protocol/src/generated/app-server/(generated Zod schema modules used by the app)
Farfield also generates an OpenCode manifest from SDK unions used by the mapper layer.
bun run generate:opencode-manifestWhen Codex or OpenCode updates protocol/SDK shapes:
- Run
bun run generate:codex-schema - Run
bun run generate:opencode-manifest - Run
bun run verify:strict - Commit generated changes together with any mapper updates
- Run
bun run verify:strict - Confirm
bun run generate:codex-schemaproduces no uncommitted changes - Confirm
bun run generate:opencode-manifestproduces no uncommitted changes - Review
git statusfor only intended files - Ship only after all workspace tests pass