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,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation-related type definitions for mail integration.
|
|
3
|
+
*
|
|
4
|
+
* These types define the materialized views for conversations, turns,
|
|
5
|
+
* and threads stored in the EventStore.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { AgentId, Timestamp } from "./primitives.js";
|
|
9
|
+
|
|
10
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
11
|
+
// Conversation Types (aligned with MAP SDK)
|
|
12
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
13
|
+
|
|
14
|
+
export type ConversationType = "session" | "task" | "peer";
|
|
15
|
+
|
|
16
|
+
export type ConversationStatus = "active" | "completed" | "failed" | "archived";
|
|
17
|
+
|
|
18
|
+
export type ParticipantRole =
|
|
19
|
+
| "initiator"
|
|
20
|
+
| "assistant"
|
|
21
|
+
| "worker"
|
|
22
|
+
| "observer";
|
|
23
|
+
|
|
24
|
+
export type TurnSourceType = "explicit" | "intercepted";
|
|
25
|
+
|
|
26
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
27
|
+
// Materialized View Types
|
|
28
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* A conversation groups related interactions between participants.
|
|
32
|
+
* Materialized from `conversation` events.
|
|
33
|
+
*/
|
|
34
|
+
export interface Conversation {
|
|
35
|
+
id: string;
|
|
36
|
+
type: ConversationType;
|
|
37
|
+
status: ConversationStatus;
|
|
38
|
+
subject?: string;
|
|
39
|
+
parentConversationId?: string;
|
|
40
|
+
createdBy: string;
|
|
41
|
+
createdAt: Timestamp;
|
|
42
|
+
updatedAt: Timestamp;
|
|
43
|
+
closedAt?: Timestamp;
|
|
44
|
+
closedBy?: string;
|
|
45
|
+
closeReason?: string;
|
|
46
|
+
participantCount: number;
|
|
47
|
+
metadata?: Record<string, unknown>;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* A turn is a single message or event recorded within a conversation.
|
|
52
|
+
* Materialized from `turn` events.
|
|
53
|
+
*/
|
|
54
|
+
export interface ConversationTurn {
|
|
55
|
+
id: string;
|
|
56
|
+
conversationId: string;
|
|
57
|
+
participant: string;
|
|
58
|
+
timestamp: Timestamp;
|
|
59
|
+
contentType: string;
|
|
60
|
+
content: unknown;
|
|
61
|
+
threadId?: string;
|
|
62
|
+
inReplyTo?: string;
|
|
63
|
+
sourceType: TurnSourceType;
|
|
64
|
+
sourceMessageId?: string;
|
|
65
|
+
metadata?: Record<string, unknown>;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* A thread is a sub-conversation within a conversation, rooted at a specific turn.
|
|
70
|
+
* Materialized from `thread` events.
|
|
71
|
+
*/
|
|
72
|
+
export interface ConversationThread {
|
|
73
|
+
id: string;
|
|
74
|
+
conversationId: string;
|
|
75
|
+
rootTurnId: string;
|
|
76
|
+
subject?: string;
|
|
77
|
+
parentThreadId?: string;
|
|
78
|
+
createdBy: string;
|
|
79
|
+
createdAt: Timestamp;
|
|
80
|
+
turnCount: number;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* A participant is a member of a conversation with a role and join/leave tracking.
|
|
85
|
+
* Materialized from conversation `participant_joined` / `participant_left` events.
|
|
86
|
+
*/
|
|
87
|
+
export interface ConversationParticipant {
|
|
88
|
+
id: string;
|
|
89
|
+
conversationId: string;
|
|
90
|
+
type: "user" | "agent" | "system";
|
|
91
|
+
role: ParticipantRole;
|
|
92
|
+
joinedAt: Timestamp;
|
|
93
|
+
leftAt?: Timestamp;
|
|
94
|
+
agentId?: AgentId;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
98
|
+
// Filter Types
|
|
99
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
100
|
+
|
|
101
|
+
export interface ConversationFilter {
|
|
102
|
+
type?: ConversationType;
|
|
103
|
+
status?: ConversationStatus;
|
|
104
|
+
participantId?: string;
|
|
105
|
+
parentConversationId?: string;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export interface TurnFilter {
|
|
109
|
+
conversationId: string;
|
|
110
|
+
threadId?: string;
|
|
111
|
+
contentType?: string;
|
|
112
|
+
participantId?: string;
|
|
113
|
+
limit?: number;
|
|
114
|
+
order?: "asc" | "desc";
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
118
|
+
// Callback Types
|
|
119
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
120
|
+
|
|
121
|
+
export type ConversationChangeCallback = (
|
|
122
|
+
conversationId: string,
|
|
123
|
+
conversation: Conversation | null
|
|
124
|
+
) => void;
|
|
125
|
+
|
|
126
|
+
export type TurnChangeCallback = (
|
|
127
|
+
conversationId: string,
|
|
128
|
+
turn: ConversationTurn
|
|
129
|
+
) => void;
|
package/src/store/types/index.ts
CHANGED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session-related type definitions
|
|
3
|
+
*
|
|
4
|
+
* Sessions track the mapping between ACP protocol sessions and
|
|
5
|
+
* macro-agent agents. Unlike the in-memory SessionMapper, these
|
|
6
|
+
* records are persisted in the EventStore for recovery after restart.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { AgentId, Timestamp } from "./primitives.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Session state enum — tracks the lifecycle of an ACP session.
|
|
13
|
+
*
|
|
14
|
+
* State transitions:
|
|
15
|
+
* active → mounted → active (via unmount)
|
|
16
|
+
* active → closed
|
|
17
|
+
* mounted → closed
|
|
18
|
+
*/
|
|
19
|
+
export type SessionState = "active" | "mounted" | "closed";
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Persistent session record in the EventStore materialized view.
|
|
23
|
+
*
|
|
24
|
+
* Maps an ACP session ID to its head manager agent, current agent
|
|
25
|
+
* target (which may differ when mounted), and lifecycle state.
|
|
26
|
+
*/
|
|
27
|
+
export interface Session {
|
|
28
|
+
/** ACP session ID (primary key) */
|
|
29
|
+
id: string;
|
|
30
|
+
|
|
31
|
+
/** Head manager agent ID — the original agent for this session */
|
|
32
|
+
head_manager_id: AgentId;
|
|
33
|
+
|
|
34
|
+
/** Currently targeted agent ID (may differ from head_manager_id when mounted) */
|
|
35
|
+
current_agent_id: AgentId;
|
|
36
|
+
|
|
37
|
+
/** Current session state */
|
|
38
|
+
state: SessionState;
|
|
39
|
+
|
|
40
|
+
/** When the session was created */
|
|
41
|
+
created_at: Timestamp;
|
|
42
|
+
|
|
43
|
+
/** When the session state last changed */
|
|
44
|
+
updated_at: Timestamp;
|
|
45
|
+
|
|
46
|
+
/** When the session was closed (if applicable) */
|
|
47
|
+
closed_at?: Timestamp;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Session event actions used in the event payload.
|
|
52
|
+
*/
|
|
53
|
+
export type SessionAction = "created" | "mounted" | "unmounted" | "closed";
|
package/src/store/types/tasks.ts
CHANGED
|
@@ -27,6 +27,7 @@ import type {
|
|
|
27
27
|
TaskError,
|
|
28
28
|
SubtaskStatus,
|
|
29
29
|
AssignOptions,
|
|
30
|
+
ClaimFilter,
|
|
30
31
|
TaskChangeCallback,
|
|
31
32
|
TaskChangeEvent,
|
|
32
33
|
Unsubscribe,
|
|
@@ -96,6 +97,7 @@ export class InMemoryTaskBackend implements TaskBackend {
|
|
|
96
97
|
details: {
|
|
97
98
|
description: options.description,
|
|
98
99
|
parent_task: options.parent_task,
|
|
100
|
+
tags: options.tags,
|
|
99
101
|
},
|
|
100
102
|
},
|
|
101
103
|
});
|
|
@@ -421,6 +423,13 @@ export class InMemoryTaskBackend implements TaskBackend {
|
|
|
421
423
|
if (filter.rootTasksOnly) {
|
|
422
424
|
tasks = tasks.filter((t) => !t.parent_task);
|
|
423
425
|
}
|
|
426
|
+
|
|
427
|
+
if (filter.tags && filter.tags.length > 0) {
|
|
428
|
+
const filterTags = new Set(filter.tags);
|
|
429
|
+
tasks = tasks.filter(
|
|
430
|
+
(t) => t.tags?.some((tag) => filterTags.has(tag))
|
|
431
|
+
);
|
|
432
|
+
}
|
|
424
433
|
}
|
|
425
434
|
|
|
426
435
|
// Convert to ExtendedTask and filter blocked if needed
|
|
@@ -618,6 +627,113 @@ export class InMemoryTaskBackend implements TaskBackend {
|
|
|
618
627
|
return task.agent_history ?? [];
|
|
619
628
|
}
|
|
620
629
|
|
|
630
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
631
|
+
// Pull Model (Claim/Unclaim)
|
|
632
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
633
|
+
|
|
634
|
+
async claim(
|
|
635
|
+
agentId: AgentId,
|
|
636
|
+
filter?: ClaimFilter
|
|
637
|
+
): Promise<ExtendedTask | null> {
|
|
638
|
+
// Find claimable tasks: pending, not blocked, not assigned
|
|
639
|
+
const candidates = await this.listClaimable(filter);
|
|
640
|
+
|
|
641
|
+
if (candidates.length === 0) {
|
|
642
|
+
return null;
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
// Take the first candidate (oldest pending task by creation time)
|
|
646
|
+
const task = candidates[0];
|
|
647
|
+
|
|
648
|
+
// Atomically assign (within the same process, EventStore is synchronous)
|
|
649
|
+
// Re-check status to handle contention
|
|
650
|
+
const current = this.eventStore.getTask(task.id);
|
|
651
|
+
if (!current || current.status !== "pending" || current.assigned_agent) {
|
|
652
|
+
// Task was claimed by another agent between our check and assignment
|
|
653
|
+
return null;
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
// Assign to the claiming agent
|
|
657
|
+
this.eventStore.emit({
|
|
658
|
+
type: "task",
|
|
659
|
+
source: { agent_id: agentId },
|
|
660
|
+
payload: {
|
|
661
|
+
task_id: task.id,
|
|
662
|
+
action: "assigned",
|
|
663
|
+
details: {
|
|
664
|
+
agent_id: agentId,
|
|
665
|
+
},
|
|
666
|
+
},
|
|
667
|
+
});
|
|
668
|
+
|
|
669
|
+
const assigned = this.eventStore.getTask(task.id)!;
|
|
670
|
+
return this.toExtendedTask(assigned);
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
async unclaim(taskId: TaskId): Promise<void> {
|
|
674
|
+
const task = this.eventStore.getTask(taskId);
|
|
675
|
+
if (!task) {
|
|
676
|
+
throw new TaskBackendError(
|
|
677
|
+
`Task not found: ${taskId}`,
|
|
678
|
+
"TASK_NOT_FOUND",
|
|
679
|
+
taskId
|
|
680
|
+
);
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
if (!task.assigned_agent) {
|
|
684
|
+
throw new TaskBackendError(
|
|
685
|
+
`Task is not assigned: ${taskId}`,
|
|
686
|
+
"TASK_NOT_ASSIGNED",
|
|
687
|
+
taskId
|
|
688
|
+
);
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
// Return to pending status
|
|
692
|
+
this.eventStore.emit({
|
|
693
|
+
type: "task",
|
|
694
|
+
source: { agent_id: task.assigned_agent },
|
|
695
|
+
payload: {
|
|
696
|
+
task_id: taskId,
|
|
697
|
+
action: "unassigned",
|
|
698
|
+
details: {
|
|
699
|
+
agent_id: task.assigned_agent,
|
|
700
|
+
},
|
|
701
|
+
},
|
|
702
|
+
});
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
async listClaimable(filter?: ClaimFilter): Promise<ExtendedTask[]> {
|
|
706
|
+
let tasks = this.eventStore.listTasks();
|
|
707
|
+
|
|
708
|
+
// Only pending tasks (not assigned, not in_progress, etc.)
|
|
709
|
+
tasks = tasks.filter(
|
|
710
|
+
(t) => t.status === "pending" && !t.assigned_agent
|
|
711
|
+
);
|
|
712
|
+
|
|
713
|
+
// Apply claim filter
|
|
714
|
+
if (filter) {
|
|
715
|
+
if (filter.tags && filter.tags.length > 0) {
|
|
716
|
+
const filterTags = new Set(filter.tags);
|
|
717
|
+
tasks = tasks.filter(
|
|
718
|
+
(t) => t.tags?.some((tag) => filterTags.has(tag))
|
|
719
|
+
);
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
if (filter.rootTasksOnly) {
|
|
723
|
+
tasks = tasks.filter((t) => !t.parent_task);
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
if (filter.created_by) {
|
|
727
|
+
tasks = tasks.filter((t) => t.created_by === filter.created_by);
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
// Filter out blocked tasks
|
|
732
|
+
return tasks
|
|
733
|
+
.map((t) => this.toExtendedTask(t))
|
|
734
|
+
.filter((t) => !t.isBlocked);
|
|
735
|
+
}
|
|
736
|
+
|
|
621
737
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
622
738
|
// Event Subscriptions
|
|
623
739
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
@@ -56,6 +56,9 @@ export interface CreateTaskOptions {
|
|
|
56
56
|
|
|
57
57
|
/** Optional binding to external system (e.g., sudocode issue ID) */
|
|
58
58
|
external_id?: string;
|
|
59
|
+
|
|
60
|
+
/** Optional tags for classification and filtering (pull model) */
|
|
61
|
+
tags?: string[];
|
|
59
62
|
}
|
|
60
63
|
|
|
61
64
|
/**
|
|
@@ -131,6 +134,9 @@ export interface TaskFilter {
|
|
|
131
134
|
|
|
132
135
|
/** Filter tasks assigned before this timestamp (for stale assignment detection) */
|
|
133
136
|
assignedBefore?: Timestamp;
|
|
137
|
+
|
|
138
|
+
/** Filter by tags (task must have at least one matching tag) */
|
|
139
|
+
tags?: string[];
|
|
134
140
|
}
|
|
135
141
|
|
|
136
142
|
/**
|
|
@@ -162,6 +168,25 @@ export interface AssignOptions {
|
|
|
162
168
|
leaseMs?: number;
|
|
163
169
|
}
|
|
164
170
|
|
|
171
|
+
// =============================================================================
|
|
172
|
+
// Claim Filter (Pull Model)
|
|
173
|
+
// =============================================================================
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Filter options for claiming tasks.
|
|
177
|
+
* Used by the pull model to find eligible tasks for an agent.
|
|
178
|
+
*/
|
|
179
|
+
export interface ClaimFilter {
|
|
180
|
+
/** Only claim tasks with at least one matching tag */
|
|
181
|
+
tags?: string[];
|
|
182
|
+
|
|
183
|
+
/** Only claim root tasks (no parent) */
|
|
184
|
+
rootTasksOnly?: boolean;
|
|
185
|
+
|
|
186
|
+
/** Only claim tasks created by a specific agent */
|
|
187
|
+
created_by?: AgentId;
|
|
188
|
+
}
|
|
189
|
+
|
|
165
190
|
// =============================================================================
|
|
166
191
|
// Event Types
|
|
167
192
|
// =============================================================================
|
|
@@ -284,6 +309,24 @@ export interface TaskBackend {
|
|
|
284
309
|
/** Get tasks that this task blocks */
|
|
285
310
|
getBlocking(taskId: TaskId): Promise<ExtendedTask[]>;
|
|
286
311
|
|
|
312
|
+
// ─── Pull Model (Claim/Unclaim) ──────────────────────────────
|
|
313
|
+
/**
|
|
314
|
+
* Claim the next available task matching the filter.
|
|
315
|
+
* Atomically assigns the task to the agent. Returns null if no matching task
|
|
316
|
+
* is available or if another agent claimed it first (contention).
|
|
317
|
+
*/
|
|
318
|
+
claim?(agentId: AgentId, filter?: ClaimFilter): Promise<ExtendedTask | null>;
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Release a claimed task back to pending status.
|
|
322
|
+
*/
|
|
323
|
+
unclaim?(taskId: TaskId): Promise<void>;
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* List tasks available for claiming (pending, not blocked, not assigned).
|
|
327
|
+
*/
|
|
328
|
+
listClaimable?(filter?: ClaimFilter): Promise<ExtendedTask[]>;
|
|
329
|
+
|
|
287
330
|
// ─── History ─────────────────────────────────────────────────
|
|
288
331
|
/** Get agent assignment history for a task */
|
|
289
332
|
getAgentHistory(taskId: TaskId): Promise<AgentHistoryEntry[]>;
|