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
|
@@ -235,11 +235,29 @@ export class ACPOverMAPHandler {
|
|
|
235
235
|
throw new Error("Must call initialize before loadSession");
|
|
236
236
|
}
|
|
237
237
|
|
|
238
|
-
const { sessionId, cwd } = (params as {
|
|
239
|
-
|
|
238
|
+
const { sessionId: rawSessionId, cwd, _meta } = (params as {
|
|
239
|
+
sessionId: string;
|
|
240
|
+
cwd?: string;
|
|
241
|
+
_meta?: Record<string, unknown>;
|
|
242
|
+
}) ?? {};
|
|
243
|
+
if (!rawSessionId) {
|
|
240
244
|
throw new Error("sessionId required");
|
|
241
245
|
}
|
|
242
246
|
|
|
247
|
+
// Extension: If _meta.agentId provided, look up session from agent record
|
|
248
|
+
let sessionId = rawSessionId;
|
|
249
|
+
const metaAgentId = _meta?.agentId as string | undefined;
|
|
250
|
+
if (metaAgentId) {
|
|
251
|
+
const agent = this.eventStore.getAgent(metaAgentId as AgentId);
|
|
252
|
+
if (!agent) {
|
|
253
|
+
throw new Error(`Agent not found: ${metaAgentId}`);
|
|
254
|
+
}
|
|
255
|
+
sessionId = agent.session_id;
|
|
256
|
+
console.error(
|
|
257
|
+
`[ACP-over-MAP] loadSession: Resolved agentId ${metaAgentId} to session ${sessionId}`
|
|
258
|
+
);
|
|
259
|
+
}
|
|
260
|
+
|
|
243
261
|
const workingDir = cwd ?? this.defaultCwd;
|
|
244
262
|
|
|
245
263
|
// Try to find an existing head manager with this session ID
|
|
@@ -484,6 +502,31 @@ export class ACPOverMAPHandler {
|
|
|
484
502
|
return { task };
|
|
485
503
|
}
|
|
486
504
|
|
|
505
|
+
case "_macro/resume": {
|
|
506
|
+
const { agentId } = methodParams as { agentId: string };
|
|
507
|
+
if (!agentId) {
|
|
508
|
+
throw new Error("agentId is required");
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
const agent = this.eventStore.getAgent(agentId as AgentId);
|
|
512
|
+
if (!agent) {
|
|
513
|
+
throw new Error(`Agent not found: ${agentId}`);
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
if (agent.state !== "stopped" && agent.state !== "failed") {
|
|
517
|
+
throw new Error(
|
|
518
|
+
`Agent ${agentId} is ${agent.state} — only stopped or failed agents can be resumed`
|
|
519
|
+
);
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
const spawned = await this.agentManager.resume(agentId as AgentId);
|
|
523
|
+
return {
|
|
524
|
+
success: true,
|
|
525
|
+
agentId: spawned.id,
|
|
526
|
+
sessionId: spawned.session_id,
|
|
527
|
+
};
|
|
528
|
+
}
|
|
529
|
+
|
|
487
530
|
default:
|
|
488
531
|
throw new Error(`Unknown extension method: ${method}`);
|
|
489
532
|
}
|
|
@@ -54,6 +54,10 @@ const EVENT_TYPE_MAP: Record<EventType, MAPEventType | MAPEventType[] | null> =
|
|
|
54
54
|
subscription: null, // Internal only, not exposed
|
|
55
55
|
peer_message: null, // Federation, handled separately
|
|
56
56
|
peer_request: null, // Federation, handled separately
|
|
57
|
+
conversation: null, // Mail: handled by mail module
|
|
58
|
+
turn: null, // Mail: handled by mail module
|
|
59
|
+
thread: null, // Mail: handled by mail module
|
|
60
|
+
session: null, // Internal session tracking
|
|
57
61
|
};
|
|
58
62
|
|
|
59
63
|
/**
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Detection Extension Methods
|
|
3
|
+
*
|
|
4
|
+
* Exposes CLI agent auto-detection to external MAP clients:
|
|
5
|
+
* - `_macro/agents/available` — List detected CLI agents (cached)
|
|
6
|
+
* - `_macro/agents/refresh` — Force a fresh detection scan
|
|
7
|
+
*
|
|
8
|
+
* Both methods are read-only queries gated by `canQuery`.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { MAPAdapter, ExtensionHandler, ExtensionContext } from "../interface.js";
|
|
12
|
+
import type {
|
|
13
|
+
DetectedAgent,
|
|
14
|
+
DetectionResult,
|
|
15
|
+
} from "../../../agent-detection/types.js";
|
|
16
|
+
|
|
17
|
+
// =============================================================================
|
|
18
|
+
// Request/Response Types
|
|
19
|
+
// =============================================================================
|
|
20
|
+
|
|
21
|
+
interface AvailableParams {
|
|
22
|
+
/** Include agents that are not installed (default: false) */
|
|
23
|
+
includeNotInstalled?: boolean;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
interface AvailableResult {
|
|
27
|
+
/** Detected agents */
|
|
28
|
+
agents: PublicDetectedAgent[];
|
|
29
|
+
/** Number of agent definitions scanned */
|
|
30
|
+
scanned: number;
|
|
31
|
+
/** Detection duration in milliseconds */
|
|
32
|
+
durationMs: number;
|
|
33
|
+
/** Whether results came from cache */
|
|
34
|
+
cached: boolean;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
interface RefreshResult {
|
|
38
|
+
/** Detected agents (fresh scan) */
|
|
39
|
+
agents: PublicDetectedAgent[];
|
|
40
|
+
/** Number of agent definitions scanned */
|
|
41
|
+
scanned: number;
|
|
42
|
+
/** Detection duration in milliseconds */
|
|
43
|
+
durationMs: number;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Public agent info returned to MAP clients.
|
|
48
|
+
* Strips internal details (binary path) for security.
|
|
49
|
+
*/
|
|
50
|
+
interface PublicDetectedAgent {
|
|
51
|
+
/** Agent definition ID (e.g., "claude-code") */
|
|
52
|
+
id: string;
|
|
53
|
+
/** Human-readable name */
|
|
54
|
+
name: string;
|
|
55
|
+
/** Whether the binary was found on PATH */
|
|
56
|
+
installed: boolean;
|
|
57
|
+
/** Parsed version string (e.g., "1.2.3") */
|
|
58
|
+
version?: string;
|
|
59
|
+
/** Provider/vendor name */
|
|
60
|
+
vendor: string;
|
|
61
|
+
/** Short description */
|
|
62
|
+
description: string;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// =============================================================================
|
|
66
|
+
// Extension Services
|
|
67
|
+
// =============================================================================
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Services required for agent detection extensions.
|
|
71
|
+
*
|
|
72
|
+
* Uses narrow method signatures rather than exposing the full AgentDetector
|
|
73
|
+
* to keep the contract minimal and testable.
|
|
74
|
+
*/
|
|
75
|
+
export interface AgentDetectionExtensionServices {
|
|
76
|
+
/**
|
|
77
|
+
* Get available agents, returning cached results when possible.
|
|
78
|
+
*/
|
|
79
|
+
getAvailableAgents: (options?: {
|
|
80
|
+
refresh?: boolean;
|
|
81
|
+
includeNotInstalled?: boolean;
|
|
82
|
+
}) => Promise<DetectionResult>;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Whether a detection scan is currently running.
|
|
86
|
+
*/
|
|
87
|
+
isDetecting: () => boolean;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Get cached result without triggering a new scan.
|
|
91
|
+
* Returns null if no results are available yet.
|
|
92
|
+
*/
|
|
93
|
+
getCachedResult: () => DetectionResult | null;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// =============================================================================
|
|
97
|
+
// Helpers
|
|
98
|
+
// =============================================================================
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Convert internal DetectedAgent to public format.
|
|
102
|
+
* Strips filesystem paths for security.
|
|
103
|
+
*/
|
|
104
|
+
function toPublicAgent(agent: DetectedAgent): PublicDetectedAgent {
|
|
105
|
+
return {
|
|
106
|
+
id: agent.id,
|
|
107
|
+
name: agent.name,
|
|
108
|
+
installed: agent.installed,
|
|
109
|
+
version: agent.version,
|
|
110
|
+
vendor: agent.definition.vendor,
|
|
111
|
+
description: agent.definition.description,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// =============================================================================
|
|
116
|
+
// Handler Implementations
|
|
117
|
+
// =============================================================================
|
|
118
|
+
|
|
119
|
+
function createAvailableHandler(
|
|
120
|
+
services: AgentDetectionExtensionServices,
|
|
121
|
+
): ExtensionHandler {
|
|
122
|
+
return async (_context: ExtensionContext, params: unknown) => {
|
|
123
|
+
const { includeNotInstalled = false } = (params ?? {}) as AvailableParams;
|
|
124
|
+
|
|
125
|
+
// Try cached result first
|
|
126
|
+
const cached = services.getCachedResult();
|
|
127
|
+
if (cached) {
|
|
128
|
+
const agents = includeNotInstalled
|
|
129
|
+
? cached.agents
|
|
130
|
+
: cached.agents.filter((a) => a.installed);
|
|
131
|
+
|
|
132
|
+
return {
|
|
133
|
+
agents: agents.map(toPublicAgent),
|
|
134
|
+
scanned: cached.scanned,
|
|
135
|
+
durationMs: cached.durationMs,
|
|
136
|
+
cached: true,
|
|
137
|
+
} satisfies AvailableResult;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// No cache — run detection
|
|
141
|
+
const result = await services.getAvailableAgents({ includeNotInstalled });
|
|
142
|
+
|
|
143
|
+
return {
|
|
144
|
+
agents: result.agents.map(toPublicAgent),
|
|
145
|
+
scanned: result.scanned,
|
|
146
|
+
durationMs: result.durationMs,
|
|
147
|
+
cached: false,
|
|
148
|
+
} satisfies AvailableResult;
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function createRefreshHandler(
|
|
153
|
+
services: AgentDetectionExtensionServices,
|
|
154
|
+
): ExtensionHandler {
|
|
155
|
+
return async (_context: ExtensionContext, _params: unknown) => {
|
|
156
|
+
const result = await services.getAvailableAgents({
|
|
157
|
+
refresh: true,
|
|
158
|
+
includeNotInstalled: true,
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
return {
|
|
162
|
+
agents: result.agents.map(toPublicAgent),
|
|
163
|
+
scanned: result.scanned,
|
|
164
|
+
durationMs: result.durationMs,
|
|
165
|
+
} satisfies RefreshResult;
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// =============================================================================
|
|
170
|
+
// Registration
|
|
171
|
+
// =============================================================================
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Register agent detection extension methods with the MAPAdapter.
|
|
175
|
+
*
|
|
176
|
+
* @param adapter - MAPAdapter instance
|
|
177
|
+
* @param services - Agent detection services
|
|
178
|
+
*/
|
|
179
|
+
export function registerAgentDetectionExtensions(
|
|
180
|
+
adapter: MAPAdapter,
|
|
181
|
+
services: AgentDetectionExtensionServices,
|
|
182
|
+
): void {
|
|
183
|
+
adapter.registerExtension(
|
|
184
|
+
"_macro/agents/available",
|
|
185
|
+
createAvailableHandler(services),
|
|
186
|
+
);
|
|
187
|
+
adapter.registerExtension(
|
|
188
|
+
"_macro/agents/refresh",
|
|
189
|
+
createRefreshHandler(services),
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Unregister agent detection extension methods.
|
|
195
|
+
*
|
|
196
|
+
* @param adapter - MAPAdapter instance
|
|
197
|
+
*/
|
|
198
|
+
export function unregisterAgentDetectionExtensions(adapter: MAPAdapter): void {
|
|
199
|
+
adapter.unregisterExtension("_macro/agents/available");
|
|
200
|
+
adapter.unregisterExtension("_macro/agents/refresh");
|
|
201
|
+
}
|
|
@@ -31,13 +31,40 @@ export {
|
|
|
31
31
|
type InternalWorkspace,
|
|
32
32
|
} from "./workspace.js";
|
|
33
33
|
|
|
34
|
+
// Workspace file search extension
|
|
35
|
+
export {
|
|
36
|
+
registerWorkspaceFileExtensions,
|
|
37
|
+
unregisterWorkspaceFileExtensions,
|
|
38
|
+
type WorkspaceFileServices,
|
|
39
|
+
} from "./workspace-files.js";
|
|
40
|
+
|
|
41
|
+
// Resume extension
|
|
42
|
+
export {
|
|
43
|
+
registerResumeExtension,
|
|
44
|
+
unregisterResumeExtension,
|
|
45
|
+
type ResumeExtensionServices,
|
|
46
|
+
} from "./resume.js";
|
|
47
|
+
|
|
48
|
+
// Agent detection extensions
|
|
49
|
+
export {
|
|
50
|
+
registerAgentDetectionExtensions,
|
|
51
|
+
unregisterAgentDetectionExtensions,
|
|
52
|
+
type AgentDetectionExtensionServices,
|
|
53
|
+
} from "./agent-detection.js";
|
|
54
|
+
|
|
34
55
|
import type { MAPAdapter } from "../interface.js";
|
|
35
56
|
import type { TaskExtensionServices } from "./task.js";
|
|
36
57
|
import type { WakeExtensionServices } from "./wake.js";
|
|
37
58
|
import type { WorkspaceExtensionServices } from "./workspace.js";
|
|
59
|
+
import type { WorkspaceFileServices } from "./workspace-files.js";
|
|
60
|
+
import type { ResumeExtensionServices } from "./resume.js";
|
|
61
|
+
import type { AgentDetectionExtensionServices } from "./agent-detection.js";
|
|
38
62
|
import { registerTaskExtensions } from "./task.js";
|
|
39
63
|
import { registerWakeExtension } from "./wake.js";
|
|
40
64
|
import { registerWorkspaceExtension } from "./workspace.js";
|
|
65
|
+
import { registerWorkspaceFileExtensions } from "./workspace-files.js";
|
|
66
|
+
import { registerResumeExtension } from "./resume.js";
|
|
67
|
+
import { registerAgentDetectionExtensions } from "./agent-detection.js";
|
|
41
68
|
|
|
42
69
|
// =============================================================================
|
|
43
70
|
// Combined Registration
|
|
@@ -50,6 +77,9 @@ export interface MacroExtensionServices {
|
|
|
50
77
|
task?: TaskExtensionServices;
|
|
51
78
|
wake?: WakeExtensionServices;
|
|
52
79
|
workspace?: WorkspaceExtensionServices;
|
|
80
|
+
workspaceFiles?: WorkspaceFileServices;
|
|
81
|
+
resume?: ResumeExtensionServices;
|
|
82
|
+
agentDetection?: AgentDetectionExtensionServices;
|
|
53
83
|
}
|
|
54
84
|
|
|
55
85
|
/**
|
|
@@ -98,6 +128,18 @@ export function registerMacroExtensions(
|
|
|
98
128
|
if (services.workspace) {
|
|
99
129
|
registerWorkspaceExtension(adapter, services.workspace);
|
|
100
130
|
}
|
|
131
|
+
|
|
132
|
+
if (services.workspaceFiles) {
|
|
133
|
+
registerWorkspaceFileExtensions(adapter, services.workspaceFiles);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (services.resume) {
|
|
137
|
+
registerResumeExtension(adapter, services.resume);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (services.agentDetection) {
|
|
141
|
+
registerAgentDetectionExtensions(adapter, services.agentDetection);
|
|
142
|
+
}
|
|
101
143
|
}
|
|
102
144
|
|
|
103
145
|
/**
|
|
@@ -116,6 +158,12 @@ export function unregisterMacroExtensions(adapter: MAPAdapter): void {
|
|
|
116
158
|
adapter.unregisterExtension("_macro/task/send");
|
|
117
159
|
adapter.unregisterExtension("_macro/wake");
|
|
118
160
|
adapter.unregisterExtension("_macro/workspace/info");
|
|
161
|
+
adapter.unregisterExtension("_macro/workspace/files/search");
|
|
162
|
+
adapter.unregisterExtension("_macro/workspace/files/list");
|
|
163
|
+
adapter.unregisterExtension("_macro/workspace/files/read");
|
|
164
|
+
adapter.unregisterExtension("_macro/resume");
|
|
165
|
+
adapter.unregisterExtension("_macro/agents/available");
|
|
166
|
+
adapter.unregisterExtension("_macro/agents/refresh");
|
|
119
167
|
} catch {
|
|
120
168
|
// Ignore errors from unregistering non-existent extensions
|
|
121
169
|
}
|
|
@@ -140,6 +188,15 @@ export const MACRO_EXTENSION_METHODS = [
|
|
|
140
188
|
"_macro/wake",
|
|
141
189
|
// Workspace extension
|
|
142
190
|
"_macro/workspace/info",
|
|
191
|
+
// Workspace file search extensions
|
|
192
|
+
"_macro/workspace/files/search",
|
|
193
|
+
"_macro/workspace/files/list",
|
|
194
|
+
"_macro/workspace/files/read",
|
|
195
|
+
// Resume extension
|
|
196
|
+
"_macro/resume",
|
|
197
|
+
// Agent detection extensions
|
|
198
|
+
"_macro/agents/available",
|
|
199
|
+
"_macro/agents/refresh",
|
|
143
200
|
] as const;
|
|
144
201
|
|
|
145
202
|
/**
|
|
@@ -154,4 +211,10 @@ export const EXTENSION_CAPABILITIES: Record<string, string> = {
|
|
|
154
211
|
"_macro/task/send": "canMessage",
|
|
155
212
|
"_macro/wake": "canMessage", // Wake requires messaging capability
|
|
156
213
|
"_macro/workspace/info": "canQuery",
|
|
214
|
+
"_macro/workspace/files/search": "canQuery",
|
|
215
|
+
"_macro/workspace/files/list": "canQuery",
|
|
216
|
+
"_macro/workspace/files/read": "canQuery",
|
|
217
|
+
"_macro/resume": "canManageLifecycle",
|
|
218
|
+
"_macro/agents/available": "canQuery",
|
|
219
|
+
"_macro/agents/refresh": "canQuery",
|
|
157
220
|
};
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resume Extension Method (_macro/resume)
|
|
3
|
+
*
|
|
4
|
+
* Resumes a stopped agent by spawning a new process and loading
|
|
5
|
+
* the existing ACP session. This is a lifecycle management operation
|
|
6
|
+
* independent from session loading.
|
|
7
|
+
*
|
|
8
|
+
* Unlike _macro/wake (which handles sleeping/idle agents), this extension
|
|
9
|
+
* handles agents whose process has terminated (state: "stopped" or "failed").
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { MAPAdapter, ExtensionHandler, ExtensionContext } from "../interface.js";
|
|
13
|
+
import type { AgentId } from "../../../store/types/index.js";
|
|
14
|
+
import { RPCError } from "../rpc-handler.js";
|
|
15
|
+
|
|
16
|
+
// =============================================================================
|
|
17
|
+
// Request/Response Types
|
|
18
|
+
// =============================================================================
|
|
19
|
+
|
|
20
|
+
interface ResumeParams {
|
|
21
|
+
/** Agent ID to resume */
|
|
22
|
+
agentId: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
interface ResumeResult {
|
|
26
|
+
/** Whether the resume was successful */
|
|
27
|
+
success: boolean;
|
|
28
|
+
/** The resumed agent's ID */
|
|
29
|
+
agentId: string;
|
|
30
|
+
/** The agent's ACP session ID */
|
|
31
|
+
sessionId?: string;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// =============================================================================
|
|
35
|
+
// Extension Services
|
|
36
|
+
// =============================================================================
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Services required for resume extension
|
|
40
|
+
*/
|
|
41
|
+
export interface ResumeExtensionServices {
|
|
42
|
+
/**
|
|
43
|
+
* Get agent by ID. Returns agent record or undefined if not found.
|
|
44
|
+
*/
|
|
45
|
+
getAgent: (agentId: AgentId) => { id: AgentId; state: string; session_id?: string } | undefined;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Resume a stopped agent — spawns a new process and loads the existing session.
|
|
49
|
+
* Returns the spawned agent record.
|
|
50
|
+
*/
|
|
51
|
+
resume: (agentId: AgentId) => Promise<{ id: AgentId; session_id: string }>;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// =============================================================================
|
|
55
|
+
// Handler Implementation
|
|
56
|
+
// =============================================================================
|
|
57
|
+
|
|
58
|
+
function createResumeHandler(services: ResumeExtensionServices): ExtensionHandler {
|
|
59
|
+
return async (_context: ExtensionContext, params: unknown) => {
|
|
60
|
+
const { agentId } = (params ?? {}) as ResumeParams;
|
|
61
|
+
|
|
62
|
+
if (!agentId) {
|
|
63
|
+
throw RPCError.invalidParams("agentId is required");
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Check agent exists
|
|
67
|
+
const agent = services.getAgent(agentId as AgentId);
|
|
68
|
+
if (!agent) {
|
|
69
|
+
throw RPCError.notFound("agent", agentId);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Only resume stopped/failed agents
|
|
73
|
+
if (agent.state !== "stopped" && agent.state !== "failed") {
|
|
74
|
+
throw RPCError.invalidParams(
|
|
75
|
+
`Agent ${agentId} is ${agent.state} — only stopped or failed agents can be resumed`
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Resume the agent
|
|
80
|
+
const spawned = await services.resume(agentId as AgentId);
|
|
81
|
+
|
|
82
|
+
return {
|
|
83
|
+
success: true,
|
|
84
|
+
agentId: spawned.id,
|
|
85
|
+
sessionId: spawned.session_id,
|
|
86
|
+
} satisfies ResumeResult;
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// =============================================================================
|
|
91
|
+
// Registration
|
|
92
|
+
// =============================================================================
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Register resume extension method with the MAPAdapter.
|
|
96
|
+
*
|
|
97
|
+
* @param adapter - MAPAdapter instance
|
|
98
|
+
* @param services - Resume extension services
|
|
99
|
+
*/
|
|
100
|
+
export function registerResumeExtension(
|
|
101
|
+
adapter: MAPAdapter,
|
|
102
|
+
services: ResumeExtensionServices
|
|
103
|
+
): void {
|
|
104
|
+
adapter.registerExtension("_macro/resume", createResumeHandler(services));
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Unregister resume extension method.
|
|
109
|
+
*
|
|
110
|
+
* @param adapter - MAPAdapter instance
|
|
111
|
+
*/
|
|
112
|
+
export function unregisterResumeExtension(adapter: MAPAdapter): void {
|
|
113
|
+
adapter.unregisterExtension("_macro/resume");
|
|
114
|
+
}
|