From 2019fc95a5c462a4d355c75ace705ae4aeb0107e Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Thu, 11 Jun 2026 16:48:52 +0100 Subject: [PATCH 01/20] feat(codex): OpenAI Codex as an iii worker New Node worker that drives headless Codex turns over the iii bus, sibling to the claude-code worker with the same architecture. - codex::run / codex::start / codex::stop / codex::status / codex::sessions::list; codex::run shares the run::start_and_wait input contract so acp drives it via --brain-fn codex::run - raw Codex thread events (thread.started, item.*, turn.completed) mirrored verbatim onto codex::events; translated AgentEvent frames (message_complete, function_execution_start/end, turn_end, agent_end) on agent::events - thread resume via engine state scope codex_sessions (iii session_id to Codex thread id); per-turn cwd/model overrides honored - named fields for sandbox_mode, approval_policy, reasoning_effort, skip_git_repo_check, output_schema; raw ThreadOptions pass-through via options - request schemas published on every function (zod 4 toJSONSchema) - deploy: bundle with esbuild single-file build; codex_executable config plus PATH fallback - 55 vitest tests: full executeRun flow, register boundary, abort via AbortSignal, event mapping, config, state, executable resolution --- README.md | 1 + codex/.gitignore | 1 + codex/README.md | 136 ++ codex/biome.json | 46 + codex/config.yaml | 22 + codex/iii.worker.yaml | 17 + codex/package.json | 39 + codex/pnpm-lock.yaml | 2168 +++++++++++++++++++++++++ codex/scripts/build-bundle.mjs | 64 + codex/scripts/smoke/smoke-streams.mjs | 26 + codex/skills/SKILL.md | 70 + codex/src/config.ts | 36 + codex/src/events.ts | 29 + codex/src/executable.ts | 26 + codex/src/index.ts | 42 + codex/src/map.ts | 157 ++ codex/src/run.ts | 336 ++++ codex/src/state.ts | 34 + codex/src/types.ts | 87 + codex/tests/_helpers/fake-codex.ts | 103 ++ codex/tests/_helpers/fake-iii.ts | 57 + codex/tests/config.test.ts | 45 + codex/tests/events.test.ts | 45 + codex/tests/executable.test.ts | 34 + codex/tests/map.test.ts | 140 ++ codex/tests/register.test.ts | 151 ++ codex/tests/run-payload.test.ts | 54 + codex/tests/run.test.ts | 259 +++ codex/tests/state.test.ts | 57 + codex/tsconfig.json | 15 + codex/vitest.config.ts | 10 + 31 files changed, 4307 insertions(+) create mode 100644 codex/.gitignore create mode 100644 codex/README.md create mode 100644 codex/biome.json create mode 100644 codex/config.yaml create mode 100644 codex/iii.worker.yaml create mode 100644 codex/package.json create mode 100644 codex/pnpm-lock.yaml create mode 100644 codex/scripts/build-bundle.mjs create mode 100644 codex/scripts/smoke/smoke-streams.mjs create mode 100644 codex/skills/SKILL.md create mode 100644 codex/src/config.ts create mode 100644 codex/src/events.ts create mode 100644 codex/src/executable.ts create mode 100644 codex/src/index.ts create mode 100644 codex/src/map.ts create mode 100644 codex/src/run.ts create mode 100644 codex/src/state.ts create mode 100644 codex/src/types.ts create mode 100644 codex/tests/_helpers/fake-codex.ts create mode 100644 codex/tests/_helpers/fake-iii.ts create mode 100644 codex/tests/config.test.ts create mode 100644 codex/tests/events.test.ts create mode 100644 codex/tests/executable.test.ts create mode 100644 codex/tests/map.test.ts create mode 100644 codex/tests/register.test.ts create mode 100644 codex/tests/run-payload.test.ts create mode 100644 codex/tests/run.test.ts create mode 100644 codex/tests/state.test.ts create mode 100644 codex/tsconfig.json create mode 100644 codex/vitest.config.ts diff --git a/README.md b/README.md index 0a2bd858..5edf3b97 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,7 @@ npx skills add iii-hq/iii --all |---|---|---| | [`acp`](acp/) | Rust | Agent Client Protocol surface — stdio JSON-RPC, exposes iii agents as ACP sessions. | | [`harness`](harness/) | Node | TS port of the iii harness stack — bundles `harness` (provider registry + credentials/settings/permissions via the `configuration` worker), `turn-orchestrator`, `approval-gate`, `session`, `hook-fanout`, `models-catalog`, the `provider-*` workers, `llm-budget`, and `context-compaction` as one pnpm monorepo. See [`harness/README.md`](harness/README.md). | +| [`codex`](codex/) | Node | OpenAI Codex as an iii worker — `codex::*` runs headless Codex turns, mirrors raw thread events onto `codex::events`, and streams AgentEvent frames onto `agent::events`. | | [`database`](database/) | Rust | PostgreSQL, MySQL, and SQLite client — query, execute, transactions, prepared statements, and change feeds. | | [`iii-directory`](iii-directory/) | Rust | Engine introspection (functions / triggers / workers), workers-registry proxy, and filesystem-backed skill + prompt reader. | | [`iii-lsp`](iii-lsp/) | Rust | Language Server for iii function ids, trigger configs, and worker discovery. Autocomplete / hover across JS/TS, Python, Rust. | diff --git a/codex/.gitignore b/codex/.gitignore new file mode 100644 index 00000000..43370fa9 --- /dev/null +++ b/codex/.gitignore @@ -0,0 +1 @@ +*.tsbuildinfo diff --git a/codex/README.md b/codex/README.md new file mode 100644 index 00000000..6c3e6da7 --- /dev/null +++ b/codex/README.md @@ -0,0 +1,136 @@ +# codex + +OpenAI Codex as an iii worker: the Codex API exposed as functions and streams on the iii bus, nothing else. The worker spawns the same `codex` binary the user runs in their terminal, with the same login (ChatGPT or API key), the same filesystem, and the same sandbox. `codex::run` executes one headless turn and returns the result; the raw Codex thread events mirror verbatim onto the `codex::events` stream, and a translated AgentEvent view lands on `agent::events`, so the iii console and any sibling worker observe a Codex run exactly like a native harness turn. + +## Install + +```bash +iii worker add codex +``` + +Requires the [Codex CLI](https://github.com/openai/codex) on the host (`npm i -g @openai/codex`) and either an existing `codex login` or `OPENAI_API_KEY` in the worker environment. + +## Skills + +Install the `codex` agent skill for Claude Code, Cursor, and 30+ other agents: + +```bash +npx skills add iii-hq/workers --skill codex +``` + +## Quickstart + +From zero to a Codex turn over the bus: + +```bash +curl -fsSL https://install.iii.dev/iii/main/install.sh | sh +iii worker add codex +iii # starts the engine + worker +``` + +Then talk to it like any other function: from `iii trigger codex::run`, or from any SDK: + +```ts +import { registerWorker } from 'iii-sdk'; + +const iii = registerWorker('ws://127.0.0.1:49134', { workerName: 'demo' }); + +const res = await iii.trigger({ + function_id: 'codex::run', + payload: { + prompt: 'Add a /health endpoint to server.ts and run the tests', + cwd: '/path/to/repo', + sandbox_mode: 'workspace-write', + }, + timeout_ms: 600_000, +}); +// { session_id, codex_thread_id, result, stop_reason, usage } +``` + +Or straight from the terminal with the `iii trigger` CLI: + +```bash +# one full turn (raise the timeout; the default 30s is too short for agent turns) +iii trigger codex::run --timeout-ms 600000 \ + --json '{"prompt":"add a /health endpoint and run the tests","cwd":"/path/to/repo"}' + +# quick reads use key=value syntax +iii trigger codex::sessions::list +iii trigger codex::status session_id= + +# background turn + control +iii trigger codex::start --json '{"prompt":"...","cwd":"/path/to/repo"}' +iii trigger codex::stop session_id= + +# ask the running engine for a function's description and parameter table +iii trigger codex::run --help +``` + +Call `codex::run` again with the returned `session_id` to continue the same conversation: the worker maps iii session ids to Codex thread ids in engine state and resumes automatically (threads persist in `~/.codex/sessions`). + +Two ids come back from every run. `session_id` is the iii session id: the key for `codex::status`, `codex::stop`, resume, and the stream group. `codex_thread_id` is Codex's internal thread id (what the worker passes to `resumeThread` under the hood) — returned for reference, not a lookup key. + +## Functions + +| Function | Purpose | +| --- | --- | +| `codex::run` | Run one turn, wait, return the final result | +| `codex::start` | Fire-and-forget turn; progress arrives on the streams | +| `codex::stop` | Interrupt a live run | +| `codex::status` | Session state, live flag, usage | +| `codex::sessions::list` | All sessions this worker has run | + +`codex::run` accepts either a bare `prompt` string or a `messages` array (`[{ role: 'user', content: [{ type: 'text', text }] }]`) — the same input contract as the claude-code worker and `run::start_and_wait`, so the acp worker drives Codex with `--brain-fn codex::run` — plus `model`, `cwd`, `sandbox_mode`, `approval_policy`, `reasoning_effort`, `skip_git_repo_check`, and `output_schema` overrides. + +### Raw API pass-through + +The named fields cover the common path; everything else the Codex SDK accepts goes through the `options` field untouched (camelCase ThreadOptions, exactly as in the SDK): + +```jsonc +{ + "prompt": "...", + "options": { + "networkAccessEnabled": true, + "webSearchMode": "live", + "additionalDirectories": ["/another/repo"] + } +} +``` + +And the full output side is available raw: every event Codex emits (`thread.started`, `turn.started`, `item.started/updated/completed` for commands, patches, MCP tool calls, web searches, reasoning, agent messages, `turn.completed` with usage, `turn.failed`) is mirrored verbatim onto the `codex::events` stream, group_id = session_id. Consumers that want the exact Codex wire format read `codex::events`; consumers that want harness-shaped frames read `agent::events`. Same turn, two views. + +## Configuration + +```yaml +engine_url: ws://127.0.0.1:49134 + +defaults: + model: "" # empty = Codex default + sandbox_mode: workspace-write # read-only | workspace-write | danger-full-access + approval_policy: never # never | on-request | on-failure | untrusted + reasoning_effort: "" # empty = Codex default + cwd: "" # default working directory for runs + skip_git_repo_check: true + +events_stream: agent::events # translated AgentEvent frames +raw_events_stream: codex::events # verbatim Codex thread events +codex_executable: "" # path to the codex CLI; empty = PATH resolution +``` + +Sandboxing is Codex's own: `read-only` blocks writes, `workspace-write` allows edits inside `cwd`, `danger-full-access` disables the sandbox. Headless runs keep `approval_policy: never`; commands the sandbox blocks fail instead of prompting. + +## Observability + +Every `codex::run` is an ordinary traced invocation on the engine: the trace carries the full input payload and the output (result, usage) as span events, with per-function p50/p95/p99 in the console's trace explorer — no extra instrumentation in the worker. + +## How it maps + +| Codex | iii | +| --- | --- | +| SDK `runStreamed()` turn | `codex::run` invocation | +| every thread event, verbatim | `codex::events` stream frame | +| agent_message / reasoning item | `message_complete` frame on `agent::events` | +| command_execution / file_change / mcp_tool_call / web_search | `function_execution_start` / `function_execution_end` frames | +| turn end | `turn_end` + `agent_end` frames, function return value | +| thread resume | engine state scope `codex_sessions`, keyed by iii session_id | +| extra capability | another iii worker on the bus (`shell`, `database`, `storage`, ...) | diff --git a/codex/biome.json b/codex/biome.json new file mode 100644 index 00000000..29673813 --- /dev/null +++ b/codex/biome.json @@ -0,0 +1,46 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.4.10/schema.json", + "root": false, + "vcs": { "enabled": false, "clientKind": "git" }, + "files": { + "ignoreUnknown": false, + "includes": ["**", "!!**/dist"] + }, + "formatter": { + "enabled": true, + "indentStyle": "space", + "indentWidth": 2, + "lineWidth": 100 + }, + "assist": { + "enabled": true, + "actions": { + "source": { + "organizeImports": "off" + } + } + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "suspicious": { + "noExplicitAny": "warn" + }, + "style": { + "useImportType": "off", + "useNodejsImportProtocol": "error" + }, + "complexity": { + "noForEach": "off" + } + } + }, + "javascript": { + "formatter": { + "quoteStyle": "single", + "trailingCommas": "all", + "semicolons": "always" + } + } +} diff --git a/codex/config.yaml b/codex/config.yaml new file mode 100644 index 00000000..7ad22c47 --- /dev/null +++ b/codex/config.yaml @@ -0,0 +1,22 @@ +engine_url: ws://127.0.0.1:49134 + +defaults: + model: "" + sandbox_mode: workspace-write # read-only | workspace-write | danger-full-access + approval_policy: never # never | on-request | on-failure | untrusted + reasoning_effort: "" # empty = Codex default; minimal|low|medium|high|xhigh + cwd: "" + skip_git_repo_check: true + +# Stream AgentEvent frames here, grouped by session_id. The console and +# acp worker both read this stream. +events_stream: agent::events + +# Raw Codex thread events (exact SDK shapes: thread.started, turn.started, +# item.started/updated/completed, turn.completed, turn.failed, error) +# mirrored verbatim here, grouped by session_id. +raw_events_stream: codex::events + +# Path to the Codex CLI binary. Empty = SDK default resolution; the worker +# falls back to the `codex` binary on PATH (needed for the bundled build). +codex_executable: "" diff --git a/codex/iii.worker.yaml b/codex/iii.worker.yaml new file mode 100644 index 00000000..691b3d60 --- /dev/null +++ b/codex/iii.worker.yaml @@ -0,0 +1,17 @@ +iii: v1 +name: codex +language: javascript +deploy: bundle +manifest: package.json +description: OpenAI Codex as an iii worker — codex::* functions run headless Codex turns, mirror raw thread events onto codex::events, and stream AgentEvent frames onto agent::events. + +runtime: + kind: javascript + +scripts: + install: npm install && npm run build + start: node dist/index.js + +dependencies: + iii-state: "^0.17.0" + iii-stream: "^0.17.0" diff --git a/codex/package.json b/codex/package.json new file mode 100644 index 00000000..02040132 --- /dev/null +++ b/codex/package.json @@ -0,0 +1,39 @@ +{ + "name": "codex", + "version": "0.1.0", + "private": true, + "description": "OpenAI Codex as an iii worker: headless turns over the iii bus, raw events on codex::events, AgentEvent frames on agent::events.", + "license": "Apache-2.0", + "type": "module", + "engines": { + "node": ">=22" + }, + "packageManager": "pnpm@10.18.2", + "scripts": { + "build": "tsc -b", + "build:bundle": "node scripts/build-bundle.mjs", + "typecheck": "tsc -b --noEmit", + "lint": "biome check .", + "lint:fix": "biome check --write .", + "test": "vitest run", + "start": "node dist/index.js", + "dev": "tsx src/index.ts" + }, + "bin": { + "codex-worker": "./dist/index.js" + }, + "dependencies": { + "@openai/codex-sdk": "^0.139.0", + "iii-sdk": "^0.19.2", + "yaml": "^2.6.0", + "zod": "^4.0.0" + }, + "devDependencies": { + "@biomejs/biome": "2.4.10", + "@types/node": "^22.10.0", + "esbuild": "^0.25.0", + "tsx": "^4.19.0", + "typescript": "^5.7.0", + "vitest": "^3.0.0" + } +} diff --git a/codex/pnpm-lock.yaml b/codex/pnpm-lock.yaml new file mode 100644 index 00000000..c3e34ccf --- /dev/null +++ b/codex/pnpm-lock.yaml @@ -0,0 +1,2168 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@openai/codex-sdk': + specifier: ^0.139.0 + version: 0.139.0 + iii-sdk: + specifier: ^0.19.2 + version: 0.19.2 + yaml: + specifier: ^2.6.0 + version: 2.9.0 + zod: + specifier: ^4.0.0 + version: 4.4.3 + devDependencies: + '@biomejs/biome': + specifier: 2.4.10 + version: 2.4.10 + '@types/node': + specifier: ^22.10.0 + version: 22.19.21 + esbuild: + specifier: ^0.25.0 + version: 0.25.12 + tsx: + specifier: ^4.19.0 + version: 4.22.4 + typescript: + specifier: ^5.7.0 + version: 5.9.3 + vitest: + specifier: ^3.0.0 + version: 3.2.6(@types/node@22.19.21)(tsx@4.22.4)(yaml@2.9.0) + +packages: + + '@biomejs/biome@2.4.10': + resolution: {integrity: sha512-xxA3AphFQ1geij4JTHXv4EeSTda1IFn22ye9LdyVPoJU19fNVl0uzfEuhsfQ4Yue/0FaLs2/ccVi4UDiE7R30w==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-darwin-arm64@2.4.10': + resolution: {integrity: sha512-vuzzI1cWqDVzOMIkYyHbKqp+AkQq4K7k+UCXWpkYcY/HDn1UxdsbsfgtVpa40shem8Kax4TLDLlx8kMAecgqiw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@2.4.10': + resolution: {integrity: sha512-14fzASRo+BPotwp7nWULy2W5xeUyFnTaq1V13Etrrxkrih+ez/2QfgFm5Ehtf5vSjtgx/IJycMMpn5kPd5ZNaA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@2.4.10': + resolution: {integrity: sha512-WrJY6UuiSD/Dh+nwK2qOTu8kdMDlLV3dLMmychIghHPAysWFq1/DGC1pVZx8POE3ZkzKR3PUUnVrtZfMfaJjyQ==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-arm64@2.4.10': + resolution: {integrity: sha512-7MH1CMW5uuxQ/s7FLST63qF8B3Hgu2HRdZ7tA1X1+mk+St4JOuIrqdhIBnnyqeyWJNI+Bww7Es5QZ0wIc1Cmkw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-x64-musl@2.4.10': + resolution: {integrity: sha512-kDTi3pI6PBN6CiczsWYOyP2zk0IJI08EWEQyDMQWW221rPaaEz6FvjLhnU07KMzLv8q3qSuoB93ua6inSQ55Tw==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-linux-x64@2.4.10': + resolution: {integrity: sha512-tZLvEEi2u9Xu1zAqRjTcpIDGVtldigVvzug2fTuPG0ME/g8/mXpRPcNgLB22bGn6FvLJpHHnqLnwliOu8xjYrg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-win32-arm64@2.4.10': + resolution: {integrity: sha512-umwQU6qPzH+ISTf/eHyJ/QoQnJs3V9Vpjz2OjZXe9MVBZ7prgGafMy7yYeRGnlmDAn87AKTF3Q6weLoMGpeqdQ==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@2.4.10': + resolution: {integrity: sha512-aW/JU5GuyH4uxMrNYpoC2kjaHlyJGLgIa3XkhPEZI0uKhZhJZU8BuEyJmvgzSPQNGozBwWjC972RaNdcJ9KyJg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.27.7': + resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.28.0': + resolution: {integrity: sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.27.7': + resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.28.0': + resolution: {integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.27.7': + resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.28.0': + resolution: {integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.27.7': + resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.28.0': + resolution: {integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.27.7': + resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.28.0': + resolution: {integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.7': + resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.28.0': + resolution: {integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.27.7': + resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.28.0': + resolution: {integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.7': + resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.28.0': + resolution: {integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.27.7': + resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.28.0': + resolution: {integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.27.7': + resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.28.0': + resolution: {integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.27.7': + resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.28.0': + resolution: {integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.27.7': + resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.28.0': + resolution: {integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.27.7': + resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.28.0': + resolution: {integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.27.7': + resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.28.0': + resolution: {integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.7': + resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.28.0': + resolution: {integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.27.7': + resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.28.0': + resolution: {integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.27.7': + resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.28.0': + resolution: {integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-arm64@0.27.7': + resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-arm64@0.28.0': + resolution: {integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.7': + resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.28.0': + resolution: {integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-arm64@0.27.7': + resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-arm64@0.28.0': + resolution: {integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.7': + resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.28.0': + resolution: {integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/openharmony-arm64@0.27.7': + resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/openharmony-arm64@0.28.0': + resolution: {integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.27.7': + resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.28.0': + resolution: {integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.27.7': + resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.28.0': + resolution: {integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.27.7': + resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.28.0': + resolution: {integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.27.7': + resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.28.0': + resolution: {integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@iii-dev/observability@0.19.2': + resolution: {integrity: sha512-FsAAzELzRKUA5h8CyLgsB/k0rlN3ZQeg9BVKBsxx8ubF6tNwdLS53bhDFEy9jE7Q5kDgx/AFRVdqB7pUANgChA==} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@openai/codex-sdk@0.139.0': + resolution: {integrity: sha512-r4lDckaVx4mVZy1v/7ykEhkeWjVfM/4oGJfhG0AP4+zN3Sa+jcf5hdY4EHfJasofBcp0tIF/7JCKHpv534R+tw==} + engines: {node: '>=18'} + + '@openai/codex@0.139.0': + resolution: {integrity: sha512-wr2fRE+fzW0CjEbfFsLh1ftarVEcw0CMLWS7QyA0nyOz5qacQPVq3cq2+/U7oEbwm1TOqoi0Fm1nxniB5FkpmA==} + engines: {node: '>=16'} + hasBin: true + + '@openai/codex@0.139.0-darwin-arm64': + resolution: {integrity: sha512-o+0ZKWwgDFMMLO7rwinzO0PQsgK+Vme1pMN2GeAxsX29ZgGZcyPICfpJbeGSUO1mb2a36Skjx6nfdRnxMY0r7w==} + engines: {node: '>=16'} + cpu: [arm64] + os: [darwin] + + '@openai/codex@0.139.0-darwin-x64': + resolution: {integrity: sha512-9gkBWzu6DB2rqU4DbpxD3DE5bofGpsK46Lp0h0I+bKWc2IIcxvSi8K2utKmBLoJCbKrn4JQu7dFNGRqEfENung==} + engines: {node: '>=16'} + cpu: [x64] + os: [darwin] + + '@openai/codex@0.139.0-linux-arm64': + resolution: {integrity: sha512-tBQE5lZciRHeWZGuURgjP9S717MvTIpQMc593+DNxY2LQxozkngOkzFSQd1+/UmQKGrCqdFLu5irIwPXpSZyEw==} + engines: {node: '>=16'} + cpu: [arm64] + os: [linux] + + '@openai/codex@0.139.0-linux-x64': + resolution: {integrity: sha512-14UgzDS+X4crkvdt6S02A/ZZOrS8ZyWiuTRpguCtnhNamb7unSuDxy86BWgpAl3sqiTaN2CP8VLyp2ohQ8Nbzw==} + engines: {node: '>=16'} + cpu: [x64] + os: [linux] + + '@openai/codex@0.139.0-win32-arm64': + resolution: {integrity: sha512-nlwRjsYotH1Rtqu/Q0VwQbIeO2UX1mkHK84Ov9qn/hl29QqqoBtno0tRyqIPbkXFIVQuWiAYXlV3ugLwH5fTrQ==} + engines: {node: '>=16'} + cpu: [arm64] + os: [win32] + + '@openai/codex@0.139.0-win32-x64': + resolution: {integrity: sha512-lQrVLNz+90wdvWVNFDvCkHQRiAK9ZllmkTka3c8eqSDqdJk35Gpgppfv9Xtw5M2ZBtTq0sBdWBiCMyzGDBSpmQ==} + engines: {node: '>=16'} + cpu: [x64] + os: [win32] + + '@opentelemetry/api-logs@0.57.2': + resolution: {integrity: sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==} + engines: {node: '>=14'} + + '@opentelemetry/api@1.9.1': + resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/context-async-hooks@1.30.1': + resolution: {integrity: sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@1.30.1': + resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/instrumentation@0.57.2': + resolution: {integrity: sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-transformer@0.57.2': + resolution: {integrity: sha512-48IIRj49gbQVK52jYsw70+Jv+JbahT8BqT2Th7C4H7RCM9d0gZ5sgNPoMpWldmfjvIsSgiGJtjfk9MeZvjhoig==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/propagator-b3@1.30.1': + resolution: {integrity: sha512-oATwWWDIJzybAZ4pO76ATN5N6FFbOA1otibAVlS8v90B4S1wClnhRUk7K+2CHAwN1JKYuj4jh/lpCEG5BAqFuQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/propagator-jaeger@1.30.1': + resolution: {integrity: sha512-Pj/BfnYEKIOImirH76M4hDaBSx6HyZ2CXUqk+Kj02m6BB80c/yo4BdWkn/1gDFfU+YPY+bPR2U0DKBfdxCKwmg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/resources@1.30.1': + resolution: {integrity: sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-logs@0.57.2': + resolution: {integrity: sha512-TXFHJ5c+BKggWbdEQ/inpgIzEmS2BGQowLE9UhsMd7YYlUfBQJ4uax0VF/B5NYigdM/75OoJGhAV3upEhK+3gg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.10.0' + + '@opentelemetry/sdk-metrics@1.30.1': + resolution: {integrity: sha512-q9zcZ0Okl8jRgmy7eNW3Ku1XSgg3sDLa5evHZpCwjspw7E8Is4K/haRPDJrBcX3YSn/Y7gUvFnByNYEKQNbNog==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@1.30.1': + resolution: {integrity: sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-trace-node@1.30.1': + resolution: {integrity: sha512-cBjYOINt1JxXdpw1e5MlHmFRc5fgj4GW/86vsKFxJCJ8AL4PdVtYH41gWwl4qd4uQjqEL1oJVrXkSy5cnduAnQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/semantic-conventions@1.28.0': + resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} + engines: {node: '>=14'} + + '@opentelemetry/semantic-conventions@1.41.1': + resolution: {integrity: sha512-/UhIkaZgPutTFmQ7RnIJGgDXZmtEJ7Dvi86xNTFWcnRxVRNk/aotsqDJYeEvDP+FSMB2SdW+pQzNMcWP0rwuNA==} + engines: {node: '>=14'} + + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.5': + resolution: {integrity: sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==} + + '@protobufjs/eventemitter@1.1.1': + resolution: {integrity: sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==} + + '@protobufjs/fetch@1.1.1': + resolution: {integrity: sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.2': + resolution: {integrity: sha512-pa0vFRuws4wkvaXKK1uXZMAwAX4/t8ANaJo45iw/oQHNQ9q5xUzwgFmVJGXiga2BeN+zpX7Vf9vmsiIa2J+MUw==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.1': + resolution: {integrity: sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==} + + '@rollup/rollup-android-arm-eabi@4.61.1': + resolution: {integrity: sha512-JnBB8MdXj45cajvTuO5FmPlvFVJRQgvrz1uSEl3NwqFnReAPGwb8EanbGi4z2nRaqLzjJSv5/JmycoTKlRZxHA==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.61.1': + resolution: {integrity: sha512-Jx2g7iSjw4AOT0HDPHM9RV3GNjRXwybWtSFZiZAYUTjUwjVrYIwq3kBf+LnhqJlzXFAqTAh2F7IGI+O568exPw==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.61.1': + resolution: {integrity: sha512-0F1L/Z3Eqv8mT2n3dCpeO8GcTvHvVqkP5/t6DMsn0KzhYVcg+s7Ncl5DS8qjKYEeio6Az0Gt6nyBORay5qIlCA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.61.1': + resolution: {integrity: sha512-qLttcH871ujY4YcVfUSShhOw+CsoTatYz8gRbHO7Bb92QH059/P0y5do1KMs41fY0BpD2x4AJH/gID0zFiqVKQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.61.1': + resolution: {integrity: sha512-fUI4RapGE0Oh3mb8mgfvC1O2nU1RpDZUKnDQm3xB1Ipg7C2wTs5Kstz7G2uWK99a8S2yTMq8/P4uycwNa0nJyw==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.61.1': + resolution: {integrity: sha512-H5YrdvJaDtI/U9/emrD4b++xkvp3y/JvOe4rizHbxvkyMfRS/CiRYdji+Pl8D0brEaNFWUh1drQxgAGIl6Xudw==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.61.1': + resolution: {integrity: sha512-Q8CBCCQtDFrYtXoeUXSrnFXKOnyUhx6bz+SkL6A0E7V8kAiCJ5pamq1WtbfpVGhR5TSpXY6ak3avmDc5fHTyJA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.61.1': + resolution: {integrity: sha512-nwnhk1581l0FBVellGcVCAT0Oi06onEA3WB53sf01VO3I0UPBkMH9sXONYME2K0ovXcNayJfNtHfm6mpJElatQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.61.1': + resolution: {integrity: sha512-x5Xr49hwt3hdW75UOZm3395YwwzPyauktslv29KpWL/T+vVAzoT3azLcTWv0eMciBNrx+DYjH4paehHoLpPvpg==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.61.1': + resolution: {integrity: sha512-unMS3H73DpaoPyyEVPjGKleM/s0mkmsauTENpw4INQY8y4+IuLNjkueQ5QCtC0D3N38Y38yhAU8OoZ20S2Tm6w==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loong64-gnu@4.61.1': + resolution: {integrity: sha512-zNZzGRnAhwjFEYmvphJRV5XaQGjs62cCmeYYHUT//NbvEnHauw+I85nGG+SiVg5ld4GX8D1IbKIX+ozITQnhMQ==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-loong64-musl@4.61.1': + resolution: {integrity: sha512-LdpWGL8X209B2SIvWjqlc8VZgM6PKfontSerGepuldQmHYrAOtnMCXeJkxXGbC+PPZVOuu5czJo7fNV6aeW8rQ==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.61.1': + resolution: {integrity: sha512-EC5kTtNaNGOmbMGqar8dvJy6y/hg99GAwjfBz++pxZhQATXGcRjd6c5en5wcbru0vkRmiMGsQKdMJOOf6sza4g==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-ppc64-musl@4.61.1': + resolution: {integrity: sha512-8hiwp6D4acEcNK78I4rP0/XtS1sknWIAMJBPdR4l6zUtyTm5KiTDr5bXmWt4foY7nAN7AThDHgkLIEZOWKbzWw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.61.1': + resolution: {integrity: sha512-10dh/h/BqA7DuMPWSxkR8uks18FRwnwOEqr5zOTEl+NOwP/OMzKX8OFR/Of9xxDA7D5qef1Nzar5WDD2kCCr1g==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.61.1': + resolution: {integrity: sha512-YKJ5lg35DP17gcAOggnihe+APw9HLyj1Xn7gsmGumBJAUDa6NGXNixJzmkWLhcK9TOuuyQjdamzvJefkO7qHZQ==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.61.1': + resolution: {integrity: sha512-Mlil5G2Jj6a7B3LWGctg+XPL9vdXYuzCtNXfxOQ0nPjc2m6ueUktocPGH9bnAM0bNRKb/bAWTujUU7IJQdQA+g==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.61.1': + resolution: {integrity: sha512-bVWIOIk6pV01p4CdUbPP7CJ/434z+OooYjDuFcR+44N35YvKUC66G8MGnvcWx5mWKW3g61J+t74l3Kj15Kwn2Q==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.61.1': + resolution: {integrity: sha512-qy5pBvZbqNFheBz61R1rzsezjm0J7O2oNGoWtGoY89SZYLUfxAJTBAqDChqAIdB4rCiIbi9nF7yZ83GnNiLwSw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-openbsd-x64@4.61.1': + resolution: {integrity: sha512-E83TXjI4zm0+5f2qO+UOudaCYIhYwpJ5jq6YCZNIZ+6CbfhKrkAGezeiASBL9ElxAxFsRS9ZhESv8mfnj6TKeg==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.61.1': + resolution: {integrity: sha512-fbWnKqVkjrJN38vNe3ahkbk6iejS/3b0Nt7EEtPpE6RBacZcGXNKbzfHN3GUUlXOPghUg0j6XUGrtjX9z1sIvA==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.61.1': + resolution: {integrity: sha512-ArMl38iVAbk0New1ogihQNY6iphLi4ZaRsa037gUzv5yeKPY8TD3Dmy4x2RNC1VztU/uqm+G+/RwFrSka3Oy2g==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.61.1': + resolution: {integrity: sha512-0mYtjHS9ucAbcATycCNK9IGBk/cCe/ma7EmSLGZdsxnOA8cjRIyU04wDpVAD9NiOfLUR9KTxdiO53uOkherqjQ==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.61.1': + resolution: {integrity: sha512-gK1iCEPfpoSG9wfBihXxvBMi8ZfcWffYkEsC/Eih+iFENTaewvNcrEQ69lIOWYO5pePHKLHHO7nq5AILGO/HQQ==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.61.1': + resolution: {integrity: sha512-X+zaP2x+j4RXGfbp/seSoRHWnPxzApilDszisZxbYH5C/jTxFhCtDNdPGZb9lJyYPs24wGxruPF7Y+sIXt9Gzw==} + cpu: [x64] + os: [win32] + + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/node@22.19.21': + resolution: {integrity: sha512-VMeFBSCKQKmm2swI2kW51SFusDqekC6q9trBCvJ/JliDchFSuoYYKN7yVNjPthP1HKZcx3U1gI/wTcEBjEFKTA==} + + '@types/shimmer@1.2.0': + resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==} + + '@vitest/expect@3.2.6': + resolution: {integrity: sha512-1+7q9BtaKzEmO+fmNT3kYvoNn5Y71XWAx2Q5HRim4tTVRQVRv4uJFAQ5FbK0OPUeNP/WmVCpxYxoJdvuHVjzBQ==} + + '@vitest/mocker@3.2.6': + resolution: {integrity: sha512-EZOrpDbkKotFAP7wPAQV1UIyoGOk4oX7ynWhBhLB7v+meMHbQhU16oPpIYGTTe4oFlhpryGpgpcZP/sin3hYuw==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@3.2.6': + resolution: {integrity: sha512-lb7XXXzmm2h2ASzFnRvQpDo6onT1NmMJA3tkGTWiBFtRJ9lxGY3d3mm/Apt36gej2bkkOVLL/yTOtufDaFa/jA==} + + '@vitest/runner@3.2.6': + resolution: {integrity: sha512-HYcoSj1w5tcgUnzoF0HcyaAQjpA1gj9ftUJ7iSJSuipc02jW9gKkigwZbjFldAfYHA1fa8UZVRftdMY5msWM9Q==} + + '@vitest/snapshot@3.2.6': + resolution: {integrity: sha512-H+ZjNTWGpObenh0YnlBctAPnJSI20P81PL8BPzWpx54YXLLTm8hEsWawtcYLMrwvpK48hGxLLbCS+1KRXhsKhw==} + + '@vitest/spy@3.2.6': + resolution: {integrity: sha512-oq6BbH68WzcWmwtBrU9nqLeaXTR4XwJF7FSLkKEZo4i6eoXcrxjcwSuTvWBIRUTC6VC72nXYunzqgZA+IKdtxg==} + + '@vitest/utils@3.2.6': + resolution: {integrity: sha512-lI23nIs4bnT3T8NIoh+vFaz5s2/DdP0Jgt2jxwgWljvwn82cLJtyi/If+fjFyoLMGIOz0U/fKvWE0d4jsNQEfg==} + + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} + + check-error@2.1.3: + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} + engines: {node: '>= 16'} + + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.27.7: + resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.28.0: + resolution: {integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==} + engines: {node: '>=18'} + hasBin: true + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + engines: {node: '>=12.0.0'} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} + + iii-sdk@0.19.2: + resolution: {integrity: sha512-HgMKHxmrOZNxNvJGwMvLsQ7UoifIpv1Av46gCs4vbBjSWDRQiM/wCNsTlZ/QUdSiZOXs6FjIxSLf3kuL1H3bLw==} + + import-in-the-middle@1.15.0: + resolution: {integrity: sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==} + + is-core-module@2.16.2: + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} + engines: {node: '>= 0.4'} + + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + module-details-from-path@1.0.4: + resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} + engines: {node: ^10 || ^12 || >=14} + + protobufjs@7.6.3: + resolution: {integrity: sha512-+k0vdJKNdW+Vu+dYe8tZA/VvQb6XKNWexC6URwBFXxNnjLJz9nQJCemGyNgRAWD+B7+nGNc9qMPGwcD7s4nzUw==} + engines: {node: '>=12.0.0'} + + require-in-the-middle@7.5.2: + resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==} + engines: {node: '>=8.6.0'} + + resolve@1.22.12: + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} + engines: {node: '>= 0.4'} + hasBin: true + + rollup@4.61.1: + resolution: {integrity: sha512-I4KW6iuRpuu2uHBLraZ1wNZe0DP7lnRha+VJ9tNaYVaVgKhW0aI3h4RYnoRPeql0flHm/Co55b7snEDcOfOJrA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + semver@7.8.4: + resolution: {integrity: sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==} + engines: {node: '>=10'} + hasBin: true + + shimmer@1.2.1: + resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + + strip-literal@3.1.0: + resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} + engines: {node: '>=14.0.0'} + + tsx@4.22.4: + resolution: {integrity: sha512-X8EX+XV4QR5xCsrgxaED954zTDfY8KqlDtskKEL0cHhyS/P8b4IFOvGDQpsC9Q1XnLq915wEfwwY/zzskCtmhg==} + engines: {node: '>=18.0.0'} + hasBin: true + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite@7.3.5: + resolution: {integrity: sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@3.2.6: + resolution: {integrity: sha512-xejya+bT/j/+R/AGa1XOfRxLmNUlLtlwjRsFUILF+xHfzElmGcmFydy2gqqIrd62ptIEfwVMofd19uNWD9L7Nw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.2.6 + '@vitest/ui': 3.2.6 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} + engines: {node: '>= 14.6'} + hasBin: true + + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + +snapshots: + + '@biomejs/biome@2.4.10': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 2.4.10 + '@biomejs/cli-darwin-x64': 2.4.10 + '@biomejs/cli-linux-arm64': 2.4.10 + '@biomejs/cli-linux-arm64-musl': 2.4.10 + '@biomejs/cli-linux-x64': 2.4.10 + '@biomejs/cli-linux-x64-musl': 2.4.10 + '@biomejs/cli-win32-arm64': 2.4.10 + '@biomejs/cli-win32-x64': 2.4.10 + + '@biomejs/cli-darwin-arm64@2.4.10': + optional: true + + '@biomejs/cli-darwin-x64@2.4.10': + optional: true + + '@biomejs/cli-linux-arm64-musl@2.4.10': + optional: true + + '@biomejs/cli-linux-arm64@2.4.10': + optional: true + + '@biomejs/cli-linux-x64-musl@2.4.10': + optional: true + + '@biomejs/cli-linux-x64@2.4.10': + optional: true + + '@biomejs/cli-win32-arm64@2.4.10': + optional: true + + '@biomejs/cli-win32-x64@2.4.10': + optional: true + + '@esbuild/aix-ppc64@0.25.12': + optional: true + + '@esbuild/aix-ppc64@0.27.7': + optional: true + + '@esbuild/aix-ppc64@0.28.0': + optional: true + + '@esbuild/android-arm64@0.25.12': + optional: true + + '@esbuild/android-arm64@0.27.7': + optional: true + + '@esbuild/android-arm64@0.28.0': + optional: true + + '@esbuild/android-arm@0.25.12': + optional: true + + '@esbuild/android-arm@0.27.7': + optional: true + + '@esbuild/android-arm@0.28.0': + optional: true + + '@esbuild/android-x64@0.25.12': + optional: true + + '@esbuild/android-x64@0.27.7': + optional: true + + '@esbuild/android-x64@0.28.0': + optional: true + + '@esbuild/darwin-arm64@0.25.12': + optional: true + + '@esbuild/darwin-arm64@0.27.7': + optional: true + + '@esbuild/darwin-arm64@0.28.0': + optional: true + + '@esbuild/darwin-x64@0.25.12': + optional: true + + '@esbuild/darwin-x64@0.27.7': + optional: true + + '@esbuild/darwin-x64@0.28.0': + optional: true + + '@esbuild/freebsd-arm64@0.25.12': + optional: true + + '@esbuild/freebsd-arm64@0.27.7': + optional: true + + '@esbuild/freebsd-arm64@0.28.0': + optional: true + + '@esbuild/freebsd-x64@0.25.12': + optional: true + + '@esbuild/freebsd-x64@0.27.7': + optional: true + + '@esbuild/freebsd-x64@0.28.0': + optional: true + + '@esbuild/linux-arm64@0.25.12': + optional: true + + '@esbuild/linux-arm64@0.27.7': + optional: true + + '@esbuild/linux-arm64@0.28.0': + optional: true + + '@esbuild/linux-arm@0.25.12': + optional: true + + '@esbuild/linux-arm@0.27.7': + optional: true + + '@esbuild/linux-arm@0.28.0': + optional: true + + '@esbuild/linux-ia32@0.25.12': + optional: true + + '@esbuild/linux-ia32@0.27.7': + optional: true + + '@esbuild/linux-ia32@0.28.0': + optional: true + + '@esbuild/linux-loong64@0.25.12': + optional: true + + '@esbuild/linux-loong64@0.27.7': + optional: true + + '@esbuild/linux-loong64@0.28.0': + optional: true + + '@esbuild/linux-mips64el@0.25.12': + optional: true + + '@esbuild/linux-mips64el@0.27.7': + optional: true + + '@esbuild/linux-mips64el@0.28.0': + optional: true + + '@esbuild/linux-ppc64@0.25.12': + optional: true + + '@esbuild/linux-ppc64@0.27.7': + optional: true + + '@esbuild/linux-ppc64@0.28.0': + optional: true + + '@esbuild/linux-riscv64@0.25.12': + optional: true + + '@esbuild/linux-riscv64@0.27.7': + optional: true + + '@esbuild/linux-riscv64@0.28.0': + optional: true + + '@esbuild/linux-s390x@0.25.12': + optional: true + + '@esbuild/linux-s390x@0.27.7': + optional: true + + '@esbuild/linux-s390x@0.28.0': + optional: true + + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/linux-x64@0.27.7': + optional: true + + '@esbuild/linux-x64@0.28.0': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.27.7': + optional: true + + '@esbuild/netbsd-arm64@0.28.0': + optional: true + + '@esbuild/netbsd-x64@0.25.12': + optional: true + + '@esbuild/netbsd-x64@0.27.7': + optional: true + + '@esbuild/netbsd-x64@0.28.0': + optional: true + + '@esbuild/openbsd-arm64@0.25.12': + optional: true + + '@esbuild/openbsd-arm64@0.27.7': + optional: true + + '@esbuild/openbsd-arm64@0.28.0': + optional: true + + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openbsd-x64@0.27.7': + optional: true + + '@esbuild/openbsd-x64@0.28.0': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.27.7': + optional: true + + '@esbuild/openharmony-arm64@0.28.0': + optional: true + + '@esbuild/sunos-x64@0.25.12': + optional: true + + '@esbuild/sunos-x64@0.27.7': + optional: true + + '@esbuild/sunos-x64@0.28.0': + optional: true + + '@esbuild/win32-arm64@0.25.12': + optional: true + + '@esbuild/win32-arm64@0.27.7': + optional: true + + '@esbuild/win32-arm64@0.28.0': + optional: true + + '@esbuild/win32-ia32@0.25.12': + optional: true + + '@esbuild/win32-ia32@0.27.7': + optional: true + + '@esbuild/win32-ia32@0.28.0': + optional: true + + '@esbuild/win32-x64@0.25.12': + optional: true + + '@esbuild/win32-x64@0.27.7': + optional: true + + '@esbuild/win32-x64@0.28.0': + optional: true + + '@iii-dev/observability@0.19.2': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.57.2 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.57.2(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-logs': 0.57.2(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-metrics': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-node': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.41.1 + ws: 8.21.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@openai/codex-sdk@0.139.0': + dependencies: + '@openai/codex': 0.139.0 + + '@openai/codex@0.139.0': + optionalDependencies: + '@openai/codex-darwin-arm64': '@openai/codex@0.139.0-darwin-arm64' + '@openai/codex-darwin-x64': '@openai/codex@0.139.0-darwin-x64' + '@openai/codex-linux-arm64': '@openai/codex@0.139.0-linux-arm64' + '@openai/codex-linux-x64': '@openai/codex@0.139.0-linux-x64' + '@openai/codex-win32-arm64': '@openai/codex@0.139.0-win32-arm64' + '@openai/codex-win32-x64': '@openai/codex@0.139.0-win32-x64' + + '@openai/codex@0.139.0-darwin-arm64': + optional: true + + '@openai/codex@0.139.0-darwin-x64': + optional: true + + '@openai/codex@0.139.0-linux-arm64': + optional: true + + '@openai/codex@0.139.0-linux-x64': + optional: true + + '@openai/codex@0.139.0-win32-arm64': + optional: true + + '@openai/codex@0.139.0-win32-x64': + optional: true + + '@opentelemetry/api-logs@0.57.2': + dependencies: + '@opentelemetry/api': 1.9.1 + + '@opentelemetry/api@1.9.1': {} + + '@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + + '@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/semantic-conventions': 1.28.0 + + '@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.57.2 + '@types/shimmer': 1.2.0 + import-in-the-middle: 1.15.0 + require-in-the-middle: 7.5.2 + semver: 7.8.4 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/otlp-transformer@0.57.2(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.57.2 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-logs': 0.57.2(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-metrics': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.1) + protobufjs: 7.6.3 + + '@opentelemetry/propagator-b3@1.30.1(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + + '@opentelemetry/propagator-jaeger@1.30.1(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + + '@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.28.0 + + '@opentelemetry/sdk-logs@0.57.2(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.57.2 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.1) + + '@opentelemetry/sdk-metrics@1.30.1(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.1) + + '@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.28.0 + + '@opentelemetry/sdk-trace-node@1.30.1(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/propagator-b3': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/propagator-jaeger': 1.30.1(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.1) + semver: 7.8.4 + + '@opentelemetry/semantic-conventions@1.28.0': {} + + '@opentelemetry/semantic-conventions@1.41.1': {} + + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.5': {} + + '@protobufjs/eventemitter@1.1.1': {} + + '@protobufjs/fetch@1.1.1': + dependencies: + '@protobufjs/aspromise': 1.1.2 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.2': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.1': {} + + '@rollup/rollup-android-arm-eabi@4.61.1': + optional: true + + '@rollup/rollup-android-arm64@4.61.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.61.1': + optional: true + + '@rollup/rollup-darwin-x64@4.61.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.61.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.61.1': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.61.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.61.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.61.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.61.1': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.61.1': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.61.1': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.61.1': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.61.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.61.1': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.61.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.61.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.61.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.61.1': + optional: true + + '@rollup/rollup-openbsd-x64@4.61.1': + optional: true + + '@rollup/rollup-openharmony-arm64@4.61.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.61.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.61.1': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.61.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.61.1': + optional: true + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/deep-eql@4.0.2': {} + + '@types/estree@1.0.9': {} + + '@types/node@22.19.21': + dependencies: + undici-types: 6.21.0 + + '@types/shimmer@1.2.0': {} + + '@vitest/expect@3.2.6': + dependencies: + '@types/chai': 5.2.3 + '@vitest/spy': 3.2.6 + '@vitest/utils': 3.2.6 + chai: 5.3.3 + tinyrainbow: 2.0.0 + + '@vitest/mocker@3.2.6(vite@7.3.5(@types/node@22.19.21)(tsx@4.22.4)(yaml@2.9.0))': + dependencies: + '@vitest/spy': 3.2.6 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 7.3.5(@types/node@22.19.21)(tsx@4.22.4)(yaml@2.9.0) + + '@vitest/pretty-format@3.2.6': + dependencies: + tinyrainbow: 2.0.0 + + '@vitest/runner@3.2.6': + dependencies: + '@vitest/utils': 3.2.6 + pathe: 2.0.3 + strip-literal: 3.1.0 + + '@vitest/snapshot@3.2.6': + dependencies: + '@vitest/pretty-format': 3.2.6 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@3.2.6': + dependencies: + tinyspy: 4.0.4 + + '@vitest/utils@3.2.6': + dependencies: + '@vitest/pretty-format': 3.2.6 + loupe: 3.2.1 + tinyrainbow: 2.0.0 + + acorn-import-attributes@1.9.5(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + + acorn@8.16.0: {} + + assertion-error@2.0.1: {} + + cac@6.7.14: {} + + chai@5.3.3: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.3 + deep-eql: 5.0.2 + loupe: 3.2.1 + pathval: 2.0.1 + + check-error@2.1.3: {} + + cjs-module-lexer@1.4.3: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + deep-eql@5.0.2: {} + + es-errors@1.3.0: {} + + es-module-lexer@1.7.0: {} + + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + + esbuild@0.27.7: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.7 + '@esbuild/android-arm': 0.27.7 + '@esbuild/android-arm64': 0.27.7 + '@esbuild/android-x64': 0.27.7 + '@esbuild/darwin-arm64': 0.27.7 + '@esbuild/darwin-x64': 0.27.7 + '@esbuild/freebsd-arm64': 0.27.7 + '@esbuild/freebsd-x64': 0.27.7 + '@esbuild/linux-arm': 0.27.7 + '@esbuild/linux-arm64': 0.27.7 + '@esbuild/linux-ia32': 0.27.7 + '@esbuild/linux-loong64': 0.27.7 + '@esbuild/linux-mips64el': 0.27.7 + '@esbuild/linux-ppc64': 0.27.7 + '@esbuild/linux-riscv64': 0.27.7 + '@esbuild/linux-s390x': 0.27.7 + '@esbuild/linux-x64': 0.27.7 + '@esbuild/netbsd-arm64': 0.27.7 + '@esbuild/netbsd-x64': 0.27.7 + '@esbuild/openbsd-arm64': 0.27.7 + '@esbuild/openbsd-x64': 0.27.7 + '@esbuild/openharmony-arm64': 0.27.7 + '@esbuild/sunos-x64': 0.27.7 + '@esbuild/win32-arm64': 0.27.7 + '@esbuild/win32-ia32': 0.27.7 + '@esbuild/win32-x64': 0.27.7 + + esbuild@0.28.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.0 + '@esbuild/android-arm': 0.28.0 + '@esbuild/android-arm64': 0.28.0 + '@esbuild/android-x64': 0.28.0 + '@esbuild/darwin-arm64': 0.28.0 + '@esbuild/darwin-x64': 0.28.0 + '@esbuild/freebsd-arm64': 0.28.0 + '@esbuild/freebsd-x64': 0.28.0 + '@esbuild/linux-arm': 0.28.0 + '@esbuild/linux-arm64': 0.28.0 + '@esbuild/linux-ia32': 0.28.0 + '@esbuild/linux-loong64': 0.28.0 + '@esbuild/linux-mips64el': 0.28.0 + '@esbuild/linux-ppc64': 0.28.0 + '@esbuild/linux-riscv64': 0.28.0 + '@esbuild/linux-s390x': 0.28.0 + '@esbuild/linux-x64': 0.28.0 + '@esbuild/netbsd-arm64': 0.28.0 + '@esbuild/netbsd-x64': 0.28.0 + '@esbuild/openbsd-arm64': 0.28.0 + '@esbuild/openbsd-x64': 0.28.0 + '@esbuild/openharmony-arm64': 0.28.0 + '@esbuild/sunos-x64': 0.28.0 + '@esbuild/win32-arm64': 0.28.0 + '@esbuild/win32-ia32': 0.28.0 + '@esbuild/win32-x64': 0.28.0 + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.9 + + expect-type@1.3.0: {} + + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + + iii-sdk@0.19.2: + dependencies: + '@iii-dev/observability': 0.19.2 + '@opentelemetry/api': 1.9.1 + ws: 8.21.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + import-in-the-middle@1.15.0: + dependencies: + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) + cjs-module-lexer: 1.4.3 + module-details-from-path: 1.0.4 + + is-core-module@2.16.2: + dependencies: + hasown: 2.0.4 + + js-tokens@9.0.1: {} + + long@5.3.2: {} + + loupe@3.2.1: {} + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + module-details-from-path@1.0.4: {} + + ms@2.1.3: {} + + nanoid@3.3.12: {} + + path-parse@1.0.7: {} + + pathe@2.0.3: {} + + pathval@2.0.1: {} + + picocolors@1.1.1: {} + + picomatch@4.0.4: {} + + postcss@8.5.15: + dependencies: + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + protobufjs@7.6.3: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.5 + '@protobufjs/eventemitter': 1.1.1 + '@protobufjs/fetch': 1.1.1 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.2 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.1 + '@types/node': 22.19.21 + long: 5.3.2 + + require-in-the-middle@7.5.2: + dependencies: + debug: 4.4.3 + module-details-from-path: 1.0.4 + resolve: 1.22.12 + transitivePeerDependencies: + - supports-color + + resolve@1.22.12: + dependencies: + es-errors: 1.3.0 + is-core-module: 2.16.2 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + rollup@4.61.1: + dependencies: + '@types/estree': 1.0.9 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.61.1 + '@rollup/rollup-android-arm64': 4.61.1 + '@rollup/rollup-darwin-arm64': 4.61.1 + '@rollup/rollup-darwin-x64': 4.61.1 + '@rollup/rollup-freebsd-arm64': 4.61.1 + '@rollup/rollup-freebsd-x64': 4.61.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.61.1 + '@rollup/rollup-linux-arm-musleabihf': 4.61.1 + '@rollup/rollup-linux-arm64-gnu': 4.61.1 + '@rollup/rollup-linux-arm64-musl': 4.61.1 + '@rollup/rollup-linux-loong64-gnu': 4.61.1 + '@rollup/rollup-linux-loong64-musl': 4.61.1 + '@rollup/rollup-linux-ppc64-gnu': 4.61.1 + '@rollup/rollup-linux-ppc64-musl': 4.61.1 + '@rollup/rollup-linux-riscv64-gnu': 4.61.1 + '@rollup/rollup-linux-riscv64-musl': 4.61.1 + '@rollup/rollup-linux-s390x-gnu': 4.61.1 + '@rollup/rollup-linux-x64-gnu': 4.61.1 + '@rollup/rollup-linux-x64-musl': 4.61.1 + '@rollup/rollup-openbsd-x64': 4.61.1 + '@rollup/rollup-openharmony-arm64': 4.61.1 + '@rollup/rollup-win32-arm64-msvc': 4.61.1 + '@rollup/rollup-win32-ia32-msvc': 4.61.1 + '@rollup/rollup-win32-x64-gnu': 4.61.1 + '@rollup/rollup-win32-x64-msvc': 4.61.1 + fsevents: 2.3.3 + + semver@7.8.4: {} + + shimmer@1.2.1: {} + + siginfo@2.0.0: {} + + source-map-js@1.2.1: {} + + stackback@0.0.2: {} + + std-env@3.10.0: {} + + strip-literal@3.1.0: + dependencies: + js-tokens: 9.0.1 + + supports-preserve-symlinks-flag@1.0.0: {} + + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + + tinypool@1.1.1: {} + + tinyrainbow@2.0.0: {} + + tinyspy@4.0.4: {} + + tsx@4.22.4: + dependencies: + esbuild: 0.28.0 + optionalDependencies: + fsevents: 2.3.3 + + typescript@5.9.3: {} + + undici-types@6.21.0: {} + + vite-node@3.2.4(@types/node@22.19.21)(tsx@4.22.4)(yaml@2.9.0): + dependencies: + cac: 6.7.14 + debug: 4.4.3 + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 7.3.5(@types/node@22.19.21)(tsx@4.22.4)(yaml@2.9.0) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite@7.3.5(@types/node@22.19.21)(tsx@4.22.4)(yaml@2.9.0): + dependencies: + esbuild: 0.27.7 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + postcss: 8.5.15 + rollup: 4.61.1 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 22.19.21 + fsevents: 2.3.3 + tsx: 4.22.4 + yaml: 2.9.0 + + vitest@3.2.6(@types/node@22.19.21)(tsx@4.22.4)(yaml@2.9.0): + dependencies: + '@types/chai': 5.2.3 + '@vitest/expect': 3.2.6 + '@vitest/mocker': 3.2.6(vite@7.3.5(@types/node@22.19.21)(tsx@4.22.4)(yaml@2.9.0)) + '@vitest/pretty-format': 3.2.6 + '@vitest/runner': 3.2.6 + '@vitest/snapshot': 3.2.6 + '@vitest/spy': 3.2.6 + '@vitest/utils': 3.2.6 + chai: 5.3.3 + debug: 4.4.3 + expect-type: 1.3.0 + magic-string: 0.30.21 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.17 + tinypool: 1.1.1 + tinyrainbow: 2.0.0 + vite: 7.3.5(@types/node@22.19.21)(tsx@4.22.4)(yaml@2.9.0) + vite-node: 3.2.4(@types/node@22.19.21)(tsx@4.22.4)(yaml@2.9.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.19.21 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + ws@8.21.0: {} + + yaml@2.9.0: {} + + zod@4.4.3: {} diff --git a/codex/scripts/build-bundle.mjs b/codex/scripts/build-bundle.mjs new file mode 100644 index 00000000..0e20ef29 --- /dev/null +++ b/codex/scripts/build-bundle.mjs @@ -0,0 +1,64 @@ +#!/usr/bin/env node + +/** + * Single-file ESM bundle for codex (`dist/bundle/index.mjs`). + * + * Mirrors harness/scripts/build-bundle.mjs: + * + * 1. iii-sdk reads its own version at module-init via + * `createRequire(import.meta.url)("../package.json")` + * which resolves relative to the bundle path at runtime. The + * `inlinePackageJson` plugin rewrites that call to a literal object. + * + * 2. `@openai/codex-sdk` spawns the Codex CLI as a subprocess; the + * `codex_executable` config option (or a `codex` binary on PATH) + * covers the bundled case where the SDK cannot resolve its own + * vendored entrypoint. + */ + +import { readFile } from 'node:fs/promises'; +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { build } from 'esbuild'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); +const root = join(__dirname, '..'); + +/** @type {import('esbuild').Plugin} */ +const inlinePackageJson = { + name: 'iii-inline-sdk-package-json', + setup(b) { + b.onLoad({ filter: /iii-sdk[\\/]dist[\\/]index\.mjs$/ }, async (args) => { + const [source, pkg] = await Promise.all([ + readFile(args.path, 'utf8'), + readFile(join(root, 'node_modules/iii-sdk/package.json'), 'utf8'), + ]); + const { version } = JSON.parse(pkg); + const replaced = source.replace( + /createRequire\(\s*import\.meta\.url\s*\)\s*\(\s*"\.\.\/package\.json"\s*\)/g, + JSON.stringify({ version }), + ); + return { contents: replaced, loader: 'js' }; + }); + }, +}; + +await build({ + entryPoints: [join(root, 'src/index.ts')], + bundle: true, + platform: 'node', + target: 'node22', + format: 'esm', + outfile: join(root, 'dist/bundle/index.mjs'), + legalComments: 'none', + external: ['fsevents'], + banner: { + js: "import{createRequire as __iiiCR}from'module';const require=__iiiCR(import.meta.url);", + }, + define: { + 'process.env.NODE_ENV': '"production"', + }, + plugins: [inlinePackageJson], + logLevel: 'info', +}); diff --git a/codex/scripts/smoke/smoke-streams.mjs b/codex/scripts/smoke/smoke-streams.mjs new file mode 100644 index 00000000..dfec7845 --- /dev/null +++ b/codex/scripts/smoke/smoke-streams.mjs @@ -0,0 +1,26 @@ +import { registerWorker } from 'iii-sdk'; +const iii = registerWorker('ws://127.0.0.1:49134', { workerName: 'smoke-codex' }); +await new Promise((r) => setTimeout(r, 1500)); +const res = await iii.trigger({ + function_id: 'codex::run', + payload: { + prompt: 'Run the command `ls /tmp | head -3` and tell me how many lines it printed.', + cwd: '/tmp', + sandbox_mode: 'read-only', + }, + timeoutMs: 240_000, +}); +console.log('result ->', res.result, '| error:', res.is_error); +const raw = await iii.trigger({ + function_id: 'stream::list', + payload: { stream_name: 'codex::events', group_id: res.session_id }, +}); +console.log('codex::events types ->', JSON.stringify(raw.map((f) => f.type))); +const agent = await iii.trigger({ + function_id: 'stream::list', + payload: { stream_name: 'agent::events', group_id: res.session_id }, +}); +console.log('agent::events types ->', JSON.stringify(agent.map((f) => f.type))); +const exec = agent.find((f) => f.type === 'function_execution_start'); +console.log('exec frame ->', JSON.stringify(exec ?? null).slice(0, 200)); +process.exit(0); diff --git a/codex/skills/SKILL.md b/codex/skills/SKILL.md new file mode 100644 index 00000000..7e89855e --- /dev/null +++ b/codex/skills/SKILL.md @@ -0,0 +1,70 @@ +--- +name: codex +description: >- + Run headless OpenAI Codex turns over the iii bus — sandboxed shell, file + edits, and web search against any host directory — with verbatim event + streaming, thread resume, and full SDK option pass-through. +--- + +# codex + +The codex worker exposes the OpenAI Codex API as iii functions. One +`codex::run` call executes one headless Codex turn — the same agent the user +runs in their terminal, with the same login, filesystem, and sandbox — in a +chosen working directory, and returns the final result and token usage. The +worker is a pure pass-through: named payload fields cover the common path, +the `options` field forwards any Codex SDK ThreadOption verbatim, and every +thread event mirrors untouched onto the `codex::events` stream. A translated +AgentEvent view lands on `agent::events`, which is what the iii console +renders. + +Requires the `codex` CLI on the host with an existing `codex login` or +`OPENAI_API_KEY` in the worker environment. When a turn needs a capability +beyond Codex itself, add another iii worker to the bus instead of bolting +anything onto this one. + +## When to Use + +- Delegate a whole coding task ("add an endpoint and run the tests") in one + call, instead of orchestrating individual `coder::*` / `shell::*` calls + yourself: `codex::run` with `prompt` and `cwd`. +- Continue a conversation across calls: pass the same `session_id` again and + the worker resumes the underlying Codex thread with full context. +- Run long jobs without holding the call open: `codex::start` returns + `{session_id, started}` immediately; follow `codex::events` (group_id = + session_id) for raw progress or `agent::events` for the rendered view; + interrupt with `codex::stop`. +- Get structured final output: pass `output_schema` (JSON schema) and the + final agent message is JSON matching it. +- Reach past the named payload fields: anything the SDK ThreadOptions + accept goes through `options` unchanged, e.g. + `{"options": {"networkAccessEnabled": true, "webSearchMode": "live"}}`. + +## Boundaries + +- Spawns the host `codex` CLI per turn — needs Codex installed and + authenticated; not available inside a bare container without it. +- Execution safety is Codex's own sandbox (`sandbox_mode`), not the + engine's: `read-only` blocks writes, `workspace-write` allows edits in + `cwd`, `danger-full-access` disables the sandbox. Headless turns run + `approval_policy: never`, so blocked commands fail instead of prompting. +- One turn per session at a time: check `codex::status` (`live: true`) + before sending another `codex::run` for the same `session_id`; parallel + runs against one session race on the underlying thread resume. +- `agent::events` carries whole-message frames; per-item progress detail + (command output as it accumulates, todo lists) exists only on + `codex::events`. + +## Functions + +- `codex::run` — run one Codex turn and wait; accepts `prompt` (or a + `messages` array whose last user entry becomes the prompt), plus `model`, + `cwd`, `sandbox_mode`, `approval_policy`, `reasoning_effort`, + `skip_git_repo_check`, `output_schema`, and raw `options`; returns + `{session_id, codex_thread_id, result, stop_reason, usage}`. +- `codex::start` — same payload, returns `{session_id, started}` + immediately; progress arrives on the streams. +- `codex::stop` — interrupt the live run for a session. +- `codex::status` — point-in-time session view: live flag, status, turns, + usage. +- `codex::sessions::list` — every session this worker has run. diff --git a/codex/src/config.ts b/codex/src/config.ts new file mode 100644 index 00000000..73aaed48 --- /dev/null +++ b/codex/src/config.ts @@ -0,0 +1,36 @@ +import { readFile } from 'node:fs/promises'; +import { parse } from 'yaml'; +import { z } from 'zod'; + +const ConfigSchema = z.object({ + engine_url: z.string().default('ws://127.0.0.1:49134'), + defaults: z + .object({ + model: z.string().default(''), + sandbox_mode: z + .enum(['read-only', 'workspace-write', 'danger-full-access']) + .default('workspace-write'), + approval_policy: z.enum(['never', 'on-request', 'on-failure', 'untrusted']).default('never'), + reasoning_effort: z.enum(['', 'minimal', 'low', 'medium', 'high', 'xhigh']).default(''), + cwd: z.string().default(''), + skip_git_repo_check: z.boolean().default(true), + }) + .prefault({}), + events_stream: z.string().default('agent::events'), + raw_events_stream: z.string().default('codex::events'), + codex_executable: z.string().default(''), +}); + +export type Config = z.infer; + +export async function loadConfig(path: string): Promise { + let raw: unknown = {}; + try { + raw = parse(await readFile(path, 'utf8')) ?? {}; + } catch (err) { + // a missing config file falls back to defaults; anything else + // (YAML parse error, permissions) must fail the worker fast + if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err; + } + return ConfigSchema.parse(raw); +} diff --git a/codex/src/events.ts b/codex/src/events.ts new file mode 100644 index 00000000..b9fbb9e3 --- /dev/null +++ b/codex/src/events.ts @@ -0,0 +1,29 @@ +/** + * Emit event frames via the engine's stream builtin. Same per-process + * epoch + per-session monotonic sequence scheme as the harness emitter, so + * item_ids never collide across restarts. + */ + +import { randomUUID } from 'node:crypto'; +import type { ISdk } from 'iii-sdk'; + +const PROCESS_EPOCH = randomUUID(); +const seqBySession = new Map(); + +export function makeEmitter(iii: ISdk, streamName: string) { + return async function emit(session_id: string, event: unknown): Promise { + const seq = seqBySession.get(session_id) ?? 0; + seqBySession.set(session_id, seq + 1); + const item_id = `${session_id}-${PROCESS_EPOCH}-${seq.toString().padStart(8, '0')}`; + try { + await iii.trigger({ + function_id: 'stream::set', + payload: { stream_name: streamName, group_id: session_id, item_id, data: event }, + }); + } catch (err) { + console.warn(`stream::set failed for ${session_id}: ${String(err)}`); + } + }; +} + +export type Emit = ReturnType; diff --git a/codex/src/executable.ts b/codex/src/executable.ts new file mode 100644 index 00000000..28d952bf --- /dev/null +++ b/codex/src/executable.ts @@ -0,0 +1,26 @@ +/** + * Resolve the Codex CLI binary for the SDK. The npm-installed SDK locates + * the vendored CLI relative to its own module path, but the single-file + * bundle (`deploy: bundle`) cannot carry it — so when the operator has not + * pinned `codex_executable` in config.yaml, fall back to the `codex` binary + * on PATH. + */ + +import { accessSync, constants } from 'node:fs'; +import { delimiter, join } from 'node:path'; + +export function resolveCodexExecutable(configured: string): string { + if (configured) return configured; + const path = process.env.PATH ?? ''; + for (const dir of path.split(delimiter)) { + if (!dir) continue; + const candidate = join(dir, 'codex'); + try { + accessSync(candidate, constants.X_OK); + return candidate; + } catch { + // keep scanning + } + } + return ''; +} diff --git a/codex/src/index.ts b/codex/src/index.ts new file mode 100644 index 00000000..e4dba6da --- /dev/null +++ b/codex/src/index.ts @@ -0,0 +1,42 @@ +#!/usr/bin/env node +/** + * Worker bootstrap: connect to the engine, register codex::* functions, + * wait for SIGINT/SIGTERM. Mirrors the binary-worker lifecycle from + * iii-hq/workers (parse flags, registerWorker, register, shutdown). + */ + +import { parseArgs } from 'node:util'; +import { registerWorker } from 'iii-sdk'; +import { loadConfig } from './config.js'; +import { makeEmitter } from './events.js'; +import { resolveCodexExecutable } from './executable.js'; +import { register } from './run.js'; + +const { values } = parseArgs({ + options: { + config: { type: 'string', default: './config.yaml' }, + url: { type: 'string' }, + }, + strict: false, +}); + +const cfg = await loadConfig(String(values.config)); +cfg.codex_executable = resolveCodexExecutable(cfg.codex_executable); +const url = values.url ? String(values.url) : cfg.engine_url; + +const iii = registerWorker(url, { workerName: 'codex' }); +const emit = makeEmitter(iii, cfg.events_stream); +const emitRaw = makeEmitter(iii, cfg.raw_events_stream); +register(iii, cfg, emit, emitRaw); + +console.log(`codex worker connected to ${url}`); + +const shutdown = async () => { + try { + await iii.shutdown?.(); + } finally { + process.exit(0); + } +}; +process.on('SIGINT', shutdown); +process.on('SIGTERM', shutdown); diff --git a/codex/src/map.ts b/codex/src/map.ts new file mode 100644 index 00000000..1e82980d --- /dev/null +++ b/codex/src/map.ts @@ -0,0 +1,157 @@ +/** + * Map Codex SDK thread items to the AgentEvent wire subset. One Codex turn + * (codex::run call) becomes: + * + * agent_message / reasoning item -> message_complete + * command_execution / file_change / mcp_tool_call / web_search item + * -> function_execution_start (item.started) + function_execution_end + * turn.completed -> turn_end + agent_end + */ + +import type { + AgentMessage, + AssistantMessage, + ContentBlock, + FunctionResultMessage, + Usage, +} from './types.js'; + +/** Loose view of a Codex SDK ThreadItem — the SDK union, untyped at the seam. */ +export type CodexItem = { + id: string; + type: string; + text?: string; + command?: string; + aggregated_output?: string; + exit_code?: number; + status?: string; + changes?: unknown; + server?: string; + tool?: string; + arguments?: unknown; + result?: unknown; + error?: { message?: string }; + query?: string; +}; + +const EXEC_ITEM_TYPES = new Set([ + 'command_execution', + 'file_change', + 'mcp_tool_call', + 'web_search', +]); + +export function isExecItem(item: CodexItem): boolean { + return EXEC_ITEM_TYPES.has(item.type); +} + +export function functionIdForItem(item: CodexItem): string { + switch (item.type) { + case 'command_execution': + return 'codex::shell'; + case 'file_change': + return 'codex::apply_patch'; + case 'web_search': + return 'codex::web_search'; + case 'mcp_tool_call': + return `${item.server ?? 'mcp'}::${item.tool ?? 'tool'}`; + default: + return `codex::${item.type}`; + } +} + +export function argsForItem(item: CodexItem): unknown { + switch (item.type) { + case 'command_execution': + return { command: item.command ?? '' }; + case 'file_change': + return { changes: item.changes ?? [] }; + case 'web_search': + return { query: item.query ?? '' }; + case 'mcp_tool_call': + return item.arguments ?? {}; + default: + return {}; + } +} + +export function resultContentForItem(item: CodexItem): ContentBlock[] { + switch (item.type) { + case 'command_execution': + return [{ type: 'text', text: item.aggregated_output ?? '' }]; + case 'file_change': + return [{ type: 'text', text: JSON.stringify(item.changes ?? []) }]; + case 'web_search': + return [{ type: 'text', text: item.query ?? '' }]; + case 'mcp_tool_call': + return [ + { + type: 'text', + text: item.error?.message ?? JSON.stringify(item.result ?? null), + }, + ]; + default: + return [{ type: 'text', text: JSON.stringify(item) }]; + } +} + +export function isErrorItem(item: CodexItem): boolean { + if (item.status === 'failed') return true; + return ( + item.type === 'command_execution' && typeof item.exit_code === 'number' && item.exit_code !== 0 + ); +} + +export function makeAssistantMessage( + content: ContentBlock[], + model: string, + usage: Usage | null, + stop_reason = 'end', +): AssistantMessage { + return { + role: 'assistant', + content, + stop_reason, + error_message: null, + usage, + model, + provider: 'codex', + timestamp: Date.now(), + }; +} + +export function makeFunctionResult( + function_call_id: string, + function_id: string, + content: ContentBlock[], + is_error: boolean, +): FunctionResultMessage { + return { + role: 'function_result', + function_call_id, + function_id, + content, + details: null, + is_error, + timestamp: Date.now(), + }; +} + +export function mapUsage(raw: unknown): Usage | null { + if (typeof raw !== 'object' || raw === null) return null; + const u = raw as Record; + return { + input_tokens: u.input_tokens ?? 0, + output_tokens: u.output_tokens ?? 0, + cache_read_tokens: u.cached_input_tokens, + reasoning_tokens: u.reasoning_output_tokens, + }; +} + +export function lastAssistant(messages: AgentMessage[]): AgentMessage { + if (messages.length === 0) return makeAssistantMessage([], '', null); + for (let i = messages.length - 1; i >= 0; i--) { + if (messages[i].role === 'assistant') return messages[i]; + } + return messages[messages.length - 1]; +} diff --git a/codex/src/run.ts b/codex/src/run.ts new file mode 100644 index 00000000..06b51a8c --- /dev/null +++ b/codex/src/run.ts @@ -0,0 +1,336 @@ +/** + * codex::* function registrations. `codex::run` accepts either a bare + * `prompt` string or a `messages` array (the same input contract as + * `run::start_and_wait`), so the acp worker can drive Codex with + * `--brain-fn codex::run` and any bus caller gets the same shape as the + * claude-code worker. + */ + +import { randomUUID } from 'node:crypto'; +import { Codex, type ThreadOptions } from '@openai/codex-sdk'; +import type { ISdk } from 'iii-sdk'; +import { z } from 'zod'; +import type { Config } from './config.js'; +import type { Emit } from './events.js'; +import { + argsForItem, + type CodexItem, + functionIdForItem, + isErrorItem, + isExecItem, + lastAssistant, + makeAssistantMessage, + makeFunctionResult, + mapUsage, + resultContentForItem, +} from './map.js'; +import { listSessions, loadSession, saveSession } from './state.js'; +import type { AgentMessage, FunctionResultMessage, SessionRecord } from './types.js'; + +const ContentBlockSchema = z.object({ type: z.string() }).passthrough(); +const MessageSchema = z.object({ + role: z.string(), + content: z.union([z.string(), z.array(ContentBlockSchema)]), +}); + +const RunPayloadSchema = z.object({ + session_id: z + .string() + .optional() + .describe('iii session id; reuse to resume the same Codex thread'), + prompt: z.string().optional().describe('The user prompt for this turn'), + messages: z + .array(MessageSchema) + .optional() + .describe( + 'Alternative to prompt: role/content messages; the last user entry becomes the prompt', + ), + model: z.string().optional().describe('Model id; empty = Codex default'), + cwd: z.string().optional().describe('Working directory the turn runs in'), + sandbox_mode: z + .enum(['read-only', 'workspace-write', 'danger-full-access']) + .optional() + .describe('Codex sandbox mode for this turn'), + approval_policy: z + .enum(['never', 'on-request', 'on-failure', 'untrusted']) + .optional() + .describe('Codex approval policy; headless callers use never'), + reasoning_effort: z + .enum(['minimal', 'low', 'medium', 'high', 'xhigh']) + .optional() + .describe('Model reasoning effort'), + skip_git_repo_check: z.boolean().optional().describe('Allow running outside a git repository'), + output_schema: z + .record(z.string(), z.unknown()) + .optional() + .describe('JSON schema for structured final output'), + /** Raw Codex SDK ThreadOptions, spread over everything the worker + * derives — the pure pass-through (camelCase as in the SDK). */ + options: z + .record(z.string(), z.unknown()) + .optional() + .describe( + 'Raw Codex SDK ThreadOptions forwarded verbatim (camelCase), e.g. networkAccessEnabled, webSearchMode, additionalDirectories', + ), +}); + +export type RunPayload = z.infer; +export { RunPayloadSchema }; + +const SessionIdSchema = z.object({ + session_id: z.string().describe('iii session id returned by codex::run / codex::start'), +}); + +const RUN_REQUEST_FORMAT = z.toJSONSchema(RunPayloadSchema); +const SESSION_ID_FORMAT = z.toJSONSchema(SessionIdSchema); + +type LiveRun = { interrupt: () => Promise }; +const live = new Map(); + +export function extractPrompt(payload: RunPayload): string { + if (typeof payload.prompt === 'string') return payload.prompt; + const users = (payload.messages ?? []).filter((m) => m.role === 'user'); + const last = users[users.length - 1]; + if (!last) throw new Error('codex::run requires `prompt` or a user message in `messages`'); + if (typeof last.content === 'string') return last.content; + return last.content + .map((b) => ('text' in b && typeof b.text === 'string' ? b.text : '')) + .filter(Boolean) + .join('\n'); +} + +export async function executeRun( + iii: ISdk, + cfg: Config, + emit: Emit, + emitRaw: Emit, + payload: RunPayload, +): Promise> { + const session_id = payload.session_id ?? randomUUID(); + const prompt = extractPrompt(payload); + const prior = await loadSession(iii, session_id); + const d = cfg.defaults; + + const record: SessionRecord = prior ?? { + session_id, + codex_thread_id: null, + cwd: payload.cwd ?? d.cwd, + model: payload.model ?? d.model, + status: 'working', + turns: 0, + usage: null, + updated_at_ms: Date.now(), + }; + if (payload.cwd) record.cwd = payload.cwd; + if (payload.model) record.model = payload.model; + record.status = 'working'; + record.updated_at_ms = Date.now(); + await saveSession(iii, record); + + const reasoning = payload.reasoning_effort ?? (d.reasoning_effort || undefined); + const threadOptions: ThreadOptions = { + ...(record.model ? { model: record.model } : {}), + ...(record.cwd ? { workingDirectory: record.cwd } : {}), + sandboxMode: payload.sandbox_mode ?? d.sandbox_mode, + approvalPolicy: payload.approval_policy ?? d.approval_policy, + skipGitRepoCheck: payload.skip_git_repo_check ?? d.skip_git_repo_check, + ...(reasoning ? { modelReasoningEffort: reasoning } : {}), + ...(payload.options as Partial | undefined), + }; + + const codex = new Codex({ + ...(cfg.codex_executable ? { codexPathOverride: cfg.codex_executable } : {}), + }); + const thread = prior?.codex_thread_id + ? codex.resumeThread(prior.codex_thread_id, threadOptions) + : codex.startThread(threadOptions); + + const abort = new AbortController(); + const handle: LiveRun = { interrupt: async () => abort.abort() }; + live.set(session_id, handle); + + const transcript: AgentMessage[] = []; + const pendingResults: FunctionResultMessage[] = []; + const started = new Map(); + let usage: SessionRecord['usage'] = null; + let resultText = ''; + let stopReason = 'end'; + let isError = false; + + try { + const { events } = await thread.runStreamed(prompt, { + signal: abort.signal, + ...(payload.output_schema ? { outputSchema: payload.output_schema } : {}), + }); + for await (const event of events) { + await emitRaw(session_id, event); + if (event.type === 'thread.started') { + record.codex_thread_id = event.thread_id; + await saveSession(iii, record); + } else if (event.type === 'item.started' || event.type === 'item.updated') { + const item = event.item as CodexItem; + if (isExecItem(item) && !started.has(item.id)) { + const function_id = functionIdForItem(item); + started.set(item.id, { function_id, started_at: Date.now() }); + await emit(session_id, { + type: 'function_execution_start', + function_call_id: item.id, + function_id, + args: argsForItem(item), + }); + } + } else if (event.type === 'item.completed') { + const item = event.item as CodexItem; + if (item.type === 'agent_message' || item.type === 'reasoning') { + const block = + item.type === 'agent_message' + ? ({ type: 'text', text: item.text ?? '' } as const) + : ({ type: 'thinking', text: item.text ?? '' } as const); + const assistant = makeAssistantMessage([block], record.model, null); + transcript.push(assistant); + await emit(session_id, { type: 'message_complete', message: assistant }); + if (item.type === 'agent_message') resultText = item.text ?? ''; + } else if (isExecItem(item)) { + const function_id = functionIdForItem(item); + const begun = started.get(item.id); + if (!begun) { + await emit(session_id, { + type: 'function_execution_start', + function_call_id: item.id, + function_id, + args: argsForItem(item), + }); + } + const content = resultContentForItem(item); + const fr = makeFunctionResult(item.id, function_id, content, isErrorItem(item)); + transcript.push(fr); + pendingResults.push(fr); + await emit(session_id, { + type: 'function_execution_end', + function_call_id: item.id, + function_id, + result: { content, details: null }, + is_error: fr.is_error, + duration_ms: begun ? Date.now() - begun.started_at : 0, + }); + } + } else if (event.type === 'turn.completed') { + usage = mapUsage(event.usage); + } else if (event.type === 'turn.failed') { + isError = true; + stopReason = 'error'; + resultText = event.error?.message ?? 'turn failed'; + } else if (event.type === 'error') { + isError = true; + stopReason = 'error'; + resultText = event.message ?? 'stream error'; + } + } + } catch (err) { + if (abort.signal.aborted) { + stopReason = 'aborted'; + } else { + isError = true; + stopReason = 'error'; + resultText = String(err); + } + } finally { + if (live.get(session_id) === handle) live.delete(session_id); + } + + record.status = isError ? 'error' : 'done'; + record.turns += 1; + record.usage = usage ?? record.usage; + record.codex_thread_id = thread.id ?? record.codex_thread_id; + record.updated_at_ms = Date.now(); + await saveSession(iii, record); + + if (transcript.length === 0) { + transcript.push( + makeAssistantMessage([{ type: 'text', text: resultText }], record.model, usage, stopReason), + ); + } + await emit(session_id, { + type: 'turn_end', + message: lastAssistant(transcript), + function_results: pendingResults, + }); + await emit(session_id, { type: 'agent_end', messages: transcript }); + + return { + session_id, + codex_thread_id: record.codex_thread_id, + result: resultText, + stop_reason: stopReason, + is_error: isError, + num_turns: record.turns, + usage: record.usage, + }; +} + +export function register(iii: ISdk, cfg: Config, emit: Emit, emitRaw: Emit): void { + iii.registerFunction( + 'codex::run', + async (payload: unknown) => + executeRun(iii, cfg, emit, emitRaw, RunPayloadSchema.parse(payload ?? {})), + { + description: + 'Run one Codex turn and wait for the result. Accepts `prompt` or a `messages` array plus a raw SDK `options` pass-through; streams raw Codex events onto codex::events, AgentEvent frames onto agent::events, and returns {session_id, result, usage}.', + request_format: RUN_REQUEST_FORMAT, + }, + ); + + iii.registerFunction( + 'codex::start', + async (payload: unknown) => { + const parsed = RunPayloadSchema.parse(payload ?? {}); + const session_id = parsed.session_id ?? randomUUID(); + void executeRun(iii, cfg, emit, emitRaw, { ...parsed, session_id }).catch((err) => + console.error(`codex::start background run failed for ${session_id}: ${String(err)}`), + ); + return { session_id, started: true }; + }, + { + description: + 'Start a Codex turn and return immediately; watch codex::events / agent::events (group_id = session_id) for progress and turn_end.', + request_format: RUN_REQUEST_FORMAT, + }, + ); + + iii.registerFunction( + 'codex::stop', + async (payload: unknown) => { + const { session_id } = SessionIdSchema.parse(payload ?? {}); + const run = live.get(session_id); + if (!run) return { session_id, stopped: false, reason: 'no live run' }; + await run.interrupt(); + return { session_id, stopped: true }; + }, + { + description: 'Interrupt a live Codex run for a session.', + request_format: SESSION_ID_FORMAT, + }, + ); + + iii.registerFunction( + 'codex::status', + async (payload: unknown) => { + const { session_id } = SessionIdSchema.parse(payload ?? {}); + const record = await loadSession(iii, session_id); + return { session_id, live: live.has(session_id), record }; + }, + { + description: 'Point-in-time status of a Codex session.', + request_format: SESSION_ID_FORMAT, + }, + ); + + iii.registerFunction( + 'codex::sessions::list', + async () => ({ sessions: await listSessions(iii) }), + { + description: 'List every Codex session this worker has run.', + request_format: { type: 'object', properties: {} }, + }, + ); +} diff --git a/codex/src/state.ts b/codex/src/state.ts new file mode 100644 index 00000000..8fd10805 --- /dev/null +++ b/codex/src/state.ts @@ -0,0 +1,34 @@ +/** + * Session registry on engine state. Scope `codex_sessions`, key = iii + * session_id. Maps iii sessions to Codex thread ids so `codex::run` with the + * same session_id resumes the underlying Codex thread (persisted by the CLI + * in ~/.codex/sessions). + */ + +import type { ISdk } from 'iii-sdk'; +import type { SessionRecord } from './types.js'; + +const SCOPE = 'codex_sessions'; + +export async function loadSession(iii: ISdk, session_id: string): Promise { + const res = await iii.trigger({ + function_id: 'state::get', + payload: { scope: SCOPE, key: session_id }, + }); + return res && typeof res === 'object' && 'session_id' in res ? res : null; +} + +export async function saveSession(iii: ISdk, record: SessionRecord): Promise { + await iii.trigger({ + function_id: 'state::set', + payload: { scope: SCOPE, key: record.session_id, value: record }, + }); +} + +export async function listSessions(iii: ISdk): Promise { + const res = await iii.trigger({ + function_id: 'state::list', + payload: { scope: SCOPE }, + }); + return Array.isArray(res) ? res : []; +} diff --git a/codex/src/types.ts b/codex/src/types.ts new file mode 100644 index 00000000..7c9b053f --- /dev/null +++ b/codex/src/types.ts @@ -0,0 +1,87 @@ +/** + * Wire types for the AgentEvent subset this worker emits onto the + * `agent::events` stream. Mirrors harness/src/types/* in iii-hq/workers so + * the console and acp worker render Codex turns like any other agent worker. + */ + +export type TextContent = { type: 'text'; text: string }; +export type ThinkingContent = { type: 'thinking'; text: string; signature?: string }; +export type FunctionCallContent = { + type: 'function_call'; + id: string; + function_id: string; + arguments: unknown; +}; +export type FunctionResultContent = { + type: 'function_result'; + function_call_id: string; + content: ContentBlock[]; + is_error?: boolean; +}; +export type ContentBlock = + | TextContent + | ThinkingContent + | FunctionCallContent + | FunctionResultContent; + +export type Usage = { + input_tokens: number; + output_tokens: number; + cache_read_tokens?: number; + reasoning_tokens?: number; +}; + +export type AssistantMessage = { + role: 'assistant'; + content: ContentBlock[]; + stop_reason: string; + error_message?: string | null; + usage?: Usage | null; + model: string; + provider: string; + timestamp: number; +}; + +export type UserMessage = { role: 'user'; content: ContentBlock[]; timestamp: number }; + +export type FunctionResultMessage = { + role: 'function_result'; + function_call_id: string; + function_id: string; + content: ContentBlock[]; + details: unknown; + is_error: boolean; + timestamp: number; +}; + +export type AgentMessage = UserMessage | AssistantMessage | FunctionResultMessage; + +export type AgentEvent = + | { type: 'agent_end'; messages: AgentMessage[] } + | { type: 'turn_end'; message: AgentMessage; function_results: FunctionResultMessage[] } + | { type: 'message_complete'; message: AgentMessage; body_streamed?: boolean } + | { + type: 'function_execution_start'; + function_call_id: string; + function_id: string; + args: unknown; + } + | { + type: 'function_execution_end'; + function_call_id: string; + function_id: string; + result: { content: ContentBlock[]; details: unknown }; + is_error: boolean; + duration_ms: number; + }; + +export type SessionRecord = { + session_id: string; + codex_thread_id: string | null; + cwd: string; + model: string; + status: 'working' | 'done' | 'error'; + turns: number; + usage: Usage | null; + updated_at_ms: number; +}; diff --git a/codex/tests/_helpers/fake-codex.ts b/codex/tests/_helpers/fake-codex.ts new file mode 100644 index 00000000..08d857f4 --- /dev/null +++ b/codex/tests/_helpers/fake-codex.ts @@ -0,0 +1,103 @@ +/** Scripted Codex SDK replacement: a fake Codex implementation whose threads + * yield a fixed event list and record the options and prompt they were + * driven with. Plain functions returning objects (not ES classes) so they + * slot into vi.fn().mockImplementation for both `new Codex()` and calls. */ + +export type CodexCapture = { + codexOptions?: Record; + threadOptions?: Record; + resumedFrom?: string; + prompt?: string; + turnOptions?: Record; + aborted: boolean; +}; + +export function fakeCodexClass(events: Array>, capture: CodexCapture) { + return function FakeCodex(options: Record) { + capture.codexOptions = options; + return { + startThread(threadOptions: Record) { + capture.threadOptions = threadOptions; + return makeThread(events, capture); + }, + resumeThread(id: string, threadOptions: Record) { + capture.resumedFrom = id; + capture.threadOptions = threadOptions; + return makeThread(events, capture, id); + }, + }; + }; +} + +function makeThread( + events: Array>, + capture: CodexCapture, + id: string | null = null, +) { + const threadIdFromScript = events.find((e) => e.type === 'thread.started') as + | { thread_id?: string } + | undefined; + return { + id: id ?? threadIdFromScript?.thread_id ?? null, + runStreamed: async (prompt: string, turnOptions?: Record) => { + capture.prompt = prompt; + capture.turnOptions = turnOptions; + const signal = turnOptions?.signal as AbortSignal | undefined; + return { + events: (async function* () { + for (const event of events) { + if (signal?.aborted) { + capture.aborted = true; + throw new Error('aborted'); + } + yield event; + } + })(), + }; + }, + }; +} + +export const threadStarted = { type: 'thread.started', thread_id: 'th-1' }; +export const turnStarted = { type: 'turn.started' }; + +export const commandStarted = { + type: 'item.started', + item: { id: 'item-1', type: 'command_execution', command: 'ls', status: 'in_progress' }, +}; + +export const commandCompleted = { + type: 'item.completed', + item: { + id: 'item-1', + type: 'command_execution', + command: 'ls', + aggregated_output: 'files', + exit_code: 0, + status: 'completed', + }, +}; + +export const agentMessage = { + type: 'item.completed', + item: { id: 'item-2', type: 'agent_message', text: 'done' }, +}; + +export const turnCompleted = { + type: 'turn.completed', + usage: { + input_tokens: 5, + cached_input_tokens: 100, + output_tokens: 2, + reasoning_output_tokens: 7, + }, +}; + +export const fullTurn = [ + threadStarted, + turnStarted, + commandStarted, + commandCompleted, + agentMessage, + turnCompleted, +]; diff --git a/codex/tests/_helpers/fake-iii.ts b/codex/tests/_helpers/fake-iii.ts new file mode 100644 index 00000000..362dc7ed --- /dev/null +++ b/codex/tests/_helpers/fake-iii.ts @@ -0,0 +1,57 @@ +import type { ISdk } from 'iii-sdk'; +import { vi } from 'vitest'; + +export type TriggerCall = { function_id: string; payload: Record }; + +export type FakeIii = { + iii: ISdk; + calls: TriggerCall[]; + state: Map; + streamFrames: (stream: string) => Array>; + registered: Map Promise>; +}; + +/** + * In-memory stand-in for the engine bus: `state::get/set/list` backed by a + * Map keyed `${scope}/${key}`, `stream::set` recorded as plain calls, and + * `registerFunction` captured so tests can invoke handlers at the same + * unknown boundary the engine uses. + */ +export function fakeIii(): FakeIii { + const calls: TriggerCall[] = []; + const state = new Map(); + const registered = new Map Promise>(); + + const iii = { + trigger: async (req: { function_id: string; payload: Record }) => { + // Clone like the wire would: the live bus serializes payloads, so + // later caller-side mutation must not rewrite recorded calls. + const payload = structuredClone(req.payload); + calls.push({ function_id: req.function_id, payload }); + const { scope, key, value } = payload as { scope?: string; key?: string; value?: unknown }; + if (req.function_id === 'state::set') { + state.set(`${scope}/${key}`, value); + return null; + } + if (req.function_id === 'state::get') return state.get(`${scope}/${key}`) ?? null; + if (req.function_id === 'state::list') { + return [...state.entries()].filter(([k]) => k.startsWith(`${scope}/`)).map(([, v]) => v); + } + return null; + }, + registerFunction: vi.fn((fnId: string, handler: (payload: unknown) => Promise) => { + registered.set(fnId, handler); + }), + } as unknown as ISdk; + + const streamFrames = (stream: string) => + calls + .filter( + (c) => + c.function_id === 'stream::set' && + (c.payload as { stream_name?: string }).stream_name === stream, + ) + .map((c) => c.payload); + + return { iii, calls, state, streamFrames, registered }; +} diff --git a/codex/tests/config.test.ts b/codex/tests/config.test.ts new file mode 100644 index 00000000..34c72451 --- /dev/null +++ b/codex/tests/config.test.ts @@ -0,0 +1,45 @@ +import { mkdtemp, writeFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import { describe, expect, it } from 'vitest'; +import { loadConfig } from '../src/config.js'; + +describe('loadConfig', () => { + it('returns full defaults when the file is missing', async () => { + const cfg = await loadConfig('/nonexistent/config.yaml'); + expect(cfg.engine_url).toBe('ws://127.0.0.1:49134'); + expect(cfg.defaults.sandbox_mode).toBe('workspace-write'); + expect(cfg.defaults.approval_policy).toBe('never'); + expect(cfg.defaults.skip_git_repo_check).toBe(true); + expect(cfg.events_stream).toBe('agent::events'); + expect(cfg.raw_events_stream).toBe('codex::events'); + expect(cfg.codex_executable).toBe(''); + }); + + it('merges a partial file over defaults', async () => { + const dir = await mkdtemp(join(tmpdir(), 'codex-config-')); + const path = join(dir, 'config.yaml'); + await writeFile( + path, + ['engine_url: ws://10.0.0.1:49134', 'defaults:', ' sandbox_mode: read-only'].join('\n'), + ); + const cfg = await loadConfig(path); + expect(cfg.engine_url).toBe('ws://10.0.0.1:49134'); + expect(cfg.defaults.sandbox_mode).toBe('read-only'); + expect(cfg.defaults.approval_policy).toBe('never'); + }); + + it('rethrows YAML parse errors instead of silently using defaults', async () => { + const dir = await mkdtemp(join(tmpdir(), 'codex-config-')); + const path = join(dir, 'config.yaml'); + await writeFile(path, 'defaults: [unclosed\n bad: {'); + await expect(loadConfig(path)).rejects.toThrow(); + }); + + it('rejects an invalid sandbox mode', async () => { + const dir = await mkdtemp(join(tmpdir(), 'codex-config-')); + const path = join(dir, 'config.yaml'); + await writeFile(path, 'defaults:\n sandbox_mode: yolo\n'); + await expect(loadConfig(path)).rejects.toThrow(); + }); +}); diff --git a/codex/tests/events.test.ts b/codex/tests/events.test.ts new file mode 100644 index 00000000..e1286ce2 --- /dev/null +++ b/codex/tests/events.test.ts @@ -0,0 +1,45 @@ +import { describe, expect, it, vi } from 'vitest'; +import type { ISdk } from 'iii-sdk'; +import { makeEmitter } from '../src/events.js'; +import { fakeIii } from './_helpers/fake-iii.js'; + +describe('makeEmitter', () => { + it('writes stream::set frames with the stream name, group, and event', async () => { + const fake = fakeIii(); + const emit = makeEmitter(fake.iii, 'agent::events'); + await emit('s1', { type: 'agent_end', messages: [] }); + const frames = fake.streamFrames('agent::events'); + expect(frames).toHaveLength(1); + expect(frames[0]).toMatchObject({ + stream_name: 'agent::events', + group_id: 's1', + data: { type: 'agent_end', messages: [] }, + }); + }); + + it('assigns unique, monotonically increasing item_ids per session', async () => { + const fake = fakeIii(); + const emit = makeEmitter(fake.iii, 'agent::events'); + await emit('s-seq', { a: 1 }); + await emit('s-seq', { a: 2 }); + await emit('other', { a: 3 }); + const ids = fake.streamFrames('agent::events').map((f) => String(f.item_id)); + expect(new Set(ids).size).toBe(3); + const [first, second] = ids; + expect(first < second).toBe(true); + expect(first.startsWith('s-seq-')).toBe(true); + }); + + it('swallows stream::set failures instead of failing the turn', async () => { + const iii = { + trigger: vi.fn(async () => { + throw new Error('stream adapter missing'); + }), + } as unknown as ISdk; + const warn = vi.spyOn(console, 'warn').mockImplementation(() => {}); + const emit = makeEmitter(iii, 'agent::events'); + await expect(emit('s1', { type: 'turn_end' })).resolves.toBeUndefined(); + expect(warn).toHaveBeenCalled(); + warn.mockRestore(); + }); +}); diff --git a/codex/tests/executable.test.ts b/codex/tests/executable.test.ts new file mode 100644 index 00000000..440a89b9 --- /dev/null +++ b/codex/tests/executable.test.ts @@ -0,0 +1,34 @@ +import { chmodSync, mkdtempSync, writeFileSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import { afterEach, beforeEach, describe, expect, it } from 'vitest'; +import { resolveCodexExecutable } from '../src/executable.js'; + +describe('resolveCodexExecutable', () => { + const originalPath = process.env.PATH; + + beforeEach(() => { + process.env.PATH = ''; + }); + + afterEach(() => { + process.env.PATH = originalPath; + }); + + it('returns the configured path untouched', () => { + expect(resolveCodexExecutable('/opt/codex')).toBe('/opt/codex'); + }); + + it('finds an executable codex on PATH', () => { + const dir = mkdtempSync(join(tmpdir(), 'codex-exe-')); + const bin = join(dir, 'codex'); + writeFileSync(bin, '#!/bin/sh\n'); + chmodSync(bin, 0o755); + process.env.PATH = dir; + expect(resolveCodexExecutable('')).toBe(bin); + }); + + it('returns empty when nothing is found', () => { + expect(resolveCodexExecutable('')).toBe(''); + }); +}); diff --git a/codex/tests/map.test.ts b/codex/tests/map.test.ts new file mode 100644 index 00000000..e307e5ac --- /dev/null +++ b/codex/tests/map.test.ts @@ -0,0 +1,140 @@ +import { describe, expect, it } from 'vitest'; +import { + argsForItem, + functionIdForItem, + isErrorItem, + isExecItem, + lastAssistant, + makeAssistantMessage, + makeFunctionResult, + mapUsage, + resultContentForItem, +} from '../src/map.js'; +import type { AgentMessage } from '../src/types.js'; + +describe('functionIdForItem', () => { + it('maps built-in Codex item types to bus-style ids', () => { + expect(functionIdForItem({ id: 'i', type: 'command_execution' })).toBe('codex::shell'); + expect(functionIdForItem({ id: 'i', type: 'file_change' })).toBe('codex::apply_patch'); + expect(functionIdForItem({ id: 'i', type: 'web_search' })).toBe('codex::web_search'); + }); + + it('maps MCP tool calls to server::tool ids', () => { + expect( + functionIdForItem({ id: 'i', type: 'mcp_tool_call', server: 'github', tool: 'create_issue' }), + ).toBe('github::create_issue'); + }); +}); + +describe('isExecItem', () => { + it('treats command, patch, mcp, and web search items as executions', () => { + for (const type of ['command_execution', 'file_change', 'mcp_tool_call', 'web_search']) { + expect(isExecItem({ id: 'i', type })).toBe(true); + } + expect(isExecItem({ id: 'i', type: 'agent_message' })).toBe(false); + expect(isExecItem({ id: 'i', type: 'todo_list' })).toBe(false); + }); +}); + +describe('argsForItem / resultContentForItem', () => { + it('carries the command and its aggregated output', () => { + const item = { + id: 'i', + type: 'command_execution', + command: 'ls -la', + aggregated_output: 'total 0', + }; + expect(argsForItem(item)).toEqual({ command: 'ls -la' }); + expect(resultContentForItem(item)).toEqual([{ type: 'text', text: 'total 0' }]); + }); + + it('serializes file changes', () => { + const changes = [{ path: 'a.ts', kind: 'update' }]; + const item = { id: 'i', type: 'file_change', changes }; + expect(argsForItem(item)).toEqual({ changes }); + expect(resultContentForItem(item)).toEqual([{ type: 'text', text: JSON.stringify(changes) }]); + }); + + it('prefers the MCP error message over the result payload', () => { + const item = { + id: 'i', + type: 'mcp_tool_call', + server: 's', + tool: 't', + error: { message: 'boom' }, + result: { ok: true }, + }; + expect(resultContentForItem(item)).toEqual([{ type: 'text', text: 'boom' }]); + }); +}); + +describe('isErrorItem', () => { + it('flags failed status and non-zero exit codes', () => { + expect(isErrorItem({ id: 'i', type: 'mcp_tool_call', status: 'failed' })).toBe(true); + expect( + isErrorItem({ id: 'i', type: 'command_execution', exit_code: 2, status: 'completed' }), + ).toBe(true); + expect( + isErrorItem({ id: 'i', type: 'command_execution', exit_code: 0, status: 'completed' }), + ).toBe(false); + }); +}); + +describe('mapUsage', () => { + it('maps SDK usage fields onto the wire shape', () => { + expect( + mapUsage({ + input_tokens: 10, + cached_input_tokens: 100, + output_tokens: 5, + reasoning_output_tokens: 7, + }), + ).toEqual({ + input_tokens: 10, + output_tokens: 5, + cache_read_tokens: 100, + reasoning_tokens: 7, + }); + }); + + it('returns null for non-objects', () => { + expect(mapUsage(null)).toBeNull(); + expect(mapUsage('x')).toBeNull(); + }); +}); + +describe('message constructors', () => { + it('builds an assistant message with provider codex', () => { + const msg = makeAssistantMessage([{ type: 'text', text: 'hi' }], 'gpt-5.2-codex', null); + expect(msg.role).toBe('assistant'); + expect(msg.provider).toBe('codex'); + expect(msg.stop_reason).toBe('end'); + }); + + it('builds a function_result message', () => { + const fr = makeFunctionResult('i', 'codex::shell', [{ type: 'text', text: 'ok' }], false); + expect(fr.role).toBe('function_result'); + expect(fr.function_call_id).toBe('i'); + expect(fr.is_error).toBe(false); + }); +}); + +describe('lastAssistant', () => { + it('returns the last assistant message', () => { + const a1 = makeAssistantMessage([{ type: 'text', text: 'one' }], 'm', null); + const a2 = makeAssistantMessage([{ type: 'text', text: 'two' }], 'm', null); + const fr = makeFunctionResult('id', 'fn', [], false); + const messages: AgentMessage[] = [a1, a2, fr]; + expect(lastAssistant(messages)).toBe(a2); + }); + + it('falls back to the final message when no assistant exists', () => { + const fr = makeFunctionResult('id', 'fn', [], false); + expect(lastAssistant([fr])).toBe(fr); + }); + + it('returns a synthetic assistant message for an empty transcript', () => { + const msg = lastAssistant([]); + expect(msg).toMatchObject({ role: 'assistant', content: [] }); + }); +}); diff --git a/codex/tests/register.test.ts b/codex/tests/register.test.ts new file mode 100644 index 00000000..8e0b0dc8 --- /dev/null +++ b/codex/tests/register.test.ts @@ -0,0 +1,151 @@ +import { beforeEach, describe, expect, it, vi } from 'vitest'; + +vi.mock('@openai/codex-sdk', () => ({ Codex: vi.fn() })); + +import { Codex } from '@openai/codex-sdk'; +import { loadConfig } from '../src/config.js'; +import { makeEmitter } from '../src/events.js'; +import { register } from '../src/run.js'; +import { type CodexCapture, fakeCodexClass, fullTurn } from './_helpers/fake-codex.js'; +import { type FakeIii, fakeIii } from './_helpers/fake-iii.js'; + +const CodexMock = vi.mocked(Codex); + +async function registeredWorker(): Promise { + const fake = fakeIii(); + const cfg = await loadConfig('/nonexistent/config.yaml'); + const emit = makeEmitter(fake.iii, cfg.events_stream); + const emitRaw = makeEmitter(fake.iii, cfg.raw_events_stream); + register(fake.iii, cfg, emit, emitRaw); + return fake; +} + +beforeEach(() => { + CodexMock.mockReset(); +}); + +describe('register', () => { + it('registers the full codex::* surface', async () => { + const fake = await registeredWorker(); + expect([...fake.registered.keys()].sort()).toEqual([ + 'codex::run', + 'codex::sessions::list', + 'codex::start', + 'codex::status', + 'codex::stop', + ]); + }); + + it('codex::run parses at the unknown boundary and runs a turn', async () => { + const fake = await registeredWorker(); + const capture: CodexCapture = { aborted: false }; + CodexMock.mockImplementation(fakeCodexClass(fullTurn, capture) as never); + const res = (await fake.registered.get('codex::run')?.({ + prompt: 'hi', + session_id: 's1', + })) as Record; + expect(res.result).toBe('done'); + expect(capture.prompt).toBe('hi'); + }); + + it('codex::run rejects invalid payloads', async () => { + const fake = await registeredWorker(); + await expect( + fake.registered.get('codex::run')?.({ prompt: 'x', sandbox_mode: 'yolo' }), + ).rejects.toThrow(); + await expect( + fake.registered.get('codex::run')?.({ prompt: 'x', approval_policy: 'always' }), + ).rejects.toThrow(); + }); + + it('codex::start returns immediately and the turn lands in the background', async () => { + const fake = await registeredWorker(); + const capture: CodexCapture = { aborted: false }; + CodexMock.mockImplementation(fakeCodexClass(fullTurn, capture) as never); + const res = (await fake.registered.get('codex::start')?.({ prompt: 'bg' })) as Record< + string, + unknown + >; + expect(res.started).toBe(true); + expect(typeof res.session_id).toBe('string'); + await vi.waitFor(() => { + const record = fake.state.get(`codex_sessions/${res.session_id}`) as + | { status: string } + | undefined; + expect(record?.status).toBe('done'); + }); + }); + + it('codex::stop without a live run reports stopped: false', async () => { + const fake = await registeredWorker(); + const res = (await fake.registered.get('codex::stop')?.({ session_id: 'ghost' })) as Record< + string, + unknown + >; + expect(res).toMatchObject({ session_id: 'ghost', stopped: false }); + }); + + it('codex::stop aborts a live run', async () => { + const fake = await registeredWorker(); + const capture: CodexCapture = { aborted: false }; + let release: (() => void) | undefined; + const gate = new Promise((r) => { + release = r; + }); + CodexMock.mockImplementation((() => { + const thread = { + id: 'th-live', + runStreamed: async (_prompt: string, turnOptions?: { signal?: AbortSignal }) => ({ + events: (async function* () { + yield { type: 'thread.started', thread_id: 'th-live' }; + await gate; + if (turnOptions?.signal?.aborted) { + capture.aborted = true; + throw new Error('aborted'); + } + })(), + }), + }; + return { startThread: () => thread, resumeThread: () => thread }; + }) as never); + + const startRes = (await fake.registered.get('codex::start')?.({ + prompt: 'long', + session_id: 'live-1', + })) as Record; + await vi.waitFor(() => { + expect(fake.state.has('codex_sessions/live-1')).toBe(true); + }); + const stopRes = (await fake.registered.get('codex::stop')?.({ + session_id: String(startRes.session_id), + })) as Record; + expect(stopRes.stopped).toBe(true); + release?.(); + await vi.waitFor(() => { + const record = fake.state.get('codex_sessions/live-1') as { status: string } | undefined; + expect(record?.status).toBe('done'); + }); + expect(capture.aborted).toBe(true); + }); + + it('codex::status reflects the stored record and live flag', async () => { + const fake = await registeredWorker(); + const res = (await fake.registered.get('codex::status')?.({ session_id: 'none' })) as Record< + string, + unknown + >; + expect(res).toMatchObject({ session_id: 'none', live: false, record: null }); + }); + + it('codex::sessions::list returns every stored record', async () => { + const fake = await registeredWorker(); + const capture: CodexCapture = { aborted: false }; + CodexMock.mockImplementation(fakeCodexClass(fullTurn, capture) as never); + await fake.registered.get('codex::run')?.({ prompt: 'a', session_id: 's1' }); + await fake.registered.get('codex::run')?.({ prompt: 'b', session_id: 's2' }); + const res = (await fake.registered.get('codex::sessions::list')?.({})) as { + sessions: Array<{ session_id: string }>; + }; + expect(res.sessions.map((s) => s.session_id).sort()).toEqual(['s1', 's2']); + }); +}); diff --git a/codex/tests/run-payload.test.ts b/codex/tests/run-payload.test.ts new file mode 100644 index 00000000..e13865a3 --- /dev/null +++ b/codex/tests/run-payload.test.ts @@ -0,0 +1,54 @@ +import { describe, expect, it } from 'vitest'; +import { extractPrompt, RunPayloadSchema } from '../src/run.js'; + +describe('RunPayloadSchema', () => { + it('accepts a bare prompt', () => { + const p = RunPayloadSchema.parse({ prompt: 'hi' }); + expect(p.prompt).toBe('hi'); + }); + + it('accepts the messages array shape', () => { + const p = RunPayloadSchema.parse({ + session_id: 's1', + messages: [{ role: 'user', content: [{ type: 'text', text: 'hello' }] }], + }); + expect(p.messages).toHaveLength(1); + }); + + it('rejects an invalid sandbox mode', () => { + expect(() => RunPayloadSchema.parse({ prompt: 'x', sandbox_mode: 'yolo' })).toThrow(); + }); +}); + +describe('extractPrompt', () => { + it('prefers the prompt field', () => { + expect(extractPrompt(RunPayloadSchema.parse({ prompt: 'direct' }))).toBe('direct'); + }); + + it('joins text blocks from the last user message', () => { + const p = RunPayloadSchema.parse({ + messages: [ + { role: 'user', content: [{ type: 'text', text: 'first' }] }, + { role: 'assistant', content: [{ type: 'text', text: 'reply' }] }, + { + role: 'user', + content: [ + { type: 'text', text: 'line one' }, + { type: 'text', text: 'line two' }, + ], + }, + ], + }); + expect(extractPrompt(p)).toBe('line one\nline two'); + }); + + it('accepts plain-string message content', () => { + const p = RunPayloadSchema.parse({ messages: [{ role: 'user', content: 'plain' }] }); + expect(extractPrompt(p)).toBe('plain'); + }); + + it('throws when no user message exists', () => { + const p = RunPayloadSchema.parse({ messages: [{ role: 'assistant', content: 'x' }] }); + expect(() => extractPrompt(p)).toThrow(); + }); +}); diff --git a/codex/tests/run.test.ts b/codex/tests/run.test.ts new file mode 100644 index 00000000..789ceb18 --- /dev/null +++ b/codex/tests/run.test.ts @@ -0,0 +1,259 @@ +import { beforeEach, describe, expect, it, vi } from 'vitest'; + +vi.mock('@openai/codex-sdk', () => ({ Codex: vi.fn() })); + +import { Codex } from '@openai/codex-sdk'; +import { type Config, loadConfig } from '../src/config.js'; +import { makeEmitter } from '../src/events.js'; +import { executeRun, RunPayloadSchema } from '../src/run.js'; +import { type CodexCapture, fakeCodexClass, fullTurn } from './_helpers/fake-codex.js'; +import { fakeIii } from './_helpers/fake-iii.js'; + +const CodexMock = vi.mocked(Codex); + +async function baseConfig(): Promise { + return loadConfig('/nonexistent/config.yaml'); +} + +async function runTurn( + payload: Record, + events: Array> = fullTurn, + cfgOverrides: Partial = {}, +) { + const fake = fakeIii(); + const cfg = { ...(await baseConfig()), ...cfgOverrides }; + const capture: CodexCapture = { aborted: false }; + CodexMock.mockImplementation(fakeCodexClass(events, capture) as never); + const emit = makeEmitter(fake.iii, cfg.events_stream); + const emitRaw = makeEmitter(fake.iii, cfg.raw_events_stream); + const result = await executeRun(fake.iii, cfg, emit, emitRaw, RunPayloadSchema.parse(payload)); + return { fake, capture, result }; +} + +beforeEach(() => { + CodexMock.mockReset(); +}); + +describe('executeRun', () => { + it('returns the final agent message with mapped usage', async () => { + const { result } = await runTurn({ prompt: 'do it', session_id: 's1' }); + expect(result).toMatchObject({ + session_id: 's1', + codex_thread_id: 'th-1', + result: 'done', + stop_reason: 'end', + is_error: false, + num_turns: 1, + usage: { + input_tokens: 5, + output_tokens: 2, + cache_read_tokens: 100, + reasoning_tokens: 7, + }, + }); + }); + + it('persists the session record working then done with the thread id', async () => { + const { fake } = await runTurn({ prompt: 'x', session_id: 's1' }); + const sets = fake.calls.filter( + (c) => + c.function_id === 'state::set' && + (c.payload as { scope?: string }).scope === 'codex_sessions', + ); + const statuses = sets.map((c) => (c.payload.value as { status: string }).status); + expect(statuses[0]).toBe('working'); + expect(statuses[statuses.length - 1]).toBe('done'); + const final = sets[sets.length - 1].payload.value as Record; + expect(final.codex_thread_id).toBe('th-1'); + }); + + it('mirrors every SDK event verbatim onto the raw stream', async () => { + const { fake } = await runTurn({ prompt: 'x', session_id: 's1' }); + const raw = fake.streamFrames('codex::events').map((f) => f.data); + expect(raw).toEqual(fullTurn); + const groupIds = fake.streamFrames('codex::events').map((f) => f.group_id); + expect(new Set(groupIds)).toEqual(new Set(['s1'])); + }); + + it('emits the translated AgentEvent sequence on agent::events', async () => { + const { fake } = await runTurn({ prompt: 'x', session_id: 's1' }); + const types = fake.streamFrames('agent::events').map((f) => (f.data as { type: string }).type); + expect(types).toEqual([ + 'function_execution_start', + 'function_execution_end', + 'message_complete', + 'turn_end', + 'agent_end', + ]); + const [start, end] = fake + .streamFrames('agent::events') + .map((f) => f.data as Record) + .filter((d) => String(d.type).startsWith('function_execution')); + expect(start).toMatchObject({ + function_call_id: 'item-1', + function_id: 'codex::shell', + args: { command: 'ls' }, + }); + expect(end).toMatchObject({ function_call_id: 'item-1', is_error: false }); + }); + + it('passes worker defaults and named fields to thread options', async () => { + const { capture } = await runTurn({ + prompt: 'x', + session_id: 's1', + cwd: '/repo', + model: 'gpt-5.2-codex', + sandbox_mode: 'read-only', + reasoning_effort: 'high', + }); + expect(capture.prompt).toBe('x'); + expect(capture.threadOptions).toMatchObject({ + workingDirectory: '/repo', + model: 'gpt-5.2-codex', + sandboxMode: 'read-only', + approvalPolicy: 'never', + skipGitRepoCheck: true, + modelReasoningEffort: 'high', + }); + }); + + it('forwards raw SDK options verbatim and lets them win over derived fields', async () => { + const { capture } = await runTurn({ + prompt: 'x', + session_id: 's1', + sandbox_mode: 'read-only', + options: { networkAccessEnabled: true, sandboxMode: 'workspace-write' }, + }); + expect(capture.threadOptions).toMatchObject({ + networkAccessEnabled: true, + sandboxMode: 'workspace-write', + }); + }); + + it('forwards output_schema as the turn outputSchema', async () => { + const schema = { type: 'object', properties: { ok: { type: 'boolean' } } }; + const { capture } = await runTurn({ prompt: 'x', session_id: 's1', output_schema: schema }); + expect(capture.turnOptions?.outputSchema).toEqual(schema); + }); + + it('resumes the prior thread for a known session_id', async () => { + const fake = fakeIii(); + fake.state.set('codex_sessions/s1', { + session_id: 's1', + codex_thread_id: 'th-prior', + cwd: '/repo', + model: '', + status: 'done', + turns: 1, + usage: null, + updated_at_ms: 1, + }); + const cfg = await baseConfig(); + const capture: CodexCapture = { aborted: false }; + CodexMock.mockImplementation(fakeCodexClass(fullTurn, capture) as never); + const emit = makeEmitter(fake.iii, cfg.events_stream); + const result = await executeRun( + fake.iii, + cfg, + emit, + emit, + RunPayloadSchema.parse({ prompt: 'again', session_id: 's1' }), + ); + expect(capture.resumedFrom).toBe('th-prior'); + expect(result.num_turns).toBe(2); + }); + + it('honors per-turn cwd and model overrides on a resumed session', async () => { + const fake = fakeIii(); + fake.state.set('codex_sessions/s1', { + session_id: 's1', + codex_thread_id: 'th-prior', + cwd: '/old/repo', + model: 'old-model', + status: 'done', + turns: 1, + usage: null, + updated_at_ms: 1, + }); + const cfg = await baseConfig(); + const capture: CodexCapture = { aborted: false }; + CodexMock.mockImplementation(fakeCodexClass(fullTurn, capture) as never); + const emit = makeEmitter(fake.iii, cfg.events_stream); + await executeRun( + fake.iii, + cfg, + emit, + emit, + RunPayloadSchema.parse({ + prompt: 'x', + session_id: 's1', + cwd: '/new/repo', + model: 'new-model', + }), + ); + expect(capture.threadOptions).toMatchObject({ + workingDirectory: '/new/repo', + model: 'new-model', + }); + }); + + it('extracts the prompt from the last user message of a messages payload', async () => { + const { capture } = await runTurn({ + session_id: 's1', + messages: [ + { role: 'user', content: [{ type: 'text', text: 'first' }] }, + { role: 'assistant', content: [{ type: 'text', text: 'reply' }] }, + { role: 'user', content: [{ type: 'text', text: 'second' }] }, + ], + }); + expect(capture.prompt).toBe('second'); + }); + + it('marks the record error and still closes the turn when the stream fails', async () => { + const turn = [ + { type: 'thread.started', thread_id: 'th-1' }, + { type: 'turn.failed', error: { message: 'model exploded' } }, + ]; + const { fake, result } = await runTurn({ prompt: 'x', session_id: 's1' }, turn); + expect(result.is_error).toBe(true); + expect(result.stop_reason).toBe('error'); + expect(String(result.result)).toContain('model exploded'); + const record = fake.state.get('codex_sessions/s1') as { status: string }; + expect(record.status).toBe('error'); + const types = fake.streamFrames('agent::events').map((f) => (f.data as { type: string }).type); + expect(types).toContain('turn_end'); + expect(types).toContain('agent_end'); + }); + + it('reports a failed command item as an error function result', async () => { + const turn = [ + { type: 'thread.started', thread_id: 'th-1' }, + { + type: 'item.completed', + item: { + id: 'item-9', + type: 'command_execution', + command: 'false', + aggregated_output: '', + exit_code: 1, + status: 'failed', + }, + }, + { + type: 'turn.completed', + usage: { + input_tokens: 1, + cached_input_tokens: 0, + output_tokens: 1, + reasoning_output_tokens: 0, + }, + }, + ]; + const { fake } = await runTurn({ prompt: 'x', session_id: 's1' }, turn); + const end = fake + .streamFrames('agent::events') + .map((f) => f.data as Record) + .find((d) => d.type === 'function_execution_end'); + expect(end).toMatchObject({ function_call_id: 'item-9', is_error: true }); + }); +}); diff --git a/codex/tests/state.test.ts b/codex/tests/state.test.ts new file mode 100644 index 00000000..3d508926 --- /dev/null +++ b/codex/tests/state.test.ts @@ -0,0 +1,57 @@ +import { describe, expect, it } from 'vitest'; +import type { ISdk } from 'iii-sdk'; +import { listSessions, loadSession, saveSession } from '../src/state.js'; +import type { SessionRecord } from '../src/types.js'; +import { fakeIii } from './_helpers/fake-iii.js'; + +function record(session_id: string): SessionRecord { + return { + session_id, + codex_thread_id: `th-${session_id}`, + cwd: '/repo', + model: '', + status: 'done', + turns: 1, + usage: null, + updated_at_ms: 1, + }; +} + +describe('session state', () => { + it('round-trips a record through scope codex_sessions', async () => { + const fake = fakeIii(); + await saveSession(fake.iii, record('s1')); + const set = fake.calls.find((c) => c.function_id === 'state::set'); + expect(set?.payload).toMatchObject({ scope: 'codex_sessions', key: 's1' }); + await expect(loadSession(fake.iii, 's1')).resolves.toMatchObject({ + session_id: 's1', + codex_thread_id: 'th-s1', + }); + }); + + it('returns null for unknown sessions', async () => { + const fake = fakeIii(); + await expect(loadSession(fake.iii, 'missing')).resolves.toBeNull(); + }); + + it('handles state::get returning the value directly, without an envelope', async () => { + // The engine returns the stored value itself, not {value}; a worker + // built against the envelope shape silently loses resume (caught live). + const iii = { + trigger: async (req: { function_id: string }) => + req.function_id === 'state::get' ? record('s1') : null, + } as unknown as ISdk; + await expect(loadSession(iii, 's1')).resolves.toMatchObject({ session_id: 's1' }); + }); + + it('lists every record and tolerates a non-array reply', async () => { + const fake = fakeIii(); + await saveSession(fake.iii, record('s1')); + await saveSession(fake.iii, record('s2')); + const sessions = await listSessions(fake.iii); + expect(sessions.map((s) => s.session_id).sort()).toEqual(['s1', 's2']); + + const iii = { trigger: async () => null } as unknown as ISdk; + await expect(listSessions(iii)).resolves.toEqual([]); + }); +}); diff --git a/codex/tsconfig.json b/codex/tsconfig.json new file mode 100644 index 00000000..9a3b09b0 --- /dev/null +++ b/codex/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "outDir": "dist", + "rootDir": "src", + "strict": true, + "declaration": false, + "sourceMap": false, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src"] +} diff --git a/codex/vitest.config.ts b/codex/vitest.config.ts new file mode 100644 index 00000000..1c1ef783 --- /dev/null +++ b/codex/vitest.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + include: ['tests/**/*.test.ts'], + environment: 'node', + globals: false, + testTimeout: 10000, + }, +}); From 655f3221df7d7909c744c33af3497687ae3a2b81 Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Thu, 11 Jun 2026 16:56:37 +0100 Subject: [PATCH 02/20] docs(codex): CLI and console trace screenshots --- codex/README.md | 8 ++++++++ codex/assets/cli-help.png | Bin 0 -> 402055 bytes codex/assets/cli-run.png | Bin 0 -> 215336 bytes codex/assets/console-traces.png | Bin 0 -> 377206 bytes 4 files changed, 8 insertions(+) create mode 100644 codex/assets/cli-help.png create mode 100644 codex/assets/cli-run.png create mode 100644 codex/assets/console-traces.png diff --git a/codex/README.md b/codex/README.md index 6c3e6da7..81f60bac 100644 --- a/codex/README.md +++ b/codex/README.md @@ -66,6 +66,12 @@ iii trigger codex::stop session_id= iii trigger codex::run --help ``` +A turn from the CLI and the published schema: + +![iii trigger codex::run returning the result with usage and reasoning tokens](assets/cli-run.png) + +![iii trigger codex::run --help printing the published request schema as a parameter table](assets/cli-help.png) + Call `codex::run` again with the returned `session_id` to continue the same conversation: the worker maps iii session ids to Codex thread ids in engine state and resumes automatically (threads persist in `~/.codex/sessions`). Two ids come back from every run. `session_id` is the iii session id: the key for `codex::status`, `codex::stop`, resume, and the stream group. `codex_thread_id` is Codex's internal thread id (what the worker passes to `resumeThread` under the hood) — returned for reference, not a lookup key. @@ -123,6 +129,8 @@ Sandboxing is Codex's own: `read-only` blocks writes, `workspace-write` allows e Every `codex::run` is an ordinary traced invocation on the engine: the trace carries the full input payload and the output (result, usage) as span events, with per-function p50/p95/p99 in the console's trace explorer — no extra instrumentation in the worker. +![codex::run invocations in the iii console trace explorer, with input and output payloads](assets/console-traces.png) + ## How it maps | Codex | iii | diff --git a/codex/assets/cli-help.png b/codex/assets/cli-help.png new file mode 100644 index 0000000000000000000000000000000000000000..6ebd67638243e70828b8112550508d78eda835f6 GIT binary patch literal 402055 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

IzN8oa~j-CDI;nQbt8&reCp9yqKF9fx!#B+ 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ƕ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�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

9a>2AE*O55YerS^=1yN|M~ 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�O}Qpu)f*>k<=Rv4 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 z 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

lk;La1e9?D6doe4C(tmJZ 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

Q{pv}_0HWrEGgu*-iy!XQG2=AI<5jm+A%1~ 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 literal 0 HcmV?d00001 From 08867d9f62768f714fd3583bca91985334831d17 Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Thu, 11 Jun 2026 17:23:14 +0100 Subject: [PATCH 03/20] fix(codex): address review findings - iii.worker.yaml install script uses pnpm, matching the declared packageManager and committed lockfile - smoke script exits non-zero when the run errors or expected frames are missing - test coverage for web_search item mapping --- codex/iii.worker.yaml | 2 +- codex/scripts/smoke/smoke-streams.mjs | 6 +++++- codex/tests/map.test.ts | 6 ++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/codex/iii.worker.yaml b/codex/iii.worker.yaml index 691b3d60..ef390238 100644 --- a/codex/iii.worker.yaml +++ b/codex/iii.worker.yaml @@ -9,7 +9,7 @@ runtime: kind: javascript scripts: - install: npm install && npm run build + install: pnpm install && pnpm run build start: node dist/index.js dependencies: diff --git a/codex/scripts/smoke/smoke-streams.mjs b/codex/scripts/smoke/smoke-streams.mjs index dfec7845..8c61c64f 100644 --- a/codex/scripts/smoke/smoke-streams.mjs +++ b/codex/scripts/smoke/smoke-streams.mjs @@ -1,6 +1,7 @@ import { registerWorker } from 'iii-sdk'; const iii = registerWorker('ws://127.0.0.1:49134', { workerName: 'smoke-codex' }); await new Promise((r) => setTimeout(r, 1500)); +let exitCode = 0; const res = await iii.trigger({ function_id: 'codex::run', payload: { @@ -11,6 +12,7 @@ const res = await iii.trigger({ timeoutMs: 240_000, }); console.log('result ->', res.result, '| error:', res.is_error); +if (res.is_error) exitCode = 1; const raw = await iii.trigger({ function_id: 'stream::list', payload: { stream_name: 'codex::events', group_id: res.session_id }, @@ -23,4 +25,6 @@ const agent = await iii.trigger({ console.log('agent::events types ->', JSON.stringify(agent.map((f) => f.type))); const exec = agent.find((f) => f.type === 'function_execution_start'); console.log('exec frame ->', JSON.stringify(exec ?? null).slice(0, 200)); -process.exit(0); +if (!exec || !raw.some((f) => f.type === 'turn.completed')) exitCode = 1; +console.log(exitCode === 0 ? 'smoke passed' : 'smoke FAILED'); +process.exit(exitCode); diff --git a/codex/tests/map.test.ts b/codex/tests/map.test.ts index e307e5ac..f673bcb9 100644 --- a/codex/tests/map.test.ts +++ b/codex/tests/map.test.ts @@ -55,6 +55,12 @@ describe('argsForItem / resultContentForItem', () => { expect(resultContentForItem(item)).toEqual([{ type: 'text', text: JSON.stringify(changes) }]); }); + it('carries the web search query as args and content (the SDK item has no result field)', () => { + const item = { id: 'i', type: 'web_search', query: 'zig allocators' }; + expect(argsForItem(item)).toEqual({ query: 'zig allocators' }); + expect(resultContentForItem(item)).toEqual([{ type: 'text', text: 'zig allocators' }]); + }); + it('prefers the MCP error message over the result payload', () => { const item = { id: 'i', From ecac70cd64d348ab240d7263820a0cddd0492a7c Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Thu, 11 Jun 2026 19:52:46 +0100 Subject: [PATCH 04/20] =?UTF-8?q?feat(codex):=20close=20SDK=20coverage=20g?= =?UTF-8?q?aps=20=E2=80=94=20codex=5Fconfig,=20images,=20base=5Furl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - codex_config payload field forwards per-turn config.toml overrides (MCP servers, model providers, profiles) as SDK config - images payload field attaches local_image inputs to the prompt - base_url worker config maps to the SDK baseUrl override - 58 tests --- codex/README.md | 2 +- codex/config.yaml | 3 +++ codex/skills/SKILL.md | 5 +++++ codex/src/config.ts | 1 + codex/src/run.ts | 17 ++++++++++++++++- codex/tests/_helpers/fake-codex.ts | 6 ++++-- codex/tests/config.test.ts | 1 + codex/tests/run.test.ts | 19 +++++++++++++++++++ 8 files changed, 50 insertions(+), 4 deletions(-) diff --git a/codex/README.md b/codex/README.md index 81f60bac..f5d8a9e1 100644 --- a/codex/README.md +++ b/codex/README.md @@ -86,7 +86,7 @@ Two ids come back from every run. `session_id` is the iii session id: the key fo | `codex::status` | Session state, live flag, usage | | `codex::sessions::list` | All sessions this worker has run | -`codex::run` accepts either a bare `prompt` string or a `messages` array (`[{ role: 'user', content: [{ type: 'text', text }] }]`) — the same input contract as the claude-code worker and `run::start_and_wait`, so the acp worker drives Codex with `--brain-fn codex::run` — plus `model`, `cwd`, `sandbox_mode`, `approval_policy`, `reasoning_effort`, `skip_git_repo_check`, and `output_schema` overrides. +`codex::run` accepts either a bare `prompt` string or a `messages` array (`[{ role: 'user', content: [{ type: 'text', text }] }]`) — the same input contract as the claude-code worker and `run::start_and_wait`, so the acp worker drives Codex with `--brain-fn codex::run` — plus `model`, `cwd`, `sandbox_mode`, `approval_policy`, `reasoning_effort`, `skip_git_repo_check`, `output_schema`, `images` (local image paths attached to the prompt), and `codex_config` (per-turn `config.toml` overrides: MCP servers, model providers, profiles — anything the CLI accepts as `--config key=value`). ### Raw API pass-through diff --git a/codex/config.yaml b/codex/config.yaml index 7ad22c47..42adaa7b 100644 --- a/codex/config.yaml +++ b/codex/config.yaml @@ -20,3 +20,6 @@ raw_events_stream: codex::events # Path to the Codex CLI binary. Empty = SDK default resolution; the worker # falls back to the `codex` binary on PATH (needed for the bundled build). codex_executable: "" + +# Override the API base URL (passed to the SDK as baseUrl). Empty = default. +base_url: "" diff --git a/codex/skills/SKILL.md b/codex/skills/SKILL.md index 7e89855e..e7aa8dab 100644 --- a/codex/skills/SKILL.md +++ b/codex/skills/SKILL.md @@ -36,6 +36,11 @@ anything onto this one. interrupt with `codex::stop`. - Get structured final output: pass `output_schema` (JSON schema) and the final agent message is JSON matching it. +- Attach screenshots or diagrams: `images: ["/path/a.png"]` adds local + images to the prompt. +- Wire MCP servers or model providers into one turn: `codex_config` + forwards any `config.toml` override, e.g. + `{"codex_config": {"mcp_servers": {"github": {"command": "gh-mcp"}}}}`. - Reach past the named payload fields: anything the SDK ThreadOptions accept goes through `options` unchanged, e.g. `{"options": {"networkAccessEnabled": true, "webSearchMode": "live"}}`. diff --git a/codex/src/config.ts b/codex/src/config.ts index 73aaed48..33b68193 100644 --- a/codex/src/config.ts +++ b/codex/src/config.ts @@ -19,6 +19,7 @@ const ConfigSchema = z.object({ events_stream: z.string().default('agent::events'), raw_events_stream: z.string().default('codex::events'), codex_executable: z.string().default(''), + base_url: z.string().default(''), }); export type Config = z.infer; diff --git a/codex/src/run.ts b/codex/src/run.ts index 06b51a8c..c66c8a4d 100644 --- a/codex/src/run.ts +++ b/codex/src/run.ts @@ -64,6 +64,13 @@ const RunPayloadSchema = z.object({ .record(z.string(), z.unknown()) .optional() .describe('JSON schema for structured final output'), + images: z.array(z.string()).optional().describe('Paths to local images attached to the prompt'), + codex_config: z + .record(z.string(), z.unknown()) + .optional() + .describe( + 'Codex config.toml overrides for this turn (flattened to --config key=value), e.g. mcp_servers, model_providers, profiles', + ), /** Raw Codex SDK ThreadOptions, spread over everything the worker * derives — the pure pass-through (camelCase as in the SDK). */ options: z @@ -140,6 +147,8 @@ export async function executeRun( const codex = new Codex({ ...(cfg.codex_executable ? { codexPathOverride: cfg.codex_executable } : {}), + ...(cfg.base_url ? { baseUrl: cfg.base_url } : {}), + ...(payload.codex_config ? { config: payload.codex_config as never } : {}), }); const thread = prior?.codex_thread_id ? codex.resumeThread(prior.codex_thread_id, threadOptions) @@ -158,7 +167,13 @@ export async function executeRun( let isError = false; try { - const { events } = await thread.runStreamed(prompt, { + const input = payload.images?.length + ? [ + { type: 'text' as const, text: prompt }, + ...payload.images.map((path) => ({ type: 'local_image' as const, path })), + ] + : prompt; + const { events } = await thread.runStreamed(input, { signal: abort.signal, ...(payload.output_schema ? { outputSchema: payload.output_schema } : {}), }); diff --git a/codex/tests/_helpers/fake-codex.ts b/codex/tests/_helpers/fake-codex.ts index 08d857f4..5a283c70 100644 --- a/codex/tests/_helpers/fake-codex.ts +++ b/codex/tests/_helpers/fake-codex.ts @@ -5,6 +5,7 @@ export type CodexCapture = { codexOptions?: Record; + input?: unknown; threadOptions?: Record; resumedFrom?: string; prompt?: string; @@ -39,8 +40,9 @@ function makeThread( | undefined; return { id: id ?? threadIdFromScript?.thread_id ?? null, - runStreamed: async (prompt: string, turnOptions?: Record) => { - capture.prompt = prompt; + runStreamed: async (prompt: string | unknown[], turnOptions?: Record) => { + capture.prompt = typeof prompt === 'string' ? prompt : undefined; + capture.input = prompt; capture.turnOptions = turnOptions; const signal = turnOptions?.signal as AbortSignal | undefined; return { diff --git a/codex/tests/config.test.ts b/codex/tests/config.test.ts index 34c72451..088e8e8b 100644 --- a/codex/tests/config.test.ts +++ b/codex/tests/config.test.ts @@ -14,6 +14,7 @@ describe('loadConfig', () => { expect(cfg.events_stream).toBe('agent::events'); expect(cfg.raw_events_stream).toBe('codex::events'); expect(cfg.codex_executable).toBe(''); + expect(cfg.base_url).toBe(''); }); it('merges a partial file over defaults', async () => { diff --git a/codex/tests/run.test.ts b/codex/tests/run.test.ts index 789ceb18..e6381f79 100644 --- a/codex/tests/run.test.ts +++ b/codex/tests/run.test.ts @@ -136,6 +136,25 @@ describe('executeRun', () => { expect(capture.turnOptions?.outputSchema).toEqual(schema); }); + it('forwards codex_config as SDK config overrides', async () => { + const codex_config = { mcp_servers: { github: { command: 'gh-mcp' } } }; + const { capture } = await runTurn({ prompt: 'x', session_id: 's1', codex_config }); + expect(capture.codexOptions?.config).toEqual(codex_config); + }); + + it('attaches local images to the prompt input', async () => { + const { capture } = await runTurn({ + prompt: 'describe these', + session_id: 's1', + images: ['/tmp/a.png', '/tmp/b.png'], + }); + expect(capture.input).toEqual([ + { type: 'text', text: 'describe these' }, + { type: 'local_image', path: '/tmp/a.png' }, + { type: 'local_image', path: '/tmp/b.png' }, + ]); + }); + it('resumes the prior thread for a known session_id', async () => { const fake = fakeIii(); fake.state.set('codex_sessions/s1', { From deb52d6ed7c1b3e06f9eeeb7d5f762ac2f154e0e Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Fri, 12 Jun 2026 10:30:43 +0100 Subject: [PATCH 05/20] docs(codex): plan-then-execute recipe with sandbox modes --- codex/README.md | 16 ++++++++++++++++ codex/skills/SKILL.md | 4 ++++ 2 files changed, 20 insertions(+) diff --git a/codex/README.md b/codex/README.md index f5d8a9e1..8af75bb9 100644 --- a/codex/README.md +++ b/codex/README.md @@ -125,6 +125,22 @@ codex_executable: "" # path to the codex CLI; empty = PATH resolut Sandboxing is Codex's own: `read-only` blocks writes, `workspace-write` allows edits inside `cwd`, `danger-full-access` disables the sandbox. Headless runs keep `approval_policy: never`; commands the sandbox blocks fail instead of prompting. +## Plan-then-execute with sandbox modes + +Codex has no named plan mode; the equivalent is a planning prompt under the `read-only` sandbox. The guarantee is OS-level (Seatbelt on macOS, Landlock on Linux), so writes physically fail rather than being policy-declined. Because the worker resumes threads, plan-then-execute is two calls against the same `session_id`: + +```bash +# 1. plan (OS-enforced read-only) +iii trigger codex::run --timeout-ms 600000 \ + --json '{"prompt":"Plan how to add rate limiting to the REST API. Do not implement.","cwd":"/path/to/repo","sandbox_mode":"read-only"}' + +# 2. execute the plan with full context, same thread +iii trigger codex::run --timeout-ms 600000 \ + --json '{"session_id":"","prompt":"Implement the plan.","sandbox_mode":"workspace-write","cwd":"/path/to/repo"}' +``` + +The approval step is whatever sits between the two calls — a human reading the plan, another worker, or a trigger. + ## Observability Every `codex::run` is an ordinary traced invocation on the engine: the trace carries the full input payload and the output (result, usage) as span events, with per-function p50/p95/p99 in the console's trace explorer — no extra instrumentation in the worker. diff --git a/codex/skills/SKILL.md b/codex/skills/SKILL.md index e7aa8dab..d48fb673 100644 --- a/codex/skills/SKILL.md +++ b/codex/skills/SKILL.md @@ -34,6 +34,10 @@ anything onto this one. `{session_id, started}` immediately; follow `codex::events` (group_id = session_id) for raw progress or `agent::events` for the rendered view; interrupt with `codex::stop`. +- Plan before touching anything: run the planning prompt with + `sandbox_mode: read-only` (writes physically fail), read the plan, then + send "implement the plan" on the same `session_id` with + `sandbox_mode: workspace-write`. - Get structured final output: pass `output_schema` (JSON schema) and the final agent message is JSON matching it. - Attach screenshots or diagrams: `images: ["/path/a.png"]` adds local From 3fff92fbbc3a666fdc973dc37479e1c080a0b552 Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Fri, 12 Jun 2026 12:39:57 +0100 Subject: [PATCH 06/20] feat(codex): engine-grounded iii runtime context, on by default New threads start with the iii runtime block, the same engine-grounded discovery rules as the harness identity prompts retargeted to the iii CLI the agent reaches through its sandboxed shell: discover ids via engine::functions::list, fetch the contract with iii trigger --help before the first call, install from the public registry when nothing registered fits, never invent ids or fields from memory. Codex has no system-prompt option, so the block is prepended to the first turn of a new thread only; the thread persists it across resumes. A localhost engine is reachable under the default sandbox. iii_context: false disables per turn or in config.yaml. 61 tests. --- codex/README.md | 12 ++++++ codex/config.yaml | 6 +++ codex/skills/SKILL.md | 4 ++ codex/src/config.ts | 1 + codex/src/iii-prompt.ts | 80 ++++++++++++++++++++++++++++++++++++ codex/src/run.ts | 14 ++++++- codex/tests/config.test.ts | 1 + codex/tests/register.test.ts | 1 + codex/tests/run.test.ts | 41 ++++++++++++++++++ 9 files changed, 158 insertions(+), 2 deletions(-) create mode 100644 codex/src/iii-prompt.ts diff --git a/codex/README.md b/codex/README.md index 8af75bb9..49452dfc 100644 --- a/codex/README.md +++ b/codex/README.md @@ -125,6 +125,18 @@ codex_executable: "" # path to the codex CLI; empty = PATH resolut Sandboxing is Codex's own: `read-only` blocks writes, `workspace-write` allows edits inside `cwd`, `danger-full-access` disables the sandbox. Headless runs keep `approval_policy: never`; commands the sandbox blocks fail instead of prompting. +## The agent on the bus + +By default every new thread starts with the iii runtime context: a system-prompt block carrying the same engine-grounded rules as the harness identity prompts, retargeted to the `iii` CLI the agent reaches through its sandboxed shell. The agent discovers capabilities from the live engine instead of memory — `iii trigger engine::functions::list` to find function ids, `iii trigger --help` as the contract before every first call, the registry flow (`directory::registry::workers::list/info`, `worker::add`) when nothing registered fits — plus the calling rules and error-handling discipline that go with them. Local file edits stay on Codex's native tools; backend actions go through registered functions. + +```bash +# the agent answers this by querying the live engine itself +iii trigger codex::run --timeout-ms 300000 \ + --json '{"prompt":"Which functions does the claude-code worker register? List the ids.","cwd":"/tmp"}' +``` + +The block is injected only on the first turn of a new thread (the thread persists it across resumes) and costs nothing on resumed turns. Turn it off per call with `"iii_context": false` or globally in `config.yaml`. + ## Plan-then-execute with sandbox modes Codex has no named plan mode; the equivalent is a planning prompt under the `read-only` sandbox. The guarantee is OS-level (Seatbelt on macOS, Landlock on Linux), so writes physically fail rather than being policy-declined. Because the worker resumes threads, plan-then-execute is two calls against the same `session_id`: diff --git a/codex/config.yaml b/codex/config.yaml index 42adaa7b..36d402ea 100644 --- a/codex/config.yaml +++ b/codex/config.yaml @@ -17,6 +17,12 @@ events_stream: agent::events # mirrored verbatim here, grouped by session_id. raw_events_stream: codex::events +# Inject the iii runtime context into the first turn of each new thread: +# teaches the agent live discovery against the engine catalog through the +# iii CLI (a localhost engine is reachable under the default sandbox). +# Per-turn override via the iii_context payload field. +iii_context: true + # Path to the Codex CLI binary. Empty = SDK default resolution; the worker # falls back to the `codex` binary on PATH (needed for the bundled build). codex_executable: "" diff --git a/codex/skills/SKILL.md b/codex/skills/SKILL.md index d48fb673..2d9f9c27 100644 --- a/codex/skills/SKILL.md +++ b/codex/skills/SKILL.md @@ -34,6 +34,10 @@ anything onto this one. `{session_id, started}` immediately; follow `codex::events` (group_id = session_id) for raw progress or `agent::events` for the rendered view; interrupt with `codex::stop`. +- Act on the whole backend: new threads carry the iii runtime context by + default, so the agent discovers and calls any registered function through + the iii CLI (engine::functions::list, `iii trigger --help`); disable + per turn with `iii_context: false`. - Plan before touching anything: run the planning prompt with `sandbox_mode: read-only` (writes physically fail), read the plan, then send "implement the plan" on the same `session_id` with diff --git a/codex/src/config.ts b/codex/src/config.ts index 33b68193..affad727 100644 --- a/codex/src/config.ts +++ b/codex/src/config.ts @@ -18,6 +18,7 @@ const ConfigSchema = z.object({ .prefault({}), events_stream: z.string().default('agent::events'), raw_events_stream: z.string().default('codex::events'), + iii_context: z.boolean().default(true), codex_executable: z.string().default(''), base_url: z.string().default(''), }); diff --git a/codex/src/iii-prompt.ts b/codex/src/iii-prompt.ts new file mode 100644 index 00000000..eb55134d --- /dev/null +++ b/codex/src/iii-prompt.ts @@ -0,0 +1,80 @@ +/** + * iii runtime context injected into the first turn when `iii_context` is + * enabled. Carries the same engine-grounded rules as the harness identity + * prompts (harness/src/turn-orchestrator/prompt/*), retargeted from the + * `agent_trigger` tool to the `iii` CLI, which this agent reaches through + * its sandboxed shell. Codex has no system-prompt option, so the block is + * prepended to the first turn of a NEW thread only -- the thread persists + * it for every resumed turn. + */ + +export const III_CONTEXT_PROMPT = `# iii runtime + +This machine runs an iii engine: a WebSocket-routed worker mesh whose single engine process +holds a live registry of every connected worker, every function those workers expose, and every +trigger bound to them. Every call routes worker -> engine -> worker, so the language, runtime, +and location of a worker are invisible to its callers. The function id is the ONLY contract +between two workers. + +You act on iii ONLY through the \`iii\` CLI on PATH, via your shell: + + iii trigger [key=value ...] [--json ''] [--timeout-ms ] + +Function ids are namespaced with \`::\` (e.g. \`engine::functions::list\`). Simple arguments go +as \`key=value\` pairs; structured payloads go as \`--json\` with a single-quoted JSON OBJECT. + +IMPORTANT: NEVER invent function ids or argument names from memory. Discover them from the live +engine and trust it over memory or this prompt. + +## Discovery + +The live engine is the single source of truth. Ask it — never assume: + +- \`iii trigger engine::functions::list --json '{"search":""}'\` — every function across + all workers; optional filters \`prefix\` / \`search\` / \`worker\`. Use it to FIND a function + id. +- \`iii trigger --help\` — that function's description and request schema, served by + the engine. THIS IS THE API REFERENCE for every call you make. Fetch it BEFORE the first call + to any function; a one-line description from \`list\` is a hint, not the contract. +- \`iii trigger engine::workers::list\` — every connected worker; + \`iii trigger engine::workers::info name=\` — one worker's full surface. +- \`iii trigger engine::triggers::list\` — every trigger TYPE; + \`iii trigger engine::registered-triggers::list\` — every trigger INSTANCE already bound. + +Need a backend capability? Check what is already registered FIRST — it is usually one call +away. When nothing fits, search the public registry before building anything: +\`iii trigger directory::registry::workers::list --json '{"search":""}'\` pages the +published catalogue and \`iii trigger directory::registry::workers::info name=\` returns +one worker's full detail. Say what you are about to install and why, install with +\`iii trigger worker::add --json '{"source":{"kind":"registry","name":""}}'\`, then +confirm the new ids appear via \`engine::functions::list\` with that prefix and fetch each +contract with \`--help\` as usual. + +## Calling rules + +- \`--json\` takes a JSON OBJECT in single quotes: \`--json '{"path":"/tmp"}'\`. Never pass a + JSON-encoded string where the engine expects an object — workers reject it with + \`invalid_arguments\` / \`serialization error\`. +- Long-running functions need \`--timeout-ms\` well above the default 30000. +- Triggers are the engine's push channel: NEVER poll (a loop re-reading a queue, file, or + table) when a trigger type fits — bind a trigger instead. A trigger registration succeeds + even when its type's provider is absent or the config keys are wrong — the binding lands but + never fires — so copy config keys from \`engine::triggers::info\`, not from memory. + +## Error handling + +When a call errors, READ the error and CHANGE something before the next call. NEVER resend the +same function + payload unchanged. \`invalid_arguments\` / \`missing field\` means YOUR payload +is wrong: re-read the contract via \`--help\` and fix the object, keeping the same function. +\`function_not_found\` means the id is wrong: re-check via \`engine::functions::list\`. A +repeating timeout means the approach is wrong, not the arguments: simplify, split the work, or +report the blocker and stop. + +## Boundaries + +- Files in your working directory: use your native tools (read, edit, search). The bus is not + for local file edits. +- Backend actions beyond the working directory — email, databases, storage, queues, schedules, + other services — go through registered iii functions, never ad-hoc processes or foreign + patterns carried in from other ecosystems. If you reach for a tool that is not an iii + function for a backend action, stop and re-check the engine's surface first.`; diff --git a/codex/src/run.ts b/codex/src/run.ts index c66c8a4d..08369217 100644 --- a/codex/src/run.ts +++ b/codex/src/run.ts @@ -12,6 +12,7 @@ import type { ISdk } from 'iii-sdk'; import { z } from 'zod'; import type { Config } from './config.js'; import type { Emit } from './events.js'; +import { III_CONTEXT_PROMPT } from './iii-prompt.js'; import { argsForItem, type CodexItem, @@ -60,6 +61,12 @@ const RunPayloadSchema = z.object({ .optional() .describe('Model reasoning effort'), skip_git_repo_check: z.boolean().optional().describe('Allow running outside a git repository'), + iii_context: z + .boolean() + .optional() + .describe( + 'Inject the iii runtime discovery prompt (engine catalog via the iii CLI) on new threads', + ), output_schema: z .record(z.string(), z.unknown()) .optional() @@ -166,13 +173,16 @@ export async function executeRun( let stopReason = 'end'; let isError = false; + const iiiContext = (payload.iii_context ?? cfg.iii_context) && !prior?.codex_thread_id; + const promptText = iiiContext ? `${III_CONTEXT_PROMPT}\n\n# Task\n\n${prompt}` : prompt; + try { const input = payload.images?.length ? [ - { type: 'text' as const, text: prompt }, + { type: 'text' as const, text: promptText }, ...payload.images.map((path) => ({ type: 'local_image' as const, path })), ] - : prompt; + : promptText; const { events } = await thread.runStreamed(input, { signal: abort.signal, ...(payload.output_schema ? { outputSchema: payload.output_schema } : {}), diff --git a/codex/tests/config.test.ts b/codex/tests/config.test.ts index 088e8e8b..de987d95 100644 --- a/codex/tests/config.test.ts +++ b/codex/tests/config.test.ts @@ -13,6 +13,7 @@ describe('loadConfig', () => { expect(cfg.defaults.skip_git_repo_check).toBe(true); expect(cfg.events_stream).toBe('agent::events'); expect(cfg.raw_events_stream).toBe('codex::events'); + expect(cfg.iii_context).toBe(true); expect(cfg.codex_executable).toBe(''); expect(cfg.base_url).toBe(''); }); diff --git a/codex/tests/register.test.ts b/codex/tests/register.test.ts index 8e0b0dc8..966191cb 100644 --- a/codex/tests/register.test.ts +++ b/codex/tests/register.test.ts @@ -43,6 +43,7 @@ describe('register', () => { const res = (await fake.registered.get('codex::run')?.({ prompt: 'hi', session_id: 's1', + iii_context: false, })) as Record; expect(res.result).toBe('done'); expect(capture.prompt).toBe('hi'); diff --git a/codex/tests/run.test.ts b/codex/tests/run.test.ts index e6381f79..ab4bb8db 100644 --- a/codex/tests/run.test.ts +++ b/codex/tests/run.test.ts @@ -97,10 +97,49 @@ describe('executeRun', () => { expect(end).toMatchObject({ function_call_id: 'item-1', is_error: false }); }); + it('injects the iii runtime context into the first turn of a new thread', async () => { + const { capture } = await runTurn({ prompt: 'do it', session_id: 's1' }); + expect(capture.input).toContain('# iii runtime'); + expect(capture.input).toContain('iii trigger engine::functions::list'); + expect(capture.input).toContain('# Task\n\ndo it'); + }); + + it('does not re-inject the context on resumed threads', async () => { + const fake = fakeIii(); + fake.state.set('codex_sessions/s1', { + session_id: 's1', + codex_thread_id: 'th-prior', + cwd: '', + model: '', + status: 'done', + turns: 1, + usage: null, + updated_at_ms: 1, + }); + const cfg = await baseConfig(); + const capture: CodexCapture = { aborted: false }; + CodexMock.mockImplementation(fakeCodexClass(fullTurn, capture) as never); + const emit = makeEmitter(fake.iii, cfg.events_stream); + await executeRun( + fake.iii, + cfg, + emit, + emit, + RunPayloadSchema.parse({ prompt: 'again', session_id: 's1' }), + ); + expect(capture.input).toBe('again'); + }); + + it('omits the context when disabled per turn', async () => { + const { capture } = await runTurn({ prompt: 'plain', session_id: 's1', iii_context: false }); + expect(capture.input).toBe('plain'); + }); + it('passes worker defaults and named fields to thread options', async () => { const { capture } = await runTurn({ prompt: 'x', session_id: 's1', + iii_context: false, cwd: '/repo', model: 'gpt-5.2-codex', sandbox_mode: 'read-only', @@ -146,6 +185,7 @@ describe('executeRun', () => { const { capture } = await runTurn({ prompt: 'describe these', session_id: 's1', + iii_context: false, images: ['/tmp/a.png', '/tmp/b.png'], }); expect(capture.input).toEqual([ @@ -219,6 +259,7 @@ describe('executeRun', () => { it('extracts the prompt from the last user message of a messages payload', async () => { const { capture } = await runTurn({ session_id: 's1', + iii_context: false, messages: [ { role: 'user', content: [{ type: 'text', text: 'first' }] }, { role: 'assistant', content: [{ type: 'text', text: 'reply' }] }, From d7614165561e317e57d7d8de1b7a87e29d90443d Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Fri, 12 Jun 2026 12:45:30 +0100 Subject: [PATCH 07/20] docs(codex): engine-generic discovery example --- codex/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/codex/README.md b/codex/README.md index 49452dfc..ef5c0436 100644 --- a/codex/README.md +++ b/codex/README.md @@ -132,7 +132,7 @@ By default every new thread starts with the iii runtime context: a system-prompt ```bash # the agent answers this by querying the live engine itself iii trigger codex::run --timeout-ms 300000 \ - --json '{"prompt":"Which functions does the claude-code worker register? List the ids.","cwd":"/tmp"}' + --json '{"prompt":"List every worker connected to this engine and what each one does.","cwd":"/tmp"}' ``` The block is injected only on the first turn of a new thread (the thread persists it across resumes) and costs nothing on resumed turns. Turn it off per call with `"iii_context": false` or globally in `config.yaml`. From 87adac658c6bac490ae2cfe52ef16f0602cdacdb Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Fri, 12 Jun 2026 12:52:33 +0100 Subject: [PATCH 08/20] test(codex): config-level iii context disable --- codex/tests/run.test.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/codex/tests/run.test.ts b/codex/tests/run.test.ts index ab4bb8db..3036245b 100644 --- a/codex/tests/run.test.ts +++ b/codex/tests/run.test.ts @@ -130,6 +130,13 @@ describe('executeRun', () => { expect(capture.input).toBe('again'); }); + it('config-level iii_context: false disables the block for every turn', async () => { + const { capture } = await runTurn({ prompt: 'plain', session_id: 's1' }, fullTurn, { + iii_context: false, + }); + expect(capture.input).toBe('plain'); + }); + it('omits the context when disabled per turn', async () => { const { capture } = await runTurn({ prompt: 'plain', session_id: 's1', iii_context: false }); expect(capture.input).toBe('plain'); From 76b3fcb8dff8128546f230d578dfc80f66356d14 Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Fri, 12 Jun 2026 13:27:38 +0100 Subject: [PATCH 09/20] refactor(codex): deliver iii context via native developer_instructions Reading the Codex source (codex-rs/core: config/mod.rs, session/mod.rs) shows developer_instructions is a first-class config key injected as a developer-role message into every turn's context bundle. Switch the iii runtime block from first-message prepending to that channel: - applies on every turn including resumes, rebuilt as turn context rather than persisted history, so nothing duplicates - the user prompt stays untouched (no # Task framing) - composes with codex_config: a caller-supplied developer_instructions wins over the iii block Verified live: a turn with no iii mention in the prompt discovered and listed another worker's function ids via the engine catalog. 63 tests. --- codex/README.md | 4 ++-- codex/config.yaml | 9 +++++---- codex/skills/SKILL.md | 9 +++++---- codex/src/iii-prompt.ts | 8 ++++---- codex/src/run.ts | 19 +++++++++++++------ codex/tests/run.test.ts | 31 ++++++++++++++++++++++++------- 6 files changed, 53 insertions(+), 27 deletions(-) diff --git a/codex/README.md b/codex/README.md index ef5c0436..2c5f4113 100644 --- a/codex/README.md +++ b/codex/README.md @@ -127,7 +127,7 @@ Sandboxing is Codex's own: `read-only` blocks writes, `workspace-write` allows e ## The agent on the bus -By default every new thread starts with the iii runtime context: a system-prompt block carrying the same engine-grounded rules as the harness identity prompts, retargeted to the `iii` CLI the agent reaches through its sandboxed shell. The agent discovers capabilities from the live engine instead of memory — `iii trigger engine::functions::list` to find function ids, `iii trigger --help` as the contract before every first call, the registry flow (`directory::registry::workers::list/info`, `worker::add`) when nothing registered fits — plus the calling rules and error-handling discipline that go with them. Local file edits stay on Codex's native tools; backend actions go through registered functions. +By default every turn carries the iii runtime context, delivered through Codex's native `developer_instructions` config (a developer-role message in the turn context, the channel Codex itself uses for standing instructions): the same engine-grounded rules as the harness identity prompts, retargeted to the `iii` CLI the agent reaches through its sandboxed shell. The agent discovers capabilities from the live engine instead of memory — `iii trigger engine::functions::list` to find function ids, `iii trigger --help` as the contract before every first call, the registry flow (`directory::registry::workers::list/info`, `worker::add`) when nothing registered fits — plus the calling rules and error-handling discipline that go with them. Local file edits stay on Codex's native tools; backend actions go through registered functions. ```bash # the agent answers this by querying the live engine itself @@ -135,7 +135,7 @@ iii trigger codex::run --timeout-ms 300000 \ --json '{"prompt":"List every worker connected to this engine and what each one does.","cwd":"/tmp"}' ``` -The block is injected only on the first turn of a new thread (the thread persists it across resumes) and costs nothing on resumed turns. Turn it off per call with `"iii_context": false` or globally in `config.yaml`. +The block rides the turn context on every call, resumes included, without touching your prompt or Codex's base instructions. Turn it off per call with `"iii_context": false` or globally in `config.yaml`; a caller-supplied `developer_instructions` in `codex_config` wins over it. ## Plan-then-execute with sandbox modes diff --git a/codex/config.yaml b/codex/config.yaml index 36d402ea..cd9e0571 100644 --- a/codex/config.yaml +++ b/codex/config.yaml @@ -17,10 +17,11 @@ events_stream: agent::events # mirrored verbatim here, grouped by session_id. raw_events_stream: codex::events -# Inject the iii runtime context into the first turn of each new thread: -# teaches the agent live discovery against the engine catalog through the -# iii CLI (a localhost engine is reachable under the default sandbox). -# Per-turn override via the iii_context payload field. +# Deliver the iii runtime context as Codex developer_instructions: teaches +# the agent live discovery against the engine catalog through the iii CLI +# (a localhost engine is reachable under the default sandbox). Per-turn +# override via the iii_context payload field; a caller-supplied +# developer_instructions in codex_config wins. iii_context: true # Path to the Codex CLI binary. Empty = SDK default resolution; the worker diff --git a/codex/skills/SKILL.md b/codex/skills/SKILL.md index 2d9f9c27..a911eff1 100644 --- a/codex/skills/SKILL.md +++ b/codex/skills/SKILL.md @@ -34,10 +34,11 @@ anything onto this one. `{session_id, started}` immediately; follow `codex::events` (group_id = session_id) for raw progress or `agent::events` for the rendered view; interrupt with `codex::stop`. -- Act on the whole backend: new threads carry the iii runtime context by - default, so the agent discovers and calls any registered function through - the iii CLI (engine::functions::list, `iii trigger --help`); disable - per turn with `iii_context: false`. +- Act on the whole backend: turns carry the iii runtime context by default + (delivered as Codex `developer_instructions`), so the agent discovers and + calls any registered function through the iii CLI + (engine::functions::list, `iii trigger --help`); disable per turn + with `iii_context: false`. - Plan before touching anything: run the planning prompt with `sandbox_mode: read-only` (writes physically fail), read the plan, then send "implement the plan" on the same `session_id` with diff --git a/codex/src/iii-prompt.ts b/codex/src/iii-prompt.ts index eb55134d..ead17ace 100644 --- a/codex/src/iii-prompt.ts +++ b/codex/src/iii-prompt.ts @@ -1,11 +1,11 @@ /** - * iii runtime context injected into the first turn when `iii_context` is + * iii runtime context delivered as Codex `developer_instructions` (a + * developer-role message in the turn context) when `iii_context` is * enabled. Carries the same engine-grounded rules as the harness identity * prompts (harness/src/turn-orchestrator/prompt/*), retargeted from the * `agent_trigger` tool to the `iii` CLI, which this agent reaches through - * its sandboxed shell. Codex has no system-prompt option, so the block is - * prepended to the first turn of a NEW thread only -- the thread persists - * it for every resumed turn. + * its sandboxed shell. A caller-supplied `developer_instructions` in + * `codex_config` wins over this block. */ export const III_CONTEXT_PROMPT = `# iii runtime diff --git a/codex/src/run.ts b/codex/src/run.ts index 08369217..06dd11ef 100644 --- a/codex/src/run.ts +++ b/codex/src/run.ts @@ -152,10 +152,20 @@ export async function executeRun( ...(payload.options as Partial | undefined), }; + const iiiContext = payload.iii_context ?? cfg.iii_context; + const callerConfig = (payload.codex_config ?? {}) as Record; + const codexConfig = { + // developer_instructions is a per-turn developer message in Codex's + // turn context; a caller-supplied value wins over the iii block + ...(iiiContext && callerConfig.developer_instructions === undefined + ? { developer_instructions: III_CONTEXT_PROMPT } + : {}), + ...callerConfig, + }; const codex = new Codex({ ...(cfg.codex_executable ? { codexPathOverride: cfg.codex_executable } : {}), ...(cfg.base_url ? { baseUrl: cfg.base_url } : {}), - ...(payload.codex_config ? { config: payload.codex_config as never } : {}), + ...(Object.keys(codexConfig).length ? { config: codexConfig as never } : {}), }); const thread = prior?.codex_thread_id ? codex.resumeThread(prior.codex_thread_id, threadOptions) @@ -173,16 +183,13 @@ export async function executeRun( let stopReason = 'end'; let isError = false; - const iiiContext = (payload.iii_context ?? cfg.iii_context) && !prior?.codex_thread_id; - const promptText = iiiContext ? `${III_CONTEXT_PROMPT}\n\n# Task\n\n${prompt}` : prompt; - try { const input = payload.images?.length ? [ - { type: 'text' as const, text: promptText }, + { type: 'text' as const, text: prompt }, ...payload.images.map((path) => ({ type: 'local_image' as const, path })), ] - : promptText; + : prompt; const { events } = await thread.runStreamed(input, { signal: abort.signal, ...(payload.output_schema ? { outputSchema: payload.output_schema } : {}), diff --git a/codex/tests/run.test.ts b/codex/tests/run.test.ts index 3036245b..4219c9d9 100644 --- a/codex/tests/run.test.ts +++ b/codex/tests/run.test.ts @@ -97,14 +97,15 @@ describe('executeRun', () => { expect(end).toMatchObject({ function_call_id: 'item-1', is_error: false }); }); - it('injects the iii runtime context into the first turn of a new thread', async () => { + it('delivers the iii runtime context as developer_instructions by default', async () => { const { capture } = await runTurn({ prompt: 'do it', session_id: 's1' }); - expect(capture.input).toContain('# iii runtime'); - expect(capture.input).toContain('iii trigger engine::functions::list'); - expect(capture.input).toContain('# Task\n\ndo it'); + const config = capture.codexOptions?.config as { developer_instructions?: string }; + expect(config.developer_instructions).toContain('# iii runtime'); + expect(config.developer_instructions).toContain('iii trigger engine::functions::list'); + expect(capture.input).toBe('do it'); }); - it('does not re-inject the context on resumed threads', async () => { + it('keeps developer_instructions on resumed threads without touching the prompt', async () => { const fake = fakeIii(); fake.state.set('codex_sessions/s1', { session_id: 's1', @@ -127,18 +128,32 @@ describe('executeRun', () => { emit, RunPayloadSchema.parse({ prompt: 'again', session_id: 's1' }), ); + const config = capture.codexOptions?.config as { developer_instructions?: string }; + expect(config.developer_instructions).toContain('# iii runtime'); expect(capture.input).toBe('again'); }); + it('a caller-supplied developer_instructions wins over the iii block', async () => { + const { capture } = await runTurn({ + prompt: 'x', + session_id: 's1', + codex_config: { developer_instructions: 'house rules' }, + }); + const config = capture.codexOptions?.config as { developer_instructions?: string }; + expect(config.developer_instructions).toBe('house rules'); + }); + it('config-level iii_context: false disables the block for every turn', async () => { const { capture } = await runTurn({ prompt: 'plain', session_id: 's1' }, fullTurn, { iii_context: false, }); + expect(capture.codexOptions?.config).toBeUndefined(); expect(capture.input).toBe('plain'); }); it('omits the context when disabled per turn', async () => { const { capture } = await runTurn({ prompt: 'plain', session_id: 's1', iii_context: false }); + expect(capture.codexOptions?.config).toBeUndefined(); expect(capture.input).toBe('plain'); }); @@ -182,10 +197,12 @@ describe('executeRun', () => { expect(capture.turnOptions?.outputSchema).toEqual(schema); }); - it('forwards codex_config as SDK config overrides', async () => { + it('forwards codex_config as SDK config overrides alongside the iii block', async () => { const codex_config = { mcp_servers: { github: { command: 'gh-mcp' } } }; const { capture } = await runTurn({ prompt: 'x', session_id: 's1', codex_config }); - expect(capture.codexOptions?.config).toEqual(codex_config); + expect(capture.codexOptions?.config).toMatchObject(codex_config); + const config = capture.codexOptions?.config as { developer_instructions?: string }; + expect(config.developer_instructions).toContain('# iii runtime'); }); it('attaches local images to the prompt input', async () => { From d59f7f31e07859c63c18853a0747af3fa90fa7a2 Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Fri, 12 Jun 2026 16:06:37 +0100 Subject: [PATCH 10/20] fix(codex): harden background error status and usage defaults - codex::start marks the session 'error' best-effort when a background run throws, so a failed terminal save never leaves it stuck 'working' - mapUsage defaults absent cache/reasoning token fields to 0 instead of undefined From an /improve audit. 65 tests (2 new). --- codex/src/map.ts | 4 ++-- codex/src/run.ts | 24 +++++++++++++++++++++--- codex/tests/map.test.ts | 9 +++++++++ codex/tests/register.test.ts | 25 +++++++++++++++++++++++++ 4 files changed, 57 insertions(+), 5 deletions(-) diff --git a/codex/src/map.ts b/codex/src/map.ts index 1e82980d..ea247fa3 100644 --- a/codex/src/map.ts +++ b/codex/src/map.ts @@ -143,8 +143,8 @@ export function mapUsage(raw: unknown): Usage | null { return { input_tokens: u.input_tokens ?? 0, output_tokens: u.output_tokens ?? 0, - cache_read_tokens: u.cached_input_tokens, - reasoning_tokens: u.reasoning_output_tokens, + cache_read_tokens: u.cached_input_tokens ?? 0, + reasoning_tokens: u.reasoning_output_tokens ?? 0, }; } diff --git a/codex/src/run.ts b/codex/src/run.ts index 06dd11ef..4a0ac729 100644 --- a/codex/src/run.ts +++ b/codex/src/run.ts @@ -101,6 +101,21 @@ const SESSION_ID_FORMAT = z.toJSONSchema(SessionIdSchema); type LiveRun = { interrupt: () => Promise }; const live = new Map(); +/** Best-effort: flip a session record to `error` so a failed background run + * never leaves it stuck in `working`. Swallows its own failure. */ +async function markSessionError(iii: ISdk, session_id: string): Promise { + try { + const record = await loadSession(iii, session_id); + if (record && record.status === 'working') { + record.status = 'error'; + record.updated_at_ms = Date.now(); + await saveSession(iii, record); + } + } catch (err) { + console.error(`failed to mark session ${session_id} error: ${String(err)}`); + } +} + export function extractPrompt(payload: RunPayload): string { if (typeof payload.prompt === 'string') return payload.prompt; const users = (payload.messages ?? []).filter((m) => m.role === 'user'); @@ -317,9 +332,12 @@ export function register(iii: ISdk, cfg: Config, emit: Emit, emitRaw: Emit): voi async (payload: unknown) => { const parsed = RunPayloadSchema.parse(payload ?? {}); const session_id = parsed.session_id ?? randomUUID(); - void executeRun(iii, cfg, emit, emitRaw, { ...parsed, session_id }).catch((err) => - console.error(`codex::start background run failed for ${session_id}: ${String(err)}`), - ); + void executeRun(iii, cfg, emit, emitRaw, { ...parsed, session_id }).catch(async (err) => { + console.error(`codex::start background run failed for ${session_id}: ${String(err)}`); + // never leave the record stuck in `working`: a failure inside the + // turn's own terminal save lands here, so mark it error best-effort + await markSessionError(iii, session_id); + }); return { session_id, started: true }; }, { diff --git a/codex/tests/map.test.ts b/codex/tests/map.test.ts index f673bcb9..836e2ac0 100644 --- a/codex/tests/map.test.ts +++ b/codex/tests/map.test.ts @@ -107,6 +107,15 @@ describe('mapUsage', () => { expect(mapUsage(null)).toBeNull(); expect(mapUsage('x')).toBeNull(); }); + + it('defaults absent cache/reasoning token fields to 0 instead of undefined', () => { + expect(mapUsage({ input_tokens: 3, output_tokens: 1 })).toEqual({ + input_tokens: 3, + output_tokens: 1, + cache_read_tokens: 0, + reasoning_tokens: 0, + }); + }); }); describe('message constructors', () => { diff --git a/codex/tests/register.test.ts b/codex/tests/register.test.ts index 966191cb..c8af1b82 100644 --- a/codex/tests/register.test.ts +++ b/codex/tests/register.test.ts @@ -77,6 +77,31 @@ describe('register', () => { }); }); + it('marks the session error when a background run throws mid-stream', async () => { + const fake = await registeredWorker(); + CodexMock.mockImplementation((() => { + const thread = { + id: 'th-1', + runStreamed: async () => ({ + events: (async function* () { + yield { type: 'thread.started', thread_id: 'th-1' }; + throw new Error('stream died'); + })(), + }), + }; + return { startThread: () => thread, resumeThread: () => thread }; + }) as never); + const res = (await fake.registered.get('codex::start')?.({ + prompt: 'bg', + session_id: 'bg-1', + })) as Record; + expect(res.started).toBe(true); + await vi.waitFor(() => { + const record = fake.state.get('codex_sessions/bg-1') as { status: string } | undefined; + expect(record?.status).toBe('error'); + }); + }); + it('codex::stop without a live run reports stopped: false', async () => { const fake = await registeredWorker(); const res = (await fake.registered.get('codex::stop')?.({ session_id: 'ghost' })) as Record< From e64fe8f868e587cb02e1f238221905c2196e6778 Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Fri, 12 Jun 2026 16:10:10 +0100 Subject: [PATCH 11/20] chore(codex): drop committed smoke script --- codex/scripts/smoke/smoke-streams.mjs | 30 --------------------------- 1 file changed, 30 deletions(-) delete mode 100644 codex/scripts/smoke/smoke-streams.mjs diff --git a/codex/scripts/smoke/smoke-streams.mjs b/codex/scripts/smoke/smoke-streams.mjs deleted file mode 100644 index 8c61c64f..00000000 --- a/codex/scripts/smoke/smoke-streams.mjs +++ /dev/null @@ -1,30 +0,0 @@ -import { registerWorker } from 'iii-sdk'; -const iii = registerWorker('ws://127.0.0.1:49134', { workerName: 'smoke-codex' }); -await new Promise((r) => setTimeout(r, 1500)); -let exitCode = 0; -const res = await iii.trigger({ - function_id: 'codex::run', - payload: { - prompt: 'Run the command `ls /tmp | head -3` and tell me how many lines it printed.', - cwd: '/tmp', - sandbox_mode: 'read-only', - }, - timeoutMs: 240_000, -}); -console.log('result ->', res.result, '| error:', res.is_error); -if (res.is_error) exitCode = 1; -const raw = await iii.trigger({ - function_id: 'stream::list', - payload: { stream_name: 'codex::events', group_id: res.session_id }, -}); -console.log('codex::events types ->', JSON.stringify(raw.map((f) => f.type))); -const agent = await iii.trigger({ - function_id: 'stream::list', - payload: { stream_name: 'agent::events', group_id: res.session_id }, -}); -console.log('agent::events types ->', JSON.stringify(agent.map((f) => f.type))); -const exec = agent.find((f) => f.type === 'function_execution_start'); -console.log('exec frame ->', JSON.stringify(exec ?? null).slice(0, 200)); -if (!exec || !raw.some((f) => f.type === 'turn.completed')) exitCode = 1; -console.log(exitCode === 0 ? 'smoke passed' : 'smoke FAILED'); -process.exit(exitCode); From ee92bf0694e891c54413ff78631411d51296df23 Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Fri, 12 Jun 2026 16:28:59 +0100 Subject: [PATCH 12/20] fix(codex): guard concurrent same-session runs, order working-save - reject a run when one is already live for the session (live.has guard): the in-process handle is what codex::stop targets, so a second run would clobber it and race the shared record - persist 'working' only after the thread + live handle exist, so a throw during Codex construction never leaves the record stuck in 'working' - README: approval_policy is forwarded per turn and any value is respected, not a fixed runtime constraint 66 tests (1 new). --- codex/README.md | 2 +- codex/src/run.ts | 14 +++++++++++--- codex/tests/register.test.ts | 31 +++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/codex/README.md b/codex/README.md index 2c5f4113..f4099699 100644 --- a/codex/README.md +++ b/codex/README.md @@ -123,7 +123,7 @@ raw_events_stream: codex::events # verbatim Codex thread events codex_executable: "" # path to the codex CLI; empty = PATH resolution ``` -Sandboxing is Codex's own: `read-only` blocks writes, `workspace-write` allows edits inside `cwd`, `danger-full-access` disables the sandbox. Headless runs keep `approval_policy: never`; commands the sandbox blocks fail instead of prompting. +Sandboxing is Codex's own: `read-only` blocks writes, `workspace-write` allows edits inside `cwd`, `danger-full-access` disables the sandbox. `approval_policy` is forwarded to Codex per turn from the payload or the configured default; headless callers leave it at `never` so a command the sandbox blocks fails instead of prompting, but any other value is passed through and respected. ## The agent on the bus diff --git a/codex/src/run.ts b/codex/src/run.ts index 4a0ac729..f47ca04d 100644 --- a/codex/src/run.ts +++ b/codex/src/run.ts @@ -137,6 +137,11 @@ export async function executeRun( ): Promise> { const session_id = payload.session_id ?? randomUUID(); const prompt = extractPrompt(payload); + // one live run per session: the in-process handle is what codex::stop + // targets, so a second concurrent run would clobber it and race the record + if (live.has(session_id)) { + return { session_id, busy: true, reason: 'a run is already active for this session' }; + } const prior = await loadSession(iii, session_id); const d = cfg.defaults; @@ -152,9 +157,6 @@ export async function executeRun( }; if (payload.cwd) record.cwd = payload.cwd; if (payload.model) record.model = payload.model; - record.status = 'working'; - record.updated_at_ms = Date.now(); - await saveSession(iii, record); const reasoning = payload.reasoning_effort ?? (d.reasoning_effort || undefined); const threadOptions: ThreadOptions = { @@ -190,6 +192,12 @@ export async function executeRun( const handle: LiveRun = { interrupt: async () => abort.abort() }; live.set(session_id, handle); + // persist `working` only once the thread + live handle exist, so a throw + // during Codex construction never leaves the record stuck in `working` + record.status = 'working'; + record.updated_at_ms = Date.now(); + await saveSession(iii, record); + const transcript: AgentMessage[] = []; const pendingResults: FunctionResultMessage[] = []; const started = new Map(); diff --git a/codex/tests/register.test.ts b/codex/tests/register.test.ts index c8af1b82..60686d9d 100644 --- a/codex/tests/register.test.ts +++ b/codex/tests/register.test.ts @@ -154,6 +154,37 @@ describe('register', () => { expect(capture.aborted).toBe(true); }); + it('rejects a second run while one is already live for the session', async () => { + const fake = await registeredWorker(); + let release: (() => void) | undefined; + const gate = new Promise((r) => { + release = r; + }); + CodexMock.mockImplementation((() => { + const thread = { + id: 'th-live', + runStreamed: async () => ({ + events: (async function* () { + yield { type: 'thread.started', thread_id: 'th-live' }; + await gate; + })(), + }), + }; + return { startThread: () => thread, resumeThread: () => thread }; + }) as never); + + await fake.registered.get('codex::start')?.({ prompt: 'first', session_id: 'busy-1' }); + await vi.waitFor(() => { + expect(fake.state.has('codex_sessions/busy-1')).toBe(true); + }); + const second = (await fake.registered.get('codex::run')?.({ + prompt: 'second', + session_id: 'busy-1', + })) as Record; + expect(second).toMatchObject({ session_id: 'busy-1', busy: true }); + release?.(); + }); + it('codex::status reflects the stored record and live flag', async () => { const fake = await registeredWorker(); const res = (await fake.registered.get('codex::status')?.({ session_id: 'none' })) as Record< From 9ec689315a2289da2b48f943b53ccb19b238b77c Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Mon, 15 Jun 2026 11:35:04 +0100 Subject: [PATCH 13/20] feat(codex): rewrite as a Rust binary worker, drop the TS implementation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The worker only ever shelled to `codex exec --json`; Rust does that natively via tokio::process, so the worker becomes a deploy: binary like the other Rust workers — no esbuild bundle, no Node runtime, and the executable PATH hack is gone (it just spawns codex). - spawn `codex exec --json`, write prompt to stdin, parse the JSONL event stream (serde mirror of exec_events.rs; lenient, unknown events/items fall through and are skipped) - raw events verbatim on codex::events, translated AgentEvent frames on agent::events (codex::shell / apply_patch / web_search / server::tool) - thread resume via engine state scope codex_sessions; per-turn cwd/model overrides; concurrency guard (one live run per session) and working-save-after-handle ordering carried over - named fields + codex_config (--config pass-through) + additional_directories + output_schema (temp file) + images; developer_instructions injects the iii runtime context, caller value wins - request schemas via schemars so `iii trigger codex::run --help` prints the parameter table - embedding codex-core was rejected: the crates are unpublished (0.0.0, not on crates.io), so a dependency would be a git URL pulling the whole OpenAI runtime; the binary is the stable contract 23 unit tests (args/config serialization, event mapping, prompt extraction, lenient parsing). Verified live against the engine: pong, command-exec mapped to codex::shell on both streams, thread resume. --- README.md | 2 +- codex/.gitignore | 2 +- codex/Cargo.lock | 2536 ++++++++++++++++++++++++++++ codex/Cargo.toml | 36 + codex/README.md | 14 +- codex/biome.json | 46 - codex/build.rs | 6 + codex/iii.worker.yaml | 27 +- codex/package.json | 39 - codex/pnpm-lock.yaml | 2168 ------------------------ codex/scripts/build-bundle.mjs | 64 - codex/src/codex/args.rs | 193 +++ codex/src/codex/events_types.rs | 163 ++ codex/src/codex/mod.rs | 423 +++++ codex/src/config.rs | 67 + codex/src/config.ts | 38 - codex/src/events.rs | 44 + codex/src/events.ts | 29 - codex/src/executable.ts | 26 - codex/src/functions/mod.rs | 134 ++ codex/src/functions/types.rs | 78 + codex/src/iii-prompt.ts | 80 - codex/src/iii_prompt.rs | 76 + codex/src/index.ts | 42 - codex/src/lib.rs | 12 + codex/src/main.rs | 86 + codex/src/manifest.rs | 38 + codex/src/map.rs | 90 + codex/src/map.ts | 157 -- codex/src/run.ts | 394 ----- codex/src/state.rs | 81 + codex/src/state.ts | 34 - codex/src/types.ts | 87 - codex/src/wire.rs | 79 + codex/tests/_helpers/fake-codex.ts | 105 -- codex/tests/_helpers/fake-iii.ts | 57 - codex/tests/args.rs | 126 ++ codex/tests/config.test.ts | 47 - codex/tests/events.test.ts | 45 - codex/tests/executable.test.ts | 34 - codex/tests/map.rs | 160 ++ codex/tests/map.test.ts | 155 -- codex/tests/prompt_config.rs | 75 + codex/tests/register.test.ts | 208 --- codex/tests/run-payload.test.ts | 54 - codex/tests/run.test.ts | 343 ---- codex/tests/state.test.ts | 57 - codex/tsconfig.json | 15 - codex/tsconfig.tsbuildinfo | 1 + codex/vitest.config.ts | 10 - 50 files changed, 4530 insertions(+), 4353 deletions(-) create mode 100644 codex/Cargo.lock create mode 100644 codex/Cargo.toml delete mode 100644 codex/biome.json create mode 100644 codex/build.rs delete mode 100644 codex/package.json delete mode 100644 codex/pnpm-lock.yaml delete mode 100644 codex/scripts/build-bundle.mjs create mode 100644 codex/src/codex/args.rs create mode 100644 codex/src/codex/events_types.rs create mode 100644 codex/src/codex/mod.rs create mode 100644 codex/src/config.rs delete mode 100644 codex/src/config.ts create mode 100644 codex/src/events.rs delete mode 100644 codex/src/events.ts delete mode 100644 codex/src/executable.ts create mode 100644 codex/src/functions/mod.rs create mode 100644 codex/src/functions/types.rs delete mode 100644 codex/src/iii-prompt.ts create mode 100644 codex/src/iii_prompt.rs delete mode 100644 codex/src/index.ts create mode 100644 codex/src/lib.rs create mode 100644 codex/src/main.rs create mode 100644 codex/src/manifest.rs create mode 100644 codex/src/map.rs delete mode 100644 codex/src/map.ts delete mode 100644 codex/src/run.ts create mode 100644 codex/src/state.rs delete mode 100644 codex/src/state.ts delete mode 100644 codex/src/types.ts create mode 100644 codex/src/wire.rs delete mode 100644 codex/tests/_helpers/fake-codex.ts delete mode 100644 codex/tests/_helpers/fake-iii.ts create mode 100644 codex/tests/args.rs delete mode 100644 codex/tests/config.test.ts delete mode 100644 codex/tests/events.test.ts delete mode 100644 codex/tests/executable.test.ts create mode 100644 codex/tests/map.rs delete mode 100644 codex/tests/map.test.ts create mode 100644 codex/tests/prompt_config.rs delete mode 100644 codex/tests/register.test.ts delete mode 100644 codex/tests/run-payload.test.ts delete mode 100644 codex/tests/run.test.ts delete mode 100644 codex/tests/state.test.ts delete mode 100644 codex/tsconfig.json create mode 100644 codex/tsconfig.tsbuildinfo delete mode 100644 codex/vitest.config.ts diff --git a/README.md b/README.md index befd7313..25c565b9 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ npx skills add iii-hq/iii --all |---|---|---| | [`acp`](acp/) | Rust | Agent Client Protocol surface — stdio JSON-RPC, exposes iii agents as ACP sessions. | | [`harness`](harness/) | Node | TS port of the iii harness stack — bundles `harness` (provider registry + credentials/settings/permissions via the `configuration` worker), `turn-orchestrator`, `approval-gate`, `hook-fanout`, `models-catalog`, the `provider-*` workers, `llm-budget`, and `context-compaction` as one pnpm monorepo. Conversations persist in `session-manager`. See [`harness/README.md`](harness/README.md). | -| [`codex`](codex/) | Node | OpenAI Codex as an iii worker — `codex::*` runs headless Codex turns, mirrors raw thread events onto `codex::events`, and streams AgentEvent frames onto `agent::events`. | +| [`codex`](codex/) | Rust | OpenAI Codex as an iii worker — `codex::*` spawn the codex CLI for headless turns, mirror raw thread events onto `codex::events`, and stream AgentEvent frames onto `agent::events`. | | [`session-manager`](session-manager/) | Rust | Durable, reactive, branching conversation store — fourteen `session::*` functions plus six trigger types; the transcript backend for `harness` and `console`. See [`session-manager/architecture/`](session-manager/architecture/). | | [`database`](database/) | Rust | PostgreSQL, MySQL, and SQLite client — query, execute, transactions, prepared statements, and change feeds. | | [`iii-directory`](iii-directory/) | Rust | Engine introspection (functions / triggers / workers), workers-registry proxy, and filesystem-backed skill + prompt reader. | diff --git a/codex/.gitignore b/codex/.gitignore index 43370fa9..ea8c4bf7 100644 --- a/codex/.gitignore +++ b/codex/.gitignore @@ -1 +1 @@ -*.tsbuildinfo +/target diff --git a/codex/Cargo.lock b/codex/Cargo.lock new file mode 100644 index 00000000..dcfdc9a0 --- /dev/null +++ b/codex/Cargo.lock @@ -0,0 +1,2536 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "anstream" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" + +[[package]] +name = "anstyle-parse" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.61.2", +] + +[[package]] +name = "anyhow" +version = "1.0.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" + +[[package]] +name = "async-trait" +version = "0.1.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "2.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + +[[package]] +name = "bytes" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" + +[[package]] +name = "cc" +version = "1.2.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dad887fd958be91b5098c0248def011f4523ab786cd411be668777e55063501f" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "clap" +version = "4.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" + +[[package]] +name = "codex" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "iii-observability", + "iii-sdk", + "once_cell", + "schemars", + "serde", + "serde_json", + "serde_yaml", + "tempfile", + "thiserror", + "tokio", + "toml", + "tracing", + "tracing-subscriber", + "uuid", +] + +[[package]] +name = "colorchoice" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" + +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "data-encoding" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "displaydoc" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "fastrand" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" + +[[package]] +name = "futures-executor" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-macro" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" + +[[package]] +name = "futures-task" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" + +[[package]] +name = "futures-util" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +dependencies = [ + "futures-core", + "futures-macro", + "futures-sink", + "futures-task", + "pin-project-lite", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi 5.3.0", + "wasip2", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", + "wasip2", + "wasip3", +] + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash", +] + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hostname" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "617aaa3557aef3810a6369d0a99fac8a080891b68bd9f9812a1eeda0c0730cbd" +dependencies = [ + "cfg-if", + "libc", + "windows-link", +] + +[[package]] +name = "http" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "hyper" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "base64", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "icu_collections" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" + +[[package]] +name = "icu_properties" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" + +[[package]] +name = "icu_provider" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "iii-observability" +version = "0.19.1-next.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7169861d75f52022881edf09657763c84299e935e60abe19faf98308dc4122e6" +dependencies = [ + "futures-util", + "opentelemetry", + "opentelemetry-http", + "opentelemetry_sdk", + "reqwest", + "serde_json", + "sysinfo", + "tokio", + "tokio-tungstenite", + "tracing", + "uuid", +] + +[[package]] +name = "iii-sdk" +version = "0.19.1-next.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "619bbf68e82f91fa54d23986f00958a5bd573a08751c89b6528d2e35916a8642" +dependencies = [ + "async-trait", + "futures-util", + "hostname", + "iii-observability", + "reqwest", + "schemars", + "serde", + "serde_json", + "thiserror", + "tokio", + "tokio-tungstenite", + "tracing", + "uuid", +] + +[[package]] +name = "indexmap" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +dependencies = [ + "equivalent", + "hashbrown 0.17.1", + "serde", + "serde_core", +] + +[[package]] +name = "ipnet" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "js-sys" +version = "0.3.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03d04c30968dffe80775bd4d7fb676131cd04a1fb46d2686dbffbaec2d9dfd31" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + +[[package]] +name = "libc" +version = "0.2.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "litemap" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" + +[[package]] +name = "log" +version = "0.4.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" + +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + +[[package]] +name = "matchers" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "memchr" +version = "2.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4" + +[[package]] +name = "mio" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "ntapi" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3b335231dfd352ffb0f8017f3b6027a4917f7df785ea2143d8af2adc66980ae" +dependencies = [ + "winapi", +] + +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags", +] + +[[package]] +name = "objc2-io-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" +dependencies = [ + "libc", + "objc2-core-foundation", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" + +[[package]] +name = "openssl-probe" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" + +[[package]] +name = "opentelemetry" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b84bcd6ae87133e903af7ef497404dda70c60d0ea14895fc8a5e6722754fc2a0" +dependencies = [ + "futures-core", + "futures-sink", + "js-sys", + "pin-project-lite", + "thiserror", + "tracing", +] + +[[package]] +name = "opentelemetry-http" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7a6d09a73194e6b66df7c8f1b680f156d916a1a942abf2de06823dd02b7855d" +dependencies = [ + "async-trait", + "bytes", + "http", + "opentelemetry", + "reqwest", +] + +[[package]] +name = "opentelemetry_sdk" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14ae4f5991976fd48df6d843de219ca6d31b01daaab2dad5af2badeded372bd" +dependencies = [ + "futures-channel", + "futures-executor", + "futures-util", + "opentelemetry", + "percent-encoding", + "rand", + "thiserror", + "tokio", + "tokio-stream", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "potential_utf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +dependencies = [ + "zerovec", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn", +] + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quinn" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" +dependencies = [ + "bytes", + "getrandom 0.3.4", + "lru-slab", + "rand", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "slab", + "thiserror", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.60.2", +] + +[[package]] +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "rand" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +dependencies = [ + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "regex-automata" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" + +[[package]] +name = "reqwest" +version = "0.12.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" +dependencies = [ + "base64", + "bytes", + "futures-core", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-hash" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" + +[[package]] +name = "rustix" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.23.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pki-types" +version = "1.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[package]] +name = "schannel" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "schemars" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +dependencies = [ + "dyn-clone", + "schemars_derive", + "serde", + "serde_json", + "uuid", +] + +[[package]] +name = "schemars_derive" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn", +] + +[[package]] +name = "security-framework" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" + +[[package]] +name = "socket2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "sysinfo" +version = "0.38.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92ab6a2f8bfe508deb3c6406578252e491d299cbbf3bc0529ecc3313aee4a52f" +dependencies = [ + "libc", + "memchr", + "ntapi", + "objc2-core-foundation", + "objc2-io-kit", + "windows", +] + +[[package]] +name = "tempfile" +version = "3.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom 0.4.2", + "once_cell", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "thiserror" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "tinystr" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +dependencies = [ + "bytes", + "libc", + "mio", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25a406cddcc431a75d3d9afc6a7c0f7428d4891dd973e4d54c56b46127bf857" +dependencies = [ + "futures-util", + "log", + "rustls", + "rustls-native-certs", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tungstenite", +] + +[[package]] +name = "toml" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "toml_write", + "winnow", +] + +[[package]] +name = "toml_write" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" + +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" +dependencies = [ + "bitflags", + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", + "url", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex-automata", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "tungstenite" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442" +dependencies = [ + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand", + "rustls", + "rustls-pki-types", + "sha1", + "thiserror", + "utf-8", +] + +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "uuid" +version = "1.23.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7" +dependencies = [ + "getrandom 0.4.2", + "js-sys", + "serde_core", + "wasm-bindgen", +] + +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.4+wasi-0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +dependencies = [ + "wit-bindgen 0.57.1", +] + +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +dependencies = [ + "wit-bindgen 0.51.0", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.125" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ddb3f79143bced6de84270411622a2699cee572fc0875aeaf1e7867cf9fca1a" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503b14d284f2c8dac03b819967e155ea753f573586193b2b2c95990cb5d69280" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.125" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e21a184b13fb19e157296e2c46056aec9092264fab83e4ba59e68c61b323c3d" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.125" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fecefd9c35bd935a20fc3fc344b5f29138961e4f47fb03297d88f2587afb5ebd" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.125" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23939e44bb9a5d7576fa2b563dc2e136628f1224e88a8deed09e04858b77871f" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap", + "wasm-encoder", + "wasmparser", +] + +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags", + "hashbrown 0.15.5", + "indexmap", + "semver", +] + +[[package]] +name = "web-sys" +version = "0.3.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6430a72df5eb332242960fe84b3002a241163998241eb596d4f739b9757061d" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" +dependencies = [ + "windows-collections", + "windows-core", + "windows-future", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" +dependencies = [ + "windows-core", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-future" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" +dependencies = [ + "windows-core", + "windows-link", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-numerics" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" +dependencies = [ + "windows-core", + "windows-link", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[package]] +name = "windows-threading" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "winnow" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" +dependencies = [ + "memchr", +] + +[[package]] +name = "wit-bindgen" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck", + "indexmap", + "prettyplease", + "syn", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] + +[[package]] +name = "writeable" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" + +[[package]] +name = "yoke" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" + +[[package]] +name = "zerotrie" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/codex/Cargo.toml b/codex/Cargo.toml new file mode 100644 index 00000000..e52ec972 --- /dev/null +++ b/codex/Cargo.toml @@ -0,0 +1,36 @@ +[workspace] + +[package] +name = "codex" +version = "0.1.0" +edition = "2021" +publish = false + +[[bin]] +name = "codex" +path = "src/main.rs" + +[lib] +name = "codex" +path = "src/lib.rs" + +[dependencies] +iii-sdk = "=0.19.1-next.1" +iii-observability = "=0.19.1-next.1" +schemars = { version = "0.8", features = ["uuid1"] } +tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "signal", "process", "time", "io-util"] } +serde = { version = "1", features = ["derive"] } +serde_json = "1" +serde_yaml = "0.9" +toml = "0.8" +anyhow = "1" +thiserror = "2" +tracing = "0.1" +tracing-subscriber = { version = "0.3", features = ["fmt", "env-filter"] } +clap = { version = "4", features = ["derive", "env"] } +uuid = { version = "1", features = ["v4"] } +once_cell = "1" +tempfile = "3" + +[dev-dependencies] +tempfile = "3" diff --git a/codex/README.md b/codex/README.md index f4099699..7b89747d 100644 --- a/codex/README.md +++ b/codex/README.md @@ -86,23 +86,25 @@ Two ids come back from every run. `session_id` is the iii session id: the key fo | `codex::status` | Session state, live flag, usage | | `codex::sessions::list` | All sessions this worker has run | -`codex::run` accepts either a bare `prompt` string or a `messages` array (`[{ role: 'user', content: [{ type: 'text', text }] }]`) — the same input contract as the claude-code worker and `run::start_and_wait`, so the acp worker drives Codex with `--brain-fn codex::run` — plus `model`, `cwd`, `sandbox_mode`, `approval_policy`, `reasoning_effort`, `skip_git_repo_check`, `output_schema`, `images` (local image paths attached to the prompt), and `codex_config` (per-turn `config.toml` overrides: MCP servers, model providers, profiles — anything the CLI accepts as `--config key=value`). +`codex::run` accepts either a bare `prompt` string or a `messages` array (`[{ role: 'user', content: [{ type: 'text', text }] }]`) — the same input contract as the claude-code worker and `run::start_and_wait`, so the acp worker drives Codex with `--brain-fn codex::run` — plus `model`, `cwd`, `sandbox_mode`, `approval_policy`, `reasoning_effort`, `skip_git_repo_check`, `output_schema`, `images` (local image paths), `additional_directories` (extra writable roots), and `codex_config`. ### Raw API pass-through -The named fields cover the common path; everything else the Codex SDK accepts goes through the `options` field untouched (camelCase ThreadOptions, exactly as in the SDK): +The worker drives the `codex exec --json` CLI, so anything the CLI exposes as a `config.toml` override goes through the `codex_config` field untouched — MCP servers, model providers, profiles, network access, web search, and the rest. Each key/value becomes a `--config key=value` on the spawn: ```jsonc { "prompt": "...", - "options": { - "networkAccessEnabled": true, - "webSearchMode": "live", - "additionalDirectories": ["/another/repo"] + "codex_config": { + "sandbox_workspace_write": { "network_access": true }, + "web_search": "live", + "mcp_servers": { "github": { "command": "gh-mcp" } } } } ``` +Extra writable directories use the named `additional_directories` field (the CLI's `--add-dir`). + And the full output side is available raw: every event Codex emits (`thread.started`, `turn.started`, `item.started/updated/completed` for commands, patches, MCP tool calls, web searches, reasoning, agent messages, `turn.completed` with usage, `turn.failed`) is mirrored verbatim onto the `codex::events` stream, group_id = session_id. Consumers that want the exact Codex wire format read `codex::events`; consumers that want harness-shaped frames read `agent::events`. Same turn, two views. ## Configuration diff --git a/codex/biome.json b/codex/biome.json deleted file mode 100644 index 29673813..00000000 --- a/codex/biome.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "$schema": "https://biomejs.dev/schemas/2.4.10/schema.json", - "root": false, - "vcs": { "enabled": false, "clientKind": "git" }, - "files": { - "ignoreUnknown": false, - "includes": ["**", "!!**/dist"] - }, - "formatter": { - "enabled": true, - "indentStyle": "space", - "indentWidth": 2, - "lineWidth": 100 - }, - "assist": { - "enabled": true, - "actions": { - "source": { - "organizeImports": "off" - } - } - }, - "linter": { - "enabled": true, - "rules": { - "recommended": true, - "suspicious": { - "noExplicitAny": "warn" - }, - "style": { - "useImportType": "off", - "useNodejsImportProtocol": "error" - }, - "complexity": { - "noForEach": "off" - } - } - }, - "javascript": { - "formatter": { - "quoteStyle": "single", - "trailingCommas": "all", - "semicolons": "always" - } - } -} diff --git a/codex/build.rs b/codex/build.rs new file mode 100644 index 00000000..33143a5e --- /dev/null +++ b/codex/build.rs @@ -0,0 +1,6 @@ +fn main() { + println!( + "cargo:rustc-env=TARGET={}", + std::env::var("TARGET").unwrap_or_default() + ); +} diff --git a/codex/iii.worker.yaml b/codex/iii.worker.yaml index ef390238..84bf93fd 100644 --- a/codex/iii.worker.yaml +++ b/codex/iii.worker.yaml @@ -1,17 +1,22 @@ iii: v1 name: codex -language: javascript -deploy: bundle -manifest: package.json -description: OpenAI Codex as an iii worker — codex::* functions run headless Codex turns, mirror raw thread events onto codex::events, and stream AgentEvent frames onto agent::events. +language: rust +deploy: binary +manifest: Cargo.toml +bin: codex +description: OpenAI Codex as an iii worker — codex::* run headless Codex turns by spawning the codex CLI, mirror raw thread events onto codex::events, and stream AgentEvent frames onto agent::events. + +targets: + - x86_64-apple-darwin + - aarch64-apple-darwin + - x86_64-unknown-linux-gnu + - x86_64-unknown-linux-musl + - aarch64-unknown-linux-gnu + - armv7-unknown-linux-gnueabihf runtime: - kind: javascript + kind: rust scripts: - install: pnpm install && pnpm run build - start: node dist/index.js - -dependencies: - iii-state: "^0.17.0" - iii-stream: "^0.17.0" + install: cargo build + start: cargo run diff --git a/codex/package.json b/codex/package.json deleted file mode 100644 index 02040132..00000000 --- a/codex/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "codex", - "version": "0.1.0", - "private": true, - "description": "OpenAI Codex as an iii worker: headless turns over the iii bus, raw events on codex::events, AgentEvent frames on agent::events.", - "license": "Apache-2.0", - "type": "module", - "engines": { - "node": ">=22" - }, - "packageManager": "pnpm@10.18.2", - "scripts": { - "build": "tsc -b", - "build:bundle": "node scripts/build-bundle.mjs", - "typecheck": "tsc -b --noEmit", - "lint": "biome check .", - "lint:fix": "biome check --write .", - "test": "vitest run", - "start": "node dist/index.js", - "dev": "tsx src/index.ts" - }, - "bin": { - "codex-worker": "./dist/index.js" - }, - "dependencies": { - "@openai/codex-sdk": "^0.139.0", - "iii-sdk": "^0.19.2", - "yaml": "^2.6.0", - "zod": "^4.0.0" - }, - "devDependencies": { - "@biomejs/biome": "2.4.10", - "@types/node": "^22.10.0", - "esbuild": "^0.25.0", - "tsx": "^4.19.0", - "typescript": "^5.7.0", - "vitest": "^3.0.0" - } -} diff --git a/codex/pnpm-lock.yaml b/codex/pnpm-lock.yaml deleted file mode 100644 index c3e34ccf..00000000 --- a/codex/pnpm-lock.yaml +++ /dev/null @@ -1,2168 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@openai/codex-sdk': - specifier: ^0.139.0 - version: 0.139.0 - iii-sdk: - specifier: ^0.19.2 - version: 0.19.2 - yaml: - specifier: ^2.6.0 - version: 2.9.0 - zod: - specifier: ^4.0.0 - version: 4.4.3 - devDependencies: - '@biomejs/biome': - specifier: 2.4.10 - version: 2.4.10 - '@types/node': - specifier: ^22.10.0 - version: 22.19.21 - esbuild: - specifier: ^0.25.0 - version: 0.25.12 - tsx: - specifier: ^4.19.0 - version: 4.22.4 - typescript: - specifier: ^5.7.0 - version: 5.9.3 - vitest: - specifier: ^3.0.0 - version: 3.2.6(@types/node@22.19.21)(tsx@4.22.4)(yaml@2.9.0) - -packages: - - '@biomejs/biome@2.4.10': - resolution: {integrity: sha512-xxA3AphFQ1geij4JTHXv4EeSTda1IFn22ye9LdyVPoJU19fNVl0uzfEuhsfQ4Yue/0FaLs2/ccVi4UDiE7R30w==} - engines: {node: '>=14.21.3'} - hasBin: true - - '@biomejs/cli-darwin-arm64@2.4.10': - resolution: {integrity: sha512-vuzzI1cWqDVzOMIkYyHbKqp+AkQq4K7k+UCXWpkYcY/HDn1UxdsbsfgtVpa40shem8Kax4TLDLlx8kMAecgqiw==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [darwin] - - '@biomejs/cli-darwin-x64@2.4.10': - resolution: {integrity: sha512-14fzASRo+BPotwp7nWULy2W5xeUyFnTaq1V13Etrrxkrih+ez/2QfgFm5Ehtf5vSjtgx/IJycMMpn5kPd5ZNaA==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [darwin] - - '@biomejs/cli-linux-arm64-musl@2.4.10': - resolution: {integrity: sha512-WrJY6UuiSD/Dh+nwK2qOTu8kdMDlLV3dLMmychIghHPAysWFq1/DGC1pVZx8POE3ZkzKR3PUUnVrtZfMfaJjyQ==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [linux] - - '@biomejs/cli-linux-arm64@2.4.10': - resolution: {integrity: sha512-7MH1CMW5uuxQ/s7FLST63qF8B3Hgu2HRdZ7tA1X1+mk+St4JOuIrqdhIBnnyqeyWJNI+Bww7Es5QZ0wIc1Cmkw==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [linux] - - '@biomejs/cli-linux-x64-musl@2.4.10': - resolution: {integrity: sha512-kDTi3pI6PBN6CiczsWYOyP2zk0IJI08EWEQyDMQWW221rPaaEz6FvjLhnU07KMzLv8q3qSuoB93ua6inSQ55Tw==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [linux] - - '@biomejs/cli-linux-x64@2.4.10': - resolution: {integrity: sha512-tZLvEEi2u9Xu1zAqRjTcpIDGVtldigVvzug2fTuPG0ME/g8/mXpRPcNgLB22bGn6FvLJpHHnqLnwliOu8xjYrg==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [linux] - - '@biomejs/cli-win32-arm64@2.4.10': - resolution: {integrity: sha512-umwQU6qPzH+ISTf/eHyJ/QoQnJs3V9Vpjz2OjZXe9MVBZ7prgGafMy7yYeRGnlmDAn87AKTF3Q6weLoMGpeqdQ==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [win32] - - '@biomejs/cli-win32-x64@2.4.10': - resolution: {integrity: sha512-aW/JU5GuyH4uxMrNYpoC2kjaHlyJGLgIa3XkhPEZI0uKhZhJZU8BuEyJmvgzSPQNGozBwWjC972RaNdcJ9KyJg==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [win32] - - '@esbuild/aix-ppc64@0.25.12': - resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.27.7': - resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.28.0': - resolution: {integrity: sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.25.12': - resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.27.7': - resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.28.0': - resolution: {integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.25.12': - resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.27.7': - resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.28.0': - resolution: {integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.25.12': - resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.27.7': - resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.28.0': - resolution: {integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.25.12': - resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.27.7': - resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.28.0': - resolution: {integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.12': - resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.27.7': - resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.28.0': - resolution: {integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.25.12': - resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.27.7': - resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.28.0': - resolution: {integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.12': - resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.27.7': - resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.28.0': - resolution: {integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.25.12': - resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.27.7': - resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.28.0': - resolution: {integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.25.12': - resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.27.7': - resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.28.0': - resolution: {integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.25.12': - resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.27.7': - resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.28.0': - resolution: {integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.25.12': - resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.27.7': - resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.28.0': - resolution: {integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.25.12': - resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.27.7': - resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.28.0': - resolution: {integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.25.12': - resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.27.7': - resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.28.0': - resolution: {integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.12': - resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.27.7': - resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.28.0': - resolution: {integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.25.12': - resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.27.7': - resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.28.0': - resolution: {integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.25.12': - resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.27.7': - resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.28.0': - resolution: {integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.25.12': - resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-arm64@0.27.7': - resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-arm64@0.28.0': - resolution: {integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.12': - resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.27.7': - resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.28.0': - resolution: {integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.25.12': - resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-arm64@0.27.7': - resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-arm64@0.28.0': - resolution: {integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.12': - resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.27.7': - resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.28.0': - resolution: {integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openharmony-arm64@0.25.12': - resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/openharmony-arm64@0.27.7': - resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/openharmony-arm64@0.28.0': - resolution: {integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/sunos-x64@0.25.12': - resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.27.7': - resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.28.0': - resolution: {integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.25.12': - resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.27.7': - resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.28.0': - resolution: {integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.25.12': - resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.27.7': - resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.28.0': - resolution: {integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.25.12': - resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.27.7': - resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.28.0': - resolution: {integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@iii-dev/observability@0.19.2': - resolution: {integrity: sha512-FsAAzELzRKUA5h8CyLgsB/k0rlN3ZQeg9BVKBsxx8ubF6tNwdLS53bhDFEy9jE7Q5kDgx/AFRVdqB7pUANgChA==} - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - - '@openai/codex-sdk@0.139.0': - resolution: {integrity: sha512-r4lDckaVx4mVZy1v/7ykEhkeWjVfM/4oGJfhG0AP4+zN3Sa+jcf5hdY4EHfJasofBcp0tIF/7JCKHpv534R+tw==} - engines: {node: '>=18'} - - '@openai/codex@0.139.0': - resolution: {integrity: sha512-wr2fRE+fzW0CjEbfFsLh1ftarVEcw0CMLWS7QyA0nyOz5qacQPVq3cq2+/U7oEbwm1TOqoi0Fm1nxniB5FkpmA==} - engines: {node: '>=16'} - hasBin: true - - '@openai/codex@0.139.0-darwin-arm64': - resolution: {integrity: sha512-o+0ZKWwgDFMMLO7rwinzO0PQsgK+Vme1pMN2GeAxsX29ZgGZcyPICfpJbeGSUO1mb2a36Skjx6nfdRnxMY0r7w==} - engines: {node: '>=16'} - cpu: [arm64] - os: [darwin] - - '@openai/codex@0.139.0-darwin-x64': - resolution: {integrity: sha512-9gkBWzu6DB2rqU4DbpxD3DE5bofGpsK46Lp0h0I+bKWc2IIcxvSi8K2utKmBLoJCbKrn4JQu7dFNGRqEfENung==} - engines: {node: '>=16'} - cpu: [x64] - os: [darwin] - - '@openai/codex@0.139.0-linux-arm64': - resolution: {integrity: sha512-tBQE5lZciRHeWZGuURgjP9S717MvTIpQMc593+DNxY2LQxozkngOkzFSQd1+/UmQKGrCqdFLu5irIwPXpSZyEw==} - engines: {node: '>=16'} - cpu: [arm64] - os: [linux] - - '@openai/codex@0.139.0-linux-x64': - resolution: {integrity: sha512-14UgzDS+X4crkvdt6S02A/ZZOrS8ZyWiuTRpguCtnhNamb7unSuDxy86BWgpAl3sqiTaN2CP8VLyp2ohQ8Nbzw==} - engines: {node: '>=16'} - cpu: [x64] - os: [linux] - - '@openai/codex@0.139.0-win32-arm64': - resolution: {integrity: sha512-nlwRjsYotH1Rtqu/Q0VwQbIeO2UX1mkHK84Ov9qn/hl29QqqoBtno0tRyqIPbkXFIVQuWiAYXlV3ugLwH5fTrQ==} - engines: {node: '>=16'} - cpu: [arm64] - os: [win32] - - '@openai/codex@0.139.0-win32-x64': - resolution: {integrity: sha512-lQrVLNz+90wdvWVNFDvCkHQRiAK9ZllmkTka3c8eqSDqdJk35Gpgppfv9Xtw5M2ZBtTq0sBdWBiCMyzGDBSpmQ==} - engines: {node: '>=16'} - cpu: [x64] - os: [win32] - - '@opentelemetry/api-logs@0.57.2': - resolution: {integrity: sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==} - engines: {node: '>=14'} - - '@opentelemetry/api@1.9.1': - resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==} - engines: {node: '>=8.0.0'} - - '@opentelemetry/context-async-hooks@1.30.1': - resolution: {integrity: sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/core@1.30.1': - resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/instrumentation@0.57.2': - resolution: {integrity: sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/otlp-transformer@0.57.2': - resolution: {integrity: sha512-48IIRj49gbQVK52jYsw70+Jv+JbahT8BqT2Th7C4H7RCM9d0gZ5sgNPoMpWldmfjvIsSgiGJtjfk9MeZvjhoig==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/propagator-b3@1.30.1': - resolution: {integrity: sha512-oATwWWDIJzybAZ4pO76ATN5N6FFbOA1otibAVlS8v90B4S1wClnhRUk7K+2CHAwN1JKYuj4jh/lpCEG5BAqFuQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/propagator-jaeger@1.30.1': - resolution: {integrity: sha512-Pj/BfnYEKIOImirH76M4hDaBSx6HyZ2CXUqk+Kj02m6BB80c/yo4BdWkn/1gDFfU+YPY+bPR2U0DKBfdxCKwmg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/resources@1.30.1': - resolution: {integrity: sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/sdk-logs@0.57.2': - resolution: {integrity: sha512-TXFHJ5c+BKggWbdEQ/inpgIzEmS2BGQowLE9UhsMd7YYlUfBQJ4uax0VF/B5NYigdM/75OoJGhAV3upEhK+3gg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.4.0 <1.10.0' - - '@opentelemetry/sdk-metrics@1.30.1': - resolution: {integrity: sha512-q9zcZ0Okl8jRgmy7eNW3Ku1XSgg3sDLa5evHZpCwjspw7E8Is4K/haRPDJrBcX3YSn/Y7gUvFnByNYEKQNbNog==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.10.0' - - '@opentelemetry/sdk-trace-base@1.30.1': - resolution: {integrity: sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/sdk-trace-node@1.30.1': - resolution: {integrity: sha512-cBjYOINt1JxXdpw1e5MlHmFRc5fgj4GW/86vsKFxJCJ8AL4PdVtYH41gWwl4qd4uQjqEL1oJVrXkSy5cnduAnQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/semantic-conventions@1.28.0': - resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} - engines: {node: '>=14'} - - '@opentelemetry/semantic-conventions@1.41.1': - resolution: {integrity: sha512-/UhIkaZgPutTFmQ7RnIJGgDXZmtEJ7Dvi86xNTFWcnRxVRNk/aotsqDJYeEvDP+FSMB2SdW+pQzNMcWP0rwuNA==} - engines: {node: '>=14'} - - '@protobufjs/aspromise@1.1.2': - resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} - - '@protobufjs/base64@1.1.2': - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - - '@protobufjs/codegen@2.0.5': - resolution: {integrity: sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==} - - '@protobufjs/eventemitter@1.1.1': - resolution: {integrity: sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==} - - '@protobufjs/fetch@1.1.1': - resolution: {integrity: sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==} - - '@protobufjs/float@1.0.2': - resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - - '@protobufjs/inquire@1.1.2': - resolution: {integrity: sha512-pa0vFRuws4wkvaXKK1uXZMAwAX4/t8ANaJo45iw/oQHNQ9q5xUzwgFmVJGXiga2BeN+zpX7Vf9vmsiIa2J+MUw==} - - '@protobufjs/path@1.1.2': - resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} - - '@protobufjs/pool@1.1.0': - resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} - - '@protobufjs/utf8@1.1.1': - resolution: {integrity: sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==} - - '@rollup/rollup-android-arm-eabi@4.61.1': - resolution: {integrity: sha512-JnBB8MdXj45cajvTuO5FmPlvFVJRQgvrz1uSEl3NwqFnReAPGwb8EanbGi4z2nRaqLzjJSv5/JmycoTKlRZxHA==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.61.1': - resolution: {integrity: sha512-Jx2g7iSjw4AOT0HDPHM9RV3GNjRXwybWtSFZiZAYUTjUwjVrYIwq3kBf+LnhqJlzXFAqTAh2F7IGI+O568exPw==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.61.1': - resolution: {integrity: sha512-0F1L/Z3Eqv8mT2n3dCpeO8GcTvHvVqkP5/t6DMsn0KzhYVcg+s7Ncl5DS8qjKYEeio6Az0Gt6nyBORay5qIlCA==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.61.1': - resolution: {integrity: sha512-qLttcH871ujY4YcVfUSShhOw+CsoTatYz8gRbHO7Bb92QH059/P0y5do1KMs41fY0BpD2x4AJH/gID0zFiqVKQ==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.61.1': - resolution: {integrity: sha512-fUI4RapGE0Oh3mb8mgfvC1O2nU1RpDZUKnDQm3xB1Ipg7C2wTs5Kstz7G2uWK99a8S2yTMq8/P4uycwNa0nJyw==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.61.1': - resolution: {integrity: sha512-H5YrdvJaDtI/U9/emrD4b++xkvp3y/JvOe4rizHbxvkyMfRS/CiRYdji+Pl8D0brEaNFWUh1drQxgAGIl6Xudw==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.61.1': - resolution: {integrity: sha512-Q8CBCCQtDFrYtXoeUXSrnFXKOnyUhx6bz+SkL6A0E7V8kAiCJ5pamq1WtbfpVGhR5TSpXY6ak3avmDc5fHTyJA==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.61.1': - resolution: {integrity: sha512-nwnhk1581l0FBVellGcVCAT0Oi06onEA3WB53sf01VO3I0UPBkMH9sXONYME2K0ovXcNayJfNtHfm6mpJElatQ==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.61.1': - resolution: {integrity: sha512-x5Xr49hwt3hdW75UOZm3395YwwzPyauktslv29KpWL/T+vVAzoT3azLcTWv0eMciBNrx+DYjH4paehHoLpPvpg==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.61.1': - resolution: {integrity: sha512-unMS3H73DpaoPyyEVPjGKleM/s0mkmsauTENpw4INQY8y4+IuLNjkueQ5QCtC0D3N38Y38yhAU8OoZ20S2Tm6w==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-loong64-gnu@4.61.1': - resolution: {integrity: sha512-zNZzGRnAhwjFEYmvphJRV5XaQGjs62cCmeYYHUT//NbvEnHauw+I85nGG+SiVg5ld4GX8D1IbKIX+ozITQnhMQ==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-loong64-musl@4.61.1': - resolution: {integrity: sha512-LdpWGL8X209B2SIvWjqlc8VZgM6PKfontSerGepuldQmHYrAOtnMCXeJkxXGbC+PPZVOuu5czJo7fNV6aeW8rQ==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-ppc64-gnu@4.61.1': - resolution: {integrity: sha512-EC5kTtNaNGOmbMGqar8dvJy6y/hg99GAwjfBz++pxZhQATXGcRjd6c5en5wcbru0vkRmiMGsQKdMJOOf6sza4g==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-ppc64-musl@4.61.1': - resolution: {integrity: sha512-8hiwp6D4acEcNK78I4rP0/XtS1sknWIAMJBPdR4l6zUtyTm5KiTDr5bXmWt4foY7nAN7AThDHgkLIEZOWKbzWw==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.61.1': - resolution: {integrity: sha512-10dh/h/BqA7DuMPWSxkR8uks18FRwnwOEqr5zOTEl+NOwP/OMzKX8OFR/Of9xxDA7D5qef1Nzar5WDD2kCCr1g==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-riscv64-musl@4.61.1': - resolution: {integrity: sha512-YKJ5lg35DP17gcAOggnihe+APw9HLyj1Xn7gsmGumBJAUDa6NGXNixJzmkWLhcK9TOuuyQjdamzvJefkO7qHZQ==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.61.1': - resolution: {integrity: sha512-Mlil5G2Jj6a7B3LWGctg+XPL9vdXYuzCtNXfxOQ0nPjc2m6ueUktocPGH9bnAM0bNRKb/bAWTujUU7IJQdQA+g==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.61.1': - resolution: {integrity: sha512-bVWIOIk6pV01p4CdUbPP7CJ/434z+OooYjDuFcR+44N35YvKUC66G8MGnvcWx5mWKW3g61J+t74l3Kj15Kwn2Q==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.61.1': - resolution: {integrity: sha512-qy5pBvZbqNFheBz61R1rzsezjm0J7O2oNGoWtGoY89SZYLUfxAJTBAqDChqAIdB4rCiIbi9nF7yZ83GnNiLwSw==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-openbsd-x64@4.61.1': - resolution: {integrity: sha512-E83TXjI4zm0+5f2qO+UOudaCYIhYwpJ5jq6YCZNIZ+6CbfhKrkAGezeiASBL9ElxAxFsRS9ZhESv8mfnj6TKeg==} - cpu: [x64] - os: [openbsd] - - '@rollup/rollup-openharmony-arm64@4.61.1': - resolution: {integrity: sha512-fbWnKqVkjrJN38vNe3ahkbk6iejS/3b0Nt7EEtPpE6RBacZcGXNKbzfHN3GUUlXOPghUg0j6XUGrtjX9z1sIvA==} - cpu: [arm64] - os: [openharmony] - - '@rollup/rollup-win32-arm64-msvc@4.61.1': - resolution: {integrity: sha512-ArMl38iVAbk0New1ogihQNY6iphLi4ZaRsa037gUzv5yeKPY8TD3Dmy4x2RNC1VztU/uqm+G+/RwFrSka3Oy2g==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.61.1': - resolution: {integrity: sha512-0mYtjHS9ucAbcATycCNK9IGBk/cCe/ma7EmSLGZdsxnOA8cjRIyU04wDpVAD9NiOfLUR9KTxdiO53uOkherqjQ==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-gnu@4.61.1': - resolution: {integrity: sha512-gK1iCEPfpoSG9wfBihXxvBMi8ZfcWffYkEsC/Eih+iFENTaewvNcrEQ69lIOWYO5pePHKLHHO7nq5AILGO/HQQ==} - cpu: [x64] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.61.1': - resolution: {integrity: sha512-X+zaP2x+j4RXGfbp/seSoRHWnPxzApilDszisZxbYH5C/jTxFhCtDNdPGZb9lJyYPs24wGxruPF7Y+sIXt9Gzw==} - cpu: [x64] - os: [win32] - - '@types/chai@5.2.3': - resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} - - '@types/deep-eql@4.0.2': - resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - - '@types/estree@1.0.9': - resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} - - '@types/node@22.19.21': - resolution: {integrity: sha512-VMeFBSCKQKmm2swI2kW51SFusDqekC6q9trBCvJ/JliDchFSuoYYKN7yVNjPthP1HKZcx3U1gI/wTcEBjEFKTA==} - - '@types/shimmer@1.2.0': - resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==} - - '@vitest/expect@3.2.6': - resolution: {integrity: sha512-1+7q9BtaKzEmO+fmNT3kYvoNn5Y71XWAx2Q5HRim4tTVRQVRv4uJFAQ5FbK0OPUeNP/WmVCpxYxoJdvuHVjzBQ==} - - '@vitest/mocker@3.2.6': - resolution: {integrity: sha512-EZOrpDbkKotFAP7wPAQV1UIyoGOk4oX7ynWhBhLB7v+meMHbQhU16oPpIYGTTe4oFlhpryGpgpcZP/sin3hYuw==} - peerDependencies: - msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - - '@vitest/pretty-format@3.2.6': - resolution: {integrity: sha512-lb7XXXzmm2h2ASzFnRvQpDo6onT1NmMJA3tkGTWiBFtRJ9lxGY3d3mm/Apt36gej2bkkOVLL/yTOtufDaFa/jA==} - - '@vitest/runner@3.2.6': - resolution: {integrity: sha512-HYcoSj1w5tcgUnzoF0HcyaAQjpA1gj9ftUJ7iSJSuipc02jW9gKkigwZbjFldAfYHA1fa8UZVRftdMY5msWM9Q==} - - '@vitest/snapshot@3.2.6': - resolution: {integrity: sha512-H+ZjNTWGpObenh0YnlBctAPnJSI20P81PL8BPzWpx54YXLLTm8hEsWawtcYLMrwvpK48hGxLLbCS+1KRXhsKhw==} - - '@vitest/spy@3.2.6': - resolution: {integrity: sha512-oq6BbH68WzcWmwtBrU9nqLeaXTR4XwJF7FSLkKEZo4i6eoXcrxjcwSuTvWBIRUTC6VC72nXYunzqgZA+IKdtxg==} - - '@vitest/utils@3.2.6': - resolution: {integrity: sha512-lI23nIs4bnT3T8NIoh+vFaz5s2/DdP0Jgt2jxwgWljvwn82cLJtyi/If+fjFyoLMGIOz0U/fKvWE0d4jsNQEfg==} - - acorn-import-attributes@1.9.5: - resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} - peerDependencies: - acorn: ^8 - - acorn@8.16.0: - resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} - engines: {node: '>=0.4.0'} - hasBin: true - - assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} - - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - - chai@5.3.3: - resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} - engines: {node: '>=18'} - - check-error@2.1.3: - resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} - engines: {node: '>= 16'} - - cjs-module-lexer@1.4.3: - resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} - - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - - esbuild@0.25.12: - resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} - engines: {node: '>=18'} - hasBin: true - - esbuild@0.27.7: - resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} - engines: {node: '>=18'} - hasBin: true - - esbuild@0.28.0: - resolution: {integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==} - engines: {node: '>=18'} - hasBin: true - - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - - expect-type@1.3.0: - resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} - engines: {node: '>=12.0.0'} - - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - hasown@2.0.4: - resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} - engines: {node: '>= 0.4'} - - iii-sdk@0.19.2: - resolution: {integrity: sha512-HgMKHxmrOZNxNvJGwMvLsQ7UoifIpv1Av46gCs4vbBjSWDRQiM/wCNsTlZ/QUdSiZOXs6FjIxSLf3kuL1H3bLw==} - - import-in-the-middle@1.15.0: - resolution: {integrity: sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==} - - is-core-module@2.16.2: - resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} - engines: {node: '>= 0.4'} - - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - - long@5.3.2: - resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} - - loupe@3.2.1: - resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} - - magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - - module-details-from-path@1.0.4: - resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - nanoid@3.3.12: - resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - - pathval@2.0.1: - resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} - engines: {node: '>= 14.16'} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@4.0.4: - resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} - engines: {node: '>=12'} - - postcss@8.5.15: - resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} - engines: {node: ^10 || ^12 || >=14} - - protobufjs@7.6.3: - resolution: {integrity: sha512-+k0vdJKNdW+Vu+dYe8tZA/VvQb6XKNWexC6URwBFXxNnjLJz9nQJCemGyNgRAWD+B7+nGNc9qMPGwcD7s4nzUw==} - engines: {node: '>=12.0.0'} - - require-in-the-middle@7.5.2: - resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==} - engines: {node: '>=8.6.0'} - - resolve@1.22.12: - resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} - engines: {node: '>= 0.4'} - hasBin: true - - rollup@4.61.1: - resolution: {integrity: sha512-I4KW6iuRpuu2uHBLraZ1wNZe0DP7lnRha+VJ9tNaYVaVgKhW0aI3h4RYnoRPeql0flHm/Co55b7snEDcOfOJrA==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - semver@7.8.4: - resolution: {integrity: sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==} - engines: {node: '>=10'} - hasBin: true - - shimmer@1.2.1: - resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} - - siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - - std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} - - strip-literal@3.1.0: - resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - tinybench@2.9.0: - resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - - tinyglobby@0.2.17: - resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} - engines: {node: '>=12.0.0'} - - tinypool@1.1.1: - resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} - engines: {node: ^18.0.0 || >=20.0.0} - - tinyrainbow@2.0.0: - resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} - engines: {node: '>=14.0.0'} - - tinyspy@4.0.4: - resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} - engines: {node: '>=14.0.0'} - - tsx@4.22.4: - resolution: {integrity: sha512-X8EX+XV4QR5xCsrgxaED954zTDfY8KqlDtskKEL0cHhyS/P8b4IFOvGDQpsC9Q1XnLq915wEfwwY/zzskCtmhg==} - engines: {node: '>=18.0.0'} - hasBin: true - - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} - engines: {node: '>=14.17'} - hasBin: true - - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - - vite-node@3.2.4: - resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - - vite@7.3.5: - resolution: {integrity: sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - - vitest@3.2.6: - resolution: {integrity: sha512-xejya+bT/j/+R/AGa1XOfRxLmNUlLtlwjRsFUILF+xHfzElmGcmFydy2gqqIrd62ptIEfwVMofd19uNWD9L7Nw==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.2.6 - '@vitest/ui': 3.2.6 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@types/debug': - optional: true - '@types/node': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - - why-is-node-running@2.3.0: - resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} - engines: {node: '>=8'} - hasBin: true - - ws@8.21.0: - resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - yaml@2.9.0: - resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} - engines: {node: '>= 14.6'} - hasBin: true - - zod@4.4.3: - resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} - -snapshots: - - '@biomejs/biome@2.4.10': - optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.4.10 - '@biomejs/cli-darwin-x64': 2.4.10 - '@biomejs/cli-linux-arm64': 2.4.10 - '@biomejs/cli-linux-arm64-musl': 2.4.10 - '@biomejs/cli-linux-x64': 2.4.10 - '@biomejs/cli-linux-x64-musl': 2.4.10 - '@biomejs/cli-win32-arm64': 2.4.10 - '@biomejs/cli-win32-x64': 2.4.10 - - '@biomejs/cli-darwin-arm64@2.4.10': - optional: true - - '@biomejs/cli-darwin-x64@2.4.10': - optional: true - - '@biomejs/cli-linux-arm64-musl@2.4.10': - optional: true - - '@biomejs/cli-linux-arm64@2.4.10': - optional: true - - '@biomejs/cli-linux-x64-musl@2.4.10': - optional: true - - '@biomejs/cli-linux-x64@2.4.10': - optional: true - - '@biomejs/cli-win32-arm64@2.4.10': - optional: true - - '@biomejs/cli-win32-x64@2.4.10': - optional: true - - '@esbuild/aix-ppc64@0.25.12': - optional: true - - '@esbuild/aix-ppc64@0.27.7': - optional: true - - '@esbuild/aix-ppc64@0.28.0': - optional: true - - '@esbuild/android-arm64@0.25.12': - optional: true - - '@esbuild/android-arm64@0.27.7': - optional: true - - '@esbuild/android-arm64@0.28.0': - optional: true - - '@esbuild/android-arm@0.25.12': - optional: true - - '@esbuild/android-arm@0.27.7': - optional: true - - '@esbuild/android-arm@0.28.0': - optional: true - - '@esbuild/android-x64@0.25.12': - optional: true - - '@esbuild/android-x64@0.27.7': - optional: true - - '@esbuild/android-x64@0.28.0': - optional: true - - '@esbuild/darwin-arm64@0.25.12': - optional: true - - '@esbuild/darwin-arm64@0.27.7': - optional: true - - '@esbuild/darwin-arm64@0.28.0': - optional: true - - '@esbuild/darwin-x64@0.25.12': - optional: true - - '@esbuild/darwin-x64@0.27.7': - optional: true - - '@esbuild/darwin-x64@0.28.0': - optional: true - - '@esbuild/freebsd-arm64@0.25.12': - optional: true - - '@esbuild/freebsd-arm64@0.27.7': - optional: true - - '@esbuild/freebsd-arm64@0.28.0': - optional: true - - '@esbuild/freebsd-x64@0.25.12': - optional: true - - '@esbuild/freebsd-x64@0.27.7': - optional: true - - '@esbuild/freebsd-x64@0.28.0': - optional: true - - '@esbuild/linux-arm64@0.25.12': - optional: true - - '@esbuild/linux-arm64@0.27.7': - optional: true - - '@esbuild/linux-arm64@0.28.0': - optional: true - - '@esbuild/linux-arm@0.25.12': - optional: true - - '@esbuild/linux-arm@0.27.7': - optional: true - - '@esbuild/linux-arm@0.28.0': - optional: true - - '@esbuild/linux-ia32@0.25.12': - optional: true - - '@esbuild/linux-ia32@0.27.7': - optional: true - - '@esbuild/linux-ia32@0.28.0': - optional: true - - '@esbuild/linux-loong64@0.25.12': - optional: true - - '@esbuild/linux-loong64@0.27.7': - optional: true - - '@esbuild/linux-loong64@0.28.0': - optional: true - - '@esbuild/linux-mips64el@0.25.12': - optional: true - - '@esbuild/linux-mips64el@0.27.7': - optional: true - - '@esbuild/linux-mips64el@0.28.0': - optional: true - - '@esbuild/linux-ppc64@0.25.12': - optional: true - - '@esbuild/linux-ppc64@0.27.7': - optional: true - - '@esbuild/linux-ppc64@0.28.0': - optional: true - - '@esbuild/linux-riscv64@0.25.12': - optional: true - - '@esbuild/linux-riscv64@0.27.7': - optional: true - - '@esbuild/linux-riscv64@0.28.0': - optional: true - - '@esbuild/linux-s390x@0.25.12': - optional: true - - '@esbuild/linux-s390x@0.27.7': - optional: true - - '@esbuild/linux-s390x@0.28.0': - optional: true - - '@esbuild/linux-x64@0.25.12': - optional: true - - '@esbuild/linux-x64@0.27.7': - optional: true - - '@esbuild/linux-x64@0.28.0': - optional: true - - '@esbuild/netbsd-arm64@0.25.12': - optional: true - - '@esbuild/netbsd-arm64@0.27.7': - optional: true - - '@esbuild/netbsd-arm64@0.28.0': - optional: true - - '@esbuild/netbsd-x64@0.25.12': - optional: true - - '@esbuild/netbsd-x64@0.27.7': - optional: true - - '@esbuild/netbsd-x64@0.28.0': - optional: true - - '@esbuild/openbsd-arm64@0.25.12': - optional: true - - '@esbuild/openbsd-arm64@0.27.7': - optional: true - - '@esbuild/openbsd-arm64@0.28.0': - optional: true - - '@esbuild/openbsd-x64@0.25.12': - optional: true - - '@esbuild/openbsd-x64@0.27.7': - optional: true - - '@esbuild/openbsd-x64@0.28.0': - optional: true - - '@esbuild/openharmony-arm64@0.25.12': - optional: true - - '@esbuild/openharmony-arm64@0.27.7': - optional: true - - '@esbuild/openharmony-arm64@0.28.0': - optional: true - - '@esbuild/sunos-x64@0.25.12': - optional: true - - '@esbuild/sunos-x64@0.27.7': - optional: true - - '@esbuild/sunos-x64@0.28.0': - optional: true - - '@esbuild/win32-arm64@0.25.12': - optional: true - - '@esbuild/win32-arm64@0.27.7': - optional: true - - '@esbuild/win32-arm64@0.28.0': - optional: true - - '@esbuild/win32-ia32@0.25.12': - optional: true - - '@esbuild/win32-ia32@0.27.7': - optional: true - - '@esbuild/win32-ia32@0.28.0': - optional: true - - '@esbuild/win32-x64@0.25.12': - optional: true - - '@esbuild/win32-x64@0.27.7': - optional: true - - '@esbuild/win32-x64@0.28.0': - optional: true - - '@iii-dev/observability@0.19.2': - dependencies: - '@opentelemetry/api': 1.9.1 - '@opentelemetry/api-logs': 0.57.2 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) - '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.1) - '@opentelemetry/otlp-transformer': 0.57.2(@opentelemetry/api@1.9.1) - '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-logs': 0.57.2(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-metrics': 1.30.1(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-trace-node': 1.30.1(@opentelemetry/api@1.9.1) - '@opentelemetry/semantic-conventions': 1.41.1 - ws: 8.21.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - '@jridgewell/sourcemap-codec@1.5.5': {} - - '@openai/codex-sdk@0.139.0': - dependencies: - '@openai/codex': 0.139.0 - - '@openai/codex@0.139.0': - optionalDependencies: - '@openai/codex-darwin-arm64': '@openai/codex@0.139.0-darwin-arm64' - '@openai/codex-darwin-x64': '@openai/codex@0.139.0-darwin-x64' - '@openai/codex-linux-arm64': '@openai/codex@0.139.0-linux-arm64' - '@openai/codex-linux-x64': '@openai/codex@0.139.0-linux-x64' - '@openai/codex-win32-arm64': '@openai/codex@0.139.0-win32-arm64' - '@openai/codex-win32-x64': '@openai/codex@0.139.0-win32-x64' - - '@openai/codex@0.139.0-darwin-arm64': - optional: true - - '@openai/codex@0.139.0-darwin-x64': - optional: true - - '@openai/codex@0.139.0-linux-arm64': - optional: true - - '@openai/codex@0.139.0-linux-x64': - optional: true - - '@openai/codex@0.139.0-win32-arm64': - optional: true - - '@openai/codex@0.139.0-win32-x64': - optional: true - - '@opentelemetry/api-logs@0.57.2': - dependencies: - '@opentelemetry/api': 1.9.1 - - '@opentelemetry/api@1.9.1': {} - - '@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.1)': - dependencies: - '@opentelemetry/api': 1.9.1 - - '@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.1)': - dependencies: - '@opentelemetry/api': 1.9.1 - '@opentelemetry/semantic-conventions': 1.28.0 - - '@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.1)': - dependencies: - '@opentelemetry/api': 1.9.1 - '@opentelemetry/api-logs': 0.57.2 - '@types/shimmer': 1.2.0 - import-in-the-middle: 1.15.0 - require-in-the-middle: 7.5.2 - semver: 7.8.4 - shimmer: 1.2.1 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/otlp-transformer@0.57.2(@opentelemetry/api@1.9.1)': - dependencies: - '@opentelemetry/api': 1.9.1 - '@opentelemetry/api-logs': 0.57.2 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) - '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-logs': 0.57.2(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-metrics': 1.30.1(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.1) - protobufjs: 7.6.3 - - '@opentelemetry/propagator-b3@1.30.1(@opentelemetry/api@1.9.1)': - dependencies: - '@opentelemetry/api': 1.9.1 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) - - '@opentelemetry/propagator-jaeger@1.30.1(@opentelemetry/api@1.9.1)': - dependencies: - '@opentelemetry/api': 1.9.1 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) - - '@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.1)': - dependencies: - '@opentelemetry/api': 1.9.1 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) - '@opentelemetry/semantic-conventions': 1.28.0 - - '@opentelemetry/sdk-logs@0.57.2(@opentelemetry/api@1.9.1)': - dependencies: - '@opentelemetry/api': 1.9.1 - '@opentelemetry/api-logs': 0.57.2 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) - '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.1) - - '@opentelemetry/sdk-metrics@1.30.1(@opentelemetry/api@1.9.1)': - dependencies: - '@opentelemetry/api': 1.9.1 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) - '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.1) - - '@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.1)': - dependencies: - '@opentelemetry/api': 1.9.1 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) - '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.1) - '@opentelemetry/semantic-conventions': 1.28.0 - - '@opentelemetry/sdk-trace-node@1.30.1(@opentelemetry/api@1.9.1)': - dependencies: - '@opentelemetry/api': 1.9.1 - '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.1) - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) - '@opentelemetry/propagator-b3': 1.30.1(@opentelemetry/api@1.9.1) - '@opentelemetry/propagator-jaeger': 1.30.1(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.1) - semver: 7.8.4 - - '@opentelemetry/semantic-conventions@1.28.0': {} - - '@opentelemetry/semantic-conventions@1.41.1': {} - - '@protobufjs/aspromise@1.1.2': {} - - '@protobufjs/base64@1.1.2': {} - - '@protobufjs/codegen@2.0.5': {} - - '@protobufjs/eventemitter@1.1.1': {} - - '@protobufjs/fetch@1.1.1': - dependencies: - '@protobufjs/aspromise': 1.1.2 - - '@protobufjs/float@1.0.2': {} - - '@protobufjs/inquire@1.1.2': {} - - '@protobufjs/path@1.1.2': {} - - '@protobufjs/pool@1.1.0': {} - - '@protobufjs/utf8@1.1.1': {} - - '@rollup/rollup-android-arm-eabi@4.61.1': - optional: true - - '@rollup/rollup-android-arm64@4.61.1': - optional: true - - '@rollup/rollup-darwin-arm64@4.61.1': - optional: true - - '@rollup/rollup-darwin-x64@4.61.1': - optional: true - - '@rollup/rollup-freebsd-arm64@4.61.1': - optional: true - - '@rollup/rollup-freebsd-x64@4.61.1': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.61.1': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.61.1': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.61.1': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.61.1': - optional: true - - '@rollup/rollup-linux-loong64-gnu@4.61.1': - optional: true - - '@rollup/rollup-linux-loong64-musl@4.61.1': - optional: true - - '@rollup/rollup-linux-ppc64-gnu@4.61.1': - optional: true - - '@rollup/rollup-linux-ppc64-musl@4.61.1': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.61.1': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.61.1': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.61.1': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.61.1': - optional: true - - '@rollup/rollup-linux-x64-musl@4.61.1': - optional: true - - '@rollup/rollup-openbsd-x64@4.61.1': - optional: true - - '@rollup/rollup-openharmony-arm64@4.61.1': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.61.1': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.61.1': - optional: true - - '@rollup/rollup-win32-x64-gnu@4.61.1': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.61.1': - optional: true - - '@types/chai@5.2.3': - dependencies: - '@types/deep-eql': 4.0.2 - assertion-error: 2.0.1 - - '@types/deep-eql@4.0.2': {} - - '@types/estree@1.0.9': {} - - '@types/node@22.19.21': - dependencies: - undici-types: 6.21.0 - - '@types/shimmer@1.2.0': {} - - '@vitest/expect@3.2.6': - dependencies: - '@types/chai': 5.2.3 - '@vitest/spy': 3.2.6 - '@vitest/utils': 3.2.6 - chai: 5.3.3 - tinyrainbow: 2.0.0 - - '@vitest/mocker@3.2.6(vite@7.3.5(@types/node@22.19.21)(tsx@4.22.4)(yaml@2.9.0))': - dependencies: - '@vitest/spy': 3.2.6 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - vite: 7.3.5(@types/node@22.19.21)(tsx@4.22.4)(yaml@2.9.0) - - '@vitest/pretty-format@3.2.6': - dependencies: - tinyrainbow: 2.0.0 - - '@vitest/runner@3.2.6': - dependencies: - '@vitest/utils': 3.2.6 - pathe: 2.0.3 - strip-literal: 3.1.0 - - '@vitest/snapshot@3.2.6': - dependencies: - '@vitest/pretty-format': 3.2.6 - magic-string: 0.30.21 - pathe: 2.0.3 - - '@vitest/spy@3.2.6': - dependencies: - tinyspy: 4.0.4 - - '@vitest/utils@3.2.6': - dependencies: - '@vitest/pretty-format': 3.2.6 - loupe: 3.2.1 - tinyrainbow: 2.0.0 - - acorn-import-attributes@1.9.5(acorn@8.16.0): - dependencies: - acorn: 8.16.0 - - acorn@8.16.0: {} - - assertion-error@2.0.1: {} - - cac@6.7.14: {} - - chai@5.3.3: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.3 - deep-eql: 5.0.2 - loupe: 3.2.1 - pathval: 2.0.1 - - check-error@2.1.3: {} - - cjs-module-lexer@1.4.3: {} - - debug@4.4.3: - dependencies: - ms: 2.1.3 - - deep-eql@5.0.2: {} - - es-errors@1.3.0: {} - - es-module-lexer@1.7.0: {} - - esbuild@0.25.12: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.12 - '@esbuild/android-arm': 0.25.12 - '@esbuild/android-arm64': 0.25.12 - '@esbuild/android-x64': 0.25.12 - '@esbuild/darwin-arm64': 0.25.12 - '@esbuild/darwin-x64': 0.25.12 - '@esbuild/freebsd-arm64': 0.25.12 - '@esbuild/freebsd-x64': 0.25.12 - '@esbuild/linux-arm': 0.25.12 - '@esbuild/linux-arm64': 0.25.12 - '@esbuild/linux-ia32': 0.25.12 - '@esbuild/linux-loong64': 0.25.12 - '@esbuild/linux-mips64el': 0.25.12 - '@esbuild/linux-ppc64': 0.25.12 - '@esbuild/linux-riscv64': 0.25.12 - '@esbuild/linux-s390x': 0.25.12 - '@esbuild/linux-x64': 0.25.12 - '@esbuild/netbsd-arm64': 0.25.12 - '@esbuild/netbsd-x64': 0.25.12 - '@esbuild/openbsd-arm64': 0.25.12 - '@esbuild/openbsd-x64': 0.25.12 - '@esbuild/openharmony-arm64': 0.25.12 - '@esbuild/sunos-x64': 0.25.12 - '@esbuild/win32-arm64': 0.25.12 - '@esbuild/win32-ia32': 0.25.12 - '@esbuild/win32-x64': 0.25.12 - - esbuild@0.27.7: - optionalDependencies: - '@esbuild/aix-ppc64': 0.27.7 - '@esbuild/android-arm': 0.27.7 - '@esbuild/android-arm64': 0.27.7 - '@esbuild/android-x64': 0.27.7 - '@esbuild/darwin-arm64': 0.27.7 - '@esbuild/darwin-x64': 0.27.7 - '@esbuild/freebsd-arm64': 0.27.7 - '@esbuild/freebsd-x64': 0.27.7 - '@esbuild/linux-arm': 0.27.7 - '@esbuild/linux-arm64': 0.27.7 - '@esbuild/linux-ia32': 0.27.7 - '@esbuild/linux-loong64': 0.27.7 - '@esbuild/linux-mips64el': 0.27.7 - '@esbuild/linux-ppc64': 0.27.7 - '@esbuild/linux-riscv64': 0.27.7 - '@esbuild/linux-s390x': 0.27.7 - '@esbuild/linux-x64': 0.27.7 - '@esbuild/netbsd-arm64': 0.27.7 - '@esbuild/netbsd-x64': 0.27.7 - '@esbuild/openbsd-arm64': 0.27.7 - '@esbuild/openbsd-x64': 0.27.7 - '@esbuild/openharmony-arm64': 0.27.7 - '@esbuild/sunos-x64': 0.27.7 - '@esbuild/win32-arm64': 0.27.7 - '@esbuild/win32-ia32': 0.27.7 - '@esbuild/win32-x64': 0.27.7 - - esbuild@0.28.0: - optionalDependencies: - '@esbuild/aix-ppc64': 0.28.0 - '@esbuild/android-arm': 0.28.0 - '@esbuild/android-arm64': 0.28.0 - '@esbuild/android-x64': 0.28.0 - '@esbuild/darwin-arm64': 0.28.0 - '@esbuild/darwin-x64': 0.28.0 - '@esbuild/freebsd-arm64': 0.28.0 - '@esbuild/freebsd-x64': 0.28.0 - '@esbuild/linux-arm': 0.28.0 - '@esbuild/linux-arm64': 0.28.0 - '@esbuild/linux-ia32': 0.28.0 - '@esbuild/linux-loong64': 0.28.0 - '@esbuild/linux-mips64el': 0.28.0 - '@esbuild/linux-ppc64': 0.28.0 - '@esbuild/linux-riscv64': 0.28.0 - '@esbuild/linux-s390x': 0.28.0 - '@esbuild/linux-x64': 0.28.0 - '@esbuild/netbsd-arm64': 0.28.0 - '@esbuild/netbsd-x64': 0.28.0 - '@esbuild/openbsd-arm64': 0.28.0 - '@esbuild/openbsd-x64': 0.28.0 - '@esbuild/openharmony-arm64': 0.28.0 - '@esbuild/sunos-x64': 0.28.0 - '@esbuild/win32-arm64': 0.28.0 - '@esbuild/win32-ia32': 0.28.0 - '@esbuild/win32-x64': 0.28.0 - - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.9 - - expect-type@1.3.0: {} - - fdir@6.5.0(picomatch@4.0.4): - optionalDependencies: - picomatch: 4.0.4 - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - hasown@2.0.4: - dependencies: - function-bind: 1.1.2 - - iii-sdk@0.19.2: - dependencies: - '@iii-dev/observability': 0.19.2 - '@opentelemetry/api': 1.9.1 - ws: 8.21.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - import-in-the-middle@1.15.0: - dependencies: - acorn: 8.16.0 - acorn-import-attributes: 1.9.5(acorn@8.16.0) - cjs-module-lexer: 1.4.3 - module-details-from-path: 1.0.4 - - is-core-module@2.16.2: - dependencies: - hasown: 2.0.4 - - js-tokens@9.0.1: {} - - long@5.3.2: {} - - loupe@3.2.1: {} - - magic-string@0.30.21: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - - module-details-from-path@1.0.4: {} - - ms@2.1.3: {} - - nanoid@3.3.12: {} - - path-parse@1.0.7: {} - - pathe@2.0.3: {} - - pathval@2.0.1: {} - - picocolors@1.1.1: {} - - picomatch@4.0.4: {} - - postcss@8.5.15: - dependencies: - nanoid: 3.3.12 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - protobufjs@7.6.3: - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.5 - '@protobufjs/eventemitter': 1.1.1 - '@protobufjs/fetch': 1.1.1 - '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.2 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.1 - '@types/node': 22.19.21 - long: 5.3.2 - - require-in-the-middle@7.5.2: - dependencies: - debug: 4.4.3 - module-details-from-path: 1.0.4 - resolve: 1.22.12 - transitivePeerDependencies: - - supports-color - - resolve@1.22.12: - dependencies: - es-errors: 1.3.0 - is-core-module: 2.16.2 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - rollup@4.61.1: - dependencies: - '@types/estree': 1.0.9 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.61.1 - '@rollup/rollup-android-arm64': 4.61.1 - '@rollup/rollup-darwin-arm64': 4.61.1 - '@rollup/rollup-darwin-x64': 4.61.1 - '@rollup/rollup-freebsd-arm64': 4.61.1 - '@rollup/rollup-freebsd-x64': 4.61.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.61.1 - '@rollup/rollup-linux-arm-musleabihf': 4.61.1 - '@rollup/rollup-linux-arm64-gnu': 4.61.1 - '@rollup/rollup-linux-arm64-musl': 4.61.1 - '@rollup/rollup-linux-loong64-gnu': 4.61.1 - '@rollup/rollup-linux-loong64-musl': 4.61.1 - '@rollup/rollup-linux-ppc64-gnu': 4.61.1 - '@rollup/rollup-linux-ppc64-musl': 4.61.1 - '@rollup/rollup-linux-riscv64-gnu': 4.61.1 - '@rollup/rollup-linux-riscv64-musl': 4.61.1 - '@rollup/rollup-linux-s390x-gnu': 4.61.1 - '@rollup/rollup-linux-x64-gnu': 4.61.1 - '@rollup/rollup-linux-x64-musl': 4.61.1 - '@rollup/rollup-openbsd-x64': 4.61.1 - '@rollup/rollup-openharmony-arm64': 4.61.1 - '@rollup/rollup-win32-arm64-msvc': 4.61.1 - '@rollup/rollup-win32-ia32-msvc': 4.61.1 - '@rollup/rollup-win32-x64-gnu': 4.61.1 - '@rollup/rollup-win32-x64-msvc': 4.61.1 - fsevents: 2.3.3 - - semver@7.8.4: {} - - shimmer@1.2.1: {} - - siginfo@2.0.0: {} - - source-map-js@1.2.1: {} - - stackback@0.0.2: {} - - std-env@3.10.0: {} - - strip-literal@3.1.0: - dependencies: - js-tokens: 9.0.1 - - supports-preserve-symlinks-flag@1.0.0: {} - - tinybench@2.9.0: {} - - tinyexec@0.3.2: {} - - tinyglobby@0.2.17: - dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 - - tinypool@1.1.1: {} - - tinyrainbow@2.0.0: {} - - tinyspy@4.0.4: {} - - tsx@4.22.4: - dependencies: - esbuild: 0.28.0 - optionalDependencies: - fsevents: 2.3.3 - - typescript@5.9.3: {} - - undici-types@6.21.0: {} - - vite-node@3.2.4(@types/node@22.19.21)(tsx@4.22.4)(yaml@2.9.0): - dependencies: - cac: 6.7.14 - debug: 4.4.3 - es-module-lexer: 1.7.0 - pathe: 2.0.3 - vite: 7.3.5(@types/node@22.19.21)(tsx@4.22.4)(yaml@2.9.0) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - vite@7.3.5(@types/node@22.19.21)(tsx@4.22.4)(yaml@2.9.0): - dependencies: - esbuild: 0.27.7 - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 - postcss: 8.5.15 - rollup: 4.61.1 - tinyglobby: 0.2.17 - optionalDependencies: - '@types/node': 22.19.21 - fsevents: 2.3.3 - tsx: 4.22.4 - yaml: 2.9.0 - - vitest@3.2.6(@types/node@22.19.21)(tsx@4.22.4)(yaml@2.9.0): - dependencies: - '@types/chai': 5.2.3 - '@vitest/expect': 3.2.6 - '@vitest/mocker': 3.2.6(vite@7.3.5(@types/node@22.19.21)(tsx@4.22.4)(yaml@2.9.0)) - '@vitest/pretty-format': 3.2.6 - '@vitest/runner': 3.2.6 - '@vitest/snapshot': 3.2.6 - '@vitest/spy': 3.2.6 - '@vitest/utils': 3.2.6 - chai: 5.3.3 - debug: 4.4.3 - expect-type: 1.3.0 - magic-string: 0.30.21 - pathe: 2.0.3 - picomatch: 4.0.4 - std-env: 3.10.0 - tinybench: 2.9.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.17 - tinypool: 1.1.1 - tinyrainbow: 2.0.0 - vite: 7.3.5(@types/node@22.19.21)(tsx@4.22.4)(yaml@2.9.0) - vite-node: 3.2.4(@types/node@22.19.21)(tsx@4.22.4)(yaml@2.9.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 22.19.21 - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - why-is-node-running@2.3.0: - dependencies: - siginfo: 2.0.0 - stackback: 0.0.2 - - ws@8.21.0: {} - - yaml@2.9.0: {} - - zod@4.4.3: {} diff --git a/codex/scripts/build-bundle.mjs b/codex/scripts/build-bundle.mjs deleted file mode 100644 index 0e20ef29..00000000 --- a/codex/scripts/build-bundle.mjs +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env node - -/** - * Single-file ESM bundle for codex (`dist/bundle/index.mjs`). - * - * Mirrors harness/scripts/build-bundle.mjs: - * - * 1. iii-sdk reads its own version at module-init via - * `createRequire(import.meta.url)("../package.json")` - * which resolves relative to the bundle path at runtime. The - * `inlinePackageJson` plugin rewrites that call to a literal object. - * - * 2. `@openai/codex-sdk` spawns the Codex CLI as a subprocess; the - * `codex_executable` config option (or a `codex` binary on PATH) - * covers the bundled case where the SDK cannot resolve its own - * vendored entrypoint. - */ - -import { readFile } from 'node:fs/promises'; -import { dirname, join } from 'node:path'; -import { fileURLToPath } from 'node:url'; -import { build } from 'esbuild'; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(__filename); -const root = join(__dirname, '..'); - -/** @type {import('esbuild').Plugin} */ -const inlinePackageJson = { - name: 'iii-inline-sdk-package-json', - setup(b) { - b.onLoad({ filter: /iii-sdk[\\/]dist[\\/]index\.mjs$/ }, async (args) => { - const [source, pkg] = await Promise.all([ - readFile(args.path, 'utf8'), - readFile(join(root, 'node_modules/iii-sdk/package.json'), 'utf8'), - ]); - const { version } = JSON.parse(pkg); - const replaced = source.replace( - /createRequire\(\s*import\.meta\.url\s*\)\s*\(\s*"\.\.\/package\.json"\s*\)/g, - JSON.stringify({ version }), - ); - return { contents: replaced, loader: 'js' }; - }); - }, -}; - -await build({ - entryPoints: [join(root, 'src/index.ts')], - bundle: true, - platform: 'node', - target: 'node22', - format: 'esm', - outfile: join(root, 'dist/bundle/index.mjs'), - legalComments: 'none', - external: ['fsevents'], - banner: { - js: "import{createRequire as __iiiCR}from'module';const require=__iiiCR(import.meta.url);", - }, - define: { - 'process.env.NODE_ENV': '"production"', - }, - plugins: [inlinePackageJson], - logLevel: 'info', -}); diff --git a/codex/src/codex/args.rs b/codex/src/codex/args.rs new file mode 100644 index 00000000..304eef8b --- /dev/null +++ b/codex/src/codex/args.rs @@ -0,0 +1,193 @@ +//! Build the `codex exec --json` argv from a run request, mirroring the TS +//! SDK's exec.ts. Derived settings and the caller's `codex_config` pass-through +//! serialize through `--config key=value` with TOML-literal values. + +use serde_json::{Map, Value}; + +use crate::functions::types::RunRequest; + +/// Resolved per-turn settings after merging payload over config defaults. +pub struct ResolvedOptions { + pub model: String, + pub cwd: String, + pub sandbox_mode: String, + pub approval_policy: String, + pub reasoning_effort: String, + pub skip_git_repo_check: bool, + pub base_url: String, + /// developer_instructions + any caller codex_config, already merged. + pub config: Map, + pub images: Vec, + pub additional_directories: Vec, +} + +/// Serialize a JSON value as a TOML literal for `--config key=value`. +pub fn toml_value(v: &Value) -> String { + match v { + Value::String(s) => toml::Value::String(s.clone()).to_string(), + Value::Bool(b) => b.to_string(), + Value::Number(n) => n.to_string(), + other => { + // Arrays/objects: TOML inline via the toml crate; fall back to a + // quoted JSON string if it cannot be represented. + match json_to_toml(other) { + Some(tv) => tv.to_string(), + None => toml::Value::String(other.to_string()).to_string(), + } + } + } +} + +fn json_to_toml(v: &Value) -> Option { + match v { + Value::String(s) => Some(toml::Value::String(s.clone())), + Value::Bool(b) => Some(toml::Value::Boolean(*b)), + Value::Number(n) => { + if let Some(i) = n.as_i64() { + Some(toml::Value::Integer(i)) + } else { + n.as_f64().map(toml::Value::Float) + } + } + Value::Array(a) => { + let items: Option> = a.iter().map(json_to_toml).collect(); + items.map(toml::Value::Array) + } + Value::Object(o) => { + let mut t = toml::map::Map::new(); + for (k, val) in o { + t.insert(k.clone(), json_to_toml(val)?); + } + Some(toml::Value::Table(t)) + } + Value::Null => None, + } +} + +/// Build argv for `codex exec`. `output_schema_path` is a temp file path when a +/// schema was supplied. `resume_thread` continues an existing thread. +pub fn build_args( + opts: &ResolvedOptions, + resume_thread: Option<&str>, + output_schema_path: Option<&str>, +) -> Vec { + let mut a: Vec = vec!["exec".into(), "--json".into()]; + + // --config overrides first (base_url + the merged config map). + if !opts.base_url.is_empty() { + a.push("--config".into()); + a.push(format!( + "openai_base_url={}", + toml_value(&Value::String(opts.base_url.clone())) + )); + } + if !opts.reasoning_effort.is_empty() { + a.push("--config".into()); + a.push(format!( + "model_reasoning_effort={}", + toml_value(&Value::String(opts.reasoning_effort.clone())) + )); + } + if !opts.approval_policy.is_empty() { + a.push("--config".into()); + a.push(format!( + "approval_policy={}", + toml_value(&Value::String(opts.approval_policy.clone())) + )); + } + for (k, v) in &opts.config { + a.push("--config".into()); + a.push(format!("{k}={}", toml_value(v))); + } + + if !opts.model.is_empty() { + a.push("--model".into()); + a.push(opts.model.clone()); + } + if !opts.sandbox_mode.is_empty() { + a.push("--sandbox".into()); + a.push(opts.sandbox_mode.clone()); + } + if !opts.cwd.is_empty() { + a.push("--cd".into()); + a.push(opts.cwd.clone()); + } + if opts.skip_git_repo_check { + a.push("--skip-git-repo-check".into()); + } + if let Some(path) = output_schema_path { + a.push("--output-schema".into()); + a.push(path.to_string()); + } + for dir in &opts.additional_directories { + a.push("--add-dir".into()); + a.push(dir.clone()); + } + for img in &opts.images { + a.push("--image".into()); + a.push(img.clone()); + } + if let Some(thread) = resume_thread { + a.push("resume".into()); + a.push(thread.to_string()); + } + a +} + +/// Merge payload over config defaults into ResolvedOptions, injecting the iii +/// developer_instructions block unless the caller supplied one. +pub fn resolve( + req: &RunRequest, + cfg: &crate::config::Config, + prior_model: Option<&str>, + prior_cwd: Option<&str>, + iii_prompt: Option<&str>, +) -> ResolvedOptions { + let d = &cfg.defaults; + let model = req + .model + .clone() + .filter(|s| !s.is_empty()) + .or_else(|| prior_model.filter(|s| !s.is_empty()).map(str::to_string)) + .unwrap_or_else(|| d.model.clone()); + let cwd = req + .cwd + .clone() + .filter(|s| !s.is_empty()) + .or_else(|| prior_cwd.filter(|s| !s.is_empty()).map(str::to_string)) + .unwrap_or_else(|| d.cwd.clone()); + + let mut config: Map = req + .codex_config + .clone() + .and_then(|v| v.as_object().cloned()) + .unwrap_or_default(); + // developer_instructions: caller wins; otherwise inject the iii block. + if let Some(prompt) = iii_prompt { + config + .entry("developer_instructions".to_string()) + .or_insert_with(|| Value::String(prompt.to_string())); + } + + ResolvedOptions { + model, + cwd, + sandbox_mode: req + .sandbox_mode + .clone() + .unwrap_or_else(|| d.sandbox_mode.clone()), + approval_policy: req + .approval_policy + .clone() + .unwrap_or_else(|| d.approval_policy.clone()), + reasoning_effort: req + .reasoning_effort + .clone() + .unwrap_or_else(|| d.reasoning_effort.clone()), + skip_git_repo_check: req.skip_git_repo_check.unwrap_or(d.skip_git_repo_check), + base_url: cfg.base_url.clone(), + config, + images: req.images.clone().unwrap_or_default(), + additional_directories: req.additional_directories.clone().unwrap_or_default(), + } +} diff --git a/codex/src/codex/events_types.rs b/codex/src/codex/events_types.rs new file mode 100644 index 00000000..d6649945 --- /dev/null +++ b/codex/src/codex/events_types.rs @@ -0,0 +1,163 @@ +//! Serde mirror of the JSONL events `codex exec --json` writes to stdout. +//! Mirrors `codex-rs/exec/src/exec_events.rs` (the codex crates are +//! unpublished, so the types are reproduced here rather than depended on). +//! Parsing is lenient: unknown event/item types fall through to `Unknown` +//! and are logged + skipped rather than failing the turn — the JSONL format +//! carries no version marker and is `--experimental-json`-adjacent. + +use serde::Deserialize; +use serde_json::Value; + +/// Top-level event, externally tagged on `type`. +#[derive(Debug, Clone, Deserialize)] +#[serde(tag = "type")] +pub enum ThreadEvent { + #[serde(rename = "thread.started")] + ThreadStarted(ThreadStartedEvent), + #[serde(rename = "turn.started")] + TurnStarted(Value), + #[serde(rename = "turn.completed")] + TurnCompleted(TurnCompletedEvent), + #[serde(rename = "turn.failed")] + TurnFailed(TurnFailedEvent), + #[serde(rename = "item.started")] + ItemStarted(ItemEvent), + #[serde(rename = "item.updated")] + ItemUpdated(ItemEvent), + #[serde(rename = "item.completed")] + ItemCompleted(ItemEvent), + #[serde(rename = "error")] + Error(ThreadErrorEvent), + #[serde(other)] + Unknown, +} + +#[derive(Debug, Clone, Deserialize)] +pub struct ThreadStartedEvent { + pub thread_id: String, +} + +#[derive(Debug, Clone, Deserialize)] +pub struct TurnCompletedEvent { + pub usage: Usage, +} + +#[derive(Debug, Clone, Deserialize, Default)] +pub struct Usage { + #[serde(default)] + pub input_tokens: i64, + #[serde(default)] + pub cached_input_tokens: i64, + #[serde(default)] + pub output_tokens: i64, + #[serde(default)] + pub reasoning_output_tokens: i64, +} + +#[derive(Debug, Clone, Deserialize)] +pub struct TurnFailedEvent { + pub error: ThreadErrorEvent, +} + +#[derive(Debug, Clone, Deserialize)] +pub struct ThreadErrorEvent { + pub message: String, +} + +#[derive(Debug, Clone, Deserialize)] +pub struct ItemEvent { + pub item: ThreadItem, +} + +/// `{ id, ...details }` — details are flattened and tagged on `type`. +#[derive(Debug, Clone, Deserialize)] +pub struct ThreadItem { + pub id: String, + #[serde(flatten)] + pub details: ThreadItemDetails, +} + +#[derive(Debug, Clone, Deserialize)] +#[serde(tag = "type", rename_all = "snake_case")] +pub enum ThreadItemDetails { + AgentMessage { + text: String, + }, + Reasoning { + text: String, + }, + CommandExecution(CommandExecutionItem), + FileChange(FileChangeItem), + McpToolCall(McpToolCallItem), + WebSearch(WebSearchItem), + TodoList(Value), + Error { + message: String, + }, + #[serde(other)] + Unknown, +} + +#[derive(Debug, Clone, Deserialize)] +pub struct CommandExecutionItem { + #[serde(default)] + pub command: String, + #[serde(default)] + pub aggregated_output: String, + #[serde(default)] + pub exit_code: Option, + #[serde(default)] + pub status: ItemStatus, +} + +#[derive(Debug, Clone, Deserialize)] +pub struct FileChangeItem { + #[serde(default)] + pub changes: Value, + #[serde(default)] + pub status: ItemStatus, +} + +#[derive(Debug, Clone, Deserialize)] +pub struct McpToolCallItem { + #[serde(default)] + pub server: String, + #[serde(default)] + pub tool: String, + #[serde(default)] + pub arguments: Value, + #[serde(default)] + pub result: Value, + #[serde(default)] + pub error: Option, + #[serde(default)] + pub status: ItemStatus, +} + +#[derive(Debug, Clone, Deserialize)] +pub struct McpError { + #[serde(default)] + pub message: String, +} + +#[derive(Debug, Clone, Deserialize)] +pub struct WebSearchItem { + #[serde(default)] + pub query: String, +} + +#[derive(Debug, Clone, Deserialize, Default, PartialEq, Eq)] +#[serde(rename_all = "snake_case")] +pub enum ItemStatus { + #[default] + InProgress, + Completed, + Failed, + Declined, +} + +impl ItemStatus { + pub fn is_failure(&self) -> bool { + matches!(self, ItemStatus::Failed) + } +} diff --git a/codex/src/codex/mod.rs b/codex/src/codex/mod.rs new file mode 100644 index 00000000..bbbaf97e --- /dev/null +++ b/codex/src/codex/mod.rs @@ -0,0 +1,423 @@ +//! The Codex turn: spawn `codex exec --json`, write the prompt to stdin, parse +//! the JSONL event stream, mirror it verbatim onto `codex::events`, translate +//! it onto `agent::events`, and persist the session record. + +pub mod args; +pub mod events_types; + +use std::collections::HashMap; +use std::process::Stdio; +use std::sync::Arc; + +use iii_sdk::III; +use once_cell::sync::Lazy; +use serde_json::{json, Value}; +use tokio::io::{AsyncBufReadExt, AsyncWriteExt, BufReader}; +use tokio::process::Command; +use tokio::sync::Mutex; +use tokio_util_compat::CancellationToken; + +use crate::config::Config; +use crate::events::emit; +use crate::functions::types::{extract_prompt, RunRequest}; +use crate::iii_prompt::III_CONTEXT_PROMPT; +use crate::map; +use crate::state::{load_session, save_session}; +use crate::wire::{assistant_message, now_ms, ContentBlock, SessionRecord, Status}; +use events_types::{ThreadEvent, ThreadItemDetails}; + +/// A minimal cancellation token (avoids pulling tokio-util just for this). +mod tokio_util_compat { + use std::sync::atomic::{AtomicBool, Ordering}; + use std::sync::Arc; + + #[derive(Clone, Default)] + pub struct CancellationToken(Arc); + impl CancellationToken { + pub fn cancel(&self) { + self.0.store(true, Ordering::SeqCst); + } + pub fn is_cancelled(&self) -> bool { + self.0.load(Ordering::SeqCst) + } + } +} + +pub struct LiveRun { + cancel: CancellationToken, +} + +/// session_id -> live run. The single handle codex::stop targets. +static LIVE: Lazy>> = Lazy::new(|| Mutex::new(HashMap::new())); + +pub async fn is_live(session_id: &str) -> bool { + LIVE.lock().await.contains_key(session_id) +} + +pub async fn stop(session_id: &str) -> bool { + if let Some(run) = LIVE.lock().await.get(session_id) { + run.cancel.cancel(); + true + } else { + false + } +} + +fn codex_bin(cfg: &Config) -> String { + if cfg.codex_executable.is_empty() { + "codex".to_string() + } else { + cfg.codex_executable.clone() + } +} + +/// Run one Codex turn and return the result map. `iii_context_default` is the +/// config-level toggle; the payload field overrides it. +pub async fn run(iii: III, cfg: Arc, req: RunRequest) -> Value { + let session_id = req + .session_id + .clone() + .unwrap_or_else(|| uuid::Uuid::new_v4().to_string()); + + // One live run per session: the in-process handle is what codex::stop + // targets, so a second concurrent run would clobber it and race the record. + if is_live(&session_id).await { + return json!({ + "session_id": session_id, + "busy": true, + "reason": "a run is already active for this session" + }); + } + + let prompt = match extract_prompt(&req) { + Ok(p) => p, + Err(e) => { + return json!({ "session_id": session_id, "is_error": true, "result": e.to_string() }) + } + }; + + let prior = load_session(&iii, &session_id).await.ok().flatten(); + let prior_thread = prior.as_ref().and_then(|r| r.codex_thread_id.clone()); + let want_ctx = req.iii_context.unwrap_or(cfg.iii_context); + + let opts = args::resolve( + &req, + &cfg, + prior.as_ref().map(|r| r.model.as_str()), + prior.as_ref().map(|r| r.cwd.as_str()), + if want_ctx { + Some(III_CONTEXT_PROMPT) + } else { + None + }, + ); + + // output_schema → temp file (codex takes a path, not inline). Held until + // the child exits. + let schema_file = match &req.output_schema { + Some(schema) => match write_schema(schema) { + Ok(f) => Some(f), + Err(e) => { + return json!({ "session_id": session_id, "is_error": true, "result": format!("output_schema temp file: {e}") }) + } + }, + None => None, + }; + let schema_path = schema_file + .as_ref() + .map(|f| f.path().to_string_lossy().to_string()); + + let argv = args::build_args(&opts, prior_thread.as_deref(), schema_path.as_deref()); + + let mut record = prior.unwrap_or(SessionRecord { + session_id: session_id.clone(), + codex_thread_id: None, + cwd: opts.cwd.clone(), + model: opts.model.clone(), + status: Status::Working, + turns: 0, + usage: None, + updated_at_ms: now_ms(), + }); + record.cwd = opts.cwd.clone(); + record.model = opts.model.clone(); + + // Spawn first; only persist `working` once the child + live handle exist, + // so a spawn failure never leaves a stuck `working` record. + let mut child = match Command::new(codex_bin(&cfg)) + .args(&argv) + .stdin(Stdio::piped()) + .stdout(Stdio::piped()) + .stderr(Stdio::piped()) + .spawn() + { + Ok(c) => c, + Err(e) => { + return json!({ "session_id": session_id, "is_error": true, "stop_reason": "error", "result": format!("failed to spawn codex: {e}") }) + } + }; + + if let Some(mut stdin) = child.stdin.take() { + let _ = stdin.write_all(prompt.as_bytes()).await; + let _ = stdin.shutdown().await; + } + + let cancel = CancellationToken::default(); + LIVE.lock().await.insert( + session_id.clone(), + LiveRun { + cancel: cancel.clone(), + }, + ); + + record.status = Status::Working; + record.updated_at_ms = now_ms(); + let _ = save_session(&iii, &record).await; + + let outcome = stream_turn(&iii, &cfg, &session_id, &mut child, &cancel, &mut record).await; + + LIVE.lock().await.remove(&session_id); + drop(schema_file); + + record.status = if outcome.is_error { + Status::Error + } else { + Status::Done + }; + record.turns += 1; + if outcome.usage.is_some() { + record.usage = outcome.usage.clone(); + } + record.updated_at_ms = now_ms(); + let _ = save_session(&iii, &record).await; + + // turn_end + agent_end on the translated stream. + let final_msg = assistant_message( + vec![ContentBlock::Text { + text: outcome.result_text.clone(), + }], + &record.model, + record.usage.clone(), + &outcome.stop_reason, + ); + emit( + &iii, + &cfg.events_stream, + &session_id, + json!({ "type": "turn_end", "message": final_msg, "function_results": [] }), + ) + .await; + emit( + &iii, + &cfg.events_stream, + &session_id, + json!({ "type": "agent_end", "messages": [] }), + ) + .await; + + json!({ + "session_id": session_id, + "codex_thread_id": record.codex_thread_id, + "result": outcome.result_text, + "stop_reason": outcome.stop_reason, + "is_error": outcome.is_error, + "num_turns": record.turns, + "usage": record.usage, + }) +} + +struct Outcome { + result_text: String, + stop_reason: String, + is_error: bool, + usage: Option, +} + +async fn stream_turn( + iii: &III, + cfg: &Config, + session_id: &str, + child: &mut tokio::process::Child, + cancel: &CancellationToken, + record: &mut SessionRecord, +) -> Outcome { + let mut outcome = Outcome { + result_text: String::new(), + stop_reason: "end".to_string(), + is_error: false, + usage: None, + }; + let stdout = match child.stdout.take() { + Some(s) => s, + None => { + outcome.is_error = true; + outcome.stop_reason = "error".to_string(); + outcome.result_text = "codex produced no stdout".to_string(); + return outcome; + } + }; + let mut lines = BufReader::new(stdout).lines(); + let mut started: HashMap = HashMap::new(); + + loop { + if cancel.is_cancelled() { + let _ = child.start_kill(); + outcome.stop_reason = "aborted".to_string(); + break; + } + let line = tokio::select! { + l = lines.next_line() => l, + _ = tokio::time::sleep(std::time::Duration::from_millis(200)) => continue, + }; + let line = match line { + Ok(Some(l)) => l, + Ok(None) => break, // stdout closed + Err(e) => { + outcome.is_error = true; + outcome.stop_reason = "error".to_string(); + outcome.result_text = format!("stdout read error: {e}"); + break; + } + }; + if line.trim().is_empty() { + continue; + } + let raw: Value = match serde_json::from_str(&line) { + Ok(v) => v, + Err(_) => continue, + }; + // verbatim onto the raw stream + emit(iii, &cfg.raw_events_stream, session_id, raw.clone()).await; + + let event: ThreadEvent = match serde_json::from_value(raw) { + Ok(e) => e, + Err(_) => continue, + }; + match event { + ThreadEvent::ThreadStarted(e) => { + record.codex_thread_id = Some(e.thread_id); + let _ = save_session(iii, record).await; + } + ThreadEvent::ItemStarted(ev) | ThreadEvent::ItemUpdated(ev) => { + if map::is_exec_item(&ev.item.details) && !started.contains_key(&ev.item.id) { + started.insert(ev.item.id.clone(), ()); + emit_exec_start(iii, cfg, session_id, &ev.item.id, &ev.item.details).await; + } + } + ThreadEvent::ItemCompleted(ev) => { + let model = record.model.clone(); + handle_item_completed( + iii, + cfg, + session_id, + &ev.item.id, + &ev.item.details, + &started, + &model, + &mut outcome, + ) + .await; + } + ThreadEvent::TurnCompleted(e) => { + outcome.usage = Some(map::map_usage(&e.usage)); + } + ThreadEvent::TurnFailed(e) => { + outcome.is_error = true; + outcome.stop_reason = "error".to_string(); + outcome.result_text = e.error.message; + } + ThreadEvent::Error(e) => { + outcome.is_error = true; + outcome.stop_reason = "error".to_string(); + outcome.result_text = e.message; + } + ThreadEvent::TurnStarted(_) | ThreadEvent::Unknown => {} + } + } + + let _ = child.wait().await; + outcome +} + +async fn emit_exec_start( + iii: &III, + cfg: &Config, + session_id: &str, + id: &str, + details: &ThreadItemDetails, +) { + emit( + iii, + &cfg.events_stream, + session_id, + json!({ + "type": "function_execution_start", + "function_call_id": id, + "function_id": map::function_id(details), + "args": map::args_for(details), + }), + ) + .await; +} + +#[allow(clippy::too_many_arguments)] +async fn handle_item_completed( + iii: &III, + cfg: &Config, + session_id: &str, + id: &str, + details: &ThreadItemDetails, + started: &HashMap, + model: &str, + outcome: &mut Outcome, +) { + match details { + ThreadItemDetails::AgentMessage { text } | ThreadItemDetails::Reasoning { text } => { + let is_agent = matches!(details, ThreadItemDetails::AgentMessage { .. }); + let block = if is_agent { + ContentBlock::Text { text: text.clone() } + } else { + ContentBlock::Thinking { text: text.clone() } + }; + let msg = assistant_message(vec![block], model, None, "end"); + emit( + iii, + &cfg.events_stream, + session_id, + json!({ "type": "message_complete", "message": msg }), + ) + .await; + if is_agent { + outcome.result_text = text.clone(); + } + } + d if map::is_exec_item(d) => { + if !started.contains_key(id) { + emit_exec_start(iii, cfg, session_id, id, d).await; + } + emit( + iii, + &cfg.events_stream, + session_id, + json!({ + "type": "function_execution_end", + "function_call_id": id, + "function_id": map::function_id(d), + "result": { "content": map::result_content(d), "details": null }, + "is_error": map::is_error_item(d), + "duration_ms": 0, + }), + ) + .await; + } + _ => {} + } +} + +fn write_schema(schema: &Value) -> anyhow::Result { + use std::io::Write; + let mut f = tempfile::NamedTempFile::new()?; + f.write_all(serde_json::to_string(schema)?.as_bytes())?; + f.flush()?; + Ok(f) +} diff --git a/codex/src/config.rs b/codex/src/config.rs new file mode 100644 index 00000000..5b090a3c --- /dev/null +++ b/codex/src/config.rs @@ -0,0 +1,67 @@ +//! Operator config loaded from `config.yaml` (the seed default; same keys the +//! TS worker used). Missing file falls back to defaults; a malformed file is a +//! hard error so a typo fails the worker fast rather than silently. + +use serde::Deserialize; + +#[derive(Debug, Clone, Deserialize)] +#[serde(default)] +pub struct Defaults { + pub model: String, + pub sandbox_mode: String, + pub approval_policy: String, + pub reasoning_effort: String, + pub cwd: String, + pub skip_git_repo_check: bool, +} + +impl Default for Defaults { + fn default() -> Self { + Self { + model: String::new(), + sandbox_mode: "workspace-write".to_string(), + approval_policy: "never".to_string(), + reasoning_effort: String::new(), + cwd: String::new(), + skip_git_repo_check: true, + } + } +} + +#[derive(Debug, Clone, Deserialize)] +#[serde(default)] +pub struct Config { + pub engine_url: String, + pub defaults: Defaults, + pub events_stream: String, + pub raw_events_stream: String, + pub codex_executable: String, + pub base_url: String, + pub iii_context: bool, +} + +impl Default for Config { + fn default() -> Self { + Self { + engine_url: "ws://127.0.0.1:49134".to_string(), + defaults: Defaults::default(), + events_stream: "agent::events".to_string(), + raw_events_stream: "codex::events".to_string(), + codex_executable: String::new(), + base_url: String::new(), + iii_context: true, + } + } +} + +impl Config { + /// Load from a YAML file. A missing file yields defaults; any other error + /// (parse, permissions) propagates so the worker fails fast. + pub fn load(path: &str) -> anyhow::Result { + match std::fs::read_to_string(path) { + Ok(text) => Ok(serde_yaml::from_str(&text)?), + Err(e) if e.kind() == std::io::ErrorKind::NotFound => Ok(Config::default()), + Err(e) => Err(e.into()), + } + } +} diff --git a/codex/src/config.ts b/codex/src/config.ts deleted file mode 100644 index affad727..00000000 --- a/codex/src/config.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { readFile } from 'node:fs/promises'; -import { parse } from 'yaml'; -import { z } from 'zod'; - -const ConfigSchema = z.object({ - engine_url: z.string().default('ws://127.0.0.1:49134'), - defaults: z - .object({ - model: z.string().default(''), - sandbox_mode: z - .enum(['read-only', 'workspace-write', 'danger-full-access']) - .default('workspace-write'), - approval_policy: z.enum(['never', 'on-request', 'on-failure', 'untrusted']).default('never'), - reasoning_effort: z.enum(['', 'minimal', 'low', 'medium', 'high', 'xhigh']).default(''), - cwd: z.string().default(''), - skip_git_repo_check: z.boolean().default(true), - }) - .prefault({}), - events_stream: z.string().default('agent::events'), - raw_events_stream: z.string().default('codex::events'), - iii_context: z.boolean().default(true), - codex_executable: z.string().default(''), - base_url: z.string().default(''), -}); - -export type Config = z.infer; - -export async function loadConfig(path: string): Promise { - let raw: unknown = {}; - try { - raw = parse(await readFile(path, 'utf8')) ?? {}; - } catch (err) { - // a missing config file falls back to defaults; anything else - // (YAML parse error, permissions) must fail the worker fast - if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err; - } - return ConfigSchema.parse(raw); -} diff --git a/codex/src/events.rs b/codex/src/events.rs new file mode 100644 index 00000000..10e18176 --- /dev/null +++ b/codex/src/events.rs @@ -0,0 +1,44 @@ +//! Stream emitter: writes frames via the engine's `stream::set` builtin with a +//! per-process epoch + per-session monotonic sequence so item_ids never +//! collide across restarts (matches the harness emitter). Failures are logged, +//! not propagated — the streams are best-effort observability; the function's +//! return value and the session record are the source of truth. + +use std::collections::HashMap; +use std::sync::Mutex; + +use iii_sdk::{TriggerRequest, III}; +use once_cell::sync::Lazy; +use serde_json::{json, Value}; +use uuid::Uuid; + +static EPOCH: Lazy = Lazy::new(|| Uuid::new_v4().to_string()); +static SEQ: Lazy>> = Lazy::new(|| Mutex::new(HashMap::new())); + +fn next_item_id(session_id: &str) -> String { + let mut map = SEQ.lock().expect("seq mutex"); + let n = map.entry(session_id.to_string()).or_insert(0); + let seq = *n; + *n += 1; + format!("{session_id}-{}-{:08}", &*EPOCH, seq) +} + +pub async fn emit(iii: &III, stream_name: &str, session_id: &str, data: Value) { + let item_id = next_item_id(session_id); + let res = iii + .trigger(TriggerRequest { + function_id: "stream::set".to_string(), + payload: json!({ + "stream_name": stream_name, + "group_id": session_id, + "item_id": item_id, + "data": data, + }), + action: None, + timeout_ms: Some(5_000), + }) + .await; + if let Err(e) = res { + tracing::warn!(stream_name, session_id, error = %e, "stream::set failed"); + } +} diff --git a/codex/src/events.ts b/codex/src/events.ts deleted file mode 100644 index b9fbb9e3..00000000 --- a/codex/src/events.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Emit event frames via the engine's stream builtin. Same per-process - * epoch + per-session monotonic sequence scheme as the harness emitter, so - * item_ids never collide across restarts. - */ - -import { randomUUID } from 'node:crypto'; -import type { ISdk } from 'iii-sdk'; - -const PROCESS_EPOCH = randomUUID(); -const seqBySession = new Map(); - -export function makeEmitter(iii: ISdk, streamName: string) { - return async function emit(session_id: string, event: unknown): Promise { - const seq = seqBySession.get(session_id) ?? 0; - seqBySession.set(session_id, seq + 1); - const item_id = `${session_id}-${PROCESS_EPOCH}-${seq.toString().padStart(8, '0')}`; - try { - await iii.trigger({ - function_id: 'stream::set', - payload: { stream_name: streamName, group_id: session_id, item_id, data: event }, - }); - } catch (err) { - console.warn(`stream::set failed for ${session_id}: ${String(err)}`); - } - }; -} - -export type Emit = ReturnType; diff --git a/codex/src/executable.ts b/codex/src/executable.ts deleted file mode 100644 index 28d952bf..00000000 --- a/codex/src/executable.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Resolve the Codex CLI binary for the SDK. The npm-installed SDK locates - * the vendored CLI relative to its own module path, but the single-file - * bundle (`deploy: bundle`) cannot carry it — so when the operator has not - * pinned `codex_executable` in config.yaml, fall back to the `codex` binary - * on PATH. - */ - -import { accessSync, constants } from 'node:fs'; -import { delimiter, join } from 'node:path'; - -export function resolveCodexExecutable(configured: string): string { - if (configured) return configured; - const path = process.env.PATH ?? ''; - for (const dir of path.split(delimiter)) { - if (!dir) continue; - const candidate = join(dir, 'codex'); - try { - accessSync(candidate, constants.X_OK); - return candidate; - } catch { - // keep scanning - } - } - return ''; -} diff --git a/codex/src/functions/mod.rs b/codex/src/functions/mod.rs new file mode 100644 index 00000000..ee47bbe8 --- /dev/null +++ b/codex/src/functions/mod.rs @@ -0,0 +1,134 @@ +//! Register the codex::* surface. Handlers parse at the unknown boundary and +//! delegate to the codex turn loop; schemas are published via request_format +//! so `iii trigger codex::run --help` prints the parameter table. + +pub mod types; + +use std::sync::Arc; + +use iii_sdk::{IIIError, RegisterFunction, III}; +use serde_json::{json, Value}; + +use crate::codex; +use crate::config::Config; +use crate::state::{list_sessions, load_session, mark_error}; +use types::{RunRequest, SessionIdRequest}; + +fn schema_value() -> Value { + let root = schemars::gen::SchemaGenerator::default().into_root_schema_for::(); + serde_json::to_value(root).expect("schema serializes") +} + +pub fn register_all(iii: &III, cfg: Arc) { + // codex::run — run a turn and wait for the result. + { + let iii_h = iii.clone(); + let cfg_h = cfg.clone(); + iii.register_function( + "codex::run", + RegisterFunction::new_async(move |req: RunRequest| { + let iii_h = iii_h.clone(); + let cfg_h = cfg_h.clone(); + async move { Ok::(codex::run(iii_h, cfg_h, req).await) } + }) + .request_format(schema_value::()) + .description( + "Run one Codex turn and wait for the result. Accepts `prompt` or a `messages` \ + array plus a raw SDK `codex_config` pass-through; streams raw Codex events onto \ + codex::events, AgentEvent frames onto agent::events, and returns \ + {session_id, result, usage}.", + ), + ); + } + + // codex::start — fire-and-forget; progress on the streams. + { + let iii_h = iii.clone(); + let cfg_h = cfg.clone(); + iii.register_function( + "codex::start", + RegisterFunction::new_async(move |req: RunRequest| { + let iii_h = iii_h.clone(); + let cfg_h = cfg_h.clone(); + async move { + let session_id = req + .session_id + .clone() + .unwrap_or_else(|| uuid::Uuid::new_v4().to_string()); + let mut started = req; + started.session_id = Some(session_id.clone()); + let bg_iii = iii_h.clone(); + let bg_id = session_id.clone(); + tokio::spawn(async move { + // run() persists terminal state itself; this is the + // backstop if the task panics or its save fails. + let res = codex::run(bg_iii.clone(), cfg_h, started).await; + if res.get("is_error").and_then(Value::as_bool) == Some(true) { + mark_error(&bg_iii, &bg_id).await; + } + }); + Ok::(json!({ "session_id": session_id, "started": true })) + } + }) + .request_format(schema_value::()) + .description( + "Start a Codex turn and return immediately; watch codex::events / agent::events \ + (group_id = session_id) for progress and turn_end.", + ), + ); + } + + // codex::stop — interrupt a live run. + iii.register_function( + "codex::stop", + RegisterFunction::new_async(move |req: SessionIdRequest| async move { + let stopped = codex::stop(&req.session_id).await; + Ok::(json!({ + "session_id": req.session_id, + "stopped": stopped, + "reason": if stopped { Value::Null } else { json!("no live run") }, + })) + }) + .request_format(schema_value::()) + .description("Interrupt a live Codex run for a session."), + ); + + // codex::status — point-in-time session view. + { + let iii_h = iii.clone(); + iii.register_function( + "codex::status", + RegisterFunction::new_async(move |req: SessionIdRequest| { + let iii_h = iii_h.clone(); + async move { + let record = load_session(&iii_h, &req.session_id).await.ok().flatten(); + let live = codex::is_live(&req.session_id).await; + Ok::(json!({ + "session_id": req.session_id, + "live": live, + "record": record, + })) + } + }) + .request_format(schema_value::()) + .description("Point-in-time status of a Codex session."), + ); + } + + // codex::sessions::list — every session this worker has run. + { + let iii_h = iii.clone(); + iii.register_function( + "codex::sessions::list", + RegisterFunction::new_async(move |_req: Value| { + let iii_h = iii_h.clone(); + async move { + let sessions = list_sessions(&iii_h).await.unwrap_or_default(); + Ok::(json!({ "sessions": sessions })) + } + }) + .request_format(json!({ "type": "object", "properties": {} })) + .description("List every Codex session this worker has run."), + ); + } +} diff --git a/codex/src/functions/types.rs b/codex/src/functions/types.rs new file mode 100644 index 00000000..fccf142e --- /dev/null +++ b/codex/src/functions/types.rs @@ -0,0 +1,78 @@ +//! Request payloads. `RunRequest` derives `JsonSchema` so the engine publishes +//! the parameter table for `iii trigger codex::run --help`, and `Deserialize` +//! so the handler parses at the unknown boundary. + +use schemars::JsonSchema; +use serde::Deserialize; +use serde_json::Value; + +#[derive(Debug, Clone, Deserialize, JsonSchema)] +pub struct Message { + pub role: String, + /// Either a plain string or an array of content blocks. + pub content: Value, +} + +#[derive(Debug, Clone, Default, Deserialize, JsonSchema)] +#[serde(default)] +pub struct RunRequest { + /// iii session id; reuse to resume the same Codex thread. + pub session_id: Option, + /// The user prompt for this turn. + pub prompt: Option, + /// Alternative to prompt: role/content messages; the last user entry becomes the prompt. + pub messages: Option>, + /// Model id; empty = Codex default. + pub model: Option, + /// Working directory the turn runs in. + pub cwd: Option, + /// Codex sandbox mode: read-only | workspace-write | danger-full-access. + pub sandbox_mode: Option, + /// Codex approval policy; headless callers leave it at never. + pub approval_policy: Option, + /// Model reasoning effort: minimal | low | medium | high | xhigh. + pub reasoning_effort: Option, + /// Allow running outside a git repository. + pub skip_git_repo_check: Option, + /// JSON schema for structured final output. + pub output_schema: Option, + /// Paths to local images attached to the prompt. + pub images: Option>, + /// Additional writable directories alongside the working root (--add-dir). + pub additional_directories: Option>, + /// Codex config.toml overrides for this turn (e.g. mcp_servers, model_providers, profiles). + pub codex_config: Option, + /// Inject the iii runtime discovery prompt as developer_instructions (default true via config). + pub iii_context: Option, + /// Reserved for callers; not forwarded. + pub timeout_ms: Option, +} + +#[derive(Debug, Clone, Deserialize, JsonSchema)] +pub struct SessionIdRequest { + /// iii session id returned by codex::run / codex::start. + pub session_id: String, +} + +/// Extract the prompt: explicit `prompt` (incl. empty string) wins; otherwise +/// the last user message's text. +pub fn extract_prompt(req: &RunRequest) -> anyhow::Result { + if let Some(p) = &req.prompt { + return Ok(p.clone()); + } + let messages = req.messages.as_ref().ok_or_else(|| { + anyhow::anyhow!("codex::run requires `prompt` or a user message in `messages`") + })?; + let last = messages.iter().rfind(|m| m.role == "user").ok_or_else(|| { + anyhow::anyhow!("codex::run requires `prompt` or a user message in `messages`") + })?; + match &last.content { + Value::String(s) => Ok(s.clone()), + Value::Array(blocks) => Ok(blocks + .iter() + .filter_map(|b| b.get("text").and_then(Value::as_str)) + .collect::>() + .join("\n")), + _ => Ok(String::new()), + } +} diff --git a/codex/src/iii-prompt.ts b/codex/src/iii-prompt.ts deleted file mode 100644 index ead17ace..00000000 --- a/codex/src/iii-prompt.ts +++ /dev/null @@ -1,80 +0,0 @@ -/** - * iii runtime context delivered as Codex `developer_instructions` (a - * developer-role message in the turn context) when `iii_context` is - * enabled. Carries the same engine-grounded rules as the harness identity - * prompts (harness/src/turn-orchestrator/prompt/*), retargeted from the - * `agent_trigger` tool to the `iii` CLI, which this agent reaches through - * its sandboxed shell. A caller-supplied `developer_instructions` in - * `codex_config` wins over this block. - */ - -export const III_CONTEXT_PROMPT = `# iii runtime - -This machine runs an iii engine: a WebSocket-routed worker mesh whose single engine process -holds a live registry of every connected worker, every function those workers expose, and every -trigger bound to them. Every call routes worker -> engine -> worker, so the language, runtime, -and location of a worker are invisible to its callers. The function id is the ONLY contract -between two workers. - -You act on iii ONLY through the \`iii\` CLI on PATH, via your shell: - - iii trigger [key=value ...] [--json ''] [--timeout-ms ] - -Function ids are namespaced with \`::\` (e.g. \`engine::functions::list\`). Simple arguments go -as \`key=value\` pairs; structured payloads go as \`--json\` with a single-quoted JSON OBJECT. - -IMPORTANT: NEVER invent function ids or argument names from memory. Discover them from the live -engine and trust it over memory or this prompt. - -## Discovery - -The live engine is the single source of truth. Ask it — never assume: - -- \`iii trigger engine::functions::list --json '{"search":""}'\` — every function across - all workers; optional filters \`prefix\` / \`search\` / \`worker\`. Use it to FIND a function - id. -- \`iii trigger --help\` — that function's description and request schema, served by - the engine. THIS IS THE API REFERENCE for every call you make. Fetch it BEFORE the first call - to any function; a one-line description from \`list\` is a hint, not the contract. -- \`iii trigger engine::workers::list\` — every connected worker; - \`iii trigger engine::workers::info name=\` — one worker's full surface. -- \`iii trigger engine::triggers::list\` — every trigger TYPE; - \`iii trigger engine::registered-triggers::list\` — every trigger INSTANCE already bound. - -Need a backend capability? Check what is already registered FIRST — it is usually one call -away. When nothing fits, search the public registry before building anything: -\`iii trigger directory::registry::workers::list --json '{"search":""}'\` pages the -published catalogue and \`iii trigger directory::registry::workers::info name=\` returns -one worker's full detail. Say what you are about to install and why, install with -\`iii trigger worker::add --json '{"source":{"kind":"registry","name":""}}'\`, then -confirm the new ids appear via \`engine::functions::list\` with that prefix and fetch each -contract with \`--help\` as usual. - -## Calling rules - -- \`--json\` takes a JSON OBJECT in single quotes: \`--json '{"path":"/tmp"}'\`. Never pass a - JSON-encoded string where the engine expects an object — workers reject it with - \`invalid_arguments\` / \`serialization error\`. -- Long-running functions need \`--timeout-ms\` well above the default 30000. -- Triggers are the engine's push channel: NEVER poll (a loop re-reading a queue, file, or - table) when a trigger type fits — bind a trigger instead. A trigger registration succeeds - even when its type's provider is absent or the config keys are wrong — the binding lands but - never fires — so copy config keys from \`engine::triggers::info\`, not from memory. - -## Error handling - -When a call errors, READ the error and CHANGE something before the next call. NEVER resend the -same function + payload unchanged. \`invalid_arguments\` / \`missing field\` means YOUR payload -is wrong: re-read the contract via \`--help\` and fix the object, keeping the same function. -\`function_not_found\` means the id is wrong: re-check via \`engine::functions::list\`. A -repeating timeout means the approach is wrong, not the arguments: simplify, split the work, or -report the blocker and stop. - -## Boundaries - -- Files in your working directory: use your native tools (read, edit, search). The bus is not - for local file edits. -- Backend actions beyond the working directory — email, databases, storage, queues, schedules, - other services — go through registered iii functions, never ad-hoc processes or foreign - patterns carried in from other ecosystems. If you reach for a tool that is not an iii - function for a backend action, stop and re-check the engine's surface first.`; diff --git a/codex/src/iii_prompt.rs b/codex/src/iii_prompt.rs new file mode 100644 index 00000000..28d535c7 --- /dev/null +++ b/codex/src/iii_prompt.rs @@ -0,0 +1,76 @@ +//! iii runtime context delivered as Codex `developer_instructions` (a +//! developer-role message in the turn context) when `iii_context` is enabled. +//! Same engine-grounded rules as the harness identity prompts, retargeted from +//! `agent_trigger` to the `iii` CLI the agent reaches through its sandboxed +//! shell. A caller-supplied `developer_instructions` in `codex_config` wins. + +pub const III_CONTEXT_PROMPT: &str = r#"# iii runtime + +This machine runs an iii engine: a WebSocket-routed worker mesh whose single engine process +holds a live registry of every connected worker, every function those workers expose, and every +trigger bound to them. Every call routes worker -> engine -> worker, so the language, runtime, +and location of a worker are invisible to its callers. The function id is the ONLY contract +between two workers. + +You act on iii ONLY through the `iii` CLI on PATH, via your shell: + + iii trigger [key=value ...] [--json ''] [--timeout-ms ] + +Function ids are namespaced with `::` (e.g. `engine::functions::list`). Simple arguments go +as `key=value` pairs; structured payloads go as `--json` with a single-quoted JSON OBJECT. + +IMPORTANT: NEVER invent function ids or argument names from memory. Discover them from the live +engine and trust it over memory or this prompt. + +## Discovery + +The live engine is the single source of truth. Ask it — never assume: + +- `iii trigger engine::functions::list --json '{"search":""}'` — every function across + all workers; optional filters `prefix` / `search` / `worker`. Use it to FIND a function + id. +- `iii trigger --help` — that function's description and request schema, served by + the engine. THIS IS THE API REFERENCE for every call you make. Fetch it BEFORE the first call + to any function; a one-line description from `list` is a hint, not the contract. +- `iii trigger engine::workers::list` — every connected worker; + `iii trigger engine::workers::info name=` — one worker's full surface. +- `iii trigger engine::triggers::list` — every trigger TYPE; + `iii trigger engine::registered-triggers::list` — every trigger INSTANCE already bound. + +Need a backend capability? Check what is already registered FIRST — it is usually one call +away. When nothing fits, search the public registry before building anything: +`iii trigger directory::registry::workers::list --json '{"search":""}'` pages the +published catalogue and `iii trigger directory::registry::workers::info name=` returns +one worker's full detail. Say what you are about to install and why, install with +`iii trigger worker::add --json '{"source":{"kind":"registry","name":""}}'`, then +confirm the new ids appear via `engine::functions::list` with that prefix and fetch each +contract with `--help` as usual. + +## Calling rules + +- `--json` takes a JSON OBJECT in single quotes: `--json '{"path":"/tmp"}'`. Never pass a + JSON-encoded string where the engine expects an object — workers reject it with + `invalid_arguments` / `serialization error`. +- Long-running functions need `--timeout-ms` well above the default 30000. +- Triggers are the engine's push channel: NEVER poll (a loop re-reading a queue, file, or + table) when a trigger type fits — bind a trigger instead. A trigger registration succeeds + even when its type's provider is absent or the config keys are wrong — the binding lands but + never fires — so copy config keys from `engine::triggers::info`, not from memory. + +## Error handling + +When a call errors, READ the error and CHANGE something before the next call. NEVER resend the +same function + payload unchanged. `invalid_arguments` / `missing field` means YOUR payload +is wrong: re-read the contract via `--help` and fix the object, keeping the same function. +`function_not_found` means the id is wrong: re-check via `engine::functions::list`. A +repeating timeout means the approach is wrong, not the arguments: simplify, split the work, or +report the blocker and stop. + +## Boundaries + +- Files in your working directory: use your native tools (read, edit, search). The bus is not + for local file edits. +- Backend actions beyond the working directory — email, databases, storage, queues, schedules, + other services — go through registered iii functions, never ad-hoc processes or foreign + patterns carried in from other ecosystems. If you reach for a tool that is not an iii + function for a backend action, stop and re-check the engine's surface first."#; diff --git a/codex/src/index.ts b/codex/src/index.ts deleted file mode 100644 index e4dba6da..00000000 --- a/codex/src/index.ts +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env node -/** - * Worker bootstrap: connect to the engine, register codex::* functions, - * wait for SIGINT/SIGTERM. Mirrors the binary-worker lifecycle from - * iii-hq/workers (parse flags, registerWorker, register, shutdown). - */ - -import { parseArgs } from 'node:util'; -import { registerWorker } from 'iii-sdk'; -import { loadConfig } from './config.js'; -import { makeEmitter } from './events.js'; -import { resolveCodexExecutable } from './executable.js'; -import { register } from './run.js'; - -const { values } = parseArgs({ - options: { - config: { type: 'string', default: './config.yaml' }, - url: { type: 'string' }, - }, - strict: false, -}); - -const cfg = await loadConfig(String(values.config)); -cfg.codex_executable = resolveCodexExecutable(cfg.codex_executable); -const url = values.url ? String(values.url) : cfg.engine_url; - -const iii = registerWorker(url, { workerName: 'codex' }); -const emit = makeEmitter(iii, cfg.events_stream); -const emitRaw = makeEmitter(iii, cfg.raw_events_stream); -register(iii, cfg, emit, emitRaw); - -console.log(`codex worker connected to ${url}`); - -const shutdown = async () => { - try { - await iii.shutdown?.(); - } finally { - process.exit(0); - } -}; -process.on('SIGINT', shutdown); -process.on('SIGTERM', shutdown); diff --git a/codex/src/lib.rs b/codex/src/lib.rs new file mode 100644 index 00000000..8a131da4 --- /dev/null +++ b/codex/src/lib.rs @@ -0,0 +1,12 @@ +//! codex worker library surface — re-exported so integration tests can drive +//! the modules in process. + +pub mod codex; +pub mod config; +pub mod events; +pub mod functions; +pub mod iii_prompt; +pub mod manifest; +pub mod map; +pub mod state; +pub mod wire; diff --git a/codex/src/main.rs b/codex/src/main.rs new file mode 100644 index 00000000..7c2c8cd5 --- /dev/null +++ b/codex/src/main.rs @@ -0,0 +1,86 @@ +use std::sync::Arc; + +use anyhow::Result; +use clap::Parser; +use iii_observability::OtelConfig; +use iii_sdk::{register_worker, InitOptions}; + +use codex::config::Config; +use codex::functions::register_all; +use codex::manifest; + +#[derive(Parser, Debug)] +#[command(name = "codex", about = "OpenAI Codex worker for iii agents")] +struct Cli { + /// Seed config loaded at boot. Defaults to ./config.yaml. + #[arg(long, default_value = "./config.yaml")] + config: String, + + #[arg(long, env = "III_URL", default_value = "ws://127.0.0.1:49134")] + url: String, + + /// Print the registry manifest as JSON and exit. + #[arg(long)] + manifest: bool, +} + +#[tokio::main] +async fn main() -> Result<()> { + let cli = Cli::parse(); + + if cli.manifest { + let m = manifest::build_manifest(); + println!( + "{}", + serde_json::to_string_pretty(&m).expect("manifest serializes") + ); + return Ok(()); + } + + tracing_subscriber::fmt() + .with_env_filter( + tracing_subscriber::EnvFilter::try_from_default_env() + .unwrap_or_else(|_| tracing_subscriber::EnvFilter::new("info")), + ) + .init(); + + let cfg = Arc::new(Config::load(&cli.config)?); + let url = if cli.url.is_empty() { + cfg.engine_url.clone() + } else { + cli.url.clone() + }; + tracing::info!(url = %url, config = %cli.config, "connecting to III engine"); + + let iii = register_worker( + &url, + InitOptions { + otel: Some(OtelConfig::default()), + ..Default::default() + }, + ); + + register_all(&iii, cfg); + tracing::info!("codex worker registered all functions, ready"); + + wait_for_shutdown_signal().await?; + tracing::info!("codex worker shutting down"); + iii.shutdown_async().await; + Ok(()) +} + +async fn wait_for_shutdown_signal() -> std::io::Result<()> { + #[cfg(unix)] + { + use tokio::signal::unix::{signal, SignalKind}; + let mut sigterm = signal(SignalKind::terminate())?; + tokio::select! { + r = tokio::signal::ctrl_c() => r, + _ = sigterm.recv() => Ok(()), + } + } + #[cfg(not(unix))] + { + tokio::signal::ctrl_c().await + } +} diff --git a/codex/src/manifest.rs b/codex/src/manifest.rs new file mode 100644 index 00000000..65d9859f --- /dev/null +++ b/codex/src/manifest.rs @@ -0,0 +1,38 @@ +//! Manifest emitted by `codex --manifest` for the registry publish pipeline. + +use serde::Serialize; + +const DESCRIPTION: &str = "OpenAI Codex as an iii worker — codex::* run headless Codex turns, mirror raw thread events onto codex::events, and stream AgentEvent frames onto agent::events."; + +#[derive(Serialize)] +pub struct ModuleManifest { + pub name: String, + pub version: String, + pub description: String, + pub default_config: serde_json::Value, + pub supported_targets: Vec, +} + +pub fn build_manifest() -> ModuleManifest { + ModuleManifest { + name: env!("CARGO_PKG_NAME").to_string(), + version: env!("CARGO_PKG_VERSION").to_string(), + description: DESCRIPTION.to_string(), + default_config: serde_json::json!({ + "defaults": { + "model": "", + "sandbox_mode": "workspace-write", + "approval_policy": "never", + "reasoning_effort": "", + "cwd": "", + "skip_git_repo_check": true, + }, + "events_stream": "agent::events", + "raw_events_stream": "codex::events", + "codex_executable": "", + "base_url": "", + "iii_context": true, + }), + supported_targets: vec![env!("TARGET").to_string()], + } +} diff --git a/codex/src/map.rs b/codex/src/map.rs new file mode 100644 index 00000000..6d802c87 --- /dev/null +++ b/codex/src/map.rs @@ -0,0 +1,90 @@ +//! Translate Codex thread items to the AgentEvent wire subset emitted on +//! `agent::events`. Command/patch/mcp/web items become function_execution +//! frames; agent_message/reasoning become message_complete. + +use serde_json::{json, Value}; + +use crate::codex::events_types::{CommandExecutionItem, McpToolCallItem, ThreadItemDetails}; +use crate::wire::Usage as WireUsage; + +/// Bus-style function id for an execution-type item. +pub fn function_id(details: &ThreadItemDetails) -> String { + match details { + ThreadItemDetails::CommandExecution(_) => "codex::shell".to_string(), + ThreadItemDetails::FileChange(_) => "codex::apply_patch".to_string(), + ThreadItemDetails::WebSearch(_) => "codex::web_search".to_string(), + ThreadItemDetails::McpToolCall(m) => format!("{}::{}", server_or(m, "mcp"), tool_or(m)), + _ => "codex::item".to_string(), + } +} + +fn server_or(m: &McpToolCallItem, fallback: &str) -> String { + if m.server.is_empty() { + fallback.to_string() + } else { + m.server.clone() + } +} + +fn tool_or(m: &McpToolCallItem) -> String { + if m.tool.is_empty() { + "tool".to_string() + } else { + m.tool.clone() + } +} + +/// True for the item types that map to function_execution_start/end. +pub fn is_exec_item(details: &ThreadItemDetails) -> bool { + matches!( + details, + ThreadItemDetails::CommandExecution(_) + | ThreadItemDetails::FileChange(_) + | ThreadItemDetails::McpToolCall(_) + | ThreadItemDetails::WebSearch(_) + ) +} + +pub fn args_for(details: &ThreadItemDetails) -> Value { + match details { + ThreadItemDetails::CommandExecution(c) => json!({ "command": c.command }), + ThreadItemDetails::FileChange(f) => json!({ "changes": f.changes }), + ThreadItemDetails::WebSearch(w) => json!({ "query": w.query }), + ThreadItemDetails::McpToolCall(m) => m.arguments.clone(), + _ => json!({}), + } +} + +pub fn result_content(details: &ThreadItemDetails) -> Value { + let text = match details { + ThreadItemDetails::CommandExecution(c) => c.aggregated_output.clone(), + ThreadItemDetails::FileChange(f) => f.changes.to_string(), + ThreadItemDetails::WebSearch(w) => w.query.clone(), + ThreadItemDetails::McpToolCall(m) => match &m.error { + Some(e) => e.message.clone(), + None => m.result.to_string(), + }, + _ => String::new(), + }; + json!([{ "type": "text", "text": text }]) +} + +pub fn is_error_item(details: &ThreadItemDetails) -> bool { + match details { + ThreadItemDetails::CommandExecution(CommandExecutionItem { + status, exit_code, .. + }) => status.is_failure() || matches!(exit_code, Some(code) if *code != 0), + ThreadItemDetails::FileChange(f) => f.status.is_failure(), + ThreadItemDetails::McpToolCall(m) => m.status.is_failure() || m.error.is_some(), + _ => false, + } +} + +pub fn map_usage(u: &crate::codex::events_types::Usage) -> WireUsage { + WireUsage { + input_tokens: u.input_tokens, + output_tokens: u.output_tokens, + cache_read_tokens: u.cached_input_tokens, + reasoning_tokens: u.reasoning_output_tokens, + } +} diff --git a/codex/src/map.ts b/codex/src/map.ts deleted file mode 100644 index ea247fa3..00000000 --- a/codex/src/map.ts +++ /dev/null @@ -1,157 +0,0 @@ -/** - * Map Codex SDK thread items to the AgentEvent wire subset. One Codex turn - * (codex::run call) becomes: - * - * agent_message / reasoning item -> message_complete - * command_execution / file_change / mcp_tool_call / web_search item - * -> function_execution_start (item.started) + function_execution_end - * turn.completed -> turn_end + agent_end - */ - -import type { - AgentMessage, - AssistantMessage, - ContentBlock, - FunctionResultMessage, - Usage, -} from './types.js'; - -/** Loose view of a Codex SDK ThreadItem — the SDK union, untyped at the seam. */ -export type CodexItem = { - id: string; - type: string; - text?: string; - command?: string; - aggregated_output?: string; - exit_code?: number; - status?: string; - changes?: unknown; - server?: string; - tool?: string; - arguments?: unknown; - result?: unknown; - error?: { message?: string }; - query?: string; -}; - -const EXEC_ITEM_TYPES = new Set([ - 'command_execution', - 'file_change', - 'mcp_tool_call', - 'web_search', -]); - -export function isExecItem(item: CodexItem): boolean { - return EXEC_ITEM_TYPES.has(item.type); -} - -export function functionIdForItem(item: CodexItem): string { - switch (item.type) { - case 'command_execution': - return 'codex::shell'; - case 'file_change': - return 'codex::apply_patch'; - case 'web_search': - return 'codex::web_search'; - case 'mcp_tool_call': - return `${item.server ?? 'mcp'}::${item.tool ?? 'tool'}`; - default: - return `codex::${item.type}`; - } -} - -export function argsForItem(item: CodexItem): unknown { - switch (item.type) { - case 'command_execution': - return { command: item.command ?? '' }; - case 'file_change': - return { changes: item.changes ?? [] }; - case 'web_search': - return { query: item.query ?? '' }; - case 'mcp_tool_call': - return item.arguments ?? {}; - default: - return {}; - } -} - -export function resultContentForItem(item: CodexItem): ContentBlock[] { - switch (item.type) { - case 'command_execution': - return [{ type: 'text', text: item.aggregated_output ?? '' }]; - case 'file_change': - return [{ type: 'text', text: JSON.stringify(item.changes ?? []) }]; - case 'web_search': - return [{ type: 'text', text: item.query ?? '' }]; - case 'mcp_tool_call': - return [ - { - type: 'text', - text: item.error?.message ?? JSON.stringify(item.result ?? null), - }, - ]; - default: - return [{ type: 'text', text: JSON.stringify(item) }]; - } -} - -export function isErrorItem(item: CodexItem): boolean { - if (item.status === 'failed') return true; - return ( - item.type === 'command_execution' && typeof item.exit_code === 'number' && item.exit_code !== 0 - ); -} - -export function makeAssistantMessage( - content: ContentBlock[], - model: string, - usage: Usage | null, - stop_reason = 'end', -): AssistantMessage { - return { - role: 'assistant', - content, - stop_reason, - error_message: null, - usage, - model, - provider: 'codex', - timestamp: Date.now(), - }; -} - -export function makeFunctionResult( - function_call_id: string, - function_id: string, - content: ContentBlock[], - is_error: boolean, -): FunctionResultMessage { - return { - role: 'function_result', - function_call_id, - function_id, - content, - details: null, - is_error, - timestamp: Date.now(), - }; -} - -export function mapUsage(raw: unknown): Usage | null { - if (typeof raw !== 'object' || raw === null) return null; - const u = raw as Record; - return { - input_tokens: u.input_tokens ?? 0, - output_tokens: u.output_tokens ?? 0, - cache_read_tokens: u.cached_input_tokens ?? 0, - reasoning_tokens: u.reasoning_output_tokens ?? 0, - }; -} - -export function lastAssistant(messages: AgentMessage[]): AgentMessage { - if (messages.length === 0) return makeAssistantMessage([], '', null); - for (let i = messages.length - 1; i >= 0; i--) { - if (messages[i].role === 'assistant') return messages[i]; - } - return messages[messages.length - 1]; -} diff --git a/codex/src/run.ts b/codex/src/run.ts deleted file mode 100644 index f47ca04d..00000000 --- a/codex/src/run.ts +++ /dev/null @@ -1,394 +0,0 @@ -/** - * codex::* function registrations. `codex::run` accepts either a bare - * `prompt` string or a `messages` array (the same input contract as - * `run::start_and_wait`), so the acp worker can drive Codex with - * `--brain-fn codex::run` and any bus caller gets the same shape as the - * claude-code worker. - */ - -import { randomUUID } from 'node:crypto'; -import { Codex, type ThreadOptions } from '@openai/codex-sdk'; -import type { ISdk } from 'iii-sdk'; -import { z } from 'zod'; -import type { Config } from './config.js'; -import type { Emit } from './events.js'; -import { III_CONTEXT_PROMPT } from './iii-prompt.js'; -import { - argsForItem, - type CodexItem, - functionIdForItem, - isErrorItem, - isExecItem, - lastAssistant, - makeAssistantMessage, - makeFunctionResult, - mapUsage, - resultContentForItem, -} from './map.js'; -import { listSessions, loadSession, saveSession } from './state.js'; -import type { AgentMessage, FunctionResultMessage, SessionRecord } from './types.js'; - -const ContentBlockSchema = z.object({ type: z.string() }).passthrough(); -const MessageSchema = z.object({ - role: z.string(), - content: z.union([z.string(), z.array(ContentBlockSchema)]), -}); - -const RunPayloadSchema = z.object({ - session_id: z - .string() - .optional() - .describe('iii session id; reuse to resume the same Codex thread'), - prompt: z.string().optional().describe('The user prompt for this turn'), - messages: z - .array(MessageSchema) - .optional() - .describe( - 'Alternative to prompt: role/content messages; the last user entry becomes the prompt', - ), - model: z.string().optional().describe('Model id; empty = Codex default'), - cwd: z.string().optional().describe('Working directory the turn runs in'), - sandbox_mode: z - .enum(['read-only', 'workspace-write', 'danger-full-access']) - .optional() - .describe('Codex sandbox mode for this turn'), - approval_policy: z - .enum(['never', 'on-request', 'on-failure', 'untrusted']) - .optional() - .describe('Codex approval policy; headless callers use never'), - reasoning_effort: z - .enum(['minimal', 'low', 'medium', 'high', 'xhigh']) - .optional() - .describe('Model reasoning effort'), - skip_git_repo_check: z.boolean().optional().describe('Allow running outside a git repository'), - iii_context: z - .boolean() - .optional() - .describe( - 'Inject the iii runtime discovery prompt (engine catalog via the iii CLI) on new threads', - ), - output_schema: z - .record(z.string(), z.unknown()) - .optional() - .describe('JSON schema for structured final output'), - images: z.array(z.string()).optional().describe('Paths to local images attached to the prompt'), - codex_config: z - .record(z.string(), z.unknown()) - .optional() - .describe( - 'Codex config.toml overrides for this turn (flattened to --config key=value), e.g. mcp_servers, model_providers, profiles', - ), - /** Raw Codex SDK ThreadOptions, spread over everything the worker - * derives — the pure pass-through (camelCase as in the SDK). */ - options: z - .record(z.string(), z.unknown()) - .optional() - .describe( - 'Raw Codex SDK ThreadOptions forwarded verbatim (camelCase), e.g. networkAccessEnabled, webSearchMode, additionalDirectories', - ), -}); - -export type RunPayload = z.infer; -export { RunPayloadSchema }; - -const SessionIdSchema = z.object({ - session_id: z.string().describe('iii session id returned by codex::run / codex::start'), -}); - -const RUN_REQUEST_FORMAT = z.toJSONSchema(RunPayloadSchema); -const SESSION_ID_FORMAT = z.toJSONSchema(SessionIdSchema); - -type LiveRun = { interrupt: () => Promise }; -const live = new Map(); - -/** Best-effort: flip a session record to `error` so a failed background run - * never leaves it stuck in `working`. Swallows its own failure. */ -async function markSessionError(iii: ISdk, session_id: string): Promise { - try { - const record = await loadSession(iii, session_id); - if (record && record.status === 'working') { - record.status = 'error'; - record.updated_at_ms = Date.now(); - await saveSession(iii, record); - } - } catch (err) { - console.error(`failed to mark session ${session_id} error: ${String(err)}`); - } -} - -export function extractPrompt(payload: RunPayload): string { - if (typeof payload.prompt === 'string') return payload.prompt; - const users = (payload.messages ?? []).filter((m) => m.role === 'user'); - const last = users[users.length - 1]; - if (!last) throw new Error('codex::run requires `prompt` or a user message in `messages`'); - if (typeof last.content === 'string') return last.content; - return last.content - .map((b) => ('text' in b && typeof b.text === 'string' ? b.text : '')) - .filter(Boolean) - .join('\n'); -} - -export async function executeRun( - iii: ISdk, - cfg: Config, - emit: Emit, - emitRaw: Emit, - payload: RunPayload, -): Promise> { - const session_id = payload.session_id ?? randomUUID(); - const prompt = extractPrompt(payload); - // one live run per session: the in-process handle is what codex::stop - // targets, so a second concurrent run would clobber it and race the record - if (live.has(session_id)) { - return { session_id, busy: true, reason: 'a run is already active for this session' }; - } - const prior = await loadSession(iii, session_id); - const d = cfg.defaults; - - const record: SessionRecord = prior ?? { - session_id, - codex_thread_id: null, - cwd: payload.cwd ?? d.cwd, - model: payload.model ?? d.model, - status: 'working', - turns: 0, - usage: null, - updated_at_ms: Date.now(), - }; - if (payload.cwd) record.cwd = payload.cwd; - if (payload.model) record.model = payload.model; - - const reasoning = payload.reasoning_effort ?? (d.reasoning_effort || undefined); - const threadOptions: ThreadOptions = { - ...(record.model ? { model: record.model } : {}), - ...(record.cwd ? { workingDirectory: record.cwd } : {}), - sandboxMode: payload.sandbox_mode ?? d.sandbox_mode, - approvalPolicy: payload.approval_policy ?? d.approval_policy, - skipGitRepoCheck: payload.skip_git_repo_check ?? d.skip_git_repo_check, - ...(reasoning ? { modelReasoningEffort: reasoning } : {}), - ...(payload.options as Partial | undefined), - }; - - const iiiContext = payload.iii_context ?? cfg.iii_context; - const callerConfig = (payload.codex_config ?? {}) as Record; - const codexConfig = { - // developer_instructions is a per-turn developer message in Codex's - // turn context; a caller-supplied value wins over the iii block - ...(iiiContext && callerConfig.developer_instructions === undefined - ? { developer_instructions: III_CONTEXT_PROMPT } - : {}), - ...callerConfig, - }; - const codex = new Codex({ - ...(cfg.codex_executable ? { codexPathOverride: cfg.codex_executable } : {}), - ...(cfg.base_url ? { baseUrl: cfg.base_url } : {}), - ...(Object.keys(codexConfig).length ? { config: codexConfig as never } : {}), - }); - const thread = prior?.codex_thread_id - ? codex.resumeThread(prior.codex_thread_id, threadOptions) - : codex.startThread(threadOptions); - - const abort = new AbortController(); - const handle: LiveRun = { interrupt: async () => abort.abort() }; - live.set(session_id, handle); - - // persist `working` only once the thread + live handle exist, so a throw - // during Codex construction never leaves the record stuck in `working` - record.status = 'working'; - record.updated_at_ms = Date.now(); - await saveSession(iii, record); - - const transcript: AgentMessage[] = []; - const pendingResults: FunctionResultMessage[] = []; - const started = new Map(); - let usage: SessionRecord['usage'] = null; - let resultText = ''; - let stopReason = 'end'; - let isError = false; - - try { - const input = payload.images?.length - ? [ - { type: 'text' as const, text: prompt }, - ...payload.images.map((path) => ({ type: 'local_image' as const, path })), - ] - : prompt; - const { events } = await thread.runStreamed(input, { - signal: abort.signal, - ...(payload.output_schema ? { outputSchema: payload.output_schema } : {}), - }); - for await (const event of events) { - await emitRaw(session_id, event); - if (event.type === 'thread.started') { - record.codex_thread_id = event.thread_id; - await saveSession(iii, record); - } else if (event.type === 'item.started' || event.type === 'item.updated') { - const item = event.item as CodexItem; - if (isExecItem(item) && !started.has(item.id)) { - const function_id = functionIdForItem(item); - started.set(item.id, { function_id, started_at: Date.now() }); - await emit(session_id, { - type: 'function_execution_start', - function_call_id: item.id, - function_id, - args: argsForItem(item), - }); - } - } else if (event.type === 'item.completed') { - const item = event.item as CodexItem; - if (item.type === 'agent_message' || item.type === 'reasoning') { - const block = - item.type === 'agent_message' - ? ({ type: 'text', text: item.text ?? '' } as const) - : ({ type: 'thinking', text: item.text ?? '' } as const); - const assistant = makeAssistantMessage([block], record.model, null); - transcript.push(assistant); - await emit(session_id, { type: 'message_complete', message: assistant }); - if (item.type === 'agent_message') resultText = item.text ?? ''; - } else if (isExecItem(item)) { - const function_id = functionIdForItem(item); - const begun = started.get(item.id); - if (!begun) { - await emit(session_id, { - type: 'function_execution_start', - function_call_id: item.id, - function_id, - args: argsForItem(item), - }); - } - const content = resultContentForItem(item); - const fr = makeFunctionResult(item.id, function_id, content, isErrorItem(item)); - transcript.push(fr); - pendingResults.push(fr); - await emit(session_id, { - type: 'function_execution_end', - function_call_id: item.id, - function_id, - result: { content, details: null }, - is_error: fr.is_error, - duration_ms: begun ? Date.now() - begun.started_at : 0, - }); - } - } else if (event.type === 'turn.completed') { - usage = mapUsage(event.usage); - } else if (event.type === 'turn.failed') { - isError = true; - stopReason = 'error'; - resultText = event.error?.message ?? 'turn failed'; - } else if (event.type === 'error') { - isError = true; - stopReason = 'error'; - resultText = event.message ?? 'stream error'; - } - } - } catch (err) { - if (abort.signal.aborted) { - stopReason = 'aborted'; - } else { - isError = true; - stopReason = 'error'; - resultText = String(err); - } - } finally { - if (live.get(session_id) === handle) live.delete(session_id); - } - - record.status = isError ? 'error' : 'done'; - record.turns += 1; - record.usage = usage ?? record.usage; - record.codex_thread_id = thread.id ?? record.codex_thread_id; - record.updated_at_ms = Date.now(); - await saveSession(iii, record); - - if (transcript.length === 0) { - transcript.push( - makeAssistantMessage([{ type: 'text', text: resultText }], record.model, usage, stopReason), - ); - } - await emit(session_id, { - type: 'turn_end', - message: lastAssistant(transcript), - function_results: pendingResults, - }); - await emit(session_id, { type: 'agent_end', messages: transcript }); - - return { - session_id, - codex_thread_id: record.codex_thread_id, - result: resultText, - stop_reason: stopReason, - is_error: isError, - num_turns: record.turns, - usage: record.usage, - }; -} - -export function register(iii: ISdk, cfg: Config, emit: Emit, emitRaw: Emit): void { - iii.registerFunction( - 'codex::run', - async (payload: unknown) => - executeRun(iii, cfg, emit, emitRaw, RunPayloadSchema.parse(payload ?? {})), - { - description: - 'Run one Codex turn and wait for the result. Accepts `prompt` or a `messages` array plus a raw SDK `options` pass-through; streams raw Codex events onto codex::events, AgentEvent frames onto agent::events, and returns {session_id, result, usage}.', - request_format: RUN_REQUEST_FORMAT, - }, - ); - - iii.registerFunction( - 'codex::start', - async (payload: unknown) => { - const parsed = RunPayloadSchema.parse(payload ?? {}); - const session_id = parsed.session_id ?? randomUUID(); - void executeRun(iii, cfg, emit, emitRaw, { ...parsed, session_id }).catch(async (err) => { - console.error(`codex::start background run failed for ${session_id}: ${String(err)}`); - // never leave the record stuck in `working`: a failure inside the - // turn's own terminal save lands here, so mark it error best-effort - await markSessionError(iii, session_id); - }); - return { session_id, started: true }; - }, - { - description: - 'Start a Codex turn and return immediately; watch codex::events / agent::events (group_id = session_id) for progress and turn_end.', - request_format: RUN_REQUEST_FORMAT, - }, - ); - - iii.registerFunction( - 'codex::stop', - async (payload: unknown) => { - const { session_id } = SessionIdSchema.parse(payload ?? {}); - const run = live.get(session_id); - if (!run) return { session_id, stopped: false, reason: 'no live run' }; - await run.interrupt(); - return { session_id, stopped: true }; - }, - { - description: 'Interrupt a live Codex run for a session.', - request_format: SESSION_ID_FORMAT, - }, - ); - - iii.registerFunction( - 'codex::status', - async (payload: unknown) => { - const { session_id } = SessionIdSchema.parse(payload ?? {}); - const record = await loadSession(iii, session_id); - return { session_id, live: live.has(session_id), record }; - }, - { - description: 'Point-in-time status of a Codex session.', - request_format: SESSION_ID_FORMAT, - }, - ); - - iii.registerFunction( - 'codex::sessions::list', - async () => ({ sessions: await listSessions(iii) }), - { - description: 'List every Codex session this worker has run.', - request_format: { type: 'object', properties: {} }, - }, - ); -} diff --git a/codex/src/state.rs b/codex/src/state.rs new file mode 100644 index 00000000..f7f66db2 --- /dev/null +++ b/codex/src/state.rs @@ -0,0 +1,81 @@ +//! Session registry on engine state. Scope `codex_sessions`, key = iii +//! session_id. Maps iii sessions to Codex thread ids so a run with the same +//! session_id resumes the underlying Codex thread (persisted by the CLI under +//! ~/.codex/sessions). Trigger errors propagate (fail-fast); swallowing them +//! would silently start a fresh conversation instead of resuming. + +use iii_sdk::{TriggerRequest, III}; +use serde_json::json; + +use crate::wire::SessionRecord; + +const SCOPE: &str = "codex_sessions"; +const TIMEOUT_MS: u64 = 5_000; + +pub async fn load_session(iii: &III, session_id: &str) -> anyhow::Result> { + let v = iii + .trigger(TriggerRequest { + function_id: "state::get".to_string(), + payload: json!({ "scope": SCOPE, "key": session_id }), + action: None, + timeout_ms: Some(TIMEOUT_MS), + }) + .await + .map_err(|e| anyhow::anyhow!("state::get failed: {e}"))?; + // The engine returns the stored value directly (no envelope); null when absent. + if v.is_null() { + return Ok(None); + } + match serde_json::from_value::(v) { + Ok(rec) => Ok(Some(rec)), + Err(_) => Ok(None), + } +} + +pub async fn save_session(iii: &III, record: &SessionRecord) -> anyhow::Result<()> { + iii.trigger(TriggerRequest { + function_id: "state::set".to_string(), + payload: json!({ "scope": SCOPE, "key": record.session_id, "value": record }), + action: None, + timeout_ms: Some(TIMEOUT_MS), + }) + .await + .map_err(|e| anyhow::anyhow!("state::set failed: {e}"))?; + Ok(()) +} + +pub async fn list_sessions(iii: &III) -> anyhow::Result> { + let v = iii + .trigger(TriggerRequest { + function_id: "state::list".to_string(), + payload: json!({ "scope": SCOPE }), + action: None, + timeout_ms: Some(TIMEOUT_MS), + }) + .await + .map_err(|e| anyhow::anyhow!("state::list failed: {e}"))?; + let arr = match v.as_array() { + Some(a) => a, + None => return Ok(vec![]), + }; + Ok(arr + .iter() + .filter_map(|item| serde_json::from_value::(item.clone()).ok()) + .collect()) +} + +/// Best-effort flip to `error` so a failed background run never leaves a +/// record stuck in `working`. Swallows its own failure. +pub async fn mark_error(iii: &III, session_id: &str) { + match load_session(iii, session_id).await { + Ok(Some(mut rec)) if matches!(rec.status, crate::wire::Status::Working) => { + rec.status = crate::wire::Status::Error; + rec.updated_at_ms = crate::wire::now_ms(); + if let Err(e) = save_session(iii, &rec).await { + tracing::error!(session_id, error = %e, "failed to mark session error"); + } + } + Ok(_) => {} + Err(e) => tracing::error!(session_id, error = %e, "mark_error load failed"), + } +} diff --git a/codex/src/state.ts b/codex/src/state.ts deleted file mode 100644 index 8fd10805..00000000 --- a/codex/src/state.ts +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Session registry on engine state. Scope `codex_sessions`, key = iii - * session_id. Maps iii sessions to Codex thread ids so `codex::run` with the - * same session_id resumes the underlying Codex thread (persisted by the CLI - * in ~/.codex/sessions). - */ - -import type { ISdk } from 'iii-sdk'; -import type { SessionRecord } from './types.js'; - -const SCOPE = 'codex_sessions'; - -export async function loadSession(iii: ISdk, session_id: string): Promise { - const res = await iii.trigger({ - function_id: 'state::get', - payload: { scope: SCOPE, key: session_id }, - }); - return res && typeof res === 'object' && 'session_id' in res ? res : null; -} - -export async function saveSession(iii: ISdk, record: SessionRecord): Promise { - await iii.trigger({ - function_id: 'state::set', - payload: { scope: SCOPE, key: record.session_id, value: record }, - }); -} - -export async function listSessions(iii: ISdk): Promise { - const res = await iii.trigger({ - function_id: 'state::list', - payload: { scope: SCOPE }, - }); - return Array.isArray(res) ? res : []; -} diff --git a/codex/src/types.ts b/codex/src/types.ts deleted file mode 100644 index 7c9b053f..00000000 --- a/codex/src/types.ts +++ /dev/null @@ -1,87 +0,0 @@ -/** - * Wire types for the AgentEvent subset this worker emits onto the - * `agent::events` stream. Mirrors harness/src/types/* in iii-hq/workers so - * the console and acp worker render Codex turns like any other agent worker. - */ - -export type TextContent = { type: 'text'; text: string }; -export type ThinkingContent = { type: 'thinking'; text: string; signature?: string }; -export type FunctionCallContent = { - type: 'function_call'; - id: string; - function_id: string; - arguments: unknown; -}; -export type FunctionResultContent = { - type: 'function_result'; - function_call_id: string; - content: ContentBlock[]; - is_error?: boolean; -}; -export type ContentBlock = - | TextContent - | ThinkingContent - | FunctionCallContent - | FunctionResultContent; - -export type Usage = { - input_tokens: number; - output_tokens: number; - cache_read_tokens?: number; - reasoning_tokens?: number; -}; - -export type AssistantMessage = { - role: 'assistant'; - content: ContentBlock[]; - stop_reason: string; - error_message?: string | null; - usage?: Usage | null; - model: string; - provider: string; - timestamp: number; -}; - -export type UserMessage = { role: 'user'; content: ContentBlock[]; timestamp: number }; - -export type FunctionResultMessage = { - role: 'function_result'; - function_call_id: string; - function_id: string; - content: ContentBlock[]; - details: unknown; - is_error: boolean; - timestamp: number; -}; - -export type AgentMessage = UserMessage | AssistantMessage | FunctionResultMessage; - -export type AgentEvent = - | { type: 'agent_end'; messages: AgentMessage[] } - | { type: 'turn_end'; message: AgentMessage; function_results: FunctionResultMessage[] } - | { type: 'message_complete'; message: AgentMessage; body_streamed?: boolean } - | { - type: 'function_execution_start'; - function_call_id: string; - function_id: string; - args: unknown; - } - | { - type: 'function_execution_end'; - function_call_id: string; - function_id: string; - result: { content: ContentBlock[]; details: unknown }; - is_error: boolean; - duration_ms: number; - }; - -export type SessionRecord = { - session_id: string; - codex_thread_id: string | null; - cwd: string; - model: string; - status: 'working' | 'done' | 'error'; - turns: number; - usage: Usage | null; - updated_at_ms: number; -}; diff --git a/codex/src/wire.rs b/codex/src/wire.rs new file mode 100644 index 00000000..4fc84cb6 --- /dev/null +++ b/codex/src/wire.rs @@ -0,0 +1,79 @@ +//! Wire types emitted onto `agent::events` (translated AgentEvent subset) and +//! the persisted session record. Mirrors the harness AgentEvent shape so the +//! console and acp worker render Codex turns like any other agent worker. + +use serde::{Deserialize, Serialize}; +use serde_json::Value; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Usage { + pub input_tokens: i64, + pub output_tokens: i64, + pub cache_read_tokens: i64, + pub reasoning_tokens: i64, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] +pub enum Status { + Working, + Done, + Error, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct SessionRecord { + pub session_id: String, + pub codex_thread_id: Option, + pub cwd: String, + pub model: String, + pub status: Status, + pub turns: i64, + pub usage: Option, + pub updated_at_ms: u64, +} + +/// One block of assistant/tool content on the translated stream. +#[derive(Debug, Clone, Serialize)] +#[serde(tag = "type", rename_all = "snake_case")] +pub enum ContentBlock { + Text { text: String }, + Thinking { text: String }, +} + +#[derive(Debug, Clone, Serialize)] +pub struct AssistantMessage { + pub role: &'static str, // "assistant" + pub content: Vec, + pub stop_reason: String, + pub model: String, + pub provider: &'static str, // "codex" + pub usage: Option, + pub timestamp: u64, +} + +pub fn now_ms() -> u64 { + use std::time::{SystemTime, UNIX_EPOCH}; + SystemTime::now() + .duration_since(UNIX_EPOCH) + .map(|d| d.as_millis() as u64) + .unwrap_or(0) +} + +pub fn assistant_message( + content: Vec, + model: &str, + usage: Option, + stop_reason: &str, +) -> Value { + serde_json::to_value(AssistantMessage { + role: "assistant", + content, + stop_reason: stop_reason.to_string(), + model: model.to_string(), + provider: "codex", + usage, + timestamp: now_ms(), + }) + .unwrap_or(Value::Null) +} diff --git a/codex/tests/_helpers/fake-codex.ts b/codex/tests/_helpers/fake-codex.ts deleted file mode 100644 index 5a283c70..00000000 --- a/codex/tests/_helpers/fake-codex.ts +++ /dev/null @@ -1,105 +0,0 @@ -/** Scripted Codex SDK replacement: a fake Codex implementation whose threads - * yield a fixed event list and record the options and prompt they were - * driven with. Plain functions returning objects (not ES classes) so they - * slot into vi.fn().mockImplementation for both `new Codex()` and calls. */ - -export type CodexCapture = { - codexOptions?: Record; - input?: unknown; - threadOptions?: Record; - resumedFrom?: string; - prompt?: string; - turnOptions?: Record; - aborted: boolean; -}; - -export function fakeCodexClass(events: Array>, capture: CodexCapture) { - return function FakeCodex(options: Record) { - capture.codexOptions = options; - return { - startThread(threadOptions: Record) { - capture.threadOptions = threadOptions; - return makeThread(events, capture); - }, - resumeThread(id: string, threadOptions: Record) { - capture.resumedFrom = id; - capture.threadOptions = threadOptions; - return makeThread(events, capture, id); - }, - }; - }; -} - -function makeThread( - events: Array>, - capture: CodexCapture, - id: string | null = null, -) { - const threadIdFromScript = events.find((e) => e.type === 'thread.started') as - | { thread_id?: string } - | undefined; - return { - id: id ?? threadIdFromScript?.thread_id ?? null, - runStreamed: async (prompt: string | unknown[], turnOptions?: Record) => { - capture.prompt = typeof prompt === 'string' ? prompt : undefined; - capture.input = prompt; - capture.turnOptions = turnOptions; - const signal = turnOptions?.signal as AbortSignal | undefined; - return { - events: (async function* () { - for (const event of events) { - if (signal?.aborted) { - capture.aborted = true; - throw new Error('aborted'); - } - yield event; - } - })(), - }; - }, - }; -} - -export const threadStarted = { type: 'thread.started', thread_id: 'th-1' }; -export const turnStarted = { type: 'turn.started' }; - -export const commandStarted = { - type: 'item.started', - item: { id: 'item-1', type: 'command_execution', command: 'ls', status: 'in_progress' }, -}; - -export const commandCompleted = { - type: 'item.completed', - item: { - id: 'item-1', - type: 'command_execution', - command: 'ls', - aggregated_output: 'files', - exit_code: 0, - status: 'completed', - }, -}; - -export const agentMessage = { - type: 'item.completed', - item: { id: 'item-2', type: 'agent_message', text: 'done' }, -}; - -export const turnCompleted = { - type: 'turn.completed', - usage: { - input_tokens: 5, - cached_input_tokens: 100, - output_tokens: 2, - reasoning_output_tokens: 7, - }, -}; - -export const fullTurn = [ - threadStarted, - turnStarted, - commandStarted, - commandCompleted, - agentMessage, - turnCompleted, -]; diff --git a/codex/tests/_helpers/fake-iii.ts b/codex/tests/_helpers/fake-iii.ts deleted file mode 100644 index 362dc7ed..00000000 --- a/codex/tests/_helpers/fake-iii.ts +++ /dev/null @@ -1,57 +0,0 @@ -import type { ISdk } from 'iii-sdk'; -import { vi } from 'vitest'; - -export type TriggerCall = { function_id: string; payload: Record }; - -export type FakeIii = { - iii: ISdk; - calls: TriggerCall[]; - state: Map; - streamFrames: (stream: string) => Array>; - registered: Map Promise>; -}; - -/** - * In-memory stand-in for the engine bus: `state::get/set/list` backed by a - * Map keyed `${scope}/${key}`, `stream::set` recorded as plain calls, and - * `registerFunction` captured so tests can invoke handlers at the same - * unknown boundary the engine uses. - */ -export function fakeIii(): FakeIii { - const calls: TriggerCall[] = []; - const state = new Map(); - const registered = new Map Promise>(); - - const iii = { - trigger: async (req: { function_id: string; payload: Record }) => { - // Clone like the wire would: the live bus serializes payloads, so - // later caller-side mutation must not rewrite recorded calls. - const payload = structuredClone(req.payload); - calls.push({ function_id: req.function_id, payload }); - const { scope, key, value } = payload as { scope?: string; key?: string; value?: unknown }; - if (req.function_id === 'state::set') { - state.set(`${scope}/${key}`, value); - return null; - } - if (req.function_id === 'state::get') return state.get(`${scope}/${key}`) ?? null; - if (req.function_id === 'state::list') { - return [...state.entries()].filter(([k]) => k.startsWith(`${scope}/`)).map(([, v]) => v); - } - return null; - }, - registerFunction: vi.fn((fnId: string, handler: (payload: unknown) => Promise) => { - registered.set(fnId, handler); - }), - } as unknown as ISdk; - - const streamFrames = (stream: string) => - calls - .filter( - (c) => - c.function_id === 'stream::set' && - (c.payload as { stream_name?: string }).stream_name === stream, - ) - .map((c) => c.payload); - - return { iii, calls, state, streamFrames, registered }; -} diff --git a/codex/tests/args.rs b/codex/tests/args.rs new file mode 100644 index 00000000..9c709e7f --- /dev/null +++ b/codex/tests/args.rs @@ -0,0 +1,126 @@ +//! Arg + config serialization tests. + +use codex::codex::args::{build_args, resolve, toml_value, ResolvedOptions}; +use codex::config::Config; +use codex::functions::types::RunRequest; +use serde_json::{json, Map, Value}; + +fn opts() -> ResolvedOptions { + ResolvedOptions { + model: String::new(), + cwd: String::new(), + sandbox_mode: "workspace-write".into(), + approval_policy: "never".into(), + reasoning_effort: String::new(), + skip_git_repo_check: true, + base_url: String::new(), + config: Map::new(), + images: vec![], + additional_directories: vec![], + } +} + +#[test] +fn builds_base_exec_json_invocation() { + let a = build_args(&opts(), None, None); + assert_eq!(a[0], "exec"); + assert!(a.contains(&"--json".to_string())); + assert!(a.contains(&"--sandbox".to_string())); + assert!(a.contains(&"workspace-write".to_string())); + assert!(a.contains(&"--skip-git-repo-check".to_string())); + // approval_policy goes through --config + assert!(a.iter().any(|s| s.starts_with("approval_policy="))); +} + +#[test] +fn resume_appends_subcommand() { + let a = build_args(&opts(), Some("th-1"), None); + let i = a + .iter() + .position(|s| s == "resume") + .expect("resume present"); + assert_eq!(a[i + 1], "th-1"); +} + +#[test] +fn output_schema_path_passed() { + let a = build_args(&opts(), None, Some("/tmp/schema.json")); + let i = a.iter().position(|s| s == "--output-schema").unwrap(); + assert_eq!(a[i + 1], "/tmp/schema.json"); +} + +#[test] +fn model_cwd_images_mapped() { + let mut o = opts(); + o.model = "gpt-5.2-codex".into(); + o.cwd = "/repo".into(); + o.images = vec!["/tmp/a.png".into()]; + let a = build_args(&o, None, None); + let m = a.iter().position(|s| s == "--model").unwrap(); + assert_eq!(a[m + 1], "gpt-5.2-codex"); + let c = a.iter().position(|s| s == "--cd").unwrap(); + assert_eq!(a[c + 1], "/repo"); + let img = a.iter().position(|s| s == "--image").unwrap(); + assert_eq!(a[img + 1], "/tmp/a.png"); +} + +#[test] +fn toml_value_quotes_and_escapes_multiline_strings() { + let v = toml_value(&Value::String("line1\nline2 \"q\"".into())); + // toml string literal: round-trips through the toml parser + let parsed: toml::Value = format!("k = {v}").parse().unwrap(); + assert_eq!(parsed["k"].as_str().unwrap(), "line1\nline2 \"q\""); +} + +#[test] +fn config_overrides_serialize_as_key_value() { + let mut o = opts(); + o.config.insert( + "mcp_servers".into(), + json!({ "github": { "command": "gh-mcp" } }), + ); + let a = build_args(&o, None, None); + assert!(a.iter().any(|s| s.starts_with("mcp_servers="))); +} + +#[test] +fn resolve_injects_developer_instructions_when_context_on() { + let req = RunRequest::default(); + let cfg = Config::default(); + let o = resolve(&req, &cfg, None, None, Some("IIICTX")); + assert_eq!( + o.config + .get("developer_instructions") + .and_then(Value::as_str), + Some("IIICTX") + ); +} + +#[test] +fn resolve_caller_developer_instructions_wins() { + let req = RunRequest { + codex_config: Some(json!({ "developer_instructions": "house rules" })), + ..Default::default() + }; + let cfg = Config::default(); + let o = resolve(&req, &cfg, None, None, Some("IIICTX")); + assert_eq!( + o.config + .get("developer_instructions") + .and_then(Value::as_str), + Some("house rules") + ); +} + +#[test] +fn resolve_honors_per_turn_overrides_over_prior() { + let req = RunRequest { + cwd: Some("/new".into()), + model: Some("new-model".into()), + ..Default::default() + }; + let cfg = Config::default(); + let o = resolve(&req, &cfg, Some("old-model"), Some("/old"), None); + assert_eq!(o.cwd, "/new"); + assert_eq!(o.model, "new-model"); +} diff --git a/codex/tests/config.test.ts b/codex/tests/config.test.ts deleted file mode 100644 index de987d95..00000000 --- a/codex/tests/config.test.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { mkdtemp, writeFile } from 'node:fs/promises'; -import { tmpdir } from 'node:os'; -import { join } from 'node:path'; -import { describe, expect, it } from 'vitest'; -import { loadConfig } from '../src/config.js'; - -describe('loadConfig', () => { - it('returns full defaults when the file is missing', async () => { - const cfg = await loadConfig('/nonexistent/config.yaml'); - expect(cfg.engine_url).toBe('ws://127.0.0.1:49134'); - expect(cfg.defaults.sandbox_mode).toBe('workspace-write'); - expect(cfg.defaults.approval_policy).toBe('never'); - expect(cfg.defaults.skip_git_repo_check).toBe(true); - expect(cfg.events_stream).toBe('agent::events'); - expect(cfg.raw_events_stream).toBe('codex::events'); - expect(cfg.iii_context).toBe(true); - expect(cfg.codex_executable).toBe(''); - expect(cfg.base_url).toBe(''); - }); - - it('merges a partial file over defaults', async () => { - const dir = await mkdtemp(join(tmpdir(), 'codex-config-')); - const path = join(dir, 'config.yaml'); - await writeFile( - path, - ['engine_url: ws://10.0.0.1:49134', 'defaults:', ' sandbox_mode: read-only'].join('\n'), - ); - const cfg = await loadConfig(path); - expect(cfg.engine_url).toBe('ws://10.0.0.1:49134'); - expect(cfg.defaults.sandbox_mode).toBe('read-only'); - expect(cfg.defaults.approval_policy).toBe('never'); - }); - - it('rethrows YAML parse errors instead of silently using defaults', async () => { - const dir = await mkdtemp(join(tmpdir(), 'codex-config-')); - const path = join(dir, 'config.yaml'); - await writeFile(path, 'defaults: [unclosed\n bad: {'); - await expect(loadConfig(path)).rejects.toThrow(); - }); - - it('rejects an invalid sandbox mode', async () => { - const dir = await mkdtemp(join(tmpdir(), 'codex-config-')); - const path = join(dir, 'config.yaml'); - await writeFile(path, 'defaults:\n sandbox_mode: yolo\n'); - await expect(loadConfig(path)).rejects.toThrow(); - }); -}); diff --git a/codex/tests/events.test.ts b/codex/tests/events.test.ts deleted file mode 100644 index e1286ce2..00000000 --- a/codex/tests/events.test.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { describe, expect, it, vi } from 'vitest'; -import type { ISdk } from 'iii-sdk'; -import { makeEmitter } from '../src/events.js'; -import { fakeIii } from './_helpers/fake-iii.js'; - -describe('makeEmitter', () => { - it('writes stream::set frames with the stream name, group, and event', async () => { - const fake = fakeIii(); - const emit = makeEmitter(fake.iii, 'agent::events'); - await emit('s1', { type: 'agent_end', messages: [] }); - const frames = fake.streamFrames('agent::events'); - expect(frames).toHaveLength(1); - expect(frames[0]).toMatchObject({ - stream_name: 'agent::events', - group_id: 's1', - data: { type: 'agent_end', messages: [] }, - }); - }); - - it('assigns unique, monotonically increasing item_ids per session', async () => { - const fake = fakeIii(); - const emit = makeEmitter(fake.iii, 'agent::events'); - await emit('s-seq', { a: 1 }); - await emit('s-seq', { a: 2 }); - await emit('other', { a: 3 }); - const ids = fake.streamFrames('agent::events').map((f) => String(f.item_id)); - expect(new Set(ids).size).toBe(3); - const [first, second] = ids; - expect(first < second).toBe(true); - expect(first.startsWith('s-seq-')).toBe(true); - }); - - it('swallows stream::set failures instead of failing the turn', async () => { - const iii = { - trigger: vi.fn(async () => { - throw new Error('stream adapter missing'); - }), - } as unknown as ISdk; - const warn = vi.spyOn(console, 'warn').mockImplementation(() => {}); - const emit = makeEmitter(iii, 'agent::events'); - await expect(emit('s1', { type: 'turn_end' })).resolves.toBeUndefined(); - expect(warn).toHaveBeenCalled(); - warn.mockRestore(); - }); -}); diff --git a/codex/tests/executable.test.ts b/codex/tests/executable.test.ts deleted file mode 100644 index 440a89b9..00000000 --- a/codex/tests/executable.test.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { chmodSync, mkdtempSync, writeFileSync } from 'node:fs'; -import { tmpdir } from 'node:os'; -import { join } from 'node:path'; -import { afterEach, beforeEach, describe, expect, it } from 'vitest'; -import { resolveCodexExecutable } from '../src/executable.js'; - -describe('resolveCodexExecutable', () => { - const originalPath = process.env.PATH; - - beforeEach(() => { - process.env.PATH = ''; - }); - - afterEach(() => { - process.env.PATH = originalPath; - }); - - it('returns the configured path untouched', () => { - expect(resolveCodexExecutable('/opt/codex')).toBe('/opt/codex'); - }); - - it('finds an executable codex on PATH', () => { - const dir = mkdtempSync(join(tmpdir(), 'codex-exe-')); - const bin = join(dir, 'codex'); - writeFileSync(bin, '#!/bin/sh\n'); - chmodSync(bin, 0o755); - process.env.PATH = dir; - expect(resolveCodexExecutable('')).toBe(bin); - }); - - it('returns empty when nothing is found', () => { - expect(resolveCodexExecutable('')).toBe(''); - }); -}); diff --git a/codex/tests/map.rs b/codex/tests/map.rs new file mode 100644 index 00000000..4d9c4104 --- /dev/null +++ b/codex/tests/map.rs @@ -0,0 +1,160 @@ +//! Event -> AgentEvent translation tests. + +use codex::codex::events_types::{ + CommandExecutionItem, ItemStatus, McpError, McpToolCallItem, ThreadEvent, ThreadItemDetails, + Usage, WebSearchItem, +}; +use codex::map; +use serde_json::{json, Value}; + +#[test] +fn function_ids_for_builtin_items() { + assert_eq!( + map::function_id(&ThreadItemDetails::CommandExecution(cmd( + "ls", + 0, + ItemStatus::Completed + ))), + "codex::shell" + ); + assert_eq!( + map::function_id(&ThreadItemDetails::WebSearch(WebSearchItem { + query: "q".into() + })), + "codex::web_search" + ); + assert_eq!( + map::function_id(&ThreadItemDetails::McpToolCall(mcp( + "github", + "create_issue", + false + ))), + "github::create_issue" + ); +} + +#[test] +fn exec_classification() { + assert!(map::is_exec_item(&ThreadItemDetails::CommandExecution( + cmd("x", 0, ItemStatus::Completed) + ))); + assert!(!map::is_exec_item(&ThreadItemDetails::AgentMessage { + text: "hi".into() + })); +} + +#[test] +fn error_classification() { + assert!(map::is_error_item(&ThreadItemDetails::CommandExecution( + cmd("x", 1, ItemStatus::Failed) + ))); + assert!(map::is_error_item(&ThreadItemDetails::CommandExecution( + cmd("x", 2, ItemStatus::Completed) + ))); + assert!(!map::is_error_item(&ThreadItemDetails::CommandExecution( + cmd("x", 0, ItemStatus::Completed) + ))); + assert!(map::is_error_item(&ThreadItemDetails::McpToolCall(mcp( + "s", "t", true + )))); +} + +#[test] +fn command_args_and_result() { + let d = ThreadItemDetails::CommandExecution(CommandExecutionItem { + command: "ls -la".into(), + aggregated_output: "total 0".into(), + exit_code: Some(0), + status: ItemStatus::Completed, + }); + assert_eq!(map::args_for(&d), json!({ "command": "ls -la" })); + assert_eq!( + map::result_content(&d), + json!([{ "type": "text", "text": "total 0" }]) + ); +} + +#[test] +fn usage_maps_and_defaults_zero() { + let u = Usage { + input_tokens: 10, + cached_input_tokens: 100, + output_tokens: 5, + reasoning_output_tokens: 7, + }; + let w = map::map_usage(&u); + assert_eq!(w.input_tokens, 10); + assert_eq!(w.cache_read_tokens, 100); + assert_eq!(w.reasoning_tokens, 7); + // absent fields default to 0 via serde default + let z: Usage = serde_json::from_value(json!({})).unwrap(); + let wz = map::map_usage(&z); + assert_eq!(wz.input_tokens, 0); + assert_eq!(wz.cache_read_tokens, 0); +} + +#[test] +fn parses_a_full_turn_jsonl_sequence() { + let lines = [ + json!({ "type": "thread.started", "thread_id": "th-1" }), + json!({ "type": "turn.started" }), + json!({ "type": "item.started", "item": { "id": "i1", "type": "command_execution", "command": "ls", "aggregated_output": "", "status": "in_progress" } }), + json!({ "type": "item.completed", "item": { "id": "i1", "type": "command_execution", "command": "ls", "aggregated_output": "files", "exit_code": 0, "status": "completed" } }), + json!({ "type": "item.completed", "item": { "id": "i2", "type": "agent_message", "text": "done" } }), + json!({ "type": "turn.completed", "usage": { "input_tokens": 5, "cached_input_tokens": 0, "output_tokens": 2, "reasoning_output_tokens": 0 } }), + ]; + for line in lines { + let ev: ThreadEvent = + serde_json::from_value(line.clone()).unwrap_or_else(|e| panic!("parse {line}: {e}")); + assert!( + !matches!(ev, ThreadEvent::Unknown), + "unexpected Unknown for {line}" + ); + } +} + +#[test] +fn unknown_event_and_item_types_fall_through() { + let ev: ThreadEvent = serde_json::from_value(json!({ "type": "future.event" })).unwrap(); + assert!(matches!(ev, ThreadEvent::Unknown)); + let item: ThreadEvent = serde_json::from_value( + json!({ "type": "item.completed", "item": { "id": "x", "type": "future_item" } }), + ) + .unwrap(); + match item { + ThreadEvent::ItemCompleted(e) => { + assert!(matches!(e.item.details, ThreadItemDetails::Unknown)) + } + _ => panic!("expected ItemCompleted"), + } +} + +fn cmd(command: &str, exit: i32, status: ItemStatus) -> CommandExecutionItem { + CommandExecutionItem { + command: command.into(), + aggregated_output: String::new(), + exit_code: Some(exit), + status, + } +} + +fn mcp(server: &str, tool: &str, err: bool) -> McpToolCallItem { + McpToolCallItem { + server: server.into(), + tool: tool.into(), + arguments: Value::Null, + result: Value::Null, + error: if err { + Some(McpError { + message: "boom".into(), + }) + } else { + None + }, + status: if err { + ItemStatus::Failed + } else { + ItemStatus::Completed + }, + } +} diff --git a/codex/tests/map.test.ts b/codex/tests/map.test.ts deleted file mode 100644 index 836e2ac0..00000000 --- a/codex/tests/map.test.ts +++ /dev/null @@ -1,155 +0,0 @@ -import { describe, expect, it } from 'vitest'; -import { - argsForItem, - functionIdForItem, - isErrorItem, - isExecItem, - lastAssistant, - makeAssistantMessage, - makeFunctionResult, - mapUsage, - resultContentForItem, -} from '../src/map.js'; -import type { AgentMessage } from '../src/types.js'; - -describe('functionIdForItem', () => { - it('maps built-in Codex item types to bus-style ids', () => { - expect(functionIdForItem({ id: 'i', type: 'command_execution' })).toBe('codex::shell'); - expect(functionIdForItem({ id: 'i', type: 'file_change' })).toBe('codex::apply_patch'); - expect(functionIdForItem({ id: 'i', type: 'web_search' })).toBe('codex::web_search'); - }); - - it('maps MCP tool calls to server::tool ids', () => { - expect( - functionIdForItem({ id: 'i', type: 'mcp_tool_call', server: 'github', tool: 'create_issue' }), - ).toBe('github::create_issue'); - }); -}); - -describe('isExecItem', () => { - it('treats command, patch, mcp, and web search items as executions', () => { - for (const type of ['command_execution', 'file_change', 'mcp_tool_call', 'web_search']) { - expect(isExecItem({ id: 'i', type })).toBe(true); - } - expect(isExecItem({ id: 'i', type: 'agent_message' })).toBe(false); - expect(isExecItem({ id: 'i', type: 'todo_list' })).toBe(false); - }); -}); - -describe('argsForItem / resultContentForItem', () => { - it('carries the command and its aggregated output', () => { - const item = { - id: 'i', - type: 'command_execution', - command: 'ls -la', - aggregated_output: 'total 0', - }; - expect(argsForItem(item)).toEqual({ command: 'ls -la' }); - expect(resultContentForItem(item)).toEqual([{ type: 'text', text: 'total 0' }]); - }); - - it('serializes file changes', () => { - const changes = [{ path: 'a.ts', kind: 'update' }]; - const item = { id: 'i', type: 'file_change', changes }; - expect(argsForItem(item)).toEqual({ changes }); - expect(resultContentForItem(item)).toEqual([{ type: 'text', text: JSON.stringify(changes) }]); - }); - - it('carries the web search query as args and content (the SDK item has no result field)', () => { - const item = { id: 'i', type: 'web_search', query: 'zig allocators' }; - expect(argsForItem(item)).toEqual({ query: 'zig allocators' }); - expect(resultContentForItem(item)).toEqual([{ type: 'text', text: 'zig allocators' }]); - }); - - it('prefers the MCP error message over the result payload', () => { - const item = { - id: 'i', - type: 'mcp_tool_call', - server: 's', - tool: 't', - error: { message: 'boom' }, - result: { ok: true }, - }; - expect(resultContentForItem(item)).toEqual([{ type: 'text', text: 'boom' }]); - }); -}); - -describe('isErrorItem', () => { - it('flags failed status and non-zero exit codes', () => { - expect(isErrorItem({ id: 'i', type: 'mcp_tool_call', status: 'failed' })).toBe(true); - expect( - isErrorItem({ id: 'i', type: 'command_execution', exit_code: 2, status: 'completed' }), - ).toBe(true); - expect( - isErrorItem({ id: 'i', type: 'command_execution', exit_code: 0, status: 'completed' }), - ).toBe(false); - }); -}); - -describe('mapUsage', () => { - it('maps SDK usage fields onto the wire shape', () => { - expect( - mapUsage({ - input_tokens: 10, - cached_input_tokens: 100, - output_tokens: 5, - reasoning_output_tokens: 7, - }), - ).toEqual({ - input_tokens: 10, - output_tokens: 5, - cache_read_tokens: 100, - reasoning_tokens: 7, - }); - }); - - it('returns null for non-objects', () => { - expect(mapUsage(null)).toBeNull(); - expect(mapUsage('x')).toBeNull(); - }); - - it('defaults absent cache/reasoning token fields to 0 instead of undefined', () => { - expect(mapUsage({ input_tokens: 3, output_tokens: 1 })).toEqual({ - input_tokens: 3, - output_tokens: 1, - cache_read_tokens: 0, - reasoning_tokens: 0, - }); - }); -}); - -describe('message constructors', () => { - it('builds an assistant message with provider codex', () => { - const msg = makeAssistantMessage([{ type: 'text', text: 'hi' }], 'gpt-5.2-codex', null); - expect(msg.role).toBe('assistant'); - expect(msg.provider).toBe('codex'); - expect(msg.stop_reason).toBe('end'); - }); - - it('builds a function_result message', () => { - const fr = makeFunctionResult('i', 'codex::shell', [{ type: 'text', text: 'ok' }], false); - expect(fr.role).toBe('function_result'); - expect(fr.function_call_id).toBe('i'); - expect(fr.is_error).toBe(false); - }); -}); - -describe('lastAssistant', () => { - it('returns the last assistant message', () => { - const a1 = makeAssistantMessage([{ type: 'text', text: 'one' }], 'm', null); - const a2 = makeAssistantMessage([{ type: 'text', text: 'two' }], 'm', null); - const fr = makeFunctionResult('id', 'fn', [], false); - const messages: AgentMessage[] = [a1, a2, fr]; - expect(lastAssistant(messages)).toBe(a2); - }); - - it('falls back to the final message when no assistant exists', () => { - const fr = makeFunctionResult('id', 'fn', [], false); - expect(lastAssistant([fr])).toBe(fr); - }); - - it('returns a synthetic assistant message for an empty transcript', () => { - const msg = lastAssistant([]); - expect(msg).toMatchObject({ role: 'assistant', content: [] }); - }); -}); diff --git a/codex/tests/prompt_config.rs b/codex/tests/prompt_config.rs new file mode 100644 index 00000000..47a040b1 --- /dev/null +++ b/codex/tests/prompt_config.rs @@ -0,0 +1,75 @@ +//! Prompt extraction + config loading tests. + +use codex::config::Config; +use codex::functions::types::{extract_prompt, RunRequest}; +use serde_json::json; + +#[test] +fn explicit_prompt_wins_including_empty() { + let req = RunRequest { + prompt: Some(String::new()), + ..Default::default() + }; + assert_eq!(extract_prompt(&req).unwrap(), ""); +} + +#[test] +fn extracts_last_user_message_text() { + let req: RunRequest = serde_json::from_value(json!({ + "messages": [ + { "role": "user", "content": [{ "type": "text", "text": "first" }] }, + { "role": "assistant", "content": [{ "type": "text", "text": "reply" }] }, + { "role": "user", "content": [{ "type": "text", "text": "second" }] } + ] + })) + .unwrap(); + assert_eq!(extract_prompt(&req).unwrap(), "second"); +} + +#[test] +fn plain_string_message_content() { + let req: RunRequest = serde_json::from_value(json!({ + "messages": [{ "role": "user", "content": "plain" }] + })) + .unwrap(); + assert_eq!(extract_prompt(&req).unwrap(), "plain"); +} + +#[test] +fn no_prompt_no_user_message_errors() { + let req: RunRequest = serde_json::from_value(json!({ + "messages": [{ "role": "assistant", "content": "x" }] + })) + .unwrap(); + assert!(extract_prompt(&req).is_err()); +} + +#[test] +fn config_defaults_when_file_missing() { + let cfg = Config::load("/nonexistent/config.yaml").unwrap(); + assert_eq!(cfg.engine_url, "ws://127.0.0.1:49134"); + assert_eq!(cfg.defaults.sandbox_mode, "workspace-write"); + assert_eq!(cfg.defaults.approval_policy, "never"); + assert!(cfg.defaults.skip_git_repo_check); + assert_eq!(cfg.raw_events_stream, "codex::events"); + assert!(cfg.iii_context); + assert_eq!(cfg.codex_executable, ""); +} + +#[test] +fn config_parse_error_is_fatal() { + let dir = tempfile::tempdir().unwrap(); + let path = dir.path().join("config.yaml"); + std::fs::write(&path, "defaults: [unclosed\n bad: {").unwrap(); + assert!(Config::load(path.to_str().unwrap()).is_err()); +} + +#[test] +fn config_merges_partial_file() { + let dir = tempfile::tempdir().unwrap(); + let path = dir.path().join("config.yaml"); + std::fs::write(&path, "defaults:\n sandbox_mode: read-only\n").unwrap(); + let cfg = Config::load(path.to_str().unwrap()).unwrap(); + assert_eq!(cfg.defaults.sandbox_mode, "read-only"); + assert_eq!(cfg.defaults.approval_policy, "never"); // default retained +} diff --git a/codex/tests/register.test.ts b/codex/tests/register.test.ts deleted file mode 100644 index 60686d9d..00000000 --- a/codex/tests/register.test.ts +++ /dev/null @@ -1,208 +0,0 @@ -import { beforeEach, describe, expect, it, vi } from 'vitest'; - -vi.mock('@openai/codex-sdk', () => ({ Codex: vi.fn() })); - -import { Codex } from '@openai/codex-sdk'; -import { loadConfig } from '../src/config.js'; -import { makeEmitter } from '../src/events.js'; -import { register } from '../src/run.js'; -import { type CodexCapture, fakeCodexClass, fullTurn } from './_helpers/fake-codex.js'; -import { type FakeIii, fakeIii } from './_helpers/fake-iii.js'; - -const CodexMock = vi.mocked(Codex); - -async function registeredWorker(): Promise { - const fake = fakeIii(); - const cfg = await loadConfig('/nonexistent/config.yaml'); - const emit = makeEmitter(fake.iii, cfg.events_stream); - const emitRaw = makeEmitter(fake.iii, cfg.raw_events_stream); - register(fake.iii, cfg, emit, emitRaw); - return fake; -} - -beforeEach(() => { - CodexMock.mockReset(); -}); - -describe('register', () => { - it('registers the full codex::* surface', async () => { - const fake = await registeredWorker(); - expect([...fake.registered.keys()].sort()).toEqual([ - 'codex::run', - 'codex::sessions::list', - 'codex::start', - 'codex::status', - 'codex::stop', - ]); - }); - - it('codex::run parses at the unknown boundary and runs a turn', async () => { - const fake = await registeredWorker(); - const capture: CodexCapture = { aborted: false }; - CodexMock.mockImplementation(fakeCodexClass(fullTurn, capture) as never); - const res = (await fake.registered.get('codex::run')?.({ - prompt: 'hi', - session_id: 's1', - iii_context: false, - })) as Record; - expect(res.result).toBe('done'); - expect(capture.prompt).toBe('hi'); - }); - - it('codex::run rejects invalid payloads', async () => { - const fake = await registeredWorker(); - await expect( - fake.registered.get('codex::run')?.({ prompt: 'x', sandbox_mode: 'yolo' }), - ).rejects.toThrow(); - await expect( - fake.registered.get('codex::run')?.({ prompt: 'x', approval_policy: 'always' }), - ).rejects.toThrow(); - }); - - it('codex::start returns immediately and the turn lands in the background', async () => { - const fake = await registeredWorker(); - const capture: CodexCapture = { aborted: false }; - CodexMock.mockImplementation(fakeCodexClass(fullTurn, capture) as never); - const res = (await fake.registered.get('codex::start')?.({ prompt: 'bg' })) as Record< - string, - unknown - >; - expect(res.started).toBe(true); - expect(typeof res.session_id).toBe('string'); - await vi.waitFor(() => { - const record = fake.state.get(`codex_sessions/${res.session_id}`) as - | { status: string } - | undefined; - expect(record?.status).toBe('done'); - }); - }); - - it('marks the session error when a background run throws mid-stream', async () => { - const fake = await registeredWorker(); - CodexMock.mockImplementation((() => { - const thread = { - id: 'th-1', - runStreamed: async () => ({ - events: (async function* () { - yield { type: 'thread.started', thread_id: 'th-1' }; - throw new Error('stream died'); - })(), - }), - }; - return { startThread: () => thread, resumeThread: () => thread }; - }) as never); - const res = (await fake.registered.get('codex::start')?.({ - prompt: 'bg', - session_id: 'bg-1', - })) as Record; - expect(res.started).toBe(true); - await vi.waitFor(() => { - const record = fake.state.get('codex_sessions/bg-1') as { status: string } | undefined; - expect(record?.status).toBe('error'); - }); - }); - - it('codex::stop without a live run reports stopped: false', async () => { - const fake = await registeredWorker(); - const res = (await fake.registered.get('codex::stop')?.({ session_id: 'ghost' })) as Record< - string, - unknown - >; - expect(res).toMatchObject({ session_id: 'ghost', stopped: false }); - }); - - it('codex::stop aborts a live run', async () => { - const fake = await registeredWorker(); - const capture: CodexCapture = { aborted: false }; - let release: (() => void) | undefined; - const gate = new Promise((r) => { - release = r; - }); - CodexMock.mockImplementation((() => { - const thread = { - id: 'th-live', - runStreamed: async (_prompt: string, turnOptions?: { signal?: AbortSignal }) => ({ - events: (async function* () { - yield { type: 'thread.started', thread_id: 'th-live' }; - await gate; - if (turnOptions?.signal?.aborted) { - capture.aborted = true; - throw new Error('aborted'); - } - })(), - }), - }; - return { startThread: () => thread, resumeThread: () => thread }; - }) as never); - - const startRes = (await fake.registered.get('codex::start')?.({ - prompt: 'long', - session_id: 'live-1', - })) as Record; - await vi.waitFor(() => { - expect(fake.state.has('codex_sessions/live-1')).toBe(true); - }); - const stopRes = (await fake.registered.get('codex::stop')?.({ - session_id: String(startRes.session_id), - })) as Record; - expect(stopRes.stopped).toBe(true); - release?.(); - await vi.waitFor(() => { - const record = fake.state.get('codex_sessions/live-1') as { status: string } | undefined; - expect(record?.status).toBe('done'); - }); - expect(capture.aborted).toBe(true); - }); - - it('rejects a second run while one is already live for the session', async () => { - const fake = await registeredWorker(); - let release: (() => void) | undefined; - const gate = new Promise((r) => { - release = r; - }); - CodexMock.mockImplementation((() => { - const thread = { - id: 'th-live', - runStreamed: async () => ({ - events: (async function* () { - yield { type: 'thread.started', thread_id: 'th-live' }; - await gate; - })(), - }), - }; - return { startThread: () => thread, resumeThread: () => thread }; - }) as never); - - await fake.registered.get('codex::start')?.({ prompt: 'first', session_id: 'busy-1' }); - await vi.waitFor(() => { - expect(fake.state.has('codex_sessions/busy-1')).toBe(true); - }); - const second = (await fake.registered.get('codex::run')?.({ - prompt: 'second', - session_id: 'busy-1', - })) as Record; - expect(second).toMatchObject({ session_id: 'busy-1', busy: true }); - release?.(); - }); - - it('codex::status reflects the stored record and live flag', async () => { - const fake = await registeredWorker(); - const res = (await fake.registered.get('codex::status')?.({ session_id: 'none' })) as Record< - string, - unknown - >; - expect(res).toMatchObject({ session_id: 'none', live: false, record: null }); - }); - - it('codex::sessions::list returns every stored record', async () => { - const fake = await registeredWorker(); - const capture: CodexCapture = { aborted: false }; - CodexMock.mockImplementation(fakeCodexClass(fullTurn, capture) as never); - await fake.registered.get('codex::run')?.({ prompt: 'a', session_id: 's1' }); - await fake.registered.get('codex::run')?.({ prompt: 'b', session_id: 's2' }); - const res = (await fake.registered.get('codex::sessions::list')?.({})) as { - sessions: Array<{ session_id: string }>; - }; - expect(res.sessions.map((s) => s.session_id).sort()).toEqual(['s1', 's2']); - }); -}); diff --git a/codex/tests/run-payload.test.ts b/codex/tests/run-payload.test.ts deleted file mode 100644 index e13865a3..00000000 --- a/codex/tests/run-payload.test.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { describe, expect, it } from 'vitest'; -import { extractPrompt, RunPayloadSchema } from '../src/run.js'; - -describe('RunPayloadSchema', () => { - it('accepts a bare prompt', () => { - const p = RunPayloadSchema.parse({ prompt: 'hi' }); - expect(p.prompt).toBe('hi'); - }); - - it('accepts the messages array shape', () => { - const p = RunPayloadSchema.parse({ - session_id: 's1', - messages: [{ role: 'user', content: [{ type: 'text', text: 'hello' }] }], - }); - expect(p.messages).toHaveLength(1); - }); - - it('rejects an invalid sandbox mode', () => { - expect(() => RunPayloadSchema.parse({ prompt: 'x', sandbox_mode: 'yolo' })).toThrow(); - }); -}); - -describe('extractPrompt', () => { - it('prefers the prompt field', () => { - expect(extractPrompt(RunPayloadSchema.parse({ prompt: 'direct' }))).toBe('direct'); - }); - - it('joins text blocks from the last user message', () => { - const p = RunPayloadSchema.parse({ - messages: [ - { role: 'user', content: [{ type: 'text', text: 'first' }] }, - { role: 'assistant', content: [{ type: 'text', text: 'reply' }] }, - { - role: 'user', - content: [ - { type: 'text', text: 'line one' }, - { type: 'text', text: 'line two' }, - ], - }, - ], - }); - expect(extractPrompt(p)).toBe('line one\nline two'); - }); - - it('accepts plain-string message content', () => { - const p = RunPayloadSchema.parse({ messages: [{ role: 'user', content: 'plain' }] }); - expect(extractPrompt(p)).toBe('plain'); - }); - - it('throws when no user message exists', () => { - const p = RunPayloadSchema.parse({ messages: [{ role: 'assistant', content: 'x' }] }); - expect(() => extractPrompt(p)).toThrow(); - }); -}); diff --git a/codex/tests/run.test.ts b/codex/tests/run.test.ts deleted file mode 100644 index 4219c9d9..00000000 --- a/codex/tests/run.test.ts +++ /dev/null @@ -1,343 +0,0 @@ -import { beforeEach, describe, expect, it, vi } from 'vitest'; - -vi.mock('@openai/codex-sdk', () => ({ Codex: vi.fn() })); - -import { Codex } from '@openai/codex-sdk'; -import { type Config, loadConfig } from '../src/config.js'; -import { makeEmitter } from '../src/events.js'; -import { executeRun, RunPayloadSchema } from '../src/run.js'; -import { type CodexCapture, fakeCodexClass, fullTurn } from './_helpers/fake-codex.js'; -import { fakeIii } from './_helpers/fake-iii.js'; - -const CodexMock = vi.mocked(Codex); - -async function baseConfig(): Promise { - return loadConfig('/nonexistent/config.yaml'); -} - -async function runTurn( - payload: Record, - events: Array> = fullTurn, - cfgOverrides: Partial = {}, -) { - const fake = fakeIii(); - const cfg = { ...(await baseConfig()), ...cfgOverrides }; - const capture: CodexCapture = { aborted: false }; - CodexMock.mockImplementation(fakeCodexClass(events, capture) as never); - const emit = makeEmitter(fake.iii, cfg.events_stream); - const emitRaw = makeEmitter(fake.iii, cfg.raw_events_stream); - const result = await executeRun(fake.iii, cfg, emit, emitRaw, RunPayloadSchema.parse(payload)); - return { fake, capture, result }; -} - -beforeEach(() => { - CodexMock.mockReset(); -}); - -describe('executeRun', () => { - it('returns the final agent message with mapped usage', async () => { - const { result } = await runTurn({ prompt: 'do it', session_id: 's1' }); - expect(result).toMatchObject({ - session_id: 's1', - codex_thread_id: 'th-1', - result: 'done', - stop_reason: 'end', - is_error: false, - num_turns: 1, - usage: { - input_tokens: 5, - output_tokens: 2, - cache_read_tokens: 100, - reasoning_tokens: 7, - }, - }); - }); - - it('persists the session record working then done with the thread id', async () => { - const { fake } = await runTurn({ prompt: 'x', session_id: 's1' }); - const sets = fake.calls.filter( - (c) => - c.function_id === 'state::set' && - (c.payload as { scope?: string }).scope === 'codex_sessions', - ); - const statuses = sets.map((c) => (c.payload.value as { status: string }).status); - expect(statuses[0]).toBe('working'); - expect(statuses[statuses.length - 1]).toBe('done'); - const final = sets[sets.length - 1].payload.value as Record; - expect(final.codex_thread_id).toBe('th-1'); - }); - - it('mirrors every SDK event verbatim onto the raw stream', async () => { - const { fake } = await runTurn({ prompt: 'x', session_id: 's1' }); - const raw = fake.streamFrames('codex::events').map((f) => f.data); - expect(raw).toEqual(fullTurn); - const groupIds = fake.streamFrames('codex::events').map((f) => f.group_id); - expect(new Set(groupIds)).toEqual(new Set(['s1'])); - }); - - it('emits the translated AgentEvent sequence on agent::events', async () => { - const { fake } = await runTurn({ prompt: 'x', session_id: 's1' }); - const types = fake.streamFrames('agent::events').map((f) => (f.data as { type: string }).type); - expect(types).toEqual([ - 'function_execution_start', - 'function_execution_end', - 'message_complete', - 'turn_end', - 'agent_end', - ]); - const [start, end] = fake - .streamFrames('agent::events') - .map((f) => f.data as Record) - .filter((d) => String(d.type).startsWith('function_execution')); - expect(start).toMatchObject({ - function_call_id: 'item-1', - function_id: 'codex::shell', - args: { command: 'ls' }, - }); - expect(end).toMatchObject({ function_call_id: 'item-1', is_error: false }); - }); - - it('delivers the iii runtime context as developer_instructions by default', async () => { - const { capture } = await runTurn({ prompt: 'do it', session_id: 's1' }); - const config = capture.codexOptions?.config as { developer_instructions?: string }; - expect(config.developer_instructions).toContain('# iii runtime'); - expect(config.developer_instructions).toContain('iii trigger engine::functions::list'); - expect(capture.input).toBe('do it'); - }); - - it('keeps developer_instructions on resumed threads without touching the prompt', async () => { - const fake = fakeIii(); - fake.state.set('codex_sessions/s1', { - session_id: 's1', - codex_thread_id: 'th-prior', - cwd: '', - model: '', - status: 'done', - turns: 1, - usage: null, - updated_at_ms: 1, - }); - const cfg = await baseConfig(); - const capture: CodexCapture = { aborted: false }; - CodexMock.mockImplementation(fakeCodexClass(fullTurn, capture) as never); - const emit = makeEmitter(fake.iii, cfg.events_stream); - await executeRun( - fake.iii, - cfg, - emit, - emit, - RunPayloadSchema.parse({ prompt: 'again', session_id: 's1' }), - ); - const config = capture.codexOptions?.config as { developer_instructions?: string }; - expect(config.developer_instructions).toContain('# iii runtime'); - expect(capture.input).toBe('again'); - }); - - it('a caller-supplied developer_instructions wins over the iii block', async () => { - const { capture } = await runTurn({ - prompt: 'x', - session_id: 's1', - codex_config: { developer_instructions: 'house rules' }, - }); - const config = capture.codexOptions?.config as { developer_instructions?: string }; - expect(config.developer_instructions).toBe('house rules'); - }); - - it('config-level iii_context: false disables the block for every turn', async () => { - const { capture } = await runTurn({ prompt: 'plain', session_id: 's1' }, fullTurn, { - iii_context: false, - }); - expect(capture.codexOptions?.config).toBeUndefined(); - expect(capture.input).toBe('plain'); - }); - - it('omits the context when disabled per turn', async () => { - const { capture } = await runTurn({ prompt: 'plain', session_id: 's1', iii_context: false }); - expect(capture.codexOptions?.config).toBeUndefined(); - expect(capture.input).toBe('plain'); - }); - - it('passes worker defaults and named fields to thread options', async () => { - const { capture } = await runTurn({ - prompt: 'x', - session_id: 's1', - iii_context: false, - cwd: '/repo', - model: 'gpt-5.2-codex', - sandbox_mode: 'read-only', - reasoning_effort: 'high', - }); - expect(capture.prompt).toBe('x'); - expect(capture.threadOptions).toMatchObject({ - workingDirectory: '/repo', - model: 'gpt-5.2-codex', - sandboxMode: 'read-only', - approvalPolicy: 'never', - skipGitRepoCheck: true, - modelReasoningEffort: 'high', - }); - }); - - it('forwards raw SDK options verbatim and lets them win over derived fields', async () => { - const { capture } = await runTurn({ - prompt: 'x', - session_id: 's1', - sandbox_mode: 'read-only', - options: { networkAccessEnabled: true, sandboxMode: 'workspace-write' }, - }); - expect(capture.threadOptions).toMatchObject({ - networkAccessEnabled: true, - sandboxMode: 'workspace-write', - }); - }); - - it('forwards output_schema as the turn outputSchema', async () => { - const schema = { type: 'object', properties: { ok: { type: 'boolean' } } }; - const { capture } = await runTurn({ prompt: 'x', session_id: 's1', output_schema: schema }); - expect(capture.turnOptions?.outputSchema).toEqual(schema); - }); - - it('forwards codex_config as SDK config overrides alongside the iii block', async () => { - const codex_config = { mcp_servers: { github: { command: 'gh-mcp' } } }; - const { capture } = await runTurn({ prompt: 'x', session_id: 's1', codex_config }); - expect(capture.codexOptions?.config).toMatchObject(codex_config); - const config = capture.codexOptions?.config as { developer_instructions?: string }; - expect(config.developer_instructions).toContain('# iii runtime'); - }); - - it('attaches local images to the prompt input', async () => { - const { capture } = await runTurn({ - prompt: 'describe these', - session_id: 's1', - iii_context: false, - images: ['/tmp/a.png', '/tmp/b.png'], - }); - expect(capture.input).toEqual([ - { type: 'text', text: 'describe these' }, - { type: 'local_image', path: '/tmp/a.png' }, - { type: 'local_image', path: '/tmp/b.png' }, - ]); - }); - - it('resumes the prior thread for a known session_id', async () => { - const fake = fakeIii(); - fake.state.set('codex_sessions/s1', { - session_id: 's1', - codex_thread_id: 'th-prior', - cwd: '/repo', - model: '', - status: 'done', - turns: 1, - usage: null, - updated_at_ms: 1, - }); - const cfg = await baseConfig(); - const capture: CodexCapture = { aborted: false }; - CodexMock.mockImplementation(fakeCodexClass(fullTurn, capture) as never); - const emit = makeEmitter(fake.iii, cfg.events_stream); - const result = await executeRun( - fake.iii, - cfg, - emit, - emit, - RunPayloadSchema.parse({ prompt: 'again', session_id: 's1' }), - ); - expect(capture.resumedFrom).toBe('th-prior'); - expect(result.num_turns).toBe(2); - }); - - it('honors per-turn cwd and model overrides on a resumed session', async () => { - const fake = fakeIii(); - fake.state.set('codex_sessions/s1', { - session_id: 's1', - codex_thread_id: 'th-prior', - cwd: '/old/repo', - model: 'old-model', - status: 'done', - turns: 1, - usage: null, - updated_at_ms: 1, - }); - const cfg = await baseConfig(); - const capture: CodexCapture = { aborted: false }; - CodexMock.mockImplementation(fakeCodexClass(fullTurn, capture) as never); - const emit = makeEmitter(fake.iii, cfg.events_stream); - await executeRun( - fake.iii, - cfg, - emit, - emit, - RunPayloadSchema.parse({ - prompt: 'x', - session_id: 's1', - cwd: '/new/repo', - model: 'new-model', - }), - ); - expect(capture.threadOptions).toMatchObject({ - workingDirectory: '/new/repo', - model: 'new-model', - }); - }); - - it('extracts the prompt from the last user message of a messages payload', async () => { - const { capture } = await runTurn({ - session_id: 's1', - iii_context: false, - messages: [ - { role: 'user', content: [{ type: 'text', text: 'first' }] }, - { role: 'assistant', content: [{ type: 'text', text: 'reply' }] }, - { role: 'user', content: [{ type: 'text', text: 'second' }] }, - ], - }); - expect(capture.prompt).toBe('second'); - }); - - it('marks the record error and still closes the turn when the stream fails', async () => { - const turn = [ - { type: 'thread.started', thread_id: 'th-1' }, - { type: 'turn.failed', error: { message: 'model exploded' } }, - ]; - const { fake, result } = await runTurn({ prompt: 'x', session_id: 's1' }, turn); - expect(result.is_error).toBe(true); - expect(result.stop_reason).toBe('error'); - expect(String(result.result)).toContain('model exploded'); - const record = fake.state.get('codex_sessions/s1') as { status: string }; - expect(record.status).toBe('error'); - const types = fake.streamFrames('agent::events').map((f) => (f.data as { type: string }).type); - expect(types).toContain('turn_end'); - expect(types).toContain('agent_end'); - }); - - it('reports a failed command item as an error function result', async () => { - const turn = [ - { type: 'thread.started', thread_id: 'th-1' }, - { - type: 'item.completed', - item: { - id: 'item-9', - type: 'command_execution', - command: 'false', - aggregated_output: '', - exit_code: 1, - status: 'failed', - }, - }, - { - type: 'turn.completed', - usage: { - input_tokens: 1, - cached_input_tokens: 0, - output_tokens: 1, - reasoning_output_tokens: 0, - }, - }, - ]; - const { fake } = await runTurn({ prompt: 'x', session_id: 's1' }, turn); - const end = fake - .streamFrames('agent::events') - .map((f) => f.data as Record) - .find((d) => d.type === 'function_execution_end'); - expect(end).toMatchObject({ function_call_id: 'item-9', is_error: true }); - }); -}); diff --git a/codex/tests/state.test.ts b/codex/tests/state.test.ts deleted file mode 100644 index 3d508926..00000000 --- a/codex/tests/state.test.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { describe, expect, it } from 'vitest'; -import type { ISdk } from 'iii-sdk'; -import { listSessions, loadSession, saveSession } from '../src/state.js'; -import type { SessionRecord } from '../src/types.js'; -import { fakeIii } from './_helpers/fake-iii.js'; - -function record(session_id: string): SessionRecord { - return { - session_id, - codex_thread_id: `th-${session_id}`, - cwd: '/repo', - model: '', - status: 'done', - turns: 1, - usage: null, - updated_at_ms: 1, - }; -} - -describe('session state', () => { - it('round-trips a record through scope codex_sessions', async () => { - const fake = fakeIii(); - await saveSession(fake.iii, record('s1')); - const set = fake.calls.find((c) => c.function_id === 'state::set'); - expect(set?.payload).toMatchObject({ scope: 'codex_sessions', key: 's1' }); - await expect(loadSession(fake.iii, 's1')).resolves.toMatchObject({ - session_id: 's1', - codex_thread_id: 'th-s1', - }); - }); - - it('returns null for unknown sessions', async () => { - const fake = fakeIii(); - await expect(loadSession(fake.iii, 'missing')).resolves.toBeNull(); - }); - - it('handles state::get returning the value directly, without an envelope', async () => { - // The engine returns the stored value itself, not {value}; a worker - // built against the envelope shape silently loses resume (caught live). - const iii = { - trigger: async (req: { function_id: string }) => - req.function_id === 'state::get' ? record('s1') : null, - } as unknown as ISdk; - await expect(loadSession(iii, 's1')).resolves.toMatchObject({ session_id: 's1' }); - }); - - it('lists every record and tolerates a non-array reply', async () => { - const fake = fakeIii(); - await saveSession(fake.iii, record('s1')); - await saveSession(fake.iii, record('s2')); - const sessions = await listSessions(fake.iii); - expect(sessions.map((s) => s.session_id).sort()).toEqual(['s1', 's2']); - - const iii = { trigger: async () => null } as unknown as ISdk; - await expect(listSessions(iii)).resolves.toEqual([]); - }); -}); diff --git a/codex/tsconfig.json b/codex/tsconfig.json deleted file mode 100644 index 9a3b09b0..00000000 --- a/codex/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2022", - "module": "NodeNext", - "moduleResolution": "NodeNext", - "outDir": "dist", - "rootDir": "src", - "strict": true, - "declaration": false, - "sourceMap": false, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true - }, - "include": ["src"] -} diff --git a/codex/tsconfig.tsbuildinfo b/codex/tsconfig.tsbuildinfo new file mode 100644 index 00000000..53524ff9 --- /dev/null +++ b/codex/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"root":["./src/config.ts","./src/events.ts","./src/executable.ts","./src/iii-prompt.ts","./src/index.ts","./src/map.ts","./src/run.ts","./src/state.ts","./src/types.ts"],"version":"5.9.3"} \ No newline at end of file diff --git a/codex/vitest.config.ts b/codex/vitest.config.ts deleted file mode 100644 index 1c1ef783..00000000 --- a/codex/vitest.config.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { defineConfig } from 'vitest/config'; - -export default defineConfig({ - test: { - include: ['tests/**/*.test.ts'], - environment: 'node', - globals: false, - testTimeout: 10000, - }, -}); From 4c811ffe28fef9216c97a34abfd44d999b371032 Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Mon, 15 Jun 2026 11:35:17 +0100 Subject: [PATCH 14/20] chore(codex): drop stray tsbuildinfo, re-ignore it --- codex/.gitignore | 1 + codex/tsconfig.tsbuildinfo | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 codex/tsconfig.tsbuildinfo diff --git a/codex/.gitignore b/codex/.gitignore index ea8c4bf7..69c37d35 100644 --- a/codex/.gitignore +++ b/codex/.gitignore @@ -1 +1,2 @@ /target +*.tsbuildinfo diff --git a/codex/tsconfig.tsbuildinfo b/codex/tsconfig.tsbuildinfo deleted file mode 100644 index 53524ff9..00000000 --- a/codex/tsconfig.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"root":["./src/config.ts","./src/events.ts","./src/executable.ts","./src/iii-prompt.ts","./src/index.ts","./src/map.ts","./src/run.ts","./src/state.ts","./src/types.ts"],"version":"5.9.3"} \ No newline at end of file From 29339111648d15afabbdd854a9b3aaa43e48adfc Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Mon, 15 Jun 2026 12:26:22 +0100 Subject: [PATCH 15/20] test(codex): extract pure turn translator, add orchestration tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The per-event translation (JSONL event -> agent::events frames + turn state) lived inside the I/O stream loop, so the orchestration sequence had no unit coverage — only the per-item map helpers did. Lift it into a pure `translate::step(&mut TurnState, ThreadEvent) -> Vec`; the loop now reads lines, emits raw, calls step, emits the returned frames. No bus wrapper — the loop still uses the iii-sdk III handle directly. Adds tests/translate.rs (6): full command turn frame sequence + state, started-then-completed single-start, completed-without-start synthesis, reasoning->thinking, turn.failed error state, mcp server::tool id. 29 tests total. Verified live: refactored loop emits the identical agent::events / codex::events sequences. --- codex/src/codex/mod.rs | 134 +++++------------------------------ codex/src/codex/translate.rs | 114 +++++++++++++++++++++++++++++ codex/tests/translate.rs | 120 +++++++++++++++++++++++++++++++ 3 files changed, 253 insertions(+), 115 deletions(-) create mode 100644 codex/src/codex/translate.rs create mode 100644 codex/tests/translate.rs diff --git a/codex/src/codex/mod.rs b/codex/src/codex/mod.rs index bbbaf97e..a8b4aea4 100644 --- a/codex/src/codex/mod.rs +++ b/codex/src/codex/mod.rs @@ -4,6 +4,7 @@ pub mod args; pub mod events_types; +pub mod translate; use std::collections::HashMap; use std::process::Stdio; @@ -21,10 +22,9 @@ use crate::config::Config; use crate::events::emit; use crate::functions::types::{extract_prompt, RunRequest}; use crate::iii_prompt::III_CONTEXT_PROMPT; -use crate::map; use crate::state::{load_session, save_session}; use crate::wire::{assistant_message, now_ms, ContentBlock, SessionRecord, Status}; -use events_types::{ThreadEvent, ThreadItemDetails}; +use events_types::ThreadEvent; /// A minimal cancellation token (avoids pulling tokio-util just for this). mod tokio_util_compat { @@ -257,7 +257,7 @@ async fn stream_turn( } }; let mut lines = BufReader::new(stdout).lines(); - let mut started: HashMap = HashMap::new(); + let mut state = translate::TurnState::new(record.model.clone()); loop { if cancel.is_cancelled() { @@ -293,125 +293,29 @@ async fn stream_turn( Ok(e) => e, Err(_) => continue, }; - match event { - ThreadEvent::ThreadStarted(e) => { - record.codex_thread_id = Some(e.thread_id); + let had_thread = state.thread_id.is_some(); + let frames = translate::step(&mut state, event); + // persist the thread id the first time it appears (enables resume) + if !had_thread { + if let Some(tid) = &state.thread_id { + record.codex_thread_id = Some(tid.clone()); let _ = save_session(iii, record).await; } - ThreadEvent::ItemStarted(ev) | ThreadEvent::ItemUpdated(ev) => { - if map::is_exec_item(&ev.item.details) && !started.contains_key(&ev.item.id) { - started.insert(ev.item.id.clone(), ()); - emit_exec_start(iii, cfg, session_id, &ev.item.id, &ev.item.details).await; - } - } - ThreadEvent::ItemCompleted(ev) => { - let model = record.model.clone(); - handle_item_completed( - iii, - cfg, - session_id, - &ev.item.id, - &ev.item.details, - &started, - &model, - &mut outcome, - ) - .await; - } - ThreadEvent::TurnCompleted(e) => { - outcome.usage = Some(map::map_usage(&e.usage)); - } - ThreadEvent::TurnFailed(e) => { - outcome.is_error = true; - outcome.stop_reason = "error".to_string(); - outcome.result_text = e.error.message; - } - ThreadEvent::Error(e) => { - outcome.is_error = true; - outcome.stop_reason = "error".to_string(); - outcome.result_text = e.message; - } - ThreadEvent::TurnStarted(_) | ThreadEvent::Unknown => {} + } + for frame in frames { + emit(iii, &cfg.events_stream, session_id, frame).await; } } let _ = child.wait().await; - outcome -} - -async fn emit_exec_start( - iii: &III, - cfg: &Config, - session_id: &str, - id: &str, - details: &ThreadItemDetails, -) { - emit( - iii, - &cfg.events_stream, - session_id, - json!({ - "type": "function_execution_start", - "function_call_id": id, - "function_id": map::function_id(details), - "args": map::args_for(details), - }), - ) - .await; -} - -#[allow(clippy::too_many_arguments)] -async fn handle_item_completed( - iii: &III, - cfg: &Config, - session_id: &str, - id: &str, - details: &ThreadItemDetails, - started: &HashMap, - model: &str, - outcome: &mut Outcome, -) { - match details { - ThreadItemDetails::AgentMessage { text } | ThreadItemDetails::Reasoning { text } => { - let is_agent = matches!(details, ThreadItemDetails::AgentMessage { .. }); - let block = if is_agent { - ContentBlock::Text { text: text.clone() } - } else { - ContentBlock::Thinking { text: text.clone() } - }; - let msg = assistant_message(vec![block], model, None, "end"); - emit( - iii, - &cfg.events_stream, - session_id, - json!({ "type": "message_complete", "message": msg }), - ) - .await; - if is_agent { - outcome.result_text = text.clone(); - } - } - d if map::is_exec_item(d) => { - if !started.contains_key(id) { - emit_exec_start(iii, cfg, session_id, id, d).await; - } - emit( - iii, - &cfg.events_stream, - session_id, - json!({ - "type": "function_execution_end", - "function_call_id": id, - "function_id": map::function_id(d), - "result": { "content": map::result_content(d), "details": null }, - "is_error": map::is_error_item(d), - "duration_ms": 0, - }), - ) - .await; - } - _ => {} + // fold the accumulated turn state into the outcome (cancel sets aborted above) + if !outcome.is_error && outcome.stop_reason != "aborted" { + outcome.is_error = state.is_error; + outcome.stop_reason = state.stop_reason; + outcome.result_text = state.result_text; } + outcome.usage = state.usage; + outcome } fn write_schema(schema: &Value) -> anyhow::Result { diff --git a/codex/src/codex/translate.rs b/codex/src/codex/translate.rs new file mode 100644 index 00000000..b4fc1b4e --- /dev/null +++ b/codex/src/codex/translate.rs @@ -0,0 +1,114 @@ +//! Pure translation of the Codex JSONL event stream into the AgentEvent frames +//! emitted on `agent::events`, plus the running turn state (thread id, usage, +//! result text, stop reason). Kept free of I/O so the full per-turn sequence is +//! unit-testable without a live engine — the stream loop in `mod.rs` only does +//! the reads/writes around `step`. + +use std::collections::HashSet; + +use serde_json::{json, Value}; + +use super::events_types::{ThreadEvent, ThreadItemDetails}; +use crate::map; +use crate::wire::{assistant_message, ContentBlock, Usage}; + +#[derive(Default)] +pub struct TurnState { + started: HashSet, + pub thread_id: Option, + pub usage: Option, + pub result_text: String, + pub stop_reason: String, + pub is_error: bool, + /// Model id stamped onto message_complete frames. + pub model: String, +} + +impl TurnState { + pub fn new(model: String) -> Self { + Self { + stop_reason: "end".to_string(), + model, + ..Default::default() + } + } +} + +/// Advance the turn by one event, returning the `agent::events` frames to emit +/// (in order). Updates `state` in place. +pub fn step(state: &mut TurnState, event: ThreadEvent) -> Vec { + match event { + ThreadEvent::ThreadStarted(e) => { + state.thread_id = Some(e.thread_id); + vec![] + } + ThreadEvent::ItemStarted(ev) | ThreadEvent::ItemUpdated(ev) => { + if map::is_exec_item(&ev.item.details) && state.started.insert(ev.item.id.clone()) { + vec![exec_start(&ev.item.id, &ev.item.details)] + } else { + vec![] + } + } + ThreadEvent::ItemCompleted(ev) => item_completed(state, &ev.item.id, &ev.item.details), + ThreadEvent::TurnCompleted(e) => { + state.usage = Some(map::map_usage(&e.usage)); + vec![] + } + ThreadEvent::TurnFailed(e) => { + state.is_error = true; + state.stop_reason = "error".to_string(); + state.result_text = e.error.message; + vec![] + } + ThreadEvent::Error(e) => { + state.is_error = true; + state.stop_reason = "error".to_string(); + state.result_text = e.message; + vec![] + } + ThreadEvent::TurnStarted(_) | ThreadEvent::Unknown => vec![], + } +} + +fn exec_start(id: &str, details: &ThreadItemDetails) -> Value { + json!({ + "type": "function_execution_start", + "function_call_id": id, + "function_id": map::function_id(details), + "args": map::args_for(details), + }) +} + +fn item_completed(state: &mut TurnState, id: &str, details: &ThreadItemDetails) -> Vec { + match details { + ThreadItemDetails::AgentMessage { text } | ThreadItemDetails::Reasoning { text } => { + let is_agent = matches!(details, ThreadItemDetails::AgentMessage { .. }); + let block = if is_agent { + ContentBlock::Text { text: text.clone() } + } else { + ContentBlock::Thinking { text: text.clone() } + }; + if is_agent { + state.result_text = text.clone(); + } + let msg = assistant_message(vec![block], &state.model, None, "end"); + vec![json!({ "type": "message_complete", "message": msg })] + } + d if map::is_exec_item(d) => { + let mut frames = Vec::new(); + if state.started.insert(id.to_string()) { + frames.push(exec_start(id, d)); + } + frames.push(json!({ + "type": "function_execution_end", + "function_call_id": id, + "function_id": map::function_id(d), + "result": { "content": map::result_content(d), "details": null }, + "is_error": map::is_error_item(d), + "duration_ms": 0, + })); + frames + } + _ => vec![], + } +} diff --git a/codex/tests/translate.rs b/codex/tests/translate.rs new file mode 100644 index 00000000..09b42b46 --- /dev/null +++ b/codex/tests/translate.rs @@ -0,0 +1,120 @@ +//! Full per-turn translation: feed a scripted Codex event sequence through the +//! pure stepper and assert the agent::events frame sequence + accumulated turn +//! state (thread id, usage, result, error). This is the orchestration the +//! stream loop runs, exercised without a live engine. + +use codex::codex::events_types::ThreadEvent; +use codex::codex::translate::{step, TurnState}; +use serde_json::{json, Value}; + +fn run(events: &[Value]) -> (TurnState, Vec) { + let mut state = TurnState::new("gpt-5.2-codex".into()); + let mut frames = Vec::new(); + for ev in events { + let parsed: ThreadEvent = serde_json::from_value(ev.clone()).unwrap(); + frames.extend(step(&mut state, parsed)); + } + (state, frames) +} + +fn types(frames: &[Value]) -> Vec { + frames + .iter() + .map(|f| f["type"].as_str().unwrap_or("?").to_string()) + .collect() +} + +#[test] +fn full_command_turn_produces_ordered_frames_and_state() { + let (state, frames) = run(&[ + json!({ "type": "thread.started", "thread_id": "th-1" }), + json!({ "type": "turn.started" }), + json!({ "type": "item.started", "item": { "id": "i1", "type": "command_execution", "command": "ls", "aggregated_output": "", "status": "in_progress" } }), + json!({ "type": "item.completed", "item": { "id": "i1", "type": "command_execution", "command": "ls", "aggregated_output": "files", "exit_code": 0, "status": "completed" } }), + json!({ "type": "item.completed", "item": { "id": "i2", "type": "agent_message", "text": "done" } }), + json!({ "type": "turn.completed", "usage": { "input_tokens": 5, "cached_input_tokens": 3, "output_tokens": 2, "reasoning_output_tokens": 1 } }), + ]); + + assert_eq!( + types(&frames), + vec![ + "function_execution_start", + "function_execution_end", + "message_complete", + ] + ); + // exec frames carry the mapped function id + args/result + assert_eq!(frames[0]["function_id"], "codex::shell"); + assert_eq!(frames[0]["args"]["command"], "ls"); + assert_eq!(frames[1]["is_error"], false); + assert_eq!(frames[1]["result"]["content"][0]["text"], "files"); + // message_complete stamps the model + assert_eq!(frames[2]["message"]["model"], "gpt-5.2-codex"); + assert_eq!(frames[2]["message"]["provider"], "codex"); + + assert_eq!(state.thread_id.as_deref(), Some("th-1")); + assert_eq!(state.result_text, "done"); + assert!(!state.is_error); + let u = state.usage.unwrap(); + assert_eq!(u.input_tokens, 5); + assert_eq!(u.cache_read_tokens, 3); + assert_eq!(u.reasoning_tokens, 1); +} + +#[test] +fn started_then_completed_emits_single_start() { + // item.started already emitted the start; item.completed must not repeat it. + let (_s, frames) = run(&[ + json!({ "type": "item.started", "item": { "id": "i1", "type": "command_execution", "command": "x", "status": "in_progress" } }), + json!({ "type": "item.completed", "item": { "id": "i1", "type": "command_execution", "command": "x", "aggregated_output": "ok", "exit_code": 0, "status": "completed" } }), + ]); + assert_eq!( + types(&frames), + vec!["function_execution_start", "function_execution_end"] + ); +} + +#[test] +fn completed_without_prior_start_synthesizes_start() { + // a completed exec item with no preceding started event still gets a start. + let (_s, frames) = run(&[ + json!({ "type": "item.completed", "item": { "id": "i9", "type": "command_execution", "command": "x", "aggregated_output": "", "exit_code": 1, "status": "failed" } }), + ]); + assert_eq!( + types(&frames), + vec!["function_execution_start", "function_execution_end"] + ); + assert_eq!(frames[1]["is_error"], true); +} + +#[test] +fn reasoning_maps_to_thinking_message() { + let (_s, frames) = run(&[ + json!({ "type": "item.completed", "item": { "id": "r1", "type": "reasoning", "text": "hmm" } }), + ]); + assert_eq!(types(&frames), vec!["message_complete"]); + assert_eq!(frames[0]["message"]["content"][0]["type"], "thinking"); +} + +#[test] +fn turn_failed_sets_error_state_and_emits_no_frame() { + let (state, frames) = run(&[ + json!({ "type": "thread.started", "thread_id": "th-1" }), + json!({ "type": "turn.failed", "error": { "message": "model exploded" } }), + ]); + assert!(frames.is_empty()); + assert!(state.is_error); + assert_eq!(state.stop_reason, "error"); + assert_eq!(state.result_text, "model exploded"); +} + +#[test] +fn mcp_tool_call_maps_to_server_tool_id() { + let (_s, frames) = run(&[ + json!({ "type": "item.completed", "item": { "id": "m1", "type": "mcp_tool_call", "server": "github", "tool": "create_issue", "arguments": { "title": "x" }, "status": "completed" } }), + ]); + assert_eq!( + frames.last().unwrap()["function_id"], + "github::create_issue" + ); +} From c2cf1b7204f15722e2adbcc4234af546db6c8981 Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Mon, 15 Jun 2026 13:37:17 +0100 Subject: [PATCH 16/20] =?UTF-8?q?fix(codex):=20address=20review=20?= =?UTF-8?q?=E2=80=94=20atomic=20guard,=20stderr=20drain,=20strict=20inputs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - atomic reserve: check + insert the live slot under one lock (try_reserve), with release on every early-return path; closes the TOCTOU between the busy-check and the insert - drain child stderr in a background task so a chatty codex can't fill the pipe buffer and block; tail surfaces on the error path - inspect child exit status: a non-zero exit with no error event (a crash) is now reported as error, not success (aborted path exempt) - empty-string sandbox_mode / approval_policy / reasoning_effort treated as unset so a caller can't wipe the operator's safety defaults with empty - load_session failure is logged (not silently flattened); a decode failure in state propagates as corruption instead of masquerading as no-session - unsupported message content shape errors instead of running empty prompt - --url defaults to empty so config.yaml engine_url is actually reachable - codex::start supervises the spawned task and marks error on panic 31 tests (2 new). Verified live: pong, config-url fallback, refactored run. --- codex/src/codex/args.rs | 23 ++++----- codex/src/codex/mod.rs | 99 +++++++++++++++++++++++++++++------- codex/src/functions/mod.rs | 21 ++++++-- codex/src/functions/types.rs | 4 +- codex/src/main.rs | 3 +- codex/src/state.rs | 10 ++-- codex/tests/args.rs | 14 +++++ codex/tests/prompt_config.rs | 9 ++++ 8 files changed, 143 insertions(+), 40 deletions(-) diff --git a/codex/src/codex/args.rs b/codex/src/codex/args.rs index 304eef8b..5aa144cd 100644 --- a/codex/src/codex/args.rs +++ b/codex/src/codex/args.rs @@ -169,21 +169,20 @@ pub fn resolve( .or_insert_with(|| Value::String(prompt.to_string())); } + // An empty string is treated as unset: a caller must not be able to wipe + // the operator's configured sandbox / approval defaults with "". + let or_default = |v: &Option, dflt: &str| { + v.clone() + .filter(|s| !s.is_empty()) + .unwrap_or_else(|| dflt.to_string()) + }; + ResolvedOptions { model, cwd, - sandbox_mode: req - .sandbox_mode - .clone() - .unwrap_or_else(|| d.sandbox_mode.clone()), - approval_policy: req - .approval_policy - .clone() - .unwrap_or_else(|| d.approval_policy.clone()), - reasoning_effort: req - .reasoning_effort - .clone() - .unwrap_or_else(|| d.reasoning_effort.clone()), + sandbox_mode: or_default(&req.sandbox_mode, &d.sandbox_mode), + approval_policy: or_default(&req.approval_policy, &d.approval_policy), + reasoning_effort: or_default(&req.reasoning_effort, &d.reasoning_effort), skip_git_repo_check: req.skip_git_repo_check.unwrap_or(d.skip_git_repo_check), base_url: cfg.base_url.clone(), config, diff --git a/codex/src/codex/mod.rs b/codex/src/codex/mod.rs index a8b4aea4..f69d127d 100644 --- a/codex/src/codex/mod.rs +++ b/codex/src/codex/mod.rs @@ -54,6 +54,22 @@ pub async fn is_live(session_id: &str) -> bool { LIVE.lock().await.contains_key(session_id) } +/// Atomically reserve the single live slot for a session: returns false if one +/// is already active. Check + insert happen under one lock so two concurrent +/// runs for the same session can't both pass. +async fn try_reserve(session_id: &str, cancel: CancellationToken) -> bool { + let mut live = LIVE.lock().await; + if live.contains_key(session_id) { + return false; + } + live.insert(session_id.to_string(), LiveRun { cancel }); + true +} + +async fn release(session_id: &str) { + LIVE.lock().await.remove(session_id); +} + pub async fn stop(session_id: &str) -> bool { if let Some(run) = LIVE.lock().await.get(session_id) { run.cancel.cancel(); @@ -79,9 +95,12 @@ pub async fn run(iii: III, cfg: Arc, req: RunRequest) -> Value { .clone() .unwrap_or_else(|| uuid::Uuid::new_v4().to_string()); - // One live run per session: the in-process handle is what codex::stop - // targets, so a second concurrent run would clobber it and race the record. - if is_live(&session_id).await { + // One live run per session: reserve the slot atomically up front. The + // in-process handle is what codex::stop targets, so a second concurrent run + // would clobber it and race the record. Every early return past this point + // must `release` the slot. + let cancel = CancellationToken::default(); + if !try_reserve(&session_id, cancel.clone()).await { return json!({ "session_id": session_id, "busy": true, @@ -92,11 +111,20 @@ pub async fn run(iii: III, cfg: Arc, req: RunRequest) -> Value { let prompt = match extract_prompt(&req) { Ok(p) => p, Err(e) => { - return json!({ "session_id": session_id, "is_error": true, "result": e.to_string() }) + release(&session_id).await; + return json!({ "session_id": session_id, "is_error": true, "result": e.to_string() }); } }; - let prior = load_session(&iii, &session_id).await.ok().flatten(); + // A load failure is corruption/transient, not "no prior session": log it + // and proceed fresh rather than silently masking it. + let prior = match load_session(&iii, &session_id).await { + Ok(p) => p, + Err(e) => { + tracing::warn!(session_id, error = %e, "load_session failed; proceeding without resume"); + None + } + }; let prior_thread = prior.as_ref().and_then(|r| r.codex_thread_id.clone()); let want_ctx = req.iii_context.unwrap_or(cfg.iii_context); @@ -118,7 +146,8 @@ pub async fn run(iii: III, cfg: Arc, req: RunRequest) -> Value { Some(schema) => match write_schema(schema) { Ok(f) => Some(f), Err(e) => { - return json!({ "session_id": session_id, "is_error": true, "result": format!("output_schema temp file: {e}") }) + release(&session_id).await; + return json!({ "session_id": session_id, "is_error": true, "result": format!("output_schema temp file: {e}") }); } }, None => None, @@ -153,7 +182,8 @@ pub async fn run(iii: III, cfg: Arc, req: RunRequest) -> Value { { Ok(c) => c, Err(e) => { - return json!({ "session_id": session_id, "is_error": true, "stop_reason": "error", "result": format!("failed to spawn codex: {e}") }) + release(&session_id).await; + return json!({ "session_id": session_id, "is_error": true, "stop_reason": "error", "result": format!("failed to spawn codex: {e}") }); } }; @@ -162,23 +192,29 @@ pub async fn run(iii: III, cfg: Arc, req: RunRequest) -> Value { let _ = stdin.shutdown().await; } - let cancel = CancellationToken::default(); - LIVE.lock().await.insert( - session_id.clone(), - LiveRun { - cancel: cancel.clone(), - }, - ); + // Drain stderr in the background so a chatty child can't fill the pipe + // buffer and block. Tail is captured for the error path. + let stderr_tail = drain_stderr(child.stderr.take()); record.status = Status::Working; record.updated_at_ms = now_ms(); let _ = save_session(&iii, &record).await; - let outcome = stream_turn(&iii, &cfg, &session_id, &mut child, &cancel, &mut record).await; + let mut outcome = stream_turn(&iii, &cfg, &session_id, &mut child, &cancel, &mut record).await; - LIVE.lock().await.remove(&session_id); + release(&session_id).await; drop(schema_file); + // On error with no result text, surface the captured stderr tail. + if outcome.is_error && outcome.result_text.is_empty() { + if let Ok(tail) = stderr_tail.await { + let tail = tail.trim(); + if !tail.is_empty() { + outcome.result_text = tail.chars().take(2000).collect(); + } + } + } + record.status = if outcome.is_error { Status::Error } else { @@ -307,7 +343,7 @@ async fn stream_turn( } } - let _ = child.wait().await; + let exit = child.wait().await; // fold the accumulated turn state into the outcome (cancel sets aborted above) if !outcome.is_error && outcome.stop_reason != "aborted" { outcome.is_error = state.is_error; @@ -315,9 +351,38 @@ async fn stream_turn( outcome.result_text = state.result_text; } outcome.usage = state.usage; + // Backstop: a non-zero exit with no error event observed (e.g. the CLI + // crashed) must not be reported as success. The aborted path is expected + // to exit non-zero and is left as-is. + if !outcome.is_error && outcome.stop_reason != "aborted" { + let bad = matches!(&exit, Ok(s) if !s.success()) || exit.is_err(); + if bad { + outcome.is_error = true; + outcome.stop_reason = "error".to_string(); + if outcome.result_text.is_empty() { + outcome.result_text = match &exit { + Ok(s) => format!("codex exited with {s}"), + Err(e) => format!("codex wait failed: {e}"), + }; + } + } + } outcome } +/// Drain a child's stderr in the background into a captured tail, so a chatty +/// process can't block on a full pipe. Returns a handle yielding the text. +fn drain_stderr(stderr: Option) -> tokio::task::JoinHandle { + tokio::spawn(async move { + let mut buf = String::new(); + if let Some(mut e) = stderr { + use tokio::io::AsyncReadExt; + let _ = e.read_to_string(&mut buf).await; + } + buf + }) +} + fn write_schema(schema: &Value) -> anyhow::Result { use std::io::Write; let mut f = tempfile::NamedTempFile::new()?; diff --git a/codex/src/functions/mod.rs b/codex/src/functions/mod.rs index ee47bbe8..052f726f 100644 --- a/codex/src/functions/mod.rs +++ b/codex/src/functions/mod.rs @@ -59,12 +59,23 @@ pub fn register_all(iii: &III, cfg: Arc) { started.session_id = Some(session_id.clone()); let bg_iii = iii_h.clone(); let bg_id = session_id.clone(); + // Supervise the run: run() persists terminal state itself, + // but if the task panics that never happens — the + // supervisor catches the JoinError and marks the session + // error so it can't stay stuck in `working`. tokio::spawn(async move { - // run() persists terminal state itself; this is the - // backstop if the task panics or its save fails. - let res = codex::run(bg_iii.clone(), cfg_h, started).await; - if res.get("is_error").and_then(Value::as_bool) == Some(true) { - mark_error(&bg_iii, &bg_id).await; + let run_iii = bg_iii.clone(); + let inner = tokio::spawn(codex::run(run_iii, cfg_h, started)); + match inner.await { + Ok(res) => { + if res.get("is_error").and_then(Value::as_bool) == Some(true) { + mark_error(&bg_iii, &bg_id).await; + } + } + Err(e) => { + tracing::error!(session_id = %bg_id, error = %e, "codex::start task panicked"); + mark_error(&bg_iii, &bg_id).await; + } } }); Ok::(json!({ "session_id": session_id, "started": true })) diff --git a/codex/src/functions/types.rs b/codex/src/functions/types.rs index fccf142e..f316599b 100644 --- a/codex/src/functions/types.rs +++ b/codex/src/functions/types.rs @@ -73,6 +73,8 @@ pub fn extract_prompt(req: &RunRequest) -> anyhow::Result { .filter_map(|b| b.get("text").and_then(Value::as_str)) .collect::>() .join("\n")), - _ => Ok(String::new()), + _ => Err(anyhow::anyhow!( + "unsupported message content: expected a string or an array of content blocks" + )), } } diff --git a/codex/src/main.rs b/codex/src/main.rs index 7c2c8cd5..44cc4599 100644 --- a/codex/src/main.rs +++ b/codex/src/main.rs @@ -16,7 +16,8 @@ struct Cli { #[arg(long, default_value = "./config.yaml")] config: String, - #[arg(long, env = "III_URL", default_value = "ws://127.0.0.1:49134")] + /// Engine WebSocket URL. Unset falls back to `engine_url` in config.yaml. + #[arg(long, env = "III_URL", default_value = "")] url: String, /// Print the registry manifest as JSON and exit. diff --git a/codex/src/state.rs b/codex/src/state.rs index f7f66db2..2ea1bc92 100644 --- a/codex/src/state.rs +++ b/codex/src/state.rs @@ -26,10 +26,12 @@ pub async fn load_session(iii: &III, session_id: &str) -> anyhow::Result(v) { - Ok(rec) => Ok(Some(rec)), - Err(_) => Ok(None), - } + // A decode failure means a corrupt or version-drifted record we wrote — a + // real problem, not a missing session. Surface it instead of silently + // starting a fresh conversation. + let rec = serde_json::from_value::(v) + .map_err(|e| anyhow::anyhow!("corrupt session record for {session_id}: {e}"))?; + Ok(Some(rec)) } pub async fn save_session(iii: &III, record: &SessionRecord) -> anyhow::Result<()> { diff --git a/codex/tests/args.rs b/codex/tests/args.rs index 9c709e7f..70bc65f3 100644 --- a/codex/tests/args.rs +++ b/codex/tests/args.rs @@ -112,6 +112,20 @@ fn resolve_caller_developer_instructions_wins() { ); } +#[test] +fn resolve_empty_safety_fields_fall_back_to_defaults() { + // an empty string must not wipe the operator's sandbox / approval defaults + let req = RunRequest { + sandbox_mode: Some(String::new()), + approval_policy: Some(String::new()), + ..Default::default() + }; + let cfg = Config::default(); + let o = resolve(&req, &cfg, None, None, None); + assert_eq!(o.sandbox_mode, "workspace-write"); + assert_eq!(o.approval_policy, "never"); +} + #[test] fn resolve_honors_per_turn_overrides_over_prior() { let req = RunRequest { diff --git a/codex/tests/prompt_config.rs b/codex/tests/prompt_config.rs index 47a040b1..ec8766b4 100644 --- a/codex/tests/prompt_config.rs +++ b/codex/tests/prompt_config.rs @@ -44,6 +44,15 @@ fn no_prompt_no_user_message_errors() { assert!(extract_prompt(&req).is_err()); } +#[test] +fn unsupported_message_content_errors() { + let req: RunRequest = serde_json::from_value(json!({ + "messages": [{ "role": "user", "content": { "unexpected": "object" } }] + })) + .unwrap(); + assert!(extract_prompt(&req).is_err()); +} + #[test] fn config_defaults_when_file_missing() { let cfg = Config::load("/nonexistent/config.yaml").unwrap(); From 65ed074fe5dec9de6195e6015da8955661df5a6d Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Mon, 15 Jun 2026 13:59:41 +0100 Subject: [PATCH 17/20] =?UTF-8?q?chore(codex):=20conform=20to=20current=20?= =?UTF-8?q?SOP=20=E2=80=94=20iii-permissions.yaml,=20lean=20manifest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - add iii-permissions.yaml (new-worker SOP § 7): read-only status / sessions::list allow-listed; run/start/stop stay at needs_approval since they spawn a full agent with host fs+shell - trim iii.worker.yaml to the canonical binary-worker shape (drop the stale targets/runtime/scripts blocks; the release matrix is driven by release.yml, not the manifest) --- codex/iii-permissions.yaml | 12 ++++++++++++ codex/iii.worker.yaml | 17 +---------------- 2 files changed, 13 insertions(+), 16 deletions(-) create mode 100644 codex/iii-permissions.yaml diff --git a/codex/iii-permissions.yaml b/codex/iii-permissions.yaml new file mode 100644 index 00000000..9eee9357 --- /dev/null +++ b/codex/iii-permissions.yaml @@ -0,0 +1,12 @@ +# Agent permissions for the codex worker. +# Spec: docs/sops/new-worker.md § 7. First-match-wins. +# +# codex::run / codex::start spawn a full Codex coding agent with the host's +# filesystem and shell — an agent invoking those without human approval is a +# privilege escalation, so they are NOT allow-listed and stay at the +# needs_approval default. Read-only introspection is safe to allow. +version: 1 + +rules: + - codex::status + - codex::sessions::list diff --git a/codex/iii.worker.yaml b/codex/iii.worker.yaml index 84bf93fd..02e0d962 100644 --- a/codex/iii.worker.yaml +++ b/codex/iii.worker.yaml @@ -4,19 +4,4 @@ language: rust deploy: binary manifest: Cargo.toml bin: codex -description: OpenAI Codex as an iii worker — codex::* run headless Codex turns by spawning the codex CLI, mirror raw thread events onto codex::events, and stream AgentEvent frames onto agent::events. - -targets: - - x86_64-apple-darwin - - aarch64-apple-darwin - - x86_64-unknown-linux-gnu - - x86_64-unknown-linux-musl - - aarch64-unknown-linux-gnu - - armv7-unknown-linux-gnueabihf - -runtime: - kind: rust - -scripts: - install: cargo build - start: cargo run +description: OpenAI Codex as an iii worker; codex::run/start/stop/status/sessions::list spawn the codex CLI for headless turns, mirror raw thread events onto codex::events, and stream AgentEvent frames onto agent::events. From ea33639d48018f9f6788e2a374eabcb29272536f Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Mon, 15 Jun 2026 14:17:09 +0100 Subject: [PATCH 18/20] feat(codex): manage config via the configuration worker MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Migrate off file-only config.yaml to the configuration-worker pattern (shell/coder/database): config.yaml is now the seed installed as initial_value; the live value is authoritative and hot-reloads. - src/configuration.rs: register_config / fetch_config / config-change trigger (configuration:updated) / reconcile / whole-snapshot hot-swap. No jail gate — every codex field is a runtime tuning knob. - config.rs: Config gains Serialize + JsonSchema + to_json/from_json/ json_schema; engine_url dropped from the schema (bootstrap, stays on --url). - main.rs: load seed -> register_config -> fetch -> ConfigCell -> bind trigger + reconcile before serving -> register_all(cell). - handlers read the live snapshot per call (ConfigCell). 33 tests. Verified live: schema registered, configuration::get returns the value, codex::run uses the snapshot, configuration::set hot-reloads. --- codex/config.yaml | 7 +- codex/src/config.rs | 38 ++++++--- codex/src/configuration.rs | 153 +++++++++++++++++++++++++++++++++++ codex/src/functions/mod.rs | 22 ++--- codex/src/lib.rs | 1 + codex/src/main.rs | 50 +++++++++--- codex/tests/prompt_config.rs | 14 +++- 7 files changed, 248 insertions(+), 37 deletions(-) create mode 100644 codex/src/configuration.rs diff --git a/codex/config.yaml b/codex/config.yaml index cd9e0571..5303c125 100644 --- a/codex/config.yaml +++ b/codex/config.yaml @@ -1,4 +1,6 @@ -engine_url: ws://127.0.0.1:49134 +# Seed installed as `initial_value` with the configuration worker on first +# registration; the live value is authoritative thereafter. The engine URL is +# bootstrap and lives on the --url flag, not here. defaults: model: "" @@ -24,8 +26,7 @@ raw_events_stream: codex::events # developer_instructions in codex_config wins. iii_context: true -# Path to the Codex CLI binary. Empty = SDK default resolution; the worker -# falls back to the `codex` binary on PATH (needed for the bundled build). +# Path to the Codex CLI binary. Empty = the `codex` binary on PATH. codex_executable: "" # Override the API base URL (passed to the SDK as baseUrl). Empty = default. diff --git a/codex/src/config.rs b/codex/src/config.rs index 5b090a3c..ece88c72 100644 --- a/codex/src/config.rs +++ b/codex/src/config.rs @@ -1,10 +1,15 @@ -//! Operator config loaded from `config.yaml` (the seed default; same keys the -//! TS worker used). Missing file falls back to defaults; a malformed file is a -//! hard error so a typo fails the worker fast rather than silently. +//! Runtime config managed by the `configuration` worker. `config.yaml` is the +//! seed installed as `initial_value` on first registration; the live value from +//! the configuration worker is authoritative thereafter and hot-reloads. +//! +//! `engine_url` is intentionally NOT here — it is bootstrap (you need it to +//! reach the configuration worker), so it stays on the `--url` CLI flag. -use serde::Deserialize; +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; +use serde_json::Value; -#[derive(Debug, Clone, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)] #[serde(default)] pub struct Defaults { pub model: String, @@ -28,10 +33,9 @@ impl Default for Defaults { } } -#[derive(Debug, Clone, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)] #[serde(default)] pub struct Config { - pub engine_url: String, pub defaults: Defaults, pub events_stream: String, pub raw_events_stream: String, @@ -43,7 +47,6 @@ pub struct Config { impl Default for Config { fn default() -> Self { Self { - engine_url: "ws://127.0.0.1:49134".to_string(), defaults: Defaults::default(), events_stream: "agent::events".to_string(), raw_events_stream: "codex::events".to_string(), @@ -55,8 +58,8 @@ impl Default for Config { } impl Config { - /// Load from a YAML file. A missing file yields defaults; any other error - /// (parse, permissions) propagates so the worker fails fast. + /// Load the seed from a YAML file. Missing file yields defaults; a parse + /// error propagates so a typo fails the worker fast. pub fn load(path: &str) -> anyhow::Result { match std::fs::read_to_string(path) { Ok(text) => Ok(serde_yaml::from_str(&text)?), @@ -64,4 +67,19 @@ impl Config { Err(e) => Err(e.into()), } } + + pub fn json_schema() -> Value { + let root = schemars::gen::SchemaGenerator::default().into_root_schema_for::(); + serde_json::to_value(root).expect("config schema serializes") + } + + pub fn to_json(&self) -> Value { + serde_json::to_value(self).expect("config serializes") + } + + /// Parse a value fetched from the configuration worker (already env-expanded + /// by the worker; this does not re-expand). + pub fn from_json(value: &Value) -> anyhow::Result { + Ok(serde_json::from_value(value.clone())?) + } } diff --git a/codex/src/configuration.rs b/codex/src/configuration.rs new file mode 100644 index 00000000..3a6424d6 --- /dev/null +++ b/codex/src/configuration.rs @@ -0,0 +1,153 @@ +//! Integration with the `configuration` worker — register the codex config +//! schema, fetch the live value, and hot-reload it on change. Every field is a +//! runtime tuning knob (model/sandbox defaults, stream names, executable path, +//! iii-context toggle), so a change hot-swaps the whole snapshot — there is no +//! security topology to refuse like the path-jail workers. + +use std::sync::Arc; +use std::time::Duration; + +use iii_sdk::{IIIError, RegisterFunction, RegisterTriggerInput, TriggerRequest, III}; +use serde_json::{json, Value}; +use tokio::sync::RwLock; + +use crate::config::Config; + +/// Hot-swappable config snapshot shared with every handler. A handler takes a +/// `read().await` and clones the inner `Arc` out (a cheap refcount bump) so it +/// never holds the lock across a turn; `apply_config` whole-snapshot replaces +/// the inner `Arc` under the write lock. +pub type ConfigCell = Arc>>; + +pub const CONFIG_ID: &str = "codex"; +const CONFIG_FN_ID: &str = "codex::on-config-change"; +const CONFIG_TIMEOUT_MS: u64 = 5_000; +const CONFIG_RETRIES: u32 = 3; + +/// Register the `codex` configuration schema. When `seed` is present its value +/// is installed as `initial_value`; otherwise the built-in default is seeded +/// only when no stored value exists yet. +pub async fn register_config(iii: &III, seed: Option<&Config>) -> Result<(), String> { + let mut payload = json!({ + "id": CONFIG_ID, + "name": "Codex", + "description": "OpenAI Codex worker: per-turn defaults (model, sandbox mode, approval policy, reasoning effort, working directory), the agent::events / codex::events stream names, the codex CLI path, an optional API base URL, and whether to inject the iii runtime context as developer_instructions.", + "schema": Config::json_schema(), + }); + if let Some(seed) = seed { + payload["initial_value"] = seed.to_json(); + } else if should_seed_default(iii).await? { + payload["initial_value"] = Config::default().to_json(); + } + trigger_with_retry(iii, "configuration::register", payload).await?; + Ok(()) +} + +/// Read the live `codex` configuration; built-in default when none stored. +pub async fn fetch_config(iii: &III) -> Result { + match try_get_value(iii).await? { + Some(v) if !v.is_null() => Config::from_json(&v).map_err(|e| e.to_string()), + _ => { + tracing::info!("no codex configuration value found; using built-in defaults"); + Ok(Config::default()) + } + } +} + +async fn should_seed_default(iii: &III) -> Result { + Ok(matches!( + try_get_value(iii).await?, + None | Some(Value::Null) + )) +} + +/// `Ok(None)` when the entry does not exist (`NOT_FOUND`). +async fn try_get_value(iii: &III) -> Result, String> { + match trigger_with_retry(iii, "configuration::get", json!({ "id": CONFIG_ID })).await { + Ok(resp) => Ok(resp.get("value").cloned()), + Err(e) if e.contains("NOT_FOUND") => Ok(None), + Err(e) => Err(e), + } +} + +pub async fn apply_config(cell: &ConfigCell, cfg: Config) { + *cell.write().await = Arc::new(cfg); +} + +/// Register the internal config-change handler and bind the `configuration` +/// trigger that wakes it. +pub fn register_config_trigger(iii: &III, cell: ConfigCell) -> Result<(), IIIError> { + let engine = iii.clone(); + iii.register_function( + CONFIG_FN_ID, + RegisterFunction::new_async(move |_payload: Value| { + let cell = cell.clone(); + let engine = engine.clone(); + async move { + on_config_change(&engine, &cell).await; + Ok::(json!({ "ok": true })) + } + }) + .description("Internal: reload codex configuration when it changes."), + ); + + iii.register_trigger(RegisterTriggerInput { + trigger_type: "configuration".to_string(), + function_id: CONFIG_FN_ID.to_string(), + config: json!({ + "configuration_id": CONFIG_ID, + "event_types": ["configuration:updated"], + }), + metadata: None, + })?; + Ok(()) +} + +/// Re-fetch the authoritative value after trigger registration to close the +/// boot race (an update that landed between the initial fetch and the trigger +/// binding has no other listener). +pub async fn reconcile(iii: &III, cell: &ConfigCell) { + on_config_change(iii, cell).await; +} + +/// The trigger payload is intentionally ignored — `codex::on-config-change` is +/// a discoverable bus function, so trusting `payload.new_value` would let any +/// caller inject config without updating persisted state. Re-fetch the stored +/// value instead. The previous snapshot is kept on any failure. +async fn on_config_change(iii: &III, cell: &ConfigCell) { + match fetch_config(iii).await { + Ok(cfg) => { + apply_config(cell, cfg).await; + tracing::info!("codex configuration reloaded"); + } + Err(e) => { + tracing::error!(error = %e, "config-change: fetch failed; keeping previous config"); + } + } +} + +async fn trigger_with_retry(iii: &III, function_id: &str, payload: Value) -> Result { + let mut last_err = String::new(); + for attempt in 1..=CONFIG_RETRIES { + match iii + .trigger(TriggerRequest { + function_id: function_id.to_string(), + payload: payload.clone(), + action: None, + timeout_ms: Some(CONFIG_TIMEOUT_MS), + }) + .await + { + Ok(v) => return Ok(v), + Err(e) => { + last_err = e.to_string(); + if attempt < CONFIG_RETRIES { + tokio::time::sleep(Duration::from_millis(250 * u64::from(attempt))).await; + } + } + } + } + Err(format!( + "{function_id} failed after {CONFIG_RETRIES} attempts: {last_err}" + )) +} diff --git a/codex/src/functions/mod.rs b/codex/src/functions/mod.rs index 052f726f..31aa26f4 100644 --- a/codex/src/functions/mod.rs +++ b/codex/src/functions/mod.rs @@ -4,13 +4,11 @@ pub mod types; -use std::sync::Arc; - use iii_sdk::{IIIError, RegisterFunction, III}; use serde_json::{json, Value}; use crate::codex; -use crate::config::Config; +use crate::configuration::ConfigCell; use crate::state::{list_sessions, load_session, mark_error}; use types::{RunRequest, SessionIdRequest}; @@ -19,17 +17,20 @@ fn schema_value() -> Value { serde_json::to_value(root).expect("schema serializes") } -pub fn register_all(iii: &III, cfg: Arc) { +pub fn register_all(iii: &III, cell: ConfigCell) { // codex::run — run a turn and wait for the result. { let iii_h = iii.clone(); - let cfg_h = cfg.clone(); + let cell_h = cell.clone(); iii.register_function( "codex::run", RegisterFunction::new_async(move |req: RunRequest| { let iii_h = iii_h.clone(); - let cfg_h = cfg_h.clone(); - async move { Ok::(codex::run(iii_h, cfg_h, req).await) } + let cell_h = cell_h.clone(); + async move { + let cfg = { cell_h.read().await.clone() }; + Ok::(codex::run(iii_h, cfg, req).await) + } }) .request_format(schema_value::()) .description( @@ -44,12 +45,12 @@ pub fn register_all(iii: &III, cfg: Arc) { // codex::start — fire-and-forget; progress on the streams. { let iii_h = iii.clone(); - let cfg_h = cfg.clone(); + let cell_h = cell.clone(); iii.register_function( "codex::start", RegisterFunction::new_async(move |req: RunRequest| { let iii_h = iii_h.clone(); - let cfg_h = cfg_h.clone(); + let cell_h = cell_h.clone(); async move { let session_id = req .session_id @@ -59,13 +60,14 @@ pub fn register_all(iii: &III, cfg: Arc) { started.session_id = Some(session_id.clone()); let bg_iii = iii_h.clone(); let bg_id = session_id.clone(); + let cfg = { cell_h.read().await.clone() }; // Supervise the run: run() persists terminal state itself, // but if the task panics that never happens — the // supervisor catches the JoinError and marks the session // error so it can't stay stuck in `working`. tokio::spawn(async move { let run_iii = bg_iii.clone(); - let inner = tokio::spawn(codex::run(run_iii, cfg_h, started)); + let inner = tokio::spawn(codex::run(run_iii, cfg, started)); match inner.await { Ok(res) => { if res.get("is_error").and_then(Value::as_bool) == Some(true) { diff --git a/codex/src/lib.rs b/codex/src/lib.rs index 8a131da4..873f6e68 100644 --- a/codex/src/lib.rs +++ b/codex/src/lib.rs @@ -3,6 +3,7 @@ pub mod codex; pub mod config; +pub mod configuration; pub mod events; pub mod functions; pub mod iii_prompt; diff --git a/codex/src/main.rs b/codex/src/main.rs index 44cc4599..3098581f 100644 --- a/codex/src/main.rs +++ b/codex/src/main.rs @@ -1,23 +1,26 @@ use std::sync::Arc; -use anyhow::Result; +use anyhow::{Context, Result}; use clap::Parser; use iii_observability::OtelConfig; use iii_sdk::{register_worker, InitOptions}; +use tokio::sync::RwLock; use codex::config::Config; +use codex::configuration; use codex::functions::register_all; use codex::manifest; #[derive(Parser, Debug)] #[command(name = "codex", about = "OpenAI Codex worker for iii agents")] struct Cli { - /// Seed config loaded at boot. Defaults to ./config.yaml. + /// Seed config registered as `initial_value` with the `configuration` + /// worker on first registration. Defaults to ./config.yaml. The live value + /// from the configuration worker is authoritative once an entry exists. #[arg(long, default_value = "./config.yaml")] config: String, - /// Engine WebSocket URL. Unset falls back to `engine_url` in config.yaml. - #[arg(long, env = "III_URL", default_value = "")] + #[arg(long, env = "III_URL", default_value = "ws://127.0.0.1:49134")] url: String, /// Print the registry manifest as JSON and exit. @@ -45,23 +48,44 @@ async fn main() -> Result<()> { ) .init(); - let cfg = Arc::new(Config::load(&cli.config)?); - let url = if cli.url.is_empty() { - cfg.engine_url.clone() - } else { - cli.url.clone() - }; - tracing::info!(url = %url, config = %cli.config, "connecting to III engine"); + tracing::info!(url = %cli.url, seed_config = %cli.config, "connecting to III engine"); let iii = register_worker( - &url, + &cli.url, InitOptions { otel: Some(OtelConfig::default()), ..Default::default() }, ); - register_all(&iii, cfg); + // Seed from config.yaml when present; a parse error fails fast. + let seed = match Config::load(&cli.config) { + Ok(cfg) => Some(cfg), + Err(e) => { + tracing::warn!(path = %cli.config, error = %e, "failed to load seed config; relying on the configuration worker"); + None + } + }; + + configuration::register_config(&iii, seed.as_ref()) + .await + .map_err(anyhow::Error::msg) + .context("registering codex configuration schema")?; + + let cfg = configuration::fetch_config(&iii) + .await + .map_err(anyhow::Error::msg) + .context("loading codex configuration")?; + + let cell: configuration::ConfigCell = Arc::new(RwLock::new(Arc::new(cfg))); + + // Bind the config-change trigger and reconcile BEFORE serving, so a value + // that landed during boot is applied before the first turn. + configuration::register_config_trigger(&iii, cell.clone()) + .context("registering configuration change trigger")?; + configuration::reconcile(&iii, &cell).await; + + register_all(&iii, cell); tracing::info!("codex worker registered all functions, ready"); wait_for_shutdown_signal().await?; diff --git a/codex/tests/prompt_config.rs b/codex/tests/prompt_config.rs index ec8766b4..0199b0a2 100644 --- a/codex/tests/prompt_config.rs +++ b/codex/tests/prompt_config.rs @@ -56,7 +56,6 @@ fn unsupported_message_content_errors() { #[test] fn config_defaults_when_file_missing() { let cfg = Config::load("/nonexistent/config.yaml").unwrap(); - assert_eq!(cfg.engine_url, "ws://127.0.0.1:49134"); assert_eq!(cfg.defaults.sandbox_mode, "workspace-write"); assert_eq!(cfg.defaults.approval_policy, "never"); assert!(cfg.defaults.skip_git_repo_check); @@ -73,6 +72,19 @@ fn config_parse_error_is_fatal() { assert!(Config::load(path.to_str().unwrap()).is_err()); } +#[test] +fn config_round_trips_through_json_for_the_configuration_worker() { + // to_json (initial_value) -> from_json (fetched value) preserves the config + let cfg = Config::default(); + let json = cfg.to_json(); + let back = Config::from_json(&json).unwrap(); + assert_eq!(back.defaults.sandbox_mode, cfg.defaults.sandbox_mode); + assert_eq!(back.raw_events_stream, cfg.raw_events_stream); + assert_eq!(back.iii_context, cfg.iii_context); + // the published schema is a JSON-schema object + assert_eq!(Config::json_schema()["type"], "object"); +} + #[test] fn config_merges_partial_file() { let dir = tempfile::tempdir().unwrap(); From 24d27e9955db48a4aa24bb3fc74884767b048c7f Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Mon, 15 Jun 2026 17:48:31 +0100 Subject: [PATCH 19/20] chore(codex): release wiring + resilient config boot for interface-smoke MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - add codex to create-tag.yml options and release.yml tag patterns (SOP § 6 — without it a release tag triggers nothing) - config registration is now best-effort: register/fetch/trigger failures log + fall back to the seed instead of aborting, so registering codex::* never depends on the configuration worker being up (interface boot smoke runs against a bare engine) - deny the internal codex::on-config-change from agent calls Merged latest main. Verified: codex boots on a bare `workers: []` engine and registers all 6 functions; clippy + 33 tests green. --- .github/workflows/create-tag.yml | 1 + .github/workflows/release.yml | 1 + codex/iii-permissions.yaml | 2 ++ codex/src/main.rs | 35 +++++++++++++++++++------------- 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/.github/workflows/create-tag.yml b/.github/workflows/create-tag.yml index 45f13e6c..39ac0392 100644 --- a/.github/workflows/create-tag.yml +++ b/.github/workflows/create-tag.yml @@ -11,6 +11,7 @@ on: options: - acp - coder + - codex - console - database - email diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c990a8c9..668ecd8f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -6,6 +6,7 @@ on: tags: - 'acp/v*' - 'coder/v*' + - 'codex/v*' - 'console/v*' - 'database/v*' - 'email/v*' diff --git a/codex/iii-permissions.yaml b/codex/iii-permissions.yaml index 9eee9357..56e1a6dc 100644 --- a/codex/iii-permissions.yaml +++ b/codex/iii-permissions.yaml @@ -8,5 +8,7 @@ version: 1 rules: + # internal config-reload callback — bus-internal, never agent-callable + - '!codex::on-config-change' - codex::status - codex::sessions::list diff --git a/codex/src/main.rs b/codex/src/main.rs index 3098581f..4c77466c 100644 --- a/codex/src/main.rs +++ b/codex/src/main.rs @@ -1,6 +1,6 @@ use std::sync::Arc; -use anyhow::{Context, Result}; +use anyhow::Result; use clap::Parser; use iii_observability::OtelConfig; use iii_sdk::{register_worker, InitOptions}; @@ -67,22 +67,29 @@ async fn main() -> Result<()> { } }; - configuration::register_config(&iii, seed.as_ref()) - .await - .map_err(anyhow::Error::msg) - .context("registering codex configuration schema")?; - - let cfg = configuration::fetch_config(&iii) - .await - .map_err(anyhow::Error::msg) - .context("loading codex configuration")?; + // Config registration is best-effort: codex has no security policy, so if + // the configuration worker is unreachable (or absent, as in interface + // collection on a bare engine) the worker still serves with the seed / + // built-in defaults. Never fatal — registering codex::* must not depend on + // the configuration worker being up. + if let Err(e) = configuration::register_config(&iii, seed.as_ref()).await { + tracing::warn!(error = %e, "configuration::register failed; continuing with the seed"); + } + let cfg = match configuration::fetch_config(&iii).await { + Ok(cfg) => cfg, + Err(e) => { + tracing::warn!(error = %e, "configuration fetch failed; using seed/default config"); + seed.clone().unwrap_or_default() + } + }; let cell: configuration::ConfigCell = Arc::new(RwLock::new(Arc::new(cfg))); - // Bind the config-change trigger and reconcile BEFORE serving, so a value - // that landed during boot is applied before the first turn. - configuration::register_config_trigger(&iii, cell.clone()) - .context("registering configuration change trigger")?; + // Bind the config-change trigger and reconcile so a value that landed + // during boot is applied before the first turn. Best-effort. + if let Err(e) = configuration::register_config_trigger(&iii, cell.clone()) { + tracing::warn!(error = %e, "configuration change trigger registration failed"); + } configuration::reconcile(&iii, &cell).await; register_all(&iii, cell); From 03788738625915b6376e13bbe257e44fee375504 Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Mon, 15 Jun 2026 18:06:37 +0100 Subject: [PATCH 20/20] fix(codex): log dropped non-JSON lines from codex exec From an adversarial review (only finding above nit). A malformed JSONL line was dropped with no trace; add a tracing::debug on the parse-failure arm so a format drift is diagnosable instead of silent. 7 test groups, clippy clean. --- codex/src/codex/mod.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/codex/src/codex/mod.rs b/codex/src/codex/mod.rs index f69d127d..4677fa25 100644 --- a/codex/src/codex/mod.rs +++ b/codex/src/codex/mod.rs @@ -320,7 +320,10 @@ async fn stream_turn( } let raw: Value = match serde_json::from_str(&line) { Ok(v) => v, - Err(_) => continue, + Err(e) => { + tracing::debug!(session_id, error = %e, "skipping non-JSON line from codex exec"); + continue; + } }; // verbatim onto the raw stream emit(iii, &cfg.raw_events_stream, session_id, raw.clone()).await;

`7^$~FHT`02T7q7|3#3$7hRci;f=fm6U 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 MJhdUdf5*aXx})-PA`=kC=I_6!zYIGR>e#2ty4 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 nEwyV&1&*1A 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Ξ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 @+1Vhq?x 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