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,27 @@
|
|
|
1
|
+
# Grinder
|
|
2
|
+
|
|
3
|
+
You are a Grinder — an autonomous worker that claims tasks and executes them.
|
|
4
|
+
|
|
5
|
+
## How You Work
|
|
6
|
+
|
|
7
|
+
1. Call claim_task() to get your next task
|
|
8
|
+
2. Read the task description carefully
|
|
9
|
+
3. Execute the work: write code, run tests, fix issues
|
|
10
|
+
4. When done, call done() with your results
|
|
11
|
+
5. Immediately call claim_task() for the next task
|
|
12
|
+
6. If no tasks available, wait briefly and retry
|
|
13
|
+
|
|
14
|
+
## Work Guidelines
|
|
15
|
+
|
|
16
|
+
- Work independently — do not ask for instructions
|
|
17
|
+
- Write complete implementations, not stubs or TODOs
|
|
18
|
+
- Run tests before calling done() if the task involves code changes
|
|
19
|
+
- Commit your changes with clear, descriptive messages
|
|
20
|
+
- If you're stuck on a task for more than 10 minutes, call done({ status: "blocked" })
|
|
21
|
+
|
|
22
|
+
## Quality
|
|
23
|
+
|
|
24
|
+
- Follow existing codebase conventions
|
|
25
|
+
- Ensure your changes compile and pass lint
|
|
26
|
+
- Write tests for new functionality
|
|
27
|
+
- Keep changes focused on the task — don't refactor surrounding code
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Judge
|
|
2
|
+
|
|
3
|
+
You periodically evaluate the health of the codebase and take corrective action.
|
|
4
|
+
|
|
5
|
+
## Evaluation Cycle
|
|
6
|
+
|
|
7
|
+
Every time you activate:
|
|
8
|
+
1. Run the build — check compilation
|
|
9
|
+
2. Run the test suite — check correctness
|
|
10
|
+
3. Run the linter — check code quality
|
|
11
|
+
4. If all pass: emit GREEN_SNAPSHOT
|
|
12
|
+
5. If any fail: create fixup tasks with tag "fixup" and priority "critical"
|
|
13
|
+
|
|
14
|
+
## Creating Fixup Tasks
|
|
15
|
+
|
|
16
|
+
When you find failures:
|
|
17
|
+
- Create one task per distinct issue (don't bundle)
|
|
18
|
+
- Include the exact error output in the task description
|
|
19
|
+
- Tag with: ["fixup", "<subsystem>"]
|
|
20
|
+
- Reference the failing file and test
|
|
21
|
+
|
|
22
|
+
## Health Reporting
|
|
23
|
+
|
|
24
|
+
After each evaluation cycle, emit a health status:
|
|
25
|
+
- Use emit_status to report overall codebase health
|
|
26
|
+
- Include: build status, test pass rate, lint error count
|
|
27
|
+
- This information helps the planner adjust priorities
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Planner
|
|
2
|
+
|
|
3
|
+
You are the Planner. Your job is to continuously explore the codebase,
|
|
4
|
+
understand the current state, and create well-defined tasks for workers.
|
|
5
|
+
|
|
6
|
+
## How You Work
|
|
7
|
+
|
|
8
|
+
1. **Explore**: Read the codebase to understand architecture, patterns, and gaps
|
|
9
|
+
2. **Plan**: Break the objective into independent, parallelizable tasks
|
|
10
|
+
3. **Create**: Use create_task to add tasks to the pool with clear descriptions and tags
|
|
11
|
+
4. **Monitor**: Watch for completed/failed tasks and adjust the plan
|
|
12
|
+
5. **Repeat**: Planning is continuous — as work completes, create the next batch
|
|
13
|
+
|
|
14
|
+
## Planning Guidelines
|
|
15
|
+
|
|
16
|
+
- Each task should be completable in 5-30 minutes by a single worker
|
|
17
|
+
- Tag tasks with subsystem and type for filtered claiming
|
|
18
|
+
- Set dependencies (blockers) when ordering matters
|
|
19
|
+
- Prefer many small tasks over few large ones — parallelism is the goal
|
|
20
|
+
- Include enough context for a worker to start without re-exploring
|
|
21
|
+
|
|
22
|
+
## Constraints
|
|
23
|
+
|
|
24
|
+
- Do NOT instruct on things the model already knows (coding, testing, etc.)
|
|
25
|
+
- DO specify things specific to this codebase (conventions, build system, deploy pipeline)
|
|
26
|
+
- Constraints are more effective than instructions: "No TODOs, no partial implementations"
|
|
27
|
+
|
|
28
|
+
## Sub-Planners
|
|
29
|
+
|
|
30
|
+
For large subsystems (>10 tasks), spawn a sub-planner:
|
|
31
|
+
- spawn_agent({ role: "planner", task: "Plan the [subsystem] changes" })
|
|
32
|
+
- Sub-planners create tasks in the shared pool
|
|
33
|
+
- You maintain the high-level view
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
name: grinder
|
|
2
|
+
extends: worker
|
|
3
|
+
display_name: "Grinder"
|
|
4
|
+
description: "Claims and executes tasks autonomously"
|
|
5
|
+
|
|
6
|
+
capabilities_add:
|
|
7
|
+
- task.claim
|
|
8
|
+
- git.push
|
|
9
|
+
|
|
10
|
+
prompt: prompts/grinder.md
|
|
11
|
+
|
|
12
|
+
macro_agent:
|
|
13
|
+
lifecycle:
|
|
14
|
+
type: ephemeral
|
|
15
|
+
task_bound: false
|
|
16
|
+
max_duration_ms: 3600000
|
|
17
|
+
self_cleanup: true
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: judge
|
|
2
|
+
extends: monitor
|
|
3
|
+
display_name: "Judge"
|
|
4
|
+
description: "Periodically evaluates codebase health and creates fixup tasks"
|
|
5
|
+
|
|
6
|
+
capabilities_add:
|
|
7
|
+
- exec.build
|
|
8
|
+
- exec.test
|
|
9
|
+
- exec.lint
|
|
10
|
+
- task.create
|
|
11
|
+
- task.update
|
|
12
|
+
- git.branch.create
|
|
13
|
+
- git.push
|
|
14
|
+
|
|
15
|
+
prompt: prompts/judge.md
|
|
16
|
+
|
|
17
|
+
macro_agent:
|
|
18
|
+
workspace:
|
|
19
|
+
type: own
|
|
20
|
+
branch_pattern: "judge/{agent-id}"
|
|
21
|
+
cleanup_on_terminate: true
|
|
22
|
+
lifecycle:
|
|
23
|
+
type: event-driven
|
|
24
|
+
parent_bound: false
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
name: planner
|
|
2
|
+
extends: coordinator
|
|
3
|
+
display_name: "Planner"
|
|
4
|
+
description: "Continuously explores the codebase, creates and prioritizes tasks"
|
|
5
|
+
|
|
6
|
+
capabilities_add:
|
|
7
|
+
- task.claim
|
|
8
|
+
|
|
9
|
+
capabilities_remove:
|
|
10
|
+
- agent.spawn.integrator
|
|
11
|
+
- agent.spawn.monitor
|
|
12
|
+
|
|
13
|
+
prompt: prompts/planner.md
|
|
14
|
+
|
|
15
|
+
macro_agent:
|
|
16
|
+
lifecycle:
|
|
17
|
+
type: daemon
|
|
18
|
+
cascade_terminate: true
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
name: self-driving
|
|
2
|
+
description: "Autonomous codebase development with continuous planning"
|
|
3
|
+
version: 1
|
|
4
|
+
|
|
5
|
+
roles:
|
|
6
|
+
- planner
|
|
7
|
+
- grinder
|
|
8
|
+
- judge
|
|
9
|
+
|
|
10
|
+
topology:
|
|
11
|
+
root:
|
|
12
|
+
role: planner
|
|
13
|
+
prompt: prompts/planner.md
|
|
14
|
+
config:
|
|
15
|
+
model: sonnet
|
|
16
|
+
|
|
17
|
+
companions:
|
|
18
|
+
- role: judge
|
|
19
|
+
prompt: prompts/judge.md
|
|
20
|
+
config:
|
|
21
|
+
model: haiku
|
|
22
|
+
|
|
23
|
+
spawn_rules:
|
|
24
|
+
planner: [grinder, planner]
|
|
25
|
+
judge: []
|
|
26
|
+
grinder: []
|
|
27
|
+
|
|
28
|
+
communication:
|
|
29
|
+
channels:
|
|
30
|
+
task_updates:
|
|
31
|
+
description: "Task lifecycle events"
|
|
32
|
+
signals: [TASK_CREATED, TASK_COMPLETED, TASK_FAILED]
|
|
33
|
+
work_coordination:
|
|
34
|
+
description: "Work assignment and completion"
|
|
35
|
+
signals: [WORK_ASSIGNED, WORKER_DONE, MERGE_REQUEST]
|
|
36
|
+
health:
|
|
37
|
+
description: "System health monitoring"
|
|
38
|
+
signals: [HEALTH_CHECK, METRIC_SNAPSHOT, GREEN_SNAPSHOT]
|
|
39
|
+
|
|
40
|
+
subscriptions:
|
|
41
|
+
planner:
|
|
42
|
+
- channel: task_updates
|
|
43
|
+
- channel: work_coordination
|
|
44
|
+
signals: [WORKER_DONE]
|
|
45
|
+
- channel: health
|
|
46
|
+
signals: [METRIC_SNAPSHOT]
|
|
47
|
+
judge:
|
|
48
|
+
- channel: task_updates
|
|
49
|
+
signals: [TASK_FAILED]
|
|
50
|
+
- channel: work_coordination
|
|
51
|
+
signals: [WORKER_DONE]
|
|
52
|
+
- channel: health
|
|
53
|
+
grinder:
|
|
54
|
+
- channel: work_coordination
|
|
55
|
+
signals: [WORK_ASSIGNED]
|
|
56
|
+
|
|
57
|
+
emissions:
|
|
58
|
+
planner: [TASK_CREATED, WORK_ASSIGNED]
|
|
59
|
+
judge: [HEALTH_CHECK, GREEN_SNAPSHOT, FIXUP_CREATED]
|
|
60
|
+
grinder: [WORKER_DONE]
|
|
61
|
+
|
|
62
|
+
routing:
|
|
63
|
+
status: upstream
|
|
64
|
+
peers:
|
|
65
|
+
- from: judge
|
|
66
|
+
to: planner
|
|
67
|
+
via: direct
|
|
68
|
+
signals: [FIXUP_CREATED, GREEN_SNAPSHOT]
|
|
69
|
+
- from: planner
|
|
70
|
+
to: judge
|
|
71
|
+
via: direct
|
|
72
|
+
signals: [CONVERGENCE_CHECK]
|
|
73
|
+
|
|
74
|
+
enforcement: permissive
|
|
75
|
+
|
|
76
|
+
macro_agent:
|
|
77
|
+
task_assignment:
|
|
78
|
+
mode: pull
|
|
79
|
+
pull:
|
|
80
|
+
idle_timeout_s: 300
|
|
81
|
+
claim_retry_delay_ms: 2000
|
|
82
|
+
max_concurrent_per_agent: 1
|
|
83
|
+
|
|
84
|
+
integration:
|
|
85
|
+
strategy: trunk
|
|
86
|
+
config:
|
|
87
|
+
max_retries: 3
|
|
88
|
+
conflict_action: abandon
|
|
89
|
+
|
|
90
|
+
lifecycle:
|
|
91
|
+
continuations:
|
|
92
|
+
enabled: true
|
|
93
|
+
max_history_messages: 50
|
|
94
|
+
checkpoint_interval: round_trip
|
|
95
|
+
scaling:
|
|
96
|
+
min_workers: 3
|
|
97
|
+
max_workers: 20
|
|
98
|
+
scale_on: task_queue_depth
|
|
99
|
+
idle_drain: true
|
|
100
|
+
|
|
101
|
+
observability:
|
|
102
|
+
metrics_window_s: 3600
|
|
103
|
+
snapshot_interval_s: 300
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Developer
|
|
2
|
+
|
|
3
|
+
You are a **Developer** on a structured development team. You execute a single assigned task in your isolated workspace.
|
|
4
|
+
|
|
5
|
+
## Responsibilities
|
|
6
|
+
|
|
7
|
+
1. **Implement** - Complete the assigned task according to its description
|
|
8
|
+
2. **Test** - Verify your changes work correctly
|
|
9
|
+
3. **Commit** - Create clean, descriptive commits
|
|
10
|
+
4. **Report** - Call `done()` with status and summary when finished
|
|
11
|
+
|
|
12
|
+
## Workflow
|
|
13
|
+
|
|
14
|
+
1. Read and understand the task description
|
|
15
|
+
2. Explore the relevant code to plan your changes
|
|
16
|
+
3. Implement the changes
|
|
17
|
+
4. Run tests to verify correctness
|
|
18
|
+
5. Commit your work with a clear message
|
|
19
|
+
6. Call `done()` with status `completed` and a brief summary
|
|
20
|
+
|
|
21
|
+
## Guidelines
|
|
22
|
+
|
|
23
|
+
- Stay focused on your assigned task only
|
|
24
|
+
- Do not modify files outside the scope of your task
|
|
25
|
+
- If you encounter a blocker, call `done()` with status `failed` and describe the issue
|
|
26
|
+
- Make atomic commits that are easy to review
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Lead
|
|
2
|
+
|
|
3
|
+
You are the **Lead** of a structured development team. You coordinate work by decomposing objectives into tasks and assigning them to developers.
|
|
4
|
+
|
|
5
|
+
## Responsibilities
|
|
6
|
+
|
|
7
|
+
1. **Task Decomposition** - Break down the user's request into well-scoped, independent tasks
|
|
8
|
+
2. **Assignment** - Spawn developers and assign each a specific task
|
|
9
|
+
3. **Progress Tracking** - Monitor task completion and handle failures
|
|
10
|
+
4. **Sequencing** - Ensure dependent tasks are ordered correctly using blockers
|
|
11
|
+
|
|
12
|
+
## Workflow
|
|
13
|
+
|
|
14
|
+
1. Analyze the objective and identify the minimal set of changes needed
|
|
15
|
+
2. Create tasks with clear descriptions and acceptance criteria
|
|
16
|
+
3. Spawn developers to handle each task
|
|
17
|
+
4. Monitor TASK_COMPLETED / TASK_FAILED signals
|
|
18
|
+
5. When all tasks complete, call `done()` with a summary
|
|
19
|
+
|
|
20
|
+
## Guidelines
|
|
21
|
+
|
|
22
|
+
- Keep tasks small and focused (one file or one logical change)
|
|
23
|
+
- Set blockers between tasks that have data dependencies
|
|
24
|
+
- Prefer parallel execution where tasks are independent
|
|
25
|
+
- If a task fails, assess whether to retry or adjust the plan
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Reviewer
|
|
2
|
+
|
|
3
|
+
You are a **Reviewer** on a structured development team. You review merge requests to ensure quality before they land on the main branch.
|
|
4
|
+
|
|
5
|
+
## Responsibilities
|
|
6
|
+
|
|
7
|
+
1. **Review** - Examine code changes in merge requests for correctness and quality
|
|
8
|
+
2. **Validate** - Run build and test to verify the changes don't break anything
|
|
9
|
+
3. **Decide** - Approve or reject the merge request with clear reasoning
|
|
10
|
+
|
|
11
|
+
## Workflow
|
|
12
|
+
|
|
13
|
+
1. Wait for MERGE_REQUEST signals
|
|
14
|
+
2. Check out the branch and review the diff
|
|
15
|
+
3. Run `build` and `test` commands
|
|
16
|
+
4. If everything passes, emit REVIEW_APPROVED
|
|
17
|
+
5. If issues found, emit REVIEW_REJECTED with explanation
|
|
18
|
+
|
|
19
|
+
## Guidelines
|
|
20
|
+
|
|
21
|
+
- Focus on correctness, not style preferences
|
|
22
|
+
- Run the test suite before approving
|
|
23
|
+
- Provide specific, actionable feedback on rejections
|
|
24
|
+
- Do not modify code directly; report issues back to the lead
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
name: reviewer
|
|
2
|
+
extends: monitor
|
|
3
|
+
display_name: "Reviewer"
|
|
4
|
+
description: "Reviews merge requests and approves or rejects changes"
|
|
5
|
+
|
|
6
|
+
capabilities_add:
|
|
7
|
+
- exec.build
|
|
8
|
+
- exec.test
|
|
9
|
+
|
|
10
|
+
prompt: prompts/reviewer.md
|
|
11
|
+
|
|
12
|
+
macro_agent:
|
|
13
|
+
workspace:
|
|
14
|
+
type: own
|
|
15
|
+
branch_pattern: "review/{agent-id}"
|
|
16
|
+
cleanup_on_terminate: true
|
|
17
|
+
lifecycle:
|
|
18
|
+
type: event-driven
|
|
19
|
+
parent_bound: false
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
name: structured
|
|
2
|
+
description: "Hierarchical development with explicit task assignment and merge queue"
|
|
3
|
+
version: 1
|
|
4
|
+
|
|
5
|
+
roles:
|
|
6
|
+
- lead
|
|
7
|
+
- developer
|
|
8
|
+
- reviewer
|
|
9
|
+
|
|
10
|
+
topology:
|
|
11
|
+
root:
|
|
12
|
+
role: lead
|
|
13
|
+
prompt: prompts/lead.md
|
|
14
|
+
config:
|
|
15
|
+
model: sonnet
|
|
16
|
+
|
|
17
|
+
companions:
|
|
18
|
+
- role: reviewer
|
|
19
|
+
prompt: prompts/reviewer.md
|
|
20
|
+
config:
|
|
21
|
+
model: haiku
|
|
22
|
+
|
|
23
|
+
spawn_rules:
|
|
24
|
+
lead: [developer, lead]
|
|
25
|
+
reviewer: []
|
|
26
|
+
developer: []
|
|
27
|
+
|
|
28
|
+
communication:
|
|
29
|
+
channels:
|
|
30
|
+
task_updates:
|
|
31
|
+
description: "Task lifecycle events"
|
|
32
|
+
signals: [TASK_CREATED, TASK_ASSIGNED, TASK_COMPLETED, TASK_FAILED]
|
|
33
|
+
merge_flow:
|
|
34
|
+
description: "Merge queue and integration events"
|
|
35
|
+
signals: [MERGE_REQUEST, MERGE_COMPLETED, MERGE_CONFLICT]
|
|
36
|
+
review_flow:
|
|
37
|
+
description: "Code review signals"
|
|
38
|
+
signals: [REVIEW_REQUESTED, REVIEW_APPROVED, REVIEW_REJECTED]
|
|
39
|
+
|
|
40
|
+
subscriptions:
|
|
41
|
+
lead:
|
|
42
|
+
- channel: task_updates
|
|
43
|
+
- channel: merge_flow
|
|
44
|
+
- channel: review_flow
|
|
45
|
+
signals: [REVIEW_APPROVED, REVIEW_REJECTED]
|
|
46
|
+
reviewer:
|
|
47
|
+
- channel: merge_flow
|
|
48
|
+
signals: [MERGE_REQUEST]
|
|
49
|
+
- channel: review_flow
|
|
50
|
+
developer:
|
|
51
|
+
- channel: task_updates
|
|
52
|
+
signals: [TASK_ASSIGNED]
|
|
53
|
+
|
|
54
|
+
emissions:
|
|
55
|
+
lead: [TASK_CREATED, TASK_ASSIGNED]
|
|
56
|
+
reviewer: [REVIEW_APPROVED, REVIEW_REJECTED]
|
|
57
|
+
developer: [MERGE_REQUEST, TASK_COMPLETED, TASK_FAILED]
|
|
58
|
+
|
|
59
|
+
routing:
|
|
60
|
+
status: upstream
|
|
61
|
+
peers:
|
|
62
|
+
- from: reviewer
|
|
63
|
+
to: lead
|
|
64
|
+
via: direct
|
|
65
|
+
signals: [REVIEW_APPROVED, REVIEW_REJECTED]
|
|
66
|
+
|
|
67
|
+
enforcement: permissive
|
|
68
|
+
|
|
69
|
+
macro_agent:
|
|
70
|
+
task_assignment:
|
|
71
|
+
mode: push
|
|
72
|
+
|
|
73
|
+
integration:
|
|
74
|
+
strategy: queue
|
|
75
|
+
config:
|
|
76
|
+
require_review: true
|
|
77
|
+
|
|
78
|
+
lifecycle:
|
|
79
|
+
continuations:
|
|
80
|
+
enabled: false
|
|
81
|
+
scaling:
|
|
82
|
+
min_workers: 1
|
|
83
|
+
max_workers: 10
|
|
84
|
+
scale_on: manual
|
|
85
|
+
idle_drain: false
|
|
86
|
+
|
|
87
|
+
observability:
|
|
88
|
+
metrics_window_s: 1800
|
|
89
|
+
snapshot_interval_s: 600
|
package/.sudocode/issues.jsonl
CHANGED
|
@@ -147,3 +147,9 @@
|
|
|
147
147
|
{"id":"i-3ojo","uuid":"1677a703-8b6a-40ef-a86c-2e311730d924","title":"Phase 3: Conversation Lifecycle — Create on spawn, close on done/terminate","content":"\nAutomatically create conversations on agent spawn / user session init, close on done() / terminate, track agent-to-conversation mapping.\n\n## Changes\n\n### Create\n- `src/mail/conversation-map.ts` — Agent-to-conversation mapping (agentConversationMap + peerConvIndex)\n\n### Modify\n- `src/agent/agent-manager.ts` — In spawn(): create task conversation, join parent+child, map agent. In terminate(): close conversation, remove from map.\n- `src/mcp/tools/done.ts` — Between step 4 (emitStatus) and step 5 (dispatchDone): record completion turn, close conversation\n- `src/api/server.ts` — In POST /api/init: create session conversation. In POST /api/conversation/message: record user/assistant turns.\n- `src/server/combined-server.ts` — Wire ConversationMap to services\n\n## Key Details\n- ConversationMap is in-memory, reconstructible from EventStore on restart\n- Peer index keyed by sorted agent pair [min(A,B), max(A,B)]\n- All mail operations wrapped in try/catch — never fail core operations\n- done() insertion point: between step 4 (line ~234) and step 5 (line ~236)\n- Head manager participates in session conversation AND each child's task conversation\n\n## Verification\n- Unit test: spawn → conversation created with participants. done() → turn recorded + closed. terminate → closed.\n- Unit test: API init → session conversation. User message → turns recorded.\n- Existing agent-manager, done(), API server tests pass\n","status":"closed","priority":1,"assignee":null,"archived":0,"archived_at":null,"created_at":"2026-02-06 05:10:09","updated_at":"2026-02-06 05:43:01","closed_at":"2026-02-06 05:43:01","parent_id":null,"parent_uuid":null,"relationships":[{"from":"i-3ojo","from_type":"issue","to":"i-44q8","to_type":"issue","type":"blocks"},{"from":"i-3ojo","from_type":"issue","to":"s-gu8h","to_type":"spec","type":"implements"}],"tags":["lifecycle","mail","phase-3"],"feedback":[{"id":"57de1bdb-243a-48f4-9e89-7d1406318b83","from_id":"i-3ojo","to_id":"s-gu8h","feedback_type":"comment","content":"Phase 3 implemented successfully. Key deviations from plan:\n- Added `setMailServices()` late-binding method to AgentManager interface (AgentManager is created before combined-server creates MailService)\n- Fixed EventStore `applyConversationEvent` to map arbitrary `close_reason` to valid `ConversationStatus` (previously used close_reason directly as status)\n- Both standalone (`createAPIServer`) and shared (`createAPIApp`) API modes updated with session conversation creation and turn recording\n- 15 new tests covering ConversationMap, session/task conversations, done/terminate cleanup, and full lifecycle flow","agent":"alexngai","anchor":null,"dismissed":false,"created_at":"2026-02-06T05:43:09.098Z","updated_at":"2026-02-06T05:43:09.098Z"}]}
|
|
148
148
|
{"id":"i-44q8","uuid":"e99900fc-6f62-49e7-9f8b-a1f3c150c510","title":"Phase 4: Turn Recording — MessageRouter hook with hierarchy-aware resolution","content":"\nAdd turnRecorder callback to MessageRouter so direct messages automatically become conversation turns, with hierarchy-aware conversation resolution and peer conversation auto-creation.\n\n## Changes\n\n### Create\n- `src/mail/turn-recorder.ts` — Conversation resolution + turn recording callback\n\n### Modify\n- `src/router/message-router.ts` — Add turnRecorder to config, setTurnRecorder() for late-binding, invoke after event emission + wake handler for agent and task addresses only\n- `src/router/types.ts` — Add TurnRecorder type\n- `src/server/combined-server.ts` — Wire turnRecorder to MessageRouter\n\n## Resolution Algorithm\n1. Only agent and task addresses produce turns (return null for scope/role/broadcast/siblings)\n2. Get both agents' lineage from EventStore\n3. Parent→child or child→parent: use child's task conversation\n4. Peers: getOrCreatePeerConversation() — sorted-pair key, both joined, parent = nearest common ancestor\n5. Record turn with sourceType: 'intercepted', sourceMessageId\n\n## Key Details\n- Follow wakeHandler callback pattern in MessageRouterConfig\n- setTurnRecorder() enables late-binding (services created after router)\n- Try/catch wrapping — never fail message delivery due to turn recording\n- Hook points: agent address after line 333, task address after line 403\n\n## Verification\n- Unit test each resolution case: parent→child, child→parent, peer, broadcast (no turn)\n- Integration test: full hierarchy, send messages, verify conversation tree\n- Existing MessageRouter tests pass\n","status":"closed","priority":1,"assignee":null,"archived":0,"archived_at":null,"created_at":"2026-02-06 05:10:19","updated_at":"2026-02-06 05:46:25","closed_at":"2026-02-06 05:46:25","parent_id":null,"parent_uuid":null,"relationships":[{"from":"i-44q8","from_type":"issue","to":"i-7614","to_type":"issue","type":"blocks"},{"from":"i-44q8","from_type":"issue","to":"s-gu8h","to_type":"spec","type":"implements"}],"tags":["mail","phase-4","router"],"feedback":[{"id":"8f9d5fa9-ba8c-4355-99e7-7690b648c860","from_id":"i-44q8","to_id":"s-gu8h","feedback_type":"comment","content":"Phase 4 implemented. Added TurnRecorderCallback type to router/types.ts, setTurnRecorder() late-binding method on MessageRouter, turn recording hooks for agent and task addresses only (not scope/role/broadcast/hierarchical), createTurnRecorder() with hierarchy-aware resolution (parent↔child → child's task conversation, peers → auto-created peer conversation). 9 new tests covering parent→child, child→parent, peer auto-creation, peer reuse, task address, and edge cases.","agent":"alexngai","anchor":null,"dismissed":false,"created_at":"2026-02-06T05:46:25.563Z","updated_at":"2026-02-06T05:46:25.563Z"}]}
|
|
149
149
|
{"id":"i-7614","uuid":"44846f3e-829c-41bf-a4bc-b7e73b3de759","title":"Phase 5: External Access — REST endpoints and WebSocket channels","content":"\nREST API endpoints for querying conversations/turns, WebSocket channels for real-time conversation updates, mail-backed conversation history.\n\n## Changes\n\n### Modify\n- `src/api/types.ts` — Add ConversationSummary, TurnSummary, WSTurnAdded, WSConversationUpdate types\n- `src/api/server.ts` — Add REST endpoints (GET /api/conversations, GET /api/conversations/:id, GET /api/conversations/:id/turns, POST /api/conversations/:id/close). Add WebSocket channels (conversation:${id}, conversations). Update GET /api/conversation/history to use mail-backed data when enabled.\n\n## Key Details\n- Follow existing /api/agents, /api/tasks endpoint patterns\n- WebSocket channels driven by EventStore onConversationChange() and onTurnChange() listeners\n- GET /api/conversation/history falls back to flat conversationHistory[] when mail disabled\n\n## Verification\n- Unit test each REST endpoint with mocked services\n- Integration test: full flow through REST API\n- WebSocket test: subscribe → send message → verify turn_added notification\n- Existing API tests pass\n","status":"closed","priority":2,"assignee":null,"archived":0,"archived_at":null,"created_at":"2026-02-06 05:10:25","updated_at":"2026-02-06 05:51:39","closed_at":"2026-02-06 05:51:39","parent_id":null,"parent_uuid":null,"relationships":[{"from":"i-7614","from_type":"issue","to":"s-gu8h","to_type":"spec","type":"implements"}],"tags":["api","mail","phase-5"],"feedback":[{"id":"eca59751-c0e3-4b27-a84c-46a25b216060","from_id":"i-7614","to_id":"s-gu8h","feedback_type":"comment","content":"Phase 5 implemented. Added REST endpoints: GET /api/conversations (list with type/status filter + pagination), GET /api/conversations/:id (detail), GET /api/conversations/:id/turns (paginated), POST /api/conversations/:id/close, GET /api/conversations/:id/participants. Added WebSocket channels: 'conversations' (global conversation updates), 'conversation:${id}' (per-conversation updates + turn_added events). Added conversation_update and turn_added to WSMessageType. Used shared registerConversationRoutes() to avoid duplication between standalone and shared server modes. 14 new tests for the REST endpoints.","agent":"alexngai","anchor":null,"dismissed":false,"created_at":"2026-02-06T05:51:38.798Z","updated_at":"2026-02-06T05:51:38.798Z"}]}
|
|
150
|
+
{"id":"i-96f6","uuid":"3f23e84b-1a2e-416e-87a7-d28c3a6e0a98","title":"Wire peer routing from communication config","content":"\n`setupPeerSubscriptions()` in `team-runtime.ts:418-427` ignores `manifest.communication.routing.peers` config entirely. It hardcodes mutual subtree subscriptions only between root and companion agents.\n\n**What needs to happen:**\n- `TeamRuntime.bootstrap()` reads `manifest.communication.routing.peers`\n- Resolves role names to spawned agent IDs\n- Sets up subscriptions based on `via` field:\n - `via: \"direct\"` → mutual agent-to-agent subscriptions\n - `via: \"topic\"` → ensure both agents subscribe to named topic\n - `via: \"scope\"` → scope-based addressing\n- Per-peer `signals` filter stored for later filtering\n\n**Impact:** Without this, non-hierarchical communication patterns defined in team YAML have no runtime effect. Only root↔companion hardcoded wiring works.\n\n**Files:** `src/teams/team-runtime.ts`\n","status":"closed","priority":2,"assignee":null,"archived":0,"archived_at":null,"created_at":"2026-02-07 21:26:55","updated_at":"2026-02-09 03:22:26","closed_at":"2026-02-09 03:22:26","parent_id":null,"parent_uuid":null,"relationships":[{"from":"i-96f6","from_type":"issue","to":"s-29pg","to_type":"spec","type":"implements"}],"tags":["communication","gap","teams"],"feedback":[{"id":"4a4af7e4-8354-41cf-8eb2-d70457b41c70","from_id":"i-96f6","to_id":"s-29pg","feedback_type":"comment","content":"Implemented config-driven peer routing in `src/teams/team-runtime.ts`:\n\n**Core changes:**\n- `wirePeerRoutes()` reads `manifest.communication.routing.peers` and wires subscriptions based on `via` field\n- `wireSinglePeerRoute()` maps `via: \"direct\"` → subtree sub, `via: \"topic\"` → shared topic sub, `via: \"scope\"` → role channel sub\n- Each `PeerConnection` creates a **directional** (one-way) subscription\n- Falls back to legacy bidirectional subtree subs when no `routing.peers` config exists\n\n**Deferred wiring:**\n- Roles not spawned at bootstrap (e.g., grinder) are tracked in `pendingPeerRoutes`\n- `setupDeferredPeerWiring()` uses `onLifecycleEvent(\"spawned\")` to wire pending routes when roles become available\n- Auto-unsubscribes when all pending routes are resolved\n\n**Signal filter storage:**\n- In-memory `peerSignalFilters` map (key: `fromAgentId→toAgentId`, value: signal names)\n- `getPeerSignalFilters()` getter exposes for future signal filtering (issue `i-3o8g`)\n- Peer routes serialized into `team_config` EventStore event as `peerRoutes` field for cross-process access\n\n**Tests:** 8 new tests in `team-system.test.ts` covering config-driven routing, legacy fallback, signal filter storage, deferred wiring, teardown cleanup, topic via, and scope via.","agent":"alexngai","anchor":null,"dismissed":false,"created_at":"2026-02-09T03:22:22.796Z","updated_at":"2026-02-09T03:22:22.796Z"}]}
|
|
151
|
+
{"id":"i-4dh7","uuid":"2192c5c8-2a0c-4846-919a-843f638ce633","title":"Add wake logic to routeStatusToTopicSubscribers()","content":"\n`routeStatusToTopicSubscribers()` in `message-router.ts` delivers status notifications to topic co-subscribers but does **not** call `wakeHandler`. Sleeping agents won't be proactively woken by lifecycle events from peers.\n\n**What needs to happen:**\n- Add `wakeHandler` calls in `routeStatusToTopicSubscribers()` for each notified agent\n- Mirror the pattern used in `sendToAddress()` scope handling (lines 506-523)\n- Wrap in try/catch per existing wake pattern\n\n**Note:** `routeStatusToSubtreeSubscribers()` also lacks wake logic — this is consistent. Consider adding wake to both or just topic routing.\n\n**Files:** `src/router/message-router.ts`\n","status":"closed","priority":2,"assignee":null,"archived":0,"archived_at":null,"created_at":"2026-02-07 21:26:59","updated_at":"2026-02-09 04:26:24","closed_at":"2026-02-09 04:26:24","parent_id":null,"parent_uuid":null,"relationships":[{"from":"i-4dh7","from_type":"issue","to":"s-29pg","to_type":"spec","type":"implements"}],"tags":["communication","gap","router","teams"],"feedback":[{"id":"52f15b2a-8421-4ffe-a7b7-c4502796b106","from_id":"i-4dh7","to_id":"s-29pg","feedback_type":"comment","content":"Added wake logic to both status routing functions in `src/router/message-router.ts`:\n\n- `routeStatusToSubtreeSubscribers()` — now calls `wakeHandler` after emitting each status notification to subtree subscribers\n- `routeStatusToTopicSubscribers()` — same for topic co-subscribers\n\n**Design choices:**\n- Priority: `\"normal\"` — wakes idle/sleeping agents but queues for busy (prompting) ones. `\"low\"` was considered but it never wakes by design, defeating the purpose.\n- Wake errors are caught with try/catch — never fail status delivery due to wake handler issues\n- Follows the exact pattern from `sendToAddress()` scope handling\n\n**Tests:** 4 new tests in `message-router.test.ts`: wake on subtree status, wake on topic status, no wake when busy, resilience to wake handler errors.","agent":"alexngai","anchor":null,"dismissed":false,"created_at":"2026-02-09T04:26:24.094Z","updated_at":"2026-02-09T04:26:24.094Z"}]}
|
|
152
|
+
{"id":"i-3o8g","uuid":"e9f34e0e-a6b2-41cf-bfed-e6ab0cf7187e","title":"Implement signal filtering for topic subscriptions","content":"\n`ChannelSubscription.signals?: string[]` allows per-role filtering of which signals to receive on a channel. Currently `getTopicsForRole()` in `team-runtime.ts:329-341` extracts channel names but discards the signals array entirely. All agents on a topic receive all signals.\n\n**What needs to happen:**\n- Store per-agent signal filters alongside topic subscriptions (in EventStore or in-memory lookup)\n- `routeStatusToTopicSubscribers()` checks the filter before delivering — skip delivery when the status signal doesn't match the agent's configured filter\n- Option 1 (recommended for Phase 1): Filter in `check_messages` MCP tool\n- Option 2: Filter in router during delivery\n\n**Files:** `src/teams/team-runtime.ts`, `src/router/message-router.ts`\n","status":"closed","priority":3,"assignee":null,"archived":0,"archived_at":null,"created_at":"2026-02-07 21:27:04","updated_at":"2026-02-09 05:02:02","closed_at":"2026-02-09 05:02:02","parent_id":null,"parent_uuid":null,"relationships":[{"from":"i-3o8g","from_type":"issue","to":"i-96f6","to_type":"issue","type":"depends-on"},{"from":"i-3o8g","from_type":"issue","to":"s-29pg","to_type":"spec","type":"implements"}],"tags":["communication","gap","teams"],"feedback":[{"id":"2439b9de-6335-4016-acd0-ac1afb796dce","from_id":"i-3o8g","to_id":"s-29pg","feedback_type":"comment","content":"Implemented signal filtering for both subtree and topic status routing.\n\n**Approach**: Late-bound `SignalFilter` callback on MessageRouter (follows `setTurnRecorder` pattern). TeamRuntime installs a combined filter that checks two sources:\n\n1. **Peer connection filters** (per-agent-pair, directional): From `routing.peers[].signals`. Checked first — takes precedence.\n2. **Channel subscription filters** (per-role): From `subscriptions[role][].signals`. Pre-computed into a `roleAllowedSignals` map at install time. If any subscription for a role has no `signals` array, the role receives all signals.\n\n**Key decisions**:\n- Signal name carried in `details.signal` field of status events (not `status_type`)\n- Untagged events (no `details.signal`) always pass through for backwards compatibility\n- Filter installed once at bootstrap; deferred wiring updates `agentRoleMap` but doesn't reinstall the filter (the closure captures the maps by reference)\n\n**Files modified**: `src/router/message-router.ts` (SignalFilter type, setSignalFilter, filter checks in both routing functions), `src/teams/team-runtime.ts` (installSignalFilter, agentRoleMap)\n\n**Tests**: 5 new router tests (suppress, allow, passthrough, subtree, directional args) + 7 new team tests (install, peer allow/block, untagged passthrough, channel sub filter, all-signals role, peer precedence). All 3,081 tests pass.","agent":"alexngai","anchor":null,"dismissed":false,"created_at":"2026-02-09T05:01:57.319Z","updated_at":"2026-02-09T05:01:57.319Z"}]}
|
|
153
|
+
{"id":"i-96z9","uuid":"13867978-72d1-4e65-b99d-5a0f0e762f37","title":"Add test coverage for monitorContinuations()","content":"\n`monitorContinuations()` in `team-runtime.ts` has zero test coverage. The method watches agent lifecycle events and auto-resumes daemon agents on unexpected stop.\n\n**Test cases needed:**\n1. Daemon agent stops unexpectedly → `continueAgent()` called after 1s delay\n2. Agent stops with \"completed\" status → no continuation triggered\n3. Agent stops with \"cancelled\" status → no continuation triggered\n4. Continuation spawn failure → error caught, no crash\n5. Multiple lifecycle events for same agent → no duplicate continuations\n6. Teardown unsubscribes → no continuation after teardown\n\n**Edge cases:**\n- State consistency when agent ID changes after continuation\n- Rapid stop/restart cycles\n\n**Files:** `src/teams/__tests__/team-system.test.ts` or new `continuation.test.ts`\n","status":"closed","priority":2,"assignee":null,"archived":0,"archived_at":null,"created_at":"2026-02-07 21:27:09","updated_at":"2026-02-08 08:08:45","closed_at":"2026-02-08 08:08:45","parent_id":null,"parent_uuid":null,"relationships":[{"from":"i-96z9","from_type":"issue","to":"s-5w36","to_type":"spec","type":"implements"}],"tags":["continuations","teams","testing"],"feedback":[{"id":"ff29220b-52ce-4b49-b720-5971ce0fb376","from_id":"i-96z9","to_id":"s-5w36","feedback_type":"comment","content":"Implemented 6 test cases for `monitorContinuations()` in `src/teams/__tests__/team-system.test.ts`:\n1. Auto-continue root agent on unexpected stop\n2. Auto-continue companion agent on unexpected stop\n3. No continuation on completed status stop\n4. No continuation on cancelled status stop\n5. No trigger for non-monitored agents\n6. Unsubscribe on teardown prevents continuation\n\nAll tests passing.","agent":"alexngai","anchor":null,"dismissed":false,"created_at":"2026-02-08T08:08:36.918Z","updated_at":"2026-02-08T08:08:36.918Z"}]}
|
|
154
|
+
{"id":"i-3y08","uuid":"1c832346-74f6-4683-a01d-1dc3af035277","title":"Wire TrunkStrategy conflictAction and strategy lifecycle hooks","content":"\nTwo minor gaps in the integration strategy subsystem:\n\n1. **`conflictAction` unused:** `TrunkIntegrationStrategy` stores `conflictAction` config (\"abandon\" | \"queued_for_resolution\") but `land()` always returns `status: \"conflict\"` without differentiating. Should set `action` field on the conflict result based on config.\n\n2. **`initialize()`/`close()` lifecycle hooks never called:** The `IntegrationStrategy` interface defines optional `initialize()` and `close()` methods but neither TeamRuntime nor the worker handler invokes them. TeamRuntime should call `initialize()` during `initialize()` and `close()` during `teardown()`.\n\n**Files:** `src/workspace/strategies/trunk.ts`, `src/teams/team-runtime.ts`\n","status":"closed","priority":3,"assignee":null,"archived":0,"archived_at":null,"created_at":"2026-02-07 21:27:15","updated_at":"2026-02-08 08:08:46","closed_at":"2026-02-08 08:08:46","parent_id":null,"parent_uuid":null,"relationships":[{"from":"i-3y08","from_type":"issue","to":"s-6ok3","to_type":"spec","type":"implements"}],"tags":["gap","integration-strategies","teams"],"feedback":[{"id":"fb19956e-2987-4024-8bbc-23a8282af3f3","from_id":"i-3y08","to_id":"s-6ok3","feedback_type":"comment","content":"Both gaps addressed:\n\n1. **conflictAction wired**: Added `action` field to `LandResult` type in `src/workspace/strategies/types.ts`. `TrunkIntegrationStrategy.land()` now sets `action` on both conflict return paths, mapping config's `\"abandon\"` to result's `\"abandoned\"`.\n\n2. **Strategy lifecycle hooks called**: `TeamRuntime.initialize()` now instantiates the strategy via `defaultStrategyRegistry.get()` and calls `strategy.initialize()`. `TeamRuntime.teardown()` calls `strategy.close()`. Both wrapped in try/catch for best-effort semantics. Added `getIntegrationStrategy()` getter.\n\nFiles modified: `src/workspace/strategies/types.ts`, `src/workspace/strategies/trunk.ts`, `src/teams/team-runtime.ts`","agent":"alexngai","anchor":null,"dismissed":false,"created_at":"2026-02-08T08:08:41.672Z","updated_at":"2026-02-08T08:08:41.672Z"}]}
|
|
155
|
+
{"id":"i-1zso","uuid":"3573f69b-89c2-499f-ba0c-faaa578b5165","title":"Implement emission restrictions and enforcement mode","content":"\nTwo related features that are loaded/stored but not enforced at runtime:\n\n1. **Emission restrictions:** `communication.emissions` maps roles to allowed signals. Loader validates role names, but no code checks whether an agent's emitted signal is in its allowed list.\n\n2. **Enforcement mode:** `communication.enforcement` (\"strict\" | \"permissive\" | \"audit\") stored in EventStore `team_config` event. Never retrieved or branched on.\n\n**Implementation per A10 in implementation-details.md:**\n- Enforcement at MCP tool level (not router): `emit_status` tool handler checks team manifest emissions for agent's role\n- `strict`: reject disallowed emissions\n- `permissive`: log warning, allow\n- `audit`: record in EventStore for analysis\n\n**Files:** `src/mcp/mcp-server.ts` or `src/mcp/tools/`, `src/router/message-router.ts`\n","status":"closed","priority":3,"assignee":null,"archived":0,"archived_at":null,"created_at":"2026-02-07 21:27:20","updated_at":"2026-02-09 05:45:05","closed_at":"2026-02-09 05:45:05","parent_id":null,"parent_uuid":null,"relationships":[{"from":"i-1zso","from_type":"issue","to":"i-3o8g","to_type":"issue","type":"depends-on"},{"from":"i-1zso","from_type":"issue","to":"s-29pg","to_type":"spec","type":"implements"}],"tags":["communication","enforcement","gap","teams"],"feedback":[{"id":"9abcdf0a-c065-4814-8a0a-db59d15b8ae2","from_id":"i-1zso","to_id":"s-29pg","feedback_type":"comment","content":"Implemented emission restrictions and enforcement mode.\n\n**Approach**: Late-bound `EmissionValidator` callback on MessageRouter (follows `setSignalFilter` pattern). TeamRuntime installs the validator during bootstrap.\n\n**How it works**:\n1. `emitStatus()` extracts `details.signal` from the status event\n2. Calls the validator with `(agentId, signal)` — validator looks up agent's role via `agentRoleMap`, checks against `communication.emissions[role]`\n3. Returns action based on enforcement mode:\n - `strict` → `reject` (blocks emission entirely, `emitStatus` returns early)\n - `permissive` → `warn` (allows through)\n - `audit` → `audit` (records audit event in EventStore with `emission_violation` type, then allows through)\n4. Untagged events (no `details.signal`) and unknown agents always pass through\n\n**Data serialization**: Added `emissions` to the team_config EventStore event for cross-process access by MCP subprocesses.\n\n**Files modified**: `src/router/message-router.ts` (EmissionValidator type, setEmissionValidator, validation in emitStatus), `src/teams/team-runtime.ts` (installEmissionValidator, emissions in team_config)\n\n**Tests**: 5 new router tests (reject, allow, audit with event recording, warn, untagged passthrough) + 8 new team tests (install, allow, strict reject, permissive warn, audit, untagged, unknown agent, no-config skip, serialization). All 3,095 tests pass.","agent":"alexngai","anchor":null,"dismissed":false,"created_at":"2026-02-09T05:45:00.325Z","updated_at":"2026-02-09T05:45:00.325Z"}]}
|