@excitedjs/dreamux 0.22.0 → 0.23.0-alpha.gfd00db650f43
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 +32 -26
- package/dist/admin/client.js +37 -15
- package/dist/admin/client.js.map +1 -1
- package/dist/admin/protocol.js +5 -10
- package/dist/admin/protocol.js.map +1 -1
- package/dist/admin/socket.js +64 -13
- package/dist/admin/socket.js.map +1 -1
- package/dist/agent-runtime/capabilities.js +107 -0
- package/dist/agent-runtime/capabilities.js.map +1 -0
- package/dist/agent-runtime/catalog.js +30 -9
- package/dist/agent-runtime/catalog.js.map +1 -1
- package/dist/agent-runtime/external-provider.js +37 -55
- package/dist/agent-runtime/external-provider.js.map +1 -1
- package/dist/agent-runtime/host-context.js +1 -1
- package/dist/agent-runtime/index.js +1 -0
- package/dist/agent-runtime/index.js.map +1 -1
- package/dist/agent-runtime/skill-sources.js +32 -0
- package/dist/agent-runtime/skill-sources.js.map +1 -1
- package/dist/channel/catalog.js +10 -8
- package/dist/channel/catalog.js.map +1 -1
- package/dist/channel/conversation-projection.js +189 -0
- package/dist/channel/conversation-projection.js.map +1 -0
- package/dist/channel/core-port.js +22 -0
- package/dist/channel/core-port.js.map +1 -0
- package/dist/channel/external-channel-provider.js +13 -6
- package/dist/channel/external-channel-provider.js.map +1 -1
- package/dist/cli/commands/dispatcher.js +0 -1
- package/dist/cli/commands/dispatcher.js.map +1 -1
- package/dist/cli/commands/index.js +4 -10
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/mcp.js +35 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/doctor.js +7 -13
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/server-ctl.js +0 -3
- package/dist/cli/server-ctl.js.map +1 -1
- package/dist/cli/server.js +1 -2
- package/dist/cli/server.js.map +1 -1
- package/dist/command/catalog.js +28 -0
- package/dist/command/catalog.js.map +1 -0
- package/dist/command/errors.js +21 -0
- package/dist/command/errors.js.map +1 -0
- package/dist/command/host.js +38 -0
- package/dist/command/host.js.map +1 -0
- package/dist/command/payload.js +102 -0
- package/dist/command/payload.js.map +1 -0
- package/dist/command/port.js +51 -0
- package/dist/command/port.js.map +1 -0
- package/dist/command/registry.js +150 -0
- package/dist/command/registry.js.map +1 -0
- package/dist/command/schema.js +38 -0
- package/dist/command/schema.js.map +1 -0
- package/dist/command/validate.js +347 -0
- package/dist/command/validate.js.map +1 -0
- package/dist/config/config-helpers.js +1 -16
- package/dist/config/config-helpers.js.map +1 -1
- package/dist/config/config.js +15 -15
- package/dist/config/config.js.map +1 -1
- package/dist/mcp/catalog.js +207 -0
- package/dist/mcp/catalog.js.map +1 -0
- package/dist/mcp/server.js +19 -26
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/shim.js +106 -0
- package/dist/mcp/shim.js.map +1 -0
- package/dist/onboard/config-files.js +1 -6
- package/dist/onboard/config-files.js.map +1 -1
- package/dist/onboard/wizard.js +5 -5
- package/dist/onboard/wizard.js.map +1 -1
- package/dist/platform/errors.js +92 -0
- package/dist/platform/errors.js.map +1 -0
- package/dist/platform/json-value.js +178 -0
- package/dist/platform/json-value.js.map +1 -0
- package/dist/platform/paths.js +64 -82
- package/dist/platform/paths.js.map +1 -1
- package/dist/provider-diagnostics.js +2 -2
- package/dist/provider-diagnostics.js.map +1 -1
- package/dist/registry/provider-loader.js +20 -20
- package/dist/registry/provider-loader.js.map +1 -1
- package/dist/server-commands.js +26 -0
- package/dist/server-commands.js.map +1 -0
- package/dist/server.js +46 -42
- package/dist/server.js.map +1 -1
- package/dist/service/agent-entity/activity-errors.js +48 -0
- package/dist/service/agent-entity/activity-errors.js.map +1 -0
- package/dist/service/agent-entity/activity-reader.js +181 -0
- package/dist/service/agent-entity/activity-reader.js.map +1 -0
- package/dist/service/agent-entity/agent-config.js +9 -2
- package/dist/service/agent-entity/agent-config.js.map +1 -1
- package/dist/service/agent-entity/history-query.js +46 -0
- package/dist/service/agent-entity/history-query.js.map +1 -0
- package/dist/service/agent-entity/identity-store.js +248 -241
- package/dist/service/agent-entity/identity-store.js.map +1 -1
- package/dist/service/agent-entity/read-helpers.js +8 -8
- package/dist/service/agent-entity/read-helpers.js.map +1 -1
- package/dist/service/agent-entity/runtime-profile.js +10 -7
- package/dist/service/agent-entity/runtime-profile.js.map +1 -1
- package/dist/service/agent-entity/runtime-state.js +140 -17
- package/dist/service/agent-entity/runtime-state.js.map +1 -1
- package/dist/service/agent-entity/types.js.map +1 -1
- package/dist/service/channel-service/index.js +114 -317
- package/dist/service/channel-service/index.js.map +1 -1
- package/dist/service/channel-service/mcp-delegate.js +106 -0
- package/dist/service/channel-service/mcp-delegate.js.map +1 -0
- package/dist/service/channel-service/mcp-delegates.js +20 -0
- package/dist/service/channel-service/mcp-delegates.js.map +1 -0
- package/dist/service/channel-submission.js +28 -0
- package/dist/service/channel-submission.js.map +1 -0
- package/dist/service/completion-router/index.js +20 -2
- package/dist/service/completion-router/index.js.map +1 -1
- package/dist/service/deduplicate.js +42 -0
- package/dist/service/deduplicate.js.map +1 -0
- package/dist/service/dispatcher-core-events/index.js +45 -18
- package/dist/service/dispatcher-core-events/index.js.map +1 -1
- package/dist/service/dispatcher-core-events/scoped-source.js +8 -11
- package/dist/service/dispatcher-core-events/scoped-source.js.map +1 -1
- package/dist/service/dispatcher-core-events/seal.js +27 -0
- package/dist/service/dispatcher-core-events/seal.js.map +1 -0
- package/dist/service/dispatcher-service/agent.js +7 -3
- package/dist/service/dispatcher-service/agent.js.map +1 -1
- package/dist/service/dispatcher-service/base-prompt.js +3 -3
- package/dist/service/dispatcher-service/base-prompt.js.map +1 -1
- package/dist/service/dispatcher-service/identity.js +3 -7
- package/dist/service/dispatcher-service/identity.js.map +1 -1
- package/dist/service/dispatcher-service/index.js +201 -156
- package/dist/service/dispatcher-service/index.js.map +1 -1
- package/dist/service/dispatcher-service/input-source-lifecycle.js +115 -59
- package/dist/service/dispatcher-service/input-source-lifecycle.js.map +1 -1
- package/dist/service/dispatcher-service/input-source-start-rollback.js +19 -21
- package/dist/service/dispatcher-service/input-source-start-rollback.js.map +1 -1
- package/dist/service/dispatcher-service/mcp-delegates.js +67 -0
- package/dist/service/dispatcher-service/mcp-delegates.js.map +1 -0
- package/dist/service/dispatcher-service/restart-notice.js +6 -2
- package/dist/service/dispatcher-service/restart-notice.js.map +1 -1
- package/dist/service/dispatcher-service/runtime-helpers.js +2 -18
- package/dist/service/dispatcher-service/runtime-helpers.js.map +1 -1
- package/dist/service/dispatcher-service/runtime-status.js +3 -3
- package/dist/service/dispatcher-service/runtime-status.js.map +1 -1
- package/dist/service/dispatcher-service/team-leader-handle.js +2 -2
- package/dist/service/dispatcher-service/team-leader-handle.js.map +1 -1
- package/dist/service/dispatcher-service/team-runtime-stop.js +2 -2
- package/dist/service/dispatcher-service/team-runtime-stop.js.map +1 -1
- package/dist/service/dispatchers/commands.js +72 -0
- package/dist/service/dispatchers/commands.js.map +1 -0
- package/dist/service/dispatchers/errors.js +8 -0
- package/dist/service/dispatchers/errors.js.map +1 -0
- package/dist/service/dispatchers/index.js +30 -11
- package/dist/service/dispatchers/index.js.map +1 -1
- package/dist/service/frozen-snapshot.js +16 -0
- package/dist/service/frozen-snapshot.js.map +1 -0
- package/dist/service/index.js +0 -1
- package/dist/service/index.js.map +1 -1
- package/dist/service/legacy-state.js +17 -5
- package/dist/service/legacy-state.js.map +1 -1
- package/dist/service/mcp/commands.js +94 -0
- package/dist/service/mcp/commands.js.map +1 -0
- package/dist/service/mcp/descriptor.js +51 -0
- package/dist/service/mcp/descriptor.js.map +1 -0
- package/dist/{mcp/task-dispatch-reminder.js → service/mcp/dispatch-reminders.js} +13 -18
- package/dist/service/mcp/dispatch-reminders.js.map +1 -0
- package/dist/service/mcp/leases.js +257 -0
- package/dist/service/mcp/leases.js.map +1 -0
- package/dist/service/mcp/projection.js +68 -0
- package/dist/service/mcp/projection.js.map +1 -0
- package/dist/{mcp/tool-catalog.js → service/mcp/tool-metadata.js} +31 -48
- package/dist/service/mcp/tool-metadata.js.map +1 -0
- package/dist/service/mcp/types.js +2 -0
- package/dist/service/mcp/types.js.map +1 -0
- package/dist/service/name-allocator.js +25 -17
- package/dist/service/name-allocator.js.map +1 -1
- package/dist/service/scheduler/commands.js +120 -0
- package/dist/service/scheduler/commands.js.map +1 -0
- package/dist/service/scheduler/mcp-delegate.js +162 -0
- package/dist/service/scheduler/mcp-delegate.js.map +1 -0
- package/dist/service/scheduler/service.js +46 -165
- package/dist/service/scheduler/service.js.map +1 -1
- package/dist/service/scheduler/store.js +15 -34
- package/dist/service/scheduler/store.js.map +1 -1
- package/dist/service/submission-sources.js +41 -0
- package/dist/service/submission-sources.js.map +1 -0
- package/dist/service/team-collection/commands.js +354 -0
- package/dist/service/team-collection/commands.js.map +1 -0
- package/dist/service/team-collection/create-request.js +73 -0
- package/dist/service/team-collection/create-request.js.map +1 -0
- package/dist/service/team-collection/errors.js +57 -17
- package/dist/service/team-collection/errors.js.map +1 -1
- package/dist/service/team-collection/index.js +214 -354
- package/dist/service/team-collection/index.js.map +1 -1
- package/dist/service/team-collection/mcp-delegate.js +327 -0
- package/dist/service/team-collection/mcp-delegate.js.map +1 -0
- package/dist/service/team-collection/projections.js +33 -0
- package/dist/service/team-collection/projections.js.map +1 -0
- package/dist/service/team-collection/read-model.js +51 -13
- package/dist/service/team-collection/read-model.js.map +1 -1
- package/dist/service/team-collection/roster-reader.js +52 -0
- package/dist/service/team-collection/roster-reader.js.map +1 -0
- package/dist/service/team-collection/runtime-registry.js +268 -113
- package/dist/service/team-collection/runtime-registry.js.map +1 -1
- package/dist/service/team-collection/store.js +228 -202
- package/dist/service/team-collection/store.js.map +1 -1
- package/dist/service/team-collection/types.js +11 -0
- package/dist/service/team-collection/types.js.map +1 -1
- package/dist/service/team-collection/worktree-cleanup.js +45 -0
- package/dist/service/team-collection/worktree-cleanup.js.map +1 -0
- package/dist/service/team-service/closed-fact.js +54 -0
- package/dist/service/team-service/closed-fact.js.map +1 -0
- package/dist/service/team-service/closing.js +280 -0
- package/dist/service/team-service/closing.js.map +1 -0
- package/dist/service/team-service/collaborators.js +82 -0
- package/dist/service/team-service/collaborators.js.map +1 -0
- package/dist/service/team-service/completion-targets.js +72 -0
- package/dist/service/team-service/completion-targets.js.map +1 -0
- package/dist/service/team-service/index.js +360 -286
- package/dist/service/team-service/index.js.map +1 -1
- package/dist/service/team-service/leader-agent.js +105 -30
- package/dist/service/team-service/leader-agent.js.map +1 -1
- package/dist/service/team-service/roster-projection.js +69 -0
- package/dist/service/team-service/roster-projection.js.map +1 -0
- package/dist/service/team-service/team-view.js +0 -3
- package/dist/service/team-service/team-view.js.map +1 -1
- package/dist/service/teammate-collection/commands.js +243 -0
- package/dist/service/teammate-collection/commands.js.map +1 -0
- package/dist/service/teammate-collection/dissolve-members.js +44 -0
- package/dist/service/teammate-collection/dissolve-members.js.map +1 -0
- package/dist/service/teammate-collection/index.js +179 -97
- package/dist/service/teammate-collection/index.js.map +1 -1
- package/dist/service/teammate-collection/mcp-delegate.js +306 -0
- package/dist/service/teammate-collection/mcp-delegate.js.map +1 -0
- package/dist/service/teammate-collection/mcp-tool-descriptors.js +279 -0
- package/dist/service/teammate-collection/mcp-tool-descriptors.js.map +1 -0
- package/dist/service/teammate-service/admission-ledger.js +85 -0
- package/dist/service/teammate-service/admission-ledger.js.map +1 -0
- package/dist/service/teammate-service/index.js +469 -413
- package/dist/service/teammate-service/index.js.map +1 -1
- package/dist/service/teammate-service/runtime-owner.js +236 -71
- package/dist/service/teammate-service/runtime-owner.js.map +1 -1
- package/dist/service/teammate-service/submission.js +68 -0
- package/dist/service/teammate-service/submission.js.map +1 -0
- package/dist/service/teammate-service/turn-coordinator.js +113 -12
- package/dist/service/teammate-service/turn-coordinator.js.map +1 -1
- package/dist/service/teammate-service/turn-recording.js +55 -23
- package/dist/service/teammate-service/turn-recording.js.map +1 -1
- package/dist/service/workflow-service/commands.js +86 -0
- package/dist/service/workflow-service/commands.js.map +1 -0
- package/dist/service/workflow-service/index.js +265 -212
- package/dist/service/workflow-service/index.js.map +1 -1
- package/dist/service/workflow-service/run-terminal.js +18 -4
- package/dist/service/workflow-service/run-terminal.js.map +1 -1
- package/dist/service/workflow-service/run.js +6 -4
- package/dist/service/workflow-service/run.js.map +1 -1
- package/dist/service/worktree/manager.js +62 -23
- package/dist/service/worktree/manager.js.map +1 -1
- package/dist/service/worktree/repo-request.js +87 -0
- package/dist/service/worktree/repo-request.js.map +1 -0
- package/dist/service/worktree/workspaces.js +20 -6
- package/dist/service/worktree/workspaces.js.map +1 -1
- package/package.json +7 -7
- package/skills/dispatcher/dispatcher-workflow/SKILL.md +48 -45
- package/skills/dispatcher/dreamux-maintenance/SKILL.md +2 -2
- package/skills/dispatcher/dreamux-maintenance/references/builtin-feishu.md +20 -0
- package/skills/dispatcher/dreamux-maintenance/references/config-envelope.md +5 -9
- package/skills/dispatcher/dreamux-maintenance/references/feishu-access-v3.md +8 -8
- package/skills/dispatcher/dreamux-maintenance/references/service-lifecycle.md +69 -52
- package/skills/team-leader/team-workflow/SKILL.md +49 -31
- package/dist/admin/methods.js +0 -600
- package/dist/admin/methods.js.map +0 -1
- package/dist/admin/params.js +0 -221
- package/dist/admin/params.js.map +0 -1
- package/dist/admin/team-method-params.js +0 -55
- package/dist/admin/team-method-params.js.map +0 -1
- package/dist/admin/teammate-target.js +0 -21
- package/dist/admin/teammate-target.js.map +0 -1
- package/dist/admin/transcript-errors.js +0 -68
- package/dist/admin/transcript-errors.js.map +0 -1
- package/dist/cli/commands/channel-mcp.js +0 -97
- package/dist/cli/commands/channel-mcp.js.map +0 -1
- package/dist/cli/commands/collaboration-space-mcp.js +0 -25
- package/dist/cli/commands/collaboration-space-mcp.js.map +0 -1
- package/dist/cli/commands/cron-mcp.js +0 -38
- package/dist/cli/commands/cron-mcp.js.map +0 -1
- package/dist/cli/commands/team-mcp.js +0 -42
- package/dist/cli/commands/team-mcp.js.map +0 -1
- package/dist/cli/commands/teammate-mcp.js +0 -49
- package/dist/cli/commands/teammate-mcp.js.map +0 -1
- package/dist/config/collaboration-space-config.js +0 -74
- package/dist/config/collaboration-space-config.js.map +0 -1
- package/dist/mcp/channel-mcp.js +0 -255
- package/dist/mcp/channel-mcp.js.map +0 -1
- package/dist/mcp/collaboration-space-mcp.js +0 -163
- package/dist/mcp/collaboration-space-mcp.js.map +0 -1
- package/dist/mcp/cron-mcp.js +0 -192
- package/dist/mcp/cron-mcp.js.map +0 -1
- package/dist/mcp/task-dispatch-reminder.js.map +0 -1
- package/dist/mcp/team-mcp.js +0 -370
- package/dist/mcp/team-mcp.js.map +0 -1
- package/dist/mcp/teammate-mcp.js +0 -515
- package/dist/mcp/teammate-mcp.js.map +0 -1
- package/dist/mcp/tool-catalog.js.map +0 -1
- package/dist/service/agent-entity/transcript-reader.js +0 -191
- package/dist/service/agent-entity/transcript-reader.js.map +0 -1
- package/dist/service/binding-events.js +0 -125
- package/dist/service/binding-events.js.map +0 -1
- package/dist/service/channel-binding/preflight.js +0 -32
- package/dist/service/channel-binding/preflight.js.map +0 -1
- package/dist/service/channel-binding/store.js +0 -289
- package/dist/service/channel-binding/store.js.map +0 -1
- package/dist/service/channel-service/channel-sessions.js +0 -233
- package/dist/service/channel-service/channel-sessions.js.map +0 -1
- package/dist/service/channel-service/errors.js +0 -16
- package/dist/service/channel-service/errors.js.map +0 -1
- package/dist/service/channel-service/mcp-descriptors.js +0 -63
- package/dist/service/channel-service/mcp-descriptors.js.map +0 -1
- package/dist/service/collaboration-space/default-binding.js +0 -47
- package/dist/service/collaboration-space/default-binding.js.map +0 -1
- package/dist/service/collaboration-space/detach-active-targets.js +0 -50
- package/dist/service/collaboration-space/detach-active-targets.js.map +0 -1
- package/dist/service/collaboration-space/index.js +0 -261
- package/dist/service/collaboration-space/index.js.map +0 -1
- package/dist/service/collaboration-space/mcp-config.js +0 -17
- package/dist/service/collaboration-space/mcp-config.js.map +0 -1
- package/dist/service/collaboration-space/naming.js +0 -37
- package/dist/service/collaboration-space/naming.js.map +0 -1
- package/dist/service/collaboration-space/operation-error.js +0 -9
- package/dist/service/collaboration-space/operation-error.js.map +0 -1
- package/dist/service/collaboration-space/route-reconciliation.js +0 -336
- package/dist/service/collaboration-space/route-reconciliation.js.map +0 -1
- package/dist/service/collaboration-space/store.js +0 -317
- package/dist/service/collaboration-space/store.js.map +0 -1
- package/dist/service/collaboration-space/strict-operations.js +0 -117
- package/dist/service/collaboration-space/strict-operations.js.map +0 -1
- package/dist/service/collaboration-space/support.js +0 -45
- package/dist/service/collaboration-space/support.js.map +0 -1
- package/dist/service/collaboration-space/target-close-lifecycle.js +0 -222
- package/dist/service/collaboration-space/target-close-lifecycle.js.map +0 -1
- package/dist/service/collaboration-space/target-lifecycle.js +0 -462
- package/dist/service/collaboration-space/target-lifecycle.js.map +0 -1
- package/dist/service/collaboration-space/target.js +0 -85
- package/dist/service/collaboration-space/target.js.map +0 -1
- package/dist/service/collaboration-space/types.js +0 -2
- package/dist/service/collaboration-space/types.js.map +0 -1
- package/dist/service/collaboration-space/view.js +0 -66
- package/dist/service/collaboration-space/view.js.map +0 -1
- package/dist/service/dispatcher-service/channel-tool-invocation.js +0 -21
- package/dist/service/dispatcher-service/channel-tool-invocation.js.map +0 -1
- package/dist/service/dispatcher-service/collaboration-routing.js +0 -510
- package/dist/service/dispatcher-service/collaboration-routing.js.map +0 -1
- package/dist/service/dispatcher-service/mcp-descriptors.js +0 -37
- package/dist/service/dispatcher-service/mcp-descriptors.js.map +0 -1
- package/dist/service/dispatcher-service/scoped-channel-routing.js +0 -87
- package/dist/service/dispatcher-service/scoped-channel-routing.js.map +0 -1
- package/dist/service/dispatcher-service/team-channel-coordinator.js +0 -90
- package/dist/service/dispatcher-service/team-channel-coordinator.js.map +0 -1
- package/dist/service/scheduler/mcp-config.js +0 -18
- package/dist/service/scheduler/mcp-config.js.map +0 -1
- package/dist/service/team-collection/dissolve-controller.js +0 -480
- package/dist/service/team-collection/dissolve-controller.js.map +0 -1
- package/dist/service/team-collection/dissolve-lifecycle.js +0 -83
- package/dist/service/team-collection/dissolve-lifecycle.js.map +0 -1
- package/dist/service/team-collection/dissolve-runner.js +0 -321
- package/dist/service/team-collection/dissolve-runner.js.map +0 -1
- package/dist/service/team-collection/mcp-config.js +0 -35
- package/dist/service/team-collection/mcp-config.js.map +0 -1
- package/dist/service/team-service/delivery-result.js +0 -17
- package/dist/service/team-service/delivery-result.js.map +0 -1
- package/dist/service/teammate-collection/mcp-config.js +0 -20
- package/dist/service/teammate-collection/mcp-config.js.map +0 -1
package/README.md
CHANGED
|
@@ -60,23 +60,23 @@ Design background:
|
|
|
60
60
|
behavior. Bundled skills are injected at runtime by role (not written into
|
|
61
61
|
the dispatcher cwd).
|
|
62
62
|
- **Inbound state is in memory.** The server keeps only process-local turn
|
|
63
|
-
queues, message dedupe, coalescing state
|
|
64
|
-
|
|
65
|
-
received reactions behind.
|
|
63
|
+
queues, message dedupe, and coalescing state. Restarting the server drops
|
|
64
|
+
unprocessed inbound messages.
|
|
66
65
|
- **Outbound is MCP reply-only.** Assistant text emitted by a runtime is never
|
|
67
66
|
forwarded to a channel automatically. The model must call provider-specific
|
|
68
67
|
channel MCP tools such as `reply` or `react`, and those tools exist only when
|
|
69
68
|
the Channel provider exposes the capability.
|
|
70
|
-
- **
|
|
71
|
-
|
|
72
|
-
|
|
69
|
+
- **Routing belongs to the Channel.** Which conversation reaches which Team is
|
|
70
|
+
decided and stored by the Channel provider that owns the conversation, and is
|
|
71
|
+
changed through that provider's own MCP tools. Dreamux Core has no binding
|
|
72
|
+
table and no Collaboration Space container; a Channel names a Team when it
|
|
73
|
+
submits, and Core takes it from there.
|
|
73
74
|
- **TeamMate is server-hosted.** `spawn` starts a named, semi-resident TeamMate
|
|
74
75
|
and returns its concrete name; `send` submits follow-up turns and reopens a
|
|
75
|
-
closed TeamMate
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
an identity/lifecycle recovery view.
|
|
76
|
+
closed TeamMate. `last` reads the provider's recent Activity Records — bounded
|
|
77
|
+
and pageable, including a turn that is still running — without starting a
|
|
78
|
+
runtime; `history` remains an identity/lifecycle recovery view. Native
|
|
79
|
+
session identifiers and transcript paths are never published.
|
|
80
80
|
- **No webhook surface in the current contract.** Feishu inbound uses the SDK long-connection
|
|
81
81
|
WebSocket path. Webhook-only verification/encryption fields are not part of
|
|
82
82
|
the config schema.
|
|
@@ -353,8 +353,10 @@ The Channel provider contributes its provider-specific MCP server. For
|
|
|
353
353
|
`builtin:feishu`, the stdio shim does not read Feishu secrets. It serves the
|
|
354
354
|
provider's static `tools/list` metadata and forwards `tools/call` to the serve
|
|
355
355
|
process over the admin socket, where the live channel session handles the tool.
|
|
356
|
-
This
|
|
357
|
-
|
|
356
|
+
This is also the binding surface: `builtin:feishu` exposes `bind_channel`,
|
|
357
|
+
`unbind_channel`, and `list_bindings`, plus its own collaboration-space policy
|
|
358
|
+
tools, because only that provider knows what a chat, a topic, and a parent
|
|
359
|
+
group are.
|
|
358
360
|
|
|
359
361
|
The model-facing channel tools are supplied by the active Channel provider. Use
|
|
360
362
|
the provider's `tools/list` metadata as the current authority; the generic
|
|
@@ -372,17 +374,21 @@ MCP servers. Dispatcher-facing TeamMate tools are:
|
|
|
372
374
|
- `list`, `status`, `history`, `last`, `get_capabilities`: inspect and recover
|
|
373
375
|
TeamMate state by concrete name.
|
|
374
376
|
|
|
375
|
-
`last` accepts `
|
|
376
|
-
pagination `cursor`, and `include_tools`. It returns provider-neutral
|
|
377
|
-
and tool
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
377
|
+
`last` accepts `limit` (default 20, range 1 through 200), an opaque backward
|
|
378
|
+
pagination `cursor`, and `include_tools`. It returns provider-neutral assistant
|
|
379
|
+
messages and tool records oldest first, with `next_cursor` and `truncated`. Tool
|
|
380
|
+
arguments and tool output are never exposed, and it publishes no native IDs or
|
|
381
|
+
filesystem paths.
|
|
382
|
+
|
|
383
|
+
The same server also carries the Workflow tools `workflow_run`,
|
|
384
|
+
`workflow_status`, `workflow_stop`, and `workflow_list`.
|
|
381
385
|
|
|
382
386
|
Dispatcher-facing Team tools are `create`, `send`, `list`, `status`, `history`,
|
|
383
|
-
`dissolve
|
|
384
|
-
`
|
|
385
|
-
|
|
387
|
+
and `dissolve`. A TeamLeader receives only `dissolve`, scoped to its own Team.
|
|
388
|
+
`dissolve` answers with a submission receipt: the Team is stopped and closed
|
|
389
|
+
behind it, and dirty or unmerged work in a managed worktree leaves the Team open
|
|
390
|
+
instead. Cron tools are `cron_create`, `cron_list`, `cron_update`, and
|
|
391
|
+
`cron_delete`.
|
|
386
392
|
|
|
387
393
|
There is no dispatcher-facing `complete` tool. Completion ingest is a
|
|
388
394
|
server/admin seam, so a dispatcher model cannot fake a TeamMate completion.
|
|
@@ -395,7 +401,7 @@ their own config and visible-reply tools.
|
|
|
395
401
|
1. `dreamux onboard --dispatcher-id flow --dispatcher-cwd <WORKSPACE> --agent flow=builtin:codex --agent-config-json flow='{"bin":"codex"}' --channel primary=builtin:feishu --channel-config-json primary='{"app_id":"<APP_ID>","app_secret":"<APP_SECRET>"}'`
|
|
396
402
|
2. `dreamux serve` starts dispatcher `flow`.
|
|
397
403
|
3. Invite the bot to a Feishu group, send a mention that passes the access gate.
|
|
398
|
-
4.
|
|
404
|
+
4. Dreamux renders the inbound into a `<channel source="feishu" …>` block from the neutral pieces the Channel supplied, and hands the runtime final text.
|
|
399
405
|
5. The runtime calls the Feishu channel MCP `reply` tool; the reply is delivered to Feishu.
|
|
400
406
|
6. Send another accepted message from a different chat in the same trust
|
|
401
407
|
domain; it enters the same dispatcher runtime context.
|
|
@@ -413,9 +419,9 @@ node common/scripts/install-run-rush.js test
|
|
|
413
419
|
```
|
|
414
420
|
|
|
415
421
|
- `tests/smoke.test.ts` — fake-Codex dispatcher behavior: access gate,
|
|
416
|
-
per-message turn/start inbound submission, process-local dedupe,
|
|
417
|
-
|
|
418
|
-
|
|
422
|
+
per-message turn/start inbound submission, process-local dedupe, MCP
|
|
423
|
+
reply-only outbound, thread resume, app-server restart behavior, and
|
|
424
|
+
approval fail-fast.
|
|
419
425
|
- `tests/bin-launcher.test.ts` — real launcher and repo-root shim behavior from
|
|
420
426
|
arbitrary cwd and through symlinks.
|
|
421
427
|
- `tests/doctor.test.ts` — standalone doctor checks for config, Codex home,
|
package/dist/admin/client.js
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The admin socket, bound to the shared one-request/one-result JSON invoker.
|
|
3
|
+
*
|
|
4
|
+
* This is the whole of what an out-of-process caller needs: it names a Command,
|
|
5
|
+
* hands it a payload, and gets one JSON answer back. Nothing above it knows a
|
|
6
|
+
* socket is involved, and nothing here knows what any Command means — the same
|
|
7
|
+
* neutral port Core binds in-process for a Channel, bound to a different
|
|
8
|
+
* transport.
|
|
9
|
+
*
|
|
10
|
+
* The two failure kinds stay distinct on purpose. An {@link AdminClientError}
|
|
11
|
+
* means the request reached a Command and that Command refused it; a
|
|
12
|
+
* {@link TransportError} means no answer was ever produced, which is a fact
|
|
13
|
+
* only this side can observe.
|
|
14
|
+
*/
|
|
1
15
|
import { connect } from 'node:net';
|
|
16
|
+
import { errorMessage, TransportError } from '../platform/errors.js';
|
|
2
17
|
import { adminSocketPath as defaultAdminSocketPath } from '../platform/paths.js';
|
|
18
|
+
/** A failure the SERVER reported, carrying the server's own stable code. */
|
|
3
19
|
export class AdminClientError extends Error {
|
|
4
20
|
code;
|
|
5
21
|
constructor(code, message) {
|
|
@@ -10,17 +26,21 @@ export class AdminClientError extends Error {
|
|
|
10
26
|
}
|
|
11
27
|
const DEFAULT_TIMEOUT_MS = 10_000;
|
|
12
28
|
let nextRequestId = 1;
|
|
13
|
-
export function
|
|
29
|
+
export function adminJsonInvoker(options = {}) {
|
|
14
30
|
const socketPath = options.socketPath ?? defaultAdminSocketPath();
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
method,
|
|
18
|
-
|
|
31
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
32
|
+
return {
|
|
33
|
+
invoke(method, params) {
|
|
34
|
+
const request = {
|
|
35
|
+
id: adminRequestId(),
|
|
36
|
+
method,
|
|
37
|
+
// A Command payload is a JSON object; the envelope frames it unchanged.
|
|
38
|
+
params: params,
|
|
39
|
+
};
|
|
40
|
+
// Whatever came back crossed the wire as JSON and parsed as JSON.
|
|
41
|
+
return sendOne(socketPath, request, timeoutMs);
|
|
42
|
+
},
|
|
19
43
|
};
|
|
20
|
-
return sendOne(socketPath, request, options.timeoutMs ?? DEFAULT_TIMEOUT_MS);
|
|
21
|
-
}
|
|
22
|
-
export function sendOneAdminRequest(socketPath, request, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
23
|
-
return sendOne(socketPath, request, timeoutMs);
|
|
24
44
|
}
|
|
25
45
|
function sendOne(socketPath, request, timeoutMs) {
|
|
26
46
|
return new Promise((resolve, reject) => {
|
|
@@ -28,7 +48,7 @@ function sendOne(socketPath, request, timeoutMs) {
|
|
|
28
48
|
let settled = false;
|
|
29
49
|
let sock = null;
|
|
30
50
|
const timer = setTimeout(() => {
|
|
31
|
-
settle(new
|
|
51
|
+
settle(new TransportError(`admin socket request timed out after ${timeoutMs}ms`));
|
|
32
52
|
try {
|
|
33
53
|
sock?.destroy();
|
|
34
54
|
}
|
|
@@ -51,7 +71,7 @@ function sendOne(socketPath, request, timeoutMs) {
|
|
|
51
71
|
sock = connect(socketPath);
|
|
52
72
|
}
|
|
53
73
|
catch (err) {
|
|
54
|
-
settle(err);
|
|
74
|
+
settle(new TransportError(`cannot reach admin socket at ${socketPath} - ${errorMessage(err)}`));
|
|
55
75
|
return;
|
|
56
76
|
}
|
|
57
77
|
sock.setEncoding('utf8');
|
|
@@ -72,7 +92,9 @@ function sendOne(socketPath, request, timeoutMs) {
|
|
|
72
92
|
settle(new AdminClientError(response.error.code, response.error.message));
|
|
73
93
|
}
|
|
74
94
|
catch (err) {
|
|
75
|
-
|
|
95
|
+
// A reply that will not parse never delivered an answer, whatever it
|
|
96
|
+
// was meant to say.
|
|
97
|
+
settle(new TransportError(`admin socket returned a malformed response - ${errorMessage(err)}`));
|
|
76
98
|
}
|
|
77
99
|
sock.end();
|
|
78
100
|
});
|
|
@@ -81,14 +103,14 @@ function sendOne(socketPath, request, timeoutMs) {
|
|
|
81
103
|
return;
|
|
82
104
|
const code = err.code;
|
|
83
105
|
if (code === 'ENOENT' || code === 'ECONNREFUSED') {
|
|
84
|
-
settle(new
|
|
106
|
+
settle(new TransportError(`cannot reach admin socket at ${socketPath} - is the server running?`));
|
|
85
107
|
}
|
|
86
108
|
else {
|
|
87
|
-
settle(err);
|
|
109
|
+
settle(new TransportError(`admin socket connection to ${socketPath} failed - ${errorMessage(err)}`));
|
|
88
110
|
}
|
|
89
111
|
});
|
|
90
112
|
sock.on('close', () => {
|
|
91
|
-
settle(new
|
|
113
|
+
settle(new TransportError('admin socket closed without a response'));
|
|
92
114
|
});
|
|
93
115
|
});
|
|
94
116
|
}
|
package/dist/admin/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/admin/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/admin/client.ts"],"names":[],"mappings":"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"}
|
package/dist/admin/protocol.js
CHANGED
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* NDJSON Unix-socket
|
|
2
|
+
* NDJSON Unix-socket transport framing for Core Commands (issue #2 §"管理接口").
|
|
3
3
|
*
|
|
4
4
|
* One line in / one line out. Permissions on the socket are 0600 (only the
|
|
5
|
-
* owner).
|
|
5
|
+
* owner). `method` is a Core Command name and `params` its payload; the
|
|
6
|
+
* envelope carries no meaning of its own. Command names use dotted lowercase;
|
|
7
|
+
* error codes use SCREAMING_SNAKE_CASE.
|
|
6
8
|
*/
|
|
7
|
-
export
|
|
8
|
-
code;
|
|
9
|
-
constructor(code, message) {
|
|
10
|
-
super(message);
|
|
11
|
-
this.code = code;
|
|
12
|
-
this.name = 'AdminError';
|
|
13
|
-
}
|
|
14
|
-
}
|
|
9
|
+
export {};
|
|
15
10
|
//# sourceMappingURL=protocol.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/admin/protocol.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/admin/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
package/dist/admin/socket.js
CHANGED
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The admin Unix-socket server.
|
|
2
|
+
* The admin Unix-socket server: one adapter over the Core Command registry.
|
|
3
3
|
*
|
|
4
|
-
* One client gets one line-delimited NDJSON stream of requests; we reply
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* One client gets one line-delimited NDJSON stream of requests; we reply with
|
|
5
|
+
* one line per request. Permissions on the socket are 0600 to keep other local
|
|
6
|
+
* users out (issue #2 §"管理接口").
|
|
7
|
+
*
|
|
8
|
+
* The adapter owns transport only. It frames a request, lifts the caller's
|
|
9
|
+
* `dispatcher_id` out of the payload into the Command context, and maps a typed
|
|
10
|
+
* Command failure onto the wire error. It holds no method table, no schema, no
|
|
11
|
+
* payload validation, and no exposure policy — it invokes the same admitted
|
|
12
|
+
* Command port the in-process Channel invoker does, which is where bounding,
|
|
13
|
+
* schema validation, and shutdown admission happen for both.
|
|
7
14
|
*/
|
|
8
15
|
import { createServer } from 'node:net';
|
|
9
16
|
import { chmod, readFile, rm, writeFile } from 'node:fs/promises';
|
|
10
17
|
import { dirname } from 'node:path';
|
|
11
18
|
import { ensureOwnerOnlyDir } from '@excitedjs/dreamux-utils';
|
|
12
|
-
import {
|
|
13
|
-
import { adminMethods } from './methods.js';
|
|
19
|
+
import { DreamuxError, TransportError, ValidationError, } from '../command/errors.js';
|
|
14
20
|
/**
|
|
15
21
|
* Max attempts to reclaim a stale pidfile before yielding to a competitor.
|
|
16
22
|
* Mirrors claudemux's instance-lock policy.
|
|
@@ -235,25 +241,42 @@ async function processLine(server, sock, line) {
|
|
|
235
241
|
}
|
|
236
242
|
}
|
|
237
243
|
catch (err) {
|
|
238
|
-
|
|
239
|
-
|
|
244
|
+
// A line that cannot be framed never reached a Command: this is the one
|
|
245
|
+
// genuine transport failure this adapter owns.
|
|
246
|
+
const error = new TransportError(err instanceof Error ? err.message : String(err));
|
|
247
|
+
write(sock, {
|
|
248
|
+
id: '?',
|
|
249
|
+
ok: false,
|
|
250
|
+
error: { code: error.code, message: error.message },
|
|
251
|
+
});
|
|
240
252
|
return;
|
|
241
253
|
}
|
|
242
|
-
|
|
243
|
-
|
|
254
|
+
let context;
|
|
255
|
+
let payload;
|
|
256
|
+
try {
|
|
257
|
+
({ context, payload } = adminInvocation(req));
|
|
258
|
+
}
|
|
259
|
+
catch (err) {
|
|
260
|
+
const error = err instanceof DreamuxError
|
|
261
|
+
? err
|
|
262
|
+
: new ValidationError(err instanceof Error ? err.message : String(err));
|
|
244
263
|
write(sock, {
|
|
245
264
|
id: req.id,
|
|
246
265
|
ok: false,
|
|
247
|
-
error: { code:
|
|
266
|
+
error: { code: error.code, message: error.message },
|
|
248
267
|
});
|
|
249
268
|
return;
|
|
250
269
|
}
|
|
251
270
|
try {
|
|
252
|
-
|
|
271
|
+
// The same admitted port the in-process Channel invoker uses: shutdown
|
|
272
|
+
// admission is a property of invoking a Command, not of this transport.
|
|
273
|
+
const result = await server.commands.invoke(context, req.method, payload);
|
|
253
274
|
write(sock, { id: req.id, ok: true, result });
|
|
254
275
|
}
|
|
255
276
|
catch (err) {
|
|
256
|
-
|
|
277
|
+
// A Dreamux failure already carries its own stable code; anything else is
|
|
278
|
+
// an unclassified implementation failure and is reported as such.
|
|
279
|
+
if (err instanceof DreamuxError) {
|
|
257
280
|
write(sock, {
|
|
258
281
|
id: req.id,
|
|
259
282
|
ok: false,
|
|
@@ -269,6 +292,34 @@ async function processLine(server, sock, line) {
|
|
|
269
292
|
});
|
|
270
293
|
}
|
|
271
294
|
}
|
|
295
|
+
/**
|
|
296
|
+
* Split one wire request into caller context and Command payload.
|
|
297
|
+
*
|
|
298
|
+
* `dispatcher_id` is addressing, not a domain field: an admin caller states
|
|
299
|
+
* which dispatcher it is talking to, exactly as a Channel session's invoker
|
|
300
|
+
* binds its own. Lifting it here — and removing it from the payload — is what
|
|
301
|
+
* lets every Command input schema stay closed around domain fields alone, while
|
|
302
|
+
* the wire shape CLI and MCP callers already send is unchanged.
|
|
303
|
+
*/
|
|
304
|
+
function adminInvocation(req) {
|
|
305
|
+
const params = req.params;
|
|
306
|
+
if (params !== undefined && (typeof params !== 'object' || Array.isArray(params))) {
|
|
307
|
+
throw new ValidationError("request 'params' must be an object");
|
|
308
|
+
}
|
|
309
|
+
const { dispatcher_id: dispatcherId, ...rest } = params ?? {};
|
|
310
|
+
if (dispatcherId !== undefined && typeof dispatcherId !== 'string') {
|
|
311
|
+
throw new ValidationError("param 'dispatcher_id' must be a string");
|
|
312
|
+
}
|
|
313
|
+
return {
|
|
314
|
+
context: {
|
|
315
|
+
source: 'admin_socket',
|
|
316
|
+
...(dispatcherId !== undefined ? { dispatcher_id: dispatcherId } : {}),
|
|
317
|
+
},
|
|
318
|
+
// The envelope was produced by `JSON.parse`, so its values are JSON by
|
|
319
|
+
// construction; the wire type is only declared loosely.
|
|
320
|
+
payload: rest,
|
|
321
|
+
};
|
|
322
|
+
}
|
|
272
323
|
function write(sock, response) {
|
|
273
324
|
try {
|
|
274
325
|
sock.write(`${JSON.stringify(response)}\n`);
|
package/dist/admin/socket.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/admin/socket.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/admin/socket.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The single Core-owned capability snapshot for an Agent Runtime provider.
|
|
3
|
+
*
|
|
4
|
+
* `getCapabilities()` returns a provider-owned, mutable object, so Core reads it
|
|
5
|
+
* exactly once per loaded implementation and keeps the validated, frozen result.
|
|
6
|
+
* Both consumers — the loader's contract check and the catalog's public
|
|
7
|
+
* projection — go through {@link agentRuntimeCapabilitySnapshot}, so a provider
|
|
8
|
+
* cannot pass a valid object at load and return a different or invalid one when
|
|
9
|
+
* the catalog later asks.
|
|
10
|
+
*/
|
|
11
|
+
import { canonicalJsonValue, isPlainObject, JsonValueError, } from '../platform/json-value.js';
|
|
12
|
+
/** Core's independent bounds on a provider's declared capabilities. */
|
|
13
|
+
const MAX_TAGS = 32;
|
|
14
|
+
const MAX_TAG_LENGTH = 64;
|
|
15
|
+
const PUBLIC_CONFIG_BOUNDS = {
|
|
16
|
+
maxDepth: 4,
|
|
17
|
+
maxEntries: 32,
|
|
18
|
+
maxBytes: 4096,
|
|
19
|
+
};
|
|
20
|
+
export class InvalidAgentRuntimeCapabilitiesError extends Error {
|
|
21
|
+
providerRef;
|
|
22
|
+
detail;
|
|
23
|
+
constructor(providerRef,
|
|
24
|
+
/** The violation alone, without the ref prefix, for callers that add one. */
|
|
25
|
+
detail) {
|
|
26
|
+
super(`agent runtime provider ${JSON.stringify(providerRef)} declared invalid capabilities: ${detail}`);
|
|
27
|
+
this.providerRef = providerRef;
|
|
28
|
+
this.detail = detail;
|
|
29
|
+
this.name = 'InvalidAgentRuntimeCapabilitiesError';
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* One snapshot per implementation object, taken the first time Core reads it.
|
|
34
|
+
*
|
|
35
|
+
* The key is the implementation identity rather than a registration id, so the
|
|
36
|
+
* loader (which has no catalog) and the catalog (which has no loader) share the
|
|
37
|
+
* same entry, and a garbage-collected implementation takes its snapshot with it.
|
|
38
|
+
*/
|
|
39
|
+
const snapshots = new WeakMap();
|
|
40
|
+
/**
|
|
41
|
+
* Return the frozen capability snapshot for `implementation`, taking it on the
|
|
42
|
+
* first call and reusing it forever after.
|
|
43
|
+
*/
|
|
44
|
+
export function agentRuntimeCapabilitySnapshot(implementation, ref) {
|
|
45
|
+
const cached = snapshots.get(implementation);
|
|
46
|
+
if (cached !== undefined)
|
|
47
|
+
return cached;
|
|
48
|
+
let declared;
|
|
49
|
+
try {
|
|
50
|
+
declared = implementation.getCapabilities();
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
throw new InvalidAgentRuntimeCapabilitiesError(ref, `getCapabilities threw: ${error instanceof Error ? error.message : String(error)}`);
|
|
54
|
+
}
|
|
55
|
+
const snapshot = normalizeCapabilities(declared, ref);
|
|
56
|
+
snapshots.set(implementation, snapshot);
|
|
57
|
+
return snapshot;
|
|
58
|
+
}
|
|
59
|
+
function normalizeCapabilities(declared, ref) {
|
|
60
|
+
if (!isPlainObject(declared)) {
|
|
61
|
+
throw new InvalidAgentRuntimeCapabilitiesError(ref, 'getCapabilities must return an object');
|
|
62
|
+
}
|
|
63
|
+
return Object.freeze({
|
|
64
|
+
tags: normalizeTags(declared['tags'], ref),
|
|
65
|
+
publicConfig: normalizePublicConfig(declared['publicConfig'], ref),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
function normalizeTags(value, ref) {
|
|
69
|
+
if (!Array.isArray(value)) {
|
|
70
|
+
throw new InvalidAgentRuntimeCapabilitiesError(ref, 'tags must be an array');
|
|
71
|
+
}
|
|
72
|
+
if (value.length > MAX_TAGS) {
|
|
73
|
+
throw new InvalidAgentRuntimeCapabilitiesError(ref, `tags may hold at most ${MAX_TAGS} entries`);
|
|
74
|
+
}
|
|
75
|
+
const seen = new Set();
|
|
76
|
+
const tags = [];
|
|
77
|
+
for (const entry of value) {
|
|
78
|
+
if (typeof entry !== 'string' ||
|
|
79
|
+
entry.length === 0 ||
|
|
80
|
+
entry.length > MAX_TAG_LENGTH) {
|
|
81
|
+
throw new InvalidAgentRuntimeCapabilitiesError(ref, `each tag must be a non-empty string of at most ${MAX_TAG_LENGTH} characters`);
|
|
82
|
+
}
|
|
83
|
+
// Declaration order is the provider's; duplicates are simply collapsed.
|
|
84
|
+
if (seen.has(entry))
|
|
85
|
+
continue;
|
|
86
|
+
seen.add(entry);
|
|
87
|
+
tags.push(entry);
|
|
88
|
+
}
|
|
89
|
+
return Object.freeze(tags);
|
|
90
|
+
}
|
|
91
|
+
function normalizePublicConfig(value, ref) {
|
|
92
|
+
if (value === undefined)
|
|
93
|
+
return null;
|
|
94
|
+
if (!isPlainObject(value)) {
|
|
95
|
+
throw new InvalidAgentRuntimeCapabilitiesError(ref, 'publicConfig must be an object when present');
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
return canonicalJsonValue(value, PUBLIC_CONFIG_BOUNDS);
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
if (error instanceof JsonValueError) {
|
|
102
|
+
throw new InvalidAgentRuntimeCapabilitiesError(ref, `publicConfig ${error.message}`);
|
|
103
|
+
}
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/agent-runtime/capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { formatProviderRef, ReservedExternalProviderError, } from '../registry/index.js';
|
|
2
|
+
import { agentRuntimeCapabilitySnapshot, } from './capabilities.js';
|
|
2
3
|
export class UnsupportedAgentRuntimeProviderError extends Error {
|
|
3
4
|
providerRef;
|
|
4
5
|
reason;
|
|
@@ -26,7 +27,7 @@ export class AgentRuntimeProviderCatalog {
|
|
|
26
27
|
list() {
|
|
27
28
|
return this.registry
|
|
28
29
|
.listByKind('agentRuntime')
|
|
29
|
-
.map((descriptor) => this.
|
|
30
|
+
.map((descriptor) => this.registeredProviderFor(descriptor))
|
|
30
31
|
.filter((provider) => provider !== null);
|
|
31
32
|
}
|
|
32
33
|
resolve(ref) {
|
|
@@ -44,24 +45,44 @@ export class AgentRuntimeProviderCatalog {
|
|
|
44
45
|
throw new WrongProviderKindError(descriptor);
|
|
45
46
|
}
|
|
46
47
|
const canonicalRef = formatProviderRef(descriptor.ref);
|
|
47
|
-
const provider = this.
|
|
48
|
+
const provider = this.registeredProviderFor(descriptor);
|
|
48
49
|
if (provider === null) {
|
|
49
50
|
throw new UnsupportedAgentRuntimeProviderError(canonicalRef, 'the provider is registered but has no runtime implementation wired in this phase');
|
|
50
51
|
}
|
|
51
52
|
return provider;
|
|
52
53
|
}
|
|
53
|
-
|
|
54
|
-
const implementation = this.registry.getImplementation(descriptor.id);
|
|
55
|
-
|
|
54
|
+
registeredProviderFor(descriptor) {
|
|
55
|
+
const implementation = asAgentRuntimeProvider(this.registry.getImplementation(descriptor.id));
|
|
56
|
+
if (implementation === null)
|
|
57
|
+
return null;
|
|
58
|
+
return {
|
|
59
|
+
descriptor,
|
|
60
|
+
implementation,
|
|
61
|
+
capabilities: this.capabilitiesFor(descriptor, implementation),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The one snapshot for this implementation. The loader already took it while
|
|
66
|
+
* asserting the contract, so this normally returns that exact object; a
|
|
67
|
+
* directly registered implementation (no loader involved) takes it here on
|
|
68
|
+
* first read. Either way `getCapabilities()` is called once per
|
|
69
|
+
* implementation, and the catalog never trusts a second call.
|
|
70
|
+
*/
|
|
71
|
+
capabilitiesFor(descriptor, implementation) {
|
|
72
|
+
return agentRuntimeCapabilitySnapshot(implementation, formatProviderRef(descriptor.ref));
|
|
56
73
|
}
|
|
57
74
|
}
|
|
58
|
-
|
|
75
|
+
/**
|
|
76
|
+
* Structural check for a loaded Agent Runtime implementation. It asserts the
|
|
77
|
+
* facade methods only: registration identity lives on the {@link
|
|
78
|
+
* RegisteredProvider} wrapper, so there is no `ref`/`descriptor` member to test.
|
|
79
|
+
*/
|
|
80
|
+
export function asAgentRuntimeProvider(value) {
|
|
59
81
|
if (typeof value !== 'object' || value === null)
|
|
60
82
|
return null;
|
|
61
83
|
const candidate = value;
|
|
62
|
-
if (typeof candidate.
|
|
63
|
-
candidate.
|
|
64
|
-
typeof candidate.getCapabilities !== 'function' ||
|
|
84
|
+
if (typeof candidate.getCapabilities !== 'function' ||
|
|
85
|
+
typeof candidate.readRecentActivity !== 'function' ||
|
|
65
86
|
typeof candidate.createRuntime !== 'function') {
|
|
66
87
|
return null;
|
|
67
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/agent-runtime/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,6BAA6B,GAG9B,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/agent-runtime/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,6BAA6B,GAG9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,8BAA8B,GAE/B,MAAM,mBAAmB,CAAC;AAkB3B,MAAM,OAAO,oCAAqC,SAAQ,KAAK;IAElD;IACA;IAFX,YACW,WAAmB,EACnB,MAAc;QAEvB,KAAK,CAAC,0BAA0B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,sBAAsB,MAAM,EAAE,CAAC,CAAC;QAHlF,gBAAW,GAAX,WAAW,CAAQ;QACnB,WAAM,GAAN,MAAM,CAAQ;QAGvB,IAAI,CAAC,IAAI,GAAG,sCAAsC,CAAC;IACrD,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC1B;IAArB,YAAqB,UAA8B;QACjD,KAAK,CACH,YAAY,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ;YACnE,GAAG,UAAU,CAAC,IAAI,kCAAkC,CACvD,CAAC;QAJiB,eAAU,GAAV,UAAU,CAAoB;QAKjD,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAMD,MAAM,OAAO,2BAA2B;IACrB,QAAQ,CAAmB;IAE5C,YAAY,OAA2C;QACrD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,QAAQ;aACjB,UAAU,CAAC,cAAc,CAAC;aAC1B,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;aAC3D,MAAM,CACL,CAAC,QAAQ,EAA8C,EAAE,CACvD,QAAQ,KAAK,IAAI,CACpB,CAAC;IACN,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,IAAI,UAA8B,CAAC;QACnC,IAAI,CAAC;YACH,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,6BAA6B,EAAE,CAAC;gBACjD,MAAM,IAAI,oCAAoC,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YACnE,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACvC,MAAM,IAAI,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,YAAY,GAAG,iBAAiB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;QACxD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,MAAM,IAAI,oCAAoC,CAC5C,YAAY,EACZ,kFAAkF,CACnF,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,qBAAqB,CAC3B,UAA8B;QAE9B,MAAM,cAAc,GAAG,sBAAsB,CAC3C,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC,CAC/C,CAAC;QACF,IAAI,cAAc,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACzC,OAAO;YACL,UAAU;YACV,cAAc;YACd,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,cAAc,CAAC;SAC/D,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACK,eAAe,CACrB,UAA8B,EAC9B,cAA6C;QAE7C,OAAO,8BAA8B,CACnC,cAAc,EACd,iBAAiB,CAAC,UAAU,CAAC,GAAG,CAAC,CAClC,CAAC;IACJ,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAc;IAEd,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC7D,MAAM,SAAS,GAAG,KAA+C,CAAC;IAClE,IACE,OAAO,SAAS,CAAC,eAAe,KAAK,UAAU;QAC/C,OAAO,SAAS,CAAC,kBAAkB,KAAK,UAAU;QAClD,OAAO,SAAS,CAAC,aAAa,KAAK,UAAU,EAC7C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAsC,CAAC;AAChD,CAAC"}
|