@mono-agent/agent-app 0.11.5 → 0.12.0
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.
- package/README.md +24 -13
- package/dist/background.d.ts +2 -0
- package/dist/background.d.ts.map +1 -1
- package/dist/background.js +2 -2
- package/dist/background.js.map +1 -1
- package/dist/channel-drivers/live.d.ts +1 -1
- package/dist/channel-drivers/live.js +1 -1
- package/dist/channel-drivers/tui.d.ts.map +1 -1
- package/dist/channel-drivers/tui.js +24 -0
- package/dist/channel-drivers/tui.js.map +1 -1
- package/dist/cli-args.d.ts +10 -8
- package/dist/cli-args.d.ts.map +1 -1
- package/dist/cli-args.js +21 -6
- package/dist/cli-args.js.map +1 -1
- package/dist/cli-commands.d.ts +2 -0
- package/dist/cli-commands.d.ts.map +1 -1
- package/dist/cli-commands.js +26 -4
- package/dist/cli-commands.js.map +1 -1
- package/dist/cli-help.d.ts.map +1 -1
- package/dist/cli-help.js +17 -12
- package/dist/cli-help.js.map +1 -1
- package/dist/config-reference.d.ts +1 -1
- package/dist/config-reference.d.ts.map +1 -1
- package/dist/config-reference.js +62 -0
- package/dist/config-reference.js.map +1 -1
- package/dist/configured-agent.js +3 -1
- package/dist/configured-agent.js.map +1 -1
- package/dist/doctor.js +3 -2
- package/dist/doctor.js.map +1 -1
- package/dist/launchd.d.ts +16 -0
- package/dist/launchd.d.ts.map +1 -1
- package/dist/launchd.js +67 -0
- package/dist/launchd.js.map +1 -1
- package/dist/local-configuration.d.ts +2 -2
- package/dist/local-configuration.d.ts.map +1 -1
- package/dist/local-configuration.js +10 -10
- package/dist/local-configuration.js.map +1 -1
- package/dist/modules/known-tools.d.ts +2 -2
- package/dist/modules/known-tools.d.ts.map +1 -1
- package/dist/modules/known-tools.js +2 -1
- package/dist/modules/known-tools.js.map +1 -1
- package/dist/notify-runtime.d.ts +26 -0
- package/dist/notify-runtime.d.ts.map +1 -0
- package/dist/notify-runtime.js +27 -0
- package/dist/notify-runtime.js.map +1 -0
- package/dist/notify-tool.d.ts +51 -0
- package/dist/notify-tool.d.ts.map +1 -0
- package/dist/notify-tool.js +182 -0
- package/dist/notify-tool.js.map +1 -0
- package/dist/project-skills.d.ts +1 -1
- package/dist/project-skills.d.ts.map +1 -1
- package/dist/project-skills.js +9 -7
- package/dist/project-skills.js.map +1 -1
- package/dist/recipes/base.d.ts +15 -0
- package/dist/recipes/base.d.ts.map +1 -0
- package/dist/recipes/base.js +51 -0
- package/dist/recipes/base.js.map +1 -0
- package/dist/recipes/catalog.d.ts +4 -0
- package/dist/recipes/catalog.d.ts.map +1 -0
- package/dist/recipes/catalog.js +525 -0
- package/dist/recipes/catalog.js.map +1 -0
- package/dist/recipes/index.d.ts +11 -0
- package/dist/recipes/index.d.ts.map +1 -0
- package/dist/recipes/index.js +14 -0
- package/dist/recipes/index.js.map +1 -0
- package/dist/recipes/types.d.ts +70 -0
- package/dist/recipes/types.d.ts.map +1 -0
- package/dist/recipes/types.js +15 -0
- package/dist/recipes/types.js.map +1 -0
- package/dist/request-model-override.d.ts +3 -2
- package/dist/request-model-override.d.ts.map +1 -1
- package/dist/request-model-override.js +9 -7
- package/dist/request-model-override.js.map +1 -1
- package/dist/sessions-command.d.ts +53 -0
- package/dist/sessions-command.d.ts.map +1 -0
- package/dist/sessions-command.js +309 -0
- package/dist/sessions-command.js.map +1 -0
- package/dist/setup.d.ts +29 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +97 -0
- package/dist/setup.js.map +1 -0
- package/dist/tui-command.d.ts +1 -1
- package/dist/tui-command.d.ts.map +1 -1
- package/dist/tui-command.js +4 -4
- package/dist/tui-command.js.map +1 -1
- package/dist/web-command.d.ts +109 -43
- package/dist/web-command.d.ts.map +1 -1
- package/dist/web-command.js +1108 -237
- package/dist/web-command.js.map +1 -1
- package/dist/wizard/prompts.d.ts.map +1 -1
- package/dist/wizard/prompts.js +2 -1
- package/dist/wizard/prompts.js.map +1 -1
- package/dist/wizard/run.d.ts.map +1 -1
- package/dist/wizard/run.js +9 -9
- package/dist/wizard/run.js.map +1 -1
- package/package.json +16 -15
- package/schema/mono-agent.config.schema.json +68 -0
- package/skills/mono-agent-composer/SKILL.md +1 -1
- package/skills/mono-agent-composer/references/config-blueprint.md +15 -2
- package/skills/mono-agent-composer/references/discovery-questions.md +2 -0
- package/skills/mono-agent-composer/references/feature-coverage.md +7 -6
- package/skills/mono-agent-composer/references/package-map.md +4 -3
- package/skills/mono-agent-composer/references/playbooks.md +3 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mono-agent/agent-app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "Config-first mono-agent host: builds a responder and starts every configured communication channel and traceability from one mono-agent.config.json.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "GPL-3.0-only",
|
|
@@ -37,20 +37,21 @@
|
|
|
37
37
|
"@clack/prompts": "^1.7.0",
|
|
38
38
|
"@earendil-works/pi-ai": "0.80.6",
|
|
39
39
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
40
|
-
"@mono-agent/agent-contracts": "0.
|
|
41
|
-
"@mono-agent/agent-harness": "0.
|
|
42
|
-
"@mono-agent/config": "0.
|
|
43
|
-
"@mono-agent/cron-adapter": "0.
|
|
44
|
-
"@mono-agent/operator-adapter": "0.
|
|
45
|
-
"@mono-agent/memory": "0.
|
|
46
|
-
"@mono-agent/observability": "0.
|
|
47
|
-
"@mono-agent/openai-api-adapter": "0.
|
|
48
|
-
"@mono-agent/runtime-adapter": "0.
|
|
49
|
-
"@mono-agent/session-web": "0.
|
|
50
|
-
"@mono-agent/slack-adapter": "0.
|
|
51
|
-
"@mono-agent/telegram-adapter": "0.
|
|
52
|
-
"@mono-agent/tui": "0.
|
|
53
|
-
"@mono-agent/
|
|
40
|
+
"@mono-agent/agent-contracts": "0.12.0",
|
|
41
|
+
"@mono-agent/agent-harness": "0.12.0",
|
|
42
|
+
"@mono-agent/config": "0.12.0",
|
|
43
|
+
"@mono-agent/cron-adapter": "0.12.0",
|
|
44
|
+
"@mono-agent/operator-adapter": "0.12.0",
|
|
45
|
+
"@mono-agent/memory": "0.12.0",
|
|
46
|
+
"@mono-agent/observability": "0.12.0",
|
|
47
|
+
"@mono-agent/openai-api-adapter": "0.12.0",
|
|
48
|
+
"@mono-agent/runtime-adapter": "0.12.0",
|
|
49
|
+
"@mono-agent/session-web": "0.12.0",
|
|
50
|
+
"@mono-agent/slack-adapter": "0.12.0",
|
|
51
|
+
"@mono-agent/telegram-adapter": "0.12.0",
|
|
52
|
+
"@mono-agent/tui": "0.12.0",
|
|
53
|
+
"@mono-agent/web": "0.12.0",
|
|
54
|
+
"@mono-agent/webhook-adapter": "0.12.0",
|
|
54
55
|
"undici": "8.7.0",
|
|
55
56
|
"zod": "^4.4.3"
|
|
56
57
|
},
|
|
@@ -145,6 +145,74 @@
|
|
|
145
145
|
],
|
|
146
146
|
"type": "integer"
|
|
147
147
|
},
|
|
148
|
+
"compaction": {
|
|
149
|
+
"type": "object",
|
|
150
|
+
"additionalProperties": false,
|
|
151
|
+
"properties": {
|
|
152
|
+
"enabled": {
|
|
153
|
+
"description": "Enables adaptive proactive compaction and one-shot reactive overflow recovery.",
|
|
154
|
+
"examples": [
|
|
155
|
+
true
|
|
156
|
+
],
|
|
157
|
+
"type": "boolean",
|
|
158
|
+
"default": true
|
|
159
|
+
},
|
|
160
|
+
"triggerRatio": {
|
|
161
|
+
"description": "Fraction of the effective model context window used for the proactive trigger, additionally capped by adaptive safety headroom.",
|
|
162
|
+
"examples": [
|
|
163
|
+
0.7
|
|
164
|
+
],
|
|
165
|
+
"type": "number",
|
|
166
|
+
"default": 0.7,
|
|
167
|
+
"minimum": 0.2,
|
|
168
|
+
"maximum": 0.95
|
|
169
|
+
},
|
|
170
|
+
"keepRecentTokens": {
|
|
171
|
+
"description": "Explicit recent-context retention override; omitted derives 10% of the effective context window, clamped to 4,000-20,000 tokens.",
|
|
172
|
+
"examples": [
|
|
173
|
+
12800
|
|
174
|
+
],
|
|
175
|
+
"type": "integer",
|
|
176
|
+
"minimum": 4000,
|
|
177
|
+
"maximum": 200000
|
|
178
|
+
},
|
|
179
|
+
"summaryMaxTokens": {
|
|
180
|
+
"description": "Explicit combined summary-output budget override; omitted derives 4% of the effective context window, clamped to 2,000-12,000 tokens.",
|
|
181
|
+
"examples": [
|
|
182
|
+
5120
|
|
183
|
+
],
|
|
184
|
+
"type": "integer",
|
|
185
|
+
"minimum": 1000,
|
|
186
|
+
"maximum": 64000
|
|
187
|
+
},
|
|
188
|
+
"minSavingsTokens": {
|
|
189
|
+
"description": "Minimum verified token reduction required for proactive compaction; omitted derives 10% of the effective window, clamped to 4,000-20,000. Reactive recovery accepts any positive reduction.",
|
|
190
|
+
"examples": [
|
|
191
|
+
12800
|
|
192
|
+
],
|
|
193
|
+
"type": "integer",
|
|
194
|
+
"minimum": 0,
|
|
195
|
+
"maximum": 500000
|
|
196
|
+
},
|
|
197
|
+
"fixedOverheadEnabled": {
|
|
198
|
+
"description": "Includes system instructions, tool schemas, and the current user turn in proactive request-size estimates.",
|
|
199
|
+
"examples": [
|
|
200
|
+
true
|
|
201
|
+
],
|
|
202
|
+
"type": "boolean",
|
|
203
|
+
"default": true
|
|
204
|
+
},
|
|
205
|
+
"contextWindowOverride": {
|
|
206
|
+
"description": "Persistent correction for inaccurate provider context-window metadata; learned overflow ceilings may lower it process-locally.",
|
|
207
|
+
"examples": [
|
|
208
|
+
128000
|
|
209
|
+
],
|
|
210
|
+
"type": "integer",
|
|
211
|
+
"minimum": 32000,
|
|
212
|
+
"maximum": 10000000
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
},
|
|
148
216
|
"workspace": {
|
|
149
217
|
"description": "Configures workspace for the runtime section.",
|
|
150
218
|
"examples": [
|
|
@@ -82,7 +82,7 @@ Everything below runs in the user's agent folder, not the workspace.
|
|
|
82
82
|
mono-agent start
|
|
83
83
|
```
|
|
84
84
|
|
|
85
|
-
Then run the acceptance smoke test matching the chosen channel (see `references/validation.md`). To change anything, edit `mono-agent.config.json` or `IDENTITY.md` directly and run `mono-agent restart`; there is no live browser re-apply. On macOS, `mono-agent tui --configure`
|
|
85
|
+
Then run the acceptance smoke test matching the chosen channel (see `references/validation.md`). To change anything, edit `mono-agent.config.json` or `IDENTITY.md` directly and run `mono-agent restart`; there is no live browser re-apply. On macOS, `mono-agent tui --configure` opens a persistent, visibly marked proposal-only SELF-CONFIG conversation against the already-running background agent. It maps the available capabilities, helps build a workflow conversationally, never accepts secrets, requires an out-of-band approval, and restarts or rolls back through the managed lifecycle. Approval, rejection, and no-change turns continue SELF-CONFIG; only quitting exits. Off macOS, use manual edits plus `validate`, foreground `start`, and ordinary `tui`; conversational configuration is unavailable.
|
|
86
86
|
|
|
87
87
|
## When Config Is Not Enough
|
|
88
88
|
|
|
@@ -51,6 +51,16 @@ new agent.
|
|
|
51
51
|
// Ranking above max only prevents keyword downgrade.
|
|
52
52
|
"permissionMode": "default", // default|plan|acceptEdits|bypassPermissions (CLI backends)
|
|
53
53
|
"maxTurns": 0, // 0 or omitted means unlimited; 1-100 caps turns
|
|
54
|
+
"compaction": {
|
|
55
|
+
"enabled": true, // default true
|
|
56
|
+
"triggerRatio": 0.70, // default 0.70; adaptive safety headroom also applies
|
|
57
|
+
// Omit these three to derive model-window-aware defaults.
|
|
58
|
+
"keepRecentTokens": 12800,
|
|
59
|
+
"summaryMaxTokens": 5120,
|
|
60
|
+
"minSavingsTokens": 12800,
|
|
61
|
+
"fixedOverheadEnabled": true, // include system prompt, tool schemas, and current turn
|
|
62
|
+
"contextWindowOverride": 128000 // optional persistent correction for bad provider metadata
|
|
63
|
+
},
|
|
54
64
|
"workspace": ".",
|
|
55
65
|
"session": { "mode": "continuous", "idleTimeoutMs": 1800000 } // or "per-message"
|
|
56
66
|
},
|
|
@@ -145,6 +155,9 @@ new agent.
|
|
|
145
155
|
"mcpConfigPath": "./mcp.json" // stdio/sse/http servers; inlined for SDK runtimes
|
|
146
156
|
},
|
|
147
157
|
|
|
158
|
+
// NodeRepl shares state only inside one run and uses the same sandbox policy
|
|
159
|
+
// as Bash.
|
|
160
|
+
|
|
148
161
|
// Human-in-the-loop bridge: blocking AskUser / TelegramAskButtons plus
|
|
149
162
|
// run-scoped project-MCP progress. It auto-starts when either ask tool is
|
|
150
163
|
// allowed, this block or an interaction env override is configured, or
|
|
@@ -212,7 +225,7 @@ new agent.
|
|
|
212
225
|
},
|
|
213
226
|
|
|
214
227
|
"live": {
|
|
215
|
-
"enabled": true, // default-on read-only SSE relay for mono-agent
|
|
228
|
+
"enabled": true, // default-on read-only SSE relay for mono-agent sessions
|
|
216
229
|
"host": "127.0.0.1",
|
|
217
230
|
"port": 0,
|
|
218
231
|
"basePath": "/live",
|
|
@@ -395,7 +408,7 @@ A `.env` file in the folder is loaded automatically (exported shell variables wi
|
|
|
395
408
|
|
|
396
409
|
For BuJo capture and the effective `bujo` tier that runs scheduled consolidation, configure `memory.llm`. Use `provider: "ollama"` with a local Ollama chat model string and optional `endpoint`, or `provider: "agent-host"` with `model` as a normal SDK runtime model reference such as `pi:openai-codex:gpt-5.5` and `executionMode: "sdk"`. `endpoint` is Ollama-only, and CLI-backed refs such as `codex:gpt-5.5` are rejected for memory LLMs until runtimes can enforce no external actions. The same values can be supplied via `MONO_AGENT_MEMORY_LLM_PROVIDER`, `MONO_AGENT_MEMORY_LLM_MODEL`, `MONO_AGENT_MEMORY_LLM_EXECUTION_MODE`, and `MONO_AGENT_MEMORY_LLM_ENDPOINT`. The standalone `memory-bujo migrate` command remains Ollama-only; other maintenance commands use the configured embeddings provider. `agent-host` LLM capture is an in-app composition path that injects the `LlmComplete` implementation into the BuJo store.
|
|
397
410
|
|
|
398
|
-
For operator views, run `mono-agent tui` or `mono-agent
|
|
411
|
+
For operator views, run `mono-agent tui`, `mono-agent web`, or `mono-agent sessions` from any directory once the agent is started. All discover running agents via the trace-source registry. The TUI and assistant-ui web console chat over the default-on `tui` stream endpoint (`"tui": {"enabled": false}` opts out); on macOS, `mono-agent tui --configure` opens a persistent, visibly marked proposal-only SELF-CONFIG conversation against the managed background agent and must not be combined with `--local`. Approval, rejection, and no-change turns continue that session; only quitting exits it. `mono-agent web` is an always-on service namespace, binds `0.0.0.0:5050` by default, and has no app login; use `--loopback` to narrow it. The legacy Session Recorder reads artifacts and live updates from the default-on `live` relay (`"live": {"enabled": false}` opts out); run `mono-agent sessions --include-memory` to inspect memory-maintenance runs. The low-level `mono-agent-tui` bin also supports `--responder <file>` (embedded, an ESM module default-exporting an `AgentResponderLike` or exporting `createResponder(env, cwd, configJson)`) and `--url <baseUrl>` (direct connect).
|
|
399
412
|
|
|
400
413
|
## Programmatic Escape Hatch
|
|
401
414
|
|
|
@@ -79,6 +79,8 @@ Plus, independently: MCP servers from an mcp.json config file?
|
|
|
79
79
|
|
|
80
80
|
Fills: `tools.allowedTools`, `tools.disallowedTools` (denylist wins, even under allow-all), `tools.mcpConfigPath`. The default is allow-all (`["*"]`) — write that unless the user asks to narrow. Under allow-all the adapter-derived send tools (`SlackSendMessage` / `TelegramSendMessage` / …) are auto-available once the channel is enabled; only a **specific** allowlist needs their exact names added. Valid enabled Slack/Telegram adapter config and destination allowlists are required either way. On the pi-native runtime `disallowedTools` does not filter external MCP-server tools — to withhold one, don't declare its server.
|
|
81
81
|
|
|
82
|
+
Offer the `NodeRepl` built-in when the user wants run-scoped JavaScript evaluation. It executes with the same sandbox authority as `Bash`.
|
|
83
|
+
|
|
82
84
|
## 6. Memory Strategy
|
|
83
85
|
|
|
84
86
|
Question:
|
|
@@ -17,7 +17,7 @@ Every framework capability and how a composed agent reaches it. This table is th
|
|
|
17
17
|
| Pi OAuth credentials | config | `providers.piAuthPath` | `runtime.pi-credentials` |
|
|
18
18
|
| Pi-native transport, retry, and durable provider-session tuning | config | `providers.piNative.{transport,piMaxRetries,maxRetryDelayMs,piSessionsRoot}` | `runtime.pi-native-tuning` |
|
|
19
19
|
| Tool-output bloat guard, cost tracking | auto | built into every run | — |
|
|
20
|
-
| Context handling / auto-compaction |
|
|
20
|
+
| Context handling / auto-compaction | config + provider | `runtime.compaction.*` (matching `MONO_AGENT_COMPACTION_*`) controls adaptive Pi compaction. Omitted budgets derive from the active model window; reactive recovery re-prompts exactly once only after a verified reduction, and persistent `context_limit` advances to a configured fallback | `runtime.context-compaction` |
|
|
21
21
|
| Structured output (JSON schema), live input steering | code | harness `runtimeOptions` | — |
|
|
22
22
|
| Tool approval gates (risk tiers, timeouts, always-allow) | code | `createMonoRuntime({ onToolApprovalRequest, ... })` — needs a host UI | — |
|
|
23
23
|
| Fully custom runtime | code | `startMonoAgentApp({ runtime })` | — |
|
|
@@ -49,7 +49,7 @@ Every framework capability and how a composed agent reaches it. This table is th
|
|
|
49
49
|
| Capability | Coverage | Where | Registry config ids |
|
|
50
50
|
| --- | --- | --- | --- |
|
|
51
51
|
| Allow-all tool policy (omitted / `["*"]` = all tools; `[]` = none) | config | default `tools.allowedTools`; the harness no-policy safety net is `failClosedToolPolicy()` | `tool-policy.allow-all` |
|
|
52
|
-
| Built-in tool allow/deny lists (deny wins, even under allow-all; pi doesn't deny external MCP tools) | config | `tools.allowedTools`, `tools.disallowedTools`; built-ins are Read/Write/Edit/Glob/Grep/Bash/WebFetch/WebSearch | `tool-policy.allowlist`, `tool-policy.denylist`, `runtime.builtin-tools` |
|
|
52
|
+
| Built-in tool allow/deny lists (deny wins, even under allow-all; pi doesn't deny external MCP tools) | config | `tools.allowedTools`, `tools.disallowedTools`; managed built-ins are Read/Write/Edit/Glob/Grep/Bash/NodeRepl/WebFetch/WebSearch | `tool-policy.allowlist`, `tool-policy.denylist`, `runtime.builtin-tools` |
|
|
53
53
|
| MCP servers (stdio/sse/http) from a JSON file | config | `tools.mcpConfigPath` | `tool-policy.mcp-servers` |
|
|
54
54
|
| Durable origin-bound continuations for trusted stdio/loopback-HTTP MCP services | config + auto | `tools.continuationServers` + `continuations.*`; interactive claims pin a bounded immutable origin snapshot before commit, exact rollover buckets are preserved, v3 state is restart-safe, and unavailable/legacy snapshots use a fixed zero-model fallback | `agent-app.durable-continuations` |
|
|
55
55
|
| Adapter-derived send tools for enabled Slack/Telegram adapters | config | auto-available under allow-all once the channel is enabled; a **specific** `tools.allowedTools` must include `SlackSendMessage` / `TelegramSendMessage`; valid `slack.*` / `telegram.*` config and existing adapter allowlists provide credentials and destination bounds; confirmed message posts are idempotently recorded in destination history | `agent-app.adapter-send-tools` |
|
|
@@ -74,7 +74,7 @@ Every framework capability and how a composed agent reaches it. This table is th
|
|
|
74
74
|
| Slack App Home actions | config | `slack.homeTab: {enabled?, headerText?, buttons?:[{actionId, label, prompt, channelId?, ackText?, threadReply?}]}`; `enabled` defaults to `false`, `buttons` defaults to `[]`; JSON-only | `slack.app-home` |
|
|
75
75
|
| External channel plugins | config | `channels.plugins[]: { package, id?, label?, config? }`; package must export `createChannelDriver(options)` or a default driver factory | `channel.plugins` |
|
|
76
76
|
| WhatsApp (Baileys, QR login, group mention/any triggers) | config | `channels.plugins[].package: "@mono-agent/whatsapp-adapter"` plus plugin `config.{enabled,allowedChatJids,allowAllChats,groupMode,botJids,mentionTextAliases,stripMentionText}` | `whatsapp.baileys` |
|
|
77
|
-
| A2A provider (Agent Card, JSON-RPC + REST, streaming, bearer, opt-in durable dispatch identity) | config | `channels.plugins[].package: "@mono-agent/a2a-adapter"` plus plugin `config.provider` (including `idempotency.{namespace,stateDir,retentionMs,maxRecords}`), `config.agent`, `config.skill`; `config.enabled` is canonical | `a2a.provider` |
|
|
77
|
+
| A2A provider (Agent Card, JSON-RPC + REST, streaming, bearer, configurable request-body limit, opt-in durable dispatch identity) | config | `channels.plugins[].package: "@mono-agent/a2a-adapter"` plus plugin `config.provider` (including `maxRequestBytes` and `idempotency.{namespace,stateDir,retentionMs,maxRecords}`), `config.agent`, `config.skill`; `config.enabled` is canonical | `a2a.provider` |
|
|
78
78
|
| A2A consumer settings (remote agent URLs, timeouts) and calls | config + code | same A2A plugin entry's `config.consumer`; calls via `sendA2AMessage({ idempotencyKey })` or `createA2AConsumerResponder({ idempotencyKeyForRequest })` | `a2a.consumer` |
|
|
79
79
|
| TUI stream endpoint (operator console transport) | config | `tui.{enabled,host,port,basePath,allowNonLoopback,apiKey}`; default on, loopback | `tui.stream-endpoint` |
|
|
80
80
|
| Live event relay (read-only run-event SSE for web) | config | `live.{enabled,host,port,basePath,allowNonLoopback,apiKey}`; default on, loopback | `live.event-relay` |
|
|
@@ -93,10 +93,11 @@ Every framework capability and how a composed agent reaches it. This table is th
|
|
|
93
93
|
| Trace-source registry (heartbeat manifests `mono-agent status` reads) | config | `traceability.{registryDir,sourceId,sourceLabel,heartbeatMs,staleAfterMs,globalDiscovery}` | `observability.trace-registry` |
|
|
94
94
|
| Phoenix trace viewer (best-effort terminal-batched OTLP exporter; independent local JSONL has bounded terminal snapshots and can lose RAM-buffered events on crash) | config | `observability.exporters` (phoenix entry) | `observability.phoenix-exporter` |
|
|
95
95
|
| Operator console (live chat with thinking/tool/telemetry insight, run replay, config view) | cli | `mono-agent tui [--agent <label>]`; agents serve the `tui` stream endpoint by default (`tui.enabled`, loopback) | — |
|
|
96
|
-
|
|
|
97
|
-
|
|
|
96
|
+
| Always-on multi-agent web console (persistent conversations, attachments, model/effort selection, reasoning/tools, hidden telemetry-backed cumulative context usage, cancellation) | cli | `mono-agent web start\|stop\|restart\|status\|logs\|run`; bare `mono-agent web` is read-only status/help; default `0.0.0.0:5050`, `--loopback` narrows to `127.0.0.1`; package `@mono-agent/web`; no app authentication, so LAN/Tailnet reachability is the access boundary | — |
|
|
97
|
+
| Managed proposal-only SELF-CONFIG conversation | cli + tool | macOS `mono-agent tui --configure` attaches to the authoritative background agent; persistent marker and capability map; stable configuration conversation with a fresh proposal capability after each checkpoint; host-gated `ProposeAgentConfiguration`; approval restarts and waits for readiness, failed start rolls files/agent back; only quitting exits. `--local` is ordinary chat only; off macOS configuration is manual | — |
|
|
98
|
+
| Session Recorder web PWA (read-only run browser) | cli | `mono-agent sessions [--host <addr>] [--port <n>] [--no-open] [--allow-non-loopback] [--show-auth-url] [--include-memory] [--max-runs <n>] [--config <path>] [--env-file <path>]`; default `127.0.0.1:4599`; package `@mono-agent/session-web`; non-loopback/non-interactive auth uses legacy `MONO_AGENT_WEB_AUTH_TOKEN` | — |
|
|
98
99
|
| Setup presets (saved answer-sets: generate config + `.env.example` + checklist) | cli | `mono-agent presets list\|show <id>`, `mono-agent init --preset <id> --yes` (`recipes`/`--recipe` deprecated aliases removed in v2.0.0) | — |
|
|
99
|
-
| Interactive setup wizard (preset/custom; exact `IDENTITY.md` → `## Role` prompt/outcome; walks model→channels→memory→tools→sandbox→observability; Journal/BuJo explicitly choose Ollama or LM Studio service root/model/dimension/optional auth env using typed discovery and a real probe; macOS starts the background agent before
|
|
100
|
+
| Interactive setup wizard (preset/custom; exact `IDENTITY.md` → `## Role` prompt/outcome; walks model→channels→memory→tools→sandbox→observability; Journal/BuJo explicitly choose Ollama or LM Studio service root/model/dimension/optional auth env using typed discovery and a real probe; macOS starts the background agent before persistent SELF-CONFIG) | cli | `mono-agent init` (no flags, on a TTY; `setup` alias); manual embedding entry still requires readiness probe; flags/non-TTY stay scaffold-only; unsupported platforms use manual configuration/foreground start/ordinary TUI | — |
|
|
100
101
|
| Tools reporting + no-tools guardrail (allow-all → `All tools allowed`; explicit empty `allowedTools: []` → `waiting`; unknown-tool "did you mean"; send-tool/channel cross-checks) | cli | part of `mono-agent validate`/`doctor`; the wizard's tools step | — |
|
|
101
102
|
| Resolved config view (every field tagged env/json/default) | cli | `mono-agent config` | — |
|
|
102
103
|
| Scaffold / validate / start / install-skill | cli | `mono-agent init [--model <ref>] [--fallback <ref> [--fallback-effort <provider-default\|level>]]... [--effort <level>] [--auth]\|validate [--consumer <path>]\|config\|presets\|start\|install-skill`; legacy CLI `--fallback-models <csv>` is removed in v2.0.0 | — |
|
|
@@ -99,7 +99,7 @@ Communication adapters are edge packages. They accept an `AgentResponder` and ow
|
|
|
99
99
|
| Slack | `@mono-agent/slack-adapter` | Allowed channel or DM gets the final reply |
|
|
100
100
|
| WhatsApp | `@mono-agent/whatsapp-adapter` (external channel plugin) | Allowed sender/group trigger produces a reply |
|
|
101
101
|
| OpenAI-compatible API | `@mono-agent/openai-api-adapter` | `curl /v1/models` and `/v1/chat/completions` |
|
|
102
|
-
| Operator endpoints | `@mono-agent/operator-adapter` | `mono-agent tui`
|
|
102
|
+
| Operator endpoints | `@mono-agent/operator-adapter` | `mono-agent tui` and `mono-agent web` connect for chat; `mono-agent sessions` observes live runs |
|
|
103
103
|
| A2A provider/consumer | `@mono-agent/a2a-adapter` (external channel plugin) | Send text to the Agent Card URL |
|
|
104
104
|
| Webhook | `@mono-agent/webhook-adapter` | `curl` the configured invocation path (with `Authorization: Bearer ...` when `apiKey` is set) |
|
|
105
105
|
| Cron | `@mono-agent/cron-adapter` | One scheduled or manually triggered invocation |
|
|
@@ -111,8 +111,9 @@ Adapters must not import the harness, runtime adapter, memory package (`@mono-ag
|
|
|
111
111
|
Use:
|
|
112
112
|
|
|
113
113
|
- `@mono-agent/tui` for the pi-tui operator console (`mono-agent tui`): live chat with structured stream-event insight, recorded-run replay, and config view. Remote event frames have a strict 256 KiB UTF-8 NDJSON cap: assistant-thought/tool-call payload fields are reduced and remeasured, while another oversized variant or a reducible event whose minimal form still does not fit becomes a bounded `oversized_event` marker. Other frame kinds are unaffected, and replay contains only key-redacted, capped events that reached terminal JSONL persistence.
|
|
114
|
-
- `@mono-agent/
|
|
115
|
-
- `@mono-agent/
|
|
114
|
+
- `@mono-agent/web` for the assistant-ui always-on browser console (`mono-agent web`): persistent multi-agent conversations, device-local file picking, streamed reasoning/tools, internal telemetry-backed cumulative context usage, cancellation, LAN-default HTTP on port 5050, and conflict-safe optional Tailscale Serve HTTPS. It has no app login; network reachability is the access boundary.
|
|
115
|
+
- `@mono-agent/session-web` for the legacy read-only Session Recorder PWA served by `mono-agent sessions`, including local artifact paging and live relay aggregation on its existing port 4599 surface.
|
|
116
|
+
- `@mono-agent/operator-adapter` for the loopback NDJSON stream endpoint the TUI and web chat console connect to (`tui` config section, on by default) and the live SSE endpoint `mono-agent sessions` observes (`live` config section, on by default).
|
|
116
117
|
- `@mono-agent/observability` for JSONL event artifacts, summaries, trace-source registration, and the `@mono-agent/observability/otel` Phoenix OTLP exporter configured via `observability.exporters`.
|
|
117
118
|
|
|
118
119
|
Traceability is local-first. A running host registers a source manifest; `mono-agent status` reads the trace-source registry to report live sources, and artifacts are keyed by `(sourceId, runId)` so duplicate run ids do not collide. Phoenix is the recommended trace viewer when an `observability.exporters` (phoenix) entry is configured; its terminal-batched export is best-effort. Independently, the local recorder writes empty events plus a `running` summary at start and a key-redacted, capped snapshot at finish/fail. Events stay in RAM between those boundaries, so a crash can lose them. Without Phoenix, those bounded terminal JSONL snapshots are the only local run record.
|
|
@@ -144,7 +144,7 @@ Put `MONO_AGENT_SLACK_BOT_TOKEN` and `MONO_AGENT_SLACK_APP_TOKEN` in `.env`; the
|
|
|
144
144
|
}
|
|
145
145
|
```
|
|
146
146
|
**Credentials:** put `MONO_AGENT_A2A_BEARER_TOKEN` in the provider's `.env` and `MONO_AGENT_A2A_CONSUMER_BEARER_TOKEN` in the consumer's `.env`; source config omits both tokens.
|
|
147
|
-
**Steps:** provider — `init`, add the `@mono-agent/a2a-adapter` plugin entry with `provider`/`agent`/`skill` + env-backed bearer; for paid/non-repeatable calls choose a reviewed stable `provider.idempotency.namespace`; `validate`, `start`, confirm the Agent Card is reachable. Consumer — set plugin `config.consumer` (or compose `createA2AConsumerResponder`), then pass the existing logical dispatch id through `idempotencyKey` / `idempotencyKeyForRequest` rather than generating one per attempt.
|
|
147
|
+
**Steps:** provider — `init`, add the `@mono-agent/a2a-adapter` plugin entry with `provider`/`agent`/`skill` + env-backed bearer; set `provider.maxRequestBytes` only when the caller's task envelope exceeds the 100 KiB SDK default; for paid/non-repeatable calls choose a reviewed stable `provider.idempotency.namespace`; `validate`, `start`, confirm the Agent Card is reachable. Consumer — set plugin `config.consumer` (or compose `createA2AConsumerResponder`), then pass the existing logical dispatch id through `idempotencyKey` / `idempotencyKeyForRequest` rather than generating one per attempt.
|
|
148
148
|
**Smoke:** repeat one keyed message to the provider's Agent Card URL with the bearer; confirm the same task/result is returned and the responder runs once.
|
|
149
149
|
|
|
150
150
|
## 8. Multi-agent orchestration (`AskCollaborator`) — code
|
|
@@ -175,7 +175,7 @@ const orchestrator = await createConfiguredAgentResponder({
|
|
|
175
175
|
|
|
176
176
|
## 9. Sandboxed code agent (loopback only, deny .env)
|
|
177
177
|
**For:** a security team deploying an internal code assistant.
|
|
178
|
-
**Goal:** read repos + run Bash inside the native srt sandbox with loopback-only network access and protected secrets.
|
|
178
|
+
**Goal:** read repos + run Bash or run-scoped NodeRepl inside the native srt sandbox with loopback-only network access and protected secrets.
|
|
179
179
|
**Features:** `sandbox.mode`, `sandbox.network-policy`, `sandbox.filesystem-scopes`, `sandbox.fallback`, `tool-policy.allow-all`, `memory.journal`.
|
|
180
180
|
|
|
181
181
|
```json
|
|
@@ -186,7 +186,7 @@ const orchestrator = await createConfiguredAgentResponder({
|
|
|
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
|
|
189
|
+
**Smoke:** ask it to read a file, run Bash, 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.
|
|
190
190
|
|
|
191
191
|
## 10. Phoenix-observed agent with the TUI
|
|
192
192
|
**For:** an agent builder evaluating runs in a tracing dashboard.
|