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
|
@@ -36,6 +36,7 @@ import type {
|
|
|
36
36
|
SystemPromptContext,
|
|
37
37
|
AgentLifecycleCallback,
|
|
38
38
|
AgentConfig,
|
|
39
|
+
ContinueAgentOptions,
|
|
39
40
|
} from "./types.js";
|
|
40
41
|
import { AgentManagerError } from "./types.js";
|
|
41
42
|
import type { RoleRegistry, Capability } from "../roles/types.js";
|
|
@@ -74,8 +75,10 @@ function getSpawnCapability(childRole: string): Capability {
|
|
|
74
75
|
// or system-level agents can spawn coordinators
|
|
75
76
|
return AGENT_CAPABILITIES.SPAWN_CUSTOM;
|
|
76
77
|
default:
|
|
77
|
-
// For
|
|
78
|
-
|
|
78
|
+
// For team-defined roles (e.g., "grinder"), return the specific capability
|
|
79
|
+
// (e.g., "agent.spawn.grinder"). The spawn check also accepts
|
|
80
|
+
// "agent.spawn.custom" as a generic fallback.
|
|
81
|
+
return `agent.spawn.${childRole}` as Capability;
|
|
79
82
|
}
|
|
80
83
|
}
|
|
81
84
|
|
|
@@ -103,6 +106,20 @@ export interface AgentManager {
|
|
|
103
106
|
*/
|
|
104
107
|
resume(agentId: AgentId): Promise<SpawnedAgent>;
|
|
105
108
|
|
|
109
|
+
/**
|
|
110
|
+
* Continue a terminated agent by spawning a new agent with the same
|
|
111
|
+
* role and task, injecting the prior conversation context as a
|
|
112
|
+
* resume prefix in the system prompt.
|
|
113
|
+
*
|
|
114
|
+
* @param agentId - ID of the agent to continue
|
|
115
|
+
* @param options - Continuation options
|
|
116
|
+
* @returns The newly spawned continuation agent
|
|
117
|
+
*/
|
|
118
|
+
continueAgent(
|
|
119
|
+
agentId: AgentId,
|
|
120
|
+
options?: ContinueAgentOptions
|
|
121
|
+
): Promise<SpawnedAgent>;
|
|
122
|
+
|
|
106
123
|
// ── Queries ────────────────────────────────────────────────────
|
|
107
124
|
|
|
108
125
|
/**
|
|
@@ -237,6 +254,32 @@ export interface AgentManager {
|
|
|
237
254
|
*/
|
|
238
255
|
onLifecycleEvent(callback: AgentLifecycleCallback): () => void;
|
|
239
256
|
|
|
257
|
+
// ── Team Integration ─────────────────────────────────────────
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* Set a spawn interceptor that transforms SpawnAgentOptions before spawning.
|
|
261
|
+
* Used by TeamRuntime to inject team topics, prompts, MCP servers, and env vars.
|
|
262
|
+
*/
|
|
263
|
+
setSpawnInterceptor(
|
|
264
|
+
interceptor: SpawnInterceptor | null
|
|
265
|
+
): void;
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Get the RoleRegistry used by this AgentManager.
|
|
269
|
+
*/
|
|
270
|
+
getRoleRegistry(): RoleRegistry;
|
|
271
|
+
|
|
272
|
+
// ── Mail Services (Late Binding) ─────────────────────────────
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Set mail services for conversation tracking.
|
|
276
|
+
* Used for late binding when mailService is created after AgentManager.
|
|
277
|
+
*/
|
|
278
|
+
setMailServices(
|
|
279
|
+
mailService: import("../mail/mail-service.js").MailService,
|
|
280
|
+
conversationMap: import("../mail/conversation-map.js").ConversationMap
|
|
281
|
+
): void;
|
|
282
|
+
|
|
240
283
|
// ── Cleanup ────────────────────────────────────────────────────
|
|
241
284
|
|
|
242
285
|
/**
|
|
@@ -280,8 +323,32 @@ export interface AgentManagerConfig {
|
|
|
280
323
|
* with coordinator agent lifecycle.
|
|
281
324
|
*/
|
|
282
325
|
healthCheckService?: HealthCheckService;
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* Optional MailService for conversation tracking.
|
|
329
|
+
* When provided, spawn creates task conversations and terminate closes them.
|
|
330
|
+
*/
|
|
331
|
+
mailService?: import("../mail/mail-service.js").MailService;
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Optional ConversationMap for agent-to-conversation tracking.
|
|
335
|
+
* Required when mailService is provided.
|
|
336
|
+
*/
|
|
337
|
+
conversationMap?: import("../mail/conversation-map.js").ConversationMap;
|
|
283
338
|
}
|
|
284
339
|
|
|
340
|
+
// ─────────────────────────────────────────────────────────────────
|
|
341
|
+
// Spawn Interceptor
|
|
342
|
+
// ─────────────────────────────────────────────────────────────────
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Function that transforms SpawnAgentOptions before an agent is spawned.
|
|
346
|
+
* Used by TeamRuntime to inject team-specific configuration.
|
|
347
|
+
*/
|
|
348
|
+
export type SpawnInterceptor = (
|
|
349
|
+
options: SpawnAgentOptions
|
|
350
|
+
) => SpawnAgentOptions | Promise<SpawnAgentOptions>;
|
|
351
|
+
|
|
285
352
|
// ─────────────────────────────────────────────────────────────────
|
|
286
353
|
// AgentManager Implementation
|
|
287
354
|
// ─────────────────────────────────────────────────────────────────
|
|
@@ -298,8 +365,17 @@ export function createAgentManager(
|
|
|
298
365
|
workspaceManager,
|
|
299
366
|
roleRegistry = new DefaultRoleRegistry(),
|
|
300
367
|
healthCheckService,
|
|
368
|
+
mailService: initialMailService,
|
|
369
|
+
conversationMap: initialConversationMap,
|
|
301
370
|
} = config;
|
|
302
371
|
|
|
372
|
+
// Mutable mail services (support late binding via setMailServices)
|
|
373
|
+
let mailService = initialMailService;
|
|
374
|
+
let conversationMap = initialConversationMap;
|
|
375
|
+
|
|
376
|
+
// Mutable spawn interceptor (set by TeamRuntime)
|
|
377
|
+
let spawnInterceptor: SpawnInterceptor | null = null;
|
|
378
|
+
|
|
303
379
|
// Active sessions tracked in memory
|
|
304
380
|
const activeSessions = new Map<AgentId, ActiveSession>();
|
|
305
381
|
|
|
@@ -313,7 +389,12 @@ export function createAgentManager(
|
|
|
313
389
|
// Lifecycle
|
|
314
390
|
// ─────────────────────────────────────────────────────────────────
|
|
315
391
|
|
|
316
|
-
async function spawn(
|
|
392
|
+
async function spawn(rawOptions: SpawnAgentOptions): Promise<SpawnedAgent> {
|
|
393
|
+
// Apply spawn interceptor if set (used by TeamRuntime for team context injection)
|
|
394
|
+
const options = spawnInterceptor
|
|
395
|
+
? await spawnInterceptor(rawOptions)
|
|
396
|
+
: rawOptions;
|
|
397
|
+
|
|
317
398
|
const {
|
|
318
399
|
task,
|
|
319
400
|
task_id,
|
|
@@ -324,6 +405,8 @@ export function createAgentManager(
|
|
|
324
405
|
topics = [],
|
|
325
406
|
config: agentConfig,
|
|
326
407
|
agentType = defaultAgentType,
|
|
408
|
+
customPrompt,
|
|
409
|
+
interactionPatterns,
|
|
327
410
|
// Workspace-related fields (Phase 2)
|
|
328
411
|
role,
|
|
329
412
|
streamId,
|
|
@@ -352,7 +435,13 @@ export function createAgentManager(
|
|
|
352
435
|
const requiredCapability = getSpawnCapability(childRole);
|
|
353
436
|
const parentRole = parentAgent.role ?? "worker";
|
|
354
437
|
|
|
355
|
-
|
|
438
|
+
// Accept either the specific capability (e.g., agent.spawn.grinder)
|
|
439
|
+
// or the generic agent.spawn.custom as a fallback for non-built-in roles
|
|
440
|
+
const hasSpecific = roleRegistry.hasCapability(parentRole, requiredCapability);
|
|
441
|
+
const hasGeneric = requiredCapability !== AGENT_CAPABILITIES.SPAWN_CUSTOM &&
|
|
442
|
+
roleRegistry.hasCapability(parentRole, AGENT_CAPABILITIES.SPAWN_CUSTOM);
|
|
443
|
+
|
|
444
|
+
if (!hasSpecific && !hasGeneric) {
|
|
356
445
|
throw new AgentManagerError(
|
|
357
446
|
`Parent agent with role '${parentRole}' does not have capability to spawn '${childRole}' agents. ` +
|
|
358
447
|
`Required capability: ${requiredCapability}`,
|
|
@@ -388,12 +477,21 @@ export function createAgentManager(
|
|
|
388
477
|
|
|
389
478
|
let systemPrompt = generateSystemPrompt(promptContext);
|
|
390
479
|
|
|
391
|
-
// Append role
|
|
480
|
+
// Append role prompt: team customPrompt takes precedence over resolvedRole.systemPrompt
|
|
392
481
|
const resolvedRole = roleRegistry.resolveRole(role ?? "worker");
|
|
393
|
-
if (
|
|
482
|
+
if (customPrompt) {
|
|
483
|
+
systemPrompt += `\n\n# Role Instructions\n\n${customPrompt}`;
|
|
484
|
+
} else if (resolvedRole.systemPrompt) {
|
|
394
485
|
systemPrompt += `\n\n# Role-Specific Instructions\n\n${resolvedRole.systemPrompt}`;
|
|
395
486
|
}
|
|
396
487
|
|
|
488
|
+
// Append team interaction pattern sections (pull mode, trunk integration, etc.)
|
|
489
|
+
if (interactionPatterns && interactionPatterns.length > 0) {
|
|
490
|
+
for (const pattern of interactionPatterns) {
|
|
491
|
+
systemPrompt += `\n\n${pattern}`;
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
|
|
397
495
|
eventStore.emit({
|
|
398
496
|
type: "spawn",
|
|
399
497
|
source: { agent_id: parent ?? "system" },
|
|
@@ -488,6 +586,52 @@ export function createAgentManager(
|
|
|
488
586
|
role: role ?? undefined,
|
|
489
587
|
});
|
|
490
588
|
|
|
589
|
+
// ─────────────────────────────────────────────────────────────────
|
|
590
|
+
// Mail: Create task conversation for this agent
|
|
591
|
+
// ─────────────────────────────────────────────────────────────────
|
|
592
|
+
if (mailService && conversationMap) {
|
|
593
|
+
try {
|
|
594
|
+
const parentConversationId = parent
|
|
595
|
+
? conversationMap.getAgentConversation(parent) ??
|
|
596
|
+
conversationMap.getSessionConversation(parent)
|
|
597
|
+
: undefined;
|
|
598
|
+
|
|
599
|
+
const { conversationId: taskConvId } =
|
|
600
|
+
mailService.createConversation({
|
|
601
|
+
type: "task",
|
|
602
|
+
subject: task?.slice(0, 80),
|
|
603
|
+
createdBy: parent ?? agentId,
|
|
604
|
+
parentConversationId: parentConversationId,
|
|
605
|
+
});
|
|
606
|
+
|
|
607
|
+
// Join parent and child as participants
|
|
608
|
+
if (parent) {
|
|
609
|
+
mailService.joinConversation({
|
|
610
|
+
conversationId: taskConvId,
|
|
611
|
+
participantId: parent,
|
|
612
|
+
participantType: "agent",
|
|
613
|
+
role: "initiator",
|
|
614
|
+
agentId: parent,
|
|
615
|
+
});
|
|
616
|
+
}
|
|
617
|
+
mailService.joinConversation({
|
|
618
|
+
conversationId: taskConvId,
|
|
619
|
+
participantId: agentId,
|
|
620
|
+
participantType: "agent",
|
|
621
|
+
role: "worker",
|
|
622
|
+
agentId,
|
|
623
|
+
});
|
|
624
|
+
|
|
625
|
+
conversationMap.setAgentConversation(agentId, taskConvId);
|
|
626
|
+
} catch (err) {
|
|
627
|
+
// Never fail spawn due to mail errors
|
|
628
|
+
console.warn(
|
|
629
|
+
`[AgentManager] Failed to create task conversation for ${agentId}:`,
|
|
630
|
+
err
|
|
631
|
+
);
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
|
|
491
635
|
// Track active session
|
|
492
636
|
const activeSession: ActiveSession = {
|
|
493
637
|
agentId,
|
|
@@ -628,6 +772,38 @@ export function createAgentManager(
|
|
|
628
772
|
}
|
|
629
773
|
}
|
|
630
774
|
|
|
775
|
+
// ─────────────────────────────────────────────────────────────────
|
|
776
|
+
// Mail: Close task conversation on terminate
|
|
777
|
+
// ─────────────────────────────────────────────────────────────────
|
|
778
|
+
if (mailService && conversationMap) {
|
|
779
|
+
try {
|
|
780
|
+
const convId = conversationMap.getAgentConversation(agentId);
|
|
781
|
+
if (convId) {
|
|
782
|
+
mailService.closeConversation({
|
|
783
|
+
conversationId: convId,
|
|
784
|
+
closedBy: agentId,
|
|
785
|
+
reason: reason === "completed" ? "completed" : "failed",
|
|
786
|
+
});
|
|
787
|
+
}
|
|
788
|
+
// Close any peer conversations
|
|
789
|
+
const peerConvIds =
|
|
790
|
+
conversationMap.closePeerConversationsFor(agentId);
|
|
791
|
+
for (const peerConvId of peerConvIds) {
|
|
792
|
+
mailService.closeConversation({
|
|
793
|
+
conversationId: peerConvId,
|
|
794
|
+
closedBy: agentId,
|
|
795
|
+
reason: "participant_left",
|
|
796
|
+
});
|
|
797
|
+
}
|
|
798
|
+
conversationMap.removeAgent(agentId);
|
|
799
|
+
} catch (err) {
|
|
800
|
+
console.warn(
|
|
801
|
+
`[AgentManager] Failed to close conversation for ${agentId}:`,
|
|
802
|
+
err
|
|
803
|
+
);
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
|
|
631
807
|
// Emit terminate event
|
|
632
808
|
eventStore.emit({
|
|
633
809
|
type: "terminate",
|
|
@@ -1160,6 +1336,18 @@ Call done() NOW with status "completed" if your work is finished, or "blocked" i
|
|
|
1160
1336
|
}
|
|
1161
1337
|
}
|
|
1162
1338
|
|
|
1339
|
+
// ─────────────────────────────────────────────────────────────────
|
|
1340
|
+
// Mail Services (Late Binding)
|
|
1341
|
+
// ─────────────────────────────────────────────────────────────────
|
|
1342
|
+
|
|
1343
|
+
function setMailServices(
|
|
1344
|
+
ms: import("../mail/mail-service.js").MailService,
|
|
1345
|
+
cm: import("../mail/conversation-map.js").ConversationMap
|
|
1346
|
+
): void {
|
|
1347
|
+
mailService = ms;
|
|
1348
|
+
conversationMap = cm;
|
|
1349
|
+
}
|
|
1350
|
+
|
|
1163
1351
|
// ─────────────────────────────────────────────────────────────────
|
|
1164
1352
|
// Cleanup
|
|
1165
1353
|
// ─────────────────────────────────────────────────────────────────
|
|
@@ -1189,10 +1377,91 @@ Call done() NOW with status "completed" if your work is finished, or "blocked" i
|
|
|
1189
1377
|
lifecycleListeners.clear();
|
|
1190
1378
|
}
|
|
1191
1379
|
|
|
1380
|
+
function setSpawnInterceptor(interceptor: SpawnInterceptor | null): void {
|
|
1381
|
+
spawnInterceptor = interceptor;
|
|
1382
|
+
}
|
|
1383
|
+
|
|
1384
|
+
function getRoleRegistry(): RoleRegistry {
|
|
1385
|
+
return roleRegistry;
|
|
1386
|
+
}
|
|
1387
|
+
|
|
1388
|
+
/**
|
|
1389
|
+
* Continue a terminated agent by spawning a new agent with the same
|
|
1390
|
+
* role and task, injecting prior conversation context as a resume prefix.
|
|
1391
|
+
*/
|
|
1392
|
+
async function continueAgent(
|
|
1393
|
+
agentId: AgentId,
|
|
1394
|
+
options?: ContinueAgentOptions
|
|
1395
|
+
): Promise<SpawnedAgent> {
|
|
1396
|
+
const agent = eventStore.getAgent(agentId);
|
|
1397
|
+
if (!agent) {
|
|
1398
|
+
throw new AgentManagerError(
|
|
1399
|
+
`Agent not found: ${agentId}`,
|
|
1400
|
+
"AGENT_NOT_FOUND",
|
|
1401
|
+
agentId
|
|
1402
|
+
);
|
|
1403
|
+
}
|
|
1404
|
+
|
|
1405
|
+
// Build resume context from EventStore events
|
|
1406
|
+
const maxMessages = options?.maxMessages ?? 50;
|
|
1407
|
+
const events = eventStore.query({
|
|
1408
|
+
type: "status",
|
|
1409
|
+
source_agent_id: agentId,
|
|
1410
|
+
limit: maxMessages,
|
|
1411
|
+
});
|
|
1412
|
+
|
|
1413
|
+
// Format conversation turns as resume context
|
|
1414
|
+
const contextLines: string[] = [];
|
|
1415
|
+
if (options?.additionalContext) {
|
|
1416
|
+
contextLines.push(options.additionalContext);
|
|
1417
|
+
}
|
|
1418
|
+
|
|
1419
|
+
if (events.length > 0) {
|
|
1420
|
+
contextLines.push("## Prior Session Context");
|
|
1421
|
+
contextLines.push(`Continuing from agent ${agentId} (${events.length} events).`);
|
|
1422
|
+
for (const event of events.slice(-20)) {
|
|
1423
|
+
const summary = event.payload?.summary;
|
|
1424
|
+
if (summary && typeof summary === "string") {
|
|
1425
|
+
contextLines.push(`- ${summary}`);
|
|
1426
|
+
}
|
|
1427
|
+
}
|
|
1428
|
+
}
|
|
1429
|
+
|
|
1430
|
+
const resumeContext = contextLines.join("\n");
|
|
1431
|
+
|
|
1432
|
+
// Spawn a continuation agent with same role, task, and context
|
|
1433
|
+
const taskDescription =
|
|
1434
|
+
options?.task ??
|
|
1435
|
+
agent.task ??
|
|
1436
|
+
`Continue work from ${agentId}`;
|
|
1437
|
+
|
|
1438
|
+
const newAgent = await spawn({
|
|
1439
|
+
task: taskDescription,
|
|
1440
|
+
role: agent.role,
|
|
1441
|
+
parent: agent.parent ?? undefined,
|
|
1442
|
+
cwd: agent.cwd ?? defaultCwd,
|
|
1443
|
+
customPrompt: resumeContext || undefined,
|
|
1444
|
+
});
|
|
1445
|
+
|
|
1446
|
+
// Emit continuation event
|
|
1447
|
+
eventStore.emit({
|
|
1448
|
+
type: "status",
|
|
1449
|
+
source: { agent_id: newAgent.id },
|
|
1450
|
+
payload: {
|
|
1451
|
+
status_type: "started",
|
|
1452
|
+
summary: `Continuation of agent ${agentId}`,
|
|
1453
|
+
continuation_of: agentId,
|
|
1454
|
+
},
|
|
1455
|
+
});
|
|
1456
|
+
|
|
1457
|
+
return newAgent;
|
|
1458
|
+
}
|
|
1459
|
+
|
|
1192
1460
|
return {
|
|
1193
1461
|
spawn,
|
|
1194
1462
|
terminate,
|
|
1195
1463
|
resume,
|
|
1464
|
+
continueAgent,
|
|
1196
1465
|
get,
|
|
1197
1466
|
list,
|
|
1198
1467
|
getChildren,
|
|
@@ -1209,6 +1478,9 @@ Call done() NOW with status "completed" if your work is finished, or "blocked" i
|
|
|
1209
1478
|
respondToPermission,
|
|
1210
1479
|
cancelPermission,
|
|
1211
1480
|
onLifecycleEvent,
|
|
1481
|
+
setSpawnInterceptor,
|
|
1482
|
+
getRoleRegistry,
|
|
1483
|
+
setMailServices,
|
|
1212
1484
|
close,
|
|
1213
1485
|
};
|
|
1214
1486
|
}
|
package/src/agent/types.ts
CHANGED
|
@@ -51,6 +51,19 @@ export interface SpawnAgentOptions {
|
|
|
51
51
|
/** Optional agent type (defaults to "claude-code") */
|
|
52
52
|
agentType?: string;
|
|
53
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Custom prompt content injected as the role instructions section.
|
|
56
|
+
* When set, replaces resolvedRole.systemPrompt in prompt assembly.
|
|
57
|
+
* Used by team templates to provide static role prompts.
|
|
58
|
+
*/
|
|
59
|
+
customPrompt?: string;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Interaction pattern sections to append after the role prompt.
|
|
63
|
+
* Auto-generated by TeamRuntime based on team config (pull mode, etc.).
|
|
64
|
+
*/
|
|
65
|
+
interactionPatterns?: string[];
|
|
66
|
+
|
|
54
67
|
// ─────────────────────────────────────────────────────────────────
|
|
55
68
|
// Workspace-related fields (Phase 2)
|
|
56
69
|
// ─────────────────────────────────────────────────────────────────
|
|
@@ -80,6 +93,20 @@ export interface SpawnAgentOptions {
|
|
|
80
93
|
dataplaneTaskId?: string;
|
|
81
94
|
}
|
|
82
95
|
|
|
96
|
+
/**
|
|
97
|
+
* Options for continuing a terminated agent
|
|
98
|
+
*/
|
|
99
|
+
export interface ContinueAgentOptions {
|
|
100
|
+
/** Maximum number of conversation turns to include in context (default: 50) */
|
|
101
|
+
maxMessages?: number;
|
|
102
|
+
|
|
103
|
+
/** Override the task description for the continuation */
|
|
104
|
+
task?: string;
|
|
105
|
+
|
|
106
|
+
/** Additional context to prepend to the continuation prompt */
|
|
107
|
+
additionalContext?: string;
|
|
108
|
+
}
|
|
109
|
+
|
|
83
110
|
/**
|
|
84
111
|
* Custom agent configuration
|
|
85
112
|
*/
|
package/src/agent/wake.ts
CHANGED
|
@@ -4,6 +4,21 @@
|
|
|
4
4
|
* Implements progressive waking for agents based on activity and priority.
|
|
5
5
|
* Supports inject/interrupt fallback chain.
|
|
6
6
|
*
|
|
7
|
+
* ## Wake System Architecture
|
|
8
|
+
*
|
|
9
|
+
* This module provides **single-agent wake** functionality:
|
|
10
|
+
* - Immediately wake a single agent with an Activity
|
|
11
|
+
* - Priority-driven decision making (urgent/high/normal/low)
|
|
12
|
+
* - Inject → Interrupt → Queue fallback chain
|
|
13
|
+
* - Returns `WakeResult` from activity/types.ts
|
|
14
|
+
*
|
|
15
|
+
* For **batch wake cycles** (periodic delivery to multiple agents),
|
|
16
|
+
* see trigger/wake/wake-manager.ts which provides:
|
|
17
|
+
* - Heartbeat-based polling
|
|
18
|
+
* - Coalesced wake requests
|
|
19
|
+
* - Queue-based event delivery
|
|
20
|
+
* - Returns `WakeCycleStatus`
|
|
21
|
+
*
|
|
7
22
|
* @module agent/wake
|
|
8
23
|
* @see s-9rld In-Flight Steering spec section 3.4
|
|
9
24
|
*/
|