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
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Queue Integration Strategy
|
|
3
|
+
*
|
|
4
|
+
* Wraps the existing MergeQueueInterface — submits merge requests to
|
|
5
|
+
* the queue for sequential processing by an integrator agent.
|
|
6
|
+
*
|
|
7
|
+
* This produces identical behavior to the current worker done() handler's
|
|
8
|
+
* merge queue path.
|
|
9
|
+
*
|
|
10
|
+
* @module workspace/strategies/queue
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import type {
|
|
14
|
+
IntegrationStrategy,
|
|
15
|
+
LandRequest,
|
|
16
|
+
LandResult,
|
|
17
|
+
QueueStrategyConfig,
|
|
18
|
+
} from "./types.js";
|
|
19
|
+
import type { MergeQueueInterface } from "../merge-queue/types.js";
|
|
20
|
+
|
|
21
|
+
export class QueueIntegrationStrategy implements IntegrationStrategy {
|
|
22
|
+
readonly name = "queue";
|
|
23
|
+
private mergeQueue?: MergeQueueInterface;
|
|
24
|
+
private defaultPriority: number;
|
|
25
|
+
|
|
26
|
+
constructor(config?: Record<string, unknown>) {
|
|
27
|
+
const typedConfig = config as QueueStrategyConfig | undefined;
|
|
28
|
+
this.defaultPriority = typedConfig?.defaultPriority ?? 100;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Set the merge queue instance.
|
|
33
|
+
* Called after construction since merge queue may not be available at strategy creation time.
|
|
34
|
+
*/
|
|
35
|
+
setMergeQueue(queue: MergeQueueInterface): void {
|
|
36
|
+
this.mergeQueue = queue;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async land(request: LandRequest): Promise<LandResult> {
|
|
40
|
+
if (!this.mergeQueue) {
|
|
41
|
+
return {
|
|
42
|
+
status: "failed",
|
|
43
|
+
error: "Merge queue not configured",
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (!request.streamId) {
|
|
48
|
+
return {
|
|
49
|
+
status: "failed",
|
|
50
|
+
error: "streamId required for queue strategy",
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (!request.taskId) {
|
|
55
|
+
return {
|
|
56
|
+
status: "failed",
|
|
57
|
+
error: "taskId required for queue strategy",
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
try {
|
|
62
|
+
const mrId = this.mergeQueue.submit({
|
|
63
|
+
streamId: request.streamId,
|
|
64
|
+
taskId: request.taskId,
|
|
65
|
+
workerBranch: request.sourceBranch,
|
|
66
|
+
workerAgentId: request.agentId,
|
|
67
|
+
priority: this.defaultPriority,
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
return {
|
|
71
|
+
status: "landed",
|
|
72
|
+
mergeRequestId: mrId,
|
|
73
|
+
};
|
|
74
|
+
} catch (error) {
|
|
75
|
+
return {
|
|
76
|
+
status: "failed",
|
|
77
|
+
error: `Failed to submit to merge queue: ${error instanceof Error ? error.message : String(error)}`,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration Strategy Registry
|
|
3
|
+
*
|
|
4
|
+
* Factory registry for creating named integration strategies.
|
|
5
|
+
* Supports registration of custom strategies alongside built-in ones.
|
|
6
|
+
*
|
|
7
|
+
* @module workspace/strategies/registry
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type {
|
|
11
|
+
IntegrationStrategy,
|
|
12
|
+
IntegrationStrategyFactory,
|
|
13
|
+
} from "./types.js";
|
|
14
|
+
import { QueueIntegrationStrategy } from "./queue.js";
|
|
15
|
+
import { TrunkIntegrationStrategy } from "./trunk.js";
|
|
16
|
+
import { OptimisticIntegrationStrategy } from "./optimistic.js";
|
|
17
|
+
|
|
18
|
+
// =============================================================================
|
|
19
|
+
// Registry
|
|
20
|
+
// =============================================================================
|
|
21
|
+
|
|
22
|
+
export class IntegrationStrategyRegistry {
|
|
23
|
+
private factories = new Map<string, IntegrationStrategyFactory>();
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Register a strategy factory under a name.
|
|
27
|
+
*/
|
|
28
|
+
register(name: string, factory: IntegrationStrategyFactory): void {
|
|
29
|
+
this.factories.set(name, factory);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Create a strategy instance by name.
|
|
34
|
+
*
|
|
35
|
+
* @throws Error if the strategy name is not registered
|
|
36
|
+
*/
|
|
37
|
+
get(name: string, config?: Record<string, unknown>): IntegrationStrategy {
|
|
38
|
+
const factory = this.factories.get(name);
|
|
39
|
+
if (!factory) {
|
|
40
|
+
throw new Error(
|
|
41
|
+
`Unknown integration strategy: '${name}'. Available: ${this.list().join(", ")}`
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
return factory(config);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Check if a strategy is registered.
|
|
49
|
+
*/
|
|
50
|
+
has(name: string): boolean {
|
|
51
|
+
return this.factories.has(name);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* List registered strategy names.
|
|
56
|
+
*/
|
|
57
|
+
list(): string[] {
|
|
58
|
+
return Array.from(this.factories.keys());
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// =============================================================================
|
|
63
|
+
// Default Registry
|
|
64
|
+
// =============================================================================
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Create a registry with all built-in strategies registered.
|
|
68
|
+
*/
|
|
69
|
+
export function createDefaultStrategyRegistry(): IntegrationStrategyRegistry {
|
|
70
|
+
const registry = new IntegrationStrategyRegistry();
|
|
71
|
+
|
|
72
|
+
registry.register(
|
|
73
|
+
"queue",
|
|
74
|
+
(config) => new QueueIntegrationStrategy(config)
|
|
75
|
+
);
|
|
76
|
+
registry.register(
|
|
77
|
+
"trunk",
|
|
78
|
+
(config) => new TrunkIntegrationStrategy(config)
|
|
79
|
+
);
|
|
80
|
+
registry.register(
|
|
81
|
+
"optimistic",
|
|
82
|
+
(config) => new OptimisticIntegrationStrategy(config)
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
return registry;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** Singleton default registry */
|
|
89
|
+
export const defaultStrategyRegistry = createDefaultStrategyRegistry();
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trunk Integration Strategy
|
|
3
|
+
*
|
|
4
|
+
* Direct push to integration branch with rebase-and-retry on conflict.
|
|
5
|
+
* Suited for trunk-based development workflows where changes are
|
|
6
|
+
* integrated immediately.
|
|
7
|
+
*
|
|
8
|
+
* @module workspace/strategies/trunk
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { execSync } from "child_process";
|
|
12
|
+
import type {
|
|
13
|
+
IntegrationStrategy,
|
|
14
|
+
LandRequest,
|
|
15
|
+
LandResult,
|
|
16
|
+
TrunkStrategyConfig,
|
|
17
|
+
} from "./types.js";
|
|
18
|
+
|
|
19
|
+
export class TrunkIntegrationStrategy implements IntegrationStrategy {
|
|
20
|
+
readonly name = "trunk";
|
|
21
|
+
private maxRetries: number;
|
|
22
|
+
private conflictAction: "abandon" | "queued_for_resolution";
|
|
23
|
+
|
|
24
|
+
constructor(config?: Record<string, unknown>) {
|
|
25
|
+
const typedConfig = config as TrunkStrategyConfig | undefined;
|
|
26
|
+
this.maxRetries = typedConfig?.maxRetries ?? 3;
|
|
27
|
+
this.conflictAction = typedConfig?.conflictAction ?? "abandon";
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
async land(request: LandRequest): Promise<LandResult> {
|
|
31
|
+
const { workspacePath, targetBranch } = request;
|
|
32
|
+
let retryCount = 0;
|
|
33
|
+
|
|
34
|
+
while (retryCount <= this.maxRetries) {
|
|
35
|
+
try {
|
|
36
|
+
// Fetch latest target branch
|
|
37
|
+
this.git(workspacePath, `fetch origin ${targetBranch}`);
|
|
38
|
+
|
|
39
|
+
// Rebase our changes onto latest target
|
|
40
|
+
try {
|
|
41
|
+
this.git(workspacePath, `rebase origin/${targetBranch}`);
|
|
42
|
+
} catch {
|
|
43
|
+
// Rebase conflict — abort and retry or give up
|
|
44
|
+
try {
|
|
45
|
+
this.git(workspacePath, "rebase --abort");
|
|
46
|
+
} catch {
|
|
47
|
+
/* already clean */
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (retryCount >= this.maxRetries) {
|
|
51
|
+
const conflictFiles = this.getConflictFiles(workspacePath);
|
|
52
|
+
return {
|
|
53
|
+
status: "conflict",
|
|
54
|
+
conflictFiles,
|
|
55
|
+
action: this.conflictAction === "abandon" ? "abandoned" : this.conflictAction,
|
|
56
|
+
retryCount,
|
|
57
|
+
error: `Rebase conflict after ${retryCount + 1} attempts`,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
retryCount++;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Push to target branch
|
|
66
|
+
try {
|
|
67
|
+
this.git(workspacePath, `push origin HEAD:${targetBranch}`);
|
|
68
|
+
} catch {
|
|
69
|
+
// Push rejected (concurrent update) — retry
|
|
70
|
+
if (retryCount >= this.maxRetries) {
|
|
71
|
+
return {
|
|
72
|
+
status: "conflict",
|
|
73
|
+
action: this.conflictAction === "abandon" ? "abandoned" : this.conflictAction,
|
|
74
|
+
retryCount,
|
|
75
|
+
error: `Push rejected after ${retryCount + 1} attempts`,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
retryCount++;
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Get the HEAD commit hash
|
|
84
|
+
const commitHash = this.git(workspacePath, "rev-parse HEAD").trim();
|
|
85
|
+
|
|
86
|
+
return {
|
|
87
|
+
status: "landed",
|
|
88
|
+
commitHash,
|
|
89
|
+
retryCount,
|
|
90
|
+
};
|
|
91
|
+
} catch (error) {
|
|
92
|
+
return {
|
|
93
|
+
status: "failed",
|
|
94
|
+
retryCount,
|
|
95
|
+
error: `Unexpected error: ${error instanceof Error ? error.message : String(error)}`,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return {
|
|
101
|
+
status: "failed",
|
|
102
|
+
retryCount,
|
|
103
|
+
error: "Exceeded maximum retries",
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
private git(cwd: string, args: string): string {
|
|
108
|
+
return execSync(`git ${args}`, {
|
|
109
|
+
cwd,
|
|
110
|
+
encoding: "utf-8",
|
|
111
|
+
timeout: 30000,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
private getConflictFiles(cwd: string): string[] {
|
|
116
|
+
try {
|
|
117
|
+
const output = this.git(cwd, "diff --name-only --diff-filter=U");
|
|
118
|
+
return output.split("\n").filter(Boolean);
|
|
119
|
+
} catch {
|
|
120
|
+
return [];
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration Strategy Types
|
|
3
|
+
*
|
|
4
|
+
* Defines the pluggable strategy interface for integrating worker changes
|
|
5
|
+
* into the integration branch. Strategies determine how completed work
|
|
6
|
+
* is landed (merge queue, direct push, optimistic push).
|
|
7
|
+
*
|
|
8
|
+
* @module workspace/strategies/types
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
// =============================================================================
|
|
12
|
+
// Land Request / Result
|
|
13
|
+
// =============================================================================
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Result status from a land operation
|
|
17
|
+
*/
|
|
18
|
+
export type LandResultStatus = "landed" | "conflict" | "failed";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Request to land changes from a worker branch
|
|
22
|
+
*/
|
|
23
|
+
export interface LandRequest {
|
|
24
|
+
/** Worker's branch with completed changes */
|
|
25
|
+
sourceBranch: string;
|
|
26
|
+
|
|
27
|
+
/** Target integration branch */
|
|
28
|
+
targetBranch: string;
|
|
29
|
+
|
|
30
|
+
/** Workspace path where git operations run */
|
|
31
|
+
workspacePath: string;
|
|
32
|
+
|
|
33
|
+
/** Agent ID of the worker */
|
|
34
|
+
agentId: string;
|
|
35
|
+
|
|
36
|
+
/** Task ID associated with the changes */
|
|
37
|
+
taskId?: string;
|
|
38
|
+
|
|
39
|
+
/** Stream ID for the integration stream */
|
|
40
|
+
streamId?: string;
|
|
41
|
+
|
|
42
|
+
/** Commit message for the merge/rebase */
|
|
43
|
+
commitMessage?: string;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Result of a land operation
|
|
48
|
+
*/
|
|
49
|
+
export interface LandResult {
|
|
50
|
+
/** Whether the landing was successful */
|
|
51
|
+
status: LandResultStatus;
|
|
52
|
+
|
|
53
|
+
/** Merge/rebase commit hash if landed */
|
|
54
|
+
commitHash?: string;
|
|
55
|
+
|
|
56
|
+
/** Merge request ID if submitted to a queue */
|
|
57
|
+
mergeRequestId?: string;
|
|
58
|
+
|
|
59
|
+
/** Files with conflicts if status is "conflict" */
|
|
60
|
+
conflictFiles?: string[];
|
|
61
|
+
|
|
62
|
+
/** Action taken on conflict exhaustion */
|
|
63
|
+
action?: "abandoned" | "queued_for_resolution";
|
|
64
|
+
|
|
65
|
+
/** Error message if status is "failed" */
|
|
66
|
+
error?: string;
|
|
67
|
+
|
|
68
|
+
/** Number of retry attempts made */
|
|
69
|
+
retryCount?: number;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// =============================================================================
|
|
73
|
+
// Strategy Interface
|
|
74
|
+
// =============================================================================
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Integration strategy interface.
|
|
78
|
+
*
|
|
79
|
+
* Strategies determine how completed worker changes are integrated
|
|
80
|
+
* into the target branch. Different strategies suit different workflows:
|
|
81
|
+
* - queue: Sequential merge via integrator (default, existing behavior)
|
|
82
|
+
* - trunk: Direct push with rebase-and-retry
|
|
83
|
+
* - optimistic: Push immediately, validate later (judge validates)
|
|
84
|
+
*/
|
|
85
|
+
export interface IntegrationStrategy {
|
|
86
|
+
/** Strategy name */
|
|
87
|
+
readonly name: string;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Land changes from source branch to target branch.
|
|
91
|
+
*/
|
|
92
|
+
land(request: LandRequest): Promise<LandResult>;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Optional initialization hook (called on TeamRuntime.initialize()).
|
|
96
|
+
*/
|
|
97
|
+
initialize?(): Promise<void>;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Optional cleanup hook (called on TeamRuntime.teardown()).
|
|
101
|
+
*/
|
|
102
|
+
close?(): Promise<void>;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// =============================================================================
|
|
106
|
+
// Strategy Configuration Types
|
|
107
|
+
// =============================================================================
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Configuration for the queue strategy
|
|
111
|
+
*/
|
|
112
|
+
export interface QueueStrategyConfig {
|
|
113
|
+
/** Priority for submitted merge requests (default: 100) */
|
|
114
|
+
defaultPriority?: number;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Configuration for the trunk strategy
|
|
119
|
+
*/
|
|
120
|
+
export interface TrunkStrategyConfig {
|
|
121
|
+
/** Maximum rebase-and-retry attempts on conflict (default: 3) */
|
|
122
|
+
maxRetries?: number;
|
|
123
|
+
|
|
124
|
+
/** Action on conflict exhaustion (default: "abandon") */
|
|
125
|
+
conflictAction?: "abandon" | "queued_for_resolution";
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Configuration for the optimistic strategy
|
|
130
|
+
*/
|
|
131
|
+
export interface OptimisticStrategyConfig {
|
|
132
|
+
/** Maximum rebase-and-retry attempts on conflict (default: 3) */
|
|
133
|
+
maxRetries?: number;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// =============================================================================
|
|
137
|
+
// Factory
|
|
138
|
+
// =============================================================================
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Factory function signature for creating strategies
|
|
142
|
+
*/
|
|
143
|
+
export type IntegrationStrategyFactory = (
|
|
144
|
+
config?: Record<string, unknown>
|
|
145
|
+
) => IntegrationStrategy;
|
package/src/workspace/types.ts
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* @implements [[s-7ktd]] Workspace types section
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import type { Stream, WorkerTask, StartTaskResult } from '
|
|
11
|
+
import type { Stream, WorkerTask, StartTaskResult } from 'git-cascade';
|
|
12
12
|
import type { MergeQueueInterface } from './merge-queue/types.js';
|
|
13
13
|
|
|
14
14
|
/**
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* @implements [[s-7ktd]] WorkspaceManager API section
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import type { Stream, WorkerTask, StartTaskResult, AgentWorktree, CleanupWorkerBranchesOptions, CleanupResult } from '
|
|
11
|
+
import type { Stream, WorkerTask, StartTaskResult, AgentWorktree, CleanupWorkerBranchesOptions, CleanupResult } from 'git-cascade';
|
|
12
12
|
import { DataplaneAdapter } from './dataplane-adapter.js';
|
|
13
13
|
import type { DataplaneConfig, WorktreePoolConfig } from './config.js';
|
|
14
14
|
import { DEFAULT_POOL_CONFIG } from './config.js';
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"permissions": {
|
|
3
|
-
"allow": [
|
|
4
|
-
"mcp__plugin_sudocode_sudocode__show_spec",
|
|
5
|
-
"mcp__plugin_sudocode_sudocode__list_specs",
|
|
6
|
-
"mcp__plugin_sudocode_sudocode__upsert_issue",
|
|
7
|
-
"mcp__plugin_sudocode_sudocode__link",
|
|
8
|
-
"Bash(npm test:*)",
|
|
9
|
-
"Bash(npx vitest:*)",
|
|
10
|
-
"Bash(npm run test:run:*)",
|
|
11
|
-
"Bash(npm install:*)",
|
|
12
|
-
"mcp__plugin_sudocode_sudocode__add_feedback",
|
|
13
|
-
"mcp__plugin_sudocode_sudocode__show_issue",
|
|
14
|
-
"mcp__plugin_sudocode_sudocode__ready",
|
|
15
|
-
"mcp__plugin_sudocode_sudocode__list_issues",
|
|
16
|
-
"Bash(wc:*)",
|
|
17
|
-
"Bash(npm run build:*)",
|
|
18
|
-
"Skill(sudocode:sudocode)",
|
|
19
|
-
"Bash(find:*)",
|
|
20
|
-
"Bash(jq:*)",
|
|
21
|
-
"Bash(for spec in s-60tc s-7ktd s-32xs s-bcqm s-8472 s-9rld)",
|
|
22
|
-
"Bash(do)",
|
|
23
|
-
"Bash(echo:*)",
|
|
24
|
-
"Bash(done)",
|
|
25
|
-
"Bash(grep:*)",
|
|
26
|
-
"mcp__plugin_sudocode_sudocode__upsert_spec",
|
|
27
|
-
"mcp__macro-agent__check_messages",
|
|
28
|
-
"mcp__macro-agent__get_hierarchy",
|
|
29
|
-
"Bash(git branch:*)",
|
|
30
|
-
"Bash(git worktree:*)",
|
|
31
|
-
"Bash(npm run test:e2e:*)",
|
|
32
|
-
"Bash(node --experimental-strip-types:*)",
|
|
33
|
-
"Bash(npx tsx:*)",
|
|
34
|
-
"Bash(for:*)",
|
|
35
|
-
"Bash(do echo \"Testing: $f\" npx vitest run --config vitest.e2e.config.ts \"$f\")",
|
|
36
|
-
"Bash(__NEW_LINE_6544485f4eb6ac41__ echo \"Testing full copy...\")",
|
|
37
|
-
"Bash(ls:*)",
|
|
38
|
-
"Bash(git status:*)",
|
|
39
|
-
"Bash(RUN_E2E_TESTS=true npx vitest:*)",
|
|
40
|
-
"Bash(RUN_E2E_TESTS=true npm run test:e2e:*)",
|
|
41
|
-
"Bash(npx tsc:*)",
|
|
42
|
-
"Bash(npm run test:*)",
|
|
43
|
-
"Bash(node:*)",
|
|
44
|
-
"Bash(RUN_FULL_AGENT_TESTS=true npx vitest:*)",
|
|
45
|
-
"Bash(RUN_FULL_AGENT_TESTS=true npm run test:e2e:*)",
|
|
46
|
-
"Bash(MACRO_AGENT_ID=test_agent MACRO_INSTANCE_ID=test_instance MACRO_BASE_DIR=/tmp/test-mcp timeout 3 node:*)",
|
|
47
|
-
"Bash(MACRO_AGENT_ID=test_agent MACRO_INSTANCE_ID=test_instance timeout 5 npx multiagent-mcp:*)",
|
|
48
|
-
"Bash(npm view:*)",
|
|
49
|
-
"Bash(npm ls:*)",
|
|
50
|
-
"Bash(npx @sudocode-ai/claude-code-acp@latest --version)",
|
|
51
|
-
"WebSearch",
|
|
52
|
-
"Bash(npm link:*)",
|
|
53
|
-
"Bash(npm unlink:*)",
|
|
54
|
-
"mcp__macro-agent__spawn_agent",
|
|
55
|
-
"Bash(git stash:*)",
|
|
56
|
-
"Bash(do echo \"Testing $f\")"
|
|
57
|
-
]
|
|
58
|
-
}
|
|
59
|
-
}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Address Translation Utilities
|
|
3
|
-
*
|
|
4
|
-
* Provides bidirectional translation between MAP addresses and
|
|
5
|
-
* legacy MessageRouter channel format. Used during migration to
|
|
6
|
-
* support both addressing schemes.
|
|
7
|
-
*
|
|
8
|
-
* @see specs/s-5qir_map_integration_for_macro_agent.md
|
|
9
|
-
*/
|
|
10
|
-
import type { Address } from "../types.js";
|
|
11
|
-
import type { ChannelType } from "../../router/types.js";
|
|
12
|
-
import type { AgentId } from "../../store/types/index.js";
|
|
13
|
-
/**
|
|
14
|
-
* Legacy channel format from MessageRouter.
|
|
15
|
-
* Used for translation during migration.
|
|
16
|
-
*/
|
|
17
|
-
export interface LegacyChannel {
|
|
18
|
-
type: ChannelType;
|
|
19
|
-
/** Target ID (agent_id, task_id, or topic name) */
|
|
20
|
-
target: string;
|
|
21
|
-
/** Role name for role channels */
|
|
22
|
-
role?: string;
|
|
23
|
-
/** Coordinator ID for scoped role channels */
|
|
24
|
-
coordinatorId?: AgentId;
|
|
25
|
-
/** Broadcast scope */
|
|
26
|
-
scope?: string;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Translate a MAP Address to legacy MessageRouter channel format.
|
|
30
|
-
*
|
|
31
|
-
* Used during migration to route messages through the existing
|
|
32
|
-
* MessageRouter while accepting MAP-style addresses.
|
|
33
|
-
*
|
|
34
|
-
* @param address - MAP address to translate
|
|
35
|
-
* @returns Legacy channel format
|
|
36
|
-
* @throws Error if address type is not supported in legacy format
|
|
37
|
-
*/
|
|
38
|
-
export declare function addressToChannel(address: Address): LegacyChannel;
|
|
39
|
-
/**
|
|
40
|
-
* Translate a legacy MessageRouter channel to MAP address format.
|
|
41
|
-
*
|
|
42
|
-
* Used to migrate existing code to the new addressing scheme.
|
|
43
|
-
*
|
|
44
|
-
* @param channel - Legacy channel to translate
|
|
45
|
-
* @returns MAP address
|
|
46
|
-
* @throws Error if channel type is unknown
|
|
47
|
-
*/
|
|
48
|
-
export declare function channelToAddress(channel: LegacyChannel): Address;
|
|
49
|
-
/**
|
|
50
|
-
* Check if a MAP address can be translated to legacy channel format.
|
|
51
|
-
*
|
|
52
|
-
* Returns false for address types that were added in MAP and have
|
|
53
|
-
* no equivalent in the legacy MessageRouter.
|
|
54
|
-
*
|
|
55
|
-
* @param address - Address to check
|
|
56
|
-
* @returns true if address can be translated to legacy format
|
|
57
|
-
*/
|
|
58
|
-
export declare function isLegacyCompatible(address: Address): boolean;
|
|
59
|
-
/**
|
|
60
|
-
* Get a list of address features that are not legacy compatible.
|
|
61
|
-
*
|
|
62
|
-
* @param address - Address to check
|
|
63
|
-
* @returns Array of incompatible feature names, empty if fully compatible
|
|
64
|
-
*/
|
|
65
|
-
export declare function getLegacyIncompatibilities(address: Address): string[];
|
|
66
|
-
/**
|
|
67
|
-
* Error thrown when a MAP address cannot be translated to legacy format.
|
|
68
|
-
*/
|
|
69
|
-
export declare class AddressTranslationError extends Error {
|
|
70
|
-
readonly address: Address;
|
|
71
|
-
constructor(message: string, address: Address);
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Error thrown when a legacy channel cannot be translated to MAP format.
|
|
75
|
-
*/
|
|
76
|
-
export declare class ChannelTranslationError extends Error {
|
|
77
|
-
readonly channel: LegacyChannel;
|
|
78
|
-
constructor(message: string, channel: LegacyChannel);
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Attempt to translate an address, returning undefined if not compatible.
|
|
82
|
-
*
|
|
83
|
-
* @param address - Address to translate
|
|
84
|
-
* @returns Legacy channel or undefined if not compatible
|
|
85
|
-
*/
|
|
86
|
-
export declare function tryAddressToChannel(address: Address): LegacyChannel | undefined;
|
|
87
|
-
/**
|
|
88
|
-
* Create a mapping table entry for documentation/debugging.
|
|
89
|
-
*/
|
|
90
|
-
export interface AddressMapping {
|
|
91
|
-
mapAddress: string;
|
|
92
|
-
legacyChannel: string;
|
|
93
|
-
notes?: string;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Get the address mapping table for documentation.
|
|
97
|
-
*/
|
|
98
|
-
export declare function getAddressMappingTable(): AddressMapping[];
|
|
99
|
-
//# sourceMappingURL=address-translation.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"address-translation.d.ts","sourceRoot":"","sources":["../../../src/map/utils/address-translation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,OAAO,EASR,MAAM,aAAa,CAAC;AAcrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAU,MAAM,4BAA4B,CAAC;AAMlE;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,aAAa,CA0FhE;AAMD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAsChE;AAMD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAW5D;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAiBrE;AAMD;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;gBAEd,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;CAK9C;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;gBAEpB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;CAKpD;AAMD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,GACf,aAAa,GAAG,SAAS,CAU3B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,cAAc,EAAE,CAuDzD"}
|