@excitedjs/dreamux 0.12.0 → 0.12.1-beta.49

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 (72) hide show
  1. package/README.md +154 -62
  2. package/dist/admin/methods.js +72 -0
  3. package/dist/admin/methods.js.map +1 -1
  4. package/dist/agent-runtime/catalog.js +66 -0
  5. package/dist/agent-runtime/catalog.js.map +1 -0
  6. package/dist/agent-runtime/claude-code-session.js +268 -0
  7. package/dist/agent-runtime/claude-code-session.js.map +1 -0
  8. package/dist/agent-runtime/claude-code.js +318 -0
  9. package/dist/agent-runtime/claude-code.js.map +1 -0
  10. package/dist/agent-runtime/codex.js +60 -0
  11. package/dist/agent-runtime/codex.js.map +1 -0
  12. package/dist/agent-runtime/index.js +6 -0
  13. package/dist/agent-runtime/index.js.map +1 -0
  14. package/dist/agent-runtime/types.js +2 -0
  15. package/dist/agent-runtime/types.js.map +1 -0
  16. package/dist/channel/channel-providers.js +43 -0
  17. package/dist/channel/channel-providers.js.map +1 -0
  18. package/dist/channel/feishu-provider.js +58 -0
  19. package/dist/channel/feishu-provider.js.map +1 -0
  20. package/dist/channel/provider.js +51 -0
  21. package/dist/channel/provider.js.map +1 -0
  22. package/dist/cli/doctor.js +88 -30
  23. package/dist/cli/doctor.js.map +1 -1
  24. package/dist/cli/dreamux.js +35 -1
  25. package/dist/cli/dreamux.js.map +1 -1
  26. package/dist/cli/server.js +13 -8
  27. package/dist/cli/server.js.map +1 -1
  28. package/dist/codex/mcp-config.js +18 -8
  29. package/dist/codex/mcp-config.js.map +1 -1
  30. package/dist/daemon/install.js +9 -7
  31. package/dist/daemon/install.js.map +1 -1
  32. package/dist/dispatcher/runtime.js +51 -0
  33. package/dist/dispatcher/runtime.js.map +1 -1
  34. package/dist/mcp/teammate-mcp.js +277 -0
  35. package/dist/mcp/teammate-mcp.js.map +1 -0
  36. package/dist/onboard/config-files.js +35 -22
  37. package/dist/onboard/config-files.js.map +1 -1
  38. package/dist/onboard/run.js +3 -2
  39. package/dist/onboard/run.js.map +1 -1
  40. package/dist/onboard/service.js +6 -5
  41. package/dist/onboard/service.js.map +1 -1
  42. package/dist/registry/builtins.js +99 -0
  43. package/dist/registry/builtins.js.map +1 -0
  44. package/dist/registry/index.js +11 -0
  45. package/dist/registry/index.js.map +1 -0
  46. package/dist/registry/provider-ref.js +100 -0
  47. package/dist/registry/provider-ref.js.map +1 -0
  48. package/dist/registry/registry.js +124 -0
  49. package/dist/registry/registry.js.map +1 -0
  50. package/dist/runtime/claude-code-args.js +69 -0
  51. package/dist/runtime/claude-code-args.js.map +1 -0
  52. package/dist/runtime/claude-code-stream.js +251 -0
  53. package/dist/runtime/claude-code-stream.js.map +1 -0
  54. package/dist/runtime/codex-args.js +8 -7
  55. package/dist/runtime/codex-args.js.map +1 -1
  56. package/dist/runtime/config.js +212 -39
  57. package/dist/runtime/config.js.map +1 -1
  58. package/dist/runtime/dispatcher-store.js +14 -5
  59. package/dist/runtime/dispatcher-store.js.map +1 -1
  60. package/dist/runtime/paths.js +43 -0
  61. package/dist/runtime/paths.js.map +1 -1
  62. package/dist/runtime/secrets.js +7 -3
  63. package/dist/runtime/secrets.js.map +1 -1
  64. package/dist/server.js +218 -48
  65. package/dist/server.js.map +1 -1
  66. package/dist/teammate/delivery.js +124 -0
  67. package/dist/teammate/delivery.js.map +1 -0
  68. package/dist/teammate/ledger.js +505 -0
  69. package/dist/teammate/ledger.js.map +1 -0
  70. package/dist/teammate/mcp-config.js +19 -0
  71. package/dist/teammate/mcp-config.js.map +1 -0
  72. package/package.json +1 -1
package/README.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # @excitedjs/dreamux
2
2
 
3
- The Codex-host server package. One long-running Node process hosts N
4
- **Dispatchers**; each Dispatcher binds **1 Feishu bot + 1 Codex thread**.
3
+ The dreamux host server package. One long-running Node process hosts N
4
+ **Dispatchers**; each Dispatcher binds a Channel provider, an Agent Runtime
5
+ provider, and Dreamux-owned MCP surfaces for channel replies and TeamMate work.
5
6
 
6
7
  This file is the **package-level** quick start. For the monorepo layout and
7
8
  knowledge base, see the top-level [`README.md`](../../README.md) and
@@ -12,7 +13,10 @@ Design background:
12
13
  [#2 Engineering plan](https://github.com/excitedjs/dreamux/issues/2) ·
13
14
  [#4 Monorepo + harness](https://github.com/excitedjs/dreamux/issues/4) ·
14
15
  [#18 Global bin onboarding](https://github.com/excitedjs/dreamux/issues/18) ·
15
- [#36 MVP tracking](https://github.com/excitedjs/dreamux/issues/36).
16
+ [#36 MVP tracking](https://github.com/excitedjs/dreamux/issues/36) ·
17
+ [#71 Capability Registry](https://github.com/excitedjs/dreamux/issues/71) ·
18
+ [#98 compatibility stance](https://github.com/excitedjs/dreamux/issues/98) ·
19
+ [#110 plugin/provider Epic](https://github.com/excitedjs/dreamux/issues/110).
16
20
 
17
21
  ## What this package ships
18
22
 
@@ -21,37 +25,49 @@ Design background:
21
25
  around the package-local `@excitedjs/tm` dependency for dispatcher skills.
22
26
  - A bundled dispatcher Codex skill, copied by `dreamux onboard` into
23
27
  `<dispatcher cwd>/.codex/skills/dispatcher/SKILL.md`.
24
- - Config-backed dispatcher declarations, server-owned state/log paths, a
25
- Feishu long-connection inbound channel, Codex app-server lifecycle
26
- management, and a dispatcher-scoped Feishu MCP shim for model replies.
27
-
28
- ## MVP contract
29
-
30
- - **One Node process, many Dispatchers.** Each Dispatcher = 1 Feishu Bot
31
- (`app_id`/`app_secret`) + 1 long-lived Codex `app-server` child + 1 Codex
32
- thread.
28
+ - Providerized dispatcher declarations, a process-local Capability Registry,
29
+ server-owned state/log paths, the `builtin:feishu` Channel provider, the
30
+ `builtin:codex` and `builtin:claude-code` Agent Runtime providers, and
31
+ dispatcher-scoped MCP shims for channel replies and TeamMate scheduling.
32
+ - A server-hosted TeamMate ledger with asynchronous scheduling, completion
33
+ delivery, bounded retry, and read-only result retrieval.
34
+
35
+ ## Phase 1 contract
36
+
37
+ - **One Node process, many Dispatchers.** Each Dispatcher has one configured
38
+ channel in Phase 1. The config shape is already `channels[]`, but runtime
39
+ routing still accepts exactly one channel per dispatcher.
40
+ - **Provider refs are explicit.** Wired builtin refs are `builtin:feishu`,
41
+ `builtin:codex`, and `builtin:claude-code`. Npm package refs and package
42
+ export refs are reserved syntax only in Phase 1; dreamux parses and rejects
43
+ them clearly instead of loading or executing external code.
33
44
  - **One dispatcher is one trust domain.** A bot may receive multiple chats, but
34
- all accepted messages share one Codex thread. Do not bind unrelated private
35
- chats to the same dispatcher.
36
- - **Dispatcher cwd is explicit, Codex state stays global.** Dispatcher
37
- app-server processes use Codex's global default home (`~/.codex`) for auth,
38
- memory, and config. The dispatcher skill is workspace-local under the
39
- dispatcher cwd.
45
+ all accepted messages share one dispatcher runtime context. Do not bind
46
+ unrelated private chats to the same dispatcher.
47
+ - **Dispatcher cwd is explicit.** Codex-backed dispatchers use Codex's global
48
+ default home (`~/.codex`) for auth, memory, and config. Claude Code-backed
49
+ dispatchers use Claude Code's own CLI/auth behavior. The dispatcher skill is
50
+ workspace-local under the dispatcher cwd.
40
51
  - **Inbound state is in memory.** The server keeps only process-local turn
41
52
  queues, message dedupe, coalescing state, and received-reaction ownership.
42
53
  Restarting the server drops unprocessed inbound messages and may leave
43
54
  received reactions behind.
44
55
  - **Outbound is MCP reply-only.** Assistant text emitted by Codex is never
45
56
  forwarded to Feishu automatically. The model must call the dispatcher-scoped
46
- Feishu MCP tools such as `reply` or `react`.
47
- - **No webhook surface in MVP.** Feishu inbound uses the SDK long-connection
57
+ channel MCP tools such as `reply` or `react`, and those tools exist only when
58
+ the Channel provider exposes the capability.
59
+ - **TeamMate is server-hosted.** Scheduling accepts a task and returns a task id
60
+ immediately. Completion is delivered later through the selected Agent Runtime
61
+ provider; if push delivery fails repeatedly, the final result remains
62
+ pull-able from the dispatcher-scoped TeamMate MCP tools.
63
+ - **No webhook surface in Phase 1.** Feishu inbound uses the SDK long-connection
48
64
  WebSocket path. Webhook-only verification/encryption fields are not part of
49
65
  the config schema.
50
66
 
51
- Explicitly **not** in MVP: per-chat threads, durable inbound buffers,
67
+ Explicitly **not** in Phase 1: per-chat threads, durable inbound buffers,
52
68
  automatic assistant-text outbound, HTTP MCP listeners by default, reaction
53
- ledgers, streaming outbound, tm registry isolation, cross-machine
54
- coordination, and a web UI.
69
+ ledgers, streaming outbound, external npm provider loading, multi-channel
70
+ routing, cross-machine coordination, and a web UI.
55
71
 
56
72
  ## Install / build / test
57
73
 
@@ -84,11 +100,14 @@ logs:
84
100
  | `~/.dreamux/config.json` | User-editable config and Feishu bot secrets, created by `dreamux onboard`; edit and restart to apply | the operator |
85
101
  | `~/.dreamux/state/server.json` | Server status snapshot | the server |
86
102
  | `~/.dreamux/state/admin.sock` | Admin Unix socket | the server |
87
- | `~/.dreamux/state/<id>/status.json` | Dispatcher runtime status and Codex thread id | the server |
103
+ | `~/.dreamux/state/<id>/status.json` | Dispatcher runtime status and runtime thread/session id | the server |
88
104
  | `~/.dreamux/state/<id>/access.json` | Dispatcher-local access-gate state | the server |
89
105
  | `~/.dreamux/state/<id>/codex.sock` | Codex app-server Unix socket | the server |
106
+ | `~/.dreamux/state/<id>/claude-code-mcp.json` | Claude Code MCP config generated from Dreamux-owned descriptors | the server |
107
+ | `~/.dreamux/state/<id>/teammate/` | TeamMate task ledger, results, and delivery retry state | the server |
90
108
  | `~/.dreamux/logs/codex-app-server/<id>.log` | Codex app-server stdout/stderr | the server |
91
109
  | `~/.dreamux/logs/feishu-channel/<id>.log` | Feishu channel logs | the server |
110
+ | `~/.dreamux/logs/teammate-mcp/<id>.log` | TeamMate MCP shim diagnostics | the server |
92
111
  | `~/.codex/` | Codex global default home: auth, memory, and config | the operator / Codex |
93
112
  | `<dispatcher cwd>/.codex/skills/dispatcher/SKILL.md` | Dispatcher skill copied by `dreamux onboard`; reported but not deleted by `dreamux uninstall` | dreamux installer |
94
113
 
@@ -110,28 +129,42 @@ Dispatcher declarations live in `config.json`:
110
129
  "id": "flow",
111
130
  "cwd": "<WORKSPACE>",
112
131
  "enabled": true,
113
- "feishu": {
114
- "app_id": "<APP_ID>",
115
- "app_secret": "<APP_SECRET>"
116
- },
117
- "codex": {
118
- "bin": "codex",
119
- "approval_policy": "never",
120
- "sandbox_mode": "workspace-write",
121
- "extra_args": [],
122
- "extra_env": {
123
- "EXAMPLE_FLAG": "1"
124
- },
125
- "initialize_timeout_ms": 10000
132
+ "channels": [
133
+ {
134
+ "id": "primary",
135
+ "provider": "builtin:feishu",
136
+ "config": {
137
+ "app_id": "<APP_ID>",
138
+ "app_secret": "<APP_SECRET>"
139
+ }
140
+ }
141
+ ],
142
+ "runtime": {
143
+ "provider": "builtin:codex",
144
+ "config": {
145
+ "bin": "codex",
146
+ "approval_policy": "never",
147
+ "sandbox_mode": "workspace-write",
148
+ "extra_args": [],
149
+ "extra_env": {
150
+ "EXAMPLE_FLAG": "1"
151
+ },
152
+ "initialize_timeout_ms": 10000
153
+ }
126
154
  }
127
155
  }
128
156
  ]
129
157
  }
130
158
  ```
131
159
 
132
- There is no top-level `codex` block: Codex settings are per-dispatcher under
133
- `dispatchers[].codex`. Every field defaults, so the whole `codex` object — and
134
- any field in it can be omitted:
160
+ `dreamux onboard` currently writes the default `builtin:feishu` +
161
+ `builtin:codex` shape. Operator-owned config is never silently rewritten: old
162
+ `dispatchers[].feishu` / `dispatchers[].codex` shapes fail loudly with rebuild
163
+ guidance, following issue #98.
164
+
165
+ There is no top-level `codex` block. Codex settings are per-dispatcher under
166
+ `dispatchers[].runtime.config` when `runtime.provider` is `builtin:codex`.
167
+ Every field defaults, so any field in it can be omitted:
135
168
 
136
169
  - `bin` → `"codex"` (resolved on `PATH`)
137
170
  - `approval_policy` → `"never"`
@@ -143,7 +176,33 @@ any field in it — can be omitted:
143
176
  Most operators never touch `bin` or `initialize_timeout_ms`. The optional
144
177
  `CODEX_HOST_CODEX_BIN` environment variable is a host-level override of the
145
178
  codex binary across **every** dispatcher (e.g. CI or a non-PATH install); when
146
- unset, each dispatcher's `codex.bin` is used.
179
+ unset, each dispatcher's `runtime.config.bin` is used.
180
+
181
+ Claude Code dispatchers use a different runtime-owned config shape:
182
+
183
+ ```json
184
+ {
185
+ "runtime": {
186
+ "provider": "builtin:claude-code",
187
+ "config": {
188
+ "bin": "claude",
189
+ "model": null,
190
+ "permission_mode": null,
191
+ "extra_args": [],
192
+ "extra_env": {}
193
+ }
194
+ }
195
+ }
196
+ ```
197
+
198
+ Claude Code is headless-per-turn (`claude --print`) and receives Dreamux MCP
199
+ servers through a generated MCP config file. It does not use Codex app-server,
200
+ Codex handshake, or Codex home diagnostics.
201
+
202
+ Provider refs reserved for future external providers look like npm package refs
203
+ or package export refs, for example `npm:@example/dreamux-provider` and
204
+ `npm:@example/dreamux-provider#channel`. They are not runnable in Phase 1:
205
+ dreamux does not install, import, or execute them.
147
206
 
148
207
  Edit and restart `dreamux serve` to apply dispatcher declaration changes.
149
208
  `app_id` values must be unique across all declared dispatchers, including
@@ -188,26 +247,31 @@ observations and warnings in the same file.
188
247
  The codex binary path resolves in this order, highest first:
189
248
 
190
249
  1. `CODEX_HOST_CODEX_BIN` environment variable (optional host-level override).
191
- 2. The dispatcher's `dispatchers[].codex.bin` (default `"codex"`).
250
+ 2. The dispatcher's `dispatchers[].runtime.config.bin` (default `"codex"`).
192
251
 
193
- All other Codex values come from that dispatcher's `dispatchers[].codex` field,
194
- falling back to the built-in defaults in `src/runtime/config.ts`. There is no
195
- global `codex` layer. A dispatcher's `extra_args` are its only source of
196
- `-c key=value` options; dreamux appends its own Feishu MCP `-c` args after them,
197
- relying on Codex's last-write-wins behavior. Per-dispatcher `extra_env` is
198
- merged over the server process environment before spawning that dispatcher
199
- app-server; dreamux still removes `CODEX_HOME` so Codex keeps using its global
200
- default home.
252
+ All other Codex values come from that dispatcher's `runtime.config` field when
253
+ `runtime.provider` is `builtin:codex`, falling back to the built-in defaults in
254
+ `src/runtime/config.ts`. There is no global `codex` layer. A dispatcher's
255
+ `extra_args` are its only source of `-c key=value` options; dreamux appends its
256
+ own Channel provider MCP and TeamMate MCP `-c` args after them, relying on
257
+ Codex's last-write-wins behavior. Per-dispatcher `extra_env` is merged over the
258
+ server process environment before spawning that dispatcher app-server; dreamux
259
+ still removes `CODEX_HOME` so Codex keeps using its global default home.
201
260
 
202
261
  The managed-service unit does **not** pin `CODEX_HOST_CODEX_BIN`; it adds the
203
262
  onboarded codex binary's directory to the unit `PATH` so each dispatcher's
204
- `codex.bin` resolves. Existing units installed before this change may still
205
- carry the env var — there it keeps acting as the override and nothing breaks.
263
+ `runtime.config.bin` resolves. Existing units installed before this change may
264
+ still carry the env var — there it keeps acting as the override and nothing
265
+ breaks.
206
266
 
207
- ## MCP reply flow
267
+ ## MCP surfaces
208
268
 
209
- Each dispatcher injects a Feishu MCP stdio server into its Codex app-server.
210
- The stdio shim does not read Feishu secrets. It forwards outbound tool calls to
269
+ Each dispatcher injects Dreamux-owned MCP stdio servers into its selected Agent
270
+ Runtime provider. Codex receives runtime-specific `mcp_servers.*` arguments;
271
+ Claude Code receives a runtime-owned MCP config file.
272
+
273
+ The Channel provider contributes its channel MCP server. For `builtin:feishu`,
274
+ the stdio shim does not read Feishu secrets. It forwards outbound tool calls to
211
275
  the serve process over the admin socket, and the serve process owns the Feishu
212
276
  client plus process-local received-reaction cleanup state.
213
277
 
@@ -218,18 +282,36 @@ The model-facing tools include:
218
282
 
219
283
  If the model only emits assistant text, nothing is sent to Feishu.
220
284
 
221
- ## MVP verification path
285
+ The Dispatcher Service also contributes a TeamMate MCP server. Its
286
+ dispatcher-facing tools are:
287
+
288
+ - `schedule`: accept a TeamMate task and return immediately with a task id.
289
+ - `list_tasks`: list recent tasks without result bodies.
290
+ - `get_task`: fetch one task including status, result, delivery state, and
291
+ history.
292
+ - `pull_result`: fetch a retained final result, including after push delivery
293
+ failed.
294
+
295
+ There is no dispatcher-facing `complete` tool. Completion ingest is a
296
+ server/admin seam for future worker/operator paths, so a dispatcher model cannot
297
+ fake a TeamMate completion. TeamMate callers marked as `teammate` cannot
298
+ schedule more TeamMates.
299
+
300
+ ## Phase 1 verification path
222
301
 
223
302
  1. `dreamux onboard --dispatcher-id flow --dispatcher-cwd <WORKSPACE> --bot-app-id <APP_ID> --bot-app-secret <APP_SECRET>`
224
303
  2. `dreamux serve` starts dispatcher `flow`.
225
304
  3. Invite the bot to a Feishu group, send a mention that passes the access gate.
226
- 4. Server injects a `<feishu_message>` block into the Codex thread.
227
- 5. Codex calls the Feishu MCP `reply` tool; the reply is delivered to Feishu.
305
+ 4. Server injects a `<feishu_message>` block into the selected runtime.
306
+ 5. The runtime calls the Feishu MCP `reply` tool; the reply is delivered to Feishu.
228
307
  6. Send another accepted message from a different chat in the same trust
229
- domain; it enters the same Codex thread.
230
- 7. Ask the bot to run teammate work through the bundled `tm` wrapper.
308
+ domain; it enters the same dispatcher runtime context.
309
+ 7. Ask the dispatcher to schedule TeamMate work through the `teammate` MCP
310
+ tools; completion delivery later arrives through the runtime-specific
311
+ TeamMate completion path.
231
312
  8. Restart the server and continue chatting; Codex `thread/resume` restores the
232
- thread when possible, but in-flight inbound messages are not durable.
313
+ thread when possible, but in-flight inbound messages are not durable. TeamMate
314
+ final results already recorded in the ledger remain pull-able.
233
315
 
234
316
  ## Testing
235
317
 
@@ -244,12 +326,22 @@ node common/scripts/install-run-rush.js test
244
326
  - `tests/bin-launcher.test.ts` — real launcher and repo-root shim behavior from
245
327
  arbitrary cwd and through symlinks.
246
328
  - `tests/doctor.test.ts` — standalone doctor checks for config, Codex home,
247
- services, and dispatcher workspace skill state.
329
+ services, provider-owned runtime binaries, and dispatcher workspace skill
330
+ state.
331
+ - `tests/agent-runtime-provider.test.ts`, `tests/channel-provider.test.ts`,
332
+ `tests/registry.test.ts`, and `tests/provider-ref.test.ts` — provider ref,
333
+ registry, Channel provider, and Agent Runtime provider coverage.
334
+ - `tests/teammate-ledger.test.ts`, `tests/teammate-delivery.test.ts`, and
335
+ `tests/teammate-mcp.test.ts` — server-hosted TeamMate state, delivery, retry,
336
+ and retrieval coverage.
248
337
  - `tests/codex-live.test.ts` — real Codex app-server compatibility checks,
249
338
  plus the issue #63 mid-turn model gate. Set `DREAMUX_SKIP_LIVE_CODEX=1` only
250
339
  when no Codex binary is available locally. Public CI loud-skips the model
251
340
  gate unless `DREAMUX_RUN_LIVE_MODEL_GATE=1` is set in an environment with
252
341
  usable Codex model auth.
342
+ - `tests/claude-code-live.test.ts` — opt-in Claude Code live contract. Set
343
+ `DREAMUX_RUN_LIVE_CLAUDE_CODE=1` only in an environment with a usable
344
+ `claude` binary and auth.
253
345
 
254
346
  ## License
255
347
 
@@ -7,6 +7,7 @@
7
7
  */
8
8
  import { AdminError } from './protocol.js';
9
9
  import { validateDispatcherId } from '../runtime/dispatcher-id.js';
10
+ import { NestedTeamMateDispatchError, } from '../teammate/ledger.js';
10
11
  export const adminMethods = {
11
12
  'server.status': (server) => ({
12
13
  pid: process.pid,
@@ -101,6 +102,71 @@ export const adminMethods = {
101
102
  const chatId = mustString(params, 'chat_id');
102
103
  return server.listChatBotsFromMcp({ dispatcherId: id, chatId });
103
104
  },
105
+ 'mcp.teammate.schedule': async (server, params) => {
106
+ const id = mustDispatcherId(params);
107
+ mustExistingDispatcher(server, id);
108
+ const callerKind = mustCallerKind(params);
109
+ const title = mustString(params, 'title');
110
+ const prompt = mustString(params, 'prompt');
111
+ const teammateId = optionalString(params, 'teammate_id');
112
+ try {
113
+ return await server.scheduleTeamMateFromMcp({
114
+ dispatcherId: id,
115
+ callerKind,
116
+ title,
117
+ prompt,
118
+ ...(teammateId !== null ? { teammateId } : {}),
119
+ });
120
+ }
121
+ catch (err) {
122
+ if (err instanceof NestedTeamMateDispatchError) {
123
+ throw new AdminError('TEAMMATE_NESTED_DISPATCH_REJECTED', parseMessage(err));
124
+ }
125
+ throw new AdminError('TEAMMATE_SCHEDULE_FAILED', parseMessage(err));
126
+ }
127
+ },
128
+ // Worker/operator completion ingest (issue #110 PR8). Intentionally NOT a
129
+ // dispatcher-facing teammate-mcp tool, so a dispatcher model cannot fake a
130
+ // completion; it is the seam a future worker / operator tool drives.
131
+ 'mcp.teammate.complete': async (server, params) => {
132
+ const id = mustDispatcherId(params);
133
+ mustExistingDispatcher(server, id);
134
+ const taskId = mustString(params, 'task_id');
135
+ const outcome = mustString(params, 'outcome');
136
+ if (outcome !== 'completed' && outcome !== 'failed') {
137
+ throw new AdminError('BAD_REQUEST', "param 'outcome' must be 'completed' or 'failed'");
138
+ }
139
+ const finalText = mustString(params, 'final_text');
140
+ try {
141
+ return await server.reportTeamMateCompletion({
142
+ dispatcherId: id,
143
+ taskId,
144
+ outcome,
145
+ finalText,
146
+ });
147
+ }
148
+ catch (err) {
149
+ throw new AdminError('TEAMMATE_COMPLETE_FAILED', parseMessage(err));
150
+ }
151
+ },
152
+ 'mcp.teammate.list': async (server, params) => {
153
+ const id = mustDispatcherId(params);
154
+ mustExistingDispatcher(server, id);
155
+ return { tasks: await server.listTeamMateTasksFromMcp(id) };
156
+ },
157
+ 'mcp.teammate.get': async (server, params) => {
158
+ const id = mustDispatcherId(params);
159
+ mustExistingDispatcher(server, id);
160
+ const taskId = mustString(params, 'task_id');
161
+ return { task: await server.getTeamMateTaskFromMcp(id, taskId) };
162
+ },
163
+ 'mcp.teammate.pull': async (server, params) => {
164
+ const id = mustDispatcherId(params);
165
+ mustExistingDispatcher(server, id);
166
+ const taskId = optionalString(params, 'task_id');
167
+ const result = await server.pullTeamMateResultFromMcp(id, taskId !== null ? taskId : undefined);
168
+ return { result };
169
+ },
104
170
  };
105
171
  function mustString(params, key) {
106
172
  if (params === undefined || typeof params[key] !== 'string') {
@@ -118,6 +184,12 @@ function mustDispatcherId(params) {
118
184
  throw new AdminError('BAD_REQUEST', message);
119
185
  }
120
186
  }
187
+ function mustCallerKind(params) {
188
+ const callerKind = mustString(params, 'caller_kind');
189
+ if (callerKind === 'dispatcher' || callerKind === 'teammate')
190
+ return callerKind;
191
+ throw new AdminError('BAD_REQUEST', "param 'caller_kind' must be 'dispatcher' or 'teammate'");
192
+ }
121
193
  function optionalString(params, key) {
122
194
  if (params === undefined)
123
195
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"methods.js","sourceRoot":"","sources":["../../src/admin/methods.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"methods.js","sourceRoot":"","sources":["../../src/admin/methods.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import { createBuiltinRegistry, formatProviderRef, ReservedExternalProviderError, } from '../registry/index.js';
2
+ import { createCodexAgentRuntimeProvider } from './codex.js';
3
+ import { createClaudeCodeAgentRuntimeProvider } from './claude-code.js';
4
+ export class UnsupportedAgentRuntimeProviderError extends Error {
5
+ providerRef;
6
+ reason;
7
+ constructor(providerRef, reason) {
8
+ super(`agent runtime provider ${JSON.stringify(providerRef)} is not supported: ${reason}`);
9
+ this.providerRef = providerRef;
10
+ this.reason = reason;
11
+ this.name = 'UnsupportedAgentRuntimeProviderError';
12
+ }
13
+ }
14
+ export class WrongProviderKindError extends Error {
15
+ descriptor;
16
+ constructor(descriptor) {
17
+ super(`provider ${JSON.stringify(formatProviderRef(descriptor.ref))} is a ` +
18
+ `${descriptor.kind} provider, expected agentRuntime`);
19
+ this.descriptor = descriptor;
20
+ this.name = 'WrongProviderKindError';
21
+ }
22
+ }
23
+ export class AgentRuntimeProviderCatalog {
24
+ registry;
25
+ providers = new Map();
26
+ constructor(options) {
27
+ this.registry = options.registry ?? createBuiltinRegistry();
28
+ for (const provider of options.providers) {
29
+ this.providers.set(provider.ref, provider);
30
+ }
31
+ }
32
+ list() {
33
+ return [...this.providers.values()];
34
+ }
35
+ resolve(ref) {
36
+ let descriptor;
37
+ try {
38
+ descriptor = this.registry.resolve(ref);
39
+ }
40
+ catch (err) {
41
+ if (err instanceof ReservedExternalProviderError) {
42
+ throw new UnsupportedAgentRuntimeProviderError(ref, err.message);
43
+ }
44
+ throw err;
45
+ }
46
+ if (descriptor.kind !== 'agentRuntime') {
47
+ throw new WrongProviderKindError(descriptor);
48
+ }
49
+ const canonicalRef = formatProviderRef(descriptor.ref);
50
+ const provider = this.providers.get(canonicalRef);
51
+ if (provider === undefined) {
52
+ throw new UnsupportedAgentRuntimeProviderError(canonicalRef, 'the provider is registered but has no runtime implementation wired in this phase');
53
+ }
54
+ return provider;
55
+ }
56
+ }
57
+ export function createBuiltinAgentRuntimeProviderCatalog(options) {
58
+ return new AgentRuntimeProviderCatalog({
59
+ providers: [
60
+ createCodexAgentRuntimeProvider(options.codex),
61
+ createClaudeCodeAgentRuntimeProvider(options.claudeCode ?? {}),
62
+ ],
63
+ ...(options.registry !== undefined ? { registry: options.registry } : {}),
64
+ });
65
+ }
66
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/agent-runtime/catalog.ts"],"names":[],"mappings":"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"}