@mono-agent/agent-app 0.20.11 → 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 (220) hide show
  1. package/README.md +33 -18
  2. package/dist/app-controller-channels.d.ts +4 -0
  3. package/dist/app-controller-channels.d.ts.map +1 -1
  4. package/dist/app-controller-channels.js +20 -2
  5. package/dist/app-controller-channels.js.map +1 -1
  6. package/dist/app-controller-continuation.d.ts.map +1 -1
  7. package/dist/app-controller-continuation.js +2 -3
  8. package/dist/app-controller-continuation.js.map +1 -1
  9. package/dist/app-controller-lifecycle.d.ts +4 -0
  10. package/dist/app-controller-lifecycle.d.ts.map +1 -1
  11. package/dist/app-controller-lifecycle.js +7 -0
  12. package/dist/app-controller-lifecycle.js.map +1 -1
  13. package/dist/app-controller-monitors.d.ts +26 -0
  14. package/dist/app-controller-monitors.d.ts.map +1 -0
  15. package/dist/app-controller-monitors.js +127 -0
  16. package/dist/app-controller-monitors.js.map +1 -0
  17. package/dist/app-controller-responder.d.ts +7 -17
  18. package/dist/app-controller-responder.d.ts.map +1 -1
  19. package/dist/app-controller-responder.js +33 -69
  20. package/dist/app-controller-responder.js.map +1 -1
  21. package/dist/app-controller-utils.d.ts +1 -5
  22. package/dist/app-controller-utils.d.ts.map +1 -1
  23. package/dist/app-controller-utils.js +4 -21
  24. package/dist/app-controller-utils.js.map +1 -1
  25. package/dist/app-controller.d.ts +24 -10
  26. package/dist/app-controller.d.ts.map +1 -1
  27. package/dist/app-controller.js +36 -1
  28. package/dist/app-controller.js.map +1 -1
  29. package/dist/channel-drivers/slack.d.ts.map +1 -1
  30. package/dist/channel-drivers/slack.js +18 -0
  31. package/dist/channel-drivers/slack.js.map +1 -1
  32. package/dist/channel-drivers/telegram.d.ts.map +1 -1
  33. package/dist/channel-drivers/telegram.js +26 -0
  34. package/dist/channel-drivers/telegram.js.map +1 -1
  35. package/dist/channel-drivers/tui.d.ts +68 -8
  36. package/dist/channel-drivers/tui.d.ts.map +1 -1
  37. package/dist/channel-drivers/tui.js +388 -89
  38. package/dist/channel-drivers/tui.js.map +1 -1
  39. package/dist/channel-runtime-controls.d.ts +2 -1
  40. package/dist/channel-runtime-controls.d.ts.map +1 -1
  41. package/dist/channel-runtime-controls.js +79 -22
  42. package/dist/channel-runtime-controls.js.map +1 -1
  43. package/dist/cli-args.d.ts +4 -6
  44. package/dist/cli-args.d.ts.map +1 -1
  45. package/dist/cli-args.js +16 -36
  46. package/dist/cli-args.js.map +1 -1
  47. package/dist/cli-commands.d.ts.map +1 -1
  48. package/dist/cli-commands.js +11 -0
  49. package/dist/cli-commands.js.map +1 -1
  50. package/dist/cli-help.d.ts +26 -0
  51. package/dist/cli-help.d.ts.map +1 -1
  52. package/dist/cli-help.js +25 -34
  53. package/dist/cli-help.js.map +1 -1
  54. package/dist/cli-init-command.d.ts +1 -2
  55. package/dist/cli-init-command.d.ts.map +1 -1
  56. package/dist/cli-init-command.js +5 -49
  57. package/dist/cli-init-command.js.map +1 -1
  58. package/dist/config-reference.d.ts.map +1 -1
  59. package/dist/config-reference.js +153 -52
  60. package/dist/config-reference.js.map +1 -1
  61. package/dist/configuration-proposal-tool.d.ts.map +1 -1
  62. package/dist/configuration-proposal-tool.js +3 -11
  63. package/dist/configuration-proposal-tool.js.map +1 -1
  64. package/dist/configured-agent.d.ts +18 -3
  65. package/dist/configured-agent.d.ts.map +1 -1
  66. package/dist/configured-agent.js +67 -86
  67. package/dist/configured-agent.js.map +1 -1
  68. package/dist/conversation-title.d.ts.map +1 -1
  69. package/dist/conversation-title.js +9 -2
  70. package/dist/conversation-title.js.map +1 -1
  71. package/dist/doctor.d.ts +7 -13
  72. package/dist/doctor.d.ts.map +1 -1
  73. package/dist/doctor.js +191 -725
  74. package/dist/doctor.js.map +1 -1
  75. package/dist/first-run-readiness.d.ts.map +1 -1
  76. package/dist/first-run-readiness.js +0 -6
  77. package/dist/first-run-readiness.js.map +1 -1
  78. package/dist/local-configuration.d.ts.map +1 -1
  79. package/dist/local-configuration.js +9 -37
  80. package/dist/local-configuration.js.map +1 -1
  81. package/dist/memory-remember.d.ts +49 -0
  82. package/dist/memory-remember.d.ts.map +1 -0
  83. package/dist/memory-remember.js +190 -0
  84. package/dist/memory-remember.js.map +1 -0
  85. package/dist/memory-retrieval.d.ts +24 -0
  86. package/dist/memory-retrieval.d.ts.map +1 -1
  87. package/dist/memory-retrieval.js +23 -0
  88. package/dist/memory-retrieval.js.map +1 -1
  89. package/dist/model-effort-capabilities.d.ts +8 -9
  90. package/dist/model-effort-capabilities.d.ts.map +1 -1
  91. package/dist/model-effort-capabilities.js +17 -35
  92. package/dist/model-effort-capabilities.js.map +1 -1
  93. package/dist/modules/base.d.ts +3 -4
  94. package/dist/modules/base.d.ts.map +1 -1
  95. package/dist/modules/base.js +3 -5
  96. package/dist/modules/base.js.map +1 -1
  97. package/dist/modules/catalog.d.ts.map +1 -1
  98. package/dist/modules/catalog.js +11 -9
  99. package/dist/modules/catalog.js.map +1 -1
  100. package/dist/modules/known-tools.d.ts +2 -2
  101. package/dist/modules/known-tools.d.ts.map +1 -1
  102. package/dist/modules/known-tools.js +6 -0
  103. package/dist/modules/known-tools.js.map +1 -1
  104. package/dist/monitor-channel-routing.d.ts +20 -0
  105. package/dist/monitor-channel-routing.d.ts.map +1 -0
  106. package/dist/monitor-channel-routing.js +73 -0
  107. package/dist/monitor-channel-routing.js.map +1 -0
  108. package/dist/monitors-command.d.ts +23 -0
  109. package/dist/monitors-command.d.ts.map +1 -0
  110. package/dist/monitors-command.js +207 -0
  111. package/dist/monitors-command.js.map +1 -0
  112. package/dist/monitors-config.d.ts +74 -0
  113. package/dist/monitors-config.d.ts.map +1 -0
  114. package/dist/monitors-config.js +146 -0
  115. package/dist/monitors-config.js.map +1 -0
  116. package/dist/monitors-context.d.ts +58 -0
  117. package/dist/monitors-context.d.ts.map +1 -0
  118. package/dist/monitors-context.js +182 -0
  119. package/dist/monitors-context.js.map +1 -0
  120. package/dist/monitors-runtime.d.ts +36 -0
  121. package/dist/monitors-runtime.d.ts.map +1 -0
  122. package/dist/monitors-runtime.js +103 -0
  123. package/dist/monitors-runtime.js.map +1 -0
  124. package/dist/monitors-service.d.ts +71 -0
  125. package/dist/monitors-service.d.ts.map +1 -0
  126. package/dist/monitors-service.js +1665 -0
  127. package/dist/monitors-service.js.map +1 -0
  128. package/dist/monitors-store.d.ts +83 -0
  129. package/dist/monitors-store.d.ts.map +1 -0
  130. package/dist/monitors-store.js +283 -0
  131. package/dist/monitors-store.js.map +1 -0
  132. package/dist/process-jobs-context.d.ts +8 -0
  133. package/dist/process-jobs-context.d.ts.map +1 -1
  134. package/dist/process-jobs-context.js +11 -0
  135. package/dist/process-jobs-context.js.map +1 -1
  136. package/dist/process-jobs-protection.js +1 -1
  137. package/dist/process-jobs-protection.js.map +1 -1
  138. package/dist/process-jobs-runtime.d.ts.map +1 -1
  139. package/dist/process-jobs-runtime.js +1 -12
  140. package/dist/process-jobs-runtime.js.map +1 -1
  141. package/dist/process-jobs-service.d.ts.map +1 -1
  142. package/dist/process-jobs-service.js +3 -149
  143. package/dist/process-jobs-service.js.map +1 -1
  144. package/dist/process-output-redaction.d.ts +33 -0
  145. package/dist/process-output-redaction.d.ts.map +1 -0
  146. package/dist/process-output-redaction.js +149 -0
  147. package/dist/process-output-redaction.js.map +1 -0
  148. package/dist/provider-model-catalog.d.ts +78 -0
  149. package/dist/provider-model-catalog.d.ts.map +1 -0
  150. package/dist/provider-model-catalog.js +439 -0
  151. package/dist/provider-model-catalog.js.map +1 -0
  152. package/dist/provider-setup.d.ts +4 -13
  153. package/dist/provider-setup.d.ts.map +1 -1
  154. package/dist/provider-setup.js +5 -115
  155. package/dist/provider-setup.js.map +1 -1
  156. package/dist/readiness-probe-worker.d.ts +1 -2
  157. package/dist/readiness-probe-worker.d.ts.map +1 -1
  158. package/dist/readiness-probe-worker.js +3 -8
  159. package/dist/readiness-probe-worker.js.map +1 -1
  160. package/dist/readiness-probe.d.ts +1 -1
  161. package/dist/readiness-probe.d.ts.map +1 -1
  162. package/dist/readiness-probe.js +3 -33
  163. package/dist/readiness-probe.js.map +1 -1
  164. package/dist/request-model-override.d.ts +4 -36
  165. package/dist/request-model-override.d.ts.map +1 -1
  166. package/dist/request-model-override.js +58 -146
  167. package/dist/request-model-override.js.map +1 -1
  168. package/dist/runtime-option-extensions.d.ts +2 -4
  169. package/dist/runtime-option-extensions.d.ts.map +1 -1
  170. package/dist/runtime-option-extensions.js +4 -8
  171. package/dist/runtime-option-extensions.js.map +1 -1
  172. package/dist/runtime-routes.d.ts +5 -5
  173. package/dist/runtime-routes.d.ts.map +1 -1
  174. package/dist/runtime-routes.js +29 -18
  175. package/dist/runtime-routes.js.map +1 -1
  176. package/dist/sandbox-settings-cleanup.d.ts +15 -0
  177. package/dist/sandbox-settings-cleanup.d.ts.map +1 -0
  178. package/dist/sandbox-settings-cleanup.js +88 -0
  179. package/dist/sandbox-settings-cleanup.js.map +1 -0
  180. package/dist/trigger-overrides.d.ts +6 -0
  181. package/dist/trigger-overrides.d.ts.map +1 -1
  182. package/dist/trigger-overrides.js +36 -4
  183. package/dist/trigger-overrides.js.map +1 -1
  184. package/dist/untrusted-text.d.ts +36 -0
  185. package/dist/untrusted-text.d.ts.map +1 -0
  186. package/dist/untrusted-text.js +150 -0
  187. package/dist/untrusted-text.js.map +1 -0
  188. package/dist/wizard/answers.d.ts +3 -9
  189. package/dist/wizard/answers.d.ts.map +1 -1
  190. package/dist/wizard/answers.js +11 -36
  191. package/dist/wizard/answers.js.map +1 -1
  192. package/dist/wizard/from-flags.d.ts +1 -2
  193. package/dist/wizard/from-flags.d.ts.map +1 -1
  194. package/dist/wizard/from-flags.js +8 -3
  195. package/dist/wizard/from-flags.js.map +1 -1
  196. package/dist/wizard/model-discovery.d.ts +7 -8
  197. package/dist/wizard/model-discovery.d.ts.map +1 -1
  198. package/dist/wizard/model-discovery.js +58 -431
  199. package/dist/wizard/model-discovery.js.map +1 -1
  200. package/dist/wizard/presets.js +2 -2
  201. package/dist/wizard/presets.js.map +1 -1
  202. package/dist/wizard/prompts.d.ts +13 -12
  203. package/dist/wizard/prompts.d.ts.map +1 -1
  204. package/dist/wizard/prompts.js +24 -45
  205. package/dist/wizard/prompts.js.map +1 -1
  206. package/dist/wizard/run.d.ts.map +1 -1
  207. package/dist/wizard/run.js +29 -152
  208. package/dist/wizard/run.js.map +1 -1
  209. package/package.json +17 -17
  210. package/schema/mono-agent.config.schema.json +183 -47
  211. package/skills/mono-agent-composer/SKILL.md +2 -2
  212. package/skills/mono-agent-composer/references/config-blueprint.md +43 -40
  213. package/skills/mono-agent-composer/references/discovery-questions.md +8 -13
  214. package/skills/mono-agent-composer/references/feature-coverage.md +10 -8
  215. package/skills/mono-agent-composer/references/package-map.md +21 -15
  216. package/skills/mono-agent-composer/references/playbooks.md +19 -23
  217. package/dist/codex-model-catalog.d.ts +0 -15
  218. package/dist/codex-model-catalog.d.ts.map +0 -1
  219. package/dist/codex-model-catalog.js +0 -220
  220. package/dist/codex-model-catalog.js.map +0 -1
@@ -22,7 +22,7 @@ Every real host needs these concepts:
22
22
  | --- | --- | --- | --- |
23
23
  | Shared request/response shape | `@mono-agent/agent-contracts` | `AgentResponder`, request, response, stream, cancellation contracts | Prompt building, runtime execution, transport |
24
24
  | Core config | `@mono-agent/config` | Runtime, context, memory, tools, artifact, traceability settings | Adapter credentials, chat allowlists |
25
- | Runtime facade | `@mono-agent/runtime-adapter` | Model refs, execution-mode validation, local provider runtime options | Prompts, adapters, memory |
25
+ | Runtime facade | `@mono-agent/runtime-adapter` | Canonical `<provider>:<model>` refs, the Pi backend descriptor, sandbox policy, local provider runtime options | Prompts, adapters, memory |
26
26
  | Configured responder | `@mono-agent/agent-app` | Turns `MonoAgentConfig` into runtime, memory, harness, and responder | Polling chats, serving APIs, adapter settings |
27
27
 
28
28
  Minimal local host:
@@ -87,18 +87,19 @@ request-scoped tools, not entries for `mcp.json`. `SessionHistory` searches the
87
87
  current logical session's retained managed-tool calls/results and needs no config
88
88
  key. `SetConversationTitle` appears only for writable interactive web threads;
89
89
  it keeps automatic semantic titles current, while a user rename permanently
90
- wins. Allow-all exposes eligible tools on compatible routes; a specific
91
- allowlist must name each one. Direct OpenCode suppresses all three; direct ACP
92
- retains and cold-projects lifecycle evidence but cannot expose `SessionHistory`.
90
+ wins. Allow-all exposes eligible tools; a specific allowlist must name each one.
91
+ Every route is Pi-native, so no route family suppresses any of the three; the
92
+ surface conditions above (writable interactive web thread, retained managed-tool
93
+ calls) are the only gates.
93
94
  `@mono-agent/agent-app` also owns rich reply composition. `PublishReplyFile`
94
95
  copies a confined generated file into owner-private integrity storage and is
95
96
  available under allow-all (or by exact name in a restrictive policy). Supported
96
97
  Pi-native MCP tool results can register their declared MCP App UI resource for
97
- the web console. An all-Pi route chain is required for Apps; direct or fallback
98
- routes that cannot carry the bridge do not advertise it. Adapters consume the
99
- shared reply-part contract: Slack and Telegram confirm native uploads, the web
100
- serves authorized downloads and sandboxed Apps, and machine/verbatim adapters
101
- preserve answer text when they cannot represent a part.
98
+ the web console, and because every route is Pi-native the whole fallback chain
99
+ carries that bridge. Adapters consume the shared reply-part contract: Slack and
100
+ Telegram confirm native uploads, the web serves authorized downloads and
101
+ sandboxed Apps, and machine/verbatim adapters preserve answer text when they
102
+ cannot represent a part.
102
103
 
103
104
  ```ts
104
105
  import { createToolPolicy, toolPolicyToRuntimeOptions } from "@mono-agent/agent-harness";
@@ -150,11 +151,16 @@ Use `@mono-agent/agent-orchestrator` when one runtime should call named collabor
150
151
 
151
152
  Use `@mono-agent/runtime-adapter` unless the host has a custom runtime implementation that already satisfies `MonoRuntimeLike`.
152
153
 
153
- Supported model reference families:
154
-
155
- - `codex:<model>` with CLI execution
156
- - `claude:<model>` with SDK or CLI execution
157
- - `pi:<provider>:<model>` with SDK execution, including Pi OpenAI-Codex, OpenCode-through-Pi (`pi:opencode-go:*`), and local providers such as Ollama and LM Studio
158
- - `opencode:<provider>:<model>` with CLI execution for hand-authored OpenCode backend config
154
+ There is one supported model reference family: canonical `<provider>:<model>`,
155
+ run Pi-native. Only the first colon is structural, so `ollama:gemma4:31b` is
156
+ provider `ollama` and model `gemma4:31b`. `<provider>` is a Pi provider id —
157
+ `openai-codex`, `anthropic`, `openai`, `github-copilot`, `openrouter`,
158
+ `opencode-go`, or a local/self-hosted id such as `ollama` or `lmstudio`.
159
+
160
+ A leading `pi:` is canonicalized away, so `pi:ollama:gemma4:31b` still loads —
161
+ but emit the canonical form. `codex:`, `claude:`, `claude-code:`, `codex-cli:`,
162
+ `acp:`, `vercel:` and the nested `opencode:<provider>:<model>` form were
163
+ retired in 0.21.0 and are rejected at load with the replacement named. Tier
164
+ aliases (`haiku`, `sonnet`, `opus`) are not model ids; use an exact model id.
159
165
 
160
166
  Provider credentials belong in the provider/runtime environment, not in committed config.
@@ -20,7 +20,7 @@ Put `MONO_AGENT_TELEGRAM_BOT_TOKEN=...` in `.env`; the source config omits the c
20
20
 
21
21
  ```json
22
22
  {
23
- "runtime": { "model": "pi:openai-codex:gpt-5.6-terra" },
23
+ "runtime": { "model": "openai-codex:gpt-5.6-terra" },
24
24
  "telegram": { "enabled": true, "allowedChatIds": ["123456789"] },
25
25
  "memory": {
26
26
  "mode": "bujo", "path": "./.mono-agent/memory", "writeMode": "capture",
@@ -30,7 +30,7 @@ Put `MONO_AGENT_TELEGRAM_BOT_TOKEN=...` in `.env`; the source config omits the c
30
30
  }
31
31
  }
32
32
  ```
33
- **Steps:** `ollama pull nomic-embed-text:v1.5 && ollama pull qwen3.6:latest` → `mono-agent init --model claude:claude-sonnet-4-6 --memory bujo` → add telegram + fill embeddings/llm + `writeMode: capture` → `mono-agent validate` (confirm memory liveness + consolidation cadence) → `mono-agent start`.
33
+ **Steps:** `ollama pull nomic-embed-text:v1.5 && ollama pull qwen3.6:latest` → `mono-agent init --model anthropic:claude-sonnet-4-6 --memory bujo` → add telegram + fill embeddings/llm + `writeMode: capture` → `mono-agent validate` (confirm memory liveness + consolidation cadence) → `mono-agent start`.
34
34
  **Smoke:** send a fact from the allowed chat, then ask a paraphrased question later; confirm the final answer arrives separately and the temporary memory-tool activity disappears, `MemoryRecall` appears in the run JSONL, and the answer uses it.
35
35
 
36
36
  ## 2. Slack team bot with MCP tools
@@ -42,7 +42,7 @@ Put `MONO_AGENT_SLACK_BOT_TOKEN` and `MONO_AGENT_SLACK_APP_TOKEN` in `.env`; the
42
42
 
43
43
  ```json
44
44
  {
45
- "runtime": { "model": "pi:openai-codex:gpt-5.6-terra" },
45
+ "runtime": { "model": "openai-codex:gpt-5.6-terra" },
46
46
  "slack": { "enabled": true, "allowedChannelIds": ["C012345"], "stripMentionText": true },
47
47
  "tools": { "allowedTools": ["Read", "Grep", "SlackSendMessage", "deployTool"], "mcpConfigPath": "./mcp.json" },
48
48
  "concurrency": { "maxConcurrentRuns": 4, "maxPendingRuns": 8 }
@@ -58,13 +58,13 @@ Put `MONO_AGENT_SLACK_BOT_TOKEN` and `MONO_AGENT_SLACK_APP_TOKEN` in `.env`; the
58
58
 
59
59
  ```json
60
60
  {
61
- "runtime": { "model": "pi:ollama:gemma4:31b" },
61
+ "runtime": { "model": "ollama:gemma4:31b" },
62
62
  "providers": { "local": [{ "id": "ollama", "type": "ollama", "baseUrl": "http://localhost:11434", "enabled": true, "models": [{ "name": "gemma4:31b", "capabilities": { "context_window": 32768 } }] }] },
63
63
  "memory": { "mode": "journal", "path": "./.mono-agent/memory", "embeddings": { "provider": "ollama", "model": "nomic-embed-text:v1.5", "endpoint": "http://localhost:11434", "dim": 768 } },
64
64
  "sandbox": { "mode": "native", "network": { "mode": "localhost" } }
65
65
  }
66
66
  ```
67
- **Steps:** pull both models → `mono-agent init --model pi:ollama:gemma4:31b --memory journal` → add `providers.local` + embeddings + `sandbox.network.mode: localhost` → `validate` (Ollama reachable, models pulled) → `start`.
67
+ **Steps:** pull both models → `mono-agent init --model ollama:gemma4:31b --memory journal` → add `providers.local` + embeddings + `sandbox.network.mode: localhost` → `validate` (Ollama reachable, models pulled) → `start`.
68
68
  **Smoke:** `curl -X POST` the webhook path; confirm a local-model response and no outbound non-localhost network in the artifact.
69
69
 
70
70
  ## 4. OpenAI-compatible endpoint for Open WebUI
@@ -74,7 +74,7 @@ Put `MONO_AGENT_SLACK_BOT_TOKEN` and `MONO_AGENT_SLACK_APP_TOKEN` in `.env`; the
74
74
 
75
75
  ```json
76
76
  {
77
- "runtime": { "model": "claude:claude-sonnet-4-6", "session": { "mode": "continuous", "idleTimeoutMs": 1800000 } },
77
+ "runtime": { "model": "anthropic:claude-sonnet-4-6", "session": { "mode": "continuous", "idleTimeoutMs": 1800000 } },
78
78
  "openaiApi": { "enabled": true, "host": "0.0.0.0", "port": 4040, "basePath": "/v1", "allowNonLoopback": true, "modelId": "my-agent" }
79
79
  }
80
80
  ```
@@ -88,7 +88,7 @@ Put `MONO_AGENT_SLACK_BOT_TOKEN` and `MONO_AGENT_SLACK_APP_TOKEN` in `.env`; the
88
88
 
89
89
  ```json
90
90
  {
91
- "runtime": { "model": "claude:claude-sonnet-4-6" },
91
+ "runtime": { "model": "anthropic:claude-sonnet-4-6" },
92
92
  "webhook": {
93
93
  "enabled": true, "host": "127.0.0.1", "port": 8080, "defaultMode": "sync",
94
94
  "endpoints": [
@@ -113,7 +113,7 @@ Put `MONO_AGENT_SLACK_BOT_TOKEN` and `MONO_AGENT_SLACK_APP_TOKEN` in `.env`; the
113
113
 
114
114
  ```json
115
115
  {
116
- "runtime": { "model": "claude:claude-sonnet-4-6" },
116
+ "runtime": { "model": "anthropic:claude-sonnet-4-6" },
117
117
  "slack": { "enabled": true, "allowedChannelIds": ["C012345"], "unfurlLinks": false, "unfurlMedia": false },
118
118
  "cron": { "jobs": [{ "id": "morning-digest", "enabled": true, "expression": "0 9 * * *", "timezone": "America/New_York", "prompt": "Build the morning digest. Your final answer is the digest to notify.", "conversationId": "daily-digest", "notify": true, "notifyConversationId": "slack:C012345" }] }
119
119
  }
@@ -180,13 +180,13 @@ const orchestrator = await createConfiguredAgentResponder({
180
180
 
181
181
  ```json
182
182
  {
183
- "runtime": { "model": "pi:openai-codex:gpt-5.6-terra" },
183
+ "runtime": { "model": "openai-codex:gpt-5.6-terra" },
184
184
  "tools": { "allowedTools": ["*"] },
185
185
  "sandbox": { "mode": "native", "network": { "mode": "localhost" }, "readableRoots": ["."], "writableRoots": ["."], "denyWrite": [".env", ".env.*", ".git/config", ".git/hooks/**"], "fallback": "fail-closed" }
186
186
  }
187
187
  ```
188
188
  **Steps:** `mono-agent init --memory journal` → leave tools at the allow-all default (`["*"]`); the **sandbox**, not an allowlist, is what constrains the code tools → `sandbox.mode native` + `network localhost` + deny-write defaults → keep `fallback: fail-closed` (do NOT set `unsafe-host-process`) → `validate` → `start`.
189
- **Smoke:** ask it to read a file, use Exec for one argv-safe command, run one Bash pipeline, then use NodeRepl twice to retain a variable and produce `42` (all work); next fetch an external URL or write `.env` (both blocked in the artifact). Keep every primary/fallback/trigger model on Pi; direct Codex, Claude, and direct OpenCode reject this mono-agent sandbox policy.
189
+ **Smoke:** ask it to read a file, use Exec for one argv-safe command, run one Bash pipeline, then use NodeRepl twice to retain a variable and produce `42` (all work); next fetch an external URL or write `.env` (both blocked in the artifact). Every route is Pi-native, so this sandbox policy applies uniformly to the primary, every fallback, and every per-trigger override.
190
190
 
191
191
  ## 10. Phoenix-observed agent with the TUI
192
192
  **For:** an agent builder evaluating runs in a tracing dashboard.
@@ -195,7 +195,7 @@ const orchestrator = await createConfiguredAgentResponder({
195
195
 
196
196
  ```json
197
197
  {
198
- "runtime": { "model": "claude:claude-sonnet-4-6" },
198
+ "runtime": { "model": "anthropic:claude-sonnet-4-6" },
199
199
  "artifacts": { "dir": ".mono-agent/artifacts" },
200
200
  "traceability": { "registryDir": ".mono-agent/trace-sources", "sourceId": "my-agent", "heartbeatMs": 10000 },
201
201
  "observability": { "exporters": [{ "type": "phoenix", "endpoint": "http://127.0.0.1:6006/v1/traces", "projectName": "my-project", "includeSensitiveData": false, "contentPatternRedaction": false, "timeoutMs": 5000 }] }
@@ -223,16 +223,12 @@ const orchestrator = await createConfiguredAgentResponder({
223
223
 
224
224
  ```json
225
225
  {
226
- "runtime": { "model": "claude:claude-sonnet-4-6", "fallbacks": [{ "model": "pi:openai-codex:gpt-5.5" }, { "model": "pi:ollama:gemma4:31b" }], "session": { "mode": "continuous" } },
226
+ "runtime": { "model": "anthropic:claude-sonnet-4-6", "fallbacks": [{ "model": "openai-codex:gpt-5.6-sol" }, { "model": "ollama:gemma4:31b" }], "session": { "mode": "continuous" } },
227
227
  "providers": { "local": [{ "id": "ollama", "type": "ollama", "baseUrl": "http://localhost:11434", "enabled": true }], "piNative": { "transport": "auto", "piMaxRetries": 2, "maxRetryDelayMs": 60000, "piSessionsRoot": ".mono-agent/sessions" } }
228
228
  }
229
229
  ```
230
- Legacy `runtime.fallbackModels` and `MONO_AGENT_FALLBACK_MODELS` remain supported
231
- with no removal deadline, but this playbook intentionally emits the canonical
232
- per-route form for a new agent.
233
- **Steps:** `ollama pull gemma4:31b` → `mono-agent init --model claude:claude-sonnet-4-6 --fallback pi:openai-codex:gpt-5.5 --fallback pi:ollama:gemma4:31b` → add `providers.local` + `piNative.piSessionsRoot` → `validate` → `start`.
234
- **Boundary:** this mixed Pi/Claude chain intentionally omits the native mono-agent sandbox. Keep direct Codex chains all-direct; keep every route on Pi (including `pi:opencode-go:*`, not direct `opencode:*`) when `sandbox.mode` is `native`.
235
- **Smoke:** force a retryable primary failure; confirm the run result reports failover to the next model (not silent) and the conversation resumes from the transcript tail.
230
+ `runtime.fallbackModels` and `MONO_AGENT_FALLBACK_MODELS` were retired in 0.21.0
231
+ and are rejected at load; emit `runtime.fallbacks[]` only.
236
232
 
237
233
  ## 13. Personal Telegram assistant with Supermemory
238
234
  **For:** a power user trying an external memory layer while keeping the agent local.
@@ -241,7 +237,7 @@ per-route form for a new agent.
241
237
 
242
238
  ```json
243
239
  {
244
- "runtime": { "model": "claude:claude-sonnet-4-6" },
240
+ "runtime": { "model": "anthropic:claude-sonnet-4-6" },
245
241
  "telegram": { "enabled": true, "allowedChatIds": ["123456789"] },
246
242
  "memory": {
247
243
  "backend": "supermemory", "mode": "lite", "path": "./.mono-agent/memory",
@@ -261,13 +257,13 @@ per-route form for a new agent.
261
257
 
262
258
  ```json
263
259
  {
264
- "runtime": { "model": "pi:lmstudio:qwen3.6-32b" },
260
+ "runtime": { "model": "lmstudio:qwen3.6-32b" },
265
261
  "providers": { "local": [{ "id": "lmstudio", "type": "lmstudio", "baseUrl": "http://localhost:1234", "enabled": true }] },
266
262
  "memory": { "mode": "lite", "path": "./.mono-agent/memory", "writeMode": "append-host-summary" },
267
263
  "webhook": { "enabled": true }
268
264
  }
269
265
  ```
270
- **Steps:** start LM Studio's local server with the chosen model loaded → `mono-agent init --model pi:lmstudio:qwen3.6-32b --memory lite` (the `pi:lmstudio:*` model auto-adds the LM Studio provider block; there is no LM Studio preset — `local-private` is Ollama-based) → adjust `runtime.model` if the displayed model id differs → `validate` → `start`.
266
+ **Steps:** start LM Studio's local server with the chosen model loaded → `mono-agent init --model lmstudio:qwen3.6-32b --memory lite` (the `lmstudio:*` model auto-adds the LM Studio provider block; there is no LM Studio preset — `local-private` is Ollama-based) → adjust `runtime.model` if the displayed model id differs → `validate` → `start`.
271
267
  **Smoke:** `curl` the webhook invoke URL and confirm the response comes from the local LM Studio model.
272
268
 
273
269
  ## 15. Interactive agent with long jobs and large media
@@ -279,7 +275,7 @@ per-route form for a new agent.
279
275
 
280
276
  ```json
281
277
  {
282
- "runtime": { "model": "pi:openai-codex:gpt-5.5", "executionMode": "sdk" },
278
+ "runtime": { "model": "openai-codex:gpt-5.6-sol" },
283
279
  "tools": { "allowedTools": ["Read", "AskUser", "TelegramSendFile", "PublishReplyFile"], "mcpConfigPath": "./.mcp.json", "mcpCallMaxTotalTimeoutMs": 2700000 },
284
280
  "interaction": { "bridge": { "host": "127.0.0.1", "port": 4471 }, "askUser": { "timeoutMs": 600000 }, "progress": { "enabled": true } },
285
281
  "telegram": { "enabled": true, "allowedChatIds": ["123456789"], "apiRoot": "http://127.0.0.1:8081", "attachments": { "maxBytes": 268435456, "maxUploadBytes": 268435456 } }
@@ -295,7 +291,7 @@ per-route form for a new agent.
295
291
 
296
292
  ```json
297
293
  {
298
- "runtime": { "model": "pi:openai-codex:gpt-5.5" },
294
+ "runtime": { "model": "openai-codex:gpt-5.6-sol" },
299
295
  "tools": {
300
296
  "allowedTools": ["Read", "Glob", "Grep", "WebSearch", "WebFetch"],
301
297
  "web": {
@@ -1,15 +0,0 @@
1
- import type { EffortLevel } from "@mono-agent/config";
2
- export interface CodexCatalogModel {
3
- readonly id: string;
4
- readonly displayName: string;
5
- readonly supportedEfforts: readonly EffortLevel[];
6
- readonly defaultEffort?: EffortLevel;
7
- readonly isDefault?: boolean;
8
- }
9
- /** Exact non-secret environment used by live Codex model/list discovery. */
10
- export declare function codexModelDiscoveryEnvironment(persistedEnv?: Readonly<Record<string, string | undefined>>, shellEnv?: Readonly<Record<string, string | undefined>>): Record<string, string | undefined>;
11
- export declare function normalizeEffort(value: unknown): EffortLevel | undefined;
12
- export declare function normalizeEfforts(values: readonly unknown[]): EffortLevel[];
13
- export declare function normalizeCodexCatalog(rows: readonly unknown[]): CodexCatalogModel[];
14
- export declare function requestCodexModelList(timeoutMs: number, environment: Readonly<Record<string, string | undefined>>, abortSignal?: AbortSignal): Promise<CodexCatalogModel[]>;
15
- //# sourceMappingURL=codex-model-catalog.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codex-model-catalog.d.ts","sourceRoot":"","sources":["../src/codex-model-catalog.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAItD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,SAAS,WAAW,EAAE,CAAC;IAClD,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAgDD,4EAA4E;AAC5E,wBAAgB,8BAA8B,CAC5C,YAAY,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAM,EAC/D,QAAQ,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,GACnE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAOpC;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,CAGvE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,GAAG,WAAW,EAAE,CAE1E;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,iBAAiB,EAAE,CAsBnF;AAED,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACzD,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAoH9B"}
@@ -1,220 +0,0 @@
1
- import { spawn } from "node:child_process";
2
- import { homedir } from "node:os";
3
- import { createInterface } from "node:readline";
4
- import { credentialNeutralProviderStatusEnvironment } from "./provider-setup.js";
5
- const SUPPORTED_EFFORTS = new Set([
6
- "none",
7
- "minimal",
8
- "low",
9
- "medium",
10
- "high",
11
- "xhigh",
12
- "max",
13
- "ultra",
14
- ]);
15
- function isRecord(value) {
16
- return typeof value === "object" && value !== null && !Array.isArray(value);
17
- }
18
- function boundedCatalogText(value, limit) {
19
- const normalized = typeof value === "string"
20
- ? value.replace(/[\u0000-\u001f\u007f]/gu, " ").replace(/\s+/gu, " ").trim()
21
- : "";
22
- return normalized.length <= limit ? normalized : `${normalized.slice(0, Math.max(0, limit - 1))}…`;
23
- }
24
- function safeDiscoveryProcessEnv(source = process.env) {
25
- const env = {};
26
- for (const key of [
27
- "PATH",
28
- "LANG",
29
- "LC_ALL",
30
- "LC_CTYPE",
31
- "SHELL",
32
- "TMPDIR",
33
- "TMP",
34
- "TEMP",
35
- "SystemRoot",
36
- "WINDIR",
37
- "ComSpec",
38
- "PATHEXT",
39
- ]) {
40
- const value = source[key];
41
- if (typeof value === "string" && value.length > 0)
42
- env[key] = value;
43
- }
44
- return env;
45
- }
46
- /** Exact non-secret environment used by live Codex model/list discovery. */
47
- export function codexModelDiscoveryEnvironment(persistedEnv = {}, shellEnv = process.env) {
48
- const neutral = credentialNeutralProviderStatusEnvironment(shellEnv, persistedEnv);
49
- return {
50
- ...safeDiscoveryProcessEnv(shellEnv),
51
- HOME: neutral.HOME ?? homedir(),
52
- ...(neutral.CODEX_HOME === undefined ? {} : { CODEX_HOME: neutral.CODEX_HOME }),
53
- };
54
- }
55
- export function normalizeEffort(value) {
56
- const normalized = value === "off" ? "none" : typeof value === "string" ? value : "";
57
- return SUPPORTED_EFFORTS.has(normalized) ? normalized : undefined;
58
- }
59
- export function normalizeEfforts(values) {
60
- return [...new Set(values.map(normalizeEffort).filter((value) => value !== undefined))];
61
- }
62
- export function normalizeCodexCatalog(rows) {
63
- const result = [];
64
- const seen = new Set();
65
- for (const raw of rows.slice(0, 1_000)) {
66
- if (!isRecord(raw))
67
- continue;
68
- const id = typeof raw.id === "string" ? raw.id.trim() : "";
69
- if (id.length === 0 || id.length > 160 || seen.has(id))
70
- continue;
71
- const supportedRows = Array.isArray(raw.supportedReasoningEfforts)
72
- ? raw.supportedReasoningEfforts.map((entry) => isRecord(entry) ? entry.reasoningEffort : entry)
73
- : [];
74
- const supportedEfforts = normalizeEfforts(supportedRows);
75
- const normalizedDefault = normalizeEffort(raw.defaultReasoningEffort);
76
- seen.add(id);
77
- result.push({
78
- id,
79
- displayName: boundedCatalogText(raw.displayName, 160) || id,
80
- supportedEfforts,
81
- ...(normalizedDefault === undefined ? {} : { defaultEffort: normalizedDefault }),
82
- ...(typeof raw.isDefault === "boolean" ? { isDefault: raw.isDefault } : {}),
83
- });
84
- }
85
- return result;
86
- }
87
- export async function requestCodexModelList(timeoutMs, environment, abortSignal) {
88
- const child = spawn("codex", ["app-server", "--listen", "stdio://", "-c", "project_doc_max_bytes=0"], {
89
- stdio: ["pipe", "pipe", "ignore"],
90
- env: { ...environment },
91
- });
92
- const lines = createInterface({ input: child.stdout });
93
- return await new Promise((resolveResult, rejectResult) => {
94
- let settled = false;
95
- let timer;
96
- const ignoreStdinError = () => undefined;
97
- child.stdin.on("error", ignoreStdinError);
98
- const childClosedWithin = async (milliseconds) => {
99
- if (child.exitCode !== null || child.signalCode !== null)
100
- return true;
101
- return await new Promise((resolveClosed) => {
102
- const onClose = () => {
103
- clearTimeout(closeTimer);
104
- resolveClosed(true);
105
- };
106
- const closeTimer = setTimeout(() => {
107
- child.off("close", onClose);
108
- resolveClosed(false);
109
- }, milliseconds);
110
- closeTimer.unref?.();
111
- child.once("close", onClose);
112
- });
113
- };
114
- const stopChild = async () => {
115
- lines.removeAllListeners("line");
116
- lines.close();
117
- try {
118
- child.stdin.end();
119
- }
120
- catch { /* best effort */ }
121
- if (await childClosedWithin(25))
122
- return;
123
- try {
124
- child.kill("SIGTERM");
125
- }
126
- catch { /* best effort */ }
127
- if (await childClosedWithin(250))
128
- return;
129
- try {
130
- child.kill("SIGKILL");
131
- }
132
- catch { /* best effort */ }
133
- if (!await childClosedWithin(250)) {
134
- child.stdin.destroy();
135
- child.stdout.destroy();
136
- child.unref();
137
- }
138
- };
139
- let settle;
140
- const onChildError = () => void settle(new Error("Codex app-server is unavailable."));
141
- const onChildClose = () => void settle(new Error("Codex app-server closed before returning models."));
142
- const onAbort = () => {
143
- const error = new Error("Codex model catalog discovery was interrupted.");
144
- error.name = "AbortError";
145
- void settle(error);
146
- };
147
- settle = async (error, models = []) => {
148
- if (settled)
149
- return;
150
- settled = true;
151
- clearTimeout(timer);
152
- child.off("error", onChildError);
153
- child.off("close", onChildClose);
154
- abortSignal?.removeEventListener("abort", onAbort);
155
- await stopChild();
156
- child.stdin.off("error", ignoreStdinError);
157
- if (error === undefined)
158
- resolveResult(models);
159
- else
160
- rejectResult(error);
161
- };
162
- const writeMessage = (message) => {
163
- if (settled || child.stdin.destroyed || child.stdin.writableEnded)
164
- return;
165
- try {
166
- child.stdin.write(`${JSON.stringify(message)}\n`);
167
- }
168
- catch { /* bounded shutdown handles the process */ }
169
- };
170
- timer = setTimeout(() => void settle(new Error("Codex model catalog discovery timed out.")), Math.max(250, Math.min(10_000, timeoutMs)));
171
- timer.unref?.();
172
- child.once("error", onChildError);
173
- child.once("close", onChildClose);
174
- abortSignal?.addEventListener("abort", onAbort, { once: true });
175
- lines.on("line", (line) => {
176
- let message;
177
- try {
178
- message = JSON.parse(line);
179
- }
180
- catch {
181
- return;
182
- }
183
- if (!isRecord(message))
184
- return;
185
- if (typeof message.method === "string" && (typeof message.id === "string" || typeof message.id === "number")) {
186
- writeMessage({
187
- id: message.id,
188
- error: { code: -32601, message: "Model catalog discovery does not support server requests." },
189
- });
190
- return;
191
- }
192
- if (message.id === 1 && isRecord(message.result)) {
193
- writeMessage({
194
- id: 2,
195
- method: "model/list",
196
- params: { includeHidden: false, limit: 1_000 },
197
- });
198
- return;
199
- }
200
- if (message.id !== 2)
201
- return;
202
- if (!isRecord(message.result) || !Array.isArray(message.result.data)) {
203
- void settle(new Error("Codex app-server returned an invalid model catalog."));
204
- return;
205
- }
206
- void settle(undefined, normalizeCodexCatalog(message.result.data));
207
- });
208
- writeMessage({
209
- id: 1,
210
- method: "initialize",
211
- params: {
212
- clientInfo: { name: "mono-agent", title: "mono-agent", version: "0" },
213
- capabilities: { experimentalApi: true },
214
- },
215
- });
216
- if (abortSignal?.aborted === true)
217
- onAbort();
218
- });
219
- }
220
- //# sourceMappingURL=codex-model-catalog.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codex-model-catalog.js","sourceRoot":"","sources":["../src/codex-model-catalog.ts"],"names":[],"mappings":"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"}