@mono-agent/agent-runtime 0.20.10 → 0.20.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/MIGRATION.md +264 -25
  2. package/README.md +139 -448
  3. package/package.json +7 -43
  4. package/src/agent/tools/agent-tool.js +5 -5
  5. package/src/agent/tools/bash.js +1 -24
  6. package/src/agent/tools/codex-subscription-search.js +1 -1
  7. package/src/agent/tools/index.js +7 -0
  8. package/src/agent/tools/monitor.js +140 -0
  9. package/src/agent/tools/pi-bridge.js +92 -7
  10. package/src/agent/tools/shared/bash-environment.js +31 -0
  11. package/src/agent/tools/shared/monitors.js +274 -0
  12. package/src/agent/tools/shared/process-runner.js +23 -5
  13. package/src/ai/cost.js +13 -68
  14. package/src/ai/index.js +4 -17
  15. package/src/ai/pi-interop.js +65 -1
  16. package/src/ai/pi-oauth-compat.js +1 -1
  17. package/src/ai/providers/codex/app-server-client.js +592 -0
  18. package/src/ai/providers/pi-models.js +18 -10
  19. package/src/ai/providers/pi-native/compaction-driver.js +49 -21
  20. package/src/ai/providers/pi-native/harness-adapter.js +338 -0
  21. package/src/ai/providers/pi-native/result-builder.js +10 -10
  22. package/src/ai/providers/pi-native/session-lifecycle.js +95 -40
  23. package/src/ai/providers/pi-native/stream-subscriber.js +23 -5
  24. package/src/ai/providers/pi-native/turn-runner.js +34 -15
  25. package/src/ai/providers/pi-native.js +48 -22
  26. package/src/ai/runtime/capabilities.js +11 -56
  27. package/src/ai/runtime/model-refs.js +118 -153
  28. package/src/ai/runtime/registry.js +22 -56
  29. package/src/ai/runtime/router.js +48 -408
  30. package/src/ai/runtime/session-liveness.js +3 -4
  31. package/src/ai/runtime/sessions.js +4 -5
  32. package/src/ai/runtime/tool-policy.js +0 -2
  33. package/src/ai/types.js +12 -108
  34. package/src/index.js +0 -6
  35. package/src/runtime.js +8 -14
  36. package/types/agent/tools/agent-tool.d.ts +1 -2
  37. package/types/agent/tools/codex-subscription-search.d.ts +1 -1
  38. package/types/agent/tools/index.d.ts +1 -0
  39. package/types/agent/tools/monitor.d.ts +44 -0
  40. package/types/agent/tools/pi-bridge.d.ts +3 -2
  41. package/types/agent/tools/shared/bash-environment.d.ts +4 -0
  42. package/types/agent/tools/shared/monitors.d.ts +83 -0
  43. package/types/agent/tools/shared/process-runner.d.ts +11 -2
  44. package/types/ai/cost.d.ts +1 -2
  45. package/types/ai/index.d.ts +1 -4
  46. package/types/ai/pi-interop.d.ts +20 -0
  47. package/types/ai/providers/codex/app-server-client.d.ts +37 -0
  48. package/types/ai/providers/pi-native/harness-adapter.d.ts +56 -0
  49. package/types/ai/providers/pi-native/result-builder.d.ts +3 -3
  50. package/types/ai/providers/pi-native/session-lifecycle.d.ts +2 -1
  51. package/types/ai/providers/pi-native/stream-subscriber.d.ts +2 -2
  52. package/types/ai/providers/pi-native/turn-runner.d.ts +33 -6
  53. package/types/ai/providers/pi-native.d.ts +21 -4
  54. package/types/ai/runtime/capabilities.d.ts +21 -70
  55. package/types/ai/runtime/model-refs.d.ts +0 -24
  56. package/types/ai/runtime/router.d.ts +3 -10
  57. package/types/ai/runtime/tool-policy.d.ts +0 -2
  58. package/types/ai/types.d.ts +28 -250
  59. package/types/index.d.ts +0 -1
  60. package/src/ai/providers/acp-client.js +0 -1149
  61. package/src/ai/providers/acp-privacy.js +0 -124
  62. package/src/ai/providers/acp-public.js +0 -21
  63. package/src/ai/providers/acp-session-tokens.js +0 -282
  64. package/src/ai/providers/acp-transport.js +0 -356
  65. package/src/ai/providers/acp.js +0 -543
  66. package/src/ai/providers/claude-cli.js +0 -883
  67. package/src/ai/providers/claude-sandbox.js +0 -71
  68. package/src/ai/providers/claude-sdk-discovery-worker.js +0 -53
  69. package/src/ai/providers/claude-sdk-discovery.js +0 -352
  70. package/src/ai/providers/claude-sdk.js +0 -1127
  71. package/src/ai/providers/claude-subagent-activity.js +0 -719
  72. package/src/ai/providers/claude-subagents.js +0 -88
  73. package/src/ai/providers/codex-app.js +0 -2946
  74. package/src/ai/providers/opencode-app.js +0 -1109
  75. package/src/ai/providers/opencode-discovery.js +0 -39
  76. package/src/ai/providers/opencode-server.js +0 -508
  77. package/src/ai/runtime/context-windows.js +0 -46
  78. package/src/ai/runtime/fast-mode.js +0 -8
  79. package/src/ai/streaming/codex-events.js +0 -146
  80. package/src/ai/streaming/opencode-events.js +0 -59
  81. package/types/ai/providers/acp-client.d.ts +0 -227
  82. package/types/ai/providers/acp-privacy.d.ts +0 -25
  83. package/types/ai/providers/acp-public.d.ts +0 -7
  84. package/types/ai/providers/acp-session-tokens.d.ts +0 -41
  85. package/types/ai/providers/acp-transport.d.ts +0 -45
  86. package/types/ai/providers/acp.d.ts +0 -93
  87. package/types/ai/providers/claude-cli.d.ts +0 -305
  88. package/types/ai/providers/claude-sandbox.d.ts +0 -79
  89. package/types/ai/providers/claude-sdk-discovery-worker.d.ts +0 -1
  90. package/types/ai/providers/claude-sdk-discovery.d.ts +0 -97
  91. package/types/ai/providers/claude-sdk.d.ts +0 -138
  92. package/types/ai/providers/claude-subagent-activity.d.ts +0 -53
  93. package/types/ai/providers/claude-subagents.d.ts +0 -18
  94. package/types/ai/providers/codex-app.d.ts +0 -151
  95. package/types/ai/providers/opencode-app.d.ts +0 -96
  96. package/types/ai/providers/opencode-discovery.d.ts +0 -4
  97. package/types/ai/providers/opencode-server.d.ts +0 -20
  98. package/types/ai/runtime/context-windows.d.ts +0 -9
  99. package/types/ai/runtime/fast-mode.d.ts +0 -2
  100. package/types/ai/streaming/codex-events.d.ts +0 -40
  101. package/types/ai/streaming/opencode-events.d.ts +0 -42
package/MIGRATION.md CHANGED
@@ -6,10 +6,9 @@ current pre-1.0 contract. `createRuntime()` remains the package entry point;
6
6
  `@mono-agent/runtime-adapter`. Provider-session input/output uses
7
7
  `providerSessionId`, with `disposeSession()` and `disposeAllSessions()` retained.
8
8
 
9
- Review every section that matches your usage. The package now has an explicit
10
- exports map, a five-bridge lazy registry, typed policy objects, stricter sandbox
11
- behavior, and revised provider-session semantics even when Pi is not your
12
- primary route.
9
+ Review every section that matches your usage. As of `0.21.0` the package runs
10
+ exactly one runtime Pi behind an explicit exports map, with typed policy
11
+ objects, stricter sandbox behavior, and revised provider-session semantics.
13
12
 
14
13
  Migration policy: every newly introduced fail-closed validation belongs in the
15
14
  first affected version section, even when it tightens behavior without changing
@@ -17,6 +16,255 @@ the configuration schema.
17
16
 
18
17
  ---
19
18
 
19
+ ## 0.21.0
20
+
21
+ **This is the largest breaking change since `0.3.x`.** mono-agent shipped six
22
+ runtime bridges behind a dispatch table; it now runs only its Pi implementation.
23
+ Read the whole section before upgrading a live agent, and migrate its config
24
+ before restarting one.
25
+
26
+ ### Pi 0.85 dependency migration
27
+
28
+ The runtime exact-pins Pi AI and Pi Agent Core at `0.85.0`; the TUI pins Pi TUI
29
+ at the same version. Pi's harness is now created asynchronously and exposes
30
+ prompt, navigation, compaction, abort, event, and transcript operations through
31
+ its `main` lane with an explicit operation context. mono-agent absorbs that API
32
+ change in its Pi compatibility adapter; hosts do not need a config migration.
33
+
34
+ Pi's JSONL store now writes v4 transcripts. Existing v3 transcripts are
35
+ upgraded by Pi when opened and retain their conversation context. An unfinished
36
+ durable operation is aborted before mono-agent accepts a new prompt because
37
+ mono-agent tools do not yet use Pi's replay-memo contract; this prevents an
38
+ interrupted side-effecting tool from being executed twice.
39
+
40
+ ### Deleted runtime bridges
41
+
42
+ `claude-sdk`, `claude-code-cli`, `codex-app-cli`, `opencode-app-cli` and
43
+ `acp-stdio` are gone. `pi-sdk` remains and is no longer *a* backend — it is the
44
+ runtime. The backend descriptor table, the selection table and
45
+ `MonoRuntimeBackendId` are removed with them.
46
+
47
+ ### What is NOT deleted
48
+
49
+ Four surfaces share names with the deleted bridges and are unaffected. If you
50
+ use any of them, nothing changes:
51
+
52
+ - **The ACP *server* bridge** (`mono-agent bridge acp`) — mono-agent still
53
+ serves ACP to clients. Only the ACP *client* backend was removed.
54
+ - **`install-skill --target claude|codex`** — writes skills into those tools'
55
+ directories.
56
+ - **`docs-mcp-pairing`** — pairs the docs MCP with Claude Code and Codex.
57
+ - **The Codex web-search backend** (`tools.web.search.backend: "codex"`) — it
58
+ drives a real Codex app-server through an extracted client.
59
+
60
+ Note also that `openai-codex` and `opencode-go` are **Pi provider ids**, not
61
+ references to the deleted bridges. Routes naming them keep working.
62
+
63
+ ### Model reference grammar
64
+
65
+ Old: `<sdk>:[<provider>:]<model>`. New: **`<provider>:<model>`**, split at the
66
+ first colon only.
67
+
68
+ | before | after |
69
+ | --- | --- |
70
+ | `pi:openai-codex:gpt-5.6-sol` | `openai-codex:gpt-5.6-sol` |
71
+ | `pi:anthropic:claude-opus-5` | `anthropic:claude-opus-5` |
72
+ | `ollama:llama3.1:8b` | unchanged — only the first colon splits |
73
+ | `codex:gpt-5.6-terra` | **rejected**; no mechanical replacement |
74
+
75
+ A leading `pi:` is canonicalized away automatically, so those refs keep working
76
+ and stripping the prefix is optional tidying rather than a migration step.
77
+ `codex:`, `claude:`, `claude-code:`, `codex-cli:`, `acp:` and `vercel:` are
78
+ rejected at load with the replacement named in the message `doctor`,
79
+ `mono-agent validate`, `mono-agent config` and the startup error all print. They
80
+ are **not** migrated automatically: `codex:gpt-5.6-terra` →
81
+ `openai-codex:gpt-5.6-terra` looks mechanical but changes which auth store the
82
+ agent reads, and refs paired with `executionMode: "cli"` have no Pi equivalent
83
+ at all. A human has to choose.
84
+
85
+ ### Retired configuration keys
86
+
87
+ Each has an environment twin, and both now fail at load with the repair for the
88
+ surface they were set on, instead of a generic unknown-key error. A single load
89
+ is exhaustive *within one class*: every retired key present is named in one
90
+ message, and every retired variable set is named in one message — not one per
91
+ run. It is not exhaustive *across* classes. A config carrying both a retired key
92
+ and a retired variable stops at the key, and names the variable only on the next
93
+ run; see [Migrating a config](#migrating-a-config) for the order the classes are
94
+ checked in. An empty assignment (`KEY=`) is treated as unset and does not fail.
95
+
96
+ | key | environment twin | replacement |
97
+ | --- | --- | --- |
98
+ | `runtime.executionMode` | `MONO_AGENT_EXECUTION_MODE` | delete it — only the Pi runtime remains |
99
+ | `memory.llm.executionMode` | `MONO_AGENT_MEMORY_LLM_EXECUTION_MODE` | delete it, same reason |
100
+ | `runtime.routeSafety` | `MONO_AGENT_ROUTE_SAFETY` | delete it — every route is Pi-native, so `per-route-native` has no meaning |
101
+ | `runtime.fallbackModels` | `MONO_AGENT_FALLBACK_MODELS` | `runtime.fallbacks: [{ "model": "..." }]` for the key, `MONO_AGENT_FALLBACKS_JSON` for the variable |
102
+
103
+ `runtime.fallbacks` stays uncapped: `runtime.model` plus its fallbacks are the
104
+ default route and its backups, nothing more.
105
+
106
+ ### New: `providers`
107
+
108
+ `providers` declares which providers the agent supports, and widens what is
109
+ *selectable* to those providers' full catalogs — previously you could only pick
110
+ `runtime.model` or a declared fallback, so trying a new model meant editing
111
+ config and restarting. `ollama` and `lmstudio` are zero-config autodiscovered on
112
+ `localhost:11434` and `localhost:1234`; an explicit entry only overrides
113
+ endpoint or credentials. `providers.local[]` migrates on load.
114
+
115
+ Agents advertise the catalog additively: a slim `providers` array on `/v1/info`
116
+ plus a lazy `GET /v1/models`. `TUI_WIRE_SCHEMA` is **not** bumped, so existing
117
+ consoles keep working.
118
+
119
+ ### Removed deep exports
120
+
121
+ Subpath exports went from 26 to 17. The removed subpaths all belonged to deleted
122
+ bridges; import the Pi equivalents from the package root.
123
+
124
+ ### Removed host options
125
+
126
+ Three `createRuntime()` host options went with the ACP *client* backend that was
127
+ their only consumer: `resolveAcpProfile`, `onAcpInteractionRequest` and
128
+ `acpSessionTokenKey`. The `0.18.0` and `0.18.1` sections below still describe
129
+ them as required — that is a correct record of what those releases needed, and
130
+ those sections are deliberately unchanged. As of `0.21.0` the runtime no longer
131
+ binds them, and passing them is inert.
132
+
133
+ This does **not** affect the ACP *server* bridge (`mono-agent bridge acp`),
134
+ which never used them; see [What is NOT deleted](#what-is-not-deleted).
135
+
136
+ ### Web console store
137
+
138
+ Schema v10 → v12, in two guarded steps: v11 adds per-thread `run_model` /
139
+ `run_effort`, and v12 adds `agents.providers_json`, the persisted summary of the
140
+ providers an agent advertises. Each step is guarded on `PRAGMA table_info` and
141
+ re-runnable, and adds columns only — no rows are rewritten. Per-conversation
142
+ model and effort overrides now persist server-side, so they roam between devices
143
+ instead of living in one browser's localStorage.
144
+
145
+ ### Migrating a config
146
+
147
+ There is no codemod. `mono-agent migrate-config` was written for this release and
148
+ then removed before it shipped: it rewrote a live agent's config while the agent
149
+ itself could be writing the same file, and that race could not be closed — only
150
+ narrowed. Migrating by hand is a few minutes per agent and cannot lose data.
151
+
152
+ The loader does the finding for you. Every retired key, retired environment
153
+ variable and rejected model reference fails at load naming its own repair, so an
154
+ unmigrated agent refuses to start and tells you what to change:
155
+
156
+ ```text
157
+ MonoAgentConfigError: invalid_json
158
+ `runtime.executionMode` was removed; mono-agent runs only the Pi runtime (SDK).
159
+ Delete the key.
160
+
161
+ MonoAgentConfigError: invalid_env
162
+ `MONO_AGENT_FALLBACK_MODELS` was replaced by `MONO_AGENT_FALLBACKS_JSON`, a JSON
163
+ array of `{ "model": "..." }` objects. Remove the variable and re-express the
164
+ chain there, or drop it into `runtime.fallbacks` in mono-agent.config.json.
165
+
166
+ MonoAgentConfigError: invalid_model_reference
167
+ runtime.model `codex:gpt-5.6-terra` is not a valid runtime model reference:
168
+ codex is no longer a runtime backend; use openai-codex:gpt-5.6-terra
169
+ ```
170
+
171
+ A model supplied through the environment is attributed to the variable
172
+ (`MONO_AGENT_MODEL ...`) rather than the JSON path, so the message always names
173
+ the place you edit to fix it.
174
+
175
+ What it does *not* do is report everything at once. Within a class it is
176
+ exhaustive — all retired JSON keys in one message, all retired environment
177
+ variables in one message, all unknown keys in one message — but the load stops at
178
+ the first failing class, in this order: retired JSON keys, unknown JSON keys,
179
+ retired environment variables, model references, then the remaining shape checks.
180
+ Expect to run `mono-agent validate` a few times per agent, not once.
181
+
182
+ #### Required — the load fails until each of these is done
183
+
184
+ In `mono-agent.config.json`:
185
+
186
+ 1. Delete `runtime.executionMode`, `memory.llm.executionMode` and
187
+ `runtime.routeSafety`.
188
+ 2. Convert `runtime.fallbackModels: ["a", "b"]` to
189
+ `runtime.fallbacks: [{ "model": "a" }, { "model": "b" }]`.
190
+ 3. Replace every `codex:`, `claude:`, `claude-code:`, `codex-cli:`, `acp:`,
191
+ `vercel:<provider>:<model>` and nested `opencode:<provider>:<model>` reference
192
+ — in `runtime.model`, every `runtime.fallbacks[].model`, every
193
+ `subagents.definitions[].model`, an `agent-host` `memory.llm.model`, and every
194
+ per-trigger `model` override. The `vercel:`/`opencode:` wrappers unwrap to the
195
+ inner pair; the rest do not — `codex:gpt-5.6-terra` becomes
196
+ `openai-codex:gpt-5.6-terra`, which is a different auth store, so that
197
+ substitution is a decision, not a rename. The load error names the exact
198
+ replacement for each form.
199
+
200
+ In the environment — the shell, the `.env` the agent is started with, and any
201
+ `EnvironmentVariables` block in its launchd plist:
202
+
203
+ 4. Remove `MONO_AGENT_EXECUTION_MODE`, `MONO_AGENT_ROUTE_SAFETY` and
204
+ `MONO_AGENT_MEMORY_LLM_EXECUTION_MODE`. There is no replacement variable.
205
+ 5. Remove `MONO_AGENT_FALLBACK_MODELS` and re-express the chain as
206
+ `MONO_AGENT_FALLBACKS_JSON` (a JSON array of `{ "model": "..." }` objects), or
207
+ move it into `runtime.fallbacks` in the config file. Pointing this one at the
208
+ JSON key alone is not a repair: an operator whose chain lives only in `.env`
209
+ has no `runtime.fallbackModels` key to rewrite.
210
+ 6. Apply step 3 to any model reference carried in `MONO_AGENT_MODEL`,
211
+ `MONO_AGENT_FALLBACKS_JSON`, `MONO_AGENT_SUBAGENTS_JSON` or
212
+ `MONO_AGENT_MEMORY_LLM_MODEL`.
213
+
214
+ And in trigger frontmatter:
215
+
216
+ 7. The same step-3 fix to `model:` in every `*.md` under the cron and webhook
217
+ trigger folders (`cron.dir` / `webhook.dir` if renamed, resolved from the
218
+ agent root).
219
+
220
+ An empty assignment (`KEY=`) is *not* a migration item: every reader here treats
221
+ an empty environment value as unset, so an inert leftover line in a deployed
222
+ `.env` neither configured anything before nor fails the load now.
223
+
224
+ #### Optional — accepted either way
225
+
226
+ 8. A leading `pi:` on a runtime reference is canonicalized away at load, so
227
+ `pi:openai-codex:gpt-5.6-terra` loads today and resolves to
228
+ `openai-codex:gpt-5.6-terra`. Stripping it from `runtime.model` and
229
+ `runtime.fallbacks[].model` is cosmetic — do it if you want the file to match
230
+ what `mono-agent config` prints. `pi:codex:...` is still rejected: the inner
231
+ pair is checked after the wrapper comes off.
232
+ 9. Strip `pi:` from `memory.llm.model` **only** when `memory.llm.provider` is
233
+ `agent-host`. Under the default `ollama` provider that field is a raw service
234
+ model string, where the colon in `qwen3:8b` is a tag separator — rewriting it
235
+ would repoint memory at a model that does not exist.
236
+
237
+ #### `configVersion: 1` files are not covered by this checklist
238
+
239
+ `configVersion` belonged to an experimental schema (`runtimes`, `routing`,
240
+ `policy`, `state`, `$use` dependency injection) that the shipped loader has never
241
+ accepted. None of steps 1–9 apply, because none of those keys exist in such a
242
+ file; it is rejected whole, as unknown keys:
243
+
244
+ ```text
245
+ mono-agent.config.json contains unknown keys: agent.id, agent.instructions,
246
+ agent.workspace, channels.operator, configVersion, context.skills, policy,
247
+ routing, runtimes, session, state. Remove or correct them; unknown keys are not
248
+ ignored.
249
+ ```
250
+
251
+ Re-author such a config against the current schema (or `mono-agent init` a fresh
252
+ one and port the values across); there is no `configVersion: 1` upgrade path.
253
+
254
+ ### Deployment order
255
+
256
+ ```text
257
+ merge → release 0.21.0 → per agent: stop it, edit the config, mono-agent validate
258
+ → mono-agent start
259
+ ```
260
+
261
+ Edit with the agent stopped. `mono-agent validate` runs the same load as startup
262
+ without starting a turn or spending a model call, so it finds these problems for
263
+ free — but it reports one failing class per run (see above), so re-run it after
264
+ each edit until it comes back clean.
265
+
266
+ ---
267
+
20
268
  ## 0.19.0
21
269
 
22
270
  - **Oversized `Read` images:** raster image results with an edge above 8,000
@@ -422,17 +670,16 @@ key-resolution contract is unchanged**: an `apiKeys` map entry wins, else the ho
422
670
  falls back to its own env vars, exactly as returning `undefined` from the old hook
423
671
  did). **No host action needed** — `resolvePiApiKey` behaves as before.
424
672
 
425
- Dependency bump: **`@earendil-works/pi-ai` is now `0.84.3`; `@earendil-works/pi-agent-core` remains `0.83.0`**
426
- (the initial Pi 0.80 migration landed at `0.80.5`, from `^0.79.1`, ran at
427
- `0.80.6` until the 0.83 upgrade, and then at `0.83.0`). Agent Core 0.84.3 is
428
- held back because its replacement durable harness does not yet implement the
429
- prompt, subscription, compaction, or abort paths used here. Compaction is driven
430
- natively (section 3), and model-native `max` reasoning plus Pi's request-wide
673
+ Current dependency pins: **`@earendil-works/pi-ai` and
674
+ `@earendil-works/pi-agent-core` are both `0.85.0`** (the initial Pi 0.80
675
+ migration landed at `0.80.5`, from `^0.79.1`). Pi 0.85's durable lane harness is
676
+ adapted behind the runtime's existing public API. Compaction remains owned by
677
+ mono-agent policy, and model-native `max` reasoning plus Pi's request-wide
431
678
  pricing tiers are preserved.
432
679
 
433
- Packed npm consumers consequently retain Agent Core's nested Pi AI 0.83.0
434
- compatibility copy beside the runtime-owned Pi AI 0.84.3 catalog/provider copy.
435
- The release guard resolves and verifies both exact paths independently.
680
+ Packed npm consumers resolve the runtime-owned exact Pi AI 0.85.0 copy for both
681
+ the runtime and Agent Core's `^0.85.0` dependency. The release guard verifies
682
+ both resolution paths independently.
436
683
 
437
684
  The 0.83 upgrade carries two upstream removals, both absorbed inside the runtime
438
685
  so hosts need no action:
@@ -458,7 +705,7 @@ now a loud failure (guarded by `scripts/verify-deep-imports.mjs`).
458
705
  <!-- public-api-js-subpaths:start -->
459
706
  <!-- Generated by scripts/generate-public-api-docs.mjs. Do not edit by hand. -->
460
707
 
461
- The package exposes **22 named deep `.js` subpaths**:
708
+ The package exposes **14 named deep `.js` subpaths**:
462
709
 
463
710
  ```text
464
711
  @mono-agent/agent-runtime/agent/allowlists.js
@@ -472,17 +719,9 @@ The package exposes **22 named deep `.js` subpaths**:
472
719
  @mono-agent/agent-runtime/ai/failure.js
473
720
  @mono-agent/agent-runtime/ai/file-change-stats.js
474
721
  @mono-agent/agent-runtime/ai/live-input-prompt.js
475
- @mono-agent/agent-runtime/ai/providers/acp.js
476
- @mono-agent/agent-runtime/ai/providers/claude-cli.js
477
- @mono-agent/agent-runtime/ai/providers/claude-sdk-discovery.js
478
- @mono-agent/agent-runtime/ai/providers/claude-sdk.js
479
- @mono-agent/agent-runtime/ai/providers/codex-app.js
480
- @mono-agent/agent-runtime/ai/providers/opencode-discovery.js
481
- @mono-agent/agent-runtime/ai/runtime/context-windows.js
482
- @mono-agent/agent-runtime/ai/runtime/fast-mode.js
722
+ @mono-agent/agent-runtime/ai/providers/codex/app-server-client.js
483
723
  @mono-agent/agent-runtime/ai/runtime/model-refs.js
484
724
  @mono-agent/agent-runtime/ai/runtime/registry.js
485
- @mono-agent/agent-runtime/ai/streaming/codex-events.js
486
725
  ```
487
726
  <!-- public-api-js-subpaths:end -->
488
727
 
@@ -517,7 +756,7 @@ Worklab's runtime fork:
517
756
  `@earendil-works/pi-ai`, its separate Pi version constraint, and local copies
518
757
  of provider bridge code. Move tests off Pi's faux-provider helpers too; until
519
758
  that is complete, isolate the fixture or pin its development-only dependencies
520
- to the exact Pi AI `0.84.3` and Pi Agent Core `0.83.0` compatibility pins
759
+ to the exact Pi AI `0.85.0` and Pi Agent Core `0.85.0` compatibility pins
521
760
  rather than floating ranges. Do not restore the
522
761
  removed `pi-sdk.js` subpath.
523
762
  3. **Use the public Pi surfaces.** Run models through
@@ -525,7 +764,7 @@ Worklab's runtime fork:
525
764
  `listPiBuiltinModels`, `getPiBuiltinModel`,
526
765
  `reasoningLevelsForPiModel`, `resolvePiOAuthApiKey`, and `loginPiOAuth` for
527
766
  catalog and OAuth integration. Those façades keep Pi provider objects and the
528
- exact Pi AI `0.84.3` and Pi Agent Core `0.83.0` compatibility pins inside the runtime. OAuth login adapters
767
+ exact Pi AI `0.85.0` and Pi Agent Core `0.85.0` compatibility pins inside the runtime. OAuth login adapters
529
768
  must supply `onAuth`, `onDeviceCode`, `onPrompt`, and `onSelect`; the façade
530
769
  rejects an incomplete callback contract before starting provider login.
531
770
  4. **Inject Claude tests.** Replace package-level mocks of