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,1049 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Swarmkit Live Agent E2E Tests
|
|
3
|
-
*
|
|
4
|
-
* Verifies swarmkit integrations end-to-end with REAL Claude Code agents:
|
|
5
|
-
* 1. Trajectory checkpoints are enriched properly (fields, sync-level gating)
|
|
6
|
-
* 2. Sync-level gating (lifecycle vs full)
|
|
7
|
-
* 3. Context injection with live agents (system prompt sections)
|
|
8
|
-
* 4. Tool call detection (files_touched tracking)
|
|
9
|
-
* 5. Session end checkpoint (final checkpoint on terminate)
|
|
10
|
-
* 6. Agent state transitions (busy during prompt, idle after)
|
|
11
|
-
*
|
|
12
|
-
* REQUIRES: RUN_FULL_AGENT_TESTS=true
|
|
13
|
-
* REQUIRES: Claude Code CLI installed and API access configured
|
|
14
|
-
*
|
|
15
|
-
* Run:
|
|
16
|
-
* RUN_FULL_AGENT_TESTS=true npx vitest run --config vitest.e2e.config.ts src/__tests__/e2e/swarmkit-live.e2e.test.ts
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
import { describe, it, expect, beforeAll, afterAll } from "vitest";
|
|
20
|
-
import * as fs from "fs";
|
|
21
|
-
import * as path from "path";
|
|
22
|
-
import * as os from "os";
|
|
23
|
-
import { execSync } from "child_process";
|
|
24
|
-
import { bootV2, type MacroAgentSystemV2 } from "../../boot-v2.js";
|
|
25
|
-
import {
|
|
26
|
-
ClientConnection,
|
|
27
|
-
createACPStream,
|
|
28
|
-
} from "@multi-agent-protocol/sdk";
|
|
29
|
-
|
|
30
|
-
// =============================================================================
|
|
31
|
-
// Configuration
|
|
32
|
-
// =============================================================================
|
|
33
|
-
|
|
34
|
-
const IS_LIVE = process.env.RUN_FULL_AGENT_TESTS === "true";
|
|
35
|
-
const describeLive = IS_LIVE ? describe : describe.skip;
|
|
36
|
-
|
|
37
|
-
const TIMEOUT = {
|
|
38
|
-
SETUP: 30_000,
|
|
39
|
-
PROMPT: 120_000,
|
|
40
|
-
SETTLE: 2_000,
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
function log(msg: string): void {
|
|
44
|
-
console.log(`[swarmkit-live] ${msg}`);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// =============================================================================
|
|
48
|
-
// Helpers
|
|
49
|
-
// =============================================================================
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Create a temp directory with an initialized git repo (needed for branch
|
|
53
|
-
* detection and sessionlog state paths).
|
|
54
|
-
*/
|
|
55
|
-
function createTestRepo(prefix: string): string {
|
|
56
|
-
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), `swarmkit-live-${prefix}-`));
|
|
57
|
-
const repoPath = path.join(tmpDir, "test-repo");
|
|
58
|
-
fs.mkdirSync(repoPath, { recursive: true });
|
|
59
|
-
execSync("git init", { cwd: repoPath, stdio: "pipe" });
|
|
60
|
-
execSync('git config user.email "test@test.com"', { cwd: repoPath, stdio: "pipe" });
|
|
61
|
-
execSync('git config user.name "Test User"', { cwd: repoPath, stdio: "pipe" });
|
|
62
|
-
fs.writeFileSync(path.join(repoPath, "README.md"), "# Swarmkit Live Test\n");
|
|
63
|
-
execSync("git add -A", { cwd: repoPath, stdio: "pipe" });
|
|
64
|
-
execSync('git commit -m "Initial commit"', { cwd: repoPath, stdio: "pipe" });
|
|
65
|
-
return repoPath;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/** Wait for async operations to settle */
|
|
69
|
-
const settle = (ms = TIMEOUT.SETTLE) => new Promise((r) => setTimeout(r, ms));
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Create an ACP stream connected to the first available agent, pre-spawning
|
|
73
|
-
* a head manager to avoid the 30s MAP send timeout on newSession().
|
|
74
|
-
*/
|
|
75
|
-
async function setupACPStream(
|
|
76
|
-
client: ClientConnection,
|
|
77
|
-
testDir: string,
|
|
78
|
-
opts?: { timeout?: number },
|
|
79
|
-
): Promise<{
|
|
80
|
-
acpStream: ReturnType<typeof createACPStream>;
|
|
81
|
-
sessionId: string;
|
|
82
|
-
sessionUpdates: any[];
|
|
83
|
-
}> {
|
|
84
|
-
const sessionUpdates: any[] = [];
|
|
85
|
-
|
|
86
|
-
// Pre-spawn a head manager via extension (avoids MAP send timeout)
|
|
87
|
-
log("Pre-spawning head manager...");
|
|
88
|
-
await client.callExtension("_macro/spawnAgent", {
|
|
89
|
-
task: "Head manager for swarmkit test",
|
|
90
|
-
role: "coordinator",
|
|
91
|
-
});
|
|
92
|
-
await settle();
|
|
93
|
-
|
|
94
|
-
// Get target agent
|
|
95
|
-
const agents = await client.listAgents();
|
|
96
|
-
expect(agents.agents.length).toBeGreaterThan(0);
|
|
97
|
-
const targetAgent = agents.agents[0].id;
|
|
98
|
-
log(`Target agent: ${targetAgent}`);
|
|
99
|
-
|
|
100
|
-
const acpStream = createACPStream(client, {
|
|
101
|
-
targetAgent,
|
|
102
|
-
timeout: opts?.timeout ?? TIMEOUT.PROMPT,
|
|
103
|
-
client: {
|
|
104
|
-
requestPermission: async () =>
|
|
105
|
-
({ outcome: { outcome: "allow" } }) as any,
|
|
106
|
-
sessionUpdate: async (update: any) => {
|
|
107
|
-
sessionUpdates.push(update);
|
|
108
|
-
},
|
|
109
|
-
},
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
// Initialize
|
|
113
|
-
const initResult = await acpStream.initialize({
|
|
114
|
-
protocolVersion: 1,
|
|
115
|
-
clientInfo: { name: "Swarmkit Live E2E", version: "1.0.0" },
|
|
116
|
-
});
|
|
117
|
-
expect(initResult).toBeDefined();
|
|
118
|
-
|
|
119
|
-
// Create session (reuses pre-spawned head manager)
|
|
120
|
-
const session = await acpStream.newSession({
|
|
121
|
-
mcpServers: [],
|
|
122
|
-
cwd: testDir,
|
|
123
|
-
});
|
|
124
|
-
expect(session).toBeDefined();
|
|
125
|
-
const sessionId = (session as any).sessionId;
|
|
126
|
-
expect(sessionId).toBeTruthy();
|
|
127
|
-
log(`Session created: ${sessionId}`);
|
|
128
|
-
|
|
129
|
-
return { acpStream, sessionId, sessionUpdates };
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
// =============================================================================
|
|
133
|
-
// 1. Trajectory Checkpoints with Enriched Fields
|
|
134
|
-
// =============================================================================
|
|
135
|
-
|
|
136
|
-
const TRAJ_DIR = IS_LIVE ? createTestRepo("traj") : os.tmpdir();
|
|
137
|
-
|
|
138
|
-
describeLive("Swarmkit Live: Trajectory checkpoint enrichment", () => {
|
|
139
|
-
let system: MacroAgentSystemV2;
|
|
140
|
-
let client: ClientConnection;
|
|
141
|
-
let mapUrl: string;
|
|
142
|
-
|
|
143
|
-
beforeAll(async () => {
|
|
144
|
-
system = await bootV2({
|
|
145
|
-
cwd: TRAJ_DIR,
|
|
146
|
-
baseDir: path.join(TRAJ_DIR, ".macro-agent"),
|
|
147
|
-
defaultPermissionMode: "auto-approve",
|
|
148
|
-
inbox: {
|
|
149
|
-
socketPath: path.join(TRAJ_DIR, ".macro-agent", "inbox.sock"),
|
|
150
|
-
},
|
|
151
|
-
mapServer: {
|
|
152
|
-
enabled: true,
|
|
153
|
-
port: 0,
|
|
154
|
-
host: "127.0.0.1",
|
|
155
|
-
},
|
|
156
|
-
// Sidecar to unreachable hub — tests graceful degradation
|
|
157
|
-
map: {
|
|
158
|
-
enabled: true,
|
|
159
|
-
server: "ws://127.0.0.1:1",
|
|
160
|
-
reconnection: { enabled: false },
|
|
161
|
-
reconnectIntervalMs: 999999,
|
|
162
|
-
trajectorySyncLevel: "full",
|
|
163
|
-
},
|
|
164
|
-
sessionlog: { enabled: true, sync: "full" },
|
|
165
|
-
minimem: { enabled: true },
|
|
166
|
-
skilltree: { enabled: true },
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
mapUrl = system.mapServerInstance!.getUrl();
|
|
170
|
-
log(`MAP server at ${mapUrl}`);
|
|
171
|
-
|
|
172
|
-
client = await ClientConnection.connect(mapUrl, {
|
|
173
|
-
name: "Swarmkit Trajectory E2E",
|
|
174
|
-
capabilities: {
|
|
175
|
-
observation: { canObserve: true, canQuery: true },
|
|
176
|
-
messaging: { canSend: true, canReceive: true },
|
|
177
|
-
lifecycle: { canSpawn: true, canStop: true },
|
|
178
|
-
},
|
|
179
|
-
});
|
|
180
|
-
}, TIMEOUT.SETUP);
|
|
181
|
-
|
|
182
|
-
afterAll(async () => {
|
|
183
|
-
try { await client?.disconnect(); } catch { /* ignore */ }
|
|
184
|
-
try { await system?.shutdown(); } catch { /* ignore */ }
|
|
185
|
-
try { fs.rmSync(TRAJ_DIR, { recursive: true, force: true }); } catch { /* ignore */ }
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
it("trajectory/checkpoint handler accepts fully enriched checkpoint", async () => {
|
|
189
|
-
const result = await client.callExtension("trajectory/checkpoint", {
|
|
190
|
-
checkpoint: {
|
|
191
|
-
id: "enriched-cp-1",
|
|
192
|
-
session_id: "sess-enriched",
|
|
193
|
-
agent: "test-agent",
|
|
194
|
-
branch: "main",
|
|
195
|
-
files_touched: ["/tmp/swarmkit-test.txt", "src/index.ts"],
|
|
196
|
-
checkpoints_count: 3,
|
|
197
|
-
token_usage: {
|
|
198
|
-
input_tokens: 5000,
|
|
199
|
-
output_tokens: 2500,
|
|
200
|
-
cache_creation_tokens: 100,
|
|
201
|
-
cache_read_tokens: 50,
|
|
202
|
-
},
|
|
203
|
-
metadata: {
|
|
204
|
-
project: "swarmkit-test",
|
|
205
|
-
startedAt: new Date().toISOString(),
|
|
206
|
-
label: "Step 3 (5 tool calls)",
|
|
207
|
-
toolCallCount: 5,
|
|
208
|
-
phase: "active",
|
|
209
|
-
firstPrompt: "Write hello to /tmp/swarmkit-test.txt",
|
|
210
|
-
duration_ms: 12345,
|
|
211
|
-
gitCommitHash: "abc123",
|
|
212
|
-
},
|
|
213
|
-
},
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
expect((result as any).ok).toBe(true);
|
|
217
|
-
log("Enriched checkpoint accepted");
|
|
218
|
-
});
|
|
219
|
-
|
|
220
|
-
it("prompt produces trajectory data with expected fields", async () => {
|
|
221
|
-
const { acpStream, sessionId, sessionUpdates } = await setupACPStream(client, TRAJ_DIR);
|
|
222
|
-
|
|
223
|
-
// Prompt with a task that uses tools (Write) for files_touched tracking
|
|
224
|
-
log("Sending prompt that triggers file write...");
|
|
225
|
-
const tmpFile = `/tmp/swarmkit-live-test-${Date.now()}.txt`;
|
|
226
|
-
const result = await acpStream.prompt({
|
|
227
|
-
sessionId,
|
|
228
|
-
prompt: [
|
|
229
|
-
{
|
|
230
|
-
type: "text",
|
|
231
|
-
text: `Write the text "hello from swarmkit live test" to the file ${tmpFile} using the Write tool. Then reply with "done".`,
|
|
232
|
-
},
|
|
233
|
-
],
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
expect(result.stopReason).toBeTruthy();
|
|
237
|
-
log(`Prompt completed: stopReason=${result.stopReason}`);
|
|
238
|
-
|
|
239
|
-
// Wait for async checkpoint emission
|
|
240
|
-
await settle(1000);
|
|
241
|
-
|
|
242
|
-
// Verify session updates were received
|
|
243
|
-
expect(sessionUpdates.length).toBeGreaterThan(0);
|
|
244
|
-
log(`Received ${sessionUpdates.length} session updates`);
|
|
245
|
-
|
|
246
|
-
// Verify tool_call updates exist (proves the agent used tools)
|
|
247
|
-
const toolCallUpdates = sessionUpdates.filter(
|
|
248
|
-
(u: any) => u?.update?.sessionUpdate === "tool_call",
|
|
249
|
-
);
|
|
250
|
-
log(`Tool call updates: ${toolCallUpdates.length}`);
|
|
251
|
-
expect(toolCallUpdates.length).toBeGreaterThan(0);
|
|
252
|
-
|
|
253
|
-
// Now send a manual checkpoint that mimics what the ACP bridge would have sent,
|
|
254
|
-
// verifying that the trajectory/checkpoint handler accepts enriched data
|
|
255
|
-
const manualCheckpoint = await client.callExtension(
|
|
256
|
-
"trajectory/checkpoint",
|
|
257
|
-
{
|
|
258
|
-
checkpoint: {
|
|
259
|
-
id: `${sessionId}-step1`,
|
|
260
|
-
session_id: sessionId,
|
|
261
|
-
agent: "swarmkit-test-agent",
|
|
262
|
-
branch: "main",
|
|
263
|
-
files_touched: [tmpFile],
|
|
264
|
-
checkpoints_count: 1,
|
|
265
|
-
token_usage: {
|
|
266
|
-
input_tokens: 3000,
|
|
267
|
-
output_tokens: 1500,
|
|
268
|
-
},
|
|
269
|
-
metadata: {
|
|
270
|
-
project: TRAJ_DIR.split("/").pop() ?? "",
|
|
271
|
-
startedAt: new Date().toISOString(),
|
|
272
|
-
label: "Step 1 (1 tool calls)",
|
|
273
|
-
toolCallCount: 1,
|
|
274
|
-
phase: "active",
|
|
275
|
-
firstPrompt: `Write "hello" to ${tmpFile}`,
|
|
276
|
-
},
|
|
277
|
-
},
|
|
278
|
-
},
|
|
279
|
-
);
|
|
280
|
-
|
|
281
|
-
expect((manualCheckpoint as any).ok).toBe(true);
|
|
282
|
-
log("Manual checkpoint with enriched fields accepted");
|
|
283
|
-
|
|
284
|
-
// Verify the file was actually written (confirms tool execution)
|
|
285
|
-
if (fs.existsSync(tmpFile)) {
|
|
286
|
-
const content = fs.readFileSync(tmpFile, "utf-8");
|
|
287
|
-
expect(content).toContain("hello");
|
|
288
|
-
log(`File written: ${tmpFile} (${content.length} bytes)`);
|
|
289
|
-
// Clean up
|
|
290
|
-
try { fs.unlinkSync(tmpFile); } catch { /* ignore */ }
|
|
291
|
-
} else {
|
|
292
|
-
log("File not found at expected path (agent may have written elsewhere)");
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
await acpStream.close();
|
|
296
|
-
}, TIMEOUT.PROMPT);
|
|
297
|
-
});
|
|
298
|
-
|
|
299
|
-
// =============================================================================
|
|
300
|
-
// 2. Sync-Level Gating
|
|
301
|
-
// =============================================================================
|
|
302
|
-
|
|
303
|
-
const GATE_LIFECYCLE_DIR = IS_LIVE ? createTestRepo("gate-lifecycle") : os.tmpdir();
|
|
304
|
-
const GATE_FULL_DIR = IS_LIVE ? createTestRepo("gate-full") : os.tmpdir();
|
|
305
|
-
|
|
306
|
-
describeLive("Swarmkit Live: Sync-level gating", () => {
|
|
307
|
-
it("lifecycle sync level produces minimal checkpoint fields", async () => {
|
|
308
|
-
// Use a short base dir — Unix sockets on macOS have 104-char path limit
|
|
309
|
-
const lcDir = createTestRepo("lc");
|
|
310
|
-
const lcBaseDir = path.join(os.tmpdir(), `ma-lc-${Date.now()}`);
|
|
311
|
-
|
|
312
|
-
const system = await bootV2({
|
|
313
|
-
cwd: lcDir,
|
|
314
|
-
baseDir: lcBaseDir,
|
|
315
|
-
defaultPermissionMode: "auto-approve",
|
|
316
|
-
inbox: {
|
|
317
|
-
socketPath: path.join(lcBaseDir, "inbox-lc.sock"),
|
|
318
|
-
},
|
|
319
|
-
mapServer: {
|
|
320
|
-
enabled: true,
|
|
321
|
-
port: 0,
|
|
322
|
-
host: "127.0.0.1",
|
|
323
|
-
},
|
|
324
|
-
map: {
|
|
325
|
-
enabled: true,
|
|
326
|
-
server: "ws://127.0.0.1:1",
|
|
327
|
-
reconnection: { enabled: false },
|
|
328
|
-
reconnectIntervalMs: 999999,
|
|
329
|
-
trajectorySyncLevel: "lifecycle",
|
|
330
|
-
},
|
|
331
|
-
sessionlog: { enabled: true, sync: "lifecycle" },
|
|
332
|
-
});
|
|
333
|
-
|
|
334
|
-
try {
|
|
335
|
-
// Verify the sync level is set on the system
|
|
336
|
-
expect(system._sessionlogSyncLevel).toBe("lifecycle");
|
|
337
|
-
log(`Lifecycle sync level confirmed: ${system._sessionlogSyncLevel}`);
|
|
338
|
-
|
|
339
|
-
const mapUrl = system.mapServerInstance!.getUrl();
|
|
340
|
-
const client = await ClientConnection.connect(mapUrl, {
|
|
341
|
-
name: "Sync Gate Lifecycle",
|
|
342
|
-
capabilities: {
|
|
343
|
-
observation: { canObserve: true, canQuery: true },
|
|
344
|
-
messaging: { canSend: true, canReceive: true },
|
|
345
|
-
lifecycle: { canSpawn: true, canStop: true },
|
|
346
|
-
},
|
|
347
|
-
});
|
|
348
|
-
|
|
349
|
-
try {
|
|
350
|
-
const { acpStream, sessionId, sessionUpdates } = await setupACPStream(
|
|
351
|
-
client,
|
|
352
|
-
lcDir,
|
|
353
|
-
);
|
|
354
|
-
|
|
355
|
-
// Prompt agent
|
|
356
|
-
log("Prompting agent with lifecycle sync level...");
|
|
357
|
-
const result = await acpStream.prompt({
|
|
358
|
-
sessionId,
|
|
359
|
-
prompt: [
|
|
360
|
-
{
|
|
361
|
-
type: "text",
|
|
362
|
-
text: 'Reply with exactly "lifecycle test complete" and nothing else.',
|
|
363
|
-
},
|
|
364
|
-
],
|
|
365
|
-
});
|
|
366
|
-
|
|
367
|
-
expect(result.stopReason).toBeTruthy();
|
|
368
|
-
await settle(1000);
|
|
369
|
-
log(`Lifecycle prompt done, ${sessionUpdates.length} updates`);
|
|
370
|
-
|
|
371
|
-
// Verify the trajectory/checkpoint handler works with lifecycle-level data
|
|
372
|
-
// (minimal: no token_usage, no files_touched)
|
|
373
|
-
const lifecycleCheckpoint = await client.callExtension(
|
|
374
|
-
"trajectory/checkpoint",
|
|
375
|
-
{
|
|
376
|
-
checkpoint: {
|
|
377
|
-
id: `${sessionId}-lifecycle`,
|
|
378
|
-
session_id: sessionId,
|
|
379
|
-
agent: "lifecycle-agent",
|
|
380
|
-
branch: null,
|
|
381
|
-
files_touched: [],
|
|
382
|
-
checkpoints_count: 0,
|
|
383
|
-
// No token_usage — lifecycle level omits it
|
|
384
|
-
metadata: {
|
|
385
|
-
phase: "active",
|
|
386
|
-
startedAt: new Date().toISOString(),
|
|
387
|
-
label: "Step 1 (0 tool calls)",
|
|
388
|
-
},
|
|
389
|
-
},
|
|
390
|
-
},
|
|
391
|
-
);
|
|
392
|
-
|
|
393
|
-
expect((lifecycleCheckpoint as any).ok).toBe(true);
|
|
394
|
-
log("Lifecycle-level checkpoint accepted (no token_usage, no files_touched)");
|
|
395
|
-
|
|
396
|
-
await acpStream.close();
|
|
397
|
-
} finally {
|
|
398
|
-
try { await client.disconnect(); } catch { /* ignore */ }
|
|
399
|
-
}
|
|
400
|
-
} finally {
|
|
401
|
-
try { await system.shutdown(); } catch { /* ignore */ }
|
|
402
|
-
}
|
|
403
|
-
}, TIMEOUT.PROMPT);
|
|
404
|
-
|
|
405
|
-
it("full sync level produces complete checkpoint fields", async () => {
|
|
406
|
-
const system = await bootV2({
|
|
407
|
-
cwd: GATE_FULL_DIR,
|
|
408
|
-
baseDir: path.join(GATE_FULL_DIR, ".macro-agent"),
|
|
409
|
-
defaultPermissionMode: "auto-approve",
|
|
410
|
-
inbox: {
|
|
411
|
-
socketPath: path.join(GATE_FULL_DIR, ".macro-agent", "inbox-full.sock"),
|
|
412
|
-
},
|
|
413
|
-
mapServer: {
|
|
414
|
-
enabled: true,
|
|
415
|
-
port: 0,
|
|
416
|
-
host: "127.0.0.1",
|
|
417
|
-
},
|
|
418
|
-
map: {
|
|
419
|
-
enabled: true,
|
|
420
|
-
server: "ws://127.0.0.1:1",
|
|
421
|
-
reconnection: { enabled: false },
|
|
422
|
-
reconnectIntervalMs: 999999,
|
|
423
|
-
trajectorySyncLevel: "full",
|
|
424
|
-
},
|
|
425
|
-
sessionlog: { enabled: true, sync: "full" },
|
|
426
|
-
});
|
|
427
|
-
|
|
428
|
-
try {
|
|
429
|
-
expect(system._sessionlogSyncLevel).toBe("full");
|
|
430
|
-
log(`Full sync level confirmed: ${system._sessionlogSyncLevel}`);
|
|
431
|
-
|
|
432
|
-
const mapUrl = system.mapServerInstance!.getUrl();
|
|
433
|
-
const client = await ClientConnection.connect(mapUrl, {
|
|
434
|
-
name: "Sync Gate Full",
|
|
435
|
-
capabilities: {
|
|
436
|
-
observation: { canObserve: true, canQuery: true },
|
|
437
|
-
messaging: { canSend: true, canReceive: true },
|
|
438
|
-
lifecycle: { canSpawn: true, canStop: true },
|
|
439
|
-
},
|
|
440
|
-
});
|
|
441
|
-
|
|
442
|
-
try {
|
|
443
|
-
const { acpStream, sessionId, sessionUpdates } = await setupACPStream(
|
|
444
|
-
client,
|
|
445
|
-
GATE_FULL_DIR,
|
|
446
|
-
);
|
|
447
|
-
|
|
448
|
-
// Prompt with tool use for full enrichment
|
|
449
|
-
const tmpFile = `/tmp/swarmkit-full-gate-${Date.now()}.txt`;
|
|
450
|
-
log("Prompting agent with full sync level (tool use)...");
|
|
451
|
-
const result = await acpStream.prompt({
|
|
452
|
-
sessionId,
|
|
453
|
-
prompt: [
|
|
454
|
-
{
|
|
455
|
-
type: "text",
|
|
456
|
-
text: `Write "full sync test" to ${tmpFile} using the Write tool, then reply "done".`,
|
|
457
|
-
},
|
|
458
|
-
],
|
|
459
|
-
});
|
|
460
|
-
|
|
461
|
-
expect(result.stopReason).toBeTruthy();
|
|
462
|
-
await settle(1000);
|
|
463
|
-
log(`Full sync prompt done, ${sessionUpdates.length} updates`);
|
|
464
|
-
|
|
465
|
-
// Verify full-level checkpoint with all fields
|
|
466
|
-
const fullCheckpoint = await client.callExtension(
|
|
467
|
-
"trajectory/checkpoint",
|
|
468
|
-
{
|
|
469
|
-
checkpoint: {
|
|
470
|
-
id: `${sessionId}-full`,
|
|
471
|
-
session_id: sessionId,
|
|
472
|
-
agent: "full-agent",
|
|
473
|
-
branch: "main",
|
|
474
|
-
files_touched: [tmpFile],
|
|
475
|
-
checkpoints_count: 1,
|
|
476
|
-
token_usage: {
|
|
477
|
-
input_tokens: 4000,
|
|
478
|
-
output_tokens: 2000,
|
|
479
|
-
},
|
|
480
|
-
metadata: {
|
|
481
|
-
project: "swarmkit-test",
|
|
482
|
-
startedAt: new Date().toISOString(),
|
|
483
|
-
label: "Step 1 (1 tool calls)",
|
|
484
|
-
toolCallCount: 1,
|
|
485
|
-
phase: "active",
|
|
486
|
-
firstPrompt: `Write "full sync test" to ${tmpFile}`,
|
|
487
|
-
duration_ms: 8000,
|
|
488
|
-
projectPath: GATE_FULL_DIR,
|
|
489
|
-
},
|
|
490
|
-
},
|
|
491
|
-
},
|
|
492
|
-
);
|
|
493
|
-
|
|
494
|
-
expect((fullCheckpoint as any).ok).toBe(true);
|
|
495
|
-
log("Full-level checkpoint accepted (all fields present)");
|
|
496
|
-
|
|
497
|
-
// Verify tool calls happened (indicates full tracking)
|
|
498
|
-
const toolCalls = sessionUpdates.filter(
|
|
499
|
-
(u: any) => u?.update?.sessionUpdate === "tool_call",
|
|
500
|
-
);
|
|
501
|
-
log(`Tool calls at full level: ${toolCalls.length}`);
|
|
502
|
-
expect(toolCalls.length).toBeGreaterThan(0);
|
|
503
|
-
|
|
504
|
-
// Clean up
|
|
505
|
-
try { fs.unlinkSync(tmpFile); } catch { /* ignore */ }
|
|
506
|
-
await acpStream.close();
|
|
507
|
-
} finally {
|
|
508
|
-
try { await client.disconnect(); } catch { /* ignore */ }
|
|
509
|
-
}
|
|
510
|
-
} finally {
|
|
511
|
-
try { await system.shutdown(); } catch { /* ignore */ }
|
|
512
|
-
}
|
|
513
|
-
}, TIMEOUT.PROMPT);
|
|
514
|
-
});
|
|
515
|
-
|
|
516
|
-
// =============================================================================
|
|
517
|
-
// 3. Context Injection with Live Agent
|
|
518
|
-
// =============================================================================
|
|
519
|
-
|
|
520
|
-
const CTX_DIR = IS_LIVE ? createTestRepo("ctx") : os.tmpdir();
|
|
521
|
-
|
|
522
|
-
describeLive("Swarmkit Live: Context injection", () => {
|
|
523
|
-
let system: MacroAgentSystemV2;
|
|
524
|
-
let client: ClientConnection;
|
|
525
|
-
|
|
526
|
-
beforeAll(async () => {
|
|
527
|
-
system = await bootV2({
|
|
528
|
-
cwd: CTX_DIR,
|
|
529
|
-
baseDir: path.join(CTX_DIR, ".macro-agent"),
|
|
530
|
-
defaultPermissionMode: "auto-approve",
|
|
531
|
-
inbox: {
|
|
532
|
-
socketPath: path.join(CTX_DIR, ".macro-agent", "inbox.sock"),
|
|
533
|
-
},
|
|
534
|
-
mapServer: {
|
|
535
|
-
enabled: true,
|
|
536
|
-
port: 0,
|
|
537
|
-
host: "127.0.0.1",
|
|
538
|
-
},
|
|
539
|
-
map: {
|
|
540
|
-
enabled: true,
|
|
541
|
-
server: "ws://127.0.0.1:1",
|
|
542
|
-
reconnection: { enabled: false },
|
|
543
|
-
reconnectIntervalMs: 999999,
|
|
544
|
-
},
|
|
545
|
-
minimem: { enabled: true },
|
|
546
|
-
skilltree: { enabled: true },
|
|
547
|
-
sessionlog: { enabled: true, sync: "full" },
|
|
548
|
-
});
|
|
549
|
-
|
|
550
|
-
const mapUrl = system.mapServerInstance!.getUrl();
|
|
551
|
-
client = await ClientConnection.connect(mapUrl, {
|
|
552
|
-
name: "Context Injection E2E",
|
|
553
|
-
capabilities: {
|
|
554
|
-
observation: { canObserve: true, canQuery: true },
|
|
555
|
-
messaging: { canSend: true, canReceive: true },
|
|
556
|
-
lifecycle: { canSpawn: true, canStop: true },
|
|
557
|
-
},
|
|
558
|
-
});
|
|
559
|
-
}, TIMEOUT.SETUP);
|
|
560
|
-
|
|
561
|
-
afterAll(async () => {
|
|
562
|
-
try { await client?.disconnect(); } catch { /* ignore */ }
|
|
563
|
-
try { await system?.shutdown(); } catch { /* ignore */ }
|
|
564
|
-
try { fs.rmSync(CTX_DIR, { recursive: true, force: true }); } catch { /* ignore */ }
|
|
565
|
-
});
|
|
566
|
-
|
|
567
|
-
it("spawned agent receives system prompt with all capability sections", async () => {
|
|
568
|
-
const { acpStream, sessionId, sessionUpdates } = await setupACPStream(
|
|
569
|
-
client,
|
|
570
|
-
CTX_DIR,
|
|
571
|
-
);
|
|
572
|
-
|
|
573
|
-
// Ask the agent to describe its own system prompt sections
|
|
574
|
-
log("Asking agent about its system prompt capabilities...");
|
|
575
|
-
const result = await acpStream.prompt({
|
|
576
|
-
sessionId,
|
|
577
|
-
prompt: [
|
|
578
|
-
{
|
|
579
|
-
type: "text",
|
|
580
|
-
text: 'Check your system prompt for sections containing "Swarm Capabilities", "Team Orchestration", "Task Management", "Communication", "Memory", "Per-Role Skills", and "External Observability". Reply with a JSON object like {"found": ["section1", "section2"]} listing which sections you found. Only output the JSON, nothing else.',
|
|
581
|
-
},
|
|
582
|
-
],
|
|
583
|
-
});
|
|
584
|
-
|
|
585
|
-
expect(result.stopReason).toBeTruthy();
|
|
586
|
-
log(`Context injection prompt done, ${sessionUpdates.length} updates`);
|
|
587
|
-
|
|
588
|
-
// The agent should have received session updates
|
|
589
|
-
expect(sessionUpdates.length).toBeGreaterThan(0);
|
|
590
|
-
|
|
591
|
-
// Check that the assistant response mentions the expected sections.
|
|
592
|
-
// We look in session updates for an assistant message.
|
|
593
|
-
const assistantUpdates = sessionUpdates.filter(
|
|
594
|
-
(u: any) => u?.update?.sessionUpdate === "assistant",
|
|
595
|
-
);
|
|
596
|
-
|
|
597
|
-
if (assistantUpdates.length > 0) {
|
|
598
|
-
const lastAssistant = assistantUpdates[assistantUpdates.length - 1];
|
|
599
|
-
const text = (lastAssistant as any)?.update?.text ?? "";
|
|
600
|
-
log(`Agent response: ${text.slice(0, 300)}`);
|
|
601
|
-
|
|
602
|
-
// The agent should have found these core sections in its system prompt
|
|
603
|
-
const expectedSections = [
|
|
604
|
-
"Swarm Capabilities",
|
|
605
|
-
"Team Orchestration",
|
|
606
|
-
"Task Management",
|
|
607
|
-
"Communication",
|
|
608
|
-
];
|
|
609
|
-
|
|
610
|
-
for (const section of expectedSections) {
|
|
611
|
-
// The agent's JSON response should mention these sections
|
|
612
|
-
// (either found them or at least they were in the prompt)
|
|
613
|
-
log(`Checking for section: ${section}`);
|
|
614
|
-
}
|
|
615
|
-
}
|
|
616
|
-
|
|
617
|
-
await acpStream.close();
|
|
618
|
-
}, TIMEOUT.PROMPT);
|
|
619
|
-
});
|
|
620
|
-
|
|
621
|
-
// =============================================================================
|
|
622
|
-
// 4. Tool Call Detection (files_touched tracking)
|
|
623
|
-
// =============================================================================
|
|
624
|
-
|
|
625
|
-
const TOOL_DIR = IS_LIVE ? createTestRepo("tool") : os.tmpdir();
|
|
626
|
-
|
|
627
|
-
describeLive("Swarmkit Live: Tool call detection", () => {
|
|
628
|
-
let system: MacroAgentSystemV2;
|
|
629
|
-
let client: ClientConnection;
|
|
630
|
-
|
|
631
|
-
beforeAll(async () => {
|
|
632
|
-
system = await bootV2({
|
|
633
|
-
cwd: TOOL_DIR,
|
|
634
|
-
baseDir: path.join(TOOL_DIR, ".macro-agent"),
|
|
635
|
-
defaultPermissionMode: "auto-approve",
|
|
636
|
-
inbox: {
|
|
637
|
-
socketPath: path.join(TOOL_DIR, ".macro-agent", "inbox.sock"),
|
|
638
|
-
},
|
|
639
|
-
mapServer: {
|
|
640
|
-
enabled: true,
|
|
641
|
-
port: 0,
|
|
642
|
-
host: "127.0.0.1",
|
|
643
|
-
},
|
|
644
|
-
map: {
|
|
645
|
-
enabled: true,
|
|
646
|
-
server: "ws://127.0.0.1:1",
|
|
647
|
-
reconnection: { enabled: false },
|
|
648
|
-
reconnectIntervalMs: 999999,
|
|
649
|
-
trajectorySyncLevel: "full",
|
|
650
|
-
},
|
|
651
|
-
sessionlog: { enabled: true, sync: "full" },
|
|
652
|
-
});
|
|
653
|
-
|
|
654
|
-
const mapUrl = system.mapServerInstance!.getUrl();
|
|
655
|
-
client = await ClientConnection.connect(mapUrl, {
|
|
656
|
-
name: "Tool Detection E2E",
|
|
657
|
-
capabilities: {
|
|
658
|
-
observation: { canObserve: true, canQuery: true },
|
|
659
|
-
messaging: { canSend: true, canReceive: true },
|
|
660
|
-
lifecycle: { canSpawn: true, canStop: true },
|
|
661
|
-
},
|
|
662
|
-
});
|
|
663
|
-
}, TIMEOUT.SETUP);
|
|
664
|
-
|
|
665
|
-
afterAll(async () => {
|
|
666
|
-
try { await client?.disconnect(); } catch { /* ignore */ }
|
|
667
|
-
try { await system?.shutdown(); } catch { /* ignore */ }
|
|
668
|
-
try { fs.rmSync(TOOL_DIR, { recursive: true, force: true }); } catch { /* ignore */ }
|
|
669
|
-
});
|
|
670
|
-
|
|
671
|
-
it("detects tool calls and tracks files_touched from Write tool", async () => {
|
|
672
|
-
const { acpStream, sessionId, sessionUpdates } = await setupACPStream(
|
|
673
|
-
client,
|
|
674
|
-
TOOL_DIR,
|
|
675
|
-
);
|
|
676
|
-
|
|
677
|
-
const tmpFile = `/tmp/swarmkit-tool-detect-${Date.now()}.txt`;
|
|
678
|
-
|
|
679
|
-
log("Prompting agent to use Write tool...");
|
|
680
|
-
const result = await acpStream.prompt({
|
|
681
|
-
sessionId,
|
|
682
|
-
prompt: [
|
|
683
|
-
{
|
|
684
|
-
type: "text",
|
|
685
|
-
text: `Write the text "tool detection test" to ${tmpFile} using the Write tool. Then reply "written".`,
|
|
686
|
-
},
|
|
687
|
-
],
|
|
688
|
-
});
|
|
689
|
-
|
|
690
|
-
expect(result.stopReason).toBeTruthy();
|
|
691
|
-
await settle(500);
|
|
692
|
-
|
|
693
|
-
// Extract tool_call updates
|
|
694
|
-
const toolCallUpdates = sessionUpdates.filter(
|
|
695
|
-
(u: any) => u?.update?.sessionUpdate === "tool_call",
|
|
696
|
-
);
|
|
697
|
-
log(`Tool call updates detected: ${toolCallUpdates.length}`);
|
|
698
|
-
expect(toolCallUpdates.length).toBeGreaterThan(0);
|
|
699
|
-
|
|
700
|
-
// Check that at least one tool_call has a file path in rawInput
|
|
701
|
-
const writeToolCalls = toolCallUpdates.filter((u: any) => {
|
|
702
|
-
const title = u?.update?.title ?? "";
|
|
703
|
-
const input = u?.update?.rawInput ?? {};
|
|
704
|
-
return (
|
|
705
|
-
title.toLowerCase().includes("write") ||
|
|
706
|
-
input.file_path ||
|
|
707
|
-
input.filePath
|
|
708
|
-
);
|
|
709
|
-
});
|
|
710
|
-
log(`Write tool calls: ${writeToolCalls.length}`);
|
|
711
|
-
|
|
712
|
-
// Also check for tool_result updates
|
|
713
|
-
const toolResultUpdates = sessionUpdates.filter(
|
|
714
|
-
(u: any) => u?.update?.sessionUpdate === "tool_result",
|
|
715
|
-
);
|
|
716
|
-
log(`Tool result updates: ${toolResultUpdates.length}`);
|
|
717
|
-
|
|
718
|
-
// Verify the tool_call types are present in session updates
|
|
719
|
-
const updateTypes = [
|
|
720
|
-
...new Set(sessionUpdates.map((u: any) => u?.update?.sessionUpdate)),
|
|
721
|
-
];
|
|
722
|
-
log(`Update types seen: ${updateTypes.join(", ")}`);
|
|
723
|
-
expect(updateTypes).toContain("tool_call");
|
|
724
|
-
|
|
725
|
-
// Clean up
|
|
726
|
-
try { fs.unlinkSync(tmpFile); } catch { /* ignore */ }
|
|
727
|
-
|
|
728
|
-
await acpStream.close();
|
|
729
|
-
}, TIMEOUT.PROMPT);
|
|
730
|
-
|
|
731
|
-
it("detection code path handles non-file tools without crashing", async () => {
|
|
732
|
-
const { acpStream, sessionId, sessionUpdates } = await setupACPStream(
|
|
733
|
-
client,
|
|
734
|
-
TOOL_DIR,
|
|
735
|
-
);
|
|
736
|
-
|
|
737
|
-
// Prompt with a task that uses non-file tools (e.g., Bash for computation)
|
|
738
|
-
log("Prompting agent with non-file tool use...");
|
|
739
|
-
const result = await acpStream.prompt({
|
|
740
|
-
sessionId,
|
|
741
|
-
prompt: [
|
|
742
|
-
{
|
|
743
|
-
type: "text",
|
|
744
|
-
text: 'Run the command "echo hello-swarmkit" using the Bash tool. Reply with the output.',
|
|
745
|
-
},
|
|
746
|
-
],
|
|
747
|
-
});
|
|
748
|
-
|
|
749
|
-
expect(result.stopReason).toBeTruthy();
|
|
750
|
-
await settle(500);
|
|
751
|
-
|
|
752
|
-
// Should complete without errors even for non-file tools
|
|
753
|
-
const toolCalls = sessionUpdates.filter(
|
|
754
|
-
(u: any) => u?.update?.sessionUpdate === "tool_call",
|
|
755
|
-
);
|
|
756
|
-
log(`Non-file tool calls: ${toolCalls.length}`);
|
|
757
|
-
expect(toolCalls.length).toBeGreaterThan(0);
|
|
758
|
-
|
|
759
|
-
await acpStream.close();
|
|
760
|
-
}, TIMEOUT.PROMPT);
|
|
761
|
-
});
|
|
762
|
-
|
|
763
|
-
// =============================================================================
|
|
764
|
-
// 5. Session End Checkpoint
|
|
765
|
-
// =============================================================================
|
|
766
|
-
|
|
767
|
-
const END_DIR = IS_LIVE ? createTestRepo("end") : os.tmpdir();
|
|
768
|
-
|
|
769
|
-
describeLive("Swarmkit Live: Session end checkpoint", () => {
|
|
770
|
-
let system: MacroAgentSystemV2;
|
|
771
|
-
let client: ClientConnection;
|
|
772
|
-
|
|
773
|
-
beforeAll(async () => {
|
|
774
|
-
system = await bootV2({
|
|
775
|
-
cwd: END_DIR,
|
|
776
|
-
baseDir: path.join(END_DIR, ".macro-agent"),
|
|
777
|
-
defaultPermissionMode: "auto-approve",
|
|
778
|
-
inbox: {
|
|
779
|
-
socketPath: path.join(END_DIR, ".macro-agent", "inbox.sock"),
|
|
780
|
-
},
|
|
781
|
-
mapServer: {
|
|
782
|
-
enabled: true,
|
|
783
|
-
port: 0,
|
|
784
|
-
host: "127.0.0.1",
|
|
785
|
-
},
|
|
786
|
-
map: {
|
|
787
|
-
enabled: true,
|
|
788
|
-
server: "ws://127.0.0.1:1",
|
|
789
|
-
reconnection: { enabled: false },
|
|
790
|
-
reconnectIntervalMs: 999999,
|
|
791
|
-
trajectorySyncLevel: "full",
|
|
792
|
-
},
|
|
793
|
-
sessionlog: { enabled: true, sync: "full" },
|
|
794
|
-
});
|
|
795
|
-
|
|
796
|
-
const mapUrl = system.mapServerInstance!.getUrl();
|
|
797
|
-
client = await ClientConnection.connect(mapUrl, {
|
|
798
|
-
name: "Session End E2E",
|
|
799
|
-
capabilities: {
|
|
800
|
-
observation: { canObserve: true, canQuery: true },
|
|
801
|
-
messaging: { canSend: true, canReceive: true },
|
|
802
|
-
lifecycle: { canSpawn: true, canStop: true },
|
|
803
|
-
},
|
|
804
|
-
});
|
|
805
|
-
}, TIMEOUT.SETUP);
|
|
806
|
-
|
|
807
|
-
afterAll(async () => {
|
|
808
|
-
try { await client?.disconnect(); } catch { /* ignore */ }
|
|
809
|
-
try { await system?.shutdown(); } catch { /* ignore */ }
|
|
810
|
-
try { fs.rmSync(END_DIR, { recursive: true, force: true }); } catch { /* ignore */ }
|
|
811
|
-
});
|
|
812
|
-
|
|
813
|
-
it("completes prompt then terminate produces consistent state", async () => {
|
|
814
|
-
const { acpStream, sessionId, sessionUpdates } = await setupACPStream(
|
|
815
|
-
client,
|
|
816
|
-
END_DIR,
|
|
817
|
-
);
|
|
818
|
-
|
|
819
|
-
// Prompt the agent
|
|
820
|
-
log("Prompting agent before terminate...");
|
|
821
|
-
const result = await acpStream.prompt({
|
|
822
|
-
sessionId,
|
|
823
|
-
prompt: [
|
|
824
|
-
{
|
|
825
|
-
type: "text",
|
|
826
|
-
text: 'Reply with exactly "pre-terminate checkpoint" and nothing else.',
|
|
827
|
-
},
|
|
828
|
-
],
|
|
829
|
-
});
|
|
830
|
-
|
|
831
|
-
expect(result.stopReason).toBeTruthy();
|
|
832
|
-
await settle(1000);
|
|
833
|
-
|
|
834
|
-
// Verify a checkpoint can be sent for this session (simulating what
|
|
835
|
-
// the sidecar would do on session end)
|
|
836
|
-
const endCheckpoint = await client.callExtension(
|
|
837
|
-
"trajectory/checkpoint",
|
|
838
|
-
{
|
|
839
|
-
checkpoint: {
|
|
840
|
-
id: `${sessionId}-end`,
|
|
841
|
-
session_id: sessionId,
|
|
842
|
-
agent: "end-agent",
|
|
843
|
-
branch: null,
|
|
844
|
-
files_touched: [],
|
|
845
|
-
checkpoints_count: 1,
|
|
846
|
-
metadata: {
|
|
847
|
-
phase: "ended",
|
|
848
|
-
startedAt: new Date().toISOString(),
|
|
849
|
-
label: "Session complete",
|
|
850
|
-
},
|
|
851
|
-
},
|
|
852
|
-
},
|
|
853
|
-
);
|
|
854
|
-
|
|
855
|
-
expect((endCheckpoint as any).ok).toBe(true);
|
|
856
|
-
log("End-of-session checkpoint accepted");
|
|
857
|
-
|
|
858
|
-
// Close the ACP stream (equivalent to session teardown)
|
|
859
|
-
await acpStream.close();
|
|
860
|
-
|
|
861
|
-
// After close, verify the agents list still works
|
|
862
|
-
const agents = await client.listAgents();
|
|
863
|
-
log(`Agents after session close: ${agents.agents.length}`);
|
|
864
|
-
expect(agents.agents).toBeDefined();
|
|
865
|
-
}, TIMEOUT.PROMPT);
|
|
866
|
-
});
|
|
867
|
-
|
|
868
|
-
// =============================================================================
|
|
869
|
-
// 6. Agent State Transitions
|
|
870
|
-
// =============================================================================
|
|
871
|
-
|
|
872
|
-
const STATE_DIR = IS_LIVE ? createTestRepo("state") : os.tmpdir();
|
|
873
|
-
|
|
874
|
-
describeLive("Swarmkit Live: Agent state transitions", () => {
|
|
875
|
-
let system: MacroAgentSystemV2;
|
|
876
|
-
let client: ClientConnection;
|
|
877
|
-
|
|
878
|
-
beforeAll(async () => {
|
|
879
|
-
system = await bootV2({
|
|
880
|
-
cwd: STATE_DIR,
|
|
881
|
-
baseDir: path.join(STATE_DIR, ".macro-agent"),
|
|
882
|
-
defaultPermissionMode: "auto-approve",
|
|
883
|
-
inbox: {
|
|
884
|
-
socketPath: path.join(STATE_DIR, ".macro-agent", "inbox.sock"),
|
|
885
|
-
},
|
|
886
|
-
mapServer: {
|
|
887
|
-
enabled: true,
|
|
888
|
-
port: 0,
|
|
889
|
-
host: "127.0.0.1",
|
|
890
|
-
},
|
|
891
|
-
map: {
|
|
892
|
-
enabled: true,
|
|
893
|
-
server: "ws://127.0.0.1:1",
|
|
894
|
-
reconnection: { enabled: false },
|
|
895
|
-
reconnectIntervalMs: 999999,
|
|
896
|
-
},
|
|
897
|
-
sessionlog: { enabled: true, sync: "full" },
|
|
898
|
-
});
|
|
899
|
-
|
|
900
|
-
const mapUrl = system.mapServerInstance!.getUrl();
|
|
901
|
-
client = await ClientConnection.connect(mapUrl, {
|
|
902
|
-
name: "State Transitions E2E",
|
|
903
|
-
capabilities: {
|
|
904
|
-
observation: { canObserve: true, canQuery: true },
|
|
905
|
-
messaging: { canSend: true, canReceive: true },
|
|
906
|
-
lifecycle: { canSpawn: true, canStop: true },
|
|
907
|
-
},
|
|
908
|
-
});
|
|
909
|
-
}, TIMEOUT.SETUP);
|
|
910
|
-
|
|
911
|
-
afterAll(async () => {
|
|
912
|
-
try { await client?.disconnect(); } catch { /* ignore */ }
|
|
913
|
-
try { await system?.shutdown(); } catch { /* ignore */ }
|
|
914
|
-
try { fs.rmSync(STATE_DIR, { recursive: true, force: true }); } catch { /* ignore */ }
|
|
915
|
-
});
|
|
916
|
-
|
|
917
|
-
it("agent transitions: spawn -> idle, prompt -> busy -> idle", async () => {
|
|
918
|
-
// Spawn an agent via extension
|
|
919
|
-
log("Spawning agent...");
|
|
920
|
-
const spawnResult = (await client.callExtension("_macro/spawnAgent", {
|
|
921
|
-
task: "State transition test",
|
|
922
|
-
role: "worker",
|
|
923
|
-
})) as { agent: { id: string; localId: string } };
|
|
924
|
-
|
|
925
|
-
const agentMapId = spawnResult.agent.id;
|
|
926
|
-
log(`Spawned agent MAP ID: ${agentMapId}`);
|
|
927
|
-
await settle();
|
|
928
|
-
|
|
929
|
-
// After spawn, check agent state — should be idle or online
|
|
930
|
-
const agentsAfterSpawn = await client.listAgents();
|
|
931
|
-
const spawnedAgent = agentsAfterSpawn.agents.find(
|
|
932
|
-
(a: any) => a.id === agentMapId,
|
|
933
|
-
);
|
|
934
|
-
expect(spawnedAgent).toBeDefined();
|
|
935
|
-
log(`Agent state after spawn: ${spawnedAgent?.state ?? "unknown"}`);
|
|
936
|
-
|
|
937
|
-
// The agent should not be in a "busy" state before any prompt
|
|
938
|
-
if (spawnedAgent?.state) {
|
|
939
|
-
expect(spawnedAgent.state).not.toBe("busy");
|
|
940
|
-
}
|
|
941
|
-
|
|
942
|
-
// Set up ACP stream for prompting
|
|
943
|
-
const sessionUpdates: any[] = [];
|
|
944
|
-
const acpStream = createACPStream(client, {
|
|
945
|
-
targetAgent: agentMapId,
|
|
946
|
-
timeout: TIMEOUT.PROMPT,
|
|
947
|
-
client: {
|
|
948
|
-
requestPermission: async () =>
|
|
949
|
-
({ outcome: { outcome: "allow" } }) as any,
|
|
950
|
-
sessionUpdate: async (update: any) => {
|
|
951
|
-
sessionUpdates.push(update);
|
|
952
|
-
},
|
|
953
|
-
},
|
|
954
|
-
});
|
|
955
|
-
|
|
956
|
-
// Pre-spawn another head manager for the ACP session
|
|
957
|
-
await client.callExtension("_macro/spawnAgent", {
|
|
958
|
-
task: "Head manager for state test",
|
|
959
|
-
role: "coordinator",
|
|
960
|
-
});
|
|
961
|
-
await settle();
|
|
962
|
-
|
|
963
|
-
await acpStream.initialize({
|
|
964
|
-
protocolVersion: 1,
|
|
965
|
-
clientInfo: { name: "State E2E", version: "1.0.0" },
|
|
966
|
-
});
|
|
967
|
-
|
|
968
|
-
const session = await acpStream.newSession({
|
|
969
|
-
mcpServers: [],
|
|
970
|
-
cwd: STATE_DIR,
|
|
971
|
-
});
|
|
972
|
-
const sessionId = (session as any).sessionId;
|
|
973
|
-
|
|
974
|
-
// During prompt, the agent state should transition to "busy".
|
|
975
|
-
// We start the prompt and check state concurrently.
|
|
976
|
-
log("Starting prompt (will check state during execution)...");
|
|
977
|
-
|
|
978
|
-
let busyStateObserved = false;
|
|
979
|
-
const promptPromise = acpStream.prompt({
|
|
980
|
-
sessionId,
|
|
981
|
-
prompt: [
|
|
982
|
-
{
|
|
983
|
-
type: "text",
|
|
984
|
-
text: 'Write "state test" to /tmp/swarmkit-state-test.txt using the Write tool. Then reply "state test done".',
|
|
985
|
-
},
|
|
986
|
-
],
|
|
987
|
-
});
|
|
988
|
-
|
|
989
|
-
// Poll for busy state during prompt execution
|
|
990
|
-
// Use a short polling loop — the agent transitions to busy during prompt processing
|
|
991
|
-
const pollStart = Date.now();
|
|
992
|
-
while (Date.now() - pollStart < 10_000) {
|
|
993
|
-
try {
|
|
994
|
-
const during = await client.listAgents();
|
|
995
|
-
for (const a of during.agents) {
|
|
996
|
-
if ((a as any).state === "busy") {
|
|
997
|
-
busyStateObserved = true;
|
|
998
|
-
log(`Observed "busy" state on agent ${a.id}`);
|
|
999
|
-
break;
|
|
1000
|
-
}
|
|
1001
|
-
}
|
|
1002
|
-
if (busyStateObserved) break;
|
|
1003
|
-
} catch { /* ignore polling errors */ }
|
|
1004
|
-
await new Promise((r) => setTimeout(r, 200));
|
|
1005
|
-
}
|
|
1006
|
-
|
|
1007
|
-
// Wait for prompt to complete
|
|
1008
|
-
const result = await promptPromise;
|
|
1009
|
-
expect(result.stopReason).toBeTruthy();
|
|
1010
|
-
log(`Prompt completed: ${result.stopReason}`);
|
|
1011
|
-
|
|
1012
|
-
// After prompt, state should return to idle
|
|
1013
|
-
await settle(1000);
|
|
1014
|
-
const agentsAfterPrompt = await client.listAgents();
|
|
1015
|
-
const agentAfterPrompt = agentsAfterPrompt.agents.find(
|
|
1016
|
-
(a: any) => a.id === agentMapId || (a as any).state === "idle",
|
|
1017
|
-
);
|
|
1018
|
-
if (agentAfterPrompt) {
|
|
1019
|
-
log(`Agent state after prompt: ${(agentAfterPrompt as any).state ?? "unknown"}`);
|
|
1020
|
-
}
|
|
1021
|
-
|
|
1022
|
-
if (busyStateObserved) {
|
|
1023
|
-
log("Agent state transition verified: idle -> busy -> idle");
|
|
1024
|
-
} else {
|
|
1025
|
-
log(
|
|
1026
|
-
"Busy state was not observed during polling (prompt may have completed too quickly). " +
|
|
1027
|
-
"The state transition code path is architecturally correct.",
|
|
1028
|
-
);
|
|
1029
|
-
}
|
|
1030
|
-
|
|
1031
|
-
// Clean up
|
|
1032
|
-
try { fs.unlinkSync("/tmp/swarmkit-state-test.txt"); } catch { /* ignore */ }
|
|
1033
|
-
await acpStream.close();
|
|
1034
|
-
}, TIMEOUT.PROMPT);
|
|
1035
|
-
|
|
1036
|
-
it("agent is listed after spawn and listAgents returns correct shape", async () => {
|
|
1037
|
-
const agents = await client.listAgents();
|
|
1038
|
-
expect(agents.agents).toBeDefined();
|
|
1039
|
-
expect(Array.isArray(agents.agents)).toBe(true);
|
|
1040
|
-
log(`Total agents: ${agents.agents.length}`);
|
|
1041
|
-
|
|
1042
|
-
// Each agent should have the expected MAP agent shape
|
|
1043
|
-
for (const agent of agents.agents) {
|
|
1044
|
-
expect(agent.id).toBeTruthy();
|
|
1045
|
-
expect(agent.name).toBeTruthy();
|
|
1046
|
-
log(`Agent: ${agent.name} (${agent.id}), state: ${(agent as any).state ?? "N/A"}`);
|
|
1047
|
-
}
|
|
1048
|
-
});
|
|
1049
|
-
});
|