macro-agent 0.2.4 → 0.2.6
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/LICENSE +1 -1
- package/README.md +30 -56
- package/dist/acp/websocket-server.d.ts +6 -0
- package/dist/acp/websocket-server.d.ts.map +1 -1
- package/dist/acp/websocket-server.js +13 -0
- package/dist/acp/websocket-server.js.map +1 -1
- package/dist/acp/websocket-stream.d.ts +30 -0
- package/dist/acp/websocket-stream.d.ts.map +1 -0
- package/dist/acp/websocket-stream.js +118 -0
- package/dist/acp/websocket-stream.js.map +1 -0
- package/dist/activity/deduplication.d.ts +85 -0
- package/dist/activity/deduplication.d.ts.map +1 -0
- package/dist/activity/deduplication.js +149 -0
- package/dist/activity/deduplication.js.map +1 -0
- package/dist/activity/index.d.ts +16 -0
- package/dist/activity/index.d.ts.map +1 -0
- package/dist/activity/index.js +17 -0
- package/dist/activity/index.js.map +1 -0
- package/dist/activity/relevance.d.ts +81 -0
- package/dist/activity/relevance.d.ts.map +1 -0
- package/dist/activity/relevance.js +161 -0
- package/dist/activity/relevance.js.map +1 -0
- package/dist/activity/types.d.ts +169 -0
- package/dist/activity/types.d.ts.map +1 -0
- package/dist/activity/types.js +33 -0
- package/dist/activity/types.js.map +1 -0
- package/dist/activity/watcher.d.ts +64 -0
- package/dist/activity/watcher.d.ts.map +1 -0
- package/dist/activity/watcher.js +212 -0
- package/dist/activity/watcher.js.map +1 -0
- package/dist/adapters/federation.d.ts +8 -1
- package/dist/adapters/federation.d.ts.map +1 -1
- package/dist/adapters/federation.js +33 -2
- package/dist/adapters/federation.js.map +1 -1
- package/dist/agent/agent-manager-v2.d.ts.map +1 -1
- package/dist/agent/agent-manager-v2.js +189 -67
- package/dist/agent/agent-manager-v2.js.map +1 -1
- package/dist/agent/agent-manager.d.ts +17 -0
- package/dist/agent/agent-manager.d.ts.map +1 -1
- package/dist/agent/agent-manager.js.map +1 -1
- package/dist/agent/types.d.ts +21 -2
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/agent/wake.d.ts +85 -0
- package/dist/agent/wake.d.ts.map +1 -0
- package/dist/agent/wake.js +278 -0
- package/dist/agent/wake.js.map +1 -0
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +41 -25
- package/dist/api/server.js.map +1 -1
- package/dist/api/types.d.ts +6 -0
- package/dist/api/types.d.ts.map +1 -1
- package/dist/auth/server-auth.d.ts +43 -0
- package/dist/auth/server-auth.d.ts.map +1 -0
- package/dist/auth/server-auth.js +80 -0
- package/dist/auth/server-auth.js.map +1 -0
- package/dist/auth/token.d.ts +4 -0
- package/dist/auth/token.d.ts.map +1 -1
- package/dist/auth/token.js +7 -6
- package/dist/auth/token.js.map +1 -1
- package/dist/boot-v2.d.ts +6 -3
- package/dist/boot-v2.d.ts.map +1 -1
- package/dist/boot-v2.js +44 -25
- package/dist/boot-v2.js.map +1 -1
- package/dist/cognitive/macro-agent-backend.d.ts.map +1 -1
- package/dist/cognitive/macro-agent-backend.js +37 -8
- package/dist/cognitive/macro-agent-backend.js.map +1 -1
- package/dist/cognitive/team-lifecycle.d.ts +82 -0
- package/dist/cognitive/team-lifecycle.d.ts.map +1 -0
- package/dist/cognitive/team-lifecycle.js +121 -0
- package/dist/cognitive/team-lifecycle.js.map +1 -0
- package/dist/cognitive/trajectory-extractor.d.ts +25 -0
- package/dist/cognitive/trajectory-extractor.d.ts.map +1 -0
- package/dist/cognitive/trajectory-extractor.js +134 -0
- package/dist/cognitive/trajectory-extractor.js.map +1 -0
- package/dist/cognitive/types.d.ts +24 -0
- package/dist/cognitive/types.d.ts.map +1 -1
- package/dist/control/control-server.d.ts.map +1 -1
- package/dist/control/control-server.js +10 -0
- package/dist/control/control-server.js.map +1 -1
- package/dist/dispatch/mail-inbound-consumer.d.ts.map +1 -1
- package/dist/dispatch/mail-inbound-consumer.js +43 -10
- package/dist/dispatch/mail-inbound-consumer.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/lifecycle/handlers/generic.d.ts +27 -0
- package/dist/lifecycle/handlers/generic.d.ts.map +1 -0
- package/dist/lifecycle/handlers/generic.js +56 -0
- package/dist/lifecycle/handlers/generic.js.map +1 -0
- package/dist/lifecycle/handlers/index.d.ts +51 -0
- package/dist/lifecycle/handlers/index.d.ts.map +1 -0
- package/dist/lifecycle/handlers/index.js +110 -0
- package/dist/lifecycle/handlers/index.js.map +1 -0
- package/dist/lifecycle/handlers/integrator.d.ts +81 -0
- package/dist/lifecycle/handlers/integrator.d.ts.map +1 -0
- package/dist/lifecycle/handlers/integrator.js +451 -0
- package/dist/lifecycle/handlers/integrator.js.map +1 -0
- package/dist/lifecycle/handlers/monitor.d.ts +29 -0
- package/dist/lifecycle/handlers/monitor.d.ts.map +1 -0
- package/dist/lifecycle/handlers/monitor.js +79 -0
- package/dist/lifecycle/handlers/monitor.js.map +1 -0
- package/dist/lifecycle/handlers/worker.d.ts +56 -0
- package/dist/lifecycle/handlers/worker.d.ts.map +1 -0
- package/dist/lifecycle/handlers/worker.js +381 -0
- package/dist/lifecycle/handlers/worker.js.map +1 -0
- package/dist/lifecycle/handlers-v2.d.ts +0 -2
- package/dist/lifecycle/handlers-v2.d.ts.map +1 -1
- package/dist/lifecycle/handlers-v2.js +4 -55
- package/dist/lifecycle/handlers-v2.js.map +1 -1
- package/dist/mail/conversation-map.d.ts +33 -0
- package/dist/mail/conversation-map.d.ts.map +1 -0
- package/dist/mail/conversation-map.js +61 -0
- package/dist/mail/conversation-map.js.map +1 -0
- package/dist/mail/index.d.ts +11 -0
- package/dist/mail/index.d.ts.map +1 -0
- package/dist/mail/index.js +11 -0
- package/dist/mail/index.js.map +1 -0
- package/dist/mail/mail-service.d.ts +85 -0
- package/dist/mail/mail-service.d.ts.map +1 -0
- package/dist/mail/mail-service.js +121 -0
- package/dist/mail/mail-service.js.map +1 -0
- package/dist/mail/stores/eventstore-conversation-store.d.ts +40 -0
- package/dist/mail/stores/eventstore-conversation-store.d.ts.map +1 -0
- package/dist/mail/stores/eventstore-conversation-store.js +131 -0
- package/dist/mail/stores/eventstore-conversation-store.js.map +1 -0
- package/dist/mail/stores/eventstore-participant-store.d.ts +43 -0
- package/dist/mail/stores/eventstore-participant-store.d.ts.map +1 -0
- package/dist/mail/stores/eventstore-participant-store.js +145 -0
- package/dist/mail/stores/eventstore-participant-store.js.map +1 -0
- package/dist/mail/stores/eventstore-thread-store.d.ts +46 -0
- package/dist/mail/stores/eventstore-thread-store.d.ts.map +1 -0
- package/dist/mail/stores/eventstore-thread-store.js +118 -0
- package/dist/mail/stores/eventstore-thread-store.js.map +1 -0
- package/dist/mail/stores/eventstore-turn-store.d.ts +47 -0
- package/dist/mail/stores/eventstore-turn-store.d.ts.map +1 -0
- package/dist/mail/stores/eventstore-turn-store.js +153 -0
- package/dist/mail/stores/eventstore-turn-store.js.map +1 -0
- package/dist/mail/stores/index.d.ts +12 -0
- package/dist/mail/stores/index.d.ts.map +1 -0
- package/dist/mail/stores/index.js +12 -0
- package/dist/mail/stores/index.js.map +1 -0
- package/dist/mail/stores/types.d.ts +146 -0
- package/dist/mail/stores/types.d.ts.map +1 -0
- package/dist/mail/stores/types.js +13 -0
- package/dist/mail/stores/types.js.map +1 -0
- package/dist/mail/turn-recorder.d.ts +30 -0
- package/dist/mail/turn-recorder.d.ts.map +1 -0
- package/dist/mail/turn-recorder.js +98 -0
- package/dist/mail/turn-recorder.js.map +1 -0
- package/dist/map/adapter/acp-over-map.d.ts +115 -0
- package/dist/map/adapter/acp-over-map.d.ts.map +1 -0
- package/dist/map/adapter/acp-over-map.js +1024 -0
- package/dist/map/adapter/acp-over-map.js.map +1 -0
- package/dist/map/adapter/connection-manager.d.ts +150 -0
- package/dist/map/adapter/connection-manager.d.ts.map +1 -0
- package/dist/map/adapter/connection-manager.js +207 -0
- package/dist/map/adapter/connection-manager.js.map +1 -0
- package/dist/map/adapter/event-log.d.ts +87 -0
- package/dist/map/adapter/event-log.d.ts.map +1 -0
- package/dist/map/adapter/event-log.js +122 -0
- package/dist/map/adapter/event-log.js.map +1 -0
- package/dist/map/adapter/event-translator.d.ts +85 -0
- package/dist/map/adapter/event-translator.d.ts.map +1 -0
- package/dist/map/adapter/event-translator.js +295 -0
- package/dist/map/adapter/event-translator.js.map +1 -0
- package/dist/map/adapter/extensions/agent-detection.d.ts +49 -0
- package/dist/map/adapter/extensions/agent-detection.d.ts.map +1 -0
- package/dist/map/adapter/extensions/agent-detection.js +91 -0
- package/dist/map/adapter/extensions/agent-detection.js.map +1 -0
- package/dist/map/adapter/extensions/agent-lifecycle.d.ts +82 -0
- package/dist/map/adapter/extensions/agent-lifecycle.d.ts.map +1 -0
- package/dist/map/adapter/extensions/agent-lifecycle.js +164 -0
- package/dist/map/adapter/extensions/agent-lifecycle.js.map +1 -0
- package/dist/map/adapter/extensions/cognitive.d.ts +27 -0
- package/dist/map/adapter/extensions/cognitive.d.ts.map +1 -0
- package/dist/map/adapter/extensions/cognitive.js +158 -0
- package/dist/map/adapter/extensions/cognitive.js.map +1 -0
- package/dist/map/adapter/extensions/index.d.ts +95 -0
- package/dist/map/adapter/extensions/index.d.ts.map +1 -0
- package/dist/map/adapter/extensions/index.js +228 -0
- package/dist/map/adapter/extensions/index.js.map +1 -0
- package/dist/map/adapter/extensions/mcp-bridge.d.ts +57 -0
- package/dist/map/adapter/extensions/mcp-bridge.d.ts.map +1 -0
- package/dist/map/adapter/extensions/mcp-bridge.js +745 -0
- package/dist/map/adapter/extensions/mcp-bridge.js.map +1 -0
- package/dist/map/adapter/extensions/resume.d.ts +47 -0
- package/dist/map/adapter/extensions/resume.d.ts.map +1 -0
- package/dist/map/adapter/extensions/resume.js +59 -0
- package/dist/map/adapter/extensions/resume.js.map +1 -0
- package/dist/map/adapter/extensions/streams.d.ts +95 -0
- package/dist/map/adapter/extensions/streams.d.ts.map +1 -0
- package/dist/map/adapter/extensions/streams.js +515 -0
- package/dist/map/adapter/extensions/streams.js.map +1 -0
- package/dist/map/adapter/extensions/task.d.ts +40 -0
- package/dist/map/adapter/extensions/task.d.ts.map +1 -0
- package/dist/map/adapter/extensions/task.js +197 -0
- package/dist/map/adapter/extensions/task.js.map +1 -0
- package/dist/map/adapter/extensions/update-metadata.d.ts +29 -0
- package/dist/map/adapter/extensions/update-metadata.d.ts.map +1 -0
- package/dist/map/adapter/extensions/update-metadata.js +67 -0
- package/dist/map/adapter/extensions/update-metadata.js.map +1 -0
- package/dist/map/adapter/extensions/wake.d.ts +60 -0
- package/dist/map/adapter/extensions/wake.d.ts.map +1 -0
- package/dist/map/adapter/extensions/wake.js +144 -0
- package/dist/map/adapter/extensions/wake.js.map +1 -0
- package/dist/map/adapter/extensions/workspace-files.d.ts +42 -0
- package/dist/map/adapter/extensions/workspace-files.d.ts.map +1 -0
- package/dist/map/adapter/extensions/workspace-files.js +338 -0
- package/dist/map/adapter/extensions/workspace-files.js.map +1 -0
- package/dist/map/adapter/extensions/workspace.d.ts +57 -0
- package/dist/map/adapter/extensions/workspace.d.ts.map +1 -0
- package/dist/map/adapter/extensions/workspace.js +81 -0
- package/dist/map/adapter/extensions/workspace.js.map +1 -0
- package/dist/map/adapter/index.d.ts +20 -0
- package/dist/map/adapter/index.d.ts.map +1 -0
- package/dist/map/adapter/index.js +40 -0
- package/dist/map/adapter/index.js.map +1 -0
- package/dist/map/adapter/interface.d.ts +450 -0
- package/dist/map/adapter/interface.d.ts.map +1 -0
- package/dist/map/adapter/interface.js +24 -0
- package/dist/map/adapter/interface.js.map +1 -0
- package/dist/map/adapter/mail-handler-adapter.d.ts +27 -0
- package/dist/map/adapter/mail-handler-adapter.d.ts.map +1 -0
- package/dist/map/adapter/mail-handler-adapter.js +292 -0
- package/dist/map/adapter/mail-handler-adapter.js.map +1 -0
- package/dist/map/adapter/map-adapter.d.ts +200 -0
- package/dist/map/adapter/map-adapter.d.ts.map +1 -0
- package/dist/map/adapter/map-adapter.js +1199 -0
- package/dist/map/adapter/map-adapter.js.map +1 -0
- package/dist/map/adapter/rpc-handler.d.ts +263 -0
- package/dist/map/adapter/rpc-handler.d.ts.map +1 -0
- package/dist/map/adapter/rpc-handler.js +365 -0
- package/dist/map/adapter/rpc-handler.js.map +1 -0
- package/dist/map/adapter/subscription-manager.d.ts +174 -0
- package/dist/map/adapter/subscription-manager.d.ts.map +1 -0
- package/dist/map/adapter/subscription-manager.js +248 -0
- package/dist/map/adapter/subscription-manager.js.map +1 -0
- package/dist/map/adapter/types.d.ts +194 -0
- package/dist/map/adapter/types.d.ts.map +1 -0
- package/dist/map/adapter/types.js +27 -0
- package/dist/map/adapter/types.js.map +1 -0
- package/dist/map/adapter/websocket-integration.d.ts +113 -0
- package/dist/map/adapter/websocket-integration.d.ts.map +1 -0
- package/dist/map/adapter/websocket-integration.js +134 -0
- package/dist/map/adapter/websocket-integration.js.map +1 -0
- package/dist/map/cascade-action-handler.d.ts.map +1 -1
- package/dist/map/cascade-action-handler.js +19 -5
- package/dist/map/cascade-action-handler.js.map +1 -1
- package/dist/map/federation/envelope.d.ts +98 -0
- package/dist/map/federation/envelope.d.ts.map +1 -0
- package/dist/map/federation/envelope.js +160 -0
- package/dist/map/federation/envelope.js.map +1 -0
- package/dist/map/federation/federation-handler.d.ts +50 -0
- package/dist/map/federation/federation-handler.d.ts.map +1 -0
- package/dist/map/federation/federation-handler.js +306 -0
- package/dist/map/federation/federation-handler.js.map +1 -0
- package/dist/map/federation/index.d.ts +14 -0
- package/dist/map/federation/index.d.ts.map +1 -0
- package/dist/map/federation/index.js +13 -0
- package/dist/map/federation/index.js.map +1 -0
- package/dist/map/federation/types.d.ts +239 -0
- package/dist/map/federation/types.d.ts.map +1 -0
- package/dist/map/federation/types.js +23 -0
- package/dist/map/federation/types.js.map +1 -0
- package/dist/map/mail-bridge.d.ts +7 -0
- package/dist/map/mail-bridge.d.ts.map +1 -1
- package/dist/map/mail-bridge.js +39 -9
- package/dist/map/mail-bridge.js.map +1 -1
- package/dist/map/server.d.ts.map +1 -1
- package/dist/map/server.js +17 -2
- package/dist/map/server.js.map +1 -1
- package/dist/map/types.d.ts +6 -0
- package/dist/map/types.d.ts.map +1 -1
- package/dist/mcp/map-client.d.ts +39 -0
- package/dist/mcp/map-client.d.ts.map +1 -0
- package/dist/mcp/map-client.js +129 -0
- package/dist/mcp/map-client.js.map +1 -0
- package/dist/mcp/mcp-server.d.ts +72 -0
- package/dist/mcp/mcp-server.d.ts.map +1 -0
- package/dist/mcp/mcp-server.js +1027 -0
- package/dist/mcp/mcp-server.js.map +1 -0
- package/dist/mcp/tools/claim_task.d.ts +35 -0
- package/dist/mcp/tools/claim_task.d.ts.map +1 -0
- package/dist/mcp/tools/claim_task.js +58 -0
- package/dist/mcp/tools/claim_task.js.map +1 -0
- package/dist/mcp/tools/done-v2.d.ts +0 -1
- package/dist/mcp/tools/done-v2.d.ts.map +1 -1
- package/dist/mcp/tools/done-v2.js +0 -1
- package/dist/mcp/tools/done-v2.js.map +1 -1
- package/dist/mcp/tools/done.d.ts +102 -0
- package/dist/mcp/tools/done.d.ts.map +1 -0
- package/dist/mcp/tools/done.js +253 -0
- package/dist/mcp/tools/done.js.map +1 -0
- package/dist/mcp/tools/inject_context.d.ts +61 -0
- package/dist/mcp/tools/inject_context.d.ts.map +1 -0
- package/dist/mcp/tools/inject_context.js +123 -0
- package/dist/mcp/tools/inject_context.js.map +1 -0
- package/dist/mcp/tools/list_claimable_tasks.d.ts +38 -0
- package/dist/mcp/tools/list_claimable_tasks.d.ts.map +1 -0
- package/dist/mcp/tools/list_claimable_tasks.js +63 -0
- package/dist/mcp/tools/list_claimable_tasks.js.map +1 -0
- package/dist/mcp/tools/unclaim_task.d.ts +31 -0
- package/dist/mcp/tools/unclaim_task.d.ts.map +1 -0
- package/dist/mcp/tools/unclaim_task.js +47 -0
- package/dist/mcp/tools/unclaim_task.js.map +1 -0
- package/dist/mcp/tools/wait_for_activity.d.ts +60 -0
- package/dist/mcp/tools/wait_for_activity.d.ts.map +1 -0
- package/dist/mcp/tools/wait_for_activity.js +135 -0
- package/dist/mcp/tools/wait_for_activity.js.map +1 -0
- package/dist/monitor/health-check-service.d.ts +143 -0
- package/dist/monitor/health-check-service.d.ts.map +1 -0
- package/dist/monitor/health-check-service.js +240 -0
- package/dist/monitor/health-check-service.js.map +1 -0
- package/dist/monitor/index.d.ts +14 -0
- package/dist/monitor/index.d.ts.map +1 -0
- package/dist/monitor/index.js +14 -0
- package/dist/monitor/index.js.map +1 -0
- package/dist/monitor/stall-detector.d.ts +109 -0
- package/dist/monitor/stall-detector.d.ts.map +1 -0
- package/dist/monitor/stall-detector.js +152 -0
- package/dist/monitor/stall-detector.js.map +1 -0
- package/dist/peer/capability-manager.d.ts +56 -0
- package/dist/peer/capability-manager.d.ts.map +1 -0
- package/dist/peer/capability-manager.js +186 -0
- package/dist/peer/capability-manager.js.map +1 -0
- package/dist/peer/encapsulation-manager.d.ts +190 -0
- package/dist/peer/encapsulation-manager.d.ts.map +1 -0
- package/dist/peer/encapsulation-manager.js +486 -0
- package/dist/peer/encapsulation-manager.js.map +1 -0
- package/dist/peer/federation-manager.d.ts +223 -0
- package/dist/peer/federation-manager.d.ts.map +1 -0
- package/dist/peer/federation-manager.js +528 -0
- package/dist/peer/federation-manager.js.map +1 -0
- package/dist/peer/hierarchy-errors.d.ts +208 -0
- package/dist/peer/hierarchy-errors.d.ts.map +1 -0
- package/dist/peer/hierarchy-errors.js +268 -0
- package/dist/peer/hierarchy-errors.js.map +1 -0
- package/dist/peer/hierarchy-protocol.d.ts +159 -0
- package/dist/peer/hierarchy-protocol.d.ts.map +1 -0
- package/dist/peer/hierarchy-protocol.js +142 -0
- package/dist/peer/hierarchy-protocol.js.map +1 -0
- package/dist/peer/index.d.ts +15 -0
- package/dist/peer/index.d.ts.map +1 -0
- package/dist/peer/index.js +15 -0
- package/dist/peer/index.js.map +1 -0
- package/dist/peer/peer-manager.d.ts +99 -0
- package/dist/peer/peer-manager.d.ts.map +1 -0
- package/dist/peer/peer-manager.js +333 -0
- package/dist/peer/peer-manager.js.map +1 -0
- package/dist/peer/task-delegation.d.ts +189 -0
- package/dist/peer/task-delegation.d.ts.map +1 -0
- package/dist/peer/task-delegation.js +303 -0
- package/dist/peer/task-delegation.js.map +1 -0
- package/dist/peer/transports/index.d.ts +8 -0
- package/dist/peer/transports/index.d.ts.map +1 -0
- package/dist/peer/transports/index.js +8 -0
- package/dist/peer/transports/index.js.map +1 -0
- package/dist/peer/transports/local-transport.d.ts +56 -0
- package/dist/peer/transports/local-transport.d.ts.map +1 -0
- package/dist/peer/transports/local-transport.js +263 -0
- package/dist/peer/transports/local-transport.js.map +1 -0
- package/dist/peer/transports/websocket-transport.d.ts +86 -0
- package/dist/peer/transports/websocket-transport.d.ts.map +1 -0
- package/dist/peer/transports/websocket-transport.js +338 -0
- package/dist/peer/transports/websocket-transport.js.map +1 -0
- package/dist/peer/types.d.ts +268 -0
- package/dist/peer/types.d.ts.map +1 -0
- package/dist/peer/types.js +36 -0
- package/dist/peer/types.js.map +1 -0
- package/dist/router/address-resolver.d.ts +102 -0
- package/dist/router/address-resolver.d.ts.map +1 -0
- package/dist/router/address-resolver.js +198 -0
- package/dist/router/address-resolver.js.map +1 -0
- package/dist/router/broadcast.d.ts +53 -0
- package/dist/router/broadcast.d.ts.map +1 -0
- package/dist/router/broadcast.js +75 -0
- package/dist/router/broadcast.js.map +1 -0
- package/dist/router/channels.d.ts +148 -0
- package/dist/router/channels.d.ts.map +1 -0
- package/dist/router/channels.js +126 -0
- package/dist/router/channels.js.map +1 -0
- package/dist/router/index.d.ts +21 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +18 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/message-router.d.ts +197 -0
- package/dist/router/message-router.d.ts.map +1 -0
- package/dist/router/message-router.js +903 -0
- package/dist/router/message-router.js.map +1 -0
- package/dist/router/message-types.d.ts +183 -0
- package/dist/router/message-types.d.ts.map +1 -0
- package/dist/router/message-types.js +79 -0
- package/dist/router/message-types.js.map +1 -0
- package/dist/router/role-resolver.d.ts +67 -0
- package/dist/router/role-resolver.d.ts.map +1 -0
- package/dist/router/role-resolver.js +106 -0
- package/dist/router/role-resolver.js.map +1 -0
- package/dist/router/signals.d.ts +253 -0
- package/dist/router/signals.d.ts.map +1 -0
- package/dist/router/signals.js +53 -0
- package/dist/router/signals.js.map +1 -0
- package/dist/router/types.d.ts +191 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +34 -0
- package/dist/router/types.js.map +1 -0
- package/dist/router/wake.d.ts +111 -0
- package/dist/router/wake.d.ts.map +1 -0
- package/dist/router/wake.js +180 -0
- package/dist/router/wake.js.map +1 -0
- package/dist/server/combined-server.d.ts +95 -0
- package/dist/server/combined-server.d.ts.map +1 -0
- package/dist/server/combined-server.js +335 -0
- package/dist/server/combined-server.js.map +1 -0
- package/dist/steering/index.d.ts +11 -0
- package/dist/steering/index.d.ts.map +1 -0
- package/dist/steering/index.js +11 -0
- package/dist/steering/index.js.map +1 -0
- package/dist/steering/inject.d.ts +39 -0
- package/dist/steering/inject.d.ts.map +1 -0
- package/dist/steering/inject.js +197 -0
- package/dist/steering/inject.js.map +1 -0
- package/dist/steering/types.d.ts +100 -0
- package/dist/steering/types.d.ts.map +1 -0
- package/dist/steering/types.js +11 -0
- package/dist/steering/types.js.map +1 -0
- package/dist/store/backends/index.d.ts +11 -0
- package/dist/store/backends/index.d.ts.map +1 -0
- package/dist/store/backends/index.js +15 -0
- package/dist/store/backends/index.js.map +1 -0
- package/dist/store/backends/json-backend.d.ts +23 -0
- package/dist/store/backends/json-backend.d.ts.map +1 -0
- package/dist/store/backends/json-backend.js +220 -0
- package/dist/store/backends/json-backend.js.map +1 -0
- package/dist/store/backends/memory-backend.d.ts +12 -0
- package/dist/store/backends/memory-backend.d.ts.map +1 -0
- package/dist/store/backends/memory-backend.js +205 -0
- package/dist/store/backends/memory-backend.js.map +1 -0
- package/dist/store/backends/sqlite-backend.d.ts +27 -0
- package/dist/store/backends/sqlite-backend.d.ts.map +1 -0
- package/dist/store/backends/sqlite-backend.js +231 -0
- package/dist/store/backends/sqlite-backend.js.map +1 -0
- package/dist/store/backends/tinybase-backend.d.ts +22 -0
- package/dist/store/backends/tinybase-backend.d.ts.map +1 -0
- package/dist/store/backends/tinybase-backend.js +203 -0
- package/dist/store/backends/tinybase-backend.js.map +1 -0
- package/dist/store/backends/types.d.ts +175 -0
- package/dist/store/backends/types.d.ts.map +1 -0
- package/dist/store/backends/types.js +28 -0
- package/dist/store/backends/types.js.map +1 -0
- package/dist/store/event-store.d.ts +128 -0
- package/dist/store/event-store.d.ts.map +1 -0
- package/dist/store/event-store.js +1751 -0
- package/dist/store/event-store.js.map +1 -0
- package/dist/store/instance.d.ts +290 -0
- package/dist/store/instance.d.ts.map +1 -0
- package/dist/store/instance.js +363 -0
- package/dist/store/instance.js.map +1 -0
- package/dist/store/migrations.d.ts +41 -0
- package/dist/store/migrations.d.ts.map +1 -0
- package/dist/store/migrations.js +79 -0
- package/dist/store/migrations.js.map +1 -0
- package/dist/store/test-utils.d.ts +63 -0
- package/dist/store/test-utils.d.ts.map +1 -0
- package/dist/store/test-utils.js +63 -0
- package/dist/store/test-utils.js.map +1 -0
- package/dist/store/types/config.d.ts +16 -0
- package/dist/store/types/config.d.ts.map +1 -0
- package/dist/store/types/config.js +8 -0
- package/dist/store/types/config.js.map +1 -0
- package/dist/store/types/conversations.d.ts +91 -0
- package/dist/store/types/conversations.d.ts.map +1 -0
- package/dist/store/types/conversations.js +8 -0
- package/dist/store/types/conversations.js.map +1 -0
- package/dist/store/types/sessions.d.ts +44 -0
- package/dist/store/types/sessions.d.ts.map +1 -0
- package/dist/store/types/sessions.js +9 -0
- package/dist/store/types/sessions.js.map +1 -0
- package/dist/store/types.d.ts +115 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/store/types.js +6 -0
- package/dist/store/types.js.map +1 -0
- package/dist/task/backend/index.d.ts +93 -0
- package/dist/task/backend/index.d.ts.map +1 -0
- package/dist/task/backend/index.js +178 -0
- package/dist/task/backend/index.js.map +1 -0
- package/dist/task/backend/memory.d.ts +70 -0
- package/dist/task/backend/memory.d.ts.map +1 -0
- package/dist/task/backend/memory.js +621 -0
- package/dist/task/backend/memory.js.map +1 -0
- package/dist/task/backend/opentasks/backend.d.ts +140 -0
- package/dist/task/backend/opentasks/backend.d.ts.map +1 -0
- package/dist/task/backend/opentasks/backend.js +1023 -0
- package/dist/task/backend/opentasks/backend.js.map +1 -0
- package/dist/task/backend/opentasks/client.d.ts +337 -0
- package/dist/task/backend/opentasks/client.d.ts.map +1 -0
- package/dist/task/backend/opentasks/client.js +225 -0
- package/dist/task/backend/opentasks/client.js.map +1 -0
- package/dist/task/backend/opentasks/daemon-manager.d.ts +89 -0
- package/dist/task/backend/opentasks/daemon-manager.d.ts.map +1 -0
- package/dist/task/backend/opentasks/daemon-manager.js +195 -0
- package/dist/task/backend/opentasks/daemon-manager.js.map +1 -0
- package/dist/task/backend/opentasks/index.d.ts +21 -0
- package/dist/task/backend/opentasks/index.d.ts.map +1 -0
- package/dist/task/backend/opentasks/index.js +21 -0
- package/dist/task/backend/opentasks/index.js.map +1 -0
- package/dist/task/backend/opentasks/mapping.d.ts +48 -0
- package/dist/task/backend/opentasks/mapping.d.ts.map +1 -0
- package/dist/task/backend/opentasks/mapping.js +77 -0
- package/dist/task/backend/opentasks/mapping.js.map +1 -0
- package/dist/task/backend/sudocode/__tests__/integration/test-utils.d.ts +54 -0
- package/dist/task/backend/sudocode/__tests__/integration/test-utils.d.ts.map +1 -0
- package/dist/task/backend/sudocode/__tests__/integration/test-utils.js +88 -0
- package/dist/task/backend/sudocode/__tests__/integration/test-utils.js.map +1 -0
- package/dist/task/backend/sudocode/backend.d.ts +155 -0
- package/dist/task/backend/sudocode/backend.d.ts.map +1 -0
- package/dist/task/backend/sudocode/backend.js +942 -0
- package/dist/task/backend/sudocode/backend.js.map +1 -0
- package/dist/task/backend/sudocode/client.d.ts +303 -0
- package/dist/task/backend/sudocode/client.d.ts.map +1 -0
- package/dist/task/backend/sudocode/client.js +101 -0
- package/dist/task/backend/sudocode/client.js.map +1 -0
- package/dist/task/backend/sudocode/index.d.ts +19 -0
- package/dist/task/backend/sudocode/index.d.ts.map +1 -0
- package/dist/task/backend/sudocode/index.js +17 -0
- package/dist/task/backend/sudocode/index.js.map +1 -0
- package/dist/task/backend/sudocode/mapping.d.ts +51 -0
- package/dist/task/backend/sudocode/mapping.d.ts.map +1 -0
- package/dist/task/backend/sudocode/mapping.js +86 -0
- package/dist/task/backend/sudocode/mapping.js.map +1 -0
- package/dist/task/backend/sudocode/server-client.d.ts +56 -0
- package/dist/task/backend/sudocode/server-client.d.ts.map +1 -0
- package/dist/task/backend/sudocode/server-client.js +367 -0
- package/dist/task/backend/sudocode/server-client.js.map +1 -0
- package/dist/task/backend/sudocode/standalone-client.d.ts +91 -0
- package/dist/task/backend/sudocode/standalone-client.d.ts.map +1 -0
- package/dist/task/backend/sudocode/standalone-client.js +476 -0
- package/dist/task/backend/sudocode/standalone-client.js.map +1 -0
- package/dist/task/backend/sudocode/sync-policy.d.ts +166 -0
- package/dist/task/backend/sudocode/sync-policy.d.ts.map +1 -0
- package/dist/task/backend/sudocode/sync-policy.js +221 -0
- package/dist/task/backend/sudocode/sync-policy.js.map +1 -0
- package/dist/task/backend/sudocode/tools.d.ts +87 -0
- package/dist/task/backend/sudocode/tools.d.ts.map +1 -0
- package/dist/task/backend/sudocode/tools.js +743 -0
- package/dist/task/backend/sudocode/tools.js.map +1 -0
- package/dist/task/backend/tool-provider.d.ts +56 -0
- package/dist/task/backend/tool-provider.d.ts.map +1 -0
- package/dist/task/backend/tool-provider.js +424 -0
- package/dist/task/backend/tool-provider.js.map +1 -0
- package/dist/task/backend/types.d.ts +297 -0
- package/dist/task/backend/types.d.ts.map +1 -0
- package/dist/task/backend/types.js +27 -0
- package/dist/task/backend/types.js.map +1 -0
- package/dist/task/backend/unified-tool-provider.d.ts +57 -0
- package/dist/task/backend/unified-tool-provider.d.ts.map +1 -0
- package/dist/task/backend/unified-tool-provider.js +623 -0
- package/dist/task/backend/unified-tool-provider.js.map +1 -0
- package/dist/task/index.d.ts +7 -0
- package/dist/task/index.d.ts.map +1 -0
- package/dist/task/index.js +7 -0
- package/dist/task/index.js.map +1 -0
- package/dist/task/retry-policy.d.ts +89 -0
- package/dist/task/retry-policy.d.ts.map +1 -0
- package/dist/task/retry-policy.js +160 -0
- package/dist/task/retry-policy.js.map +1 -0
- package/dist/task/task-manager.d.ts +70 -0
- package/dist/task/task-manager.d.ts.map +1 -0
- package/dist/task/task-manager.js +319 -0
- package/dist/task/task-manager.js.map +1 -0
- package/dist/task/types.d.ts +72 -0
- package/dist/task/types.d.ts.map +1 -0
- package/dist/task/types.js +33 -0
- package/dist/task/types.js.map +1 -0
- package/dist/teams/team-loader.d.ts +2 -1
- package/dist/teams/team-loader.d.ts.map +1 -1
- package/dist/teams/team-loader.js +2 -1
- package/dist/teams/team-loader.js.map +1 -1
- package/dist/teams/team-manager.d.ts +101 -0
- package/dist/teams/team-manager.d.ts.map +1 -0
- package/dist/teams/team-manager.js +260 -0
- package/dist/teams/team-manager.js.map +1 -0
- package/dist/teams/team-runtime-v2.d.ts +0 -3
- package/dist/teams/team-runtime-v2.d.ts.map +1 -1
- package/dist/teams/team-runtime-v2.js +31 -93
- package/dist/teams/team-runtime-v2.js.map +1 -1
- package/dist/teams/team-runtime.d.ts +245 -0
- package/dist/teams/team-runtime.d.ts.map +1 -0
- package/dist/teams/team-runtime.js +1023 -0
- package/dist/teams/team-runtime.js.map +1 -0
- package/dist/trigger/router/index.d.ts +11 -0
- package/dist/trigger/router/index.d.ts.map +1 -0
- package/dist/trigger/router/index.js +10 -0
- package/dist/trigger/router/index.js.map +1 -0
- package/dist/trigger/router/strategies/ai-router-strategy.d.ts +34 -0
- package/dist/trigger/router/strategies/ai-router-strategy.d.ts.map +1 -0
- package/dist/trigger/router/strategies/ai-router-strategy.js +359 -0
- package/dist/trigger/router/strategies/ai-router-strategy.js.map +1 -0
- package/dist/trigger/router/strategies/direct-strategy.d.ts +32 -0
- package/dist/trigger/router/strategies/direct-strategy.d.ts.map +1 -0
- package/dist/trigger/router/strategies/direct-strategy.js +119 -0
- package/dist/trigger/router/strategies/direct-strategy.js.map +1 -0
- package/dist/trigger/router/strategies/index.d.ts +11 -0
- package/dist/trigger/router/strategies/index.d.ts.map +1 -0
- package/dist/trigger/router/strategies/index.js +11 -0
- package/dist/trigger/router/strategies/index.js.map +1 -0
- package/dist/trigger/router/strategies/role-strategy.d.ts +39 -0
- package/dist/trigger/router/strategies/role-strategy.d.ts.map +1 -0
- package/dist/trigger/router/strategies/role-strategy.js +207 -0
- package/dist/trigger/router/strategies/role-strategy.js.map +1 -0
- package/dist/trigger/router/trigger-router.d.ts +54 -0
- package/dist/trigger/router/trigger-router.d.ts.map +1 -0
- package/dist/trigger/router/trigger-router.js +362 -0
- package/dist/trigger/router/trigger-router.js.map +1 -0
- package/dist/trigger/router/types.d.ts +225 -0
- package/dist/trigger/router/types.d.ts.map +1 -0
- package/dist/trigger/router/types.js +10 -0
- package/dist/trigger/router/types.js.map +1 -0
- package/dist/trigger/sources/cron/cron-service.d.ts.map +1 -1
- package/dist/trigger/sources/cron/cron-service.js +6 -3
- package/dist/trigger/sources/cron/cron-service.js.map +1 -1
- package/dist/trigger/trigger-system.d.ts +77 -0
- package/dist/trigger/trigger-system.d.ts.map +1 -0
- package/dist/trigger/trigger-system.js +84 -0
- package/dist/trigger/trigger-system.js.map +1 -0
- package/dist/util/git-safety.d.ts +33 -0
- package/dist/util/git-safety.d.ts.map +1 -0
- package/dist/util/git-safety.js +94 -0
- package/dist/util/git-safety.js.map +1 -0
- package/dist/workspace/index.d.ts +0 -1
- package/dist/workspace/index.d.ts.map +1 -1
- package/dist/workspace/index.js +0 -2
- package/dist/workspace/index.js.map +1 -1
- package/dist/workspace/landing/direct-push.d.ts.map +1 -1
- package/dist/workspace/landing/direct-push.js +22 -7
- package/dist/workspace/landing/direct-push.js.map +1 -1
- package/dist/workspace/landing/queue-to-branch.d.ts.map +1 -1
- package/dist/workspace/landing/queue-to-branch.js +1 -3
- package/dist/workspace/landing/queue-to-branch.js.map +1 -1
- package/dist/workspace/types.d.ts +0 -13
- package/dist/workspace/types.d.ts.map +1 -1
- package/dist/workspace/workspace-manager.d.ts +0 -11
- package/dist/workspace/workspace-manager.d.ts.map +1 -1
- package/dist/workspace/workspace-manager.js +0 -30
- package/dist/workspace/workspace-manager.js.map +1 -1
- package/package.json +28 -2
- package/templates/teams/self-driving/prompts/grinder.md +1 -0
- package/templates/teams/self-driving/prompts/judge.md +1 -0
- package/templates/teams/self-driving/prompts/planner.md +1 -0
- package/templates/teams/self-driving/roles/grinder.yaml +15 -0
- package/templates/teams/self-driving/roles/judge.yaml +10 -0
- package/templates/teams/self-driving/roles/planner.yaml +16 -0
- package/.claude/commands/openspec/apply.md +0 -23
- package/.claude/commands/openspec/archive.md +0 -27
- package/.claude/commands/openspec/proposal.md +0 -28
- package/.claude/settings.json +0 -133
- package/.gitattributes +0 -3
- package/.opentasks/config.json +0 -9
- package/.opentasks/graph.jsonl +0 -0
- package/.sessionlog/settings.json +0 -4
- package/.sudocode/issues.jsonl +0 -183
- package/.sudocode/specs.jsonl +0 -56
- package/AGENTS.md +0 -18
- package/CLAUDE.md +0 -923
- package/docs/architecture.md +0 -508
- package/docs/configuration.md +0 -323
- package/docs/conflict-recovery.md +0 -472
- package/docs/design/task-dispatcher.md +0 -880
- package/docs/design-subsystem-extraction.md +0 -627
- package/docs/git-cascade-integration-gaps.md +0 -678
- package/docs/implementation-details.md +0 -1127
- package/docs/implementation-summary.md +0 -448
- package/docs/lifecycle-events-design.md +0 -111
- package/docs/mail-integration.md +0 -608
- package/docs/openhive-capability-summary.md +0 -415
- package/docs/openhive-integration.md +0 -415
- package/docs/plan-self-driving-support.md +0 -433
- package/docs/roadmap-v2-gaps.md +0 -216
- package/docs/spec-self-driving-support.md +0 -462
- package/docs/team-templates.md +0 -860
- package/docs/teams.md +0 -306
- package/docs/trigger-system-design.md +0 -333
- package/docs/troubleshooting.md +0 -489
- package/docs/workspace-interfaces.md +0 -731
- package/docs/workspace-redesign-plan.md +0 -302
- package/examples/distributed-peer-communication.ts +0 -202
- package/examples/local-peer-communication.ts +0 -165
- package/index.js +0 -2
- package/mvp_docs/agent-execution-system.md +0 -347
- package/mvp_docs/agent-interface.md +0 -580
- package/mvp_docs/data-structures.md +0 -701
- package/mvp_docs/dynamic-meta-orchestration.md +0 -116
- package/mvp_docs/multi-agent-interaction-design.md +0 -779
- package/mvp_docs/mvp-implementation-plan.md +0 -1148
- package/renovate.json5 +0 -6
- package/scripts/test-acp-integration.ts +0 -422
- package/src/__tests__/boot-v2.test.ts +0 -631
- package/src/__tests__/e2e/acp-over-map-live.e2e.test.ts +0 -496
- package/src/__tests__/e2e/acp-over-map.e2e.test.ts +0 -457
- package/src/__tests__/e2e/agent-lifecycle.e2e.test.ts +0 -770
- package/src/__tests__/e2e/auto-sync.e2e.test.ts +0 -257
- package/src/__tests__/e2e/bootstrap.e2e.test.ts +0 -319
- package/src/__tests__/e2e/cascade-rebase.e2e.test.ts +0 -254
- package/src/__tests__/e2e/cc-swarm-bridge.e2e.test.ts +0 -253
- package/src/__tests__/e2e/cli-run.e2e.test.ts +0 -167
- package/src/__tests__/e2e/cognitive-workspace.e2e.test.ts +0 -282
- package/src/__tests__/e2e/dispatch-coordination.e2e.test.ts +0 -495
- package/src/__tests__/e2e/dispatch-live.e2e.test.ts +0 -564
- package/src/__tests__/e2e/dispatch-opentasks.e2e.test.ts +0 -496
- package/src/__tests__/e2e/dispatch-phase2-live.e2e.test.ts +0 -456
- package/src/__tests__/e2e/dispatch-phase2.e2e.test.ts +0 -386
- package/src/__tests__/e2e/dispatch.e2e.test.ts +0 -376
- package/src/__tests__/e2e/done-scenarios.e2e.test.ts +0 -322
- package/src/__tests__/e2e/live-agent.e2e.test.ts +0 -1330
- package/src/__tests__/e2e/map-server.e2e.test.ts +0 -128
- package/src/__tests__/e2e/map-sidecar.e2e.test.ts +0 -139
- package/src/__tests__/e2e/opentasks-integration.e2e.test.ts +0 -280
- package/src/__tests__/e2e/pull-mode.e2e.test.ts +0 -632
- package/src/__tests__/e2e/resume-continue.e2e.test.ts +0 -312
- package/src/__tests__/e2e/self-driving-v3.e2e.test.ts +0 -197
- package/src/__tests__/e2e/spawn-resolver.e2e.test.ts +0 -200
- package/src/__tests__/e2e/swarmkit-integration.e2e.test.ts +0 -562
- package/src/__tests__/e2e/swarmkit-live.e2e.test.ts +0 -1049
- package/src/__tests__/e2e/trajectory-tracking.e2e.test.ts +0 -258
- package/src/__tests__/e2e/trigger-wake.e2e.test.ts +0 -257
- package/src/__tests__/e2e/workspace-lifecycle.e2e.test.ts +0 -383
- package/src/__tests__/e2e/workspace-v3.e2e.test.ts +0 -413
- package/src/acp/__tests__/claude-code-replay.test.ts +0 -225
- package/src/acp/__tests__/macro-agent.test.ts +0 -387
- package/src/acp/__tests__/session-mapper.test.ts +0 -152
- package/src/acp/__tests__/websocket-server.test.ts +0 -194
- package/src/acp/claude-code-replay.ts +0 -208
- package/src/acp/index.ts +0 -32
- package/src/acp/macro-agent.ts +0 -995
- package/src/acp/map-bridge.ts +0 -193
- package/src/acp/session-mapper.ts +0 -116
- package/src/acp/types.ts +0 -99
- package/src/acp/websocket-server.ts +0 -213
- package/src/adapters/__tests__/federation.test.ts +0 -256
- package/src/adapters/__tests__/inbox-adapter.test.ts +0 -316
- package/src/adapters/__tests__/tasks-adapter.test.ts +0 -270
- package/src/adapters/federation.ts +0 -185
- package/src/adapters/inbox-adapter.ts +0 -292
- package/src/adapters/inbox-client-adapter.ts +0 -173
- package/src/adapters/index.ts +0 -44
- package/src/adapters/opentasks-daemon.ts +0 -252
- package/src/adapters/tasks-adapter.ts +0 -330
- package/src/adapters/types.ts +0 -286
- package/src/agent/__tests__/agent-manager-topology.test.ts +0 -73
- package/src/agent/__tests__/agent-manager-v2.permission-interception.test.ts +0 -296
- package/src/agent/__tests__/agent-manager-v2.permissions.test.ts +0 -233
- package/src/agent/__tests__/agent-manager-v2.test.ts +0 -614
- package/src/agent/__tests__/agent-store.test.ts +0 -465
- package/src/agent/__tests__/task-ref-resolution.test.ts +0 -231
- package/src/agent/agent-manager-v2.ts +0 -2021
- package/src/agent/agent-manager.ts +0 -386
- package/src/agent/agent-store.ts +0 -409
- package/src/agent/index.ts +0 -7
- package/src/agent/prompts/coordinator-signals.ts +0 -115
- package/src/agent/prompts/index.ts +0 -7
- package/src/agent/system-prompt.ts +0 -298
- package/src/agent/types.ts +0 -459
- package/src/agent-detection/__tests__/command-builder.test.ts +0 -336
- package/src/agent-detection/__tests__/detector.test.ts +0 -768
- package/src/agent-detection/__tests__/registry.test.ts +0 -254
- package/src/agent-detection/command-builder.ts +0 -90
- package/src/agent-detection/detector.ts +0 -307
- package/src/agent-detection/index.ts +0 -36
- package/src/agent-detection/registry.ts +0 -200
- package/src/agent-detection/types.ts +0 -184
- package/src/api/__tests__/server.test.ts +0 -292
- package/src/api/index.ts +0 -8
- package/src/api/server.ts +0 -380
- package/src/api/types.ts +0 -39
- package/src/auth/__tests__/token.test.ts +0 -100
- package/src/auth/index.ts +0 -1
- package/src/auth/token.ts +0 -82
- package/src/boot-v2.ts +0 -1343
- package/src/cli/__tests__/stable-instance-id.test.ts +0 -57
- package/src/cli/acp.ts +0 -101
- package/src/cli/inbox-mcp-proxy.ts +0 -56
- package/src/cli/index.ts +0 -566
- package/src/cli/mcp.ts +0 -305
- package/src/cli/parse-args.ts +0 -54
- package/src/cli/stable-instance-id.ts +0 -14
- package/src/cognitive/__tests__/macro-agent-backend.test.ts +0 -520
- package/src/cognitive/__tests__/session-converter.test.ts +0 -423
- package/src/cognitive/__tests__/workspace-handler.test.ts +0 -221
- package/src/cognitive/analyst-role.ts +0 -59
- package/src/cognitive/index.ts +0 -49
- package/src/cognitive/macro-agent-backend.ts +0 -370
- package/src/cognitive/session-converter.ts +0 -151
- package/src/cognitive/types.ts +0 -163
- package/src/cognitive/workspace-handler.ts +0 -163
- package/src/config/index.ts +0 -9
- package/src/config/project-config.ts +0 -294
- package/src/control/__tests__/control-resilience.test.ts +0 -251
- package/src/control/__tests__/control-socket.test.ts +0 -240
- package/src/control/control-client.ts +0 -337
- package/src/control/control-server.ts +0 -298
- package/src/control/index.ts +0 -17
- package/src/control/types.ts +0 -95
- package/src/dispatch/CLAUDE.md +0 -129
- package/src/dispatch/__tests__/loadout-translation.test.ts +0 -141
- package/src/dispatch/__tests__/mail-inbound-consumer.integration.test.ts +0 -519
- package/src/dispatch/__tests__/mail-inbound-consumer.test.ts +0 -800
- package/src/dispatch/__tests__/mail-inbound-reuse-consumer.test.ts +0 -575
- package/src/dispatch/__tests__/permission-evaluator.test.ts +0 -196
- package/src/dispatch/__tests__/permission-overlay.test.ts +0 -56
- package/src/dispatch/__tests__/permissions-handler.test.ts +0 -168
- package/src/dispatch/__tests__/spawn-agent-handler.test.ts +0 -282
- package/src/dispatch/loadout-translation.ts +0 -138
- package/src/dispatch/mail-inbound-consumer.ts +0 -560
- package/src/dispatch/mail-inbound-reuse-consumer.ts +0 -479
- package/src/dispatch/permission-evaluator.ts +0 -191
- package/src/dispatch/permission-overlay.ts +0 -89
- package/src/dispatch/permissions-handler.ts +0 -112
- package/src/dispatch/spawn-agent-handler.ts +0 -160
- package/src/index.ts +0 -115
- package/src/integrations/__tests__/context-builder.test.ts +0 -218
- package/src/integrations/__tests__/sessionlog.test.ts +0 -498
- package/src/integrations/__tests__/skilltree.test.ts +0 -136
- package/src/integrations/context-builder.ts +0 -280
- package/src/integrations/sessionlog.ts +0 -194
- package/src/integrations/skilltree.ts +0 -184
- package/src/lifecycle/__tests__/cascade-consolidation.test.ts +0 -240
- package/src/lifecycle/__tests__/handlers-v2.test.ts +0 -565
- package/src/lifecycle/cascade.ts +0 -335
- package/src/lifecycle/cleanup.ts +0 -373
- package/src/lifecycle/handlers-v2.ts +0 -508
- package/src/lifecycle/index.ts +0 -76
- package/src/lifecycle/types.ts +0 -260
- package/src/map/__tests__/cascade-bridge.test.ts +0 -229
- package/src/map/__tests__/cascade-diff-server.test.ts +0 -434
- package/src/map/__tests__/emit-event.test.ts +0 -71
- package/src/map/__tests__/lifecycle-bridge.test.ts +0 -430
- package/src/map/__tests__/mail-bridge.test.ts +0 -284
- package/src/map/__tests__/permission-forwarding.test.ts +0 -143
- package/src/map/__tests__/sidecar-diff-install-smoke.test.ts +0 -90
- package/src/map/__tests__/sidecar-integration.test.ts +0 -190
- package/src/map/__tests__/task-bridge.test.ts +0 -153
- package/src/map/__tests__/trajectory-reporter.test.ts +0 -173
- package/src/map/acp-bridge.ts +0 -293
- package/src/map/cascade-action-handler.ts +0 -205
- package/src/map/cascade-bridge.ts +0 -339
- package/src/map/cascade-diff-server.ts +0 -404
- package/src/map/cc-swarm-hooks.ts +0 -242
- package/src/map/coordination-handler.ts +0 -232
- package/src/map/index.ts +0 -18
- package/src/map/lifecycle-bridge.ts +0 -236
- package/src/map/mail-bridge.ts +0 -215
- package/src/map/repo-workspace.ts +0 -82
- package/src/map/server.ts +0 -758
- package/src/map/sidecar.ts +0 -826
- package/src/map/task-bridge.ts +0 -89
- package/src/map/trajectory-reporter.ts +0 -124
- package/src/map/types.ts +0 -304
- package/src/mcp/__tests__/mcp-server-v2.test.ts +0 -236
- package/src/mcp/index.ts +0 -6
- package/src/mcp/mcp-server-v2.ts +0 -485
- package/src/mcp/tools/done-v2.ts +0 -213
- package/src/mcp/types.ts +0 -432
- package/src/metrics/__tests__/metrics.test.ts +0 -205
- package/src/metrics/index.ts +0 -13
- package/src/metrics/metrics.ts +0 -151
- package/src/metrics/types.ts +0 -63
- package/src/roles/__tests__/config-loader.test.ts +0 -540
- package/src/roles/builtin/coordinator.ts +0 -75
- package/src/roles/builtin/generic.ts +0 -39
- package/src/roles/builtin/index.ts +0 -51
- package/src/roles/builtin/integrator.ts +0 -62
- package/src/roles/builtin/monitor.ts +0 -65
- package/src/roles/builtin/worker.ts +0 -134
- package/src/roles/capabilities.ts +0 -257
- package/src/roles/config-loader.ts +0 -405
- package/src/roles/index.ts +0 -141
- package/src/roles/registry.ts +0 -713
- package/src/roles/types.ts +0 -344
- package/src/store/index.ts +0 -8
- package/src/store/types/agents.ts +0 -69
- package/src/store/types/events.ts +0 -91
- package/src/store/types/index.ts +0 -9
- package/src/store/types/messages.ts +0 -32
- package/src/store/types/primitives.ts +0 -9
- package/src/store/types/tasks.ts +0 -124
- package/src/teams/__tests__/team-manager-v2.test.ts +0 -425
- package/src/teams/__tests__/team-runtime-v2.test.ts +0 -402
- package/src/teams/index.ts +0 -29
- package/src/teams/seed-defaults.ts +0 -83
- package/src/teams/team-loader.ts +0 -476
- package/src/teams/team-manager-v2.ts +0 -343
- package/src/teams/team-runtime-v2.ts +0 -920
- package/src/teams/types.ts +0 -276
- package/src/trigger/__tests__/cron-service.test.ts +0 -548
- package/src/trigger/__tests__/scheduler.test.ts +0 -371
- package/src/trigger/__tests__/system-event-queue.test.ts +0 -147
- package/src/trigger/__tests__/trigger-system-v2.test.ts +0 -257
- package/src/trigger/__tests__/wake-manager.test.ts +0 -356
- package/src/trigger/__tests__/webhook-handler.test.ts +0 -567
- package/src/trigger/index.ts +0 -110
- package/src/trigger/queue/index.ts +0 -21
- package/src/trigger/queue/system-event-queue.ts +0 -232
- package/src/trigger/queue/types.ts +0 -149
- package/src/trigger/sources/cron/cron-service.ts +0 -499
- package/src/trigger/sources/cron/index.ts +0 -41
- package/src/trigger/sources/cron/scheduler.ts +0 -344
- package/src/trigger/sources/cron/types.ts +0 -333
- package/src/trigger/sources/index.ts +0 -10
- package/src/trigger/sources/webhook/index.ts +0 -25
- package/src/trigger/sources/webhook/types.ts +0 -205
- package/src/trigger/sources/webhook/webhook-handler.ts +0 -410
- package/src/trigger/strategies/ai-router.ts +0 -170
- package/src/trigger/trigger-system-v2.ts +0 -536
- package/src/trigger/types.ts +0 -228
- package/src/trigger/wake/index.ts +0 -22
- package/src/trigger/wake/types.ts +0 -162
- package/src/trigger/wake/wake-manager.ts +0 -390
- package/src/workspace/__tests__/git-cascade-adapter.test.ts +0 -563
- package/src/workspace/__tests__/land-dispatch.test.ts +0 -214
- package/src/workspace/__tests__/self-driving-yaml.test.ts +0 -122
- package/src/workspace/__tests__/shared-worktree-refcount.test.ts +0 -154
- package/src/workspace/__tests__/standalone-mode.test.ts +0 -118
- package/src/workspace/__tests__/workspace-manager-v3.test.ts +0 -245
- package/src/workspace/__tests__/yaml-schema.test.ts +0 -210
- package/src/workspace/config.ts +0 -165
- package/src/workspace/git-cascade-adapter.ts +0 -1213
- package/src/workspace/index.ts +0 -110
- package/src/workspace/landing/__tests__/strategies.test.ts +0 -184
- package/src/workspace/landing/direct-push.ts +0 -91
- package/src/workspace/landing/index.ts +0 -40
- package/src/workspace/landing/merge-to-parent.ts +0 -229
- package/src/workspace/landing/optimistic-push.ts +0 -36
- package/src/workspace/landing/queue-to-branch.ts +0 -108
- package/src/workspace/merge-queue/__tests__/conflict-resolution-git.e2e.test.ts +0 -641
- package/src/workspace/merge-queue/__tests__/conflict-resolution.test.ts +0 -707
- package/src/workspace/merge-queue/__tests__/merge-queue-concurrent.test.ts +0 -628
- package/src/workspace/merge-queue/__tests__/merge-queue-edge-cases.test.ts +0 -1217
- package/src/workspace/merge-queue/__tests__/merge-queue.test.ts +0 -506
- package/src/workspace/merge-queue/__tests__/real-git-operations.e2e.test.ts +0 -556
- package/src/workspace/merge-queue/__tests__/resolver-flow.test.ts +0 -472
- package/src/workspace/merge-queue/index.ts +0 -38
- package/src/workspace/merge-queue/merge-queue.ts +0 -585
- package/src/workspace/merge-queue/schema.ts +0 -98
- package/src/workspace/merge-queue/types.ts +0 -316
- package/src/workspace/pool/__tests__/worktree-pool.integration.test.ts +0 -1281
- package/src/workspace/pool/__tests__/worktree-pool.test.ts +0 -590
- package/src/workspace/pool/index.ts +0 -26
- package/src/workspace/pool/types.ts +0 -276
- package/src/workspace/pool/worktree-pool.ts +0 -659
- package/src/workspace/recovery/__tests__/auto-resolve-integration.test.ts +0 -127
- package/src/workspace/recovery/__tests__/spawn-resolver.test.ts +0 -139
- package/src/workspace/recovery/__tests__/strategies.test.ts +0 -145
- package/src/workspace/recovery/abandon.ts +0 -51
- package/src/workspace/recovery/auto-resolve.ts +0 -119
- package/src/workspace/recovery/defer.ts +0 -23
- package/src/workspace/recovery/escalate.ts +0 -30
- package/src/workspace/recovery/index.ts +0 -58
- package/src/workspace/recovery/spawn-resolver.ts +0 -152
- package/src/workspace/recovery/types.ts +0 -54
- package/src/workspace/strategies/index.ts +0 -18
- package/src/workspace/strategies/optimistic.ts +0 -139
- package/src/workspace/strategies/queue.ts +0 -81
- package/src/workspace/strategies/registry.ts +0 -89
- package/src/workspace/strategies/trunk.ts +0 -123
- package/src/workspace/strategies/types.ts +0 -145
- package/src/workspace/topology/__tests__/yaml-driven.test.ts +0 -345
- package/src/workspace/topology/index.ts +0 -18
- package/src/workspace/topology/no-workspace.ts +0 -39
- package/src/workspace/topology/types.ts +0 -116
- package/src/workspace/topology/yaml-driven.ts +0 -316
- package/src/workspace/types-v3.ts +0 -162
- package/src/workspace/types.ts +0 -541
- package/src/workspace/workspace-manager.ts +0 -1577
- package/src/workspace/yaml-schema.ts +0 -216
- package/test_fixtures/README.md +0 -425
- package/test_fixtures/fixtures/behaviors/coordinators.ts +0 -196
- package/test_fixtures/fixtures/behaviors/index.ts +0 -62
- package/test_fixtures/fixtures/behaviors/integrators.ts +0 -143
- package/test_fixtures/fixtures/behaviors/monitors.ts +0 -199
- package/test_fixtures/fixtures/behaviors/workers.ts +0 -348
- package/test_fixtures/fixtures/index.ts +0 -7
- package/test_fixtures/fixtures/projects/index.ts +0 -23
- package/test_fixtures/fixtures/projects/project-with-specs.ts +0 -44
- package/test_fixtures/fixtures/projects/typescript-project.ts +0 -200
- package/test_fixtures/fixtures/repos/index.ts +0 -6
- package/test_fixtures/fixtures/repos/temp-repo-factory.ts +0 -299
- package/test_fixtures/fixtures/repos/types.ts +0 -174
- package/test_fixtures/harness/assertions/harness-assertions.ts +0 -752
- package/test_fixtures/harness/assertions/index.ts +0 -8
- package/test_fixtures/harness/index.ts +0 -15
- package/test_fixtures/harness/simulator/agent-simulator.ts +0 -768
- package/test_fixtures/harness/simulator/behavior-executor.ts +0 -580
- package/test_fixtures/harness/simulator/index.ts +0 -14
- package/test_fixtures/harness/simulator/types.ts +0 -459
- package/test_fixtures/harness/test-harness.ts +0 -770
- package/test_fixtures/harness/timing/event-stepper.ts +0 -344
- package/test_fixtures/harness/timing/index.ts +0 -8
- package/tsconfig.json +0 -21
- package/vitest.config.ts +0 -30
- package/vitest.e2e.config.ts +0 -28
- package/vitest.setup.ts +0 -12
package/src/map/server.ts
DELETED
|
@@ -1,758 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MAP Server — accepts inbound MAP connections for ACP-over-MAP interaction.
|
|
3
|
-
*
|
|
4
|
-
* Provides a MAP-compliant server that the TUI (and other MAP clients) can
|
|
5
|
-
* connect to. Supports:
|
|
6
|
-
* - Agent discovery (listAgents, subscribe)
|
|
7
|
-
* - ACP-over-MAP (prompt agents, handle permissions)
|
|
8
|
-
* - Extension methods (_macro/spawnAgent, _macro/getHierarchy, etc.)
|
|
9
|
-
* - MAP event subscriptions (agent lifecycle, task events)
|
|
10
|
-
*
|
|
11
|
-
* Uses MAPServer from @multi-agent-protocol/sdk/server for protocol handling.
|
|
12
|
-
* Agent lifecycle is synced from AgentManager to MAPServer's agent registry.
|
|
13
|
-
*
|
|
14
|
-
* @module map/server
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
import * as http from "node:http";
|
|
18
|
-
import { WebSocketServer, WebSocket } from "ws";
|
|
19
|
-
import type { AgentManager } from "../agent/agent-manager.js";
|
|
20
|
-
import type { AgentStore } from "../agent/agent-store.js";
|
|
21
|
-
import type { InboxAdapter, TasksAdapter } from "../adapters/types.js";
|
|
22
|
-
import type { MapServerConfig, MAPServerInstance } from "./types.js";
|
|
23
|
-
import type { MacroAgentSystemV2 } from "../boot-v2.js";
|
|
24
|
-
import type { ACPBridge } from "./acp-bridge.js";
|
|
25
|
-
|
|
26
|
-
// =============================================================================
|
|
27
|
-
// Dependencies (same shape as MacroAgentSystemV2, partial)
|
|
28
|
-
// =============================================================================
|
|
29
|
-
|
|
30
|
-
export interface MapServerDeps {
|
|
31
|
-
agentManager: AgentManager;
|
|
32
|
-
agentStore: AgentStore;
|
|
33
|
-
inboxAdapter: InboxAdapter;
|
|
34
|
-
tasksAdapter: TasksAdapter;
|
|
35
|
-
/** Full system reference needed for ACP-over-MAP bridge */
|
|
36
|
-
system?: MacroAgentSystemV2;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// =============================================================================
|
|
40
|
-
// Implementation
|
|
41
|
-
// =============================================================================
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Create a MAP server that accepts inbound connections.
|
|
45
|
-
*
|
|
46
|
-
* The server uses MAPServer from the MAP SDK for protocol handling,
|
|
47
|
-
* with macro-agent extension methods registered as additionalHandlers.
|
|
48
|
-
* Agent lifecycle events from AgentManager are synced to the MAPServer's
|
|
49
|
-
* agent registry so clients see agents via listAgents() and subscribe().
|
|
50
|
-
*/
|
|
51
|
-
export function createMAPServerInstance(
|
|
52
|
-
deps: MapServerDeps,
|
|
53
|
-
config: MapServerConfig = {},
|
|
54
|
-
): MAPServerInstance {
|
|
55
|
-
const port = config.port ?? 3002;
|
|
56
|
-
const host = config.host ?? "127.0.0.1";
|
|
57
|
-
const wsPath = config.path ?? "/map";
|
|
58
|
-
const serverName = config.name ?? "macro-agent";
|
|
59
|
-
|
|
60
|
-
let mapServer: any = null;
|
|
61
|
-
let httpServer: http.Server | null = null;
|
|
62
|
-
let wss: WebSocketServer | null = null;
|
|
63
|
-
let acpBridge: ACPBridge | null = null;
|
|
64
|
-
let lifecycleUnsubscribe: (() => void) | null = null;
|
|
65
|
-
let connectionCount = 0;
|
|
66
|
-
let actualUrl = "";
|
|
67
|
-
|
|
68
|
-
// Bidirectional mapping: MAPServer assigns its own ULIDs for agents.
|
|
69
|
-
// We track the mapping so we can route ACP messages to the right local agent.
|
|
70
|
-
const mapIdToLocalId = new Map<string, string>(); // MAP ULID → macro-agent agent ID
|
|
71
|
-
const localIdToMapId = new Map<string, string>(); // macro-agent agent ID → MAP ULID
|
|
72
|
-
|
|
73
|
-
// Track WebSocket connections by their MAP participant/agent ID for direct delivery
|
|
74
|
-
const clientWebSockets = new Map<string, WebSocket>(); // participant/agent ID → WebSocket
|
|
75
|
-
// Track subscription IDs by client agent ID for ACP response delivery
|
|
76
|
-
const clientSubscriptions = new Map<string, string[]>(); // agent ID → subscription IDs
|
|
77
|
-
/**
|
|
78
|
-
* Per-subscription monotonic event counter. The MAP SDK's Subscription
|
|
79
|
-
* checks `sequenceNumber !== lastSequenceNumber + 1` and warns on gaps —
|
|
80
|
-
* using `Date.now()` (millisecond timestamp) breaks that assumption since
|
|
81
|
-
* each event becomes a "gap". Track a per-subscription counter starting
|
|
82
|
-
* at 1 and increment per event.
|
|
83
|
-
*/
|
|
84
|
-
const subscriptionSequence = new Map<string, number>(); // subscription ID → next sequence number
|
|
85
|
-
// Track original ws.send for each WebSocket (before interception)
|
|
86
|
-
const originalSends = new Map<WebSocket, Function>();
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Build additionalHandlers for macro-agent extension methods.
|
|
90
|
-
* These are registered on the MAPServer so MAP clients can call them.
|
|
91
|
-
*/
|
|
92
|
-
function buildAdditionalHandlers(): Record<
|
|
93
|
-
string,
|
|
94
|
-
(params: any, ctx: any) => Promise<any>
|
|
95
|
-
> {
|
|
96
|
-
const { agentManager, agentStore, tasksAdapter } = deps;
|
|
97
|
-
const handlers: Record<string, (params: any, ctx: any) => Promise<any>> = {};
|
|
98
|
-
|
|
99
|
-
// ── Agent extensions ──────────────────────────────────────────
|
|
100
|
-
handlers["_macro/spawnAgent"] = async (params, ctx) => {
|
|
101
|
-
// Forward the full SpawnAgentOptions surface so callers can set
|
|
102
|
-
// permission mode, agent type, custom prompt, model config, etc.
|
|
103
|
-
// Previously this handler dropped everything except role/cwd/task,
|
|
104
|
-
// making _macro/spawnAgent useless for any non-default agent.
|
|
105
|
-
const spawned = await agentManager.spawn({
|
|
106
|
-
task: params.task ?? "Spawned via MAP",
|
|
107
|
-
parent: params.parent ?? null,
|
|
108
|
-
cwd: params.cwd,
|
|
109
|
-
role: params.role ?? "worker",
|
|
110
|
-
permissionMode: params.permissionMode,
|
|
111
|
-
askForAllTools: params.askForAllTools,
|
|
112
|
-
agentType: params.agentType,
|
|
113
|
-
customPrompt: params.customPrompt,
|
|
114
|
-
topics: params.topics,
|
|
115
|
-
config: params.config,
|
|
116
|
-
taskRef: params.taskRef,
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
// Ensure agent is registered in MAPServer's registry.
|
|
120
|
-
// The lifecycle bridge may have already done this, but we also
|
|
121
|
-
// register here with the session context for subscription routing.
|
|
122
|
-
if (mapServer && !localIdToMapId.has(spawned.id)) {
|
|
123
|
-
try {
|
|
124
|
-
const registered = mapServer.agents.register({
|
|
125
|
-
name: (spawned as any).name ?? spawned.id,
|
|
126
|
-
role: params.role ?? "worker",
|
|
127
|
-
state: "idle",
|
|
128
|
-
sessionId: ctx?.session?.id,
|
|
129
|
-
metadata: { peerAgentId: spawned.id, task: params.task },
|
|
130
|
-
});
|
|
131
|
-
if (registered?.id) {
|
|
132
|
-
mapIdToLocalId.set(registered.id, spawned.id);
|
|
133
|
-
localIdToMapId.set(spawned.id, registered.id);
|
|
134
|
-
}
|
|
135
|
-
} catch {
|
|
136
|
-
// Best effort
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
// Return the MAP ULID (from MAPServer registry) so clients can reference it
|
|
141
|
-
const mapId = localIdToMapId.get(spawned.id) ?? spawned.id;
|
|
142
|
-
return { agent: { id: mapId, name: (spawned as any).name, localId: spawned.id } };
|
|
143
|
-
};
|
|
144
|
-
|
|
145
|
-
handlers["_macro/getHierarchy"] = async (params) => {
|
|
146
|
-
const hierarchy = agentManager.getHierarchy(
|
|
147
|
-
params.agentId,
|
|
148
|
-
params.depth ? { depth: params.depth } : undefined,
|
|
149
|
-
);
|
|
150
|
-
return { hierarchy };
|
|
151
|
-
};
|
|
152
|
-
|
|
153
|
-
handlers["_macro/forkAgent"] = async (params) => {
|
|
154
|
-
const spawned = await agentManager.forkAgent(params.sourceAgentId, {
|
|
155
|
-
name: params.name,
|
|
156
|
-
prompt: params.prompt,
|
|
157
|
-
cwd: params.cwd,
|
|
158
|
-
});
|
|
159
|
-
return { agent: { id: spawned.id } };
|
|
160
|
-
};
|
|
161
|
-
|
|
162
|
-
handlers["_macro/resume"] = async (params) => {
|
|
163
|
-
const spawned = await agentManager.resume(params.agentId);
|
|
164
|
-
return { agent: { id: spawned.id } };
|
|
165
|
-
};
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* Resume an agent session with full routing + session info returned.
|
|
169
|
-
*
|
|
170
|
-
* Session-first resolution: given a Claude Code `providerSessionId` (the
|
|
171
|
-
* session UUID persisted on the session record), reverse-look-up the
|
|
172
|
-
* owning agent. Falls back to `agentId` (either the MAP ULID or the
|
|
173
|
-
* local store id) when no providerSessionId is given or the reverse
|
|
174
|
-
* lookup misses.
|
|
175
|
-
*
|
|
176
|
-
* Behavior:
|
|
177
|
-
* 1. Resolve the local agent id.
|
|
178
|
-
* 2. Call `agentManager.resume(localId)` — idempotent; the manager
|
|
179
|
-
* re-spawns the coordinator/head-manager if its process isn't live,
|
|
180
|
-
* otherwise returns the existing handle.
|
|
181
|
-
* 3. Ensure the agent is registered in the MAPServer's registry so
|
|
182
|
-
* ACP streams can target it via the returned peerMapId.
|
|
183
|
-
* 4. Return `{ agent: { id: peerMapId, localId, name }, acpSessionId,
|
|
184
|
-
* providerSessionId }` — the caller needs peerMapId to open the
|
|
185
|
-
* ACP stream and providerSessionId to pass into `session/load` so
|
|
186
|
-
* Claude Code replays its on-disk transcript.
|
|
187
|
-
*
|
|
188
|
-
* Used by OpenHive's POST /sessions/:id/resume to revive a session whose
|
|
189
|
-
* swarm has been offline for longer than the hub's stale-grace window.
|
|
190
|
-
*/
|
|
191
|
-
handlers["_macro/resumeAgent"] = async (params, ctx) => {
|
|
192
|
-
const providerSessionIdParam = params.providerSessionId as string | undefined;
|
|
193
|
-
const agentIdParam = params.agentId as string | undefined;
|
|
194
|
-
|
|
195
|
-
let localId: string | undefined;
|
|
196
|
-
let providerSessionId: string | undefined;
|
|
197
|
-
|
|
198
|
-
if (providerSessionIdParam) {
|
|
199
|
-
const session = agentStore.findSessionByProviderSessionId(providerSessionIdParam);
|
|
200
|
-
if (session) {
|
|
201
|
-
localId = session.agent_id;
|
|
202
|
-
providerSessionId = session.provider_session_id;
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
if (!localId && agentIdParam) {
|
|
207
|
-
localId = mapIdToLocalId.get(agentIdParam) ?? agentIdParam;
|
|
208
|
-
const session = agentStore.getSession(localId);
|
|
209
|
-
providerSessionId = session?.provider_session_id;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
if (!localId) {
|
|
213
|
-
return {
|
|
214
|
-
success: false,
|
|
215
|
-
error: "providerSessionId or agentId required",
|
|
216
|
-
};
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
const agentRec = agentStore.getAgent(localId);
|
|
220
|
-
if (!agentRec) {
|
|
221
|
-
return { success: false, error: `Agent not found: ${localId}` };
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
// Already-running case: skip resume() (which rejects with ALREADY_RUNNING)
|
|
225
|
-
// and return the live agent's session info straight from the store.
|
|
226
|
-
// This makes the call idempotent — callers don't need to pre-check.
|
|
227
|
-
let resumedId: string;
|
|
228
|
-
let resumedSessionId: string;
|
|
229
|
-
let resumedName: string | undefined;
|
|
230
|
-
if (agentManager.hasActiveSession(localId as any)) {
|
|
231
|
-
resumedId = localId;
|
|
232
|
-
resumedName = agentRec.name;
|
|
233
|
-
const liveSession = agentStore.getSession(localId);
|
|
234
|
-
if (!liveSession) {
|
|
235
|
-
return {
|
|
236
|
-
success: false,
|
|
237
|
-
error: `Agent ${localId} is active but has no session record`,
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
resumedSessionId = liveSession.session_id;
|
|
241
|
-
} else {
|
|
242
|
-
try {
|
|
243
|
-
const resumed = await agentManager.resume(localId as any);
|
|
244
|
-
resumedId = resumed.id;
|
|
245
|
-
resumedSessionId = resumed.session_id;
|
|
246
|
-
resumedName = (resumed as any).name;
|
|
247
|
-
} catch (err) {
|
|
248
|
-
return { success: false, error: (err as Error).message };
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
// Ensure agent is registered in MAPServer's registry. resume() fires
|
|
253
|
-
// the spawned lifecycle event, which the lifecycle bridge handles —
|
|
254
|
-
// but we also register here for subscription routing context on the
|
|
255
|
-
// current MAP session (mirrors _macro/spawnAgent).
|
|
256
|
-
if (mapServer && !localIdToMapId.has(resumedId)) {
|
|
257
|
-
try {
|
|
258
|
-
const registered = mapServer.agents.register({
|
|
259
|
-
name: resumedName ?? resumedId,
|
|
260
|
-
role: agentRec.role,
|
|
261
|
-
state: "idle",
|
|
262
|
-
sessionId: ctx?.session?.id,
|
|
263
|
-
metadata: { peerAgentId: resumedId },
|
|
264
|
-
});
|
|
265
|
-
if (registered?.id) {
|
|
266
|
-
mapIdToLocalId.set(registered.id, resumedId);
|
|
267
|
-
localIdToMapId.set(resumedId, registered.id);
|
|
268
|
-
}
|
|
269
|
-
} catch {
|
|
270
|
-
// Best effort; lifecycle bridge will register on spawned event
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
const peerMapId = localIdToMapId.get(resumedId) ?? resumedId;
|
|
275
|
-
|
|
276
|
-
return {
|
|
277
|
-
success: true,
|
|
278
|
-
agent: {
|
|
279
|
-
id: peerMapId,
|
|
280
|
-
localId: resumedId,
|
|
281
|
-
name: resumedName,
|
|
282
|
-
role: agentRec.role,
|
|
283
|
-
},
|
|
284
|
-
acpSessionId: resumedSessionId,
|
|
285
|
-
providerSessionId,
|
|
286
|
-
};
|
|
287
|
-
};
|
|
288
|
-
|
|
289
|
-
/**
|
|
290
|
-
* Terminate a running agent. Accepts either the agent's local ID or the
|
|
291
|
-
* MAP-assigned ULID (we resolve back to local via mapIdToLocalId).
|
|
292
|
-
* Reason defaults to "stopped"; use "cancelled" for user-initiated stops.
|
|
293
|
-
*/
|
|
294
|
-
handlers["_macro/terminateAgent"] = async (params) => {
|
|
295
|
-
const agentIdParam = params.agentId as string | undefined;
|
|
296
|
-
const reason = (params.reason as string) ?? "cancelled";
|
|
297
|
-
if (!agentIdParam) {
|
|
298
|
-
return { success: false, error: "agentId is required" };
|
|
299
|
-
}
|
|
300
|
-
// Resolve either a MAP ULID or a local agent ID to our internal ID.
|
|
301
|
-
const localId = mapIdToLocalId.get(agentIdParam) ?? agentIdParam;
|
|
302
|
-
try {
|
|
303
|
-
await agentManager.terminate(localId as any, reason as any);
|
|
304
|
-
return { success: true };
|
|
305
|
-
} catch (err) {
|
|
306
|
-
return { success: false, error: (err as Error).message };
|
|
307
|
-
}
|
|
308
|
-
};
|
|
309
|
-
|
|
310
|
-
/**
|
|
311
|
-
* Inspect ACP stream → peer agent bindings on this MAP server.
|
|
312
|
-
* Each stream carries the peer agent id (macro-agent's internal store id)
|
|
313
|
-
* it was opened against, set by the bridge from MAP routing. Useful for
|
|
314
|
-
* routing tests and debugging multi-coordinator scenarios.
|
|
315
|
-
*/
|
|
316
|
-
handlers["_macro/getAcpStreamBindings"] = async () => {
|
|
317
|
-
if (!acpBridge) return { bindings: [] };
|
|
318
|
-
return { bindings: acpBridge.getStreamBindings() };
|
|
319
|
-
};
|
|
320
|
-
|
|
321
|
-
// ── Task extensions ───────────────────────────────────────────
|
|
322
|
-
handlers["_macro/task/list"] = async () => {
|
|
323
|
-
if (!tasksAdapter.connected) return { tasks: [] };
|
|
324
|
-
try {
|
|
325
|
-
const tasks = await tasksAdapter.listTasks();
|
|
326
|
-
return { tasks };
|
|
327
|
-
} catch {
|
|
328
|
-
return { tasks: [] };
|
|
329
|
-
}
|
|
330
|
-
};
|
|
331
|
-
|
|
332
|
-
handlers["_macro/getTask"] = async (params) => {
|
|
333
|
-
if (!tasksAdapter.connected) return { task: null };
|
|
334
|
-
try {
|
|
335
|
-
const task = await tasksAdapter.getTask(params.taskId);
|
|
336
|
-
return { task };
|
|
337
|
-
} catch {
|
|
338
|
-
return { task: null };
|
|
339
|
-
}
|
|
340
|
-
};
|
|
341
|
-
|
|
342
|
-
// ── Query extensions ──────────────────────────────────────────
|
|
343
|
-
handlers["_macro/getHistory"] = async (params) => {
|
|
344
|
-
try {
|
|
345
|
-
const messages = await deps.inboxAdapter.checkInbox(params.agentId, {
|
|
346
|
-
limit: params.limit ?? 50,
|
|
347
|
-
});
|
|
348
|
-
return { messages };
|
|
349
|
-
} catch {
|
|
350
|
-
return { messages: [] };
|
|
351
|
-
}
|
|
352
|
-
};
|
|
353
|
-
|
|
354
|
-
// ── Trajectory ─────────────────────────────────────────────────
|
|
355
|
-
// Receives trajectory checkpoints from cc-swarm agents connected
|
|
356
|
-
// to this MAP server. Forwards upstream to OpenHive via the sidecar.
|
|
357
|
-
handlers["trajectory/checkpoint"] = async (params: any) => {
|
|
358
|
-
const checkpoint = params?.checkpoint;
|
|
359
|
-
if (!checkpoint) return { ok: false, error: "missing checkpoint" };
|
|
360
|
-
|
|
361
|
-
// Forward to the sidecar for upstream delivery to OpenHive
|
|
362
|
-
const sidecar = (deps.system as any)?.mapSidecar;
|
|
363
|
-
if (sidecar?.connected) {
|
|
364
|
-
try {
|
|
365
|
-
const result = await sidecar.reportCheckpoint(checkpoint);
|
|
366
|
-
return result ?? { ok: true };
|
|
367
|
-
} catch {
|
|
368
|
-
return { ok: true, note: "forwarding failed, received locally" };
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
return { ok: true, note: "received locally, no upstream sidecar" };
|
|
373
|
-
};
|
|
374
|
-
|
|
375
|
-
// ── Ping ──────────────────────────────────────────────────────
|
|
376
|
-
handlers["ping"] = async () => ({ pong: true });
|
|
377
|
-
|
|
378
|
-
return handlers;
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
return {
|
|
382
|
-
async start(): Promise<void> {
|
|
383
|
-
// 1. Import MAPServer from SDK (dynamic to keep it optional)
|
|
384
|
-
// @ts-expect-error — server subpath export may lack .d.ts
|
|
385
|
-
const { MAPServer } = await import("@multi-agent-protocol/sdk/server");
|
|
386
|
-
const { websocketStream } = await import("@multi-agent-protocol/sdk");
|
|
387
|
-
|
|
388
|
-
// 2. Create MAPServer with extension handlers
|
|
389
|
-
const additionalHandlers = buildAdditionalHandlers();
|
|
390
|
-
mapServer = new MAPServer({
|
|
391
|
-
name: serverName,
|
|
392
|
-
version: "1.0.0",
|
|
393
|
-
additionalHandlers,
|
|
394
|
-
});
|
|
395
|
-
|
|
396
|
-
// 2b. Patch SubscriptionManager to handle undefined filters.
|
|
397
|
-
// The SDK's matchesFilter() crashes with "Cannot read properties of
|
|
398
|
-
// undefined (reading '$or')" when a subscription has no filter (e.g.,
|
|
399
|
-
// client.subscribe() with no args). We patch the method to treat
|
|
400
|
-
// undefined/null filter as "match all" (return true).
|
|
401
|
-
if (mapServer.subscriptions?.matchesFilter) {
|
|
402
|
-
const origMatchesFilter = mapServer.subscriptions.matchesFilter.bind(
|
|
403
|
-
mapServer.subscriptions,
|
|
404
|
-
);
|
|
405
|
-
mapServer.subscriptions.matchesFilter = (event: any, filter: any) => {
|
|
406
|
-
if (!filter) return true; // undefined/null filter matches everything
|
|
407
|
-
return origMatchesFilter(event, filter);
|
|
408
|
-
};
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
// 3. Set up ACP-over-MAP bridge for local agent interaction
|
|
412
|
-
// When MAP clients send ACP envelopes to local agents (via createACPStream),
|
|
413
|
-
// we intercept via the eventBus's message_sent event. The bridge creates
|
|
414
|
-
// in-memory stream pairs and wires them to createMacroAgent() for processing.
|
|
415
|
-
if (deps.system) {
|
|
416
|
-
const { createACPBridge } = await import("./acp-bridge.js");
|
|
417
|
-
acpBridge = createACPBridge(
|
|
418
|
-
deps.system,
|
|
419
|
-
mapServer,
|
|
420
|
-
(localId) => localIdToMapId.get(localId),
|
|
421
|
-
(clientId, rawEvent) => {
|
|
422
|
-
const ws = clientWebSockets.get(clientId);
|
|
423
|
-
if (!ws || ws.readyState !== WebSocket.OPEN) {
|
|
424
|
-
return;
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
const send = originalSends.get(ws) ?? ws.send.bind(ws);
|
|
428
|
-
const subIds = clientSubscriptions.get(clientId) ?? [];
|
|
429
|
-
|
|
430
|
-
// Send as subscription event notification (what ACPStreamConnection expects).
|
|
431
|
-
// The _pushEvent method expects: { subscriptionId, sequenceNumber, eventId, timestamp, event }
|
|
432
|
-
//
|
|
433
|
-
// sequenceNumber must be a per-subscription monotonic counter that
|
|
434
|
-
// increments by exactly 1 — the SDK warns on any gap. Don't use
|
|
435
|
-
// Date.now() here (breaks the contract on every event).
|
|
436
|
-
for (const subId of subIds) {
|
|
437
|
-
const event = rawEvent.params?.event ?? rawEvent;
|
|
438
|
-
const eventId = event.id ?? `acp-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
439
|
-
const nextSeq = (subscriptionSequence.get(subId) ?? 0) + 1;
|
|
440
|
-
subscriptionSequence.set(subId, nextSeq);
|
|
441
|
-
const notification = JSON.stringify({
|
|
442
|
-
jsonrpc: "2.0",
|
|
443
|
-
method: "map/event",
|
|
444
|
-
params: {
|
|
445
|
-
subscriptionId: subId,
|
|
446
|
-
sequenceNumber: nextSeq,
|
|
447
|
-
eventId,
|
|
448
|
-
timestamp: Date.now(),
|
|
449
|
-
event,
|
|
450
|
-
},
|
|
451
|
-
});
|
|
452
|
-
send(notification);
|
|
453
|
-
}
|
|
454
|
-
},
|
|
455
|
-
);
|
|
456
|
-
|
|
457
|
-
// Intercept messages via eventBus.
|
|
458
|
-
// Messages to local agents get "queued" (not "delivered") because
|
|
459
|
-
// local agents don't have MAP connections. We intercept both sent
|
|
460
|
-
// and queued events to catch ACP envelopes destined for local agents.
|
|
461
|
-
// Handle message events asynchronously to avoid blocking the map/send
|
|
462
|
-
// response. The eventBus fires synchronously during sendToAgent(),
|
|
463
|
-
// and if we process ACP messages synchronously, the response to
|
|
464
|
-
// map/send might be delayed (or the ACP response notification might
|
|
465
|
-
// arrive before the map/send ACK, causing protocol issues).
|
|
466
|
-
const handleMessageEvent = (event: any) => {
|
|
467
|
-
if (!acpBridge) return;
|
|
468
|
-
const data = event?.data;
|
|
469
|
-
const message = data?.message;
|
|
470
|
-
if (!message) return;
|
|
471
|
-
|
|
472
|
-
// Check if this is an ACP envelope — these should always be handled
|
|
473
|
-
// by the bridge, even if the target agent can't be resolved to a
|
|
474
|
-
// specific local agent (the bridge creates a head manager on demand).
|
|
475
|
-
const payload = message?.payload;
|
|
476
|
-
const isAcp = payload && typeof payload === 'object' &&
|
|
477
|
-
'acp' in payload && 'acpContext' in payload;
|
|
478
|
-
|
|
479
|
-
const toField = message.to;
|
|
480
|
-
const mapTargetId = data?.agentId ??
|
|
481
|
-
(typeof toField === "string" ? toField : toField?.agent ?? toField?.id);
|
|
482
|
-
if (!mapTargetId) return;
|
|
483
|
-
|
|
484
|
-
const localAgentId = mapIdToLocalId.get(mapTargetId) ?? mapTargetId;
|
|
485
|
-
|
|
486
|
-
// For ACP envelopes, always forward to bridge (it creates sessions on demand).
|
|
487
|
-
// For non-ACP messages, require a local agent to exist.
|
|
488
|
-
if (!isAcp) {
|
|
489
|
-
const localAgent = deps.agentManager.get(localAgentId);
|
|
490
|
-
if (!localAgent) return;
|
|
491
|
-
}
|
|
492
|
-
|
|
493
|
-
// Defer ACP processing to next tick so map/send response goes out first
|
|
494
|
-
setImmediate(() => {
|
|
495
|
-
acpBridge!.handleDelivery(localAgentId, message);
|
|
496
|
-
});
|
|
497
|
-
};
|
|
498
|
-
|
|
499
|
-
mapServer.eventBus.on("message.sent", handleMessageEvent);
|
|
500
|
-
mapServer.eventBus.on("message.queued", handleMessageEvent);
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
// 4. Create HTTP server with /health endpoint
|
|
504
|
-
httpServer = http.createServer((req, res) => {
|
|
505
|
-
if (req.url === "/health") {
|
|
506
|
-
res.writeHead(200, { "Content-Type": "application/json" });
|
|
507
|
-
res.end(
|
|
508
|
-
JSON.stringify({
|
|
509
|
-
status: "ok",
|
|
510
|
-
connections: connectionCount,
|
|
511
|
-
agents: deps.agentManager.list().length,
|
|
512
|
-
}),
|
|
513
|
-
);
|
|
514
|
-
} else {
|
|
515
|
-
res.writeHead(404);
|
|
516
|
-
res.end("Not Found");
|
|
517
|
-
}
|
|
518
|
-
});
|
|
519
|
-
|
|
520
|
-
// 5. Attach WebSocket server
|
|
521
|
-
wss = new WebSocketServer({ server: httpServer, path: wsPath });
|
|
522
|
-
|
|
523
|
-
wss.on("connection", (ws: WebSocket) => {
|
|
524
|
-
connectionCount++;
|
|
525
|
-
|
|
526
|
-
// Intercept outgoing messages to track subscription IDs and agent IDs.
|
|
527
|
-
// This lets us route ACP responses directly via the WebSocket.
|
|
528
|
-
const originalSend = ws.send.bind(ws);
|
|
529
|
-
originalSends.set(ws, originalSend);
|
|
530
|
-
const subscriptionIds: string[] = [];
|
|
531
|
-
let clientAgentId: string | null = null;
|
|
532
|
-
|
|
533
|
-
ws.send = function (data: any, ...args: any[]) {
|
|
534
|
-
// Parse outgoing messages to learn about subscriptions and agent IDs
|
|
535
|
-
try {
|
|
536
|
-
const msg = typeof data === "string" ? JSON.parse(data) : null;
|
|
537
|
-
if (msg?.result?.subscriptionId) {
|
|
538
|
-
subscriptionIds.push(msg.result.subscriptionId);
|
|
539
|
-
}
|
|
540
|
-
// Track client by ALL IDs we see in responses
|
|
541
|
-
if (msg?.result?.agent?.id) {
|
|
542
|
-
clientAgentId = msg.result.agent.id as string;
|
|
543
|
-
clientWebSockets.set(clientAgentId!, ws);
|
|
544
|
-
clientSubscriptions.set(clientAgentId!, subscriptionIds);
|
|
545
|
-
}
|
|
546
|
-
// Also track by session/participant IDs
|
|
547
|
-
if (msg?.result?.connection?.participantId) {
|
|
548
|
-
const partId = msg.result.connection.participantId as string;
|
|
549
|
-
clientWebSockets.set(partId, ws);
|
|
550
|
-
clientSubscriptions.set(partId, subscriptionIds);
|
|
551
|
-
}
|
|
552
|
-
if (msg?.result?.sessionId) {
|
|
553
|
-
const sessId = msg.result.sessionId as string;
|
|
554
|
-
clientWebSockets.set(sessId, ws);
|
|
555
|
-
clientSubscriptions.set(sessId, subscriptionIds);
|
|
556
|
-
}
|
|
557
|
-
} catch {
|
|
558
|
-
// Ignore parse errors
|
|
559
|
-
}
|
|
560
|
-
return originalSend(data, ...args);
|
|
561
|
-
} as any;
|
|
562
|
-
|
|
563
|
-
// Observe incoming messages so we drop subscription IDs from our
|
|
564
|
-
// routing array when the client unsubscribes. Without this, closed
|
|
565
|
-
// ACP streams keep receiving events ("MAP: Event for unknown
|
|
566
|
-
// subscription" warnings on the client). We don't intercept the
|
|
567
|
-
// SDK's processing — this listener runs alongside it.
|
|
568
|
-
ws.on("message", (data: any) => {
|
|
569
|
-
try {
|
|
570
|
-
const text = typeof data === "string"
|
|
571
|
-
? data
|
|
572
|
-
: Buffer.isBuffer(data)
|
|
573
|
-
? data.toString("utf-8")
|
|
574
|
-
: String(data);
|
|
575
|
-
const msg = JSON.parse(text);
|
|
576
|
-
if (msg?.method === "map/unsubscribe") {
|
|
577
|
-
const subId = msg?.params?.subscriptionId;
|
|
578
|
-
if (typeof subId === "string") {
|
|
579
|
-
const idx = subscriptionIds.indexOf(subId);
|
|
580
|
-
if (idx >= 0) subscriptionIds.splice(idx, 1);
|
|
581
|
-
subscriptionSequence.delete(subId);
|
|
582
|
-
}
|
|
583
|
-
}
|
|
584
|
-
} catch {
|
|
585
|
-
// Non-JSON or parse failure — ignore
|
|
586
|
-
}
|
|
587
|
-
});
|
|
588
|
-
|
|
589
|
-
const stream = websocketStream(ws as unknown as globalThis.WebSocket);
|
|
590
|
-
const router = mapServer.accept(stream, {
|
|
591
|
-
role: "client",
|
|
592
|
-
transportType: "websocket",
|
|
593
|
-
});
|
|
594
|
-
router.start();
|
|
595
|
-
|
|
596
|
-
ws.on("close", () => {
|
|
597
|
-
connectionCount--;
|
|
598
|
-
// Clear sequence counters for any subscriptions belonging to this
|
|
599
|
-
// connection. Use a copy of subscriptionIds since we don't mutate it.
|
|
600
|
-
for (const subId of subscriptionIds) {
|
|
601
|
-
subscriptionSequence.delete(subId);
|
|
602
|
-
}
|
|
603
|
-
if (clientAgentId) {
|
|
604
|
-
clientWebSockets.delete(clientAgentId);
|
|
605
|
-
clientSubscriptions.delete(clientAgentId);
|
|
606
|
-
}
|
|
607
|
-
});
|
|
608
|
-
});
|
|
609
|
-
|
|
610
|
-
// 6. Sync agent lifecycle → MAPServer agent registry
|
|
611
|
-
lifecycleUnsubscribe = deps.agentManager.onLifecycleEvent((event) => {
|
|
612
|
-
if (!mapServer) return;
|
|
613
|
-
|
|
614
|
-
try {
|
|
615
|
-
if (event.type === "spawned" || event.type === "started") {
|
|
616
|
-
const agent = event.agent;
|
|
617
|
-
// Register agent ONCE. spawn() fires "spawned" immediately followed
|
|
618
|
-
// by "started", so without this guard the listener re-registers
|
|
619
|
-
// on the second event — generating a fresh MAP ULID and overwriting
|
|
620
|
-
// localIdToMapId. Consumers racing against that overwrite (like the
|
|
621
|
-
// sidecar's lifecycle bridge, which snapshots peerMapId into hub
|
|
622
|
-
// metadata) end up disagreeing with _macro/spawnAgent's return
|
|
623
|
-
// value on which ULID refers to this agent.
|
|
624
|
-
if (localIdToMapId.has(agent.id)) return;
|
|
625
|
-
try {
|
|
626
|
-
const registered = mapServer.agents.register({
|
|
627
|
-
name: agent.name ?? agent.id,
|
|
628
|
-
role: agent.role ?? "worker",
|
|
629
|
-
state: "idle",
|
|
630
|
-
metadata: {
|
|
631
|
-
peerAgentId: agent.id, // macro-agent's internal store id
|
|
632
|
-
parent: (agent as any).parent ?? null,
|
|
633
|
-
task: (agent as any).task ?? null,
|
|
634
|
-
cwd: (agent as any).cwd ?? null,
|
|
635
|
-
},
|
|
636
|
-
});
|
|
637
|
-
// Track the ID mapping
|
|
638
|
-
if (registered?.id) {
|
|
639
|
-
mapIdToLocalId.set(registered.id, agent.id);
|
|
640
|
-
localIdToMapId.set(agent.id, registered.id);
|
|
641
|
-
}
|
|
642
|
-
} catch {
|
|
643
|
-
// Registration may fail if subscription system has no active sessions.
|
|
644
|
-
// The agent still exists in macro-agent's AgentStore — MAP registry
|
|
645
|
-
// is a secondary projection.
|
|
646
|
-
}
|
|
647
|
-
} else if (event.type === "stopped") {
|
|
648
|
-
const mapId = localIdToMapId.get(event.agent.id);
|
|
649
|
-
if (mapId) {
|
|
650
|
-
try {
|
|
651
|
-
mapServer.agents.unregister(mapId);
|
|
652
|
-
} catch {
|
|
653
|
-
// Agent may not be registered
|
|
654
|
-
}
|
|
655
|
-
mapIdToLocalId.delete(mapId);
|
|
656
|
-
localIdToMapId.delete(event.agent.id);
|
|
657
|
-
}
|
|
658
|
-
}
|
|
659
|
-
} catch {
|
|
660
|
-
// Non-fatal — registry sync is best-effort
|
|
661
|
-
}
|
|
662
|
-
});
|
|
663
|
-
|
|
664
|
-
// 7. Register existing agents (that were spawned before server started)
|
|
665
|
-
for (const agent of deps.agentManager.list()) {
|
|
666
|
-
try {
|
|
667
|
-
const registered = mapServer.agents.register({
|
|
668
|
-
name: agent.name ?? agent.id,
|
|
669
|
-
role: agent.role ?? "worker",
|
|
670
|
-
state: agent.state === "running" ? "busy" : "idle",
|
|
671
|
-
metadata: {
|
|
672
|
-
peerAgentId: agent.id,
|
|
673
|
-
parent: agent.parent ?? null,
|
|
674
|
-
task: agent.task ?? null,
|
|
675
|
-
},
|
|
676
|
-
});
|
|
677
|
-
if (registered?.id) {
|
|
678
|
-
mapIdToLocalId.set(registered.id, agent.id);
|
|
679
|
-
localIdToMapId.set(agent.id, registered.id);
|
|
680
|
-
}
|
|
681
|
-
} catch {
|
|
682
|
-
// Ignore registration failures for existing agents
|
|
683
|
-
}
|
|
684
|
-
}
|
|
685
|
-
|
|
686
|
-
// 8. Start listening
|
|
687
|
-
await new Promise<void>((resolve) => {
|
|
688
|
-
httpServer!.listen(port, host, () => {
|
|
689
|
-
const addr = httpServer!.address() as { port: number };
|
|
690
|
-
const actualPort = addr.port;
|
|
691
|
-
actualUrl = `ws://${host}:${actualPort}`;
|
|
692
|
-
console.log(
|
|
693
|
-
`[map-server] MAP server listening at ${actualUrl}${wsPath}`,
|
|
694
|
-
);
|
|
695
|
-
resolve();
|
|
696
|
-
});
|
|
697
|
-
});
|
|
698
|
-
},
|
|
699
|
-
|
|
700
|
-
async stop(): Promise<void> {
|
|
701
|
-
if (lifecycleUnsubscribe) {
|
|
702
|
-
lifecycleUnsubscribe();
|
|
703
|
-
lifecycleUnsubscribe = null;
|
|
704
|
-
}
|
|
705
|
-
|
|
706
|
-
if (acpBridge) {
|
|
707
|
-
acpBridge.close();
|
|
708
|
-
acpBridge = null;
|
|
709
|
-
}
|
|
710
|
-
|
|
711
|
-
if (mapServer) {
|
|
712
|
-
try {
|
|
713
|
-
mapServer.close({ force: true });
|
|
714
|
-
} catch {
|
|
715
|
-
// Ignore close errors
|
|
716
|
-
}
|
|
717
|
-
mapServer = null;
|
|
718
|
-
}
|
|
719
|
-
|
|
720
|
-
if (wss) {
|
|
721
|
-
// Force-close all WebSocket connections to unblock pending operations
|
|
722
|
-
for (const ws of wss.clients) {
|
|
723
|
-
try {
|
|
724
|
-
ws.terminate();
|
|
725
|
-
} catch {
|
|
726
|
-
// ignore
|
|
727
|
-
}
|
|
728
|
-
}
|
|
729
|
-
wss.close();
|
|
730
|
-
wss = null;
|
|
731
|
-
}
|
|
732
|
-
|
|
733
|
-
if (httpServer) {
|
|
734
|
-
await Promise.race([
|
|
735
|
-
new Promise<void>((resolve) => {
|
|
736
|
-
httpServer!.close(() => resolve());
|
|
737
|
-
}),
|
|
738
|
-
new Promise<void>((resolve) => setTimeout(resolve, 3000)),
|
|
739
|
-
]);
|
|
740
|
-
httpServer = null;
|
|
741
|
-
}
|
|
742
|
-
|
|
743
|
-
connectionCount = 0;
|
|
744
|
-
},
|
|
745
|
-
|
|
746
|
-
getUrl(): string {
|
|
747
|
-
return actualUrl ? `${actualUrl}${wsPath}` : `ws://${host}:${port}${wsPath}`;
|
|
748
|
-
},
|
|
749
|
-
|
|
750
|
-
getConnectionCount(): number {
|
|
751
|
-
return connectionCount;
|
|
752
|
-
},
|
|
753
|
-
|
|
754
|
-
getLocalMapId(localAgentId: string): string | undefined {
|
|
755
|
-
return localIdToMapId.get(localAgentId);
|
|
756
|
-
},
|
|
757
|
-
};
|
|
758
|
-
}
|