macro-agent 0.0.11 → 0.0.13
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 +6 -0
- package/.sudocode/specs.jsonl +7 -0
- package/CLAUDE.md +110 -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 +25 -1
- package/dist/agent/agent-manager.d.ts.map +1 -1
- package/dist/agent/agent-manager.js +93 -7
- 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-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.map +1 -1
- package/dist/api/server.js +95 -0
- package/dist/api/server.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/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 +1 -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/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 +11 -2
- package/dist/mcp/tools/done.d.ts.map +1 -1
- package/dist/mcp/tools/done.js +15 -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/message-router.d.ts +41 -0
- package/dist/router/message-router.d.ts.map +1 -1
- package/dist/router/message-router.js +136 -5
- package/dist/router/message-router.js.map +1 -1
- package/dist/store/event-store.d.ts +8 -1
- package/dist/store/event-store.d.ts.map +1 -1
- package/dist/store/event-store.js +120 -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/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 +1 -0
- package/dist/store/types/index.d.ts.map +1 -1
- package/dist/store/types/index.js +1 -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/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/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 +158 -6
- package/src/agent/types.ts +27 -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/server.ts +110 -0
- 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/map/adapter/__tests__/extensions.test.ts +359 -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 +1 -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/mcp/mcp-server.ts +67 -0
- package/src/mcp/tools/claim_task.ts +86 -0
- package/src/mcp/tools/done.ts +24 -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/__tests__/message-router.test.ts +561 -0
- package/src/router/message-router.ts +223 -6
- package/src/store/event-store.ts +151 -3
- package/src/store/types/agents.ts +1 -1
- package/src/store/types/events.ts +2 -1
- package/src/store/types/index.ts +1 -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/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/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 -111
- package/references/multi-agent-protocol/.sudocode/specs.jsonl +0 -13
- 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 -496
- 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/docs/09-authentication.md +0 -680
- package/references/multi-agent-protocol/docs/10-mail-protocol.md +0 -553
- package/references/multi-agent-protocol/docs/agent-iam-integration.md +0 -877
- package/references/multi-agent-protocol/docs/agentic-mesh-integration-draft.md +0 -459
- package/references/multi-agent-protocol/docs/git-transport-draft.md +0 -251
- package/references/multi-agent-protocol/docs-site/Gemfile +0 -22
- package/references/multi-agent-protocol/docs-site/README.md +0 -82
- package/references/multi-agent-protocol/docs-site/_config.yml +0 -91
- package/references/multi-agent-protocol/docs-site/_includes/head_custom.html +0 -20
- package/references/multi-agent-protocol/docs-site/_sass/color_schemes/map.scss +0 -42
- package/references/multi-agent-protocol/docs-site/_sass/custom/custom.scss +0 -34
- package/references/multi-agent-protocol/docs-site/examples/full-integration.md +0 -510
- package/references/multi-agent-protocol/docs-site/examples/index.md +0 -138
- package/references/multi-agent-protocol/docs-site/examples/simple-chat.md +0 -282
- package/references/multi-agent-protocol/docs-site/examples/task-queue.md +0 -399
- package/references/multi-agent-protocol/docs-site/getting-started/index.md +0 -98
- package/references/multi-agent-protocol/docs-site/getting-started/installation.md +0 -219
- package/references/multi-agent-protocol/docs-site/getting-started/overview.md +0 -172
- package/references/multi-agent-protocol/docs-site/getting-started/quickstart.md +0 -237
- package/references/multi-agent-protocol/docs-site/index.md +0 -136
- package/references/multi-agent-protocol/docs-site/protocol/authentication.md +0 -391
- package/references/multi-agent-protocol/docs-site/protocol/connection-model.md +0 -376
- package/references/multi-agent-protocol/docs-site/protocol/design.md +0 -284
- package/references/multi-agent-protocol/docs-site/protocol/error-handling.md +0 -312
- package/references/multi-agent-protocol/docs-site/protocol/federation.md +0 -449
- package/references/multi-agent-protocol/docs-site/protocol/index.md +0 -129
- package/references/multi-agent-protocol/docs-site/protocol/permissions.md +0 -398
- package/references/multi-agent-protocol/docs-site/protocol/streaming.md +0 -353
- package/references/multi-agent-protocol/docs-site/protocol/wire-protocol.md +0 -369
- package/references/multi-agent-protocol/docs-site/sdk/api/agent.md +0 -357
- package/references/multi-agent-protocol/docs-site/sdk/api/client.md +0 -380
- package/references/multi-agent-protocol/docs-site/sdk/api/index.md +0 -62
- package/references/multi-agent-protocol/docs-site/sdk/api/server.md +0 -453
- package/references/multi-agent-protocol/docs-site/sdk/api/types.md +0 -468
- package/references/multi-agent-protocol/docs-site/sdk/guides/agent.md +0 -375
- package/references/multi-agent-protocol/docs-site/sdk/guides/authentication.md +0 -405
- package/references/multi-agent-protocol/docs-site/sdk/guides/client.md +0 -352
- package/references/multi-agent-protocol/docs-site/sdk/guides/index.md +0 -89
- package/references/multi-agent-protocol/docs-site/sdk/guides/server.md +0 -360
- package/references/multi-agent-protocol/docs-site/sdk/guides/testing.md +0 -446
- package/references/multi-agent-protocol/docs-site/sdk/guides/transports.md +0 -363
- package/references/multi-agent-protocol/docs-site/sdk/index.md +0 -206
- package/references/multi-agent-protocol/package-lock.json +0 -3886
- package/references/multi-agent-protocol/package.json +0 -56
- package/references/multi-agent-protocol/schema/meta.json +0 -467
- package/references/multi-agent-protocol/schema/schema.json +0 -2558
|
@@ -0,0 +1,448 @@
|
|
|
1
|
+
# Self-Driving Codebases: Implementation Summary
|
|
2
|
+
|
|
3
|
+
Implementation of modular team templates, pluggable integration strategies, task pull model, session continuations, and observability for macro-agent. Completed across 6 phases plus a post-phase fix to bridge status routing to topic subscribers.
|
|
4
|
+
|
|
5
|
+
## Design Decisions
|
|
6
|
+
|
|
7
|
+
Seven resolved design decisions (RD1–RD7) guide the implementation:
|
|
8
|
+
|
|
9
|
+
| Decision | Summary |
|
|
10
|
+
|----------|---------|
|
|
11
|
+
| **RD1** | Replace hardcoded `done()` role check with `roleRegistry.hasCapability()` lookup |
|
|
12
|
+
| **RD2** | Share team config via EventStore status event (cross-process MCP subprocess access) |
|
|
13
|
+
| **RD3** | `spawn_rules` translate to capability additions (e.g., `planner: [grinder]` → `agent.spawn.grinder`) |
|
|
14
|
+
| **RD4** | Team `customPrompt` replaces base role `systemPrompt` entirely |
|
|
15
|
+
| **RD5** | Optimistic strategy is thin — validation is the judge agent's job |
|
|
16
|
+
| **RD6** | Team selection via `.macro-agent/config.json` with CLI `--team` override |
|
|
17
|
+
| **RD7** | Use `js-yaml` for YAML parsing |
|
|
18
|
+
|
|
19
|
+
## Phase 0–1: Team Template System
|
|
20
|
+
|
|
21
|
+
**New modules**: `src/teams/`, `.macro-agent/teams/self-driving/`
|
|
22
|
+
|
|
23
|
+
### Data Model (`src/teams/types.ts`)
|
|
24
|
+
|
|
25
|
+
The `TeamManifest` is the central type — a fully-resolved team after loading:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
TeamManifest
|
|
29
|
+
├── TeamTopology
|
|
30
|
+
│ ├── root: TopologyNode # Initial agent (always spawned)
|
|
31
|
+
│ ├── companions: TopologyNode[] # Peers outside the hierarchy
|
|
32
|
+
│ └── spawn_rules: Record<role, role[]>
|
|
33
|
+
├── TeamCommunication
|
|
34
|
+
│ ├── channels: Record<name, { signals[] }>
|
|
35
|
+
│ ├── subscriptions: Record<role, { channel, signals? }[]>
|
|
36
|
+
│ ├── emissions: Record<role, signal[]>
|
|
37
|
+
│ ├── routing: { status, peers[] }
|
|
38
|
+
│ └── enforcement: "permissive" | "strict" | "audit"
|
|
39
|
+
├── MacroAgentExtensions
|
|
40
|
+
│ ├── task_assignment: { mode: "push"|"pull", pull?: {...} }
|
|
41
|
+
│ ├── integration: { strategy: "queue"|"trunk"|"optimistic", config }
|
|
42
|
+
│ ├── lifecycle: { continuations, scaling }
|
|
43
|
+
│ └── observability: { metrics_window_s, snapshot_interval_s }
|
|
44
|
+
└── _resolved (computed at load time)
|
|
45
|
+
├── _resolvedRoles: Map<name, ResolvedTeamRole>
|
|
46
|
+
├── _loadedPrompts: Map<path, content>
|
|
47
|
+
└── _mcpServers: Map<role, McpServerEntry[]>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Team Loader (`src/teams/team-loader.ts`)
|
|
51
|
+
|
|
52
|
+
Seven-step loading pipeline:
|
|
53
|
+
|
|
54
|
+
1. Parse `team.yaml` with `js-yaml`
|
|
55
|
+
2. Validate required fields
|
|
56
|
+
3. Resolve each role: load `roles/<name>.yaml`, find base via `extends`, compute capabilities (add/remove)
|
|
57
|
+
4. Translate `spawn_rules` → capability additions
|
|
58
|
+
5. Load prompt markdown files
|
|
59
|
+
6. Load optional MCP server configs (`tools/mcp-servers.json`)
|
|
60
|
+
7. Validate communication topology references
|
|
61
|
+
|
|
62
|
+
Errors are typed with `TeamLoadError` and codes: `MANIFEST_NOT_FOUND`, `INVALID_MANIFEST`, `ROLE_NOT_FOUND`, `PROMPT_NOT_FOUND`, `INVALID_COMMUNICATION`.
|
|
63
|
+
|
|
64
|
+
### Team Runtime (`src/teams/team-runtime.ts`)
|
|
65
|
+
|
|
66
|
+
Three lifecycle phases:
|
|
67
|
+
|
|
68
|
+
**`initialize()`**:
|
|
69
|
+
1. Registers team roles into `RoleRegistry` (custom layer, highest priority)
|
|
70
|
+
2. Emits `team_config` discovery event to EventStore for cross-process MCP subprocess access (RD2)
|
|
71
|
+
3. Installs a **spawn interceptor** on `AgentManager`
|
|
72
|
+
|
|
73
|
+
**`bootstrap()`**:
|
|
74
|
+
1. Spawns root agent per `topology.root`
|
|
75
|
+
2. Spawns companions per `topology.companions` (parent: null, outside hierarchy)
|
|
76
|
+
3. Sets up peer subscriptions via `MessageRouter`
|
|
77
|
+
4. Starts continuation monitoring for daemon agents
|
|
78
|
+
|
|
79
|
+
**`teardown()`**:
|
|
80
|
+
- Removes spawn interceptor
|
|
81
|
+
- Stops lifecycle event listener
|
|
82
|
+
|
|
83
|
+
### Spawn Interceptor
|
|
84
|
+
|
|
85
|
+
The interceptor is the key integration mechanism. It intercepts every `AgentManager.spawn()` call and injects:
|
|
86
|
+
|
|
87
|
+
- **Topics**: from `communication.subscriptions[roleName]`
|
|
88
|
+
- **MCP servers**: from `_mcpServers[roleName]`
|
|
89
|
+
- **Environment variables**: `MACRO_TEAM_NAME`, `MACRO_TASK_MODE`, `MACRO_INTEGRATION_STRATEGY`
|
|
90
|
+
- **Custom prompt**: from loaded prompts (only if caller didn't provide one)
|
|
91
|
+
- **Interaction patterns**: auto-generated text for pull mode instructions, integration strategy notes
|
|
92
|
+
|
|
93
|
+
This means all downstream agents automatically receive team context without callers needing to know about the team.
|
|
94
|
+
|
|
95
|
+
### Modified Core Files
|
|
96
|
+
|
|
97
|
+
| File | Change |
|
|
98
|
+
|------|--------|
|
|
99
|
+
| `src/agent/agent-manager.ts` | Added `setSpawnInterceptor()`, `customPrompt` in spawn options, interceptor hook point before capability checks |
|
|
100
|
+
| `src/agent/types.ts` | Added `customPrompt`, `interactionPatterns` to `SpawnAgentOptions` |
|
|
101
|
+
| `src/mcp/mcp-server.ts` | Added `integrationStrategy`, `taskBackend` to `MCPServices` |
|
|
102
|
+
| `src/api/server.ts` | Added `GET /api/team` endpoint |
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Phase 2: Pluggable Integration Strategies
|
|
107
|
+
|
|
108
|
+
**New module**: `src/workspace/strategies/`
|
|
109
|
+
|
|
110
|
+
### Architecture
|
|
111
|
+
|
|
112
|
+
Before Phase 2, workers could only land changes through the merge queue. Phase 2 makes the integration path pluggable via a strategy pattern:
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
Worker done()
|
|
116
|
+
│
|
|
117
|
+
├─ integrationStrategy exists?
|
|
118
|
+
│ ├─ Yes → strategy.land(request)
|
|
119
|
+
│ └─ No → merge queue fallback (existing path)
|
|
120
|
+
│
|
|
121
|
+
└─ Resolver worker?
|
|
122
|
+
└─ Yes → RESOLVER_DONE + inline merge (unchanged)
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### IntegrationStrategy Interface (`src/workspace/strategies/types.ts`)
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
interface IntegrationStrategy {
|
|
129
|
+
readonly name: string;
|
|
130
|
+
land(request: LandRequest): Promise<LandResult>;
|
|
131
|
+
initialize?(): Promise<void>;
|
|
132
|
+
close?(): Promise<void>;
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
`LandRequest` carries `sourceBranch`, `targetBranch`, `workspacePath`, `agentId`, `taskId`, `streamId`. `LandResult` returns `status: "landed" | "conflict" | "failed"` with optional `commitHash`, `conflictFiles`, `error`.
|
|
137
|
+
|
|
138
|
+
### Built-in Strategies
|
|
139
|
+
|
|
140
|
+
| Strategy | Behavior | Use Case |
|
|
141
|
+
|----------|----------|----------|
|
|
142
|
+
| **Queue** (`queue.ts`) | Wraps existing `MergeQueueInterface`. Calls `mergeQueue.submit()` | Sequential integration with review gates |
|
|
143
|
+
| **Trunk** (`trunk.ts`) | Direct push with rebase-and-retry loop. `maxRetries` (default: 3). Uses `execSync` for git ops | Fast CI/CD-enforced workflows |
|
|
144
|
+
| **Optimistic** (`optimistic.ts`) | Same as trunk, but emits `validation:requested` event after push via EventStore | Fast with async validation by judge |
|
|
145
|
+
|
|
146
|
+
### Strategy Registry (`src/workspace/strategies/registry.ts`)
|
|
147
|
+
|
|
148
|
+
Factory registry with `register(name, factory)`, `get(name, config)`, `has()`, `list()`. `defaultStrategyRegistry` singleton pre-registers all three strategies.
|
|
149
|
+
|
|
150
|
+
Late binding via setters: `QueueIntegrationStrategy.setMergeQueue()`, `OptimisticIntegrationStrategy.setEventStore()`.
|
|
151
|
+
|
|
152
|
+
### Worker Handler Changes (`src/lifecycle/handlers/worker.ts`)
|
|
153
|
+
|
|
154
|
+
- Added `integrationStrategy?` and `taskMode?` to `WorkerHandlerDeps`
|
|
155
|
+
- Strategy dispatch in Step 4 before merge queue fallback
|
|
156
|
+
- **Pull mode**: `shouldTerminate = false` when `taskMode === "pull"` and `status === "completed"`, keeping the worker alive to claim more tasks
|
|
157
|
+
|
|
158
|
+
### Dependency Wiring
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
MCPServices.integrationStrategy
|
|
162
|
+
→ DoneToolDeps.integrationStrategy
|
|
163
|
+
→ AllHandlerDeps.integrationStrategy
|
|
164
|
+
→ WorkerHandlerDeps.integrationStrategy
|
|
165
|
+
→ strategy.land() in handleWorkerDone()
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## Phase 3: Task Pull Model
|
|
171
|
+
|
|
172
|
+
**New files**: `src/mcp/tools/claim_task.ts`, `unclaim_task.ts`, `list_claimable_tasks.ts`
|
|
173
|
+
|
|
174
|
+
### Architecture
|
|
175
|
+
|
|
176
|
+
Before Phase 3, tasks were always explicitly assigned (push model). Phase 3 adds autonomous task claiming where agents pull work from a shared pool.
|
|
177
|
+
|
|
178
|
+
### Task Backend Extensions (`src/task/backend/types.ts`)
|
|
179
|
+
|
|
180
|
+
Three optional methods added to `TaskBackend`:
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
claim?(agentId: AgentId, filter?: ClaimFilter): Promise<ExtendedTask | null>;
|
|
184
|
+
unclaim?(taskId: TaskId): Promise<void>;
|
|
185
|
+
listClaimable?(filter?: ClaimFilter): Promise<ExtendedTask[]>;
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Optional to avoid breaking existing backends. `ClaimFilter` supports `tags`, `rootTasksOnly`, and `created_by`.
|
|
189
|
+
|
|
190
|
+
### InMemory Implementation (`src/task/backend/memory.ts`)
|
|
191
|
+
|
|
192
|
+
**`claim()`**:
|
|
193
|
+
1. Call `listClaimable()` to get candidates (pending, unblocked, unassigned)
|
|
194
|
+
2. Take first candidate (FIFO by creation time)
|
|
195
|
+
3. Re-check EventStore for contention (status still pending, not yet assigned)
|
|
196
|
+
4. Atomically emit "assigned" event
|
|
197
|
+
5. Return assigned task (or null on contention)
|
|
198
|
+
|
|
199
|
+
**`listClaimable()`**: Filters tasks by pending status, no assigned agent, matching tags/filters, and not blocked (all blockers must be completed).
|
|
200
|
+
|
|
201
|
+
### MCP Tools
|
|
202
|
+
|
|
203
|
+
| Tool | Purpose | Capability Gate |
|
|
204
|
+
|------|---------|-----------------|
|
|
205
|
+
| `claim_task` | Atomically claim next available task | `task.claim` |
|
|
206
|
+
| `unclaim_task` | Return claimed task to pending pool | `task.claim` |
|
|
207
|
+
| `list_claimable_tasks` | Preview available tasks without claiming | `task.claim` |
|
|
208
|
+
|
|
209
|
+
### Capability System Changes
|
|
210
|
+
|
|
211
|
+
- Added `TASK_CAPABILITIES.CLAIM = "task.claim"` to `src/roles/capabilities.ts`
|
|
212
|
+
- Added to `ALL_CAPABILITIES` set
|
|
213
|
+
- Added `CAPABILITY_TOOL_MAP[task.claim] = ["claim_task", "unclaim_task", "list_claimable_tasks"]`
|
|
214
|
+
- Added `"task.claim"` to `TaskCapability` union type in `src/roles/types.ts`
|
|
215
|
+
|
|
216
|
+
### Tags (`src/store/types/tasks.ts`)
|
|
217
|
+
|
|
218
|
+
Added `tags?: string[]` to `Task`, `CreateTaskOptions`, and `TaskFilter` for tag-based filtering.
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Phase 4: Session Continuations
|
|
223
|
+
|
|
224
|
+
### continueAgent() (`src/agent/agent-manager.ts`)
|
|
225
|
+
|
|
226
|
+
Spawns a new agent with the prior agent's context:
|
|
227
|
+
|
|
228
|
+
1. Load original agent from EventStore
|
|
229
|
+
2. Query status events (up to `maxMessages`, default 50)
|
|
230
|
+
3. Format event summaries as "Prior Session Context" markdown
|
|
231
|
+
4. Spawn new agent with same role/parent + resume context as `customPrompt`
|
|
232
|
+
5. Emit continuation event (`continuation_of: agentId`)
|
|
233
|
+
|
|
234
|
+
```typescript
|
|
235
|
+
interface ContinueAgentOptions {
|
|
236
|
+
maxMessages?: number; // History depth (default: 50)
|
|
237
|
+
task?: string; // Override task description
|
|
238
|
+
additionalContext?: string; // Extra context to prepend
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Continuation Monitoring (`src/teams/team-runtime.ts`)
|
|
243
|
+
|
|
244
|
+
`monitorContinuations()` watches for agent lifecycle events:
|
|
245
|
+
- Subscribes to `agentManager.onLifecycleEvent()`
|
|
246
|
+
- Monitors root and companion agent IDs
|
|
247
|
+
- On unexpected stop (not "completed" or "cancelled"):
|
|
248
|
+
- Waits 1 second
|
|
249
|
+
- Calls `agentManager.continueAgent(agentId)`
|
|
250
|
+
- Updates internal tracking to point to new agent
|
|
251
|
+
|
|
252
|
+
Only active when `lifecycle.continuations.enabled === true` in team manifest. Unsubscribes on teardown.
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## Phase 5: Autonomous Observability
|
|
257
|
+
|
|
258
|
+
**New module**: `src/metrics/`
|
|
259
|
+
|
|
260
|
+
### Metrics Functions (`src/metrics/metrics.ts`)
|
|
261
|
+
|
|
262
|
+
Three pure functions that query EventStore:
|
|
263
|
+
|
|
264
|
+
| Function | Queries | Returns |
|
|
265
|
+
|----------|---------|---------|
|
|
266
|
+
| `getThroughputMetrics(store, windowMs)` | Task events (created/completed/failed) | `tasksCompleted`, `tasksFailed`, `tasksCreated`, `completedPerMinute`, `avgCompletionTimeMs` |
|
|
267
|
+
| `getUtilizationMetrics(store, windowMs)` | Agent list + spawn/terminate events | `activeAgents`, `totalSpawned`, `totalStopped`, `agentsByRole`, `agentsByState` |
|
|
268
|
+
| `getErrorMetrics(store, windowMs, limit)` | Failed status events + failed task events | `totalErrors`, `errorsByType`, `recentErrors` |
|
|
269
|
+
|
|
270
|
+
### REST API Endpoints (`src/api/server.ts`)
|
|
271
|
+
|
|
272
|
+
| Endpoint | Query Params | Description |
|
|
273
|
+
|----------|-------------|-------------|
|
|
274
|
+
| `GET /api/metrics/throughput` | `window_ms` (default: 5min) | Task completion rates |
|
|
275
|
+
| `GET /api/metrics/utilization` | — | Agent counts by role and state |
|
|
276
|
+
| `GET /api/metrics/errors` | `window_ms` (default: 30min), `limit` (default: 20) | Error counts and recent failures |
|
|
277
|
+
|
|
278
|
+
Computed inline from EventStore queries. The metrics module provides reusable functions for other consumers (monitor agents, dashboards).
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## Phase 6: Reference Templates, Docs, and Tests
|
|
283
|
+
|
|
284
|
+
### Templates
|
|
285
|
+
|
|
286
|
+
| Template | Roles | Task Mode | Integration | Continuations |
|
|
287
|
+
|----------|-------|-----------|-------------|---------------|
|
|
288
|
+
| **self-driving** | planner, grinder, judge | Pull | Trunk | Enabled |
|
|
289
|
+
| **structured** | lead, developer, reviewer | Push | Queue | Disabled |
|
|
290
|
+
|
|
291
|
+
### Documentation
|
|
292
|
+
|
|
293
|
+
`docs/teams.md` covers: YAML schema reference, role definition format, push vs pull task models, integration strategy guide, both reference templates, and a minimal custom team example.
|
|
294
|
+
|
|
295
|
+
### Test Suite
|
|
296
|
+
|
|
297
|
+
37 unit tests in `src/teams/__tests__/team-system.test.ts` across 5 suites:
|
|
298
|
+
- Template loading (8 tests)
|
|
299
|
+
- TeamRuntime lifecycle (14 tests)
|
|
300
|
+
- Integration strategies (4 tests)
|
|
301
|
+
- Task pull model (4 tests)
|
|
302
|
+
- Metrics module (5 tests)
|
|
303
|
+
|
|
304
|
+
Additional cross-subsystem integration tests in `src/teams/__tests__/cross-subsystem.integration.test.ts` verifying:
|
|
305
|
+
- Strategy → worker handler dispatch
|
|
306
|
+
- Task backend claim/unclaim/listClaimable cycle
|
|
307
|
+
- Team config → spawn interceptor → worker done pipeline
|
|
308
|
+
- Metrics from realistic event streams
|
|
309
|
+
- Pull mode lifecycle (shouldTerminate behavior)
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## Post-Phase Fix: Status → Topic Routing Bridge
|
|
314
|
+
|
|
315
|
+
### Problem
|
|
316
|
+
|
|
317
|
+
`emitStatus()` in `message-router.ts` only routed lifecycle signals to **subtree subscribers** (parents/ancestors via hierarchical subscriptions). Topic subscribers set up by the team communication topology never received these events.
|
|
318
|
+
|
|
319
|
+
This meant that when a worker emitted `WORKER_DONE`, only its parent coordinator received the notification. Peer agents on the same topic (e.g., two workers sharing `work_coordination`, or a monitor on `health`) saw nothing.
|
|
320
|
+
|
|
321
|
+
Two completely separate message pathways existed:
|
|
322
|
+
- **Status/subtree path**: `emitStatus()` → `routeStatusToSubtreeSubscribers()` — hierarchical only
|
|
323
|
+
- **Topic/scope path**: `sendToAddress({ to: { scope } })` — only used by the `send_message` MCP tool (requires explicit agent action)
|
|
324
|
+
|
|
325
|
+
### Fix (`src/router/message-router.ts`)
|
|
326
|
+
|
|
327
|
+
Added `routeStatusToTopicSubscribers()` to `emitStatus()`. After routing to subtree subscribers, it now:
|
|
328
|
+
|
|
329
|
+
1. Looks up all topics the emitting agent is subscribed to
|
|
330
|
+
2. Finds all other agents subscribed to those same topics
|
|
331
|
+
3. Delivers the status notification to each (as a message event with `via: "topic"`)
|
|
332
|
+
4. Deduplicates against agents already notified via subtree routing
|
|
333
|
+
|
|
334
|
+
`routeStatusToSubtreeSubscribers()` now returns `Set<AgentId>` (the agents it notified) so the topic routing step can skip them.
|
|
335
|
+
|
|
336
|
+
### Tests (`src/router/__tests__/message-router.test.ts`)
|
|
337
|
+
|
|
338
|
+
6 new tests:
|
|
339
|
+
- Topic co-subscriber routing (peer agents on shared topic)
|
|
340
|
+
- Self-exclusion (emitter doesn't receive own status)
|
|
341
|
+
- Dedup with subtree (parent on both subtree and topic gets one notification)
|
|
342
|
+
- Multi-subscriber fanout (3 agents on shared topic)
|
|
343
|
+
- No-topic-no-routing (agent without topic subs doesn't leak to topic subscribers)
|
|
344
|
+
- Cross-topic dedup (agent on 2 shared topics gets one notification, not two)
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
## File Inventory
|
|
349
|
+
|
|
350
|
+
### New Files (30)
|
|
351
|
+
|
|
352
|
+
```
|
|
353
|
+
src/teams/types.ts
|
|
354
|
+
src/teams/team-loader.ts
|
|
355
|
+
src/teams/team-runtime.ts
|
|
356
|
+
src/teams/index.ts
|
|
357
|
+
src/teams/__tests__/team-system.test.ts
|
|
358
|
+
src/teams/__tests__/cross-subsystem.integration.test.ts
|
|
359
|
+
|
|
360
|
+
src/workspace/strategies/types.ts
|
|
361
|
+
src/workspace/strategies/registry.ts
|
|
362
|
+
src/workspace/strategies/queue.ts
|
|
363
|
+
src/workspace/strategies/trunk.ts
|
|
364
|
+
src/workspace/strategies/optimistic.ts
|
|
365
|
+
src/workspace/strategies/index.ts
|
|
366
|
+
|
|
367
|
+
src/mcp/tools/claim_task.ts
|
|
368
|
+
src/mcp/tools/unclaim_task.ts
|
|
369
|
+
src/mcp/tools/list_claimable_tasks.ts
|
|
370
|
+
|
|
371
|
+
src/metrics/metrics.ts
|
|
372
|
+
src/metrics/index.ts
|
|
373
|
+
|
|
374
|
+
.macro-agent/teams/self-driving/team.yaml
|
|
375
|
+
.macro-agent/teams/self-driving/roles/planner.yaml
|
|
376
|
+
.macro-agent/teams/self-driving/roles/grinder.yaml
|
|
377
|
+
.macro-agent/teams/self-driving/roles/judge.yaml
|
|
378
|
+
.macro-agent/teams/self-driving/prompts/planner.md
|
|
379
|
+
.macro-agent/teams/self-driving/prompts/grinder.md
|
|
380
|
+
.macro-agent/teams/self-driving/prompts/judge.md
|
|
381
|
+
|
|
382
|
+
.macro-agent/teams/structured/team.yaml
|
|
383
|
+
.macro-agent/teams/structured/roles/lead.yaml
|
|
384
|
+
.macro-agent/teams/structured/roles/developer.yaml
|
|
385
|
+
.macro-agent/teams/structured/roles/reviewer.yaml
|
|
386
|
+
.macro-agent/teams/structured/prompts/lead.md
|
|
387
|
+
.macro-agent/teams/structured/prompts/developer.md
|
|
388
|
+
.macro-agent/teams/structured/prompts/reviewer.md
|
|
389
|
+
|
|
390
|
+
docs/teams.md
|
|
391
|
+
docs/implementation-summary.md
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
### Modified Files (13)
|
|
395
|
+
|
|
396
|
+
```
|
|
397
|
+
src/agent/agent-manager.ts # setSpawnInterceptor(), continueAgent(), customPrompt
|
|
398
|
+
src/agent/types.ts # ContinueAgentOptions, customPrompt, interactionPatterns
|
|
399
|
+
src/lifecycle/handlers/worker.ts # Strategy dispatch, pull mode shouldTerminate
|
|
400
|
+
src/lifecycle/handlers/index.ts # integrationStrategy, taskMode in AllHandlerDeps
|
|
401
|
+
src/mcp/tools/done.ts # integrationStrategy, taskMode in DoneToolDeps
|
|
402
|
+
src/mcp/mcp-server.ts # integrationStrategy, taskBackend in MCPServices; claim tool registration
|
|
403
|
+
src/store/types/tasks.ts # tags field on Task
|
|
404
|
+
src/task/backend/types.ts # ClaimFilter, claim/unclaim/listClaimable optional methods
|
|
405
|
+
src/task/backend/memory.ts # claim(), unclaim(), listClaimable() implementations
|
|
406
|
+
src/roles/types.ts # "task.claim" in TaskCapability union
|
|
407
|
+
src/roles/capabilities.ts # TASK_CAPABILITIES.CLAIM, ALL_CAPABILITIES, CAPABILITY_TOOL_MAP
|
|
408
|
+
src/api/server.ts # /api/team, /api/metrics/* endpoints
|
|
409
|
+
src/router/message-router.ts # emitStatus → topic routing bridge, routeStatusToTopicSubscribers()
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
---
|
|
413
|
+
|
|
414
|
+
## Backward Compatibility
|
|
415
|
+
|
|
416
|
+
All changes are additive. When no team is loaded:
|
|
417
|
+
- Spawn interceptor is not set → `spawn()` is unmodified
|
|
418
|
+
- `integrationStrategy` is undefined → worker handler falls back to merge queue
|
|
419
|
+
- `taskMode` is undefined → workers terminate after completion (push behavior)
|
|
420
|
+
- `claim_task`/`unclaim_task`/`list_claimable_tasks` tools are not registered (no `task.claim` capability)
|
|
421
|
+
- `continueAgent()` exists but is never called
|
|
422
|
+
- Metrics endpoints return zero-value results
|
|
423
|
+
- `/api/team` returns `{ active: false }`
|
|
424
|
+
- Topic routing in `emitStatus()` is a no-op when agents have no topic subscriptions
|
|
425
|
+
|
|
426
|
+
---
|
|
427
|
+
|
|
428
|
+
## Communication Topology: Current State
|
|
429
|
+
|
|
430
|
+
The team communication system defines a rich configuration surface in YAML (channels, subscriptions, emissions, peer routing, enforcement modes). All config features are now wired into runtime behavior.
|
|
431
|
+
|
|
432
|
+
### Feature Matrix
|
|
433
|
+
|
|
434
|
+
| Feature | Config Loaded | Validated | Runtime Wired | Implementation |
|
|
435
|
+
|---------|:---:|:---:|:---:|-------|
|
|
436
|
+
| Channel subscriptions | Yes | Yes | **Yes** | Spawn interceptor injects topic names → `setupDefaultSubscriptions()` |
|
|
437
|
+
| Status → subtree routing | N/A | N/A | **Yes** | `emitStatus()` → `routeStatusToSubtreeSubscribers()` with signal filtering + wake |
|
|
438
|
+
| Status → topic routing | N/A | N/A | **Yes** | `emitStatus()` → `routeStatusToTopicSubscribers()` with signal filtering + wake + dedup |
|
|
439
|
+
| Signal filtering | Yes | Yes | **Yes** | `SignalFilter` callback on MessageRouter, installed by TeamRuntime. Checks peer filters (directional) then channel subscription filters (per-role) |
|
|
440
|
+
| Emission restrictions | Yes | Yes | **Yes** | `EmissionValidator` callback on MessageRouter. Checks agent role against `communication.emissions` allowlist |
|
|
441
|
+
| Enforcement mode | Yes | Yes | **Yes** | Branches on `strict` (reject) / `permissive` (warn) / `audit` (record to EventStore) in emission validator |
|
|
442
|
+
| Peer routing from config | Yes | Yes | **Yes** | `wirePeerRoutes()` reads `routing.peers`, maps `via` to subscription type (direct/topic/scope), defers wiring for late-spawned roles |
|
|
443
|
+
| Wake on status delivery | N/A | N/A | **Yes** | Both `routeStatusToSubtreeSubscribers()` and `routeStatusToTopicSubscribers()` call `wakeHandler` with `priority: "normal"` |
|
|
444
|
+
| Role channels | N/A | N/A | **Yes** | Agents auto-subscribe to `{ type: "role", target: roleName }`. Works independently of team config |
|
|
445
|
+
|
|
446
|
+
### Remaining Gap
|
|
447
|
+
|
|
448
|
+
**Role channels in team config** — Role channels (`{ role: "worker" }` addressing) work independently of team YAML config. Team configs define communication via named `channels` and `subscriptions`, not via role channels. The two systems coexist but aren't integrated. Impact is low — role channels provide a useful shortcut that works out of the box.
|