macro-agent 0.0.10 → 0.0.12
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/.macro-agent/teams/self-driving/prompts/grinder.md +27 -0
- package/.macro-agent/teams/self-driving/prompts/judge.md +27 -0
- package/.macro-agent/teams/self-driving/prompts/planner.md +33 -0
- package/.macro-agent/teams/self-driving/roles/grinder.yaml +17 -0
- package/.macro-agent/teams/self-driving/roles/judge.yaml +24 -0
- package/.macro-agent/teams/self-driving/roles/planner.yaml +18 -0
- package/.macro-agent/teams/self-driving/team.yaml +103 -0
- package/.macro-agent/teams/structured/prompts/developer.md +26 -0
- package/.macro-agent/teams/structured/prompts/lead.md +25 -0
- package/.macro-agent/teams/structured/prompts/reviewer.md +24 -0
- package/.macro-agent/teams/structured/roles/developer.yaml +12 -0
- package/.macro-agent/teams/structured/roles/lead.yaml +11 -0
- package/.macro-agent/teams/structured/roles/reviewer.yaml +19 -0
- package/.macro-agent/teams/structured/team.yaml +89 -0
- package/.sudocode/issues.jsonl +56 -51
- package/.sudocode/specs.jsonl +8 -1
- package/CLAUDE.md +121 -30
- package/README.md +60 -3
- package/dist/acp/macro-agent.d.ts +4 -0
- package/dist/acp/macro-agent.d.ts.map +1 -1
- package/dist/acp/macro-agent.js +50 -4
- package/dist/acp/macro-agent.js.map +1 -1
- package/dist/acp/session-mapper.d.ts +20 -1
- package/dist/acp/session-mapper.d.ts.map +1 -1
- package/dist/acp/session-mapper.js +90 -1
- package/dist/acp/session-mapper.js.map +1 -1
- package/dist/acp/types.d.ts +24 -1
- package/dist/acp/types.d.ts.map +1 -1
- package/dist/acp/types.js.map +1 -1
- package/dist/agent/agent-manager.d.ts +40 -1
- package/dist/agent/agent-manager.d.ts.map +1 -1
- package/dist/agent/agent-manager.js +172 -8
- package/dist/agent/agent-manager.js.map +1 -1
- package/dist/agent/types.d.ts +22 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/agent/wake.d.ts +15 -0
- package/dist/agent/wake.d.ts.map +1 -1
- package/dist/agent/wake.js +15 -0
- package/dist/agent/wake.js.map +1 -1
- package/dist/agent-detection/command-builder.d.ts +30 -0
- package/dist/agent-detection/command-builder.d.ts.map +1 -0
- package/dist/agent-detection/command-builder.js +71 -0
- package/dist/agent-detection/command-builder.js.map +1 -0
- package/dist/agent-detection/detector.d.ts +84 -0
- package/dist/agent-detection/detector.d.ts.map +1 -0
- package/dist/agent-detection/detector.js +240 -0
- package/dist/agent-detection/detector.js.map +1 -0
- package/dist/agent-detection/index.d.ts +12 -0
- package/dist/agent-detection/index.d.ts.map +1 -0
- package/dist/agent-detection/index.js +14 -0
- package/dist/agent-detection/index.js.map +1 -0
- package/dist/agent-detection/registry.d.ts +53 -0
- package/dist/agent-detection/registry.d.ts.map +1 -0
- package/dist/agent-detection/registry.js +177 -0
- package/dist/agent-detection/registry.js.map +1 -0
- package/dist/agent-detection/types.d.ts +121 -0
- package/dist/agent-detection/types.d.ts.map +1 -0
- package/dist/agent-detection/types.js +20 -0
- package/dist/agent-detection/types.js.map +1 -0
- package/dist/api/server.d.ts +5 -1
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +362 -0
- package/dist/api/server.js.map +1 -1
- package/dist/api/types.d.ts +50 -1
- package/dist/api/types.d.ts.map +1 -1
- package/dist/cli/acp.d.ts +2 -0
- package/dist/cli/acp.d.ts.map +1 -1
- package/dist/cli/acp.js +8 -1
- package/dist/cli/acp.js.map +1 -1
- package/dist/cli/index.js +29 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/mcp.js +38 -0
- package/dist/cli/mcp.js.map +1 -1
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +2 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/project-config.d.ts +46 -0
- package/dist/config/project-config.d.ts.map +1 -0
- package/dist/config/project-config.js +68 -0
- package/dist/config/project-config.js.map +1 -0
- package/dist/lifecycle/cascade.d.ts +1 -1
- package/dist/lifecycle/cascade.d.ts.map +1 -1
- package/dist/lifecycle/handlers/index.d.ts +4 -0
- package/dist/lifecycle/handlers/index.d.ts.map +1 -1
- package/dist/lifecycle/handlers/index.js +2 -0
- package/dist/lifecycle/handlers/index.js.map +1 -1
- package/dist/lifecycle/handlers/worker.d.ts +4 -0
- package/dist/lifecycle/handlers/worker.d.ts.map +1 -1
- package/dist/lifecycle/handlers/worker.js +35 -3
- package/dist/lifecycle/handlers/worker.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.map +1 -1
- package/dist/map/adapter/acp-over-map.js +32 -2
- package/dist/map/adapter/acp-over-map.js.map +1 -1
- package/dist/map/adapter/event-translator.d.ts.map +1 -1
- package/dist/map/adapter/event-translator.js +4 -0
- package/dist/map/adapter/event-translator.js.map +1 -1
- 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/index.d.ts +10 -1
- package/dist/map/adapter/extensions/index.d.ts.map +1 -1
- package/dist/map/adapter/extensions/index.js +39 -0
- package/dist/map/adapter/extensions/index.js.map +1 -1
- 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/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/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 +34 -10
- package/dist/map/adapter/map-adapter.d.ts.map +1 -1
- package/dist/map/adapter/map-adapter.js +110 -14
- package/dist/map/adapter/map-adapter.js.map +1 -1
- package/dist/map/adapter/rpc-handler.d.ts +4 -1
- package/dist/map/adapter/rpc-handler.d.ts.map +1 -1
- package/dist/map/adapter/rpc-handler.js +6 -0
- package/dist/map/adapter/rpc-handler.js.map +1 -1
- package/dist/map/index.d.ts +1 -0
- package/dist/map/index.d.ts.map +1 -1
- package/dist/map/index.js +2 -0
- package/dist/map/index.js.map +1 -1
- package/dist/map/types.d.ts +3 -1
- package/dist/map/types.d.ts.map +1 -1
- package/dist/map/types.js.map +1 -1
- package/dist/mcp/mcp-server.d.ts +6 -0
- package/dist/mcp/mcp-server.d.ts.map +1 -1
- package/dist/mcp/mcp-server.js +45 -0
- package/dist/mcp/mcp-server.js.map +1 -1
- 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.d.ts +15 -2
- package/dist/mcp/tools/done.d.ts.map +1 -1
- package/dist/mcp/tools/done.js +45 -10
- package/dist/mcp/tools/done.js.map +1 -1
- 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/metrics/index.d.ts +2 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +2 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/metrics.d.ts +79 -0
- package/dist/metrics/metrics.d.ts.map +1 -0
- package/dist/metrics/metrics.js +166 -0
- package/dist/metrics/metrics.js.map +1 -0
- package/dist/roles/capabilities.d.ts +1 -0
- package/dist/roles/capabilities.d.ts.map +1 -1
- package/dist/roles/capabilities.js +3 -0
- package/dist/roles/capabilities.js.map +1 -1
- package/dist/roles/types.d.ts +1 -1
- package/dist/roles/types.d.ts.map +1 -1
- package/dist/router/channels.d.ts +2 -4
- package/dist/router/channels.d.ts.map +1 -1
- package/dist/router/channels.js.map +1 -1
- package/dist/router/message-router.d.ts +85 -9
- package/dist/router/message-router.d.ts.map +1 -1
- package/dist/router/message-router.js +203 -14
- package/dist/router/message-router.js.map +1 -1
- package/dist/router/role-resolver.d.ts +10 -1
- package/dist/router/role-resolver.d.ts.map +1 -1
- package/dist/router/role-resolver.js +15 -1
- package/dist/router/role-resolver.js.map +1 -1
- package/dist/router/types.d.ts +30 -1
- package/dist/router/types.d.ts.map +1 -1
- package/dist/router/types.js.map +1 -1
- package/dist/server/combined-server.d.ts +6 -0
- package/dist/server/combined-server.d.ts.map +1 -1
- package/dist/server/combined-server.js +24 -2
- package/dist/server/combined-server.js.map +1 -1
- package/dist/store/event-store.d.ts +14 -1
- package/dist/store/event-store.d.ts.map +1 -1
- package/dist/store/event-store.js +456 -4
- package/dist/store/event-store.js.map +1 -1
- package/dist/store/types/agents.d.ts +1 -1
- package/dist/store/types/agents.d.ts.map +1 -1
- 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/events.d.ts +1 -1
- package/dist/store/types/events.d.ts.map +1 -1
- package/dist/store/types/events.js.map +1 -1
- package/dist/store/types/index.d.ts +2 -0
- package/dist/store/types/index.d.ts.map +1 -1
- package/dist/store/types/index.js +2 -0
- package/dist/store/types/index.js.map +1 -1
- 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/tasks.d.ts +2 -0
- package/dist/store/types/tasks.d.ts.map +1 -1
- package/dist/task/backend/memory.d.ts +4 -1
- package/dist/task/backend/memory.d.ts.map +1 -1
- package/dist/task/backend/memory.js +81 -0
- package/dist/task/backend/memory.js.map +1 -1
- package/dist/task/backend/types.d.ts +30 -0
- package/dist/task/backend/types.d.ts.map +1 -1
- package/dist/task/backend/types.js.map +1 -1
- package/dist/teams/index.d.ts +4 -0
- package/dist/teams/index.d.ts.map +1 -0
- package/dist/teams/index.js +4 -0
- package/dist/teams/index.js.map +1 -0
- package/dist/teams/team-loader.d.ts +20 -0
- package/dist/teams/team-loader.d.ts.map +1 -0
- package/dist/teams/team-loader.js +293 -0
- package/dist/teams/team-loader.js.map +1 -0
- package/dist/teams/team-runtime.d.ts +139 -0
- package/dist/teams/team-runtime.d.ts.map +1 -0
- package/dist/teams/team-runtime.js +613 -0
- package/dist/teams/team-runtime.js.map +1 -0
- package/dist/teams/types.d.ts +266 -0
- package/dist/teams/types.d.ts.map +1 -0
- package/dist/teams/types.js +20 -0
- package/dist/teams/types.js.map +1 -0
- package/dist/trigger/router/trigger-router.d.ts +30 -3
- package/dist/trigger/router/trigger-router.d.ts.map +1 -1
- package/dist/trigger/router/trigger-router.js +30 -3
- package/dist/trigger/router/trigger-router.js.map +1 -1
- package/dist/trigger/wake/types.d.ts +31 -5
- package/dist/trigger/wake/types.d.ts.map +1 -1
- package/dist/trigger/wake/types.js +19 -0
- package/dist/trigger/wake/types.js.map +1 -1
- package/dist/workspace/dataplane-adapter.d.ts +1 -1
- package/dist/workspace/dataplane-adapter.d.ts.map +1 -1
- package/dist/workspace/dataplane-adapter.js +1 -1
- package/dist/workspace/dataplane-adapter.js.map +1 -1
- package/dist/workspace/index.d.ts +1 -1
- package/dist/workspace/index.d.ts.map +1 -1
- package/dist/workspace/strategies/index.d.ts +6 -0
- package/dist/workspace/strategies/index.d.ts.map +1 -0
- package/dist/workspace/strategies/index.js +5 -0
- package/dist/workspace/strategies/index.js.map +1 -0
- package/dist/workspace/strategies/optimistic.d.ts +26 -0
- package/dist/workspace/strategies/optimistic.d.ts.map +1 -0
- package/dist/workspace/strategies/optimistic.js +121 -0
- package/dist/workspace/strategies/optimistic.js.map +1 -0
- package/dist/workspace/strategies/queue.d.ts +26 -0
- package/dist/workspace/strategies/queue.d.ts.map +1 -0
- package/dist/workspace/strategies/queue.js +67 -0
- package/dist/workspace/strategies/queue.js.map +1 -0
- package/dist/workspace/strategies/registry.d.ts +37 -0
- package/dist/workspace/strategies/registry.d.ts.map +1 -0
- package/dist/workspace/strategies/registry.js +63 -0
- package/dist/workspace/strategies/registry.js.map +1 -0
- package/dist/workspace/strategies/trunk.d.ts +20 -0
- package/dist/workspace/strategies/trunk.d.ts.map +1 -0
- package/dist/workspace/strategies/trunk.js +108 -0
- package/dist/workspace/strategies/trunk.js.map +1 -0
- package/dist/workspace/strategies/types.d.ts +104 -0
- package/dist/workspace/strategies/types.d.ts.map +1 -0
- package/dist/workspace/strategies/types.js +11 -0
- package/dist/workspace/strategies/types.js.map +1 -0
- package/dist/workspace/types.d.ts +1 -1
- package/dist/workspace/types.d.ts.map +1 -1
- package/dist/workspace/workspace-manager.d.ts +1 -1
- package/dist/workspace/workspace-manager.d.ts.map +1 -1
- package/docs/implementation-details.md +1127 -0
- package/docs/implementation-summary.md +448 -0
- package/docs/mail-integration.md +608 -0
- package/docs/plan-self-driving-support.md +433 -0
- package/docs/spec-self-driving-support.md +462 -0
- package/docs/team-templates.md +860 -0
- package/docs/teams.md +233 -0
- package/package.json +5 -3
- package/src/acp/__tests__/integration.test.ts +161 -1
- package/src/acp/__tests__/macro-agent.test.ts +95 -0
- package/src/acp/__tests__/session-persistence.test.ts +276 -0
- package/src/acp/macro-agent.ts +79 -7
- package/src/acp/session-mapper.ts +108 -1
- package/src/acp/types.ts +33 -1
- package/src/agent/agent-manager.ts +278 -6
- package/src/agent/types.ts +27 -0
- package/src/agent/wake.ts +15 -0
- package/src/agent-detection/__tests__/command-builder.test.ts +336 -0
- package/src/agent-detection/__tests__/detector.test.ts +768 -0
- package/src/agent-detection/__tests__/registry.test.ts +254 -0
- package/src/agent-detection/command-builder.ts +90 -0
- package/src/agent-detection/detector.ts +307 -0
- package/src/agent-detection/index.ts +36 -0
- package/src/agent-detection/registry.ts +200 -0
- package/src/agent-detection/types.ts +184 -0
- package/src/api/__tests__/conversation-api.test.ts +468 -0
- package/src/api/server.ts +425 -1
- package/src/api/types.ts +64 -1
- package/src/cli/acp.ts +9 -1
- package/src/cli/index.ts +44 -0
- package/src/cli/mcp.ts +47 -0
- package/src/config/index.ts +9 -0
- package/src/config/project-config.ts +107 -0
- package/src/lifecycle/cascade.ts +1 -1
- package/src/lifecycle/handlers/index.ts +8 -0
- package/src/lifecycle/handlers/worker.ts +48 -3
- package/src/mail/__tests__/conversation-lifecycle.test.ts +409 -0
- package/src/mail/__tests__/eventstore-stores.test.ts +1073 -0
- package/src/mail/__tests__/mail-full-agent.e2e.test.ts +575 -0
- package/src/mail/__tests__/mail-integration.test.ts +759 -0
- package/src/mail/__tests__/mail-map-protocol.e2e.test.ts +1068 -0
- package/src/mail/__tests__/mail-service.test.ts +506 -0
- package/src/mail/__tests__/turn-recorder.test.ts +328 -0
- package/src/mail/conversation-map.ts +107 -0
- package/src/mail/index.ts +25 -0
- package/src/mail/mail-service.ts +257 -0
- package/src/mail/stores/eventstore-conversation-store.ts +146 -0
- package/src/mail/stores/eventstore-participant-store.ts +172 -0
- package/src/mail/stores/eventstore-thread-store.ts +129 -0
- package/src/mail/stores/eventstore-turn-store.ts +173 -0
- package/src/mail/stores/index.ts +12 -0
- package/src/mail/stores/types.ts +160 -0
- package/src/mail/turn-recorder.ts +124 -0
- package/src/map/README.md +79 -0
- package/src/map/adapter/__tests__/extensions.test.ts +359 -0
- package/src/map/adapter/__tests__/map-adapter.test.ts +90 -0
- package/src/map/adapter/__tests__/workspace-files.test.ts +673 -0
- package/src/map/adapter/acp-over-map.ts +45 -2
- package/src/map/adapter/event-translator.ts +4 -0
- package/src/map/adapter/extensions/agent-detection.ts +201 -0
- package/src/map/adapter/extensions/index.ts +63 -0
- package/src/map/adapter/extensions/resume.ts +114 -0
- package/src/map/adapter/extensions/workspace-files.ts +449 -0
- package/src/map/adapter/mail-handler-adapter.ts +429 -0
- package/src/map/adapter/map-adapter.ts +173 -27
- package/src/map/adapter/rpc-handler.ts +8 -1
- package/src/map/index.ts +3 -0
- package/src/map/types.ts +3 -1
- package/src/mcp/mcp-server.ts +67 -0
- package/src/mcp/tools/claim_task.ts +86 -0
- package/src/mcp/tools/done.ts +59 -10
- package/src/mcp/tools/list_claimable_tasks.ts +93 -0
- package/src/mcp/tools/unclaim_task.ts +71 -0
- package/src/metrics/index.ts +9 -0
- package/src/metrics/metrics.ts +280 -0
- package/src/roles/capabilities.ts +3 -0
- package/src/roles/types.ts +2 -1
- package/src/router/README.md +120 -0
- package/src/router/__tests__/message-router.test.ts +561 -0
- package/src/router/channels.ts +3 -4
- package/src/router/message-router.ts +308 -22
- package/src/router/role-resolver.ts +22 -1
- package/src/router/types.ts +36 -1
- package/src/server/combined-server.ts +36 -2
- package/src/store/README.md +134 -0
- package/src/store/event-store.ts +546 -3
- package/src/store/types/agents.ts +1 -1
- package/src/store/types/conversations.ts +129 -0
- package/src/store/types/events.ts +5 -1
- package/src/store/types/index.ts +2 -0
- package/src/store/types/sessions.ts +53 -0
- package/src/store/types/tasks.ts +3 -0
- package/src/task/backend/memory.ts +116 -0
- package/src/task/backend/types.ts +43 -0
- package/src/teams/__tests__/cross-subsystem.integration.test.ts +983 -0
- package/src/teams/__tests__/e2e/team-runtime.e2e.test.ts +553 -0
- package/src/teams/__tests__/team-system.test.ts +1280 -0
- package/src/teams/index.ts +13 -0
- package/src/teams/team-loader.ts +434 -0
- package/src/teams/team-runtime.ts +727 -0
- package/src/teams/types.ts +377 -0
- package/src/trigger/router/trigger-router.ts +30 -3
- package/src/trigger/wake/types.ts +32 -5
- package/src/trigger/wake/wake-manager.ts +2 -2
- package/src/workspace/dataplane-adapter.ts +1 -1
- package/src/workspace/index.ts +1 -1
- package/src/workspace/strategies/index.ts +18 -0
- package/src/workspace/strategies/optimistic.ts +136 -0
- package/src/workspace/strategies/queue.ts +81 -0
- package/src/workspace/strategies/registry.ts +89 -0
- package/src/workspace/strategies/trunk.ts +123 -0
- package/src/workspace/strategies/types.ts +145 -0
- package/src/workspace/types.ts +1 -1
- package/src/workspace/workspace-manager.ts +1 -1
- package/.claude/settings.local.json +0 -59
- package/dist/map/utils/address-translation.d.ts +0 -99
- package/dist/map/utils/address-translation.d.ts.map +0 -1
- package/dist/map/utils/address-translation.js +0 -285
- package/dist/map/utils/address-translation.js.map +0 -1
- package/dist/map/utils/index.d.ts +0 -7
- package/dist/map/utils/index.d.ts.map +0 -1
- package/dist/map/utils/index.js +0 -7
- package/dist/map/utils/index.js.map +0 -1
- package/openspec/AGENTS.md +0 -456
- package/openspec/changes/archive/2025-12-21-add-mvp-foundation/design.md +0 -128
- package/openspec/changes/archive/2025-12-21-add-mvp-foundation/proposal.md +0 -49
- package/openspec/changes/archive/2025-12-21-add-mvp-foundation/specs/agent-manager/spec.md +0 -150
- package/openspec/changes/archive/2025-12-21-add-mvp-foundation/specs/cli-api/spec.md +0 -258
- package/openspec/changes/archive/2025-12-21-add-mvp-foundation/specs/event-store/spec.md +0 -160
- package/openspec/changes/archive/2025-12-21-add-mvp-foundation/specs/mcp-tools/spec.md +0 -224
- package/openspec/changes/archive/2025-12-21-add-mvp-foundation/specs/message-router/spec.md +0 -153
- package/openspec/changes/archive/2025-12-21-add-mvp-foundation/specs/task-manager/spec.md +0 -136
- package/openspec/changes/archive/2025-12-21-add-mvp-foundation/tasks.md +0 -147
- package/openspec/project.md +0 -31
- package/openspec/specs/agent-manager/spec.md +0 -154
- package/openspec/specs/cli-api/spec.md +0 -262
- package/openspec/specs/event-store/spec.md +0 -164
- package/openspec/specs/mcp-tools/spec.md +0 -228
- package/openspec/specs/message-router/spec.md +0 -157
- package/openspec/specs/task-manager/spec.md +0 -140
- package/references/acp-factory-ref/CHANGELOG.md +0 -33
- package/references/acp-factory-ref/LICENSE +0 -21
- package/references/acp-factory-ref/README.md +0 -341
- package/references/acp-factory-ref/package-lock.json +0 -3102
- package/references/acp-factory-ref/package.json +0 -96
- package/references/acp-factory-ref/python/CHANGELOG.md +0 -33
- package/references/acp-factory-ref/python/LICENSE +0 -21
- package/references/acp-factory-ref/python/Makefile +0 -57
- package/references/acp-factory-ref/python/README.md +0 -253
- package/references/acp-factory-ref/python/pyproject.toml +0 -73
- package/references/acp-factory-ref/python/tests/__init__.py +0 -0
- package/references/acp-factory-ref/python/tests/e2e/__init__.py +0 -1
- package/references/acp-factory-ref/python/tests/e2e/test_codex_e2e.py +0 -349
- package/references/acp-factory-ref/python/tests/e2e/test_gemini_e2e.py +0 -165
- package/references/acp-factory-ref/python/tests/e2e/test_opencode_e2e.py +0 -296
- package/references/acp-factory-ref/python/tests/test_client_handler.py +0 -543
- package/references/acp-factory-ref/python/tests/test_pushable.py +0 -199
- package/references/claude-code-acp/.github/workflows/ci.yml +0 -45
- package/references/claude-code-acp/.github/workflows/publish.yml +0 -34
- package/references/claude-code-acp/.prettierrc.json +0 -4
- package/references/claude-code-acp/CHANGELOG.md +0 -249
- package/references/claude-code-acp/LICENSE +0 -222
- package/references/claude-code-acp/README.md +0 -53
- package/references/claude-code-acp/docs/RELEASES.md +0 -24
- package/references/claude-code-acp/eslint.config.js +0 -48
- package/references/claude-code-acp/package-lock.json +0 -4570
- package/references/claude-code-acp/package.json +0 -88
- package/references/claude-code-acp/scripts/release.sh +0 -119
- package/references/claude-code-acp/src/acp-agent.ts +0 -2065
- package/references/claude-code-acp/src/index.ts +0 -26
- package/references/claude-code-acp/src/lib.ts +0 -38
- package/references/claude-code-acp/src/mcp-server.ts +0 -911
- package/references/claude-code-acp/src/settings.ts +0 -522
- package/references/claude-code-acp/src/tests/.claude/commands/quick-math.md +0 -5
- package/references/claude-code-acp/src/tests/.claude/commands/say-hello.md +0 -6
- package/references/claude-code-acp/src/tests/acp-agent-fork.test.ts +0 -479
- package/references/claude-code-acp/src/tests/acp-agent.test.ts +0 -1502
- package/references/claude-code-acp/src/tests/extract-lines.test.ts +0 -103
- package/references/claude-code-acp/src/tests/fork-session.test.ts +0 -335
- package/references/claude-code-acp/src/tests/replace-and-calculate-location.test.ts +0 -334
- package/references/claude-code-acp/src/tests/settings.test.ts +0 -617
- package/references/claude-code-acp/src/tests/skills-options.test.ts +0 -187
- package/references/claude-code-acp/src/tests/tools.test.ts +0 -318
- package/references/claude-code-acp/src/tests/typescript-declarations.test.ts +0 -558
- package/references/claude-code-acp/src/tools.ts +0 -819
- package/references/claude-code-acp/src/utils.ts +0 -171
- package/references/claude-code-acp/tsconfig.json +0 -18
- package/references/claude-code-acp/vitest.config.ts +0 -19
- package/references/multi-agent-protocol/.sudocode/issues.jsonl +0 -82
- package/references/multi-agent-protocol/.sudocode/specs.jsonl +0 -9
- package/references/multi-agent-protocol/LICENSE +0 -21
- package/references/multi-agent-protocol/README.md +0 -113
- package/references/multi-agent-protocol/docs/00-design-specification.md +0 -460
- package/references/multi-agent-protocol/docs/01-open-questions.md +0 -1050
- package/references/multi-agent-protocol/docs/02-wire-protocol.md +0 -296
- package/references/multi-agent-protocol/docs/03-streaming-semantics.md +0 -252
- package/references/multi-agent-protocol/docs/04-error-handling.md +0 -231
- package/references/multi-agent-protocol/docs/05-connection-model.md +0 -244
- package/references/multi-agent-protocol/docs/06-visibility-permissions.md +0 -243
- package/references/multi-agent-protocol/docs/07-federation.md +0 -259
- package/references/multi-agent-protocol/docs/08-macro-agent-migration.md +0 -253
- package/references/multi-agent-protocol/package-lock.json +0 -3239
- package/references/multi-agent-protocol/package.json +0 -56
- package/references/multi-agent-protocol/schema/meta.json +0 -337
- package/references/multi-agent-protocol/schema/schema.json +0 -1828
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
## ADDED Requirements
|
|
2
|
-
|
|
3
|
-
### Requirement: Agent Spawning
|
|
4
|
-
|
|
5
|
-
The system SHALL spawn new agents with unique IDs, session management, and event emission.
|
|
6
|
-
|
|
7
|
-
#### Scenario: Spawn a child agent
|
|
8
|
-
- **GIVEN** an initialized AgentManager and a running parent agent 'parent_1'
|
|
9
|
-
- **WHEN** spawn({ task: 'implement auth', parent: 'parent_1' }) is called
|
|
10
|
-
- **THEN** a unique agent_id is generated
|
|
11
|
-
- **AND** a task is created for the agent (if task_id not provided)
|
|
12
|
-
- **AND** an ACP session is started for the agent
|
|
13
|
-
- **AND** a spawn event is emitted to the event store
|
|
14
|
-
- **AND** default subscriptions are set up (agent, task, lineage)
|
|
15
|
-
- **AND** the parent is subscribed to the child's subtree (unless subscribe_parent: false)
|
|
16
|
-
- **AND** the function returns the new agent record
|
|
17
|
-
|
|
18
|
-
#### Scenario: Spawn with custom configuration
|
|
19
|
-
- **GIVEN** an initialized AgentManager
|
|
20
|
-
- **WHEN** spawn({ task: 'review code', parent: 'parent_1', config: { model: 'claude-opus-4-20250514', timeout: 3600000 } }) is called
|
|
21
|
-
- **THEN** the agent is created with the specified model and timeout
|
|
22
|
-
- **AND** these config values are included in the spawn event payload
|
|
23
|
-
|
|
24
|
-
#### Scenario: Spawn with explicit task_id
|
|
25
|
-
- **GIVEN** an existing task 'task_123'
|
|
26
|
-
- **WHEN** spawn({ task: 'implement feature', parent: 'parent_1', task_id: 'task_123' }) is called
|
|
27
|
-
- **THEN** the agent is assigned to task 'task_123'
|
|
28
|
-
- **AND** no new task is created
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
### Requirement: Agent Termination
|
|
33
|
-
|
|
34
|
-
The system SHALL terminate agents and update their state appropriately.
|
|
35
|
-
|
|
36
|
-
#### Scenario: Terminate a running agent
|
|
37
|
-
- **GIVEN** a running agent 'agent_1' with session 'sess_123'
|
|
38
|
-
- **WHEN** terminate('agent_1', 'completed') is called
|
|
39
|
-
- **THEN** the ACP session is terminated
|
|
40
|
-
- **AND** a terminate event is emitted with reason 'completed'
|
|
41
|
-
- **AND** the agent's state in the view changes to 'stopped'
|
|
42
|
-
- **AND** the agent's associated task status is updated to 'completed'
|
|
43
|
-
|
|
44
|
-
#### Scenario: Terminate with failure
|
|
45
|
-
- **GIVEN** a running agent 'agent_1'
|
|
46
|
-
- **WHEN** terminate('agent_1', 'failed') is called
|
|
47
|
-
- **THEN** a terminate event is emitted with reason 'failed'
|
|
48
|
-
- **AND** the agent's associated task status is updated to 'failed'
|
|
49
|
-
|
|
50
|
-
#### Scenario: Terminate non-existent agent
|
|
51
|
-
- **GIVEN** no agent with id 'nonexistent'
|
|
52
|
-
- **WHEN** terminate('nonexistent', 'stopped') is called
|
|
53
|
-
- **THEN** an error is returned indicating agent not found
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
### Requirement: Agent Queries
|
|
58
|
-
|
|
59
|
-
The system SHALL support querying agents by various criteria.
|
|
60
|
-
|
|
61
|
-
#### Scenario: Get agent by ID
|
|
62
|
-
- **GIVEN** an agent 'agent_1' exists
|
|
63
|
-
- **WHEN** get('agent_1') is called
|
|
64
|
-
- **THEN** the full agent record is returned including id, session_id, parent, state, task, config, timestamps
|
|
65
|
-
|
|
66
|
-
#### Scenario: Get non-existent agent
|
|
67
|
-
- **GIVEN** no agent with id 'nonexistent'
|
|
68
|
-
- **WHEN** get('nonexistent') is called
|
|
69
|
-
- **THEN** null is returned
|
|
70
|
-
|
|
71
|
-
#### Scenario: List agents with filter
|
|
72
|
-
- **GIVEN** agents in various states (running, stopped)
|
|
73
|
-
- **WHEN** list({ state: 'running' }) is called
|
|
74
|
-
- **THEN** only agents in 'running' state are returned
|
|
75
|
-
|
|
76
|
-
#### Scenario: List agents by parent
|
|
77
|
-
- **GIVEN** parent agent 'parent_1' with children 'child_1' and 'child_2'
|
|
78
|
-
- **WHEN** list({ parent: 'parent_1' }) is called
|
|
79
|
-
- **THEN** both 'child_1' and 'child_2' are returned
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
### Requirement: Agent Hierarchy
|
|
84
|
-
|
|
85
|
-
The system SHALL track and query the agent hierarchy.
|
|
86
|
-
|
|
87
|
-
#### Scenario: Get children of an agent
|
|
88
|
-
- **GIVEN** agent 'manager_1' has spawned 'worker_1' and 'worker_2'
|
|
89
|
-
- **WHEN** getChildren('manager_1') is called
|
|
90
|
-
- **THEN** both 'worker_1' and 'worker_2' are returned
|
|
91
|
-
|
|
92
|
-
#### Scenario: Get hierarchy tree
|
|
93
|
-
- **GIVEN** a hierarchy: head_manager → manager_1 → [worker_1, worker_2]
|
|
94
|
-
- **WHEN** getHierarchy('head_manager') is called
|
|
95
|
-
- **THEN** a tree structure is returned with head_manager at root
|
|
96
|
-
- **AND** manager_1 as a child with worker_1 and worker_2 as its children
|
|
97
|
-
- **AND** each node includes agent_id, task, and state
|
|
98
|
-
|
|
99
|
-
#### Scenario: Get hierarchy with depth limit
|
|
100
|
-
- **GIVEN** a deep hierarchy (4+ levels)
|
|
101
|
-
- **WHEN** getHierarchy('root', { depth: 2 }) is called
|
|
102
|
-
- **THEN** only 2 levels of the hierarchy are returned
|
|
103
|
-
|
|
104
|
-
---
|
|
105
|
-
|
|
106
|
-
### Requirement: Head Manager Bootstrap
|
|
107
|
-
|
|
108
|
-
The system SHALL create or retrieve the head manager agent on demand.
|
|
109
|
-
|
|
110
|
-
#### Scenario: Create head manager on first interaction
|
|
111
|
-
- **GIVEN** no agents exist in the system
|
|
112
|
-
- **WHEN** getOrCreateHeadManager() is called
|
|
113
|
-
- **THEN** a new head manager agent is spawned with parent: null
|
|
114
|
-
- **AND** the agent's task is set to the system head_manager_task from config
|
|
115
|
-
- **AND** the agent is returned
|
|
116
|
-
|
|
117
|
-
#### Scenario: Return existing head manager
|
|
118
|
-
- **GIVEN** a running head manager agent exists
|
|
119
|
-
- **WHEN** getOrCreateHeadManager() is called
|
|
120
|
-
- **THEN** the existing head manager is returned
|
|
121
|
-
- **AND** no new agent is spawned
|
|
122
|
-
|
|
123
|
-
#### Scenario: Create new head manager after previous stopped
|
|
124
|
-
- **GIVEN** a stopped head manager agent exists (no running head manager)
|
|
125
|
-
- **WHEN** getOrCreateHeadManager() is called
|
|
126
|
-
- **THEN** a new head manager agent is spawned
|
|
127
|
-
- **AND** the new agent is returned
|
|
128
|
-
|
|
129
|
-
---
|
|
130
|
-
|
|
131
|
-
### Requirement: System Prompt Generation
|
|
132
|
-
|
|
133
|
-
The system SHALL generate appropriate system prompts for spawned agents.
|
|
134
|
-
|
|
135
|
-
#### Scenario: Generate prompt for child agent
|
|
136
|
-
- **GIVEN** spawning a child agent with parent 'manager_1' and task 'implement auth'
|
|
137
|
-
- **WHEN** the system prompt is generated
|
|
138
|
-
- **THEN** the prompt includes the agent_id and session_id
|
|
139
|
-
- **AND** the prompt includes the task description
|
|
140
|
-
- **AND** the prompt includes the parent agent_id
|
|
141
|
-
- **AND** the prompt includes the lineage chain
|
|
142
|
-
- **AND** the prompt includes available MCP tools
|
|
143
|
-
- **AND** the prompt includes guidance for status reporting and messaging
|
|
144
|
-
|
|
145
|
-
#### Scenario: Generate prompt for head manager
|
|
146
|
-
- **GIVEN** spawning the head manager (parent: null)
|
|
147
|
-
- **WHEN** the system prompt is generated
|
|
148
|
-
- **THEN** the prompt includes head manager specific responsibilities
|
|
149
|
-
- **AND** the prompt indicates this agent interacts directly with users
|
|
150
|
-
- **AND** the prompt includes guidance for task decomposition and child spawning
|
|
@@ -1,258 +0,0 @@
|
|
|
1
|
-
## ADDED Requirements
|
|
2
|
-
|
|
3
|
-
### Requirement: API Server Initialization
|
|
4
|
-
|
|
5
|
-
The system SHALL provide an HTTP/WebSocket server for CLI and client communication.
|
|
6
|
-
|
|
7
|
-
#### Scenario: Start API server
|
|
8
|
-
- **GIVEN** the multi-agent system is configured
|
|
9
|
-
- **WHEN** the API server is started
|
|
10
|
-
- **THEN** REST endpoints are available at the configured port (default 3000)
|
|
11
|
-
- **AND** WebSocket connections are accepted for real-time updates
|
|
12
|
-
|
|
13
|
-
#### Scenario: Server configuration
|
|
14
|
-
- **GIVEN** config specifies port 4000 and host 'localhost'
|
|
15
|
-
- **WHEN** the API server is started
|
|
16
|
-
- **THEN** the server listens on localhost:4000
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
### Requirement: System Endpoints
|
|
21
|
-
|
|
22
|
-
The system SHALL provide endpoints for system management.
|
|
23
|
-
|
|
24
|
-
#### Scenario: Initialize system
|
|
25
|
-
- **GIVEN** a fresh system start
|
|
26
|
-
- **WHEN** POST /api/init is called
|
|
27
|
-
- **THEN** the event store is initialized
|
|
28
|
-
- **AND** configuration is loaded
|
|
29
|
-
- **AND** the system is ready to accept commands
|
|
30
|
-
|
|
31
|
-
#### Scenario: Get system status
|
|
32
|
-
- **GIVEN** a running system with agents
|
|
33
|
-
- **WHEN** GET /api/status is called
|
|
34
|
-
- **THEN** the response includes system state (running/stopped)
|
|
35
|
-
- **AND** head manager info (id, state)
|
|
36
|
-
- **AND** aggregate counts (agents running, tasks in progress)
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
|
-
### Requirement: Conversation Endpoints
|
|
41
|
-
|
|
42
|
-
The system SHALL provide endpoints for user conversation with the head manager.
|
|
43
|
-
|
|
44
|
-
#### Scenario: Send message to head manager
|
|
45
|
-
- **GIVEN** the system is running
|
|
46
|
-
- **WHEN** POST /api/conversation/message with { content: 'Hello' } is called
|
|
47
|
-
- **THEN** the head manager is created if not exists
|
|
48
|
-
- **AND** the message is sent to the head manager via ACP
|
|
49
|
-
- **AND** the response includes { status: 'sent', agent_id }
|
|
50
|
-
|
|
51
|
-
#### Scenario: Get conversation history
|
|
52
|
-
- **GIVEN** previous messages with the head manager
|
|
53
|
-
- **WHEN** GET /api/conversation/history is called
|
|
54
|
-
- **THEN** the conversation history is returned
|
|
55
|
-
- **AND** messages include role (user/assistant), content, timestamp
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
### Requirement: Agent Endpoints
|
|
60
|
-
|
|
61
|
-
The system SHALL provide read-only endpoints for agent information.
|
|
62
|
-
|
|
63
|
-
#### Scenario: List agents
|
|
64
|
-
- **GIVEN** multiple agents in the system
|
|
65
|
-
- **WHEN** GET /api/agents is called
|
|
66
|
-
- **THEN** all agents are returned with id, state, task summary, parent
|
|
67
|
-
|
|
68
|
-
#### Scenario: List agents with filter
|
|
69
|
-
- **GIVEN** agents in various states
|
|
70
|
-
- **WHEN** GET /api/agents?state=running is called
|
|
71
|
-
- **THEN** only running agents are returned
|
|
72
|
-
|
|
73
|
-
#### Scenario: Get agent details
|
|
74
|
-
- **GIVEN** agent 'agent_1' exists
|
|
75
|
-
- **WHEN** GET /api/agents/agent_1 is called
|
|
76
|
-
- **THEN** full agent details are returned including config, timestamps, children
|
|
77
|
-
|
|
78
|
-
#### Scenario: Get agent hierarchy
|
|
79
|
-
- **GIVEN** agent 'agent_1' with children
|
|
80
|
-
- **WHEN** GET /api/agents/agent_1/hierarchy is called
|
|
81
|
-
- **THEN** the subtree under agent_1 is returned as a tree structure
|
|
82
|
-
|
|
83
|
-
---
|
|
84
|
-
|
|
85
|
-
### Requirement: Task Endpoints
|
|
86
|
-
|
|
87
|
-
The system SHALL provide read-only endpoints for task information.
|
|
88
|
-
|
|
89
|
-
#### Scenario: List tasks
|
|
90
|
-
- **GIVEN** multiple tasks in the system
|
|
91
|
-
- **WHEN** GET /api/tasks is called
|
|
92
|
-
- **THEN** all tasks are returned with id, description, status, assigned_agent
|
|
93
|
-
|
|
94
|
-
#### Scenario: List tasks with filter
|
|
95
|
-
- **GIVEN** tasks in various statuses
|
|
96
|
-
- **WHEN** GET /api/tasks?status=in_progress is called
|
|
97
|
-
- **THEN** only in-progress tasks are returned
|
|
98
|
-
|
|
99
|
-
#### Scenario: Get task details
|
|
100
|
-
- **GIVEN** task 'task_1' exists
|
|
101
|
-
- **WHEN** GET /api/tasks/task_1 is called
|
|
102
|
-
- **THEN** full task details are returned including inputs, outputs, artifacts, agent_history
|
|
103
|
-
|
|
104
|
-
---
|
|
105
|
-
|
|
106
|
-
### Requirement: Event Endpoints
|
|
107
|
-
|
|
108
|
-
The system SHALL provide endpoints for event queries (debugging).
|
|
109
|
-
|
|
110
|
-
#### Scenario: Query events
|
|
111
|
-
- **GIVEN** events in the event store
|
|
112
|
-
- **WHEN** GET /api/events?type=status is called
|
|
113
|
-
- **THEN** status events are returned in chronological order
|
|
114
|
-
|
|
115
|
-
#### Scenario: Query events with time range
|
|
116
|
-
- **GIVEN** events spanning multiple timestamps
|
|
117
|
-
- **WHEN** GET /api/events?after=timestamp1&before=timestamp2 is called
|
|
118
|
-
- **THEN** only events within the time range are returned
|
|
119
|
-
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
### Requirement: WebSocket Real-time Updates
|
|
123
|
-
|
|
124
|
-
The system SHALL provide WebSocket channels for real-time updates.
|
|
125
|
-
|
|
126
|
-
#### Scenario: Subscribe to agent updates
|
|
127
|
-
- **GIVEN** a WebSocket connection
|
|
128
|
-
- **WHEN** client sends { type: 'subscribe', channel: 'agents' }
|
|
129
|
-
- **THEN** the client receives agent:update events when agents change state
|
|
130
|
-
|
|
131
|
-
#### Scenario: Subscribe to task updates
|
|
132
|
-
- **GIVEN** a WebSocket connection
|
|
133
|
-
- **WHEN** client sends { type: 'subscribe', channel: 'tasks' }
|
|
134
|
-
- **THEN** the client receives task:update events when tasks change
|
|
135
|
-
|
|
136
|
-
#### Scenario: Subscribe to conversation
|
|
137
|
-
- **GIVEN** a WebSocket connection
|
|
138
|
-
- **WHEN** client sends { type: 'subscribe', channel: 'conversation' }
|
|
139
|
-
- **THEN** the client receives conversation:message events for head manager responses
|
|
140
|
-
|
|
141
|
-
#### Scenario: TinyBase to WebSocket bridge
|
|
142
|
-
- **GIVEN** a client subscribed to 'agents' channel
|
|
143
|
-
- **WHEN** a spawn event is emitted and the agents view updates
|
|
144
|
-
- **THEN** the WebSocket client receives the agent:update event in real-time
|
|
145
|
-
|
|
146
|
-
---
|
|
147
|
-
|
|
148
|
-
### Requirement: CLI Start Command
|
|
149
|
-
|
|
150
|
-
The system SHALL provide a command to start the multi-agent system.
|
|
151
|
-
|
|
152
|
-
#### Scenario: Start system
|
|
153
|
-
- **GIVEN** the CLI is installed
|
|
154
|
-
- **WHEN** `multiagent start` is executed
|
|
155
|
-
- **THEN** the API server starts
|
|
156
|
-
- **AND** the event store is initialized
|
|
157
|
-
- **AND** the MCP server starts
|
|
158
|
-
- **AND** a success message is displayed
|
|
159
|
-
|
|
160
|
-
#### Scenario: Start with custom port
|
|
161
|
-
- **GIVEN** the CLI is installed
|
|
162
|
-
- **WHEN** `multiagent start --port 4000` is executed
|
|
163
|
-
- **THEN** the API server starts on port 4000
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
### Requirement: CLI Chat Command
|
|
168
|
-
|
|
169
|
-
The system SHALL provide an interactive chat mode.
|
|
170
|
-
|
|
171
|
-
#### Scenario: Enter chat mode
|
|
172
|
-
- **GIVEN** the system is running
|
|
173
|
-
- **WHEN** `multiagent chat` is executed
|
|
174
|
-
- **THEN** a prompt appears for user input
|
|
175
|
-
- **AND** a WebSocket connection is established for real-time updates
|
|
176
|
-
|
|
177
|
-
#### Scenario: Send message in chat
|
|
178
|
-
- **GIVEN** chat mode is active
|
|
179
|
-
- **WHEN** user types a message and presses enter
|
|
180
|
-
- **THEN** the message is sent to the head manager
|
|
181
|
-
- **AND** the response streams back and is displayed
|
|
182
|
-
|
|
183
|
-
#### Scenario: Real-time status in chat
|
|
184
|
-
- **GIVEN** chat mode is active with verbose flag
|
|
185
|
-
- **WHEN** an agent status changes
|
|
186
|
-
- **THEN** a status line is displayed: [status] Agent X: running
|
|
187
|
-
|
|
188
|
-
---
|
|
189
|
-
|
|
190
|
-
### Requirement: CLI Status Commands
|
|
191
|
-
|
|
192
|
-
The system SHALL provide commands to view system state.
|
|
193
|
-
|
|
194
|
-
#### Scenario: System status
|
|
195
|
-
- **GIVEN** the system is running
|
|
196
|
-
- **WHEN** `multiagent status` is executed
|
|
197
|
-
- **THEN** system status is displayed (running/stopped)
|
|
198
|
-
- **AND** head manager info is displayed
|
|
199
|
-
- **AND** aggregate counts are displayed (agents, tasks)
|
|
200
|
-
|
|
201
|
-
#### Scenario: List agents
|
|
202
|
-
- **GIVEN** agents exist in the system
|
|
203
|
-
- **WHEN** `multiagent agents` is executed
|
|
204
|
-
- **THEN** a table of agents is displayed with id, state, task
|
|
205
|
-
|
|
206
|
-
#### Scenario: Agent details
|
|
207
|
-
- **GIVEN** agent 'agent_1' exists
|
|
208
|
-
- **WHEN** `multiagent agents agent_1` is executed
|
|
209
|
-
- **THEN** detailed agent info is displayed
|
|
210
|
-
|
|
211
|
-
#### Scenario: List tasks
|
|
212
|
-
- **GIVEN** tasks exist in the system
|
|
213
|
-
- **WHEN** `multiagent tasks` is executed
|
|
214
|
-
- **THEN** a table of tasks is displayed with id, status, assigned_agent
|
|
215
|
-
|
|
216
|
-
#### Scenario: Task details
|
|
217
|
-
- **GIVEN** task 'task_1' exists
|
|
218
|
-
- **WHEN** `multiagent tasks task_1` is executed
|
|
219
|
-
- **THEN** detailed task info is displayed
|
|
220
|
-
|
|
221
|
-
---
|
|
222
|
-
|
|
223
|
-
### Requirement: CLI Hierarchy Command
|
|
224
|
-
|
|
225
|
-
The system SHALL provide a command to visualize the agent tree.
|
|
226
|
-
|
|
227
|
-
#### Scenario: Display hierarchy
|
|
228
|
-
- **GIVEN** a multi-level agent hierarchy
|
|
229
|
-
- **WHEN** `multiagent hierarchy` is executed
|
|
230
|
-
- **THEN** a tree visualization is displayed:
|
|
231
|
-
```
|
|
232
|
-
agent_abc123 (head_manager) [running]
|
|
233
|
-
├── agent_def456 (architect) [completed]
|
|
234
|
-
├── agent_ghi789 (implementer) [running]
|
|
235
|
-
│ ├── agent_jkl012 (auth_module) [completed]
|
|
236
|
-
│ └── agent_mno345 (api_routes) [running]
|
|
237
|
-
└── agent_pqr678 (reviewer) [stopped]
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
---
|
|
241
|
-
|
|
242
|
-
### Requirement: CLI Management Commands
|
|
243
|
-
|
|
244
|
-
The system SHALL provide commands for system management.
|
|
245
|
-
|
|
246
|
-
#### Scenario: Clear system
|
|
247
|
-
- **GIVEN** the system has history
|
|
248
|
-
- **WHEN** `multiagent clear` is executed
|
|
249
|
-
- **THEN** the user is prompted for confirmation
|
|
250
|
-
- **AND** if confirmed, the event store is cleared
|
|
251
|
-
- **AND** a new head manager will be created on next interaction
|
|
252
|
-
|
|
253
|
-
#### Scenario: Stop system
|
|
254
|
-
- **GIVEN** the system is running
|
|
255
|
-
- **WHEN** `multiagent stop` is executed
|
|
256
|
-
- **THEN** all running agents are terminated gracefully
|
|
257
|
-
- **AND** the API server stops
|
|
258
|
-
- **AND** state is persisted
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
## ADDED Requirements
|
|
2
|
-
|
|
3
|
-
### Requirement: Event Store Initialization
|
|
4
|
-
|
|
5
|
-
The system SHALL provide an EventStore that initializes TinyBase with persistent storage.
|
|
6
|
-
|
|
7
|
-
#### Scenario: Store initialization with default config
|
|
8
|
-
- **GIVEN** no existing store file
|
|
9
|
-
- **WHEN** createEventStore() is called with default config
|
|
10
|
-
- **THEN** a new TinyBase store is created at ~/.multiagent/store.db
|
|
11
|
-
- **AND** the events table is created with the correct schema
|
|
12
|
-
- **AND** materialized view tables are initialized (agents, tasks, messages, subscriptions)
|
|
13
|
-
|
|
14
|
-
#### Scenario: Store initialization with existing data
|
|
15
|
-
- **GIVEN** an existing store file with previous events
|
|
16
|
-
- **WHEN** createEventStore() is called
|
|
17
|
-
- **THEN** the existing store is loaded
|
|
18
|
-
- **AND** materialized views are rebuilt from the event log
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
### Requirement: Event Emission
|
|
23
|
-
|
|
24
|
-
The system SHALL emit events to an append-only log with auto-generated IDs and timestamps.
|
|
25
|
-
|
|
26
|
-
#### Scenario: Emit a spawn event
|
|
27
|
-
- **GIVEN** an initialized EventStore
|
|
28
|
-
- **WHEN** emit({ type: 'spawn', source: { agent_id: 'parent_1' }, payload: { agent_id: 'child_1', task: 'do work' } }) is called
|
|
29
|
-
- **THEN** an event is created with a unique event_id
|
|
30
|
-
- **AND** the event has a timestamp set to the current time
|
|
31
|
-
- **AND** the event is appended to the events table
|
|
32
|
-
- **AND** the function returns the complete event with id and timestamp
|
|
33
|
-
|
|
34
|
-
#### Scenario: Event immutability
|
|
35
|
-
- **GIVEN** an event has been emitted
|
|
36
|
-
- **WHEN** any attempt is made to modify the event
|
|
37
|
-
- **THEN** the modification fails or is rejected
|
|
38
|
-
- **AND** the original event remains unchanged
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
### Requirement: Event Querying
|
|
43
|
-
|
|
44
|
-
The system SHALL support querying events with filters.
|
|
45
|
-
|
|
46
|
-
#### Scenario: Query events by type
|
|
47
|
-
- **GIVEN** an EventStore with spawn, status, and message events
|
|
48
|
-
- **WHEN** query({ type: 'status' }) is called
|
|
49
|
-
- **THEN** only status events are returned
|
|
50
|
-
- **AND** events are returned in chronological order
|
|
51
|
-
|
|
52
|
-
#### Scenario: Query events by source agent
|
|
53
|
-
- **GIVEN** an EventStore with events from multiple agents
|
|
54
|
-
- **WHEN** query({ source_agent_id: 'agent_1' }) is called
|
|
55
|
-
- **THEN** only events where source.agent_id equals 'agent_1' are returned
|
|
56
|
-
|
|
57
|
-
#### Scenario: Query events by time range
|
|
58
|
-
- **GIVEN** an EventStore with events spanning multiple timestamps
|
|
59
|
-
- **WHEN** query({ after: timestamp1, before: timestamp2 }) is called
|
|
60
|
-
- **THEN** only events within the time range are returned
|
|
61
|
-
|
|
62
|
-
---
|
|
63
|
-
|
|
64
|
-
### Requirement: Agent View Projection
|
|
65
|
-
|
|
66
|
-
The system SHALL maintain a materialized view of agents derived from events.
|
|
67
|
-
|
|
68
|
-
#### Scenario: Agent created on spawn event
|
|
69
|
-
- **GIVEN** an empty agents view
|
|
70
|
-
- **WHEN** a spawn event is emitted for agent_id 'agent_1'
|
|
71
|
-
- **THEN** the agents view contains an entry for 'agent_1'
|
|
72
|
-
- **AND** the entry has state 'spawning'
|
|
73
|
-
- **AND** the entry includes session_id, parent, task, and created_at from the event
|
|
74
|
-
|
|
75
|
-
#### Scenario: Agent state updated on status event
|
|
76
|
-
- **GIVEN** an agent in 'spawning' state
|
|
77
|
-
- **WHEN** a status event with status_type 'started' is emitted for that agent
|
|
78
|
-
- **THEN** the agent's state changes to 'running'
|
|
79
|
-
- **AND** started_at is set to the event timestamp
|
|
80
|
-
|
|
81
|
-
#### Scenario: Agent state updated on terminate event
|
|
82
|
-
- **GIVEN** an agent in 'running' state
|
|
83
|
-
- **WHEN** a terminate event is emitted for that agent with reason 'completed'
|
|
84
|
-
- **THEN** the agent's state changes to 'stopped'
|
|
85
|
-
- **AND** stop_reason is set to 'completed'
|
|
86
|
-
- **AND** stopped_at is set to the event timestamp
|
|
87
|
-
|
|
88
|
-
---
|
|
89
|
-
|
|
90
|
-
### Requirement: Task View Projection
|
|
91
|
-
|
|
92
|
-
The system SHALL maintain a materialized view of tasks derived from events.
|
|
93
|
-
|
|
94
|
-
#### Scenario: Task created on task event
|
|
95
|
-
- **GIVEN** an empty tasks view
|
|
96
|
-
- **WHEN** a task event with action 'created' is emitted
|
|
97
|
-
- **THEN** the tasks view contains an entry for the task_id
|
|
98
|
-
- **AND** the entry has status 'pending'
|
|
99
|
-
- **AND** the entry includes description and created_by from the event
|
|
100
|
-
|
|
101
|
-
#### Scenario: Task assigned on task event
|
|
102
|
-
- **GIVEN** a task in 'pending' status
|
|
103
|
-
- **WHEN** a task event with action 'assigned' is emitted
|
|
104
|
-
- **THEN** the task's status changes to 'assigned'
|
|
105
|
-
- **AND** assigned_agent is set to the agent_id from the event
|
|
106
|
-
|
|
107
|
-
#### Scenario: Task status change
|
|
108
|
-
- **GIVEN** a task in 'assigned' status
|
|
109
|
-
- **WHEN** a task event with action 'status_change' and status 'in_progress' is emitted
|
|
110
|
-
- **THEN** the task's status changes to 'in_progress'
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
### Requirement: Message Queue Projection
|
|
115
|
-
|
|
116
|
-
The system SHALL maintain a materialized view of pending messages per agent.
|
|
117
|
-
|
|
118
|
-
#### Scenario: Message added to recipient queue
|
|
119
|
-
- **GIVEN** an agent 'agent_1' with an empty message queue
|
|
120
|
-
- **WHEN** a message event is emitted with target.agent_id 'agent_1'
|
|
121
|
-
- **THEN** the message appears in agent_1's pending messages
|
|
122
|
-
- **AND** the message includes id, from, content, timestamp
|
|
123
|
-
|
|
124
|
-
#### Scenario: Message delivered to multiple recipients
|
|
125
|
-
- **GIVEN** agents 'agent_1' and 'agent_2' subscribed to topic 'updates'
|
|
126
|
-
- **WHEN** a message event is emitted with target.topic 'updates'
|
|
127
|
-
- **THEN** the message appears in both agent_1's and agent_2's pending queues
|
|
128
|
-
|
|
129
|
-
---
|
|
130
|
-
|
|
131
|
-
### Requirement: Subscription Projection
|
|
132
|
-
|
|
133
|
-
The system SHALL maintain a materialized view of agent subscriptions.
|
|
134
|
-
|
|
135
|
-
#### Scenario: Subscription added
|
|
136
|
-
- **GIVEN** an agent 'agent_1' with no subscriptions
|
|
137
|
-
- **WHEN** a subscription is registered for { type: 'topic', target: 'errors' }
|
|
138
|
-
- **THEN** the subscriptions view shows agent_1 subscribed to topic 'errors'
|
|
139
|
-
|
|
140
|
-
#### Scenario: Query subscribers by topic
|
|
141
|
-
- **GIVEN** multiple agents subscribed to topic 'discoveries'
|
|
142
|
-
- **WHEN** getSubscribers({ type: 'topic', target: 'discoveries' }) is called
|
|
143
|
-
- **THEN** all agent_ids subscribed to that topic are returned
|
|
144
|
-
|
|
145
|
-
---
|
|
146
|
-
|
|
147
|
-
### Requirement: Real-time View Updates
|
|
148
|
-
|
|
149
|
-
The system SHALL provide reactive updates when views change.
|
|
150
|
-
|
|
151
|
-
#### Scenario: Subscribe to agent view changes
|
|
152
|
-
- **GIVEN** a subscription to agent view changes
|
|
153
|
-
- **WHEN** a spawn event is emitted
|
|
154
|
-
- **THEN** the subscriber callback is invoked with the updated agent entry
|
|
155
|
-
|
|
156
|
-
#### Scenario: Subscribe to specific agent changes
|
|
157
|
-
- **GIVEN** a subscription to changes for agent 'agent_1'
|
|
158
|
-
- **WHEN** a status event is emitted for 'agent_1'
|
|
159
|
-
- **THEN** the subscriber callback is invoked
|
|
160
|
-
- **AND** changes to other agents do not trigger the callback
|