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
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Coordination Handler — dispatches inbound coordination messages from the MAP hub.
|
|
3
|
-
*
|
|
4
|
-
* Handles x-openhive/* JSON-RPC notifications for task assignment, status updates,
|
|
5
|
-
* context sharing, messaging, and workspace execution.
|
|
6
|
-
*
|
|
7
|
-
* @module map/coordination-handler
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import type { AgentManager } from "../agent/agent-manager.js";
|
|
11
|
-
import type { InboxAdapter, TasksAdapter } from "../adapters/types.js";
|
|
12
|
-
import type {
|
|
13
|
-
CoordinationTaskAssign,
|
|
14
|
-
CoordinationTaskStatus,
|
|
15
|
-
CoordinationContextShare,
|
|
16
|
-
CoordinationMessage,
|
|
17
|
-
TrajectoryReporter,
|
|
18
|
-
} from "./types.js";
|
|
19
|
-
|
|
20
|
-
export interface CoordinationConnection {
|
|
21
|
-
onNotification(
|
|
22
|
-
method: string,
|
|
23
|
-
handler: (params: unknown) => void | Promise<void>,
|
|
24
|
-
): void;
|
|
25
|
-
offNotification(
|
|
26
|
-
method: string,
|
|
27
|
-
handler: (params: unknown) => void | Promise<void>,
|
|
28
|
-
): void;
|
|
29
|
-
sendNotification(method: string, params: unknown): Promise<void>;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export interface CoordinationDeps {
|
|
33
|
-
connection: CoordinationConnection;
|
|
34
|
-
agentManager: AgentManager;
|
|
35
|
-
inboxAdapter: InboxAdapter;
|
|
36
|
-
tasksAdapter: TasksAdapter;
|
|
37
|
-
trajectoryReporter?: TrajectoryReporter;
|
|
38
|
-
/** Workspace handler from cognitive module (if available) */
|
|
39
|
-
workspaceHandler?: {
|
|
40
|
-
handleWorkspaceExecute(params: unknown): Promise<void>;
|
|
41
|
-
isWorkspaceExecuteMessage(msg: { method?: string }): boolean;
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/** Coordination method constants */
|
|
46
|
-
const METHODS = {
|
|
47
|
-
TASK_ASSIGN: "x-openhive/task.assign",
|
|
48
|
-
TASK_STATUS: "x-openhive/task.status",
|
|
49
|
-
CONTEXT_SHARE: "x-openhive/context.share",
|
|
50
|
-
MESSAGE_SEND: "x-openhive/message.send",
|
|
51
|
-
WORKSPACE_EXECUTE: "x-openhive/learning.workspace.execute",
|
|
52
|
-
} as const;
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Register coordination notification handlers on the MAP connection.
|
|
56
|
-
* Returns a cleanup function that removes all handlers.
|
|
57
|
-
*/
|
|
58
|
-
export function setupCoordinationHandlers(
|
|
59
|
-
deps: CoordinationDeps,
|
|
60
|
-
): () => void {
|
|
61
|
-
const { connection, agentManager, inboxAdapter, tasksAdapter } = deps;
|
|
62
|
-
const handlers: Array<{ method: string; handler: (params: unknown) => void | Promise<void> }> = [];
|
|
63
|
-
|
|
64
|
-
const register = (
|
|
65
|
-
method: string,
|
|
66
|
-
handler: (params: unknown) => void | Promise<void>,
|
|
67
|
-
): void => {
|
|
68
|
-
connection.onNotification(method, handler);
|
|
69
|
-
handlers.push({ method, handler });
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
// --- Task Assignment ---
|
|
73
|
-
register(METHODS.TASK_ASSIGN, async (params: unknown) => {
|
|
74
|
-
const p = params as CoordinationTaskAssign;
|
|
75
|
-
if (!p?.title) return;
|
|
76
|
-
|
|
77
|
-
try {
|
|
78
|
-
// Extract tags and metadata from OpenHive context
|
|
79
|
-
const context = p.context ?? {};
|
|
80
|
-
const tags = Array.isArray(context.tags) ? context.tags as string[] : undefined;
|
|
81
|
-
const metadata: Record<string, unknown> = {
|
|
82
|
-
...context,
|
|
83
|
-
...(p.assigned_by ? { assigned_by: p.assigned_by } : {}),
|
|
84
|
-
...(p.deadline ? { deadline: p.deadline } : {}),
|
|
85
|
-
};
|
|
86
|
-
// Remove tags from metadata (already a top-level field)
|
|
87
|
-
delete metadata.tags;
|
|
88
|
-
|
|
89
|
-
const taskId = await tasksAdapter.createTask({
|
|
90
|
-
title: p.title,
|
|
91
|
-
content: p.description,
|
|
92
|
-
assignee: p.assigned_to,
|
|
93
|
-
tags,
|
|
94
|
-
priority: p.priority === "critical" ? 1 : p.priority === "high" ? 2 : p.priority === "low" ? 4 : 3,
|
|
95
|
-
metadata: Object.keys(metadata).length > 0 ? metadata : undefined,
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
// Optionally spawn an agent to work on the task
|
|
99
|
-
if (p.assigned_to) {
|
|
100
|
-
try {
|
|
101
|
-
await inboxAdapter.send("system", p.assigned_to, {
|
|
102
|
-
type: "event",
|
|
103
|
-
event: "TASK_ASSIGNED",
|
|
104
|
-
data: { taskId, title: p.title, description: p.description },
|
|
105
|
-
});
|
|
106
|
-
} catch {
|
|
107
|
-
// Agent may not exist locally — that's fine
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
} catch (err) {
|
|
111
|
-
console.warn(
|
|
112
|
-
`[map-sidecar] Failed to handle task.assign: ${(err as Error).message}`,
|
|
113
|
-
);
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
// --- Task Status ---
|
|
118
|
-
register(METHODS.TASK_STATUS, async (params: unknown) => {
|
|
119
|
-
const p = params as CoordinationTaskStatus;
|
|
120
|
-
if (!p?.task_id || !p?.status) return;
|
|
121
|
-
|
|
122
|
-
try {
|
|
123
|
-
const actionMap: Record<string, string> = {
|
|
124
|
-
in_progress: "start",
|
|
125
|
-
completed: "complete",
|
|
126
|
-
closed: "complete",
|
|
127
|
-
failed: "fail",
|
|
128
|
-
blocked: "block",
|
|
129
|
-
open: "reopen",
|
|
130
|
-
};
|
|
131
|
-
const action = actionMap[p.status];
|
|
132
|
-
if (action) {
|
|
133
|
-
await tasksAdapter.transitionTask(p.task_id, action as any);
|
|
134
|
-
}
|
|
135
|
-
} catch (err) {
|
|
136
|
-
console.warn(
|
|
137
|
-
`[map-sidecar] Failed to handle task.status: ${(err as Error).message}`,
|
|
138
|
-
);
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
// --- Context Share ---
|
|
143
|
-
register(METHODS.CONTEXT_SHARE, async (params: unknown) => {
|
|
144
|
-
const p = params as CoordinationContextShare;
|
|
145
|
-
if (!p?.context_type || !p?.data) return;
|
|
146
|
-
|
|
147
|
-
try {
|
|
148
|
-
// Deliver context to all running agents via inbox
|
|
149
|
-
const agents = agentManager.list()
|
|
150
|
-
.filter((a: any) => a.state === "running");
|
|
151
|
-
for (const agent of agents) {
|
|
152
|
-
await inboxAdapter
|
|
153
|
-
.send("system", agent.id, {
|
|
154
|
-
type: "event",
|
|
155
|
-
event: "CONTEXT_SHARED",
|
|
156
|
-
data: {
|
|
157
|
-
context_type: p.context_type,
|
|
158
|
-
data: p.data,
|
|
159
|
-
source: p.source_swarm_id,
|
|
160
|
-
},
|
|
161
|
-
})
|
|
162
|
-
.catch(() => {});
|
|
163
|
-
}
|
|
164
|
-
} catch (err) {
|
|
165
|
-
console.warn(
|
|
166
|
-
`[map-sidecar] Failed to handle context.share: ${(err as Error).message}`,
|
|
167
|
-
);
|
|
168
|
-
}
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
// --- Message Send ---
|
|
172
|
-
register(METHODS.MESSAGE_SEND, async (params: unknown) => {
|
|
173
|
-
const p = params as CoordinationMessage;
|
|
174
|
-
if (!p?.content) return;
|
|
175
|
-
|
|
176
|
-
try {
|
|
177
|
-
const agents = agentManager.list()
|
|
178
|
-
.filter((a: any) => a.state === "running");
|
|
179
|
-
if (agents.length === 0) return;
|
|
180
|
-
|
|
181
|
-
// Route to the best target:
|
|
182
|
-
// 1. If to_swarm_id matches a local agent ID, send directly
|
|
183
|
-
// 2. If metadata has a target_agent hint, use it
|
|
184
|
-
// 3. Otherwise, send to the coordinator/head manager (parentless agent)
|
|
185
|
-
// 4. Fallback: first running agent
|
|
186
|
-
const targetId = p.to_swarm_id;
|
|
187
|
-
const directTarget = targetId
|
|
188
|
-
? agents.find((a: any) => a.id === targetId)
|
|
189
|
-
: undefined;
|
|
190
|
-
const coordinator = agents.find((a: any) => !a.parent);
|
|
191
|
-
const target = directTarget ?? coordinator ?? agents[0];
|
|
192
|
-
|
|
193
|
-
await inboxAdapter.send("system", target.id, {
|
|
194
|
-
type: "event",
|
|
195
|
-
event: "EXTERNAL_MESSAGE",
|
|
196
|
-
data: {
|
|
197
|
-
from: p.from_swarm_id,
|
|
198
|
-
content_type: p.content_type,
|
|
199
|
-
content: p.content,
|
|
200
|
-
reply_to: p.reply_to,
|
|
201
|
-
metadata: p.metadata,
|
|
202
|
-
},
|
|
203
|
-
});
|
|
204
|
-
} catch (err) {
|
|
205
|
-
console.warn(
|
|
206
|
-
`[map-sidecar] Failed to handle message.send: ${(err as Error).message}`,
|
|
207
|
-
);
|
|
208
|
-
}
|
|
209
|
-
});
|
|
210
|
-
|
|
211
|
-
// --- Workspace Execute (delegate to cognitive module) ---
|
|
212
|
-
if (deps.workspaceHandler) {
|
|
213
|
-
const wh = deps.workspaceHandler;
|
|
214
|
-
register(METHODS.WORKSPACE_EXECUTE, async (params: unknown) => {
|
|
215
|
-
try {
|
|
216
|
-
await wh.handleWorkspaceExecute(params);
|
|
217
|
-
} catch (err) {
|
|
218
|
-
console.warn(
|
|
219
|
-
`[map-sidecar] Failed to handle workspace.execute: ${(err as Error).message}`,
|
|
220
|
-
);
|
|
221
|
-
}
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
// Return cleanup function
|
|
226
|
-
return () => {
|
|
227
|
-
for (const { method, handler } of handlers) {
|
|
228
|
-
connection.offNotification(method, handler);
|
|
229
|
-
}
|
|
230
|
-
handlers.length = 0;
|
|
231
|
-
};
|
|
232
|
-
}
|
package/src/map/index.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MAP Sidecar — connects macro-agent to an OpenHive MAP hub.
|
|
3
|
-
*
|
|
4
|
-
* @module map
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
export { createMAPSidecar } from "./sidecar.js";
|
|
8
|
-
export { createMAPServerInstance } from "./server.js";
|
|
9
|
-
|
|
10
|
-
export type {
|
|
11
|
-
MAPSidecar,
|
|
12
|
-
MAPSidecarConfig,
|
|
13
|
-
MAPSidecarDeps,
|
|
14
|
-
MAPServerInstance,
|
|
15
|
-
MapServerConfig,
|
|
16
|
-
TrajectoryCheckpointPayload,
|
|
17
|
-
TrajectoryCheckpointResult,
|
|
18
|
-
} from "./types.js";
|
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Lifecycle Bridge — translates AgentManager lifecycle events to MAP agent primitives.
|
|
3
|
-
*
|
|
4
|
-
* When agents are spawned or terminated in macro-agent, this bridge registers/unregisters
|
|
5
|
-
* them with the MAP hub so they appear in OpenHive's agent discovery.
|
|
6
|
-
*
|
|
7
|
-
* @module map/lifecycle-bridge
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import type { AgentLifecycleCallback } from "../agent/types.js";
|
|
11
|
-
import type { AgentStore } from "../agent/agent-store.js";
|
|
12
|
-
import type { TaskBridge } from "./types.js";
|
|
13
|
-
|
|
14
|
-
/** Minimal interface for the MAP connection methods we need */
|
|
15
|
-
export interface LifecycleBridgeConnection {
|
|
16
|
-
callExtension(method: string, params?: unknown): Promise<unknown>;
|
|
17
|
-
get isConnected(): boolean;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
interface RegisteredAgent {
|
|
21
|
-
id: string;
|
|
22
|
-
name: string;
|
|
23
|
-
role: string;
|
|
24
|
-
/** MAP-assigned agent ID (ULID) from the hub, used for unregistration */
|
|
25
|
-
mapId?: string;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Create a lifecycle bridge that translates agent lifecycle events to MAP calls.
|
|
30
|
-
*
|
|
31
|
-
* Returns an `AgentLifecycleCallback` to register via `agentManager.onLifecycleEvent()`,
|
|
32
|
-
* plus a `cleanup()` function to unregister all tracked agents on shutdown.
|
|
33
|
-
*/
|
|
34
|
-
export function createLifecycleBridge(
|
|
35
|
-
connection: LifecycleBridgeConnection,
|
|
36
|
-
agentStore: AgentStore,
|
|
37
|
-
scope: string,
|
|
38
|
-
taskBridge?: TaskBridge,
|
|
39
|
-
getLocalMapId?: (localAgentId: string) => string | undefined,
|
|
40
|
-
): {
|
|
41
|
-
callback: AgentLifecycleCallback;
|
|
42
|
-
cleanup: () => Promise<void>;
|
|
43
|
-
/**
|
|
44
|
-
* Resolve true once the named agent has completed `map/agents/register`
|
|
45
|
-
* with the hub (its entry.mapId is populated). Used by the dispatch
|
|
46
|
-
* spawn-agent handler to barrier-wait for hub-side registration before
|
|
47
|
-
* returning, so the orchestrator's subsequent `findAcpAgentInfo` lookup
|
|
48
|
-
* doesn't race the registration.
|
|
49
|
-
*
|
|
50
|
-
* Returns false if the timeout elapses before registration completes.
|
|
51
|
-
*/
|
|
52
|
-
awaitRegistration: (agentId: string, timeoutMs?: number) => Promise<boolean>;
|
|
53
|
-
/**
|
|
54
|
-
* Reverse-lookup: hub-assigned MAP ULID → local agent id. Used by the
|
|
55
|
-
* `map/dispatch/message` handler in the sidecar to translate envelope
|
|
56
|
-
* recipients (which the hub addresses by MAP ULID) into local agent ids
|
|
57
|
-
* (which the inbox addresses messages by). Returns undefined when no
|
|
58
|
-
* registered agent matches.
|
|
59
|
-
*/
|
|
60
|
-
findLocalAgentByMapId: (mapId: string) => string | undefined;
|
|
61
|
-
} {
|
|
62
|
-
const registered = new Map<string, RegisteredAgent>();
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Poll for the local MAP server's assigned ID for an agent.
|
|
66
|
-
* The local MAP server and the lifecycle bridge both listen to the same
|
|
67
|
-
* lifecycle callback, so they may fire in any order. Poll briefly to handle
|
|
68
|
-
* the race.
|
|
69
|
-
*/
|
|
70
|
-
async function waitForLocalMapId(localAgentId: string, timeoutMs = 500): Promise<string | undefined> {
|
|
71
|
-
if (!getLocalMapId) return undefined;
|
|
72
|
-
const deadline = Date.now() + timeoutMs;
|
|
73
|
-
while (Date.now() < deadline) {
|
|
74
|
-
const id = getLocalMapId(localAgentId);
|
|
75
|
-
if (id) return id;
|
|
76
|
-
await new Promise((r) => setTimeout(r, 20));
|
|
77
|
-
}
|
|
78
|
-
return getLocalMapId(localAgentId);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
const callback: AgentLifecycleCallback = (event) => {
|
|
82
|
-
if (!connection.isConnected) return;
|
|
83
|
-
|
|
84
|
-
switch (event.type) {
|
|
85
|
-
case "spawned": {
|
|
86
|
-
const agent = event.agent;
|
|
87
|
-
const name = agent.name ?? agent.id;
|
|
88
|
-
const role = agent.role ?? "worker";
|
|
89
|
-
const entry: RegisteredAgent = { id: agent.id, name, role };
|
|
90
|
-
registered.set(agent.id, entry);
|
|
91
|
-
|
|
92
|
-
// Build per-agent capabilities.
|
|
93
|
-
// Coordinators (head managers) support ACP for interactive chat.
|
|
94
|
-
const capabilities: Record<string, unknown> = {
|
|
95
|
-
messaging: { canReceive: true },
|
|
96
|
-
};
|
|
97
|
-
if (role === "coordinator") {
|
|
98
|
-
capabilities.protocols = ["acp"];
|
|
99
|
-
capabilities.acp = { version: "2024-10-07" };
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// Register agent with MAP hub (use map/agents/register to preserve
|
|
103
|
-
// per-agent capabilities; map/agents/spawn drops them).
|
|
104
|
-
// Include the local MAP server's ID in metadata so clients can route
|
|
105
|
-
// ACP messages to the correct agent on the macro-agent's own MAP server.
|
|
106
|
-
// Also include provider_session_id so OpenHive can find the underlying
|
|
107
|
-
// Claude Code JSONL transcript on disk for history recovery.
|
|
108
|
-
const agentMetadata = (agent as any).metadata as Record<string, unknown> | undefined;
|
|
109
|
-
const providerSessionId =
|
|
110
|
-
typeof agentMetadata?.provider_session_id === "string"
|
|
111
|
-
? agentMetadata.provider_session_id
|
|
112
|
-
: undefined;
|
|
113
|
-
(async () => {
|
|
114
|
-
const peerMapId = await waitForLocalMapId(agent.id);
|
|
115
|
-
try {
|
|
116
|
-
const result: any = await connection.callExtension("map/agents/register", {
|
|
117
|
-
name,
|
|
118
|
-
role,
|
|
119
|
-
capabilities,
|
|
120
|
-
metadata: {
|
|
121
|
-
// From the hub's perspective these IDs identify this agent on
|
|
122
|
-
// the macro-agent (peer) side. `peerAgentId` is macro-agent's
|
|
123
|
-
// internal store id; `peerMapId` is its local MAP server ULID.
|
|
124
|
-
// Hub callers use these to address the agent in routing
|
|
125
|
-
// (ACP streams target peerMapId, lifecycle ops use peerAgentId).
|
|
126
|
-
peerAgentId: agent.id,
|
|
127
|
-
peerMapId,
|
|
128
|
-
provider_session_id: providerSessionId,
|
|
129
|
-
parent: (agent as any).parent_id ?? undefined,
|
|
130
|
-
team: (agent as any).team ?? undefined,
|
|
131
|
-
cwd: (agent as any).cwd ?? undefined,
|
|
132
|
-
},
|
|
133
|
-
});
|
|
134
|
-
// Track the MAP-assigned agent ID for unregistration
|
|
135
|
-
const mapId = result?.agent?.id ?? result?.id;
|
|
136
|
-
if (mapId) {
|
|
137
|
-
entry.mapId = mapId;
|
|
138
|
-
}
|
|
139
|
-
} catch {
|
|
140
|
-
// Silent — MAP hub may be temporarily unavailable
|
|
141
|
-
}
|
|
142
|
-
})();
|
|
143
|
-
|
|
144
|
-
// Bridge task creation if agent has a task
|
|
145
|
-
if (taskBridge && (agent as any).task_id) {
|
|
146
|
-
taskBridge
|
|
147
|
-
.taskCreated({
|
|
148
|
-
id: (agent as any).task_id,
|
|
149
|
-
title: (agent as any).task ?? agent.name,
|
|
150
|
-
status: "open",
|
|
151
|
-
assignee: agent.id,
|
|
152
|
-
})
|
|
153
|
-
.catch(() => {});
|
|
154
|
-
}
|
|
155
|
-
break;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
case "stopped": {
|
|
159
|
-
const agent = event.agent;
|
|
160
|
-
const entry = registered.get(agent.id);
|
|
161
|
-
registered.delete(agent.id);
|
|
162
|
-
|
|
163
|
-
// Unregister agent from MAP hub (use MAP-assigned ID if available)
|
|
164
|
-
const unregId = entry?.mapId ?? agent.id;
|
|
165
|
-
connection
|
|
166
|
-
.callExtension("map/agents/unregister", {
|
|
167
|
-
agentId: unregId,
|
|
168
|
-
reason: event.reason ?? "stopped",
|
|
169
|
-
})
|
|
170
|
-
.catch(() => {
|
|
171
|
-
// Silent fallback
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
// Bridge task completion
|
|
175
|
-
if (taskBridge && (agent as any).task_id) {
|
|
176
|
-
const status =
|
|
177
|
-
event.reason === "completed" ? "completed" : "failed";
|
|
178
|
-
taskBridge
|
|
179
|
-
.taskStatusChanged(
|
|
180
|
-
(agent as any).task_id,
|
|
181
|
-
"in_progress",
|
|
182
|
-
status,
|
|
183
|
-
agent.id,
|
|
184
|
-
)
|
|
185
|
-
.catch(() => {});
|
|
186
|
-
}
|
|
187
|
-
break;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
};
|
|
191
|
-
|
|
192
|
-
const cleanup = async (): Promise<void> => {
|
|
193
|
-
if (!connection.isConnected) {
|
|
194
|
-
registered.clear();
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
// Unregister all tracked agents (use MAP-assigned IDs)
|
|
198
|
-
const promises = Array.from(registered.values()).map((entry) =>
|
|
199
|
-
connection
|
|
200
|
-
.callExtension("map/agents/unregister", {
|
|
201
|
-
agentId: entry.mapId ?? entry.id,
|
|
202
|
-
reason: "sidecar_shutdown",
|
|
203
|
-
})
|
|
204
|
-
.catch(() => {}),
|
|
205
|
-
);
|
|
206
|
-
await Promise.allSettled(promises);
|
|
207
|
-
registered.clear();
|
|
208
|
-
};
|
|
209
|
-
|
|
210
|
-
/**
|
|
211
|
-
* Block until the named agent's hub-side registration completes (entry
|
|
212
|
-
* has been assigned a mapId by the `map/agents/register` response) or
|
|
213
|
-
* the timeout elapses. Polls the local `registered` map.
|
|
214
|
-
*/
|
|
215
|
-
const awaitRegistration = async (
|
|
216
|
-
agentId: string,
|
|
217
|
-
timeoutMs = 5000,
|
|
218
|
-
): Promise<boolean> => {
|
|
219
|
-
const deadline = Date.now() + timeoutMs;
|
|
220
|
-
while (Date.now() < deadline) {
|
|
221
|
-
const entry = registered.get(agentId);
|
|
222
|
-
if (entry?.mapId) return true;
|
|
223
|
-
await new Promise((r) => setTimeout(r, 50));
|
|
224
|
-
}
|
|
225
|
-
return Boolean(registered.get(agentId)?.mapId);
|
|
226
|
-
};
|
|
227
|
-
|
|
228
|
-
const findLocalAgentByMapId = (mapId: string): string | undefined => {
|
|
229
|
-
for (const [localId, entry] of registered) {
|
|
230
|
-
if (entry.mapId === mapId) return localId;
|
|
231
|
-
}
|
|
232
|
-
return undefined;
|
|
233
|
-
};
|
|
234
|
-
|
|
235
|
-
return { callback, cleanup, awaitRegistration, findLocalAgentByMapId };
|
|
236
|
-
}
|
package/src/map/mail-bridge.ts
DELETED
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Mail Bridge — connects OpenHive's hub-side mail to macro-agent's local inbox.
|
|
3
|
-
*
|
|
4
|
-
* OpenHive's mail module (src/mail/index.ts) calls forwardTurnToSwarms() when
|
|
5
|
-
* a new mail turn lands in a conversation a swarm participates in. The hub
|
|
6
|
-
* sends a `mail/turn.received` JSON-RPC notification to the connected swarm
|
|
7
|
-
* sidecar via MAP. macro-agent's sidecar (this module) receives the
|
|
8
|
-
* notification, parses the turn content, and forwards it into the local
|
|
9
|
-
* agent-inbox so:
|
|
10
|
-
*
|
|
11
|
-
* 1. swarm-dispatch's MessagePort (boot-v2 wires `createAgentInboxPort`)
|
|
12
|
-
* sees the inbox delivery event and runs its classifier on the message.
|
|
13
|
-
* 2. The classifier recognizes `x-dispatch/work` schema and routes the
|
|
14
|
-
* prompt to a worker agent (existing or freshly spawned).
|
|
15
|
-
*
|
|
16
|
-
* Without this bridge, hub-side mail turns never reach macro-agent's
|
|
17
|
-
* dispatcher. The MessagePort is wired to local inbox events only.
|
|
18
|
-
*/
|
|
19
|
-
import type { InboxAdapter } from "../adapters/types.js";
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Subset of MAPClient surface this module needs. Mirrors the shape used by
|
|
23
|
-
* trajectory-reporter / coordination-handler — keeps the bridge testable
|
|
24
|
-
* without dragging in the full SDK type.
|
|
25
|
-
*/
|
|
26
|
-
export interface MailBridgeConnection {
|
|
27
|
-
onNotification(
|
|
28
|
-
method: string,
|
|
29
|
-
handler: (params: unknown) => void | Promise<void>,
|
|
30
|
-
): void;
|
|
31
|
-
offNotification(
|
|
32
|
-
method: string,
|
|
33
|
-
handler: (params: unknown) => void | Promise<void>,
|
|
34
|
-
): void;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Synthetic recipient registered on the local inbox to receive bridged
|
|
39
|
-
* turns. Choosing a stable name lets the macro-agent dispatcher (or any
|
|
40
|
-
* other inbox observer) filter on `to: BRIDGE_RECIPIENT_ID` if it cares
|
|
41
|
-
* about the source — but normally it doesn't, since the dispatcher's
|
|
42
|
-
* MessagePort matches on the `x-dispatch/work` schema in the payload, not
|
|
43
|
-
* on the recipient id.
|
|
44
|
-
*/
|
|
45
|
-
const BRIDGE_RECIPIENT_ID = "openhive-mail-bridge";
|
|
46
|
-
|
|
47
|
-
interface MailTurnReceivedParams {
|
|
48
|
-
conversation_id?: string;
|
|
49
|
-
turn_id?: string;
|
|
50
|
-
participant_id?: string;
|
|
51
|
-
content_type?: string;
|
|
52
|
-
content?: unknown;
|
|
53
|
-
thread_id?: string;
|
|
54
|
-
created_at?: string;
|
|
55
|
-
/** Importance hint from the hub. When present, drives wake/interrupt
|
|
56
|
-
* decisions via TriggerSystemV2's mapImportanceToWakeAction. */
|
|
57
|
-
importance?: string;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Parse the turn content into a JS object suitable for inbox routing.
|
|
62
|
-
* Returns null when the content is not parseable as JSON or doesn't look
|
|
63
|
-
* like an object payload (e.g., plain text mail turns).
|
|
64
|
-
*/
|
|
65
|
-
function parseTurnContent(
|
|
66
|
-
content: unknown,
|
|
67
|
-
contentType: string | undefined,
|
|
68
|
-
): Record<string, unknown> | null {
|
|
69
|
-
if (typeof content === "object" && content !== null) {
|
|
70
|
-
return content as Record<string, unknown>;
|
|
71
|
-
}
|
|
72
|
-
if (typeof content !== "string") return null;
|
|
73
|
-
// The hub serializes envelope objects via JSON.stringify and tags them
|
|
74
|
-
// application/json. We accept either explicit content type or a leading
|
|
75
|
-
// `{` to handle clients that omit the header.
|
|
76
|
-
if (
|
|
77
|
-
contentType === "application/json" ||
|
|
78
|
-
content.startsWith("{") ||
|
|
79
|
-
content.startsWith("[")
|
|
80
|
-
) {
|
|
81
|
-
try {
|
|
82
|
-
const parsed = JSON.parse(content);
|
|
83
|
-
return typeof parsed === "object" && parsed !== null
|
|
84
|
-
? (parsed as Record<string, unknown>)
|
|
85
|
-
: null;
|
|
86
|
-
} catch {
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
return null;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export interface MailBridgeOptions {
|
|
94
|
-
connection: MailBridgeConnection;
|
|
95
|
-
inboxAdapter: InboxAdapter;
|
|
96
|
-
/**
|
|
97
|
-
* The dispatcher agent ID used by swarm-dispatch's createAgentInboxPort.
|
|
98
|
-
* Messages must be delivered TO this ID so the MessagePort's onIncoming
|
|
99
|
-
* filter (event.agentId === dispatcherAgentId) fires correctly.
|
|
100
|
-
* When omitted the bridge falls back to BRIDGE_RECIPIENT_ID (inert —
|
|
101
|
-
* the MessagePort will never see the message).
|
|
102
|
-
*/
|
|
103
|
-
dispatcherAgentId?: string;
|
|
104
|
-
/**
|
|
105
|
-
* Optional logger for diagnostic output. The sidecar currently logs via
|
|
106
|
-
* console; swap if you want structured output.
|
|
107
|
-
*/
|
|
108
|
-
log?: (msg: string) => void;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Wire the mail bridge. Returns a cleanup function that detaches the
|
|
113
|
-
* notification handler.
|
|
114
|
-
*
|
|
115
|
-
* Idempotent registration: register is called exactly once; the handler
|
|
116
|
-
* itself is best-effort (errors are caught and logged so a malformed turn
|
|
117
|
-
* doesn't break subsequent ones).
|
|
118
|
-
*/
|
|
119
|
-
export async function setupMailBridge(
|
|
120
|
-
opts: MailBridgeOptions,
|
|
121
|
-
): Promise<() => void> {
|
|
122
|
-
const { connection, inboxAdapter, dispatcherAgentId, log = () => {} } = opts;
|
|
123
|
-
|
|
124
|
-
// Determine the inbox recipient. When a dispatcherAgentId is provided we
|
|
125
|
-
// deliver directly to the dispatcher so createAgentInboxPort.onIncoming
|
|
126
|
-
// (which filters event.agentId === dispatcherAgentId) picks it up.
|
|
127
|
-
const recipientId = dispatcherAgentId ?? BRIDGE_RECIPIENT_ID;
|
|
128
|
-
|
|
129
|
-
// Register the recipient on the local inbox so routeMessage accepts the
|
|
130
|
-
// forwarded turn. Idempotent — registerAgent putAgent is an upsert.
|
|
131
|
-
await inboxAdapter.registerAgent(recipientId, {
|
|
132
|
-
name: dispatcherAgentId ? "OpenHive Dispatcher (bridged)" : "OpenHive Mail Bridge",
|
|
133
|
-
role: dispatcherAgentId ? "dispatcher" : "mail-bridge",
|
|
134
|
-
scope: "default",
|
|
135
|
-
metadata: { source: "openhive-mail-forward" },
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
const handler = async (params: unknown): Promise<void> => {
|
|
139
|
-
const turn = (params ?? {}) as MailTurnReceivedParams;
|
|
140
|
-
const raw = parseTurnContent(turn.content, turn.content_type);
|
|
141
|
-
if (!raw) {
|
|
142
|
-
log(
|
|
143
|
-
`[mail-bridge] Dropping non-JSON turn (conv=${turn.conversation_id ?? "?"} ` +
|
|
144
|
-
`participant=${turn.participant_id ?? "?"})`,
|
|
145
|
-
);
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
// Translate hub envelope shape { type, body } → canonical inbox shape
|
|
150
|
-
// { schema, data } that classifyMessage in boot-v2 expects.
|
|
151
|
-
// Hub sends: { type: "x-dispatch/work", body: { prompt, taskId, role } }
|
|
152
|
-
// Classifier expects: { schema: "x-dispatch/work", data: { prompt, taskId, role } }
|
|
153
|
-
const hubType = (raw as { type?: string }).type;
|
|
154
|
-
const hubBody = (raw as { body?: Record<string, unknown> }).body;
|
|
155
|
-
const content: Record<string, unknown> =
|
|
156
|
-
hubType && hubBody
|
|
157
|
-
? { schema: hubType, data: hubBody }
|
|
158
|
-
: raw;
|
|
159
|
-
|
|
160
|
-
// Attach conversation_id as a top-level field in the payload so
|
|
161
|
-
// the mail-inbound consumer can thread it into the worker spawn.
|
|
162
|
-
// This lets the reply bridge look up which hub conversation to post
|
|
163
|
-
// the worker's output back to.
|
|
164
|
-
//
|
|
165
|
-
// IMPORTANT: include `type: "data"` so agent-inbox's normalizeContent()
|
|
166
|
-
// passes the object through unchanged. Without it, an object lacking
|
|
167
|
-
// a `type` string is re-wrapped as `{ type:"data", data: original }`,
|
|
168
|
-
// burying `schema` one level deeper and breaking the consumer's filter.
|
|
169
|
-
const contentWithConvId: Record<string, unknown> = {
|
|
170
|
-
type: "data",
|
|
171
|
-
...content,
|
|
172
|
-
...(turn.conversation_id ? { _conversationId: turn.conversation_id } : {}),
|
|
173
|
-
};
|
|
174
|
-
|
|
175
|
-
// Derive importance from the hub's wire params. Default to "normal"
|
|
176
|
-
// when the hub doesn't tag the turn (backward compat).
|
|
177
|
-
const VALID_IMPORTANCE = ["low", "normal", "high", "urgent"];
|
|
178
|
-
const wireImportance =
|
|
179
|
-
typeof turn.importance === "string" &&
|
|
180
|
-
VALID_IMPORTANCE.includes(turn.importance)
|
|
181
|
-
? (turn.importance as "low" | "normal" | "high" | "urgent")
|
|
182
|
-
: "normal";
|
|
183
|
-
|
|
184
|
-
try {
|
|
185
|
-
await inboxAdapter.send(
|
|
186
|
-
turn.participant_id ?? "openhive-hub",
|
|
187
|
-
recipientId,
|
|
188
|
-
contentWithConvId as never,
|
|
189
|
-
{
|
|
190
|
-
threadTag: turn.thread_id,
|
|
191
|
-
importance: wireImportance,
|
|
192
|
-
},
|
|
193
|
-
);
|
|
194
|
-
log(
|
|
195
|
-
`[mail-bridge] Forwarded turn ${turn.turn_id ?? "?"} into local inbox ` +
|
|
196
|
-
`(schema=${(content as { schema?: string }).schema ?? "n/a"})`,
|
|
197
|
-
);
|
|
198
|
-
} catch (err) {
|
|
199
|
-
log(
|
|
200
|
-
`[mail-bridge] Forward failed for turn ${turn.turn_id ?? "?"}: ` +
|
|
201
|
-
`${(err as Error).message}`,
|
|
202
|
-
);
|
|
203
|
-
}
|
|
204
|
-
};
|
|
205
|
-
|
|
206
|
-
connection.onNotification("mail/turn.received", handler);
|
|
207
|
-
|
|
208
|
-
return () => {
|
|
209
|
-
try {
|
|
210
|
-
connection.offNotification("mail/turn.received", handler);
|
|
211
|
-
} catch {
|
|
212
|
-
// best effort
|
|
213
|
-
}
|
|
214
|
-
};
|
|
215
|
-
}
|