macro-agent 0.0.11 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.macro-agent/teams/self-driving/prompts/grinder.md +27 -0
- package/.macro-agent/teams/self-driving/prompts/judge.md +27 -0
- package/.macro-agent/teams/self-driving/prompts/planner.md +33 -0
- package/.macro-agent/teams/self-driving/roles/grinder.yaml +17 -0
- package/.macro-agent/teams/self-driving/roles/judge.yaml +24 -0
- package/.macro-agent/teams/self-driving/roles/planner.yaml +18 -0
- package/.macro-agent/teams/self-driving/team.yaml +103 -0
- package/.macro-agent/teams/structured/prompts/developer.md +26 -0
- package/.macro-agent/teams/structured/prompts/lead.md +25 -0
- package/.macro-agent/teams/structured/prompts/reviewer.md +24 -0
- package/.macro-agent/teams/structured/roles/developer.yaml +12 -0
- package/.macro-agent/teams/structured/roles/lead.yaml +11 -0
- package/.macro-agent/teams/structured/roles/reviewer.yaml +19 -0
- package/.macro-agent/teams/structured/team.yaml +89 -0
- package/.sudocode/issues.jsonl +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 +4 -2
- 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,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Agent Definitions Registry
|
|
3
|
+
*
|
|
4
|
+
* Maintains a registry of known CLI coding agents with their
|
|
5
|
+
* detection and headless invocation configurations.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { CLIAgentDefinition } from "./types.js";
|
|
9
|
+
|
|
10
|
+
// =============================================================================
|
|
11
|
+
// Built-in Agent Definitions
|
|
12
|
+
// =============================================================================
|
|
13
|
+
|
|
14
|
+
const CLAUDE_CODE: CLIAgentDefinition = {
|
|
15
|
+
id: "claude-code",
|
|
16
|
+
name: "Claude Code",
|
|
17
|
+
description: "Anthropic's CLI coding agent",
|
|
18
|
+
binary: "claude",
|
|
19
|
+
versionArgs: ["--version"],
|
|
20
|
+
headless: {
|
|
21
|
+
promptFlag: "-p",
|
|
22
|
+
defaultFlags: ["--output-format", "stream-json"],
|
|
23
|
+
},
|
|
24
|
+
modelFlag: "--model",
|
|
25
|
+
cwdFlag: "--cwd",
|
|
26
|
+
vendor: "Anthropic",
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const CODEX: CLIAgentDefinition = {
|
|
30
|
+
id: "codex",
|
|
31
|
+
name: "Codex",
|
|
32
|
+
description: "OpenAI's CLI coding agent",
|
|
33
|
+
binary: "codex",
|
|
34
|
+
versionArgs: ["--version"],
|
|
35
|
+
headless: {
|
|
36
|
+
subcommand: "exec",
|
|
37
|
+
promptFlag: "",
|
|
38
|
+
defaultFlags: ["--full-auto"],
|
|
39
|
+
},
|
|
40
|
+
modelFlag: "--model",
|
|
41
|
+
cwdFlag: "--path",
|
|
42
|
+
vendor: "OpenAI",
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const GEMINI_CLI: CLIAgentDefinition = {
|
|
46
|
+
id: "gemini-cli",
|
|
47
|
+
name: "Gemini CLI",
|
|
48
|
+
description: "Google's CLI coding agent",
|
|
49
|
+
binary: "gemini",
|
|
50
|
+
versionArgs: ["--version"],
|
|
51
|
+
headless: {
|
|
52
|
+
promptFlag: "-p",
|
|
53
|
+
},
|
|
54
|
+
modelFlag: "--model",
|
|
55
|
+
vendor: "Google",
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const OPENCODE: CLIAgentDefinition = {
|
|
59
|
+
id: "opencode",
|
|
60
|
+
name: "OpenCode",
|
|
61
|
+
description: "Anomaly's CLI coding agent",
|
|
62
|
+
binary: "opencode",
|
|
63
|
+
versionArgs: ["--version"],
|
|
64
|
+
headless: {
|
|
65
|
+
subcommand: "run",
|
|
66
|
+
promptFlag: "",
|
|
67
|
+
},
|
|
68
|
+
modelFlag: "--model",
|
|
69
|
+
vendor: "Anomaly",
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const AIDER: CLIAgentDefinition = {
|
|
73
|
+
id: "aider",
|
|
74
|
+
name: "Aider",
|
|
75
|
+
description: "AI pair programming in your terminal",
|
|
76
|
+
binary: "aider",
|
|
77
|
+
versionArgs: ["--version"],
|
|
78
|
+
headless: {
|
|
79
|
+
promptFlag: "--message",
|
|
80
|
+
defaultFlags: ["--yes"],
|
|
81
|
+
},
|
|
82
|
+
modelFlag: "--model",
|
|
83
|
+
vendor: "Aider",
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const GOOSE: CLIAgentDefinition = {
|
|
87
|
+
id: "goose",
|
|
88
|
+
name: "Goose",
|
|
89
|
+
description: "Block's CLI coding agent",
|
|
90
|
+
binary: "goose",
|
|
91
|
+
versionArgs: ["--version"],
|
|
92
|
+
headless: {
|
|
93
|
+
subcommand: "run",
|
|
94
|
+
promptFlag: "-t",
|
|
95
|
+
defaultFlags: ["--no-session"],
|
|
96
|
+
},
|
|
97
|
+
modelFlag: "--model",
|
|
98
|
+
vendor: "Block",
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* All built-in agent definitions.
|
|
103
|
+
*/
|
|
104
|
+
export const BUILTIN_AGENTS: readonly CLIAgentDefinition[] = [
|
|
105
|
+
CLAUDE_CODE,
|
|
106
|
+
CODEX,
|
|
107
|
+
GEMINI_CLI,
|
|
108
|
+
OPENCODE,
|
|
109
|
+
AIDER,
|
|
110
|
+
GOOSE,
|
|
111
|
+
];
|
|
112
|
+
|
|
113
|
+
// =============================================================================
|
|
114
|
+
// Agent Registry
|
|
115
|
+
// =============================================================================
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Registry of known CLI coding agent definitions.
|
|
119
|
+
*
|
|
120
|
+
* Provides lookup by ID and supports adding custom agent definitions.
|
|
121
|
+
*/
|
|
122
|
+
export class AgentRegistry {
|
|
123
|
+
private readonly agents: Map<string, CLIAgentDefinition> = new Map();
|
|
124
|
+
|
|
125
|
+
constructor(definitions?: CLIAgentDefinition[]) {
|
|
126
|
+
// Register built-in agents
|
|
127
|
+
for (const def of BUILTIN_AGENTS) {
|
|
128
|
+
this.agents.set(def.id, def);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Register additional definitions
|
|
132
|
+
if (definitions) {
|
|
133
|
+
for (const def of definitions) {
|
|
134
|
+
this.agents.set(def.id, def);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Get an agent definition by ID.
|
|
141
|
+
*/
|
|
142
|
+
get(id: string): CLIAgentDefinition | undefined {
|
|
143
|
+
return this.agents.get(id);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Check if an agent definition exists.
|
|
148
|
+
*/
|
|
149
|
+
has(id: string): boolean {
|
|
150
|
+
return this.agents.has(id);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Register a new agent definition (or override an existing one).
|
|
155
|
+
*/
|
|
156
|
+
register(definition: CLIAgentDefinition): void {
|
|
157
|
+
this.agents.set(definition.id, definition);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Remove an agent definition by ID.
|
|
162
|
+
*/
|
|
163
|
+
remove(id: string): boolean {
|
|
164
|
+
return this.agents.delete(id);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* List all registered agent definitions.
|
|
169
|
+
*/
|
|
170
|
+
list(): CLIAgentDefinition[] {
|
|
171
|
+
return Array.from(this.agents.values());
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* List agent definitions, optionally excluding disabled agents.
|
|
176
|
+
*/
|
|
177
|
+
listEnabled(disabledIds?: string[]): CLIAgentDefinition[] {
|
|
178
|
+
if (!disabledIds || disabledIds.length === 0) {
|
|
179
|
+
return this.list();
|
|
180
|
+
}
|
|
181
|
+
const disabled = new Set(disabledIds);
|
|
182
|
+
return this.list().filter((def) => !disabled.has(def.id));
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Get the number of registered agent definitions.
|
|
187
|
+
*/
|
|
188
|
+
get size(): number {
|
|
189
|
+
return this.agents.size;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Create a new AgentRegistry with built-in agents and optional custom definitions.
|
|
195
|
+
*/
|
|
196
|
+
export function createAgentRegistry(
|
|
197
|
+
additionalAgents?: CLIAgentDefinition[]
|
|
198
|
+
): AgentRegistry {
|
|
199
|
+
return new AgentRegistry(additionalAgents);
|
|
200
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Agent Auto-Detection Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for detecting installed CLI coding agents
|
|
5
|
+
* and constructing headless invocation commands.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
// =============================================================================
|
|
9
|
+
// Agent Definition
|
|
10
|
+
// =============================================================================
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Headless invocation configuration for a CLI agent.
|
|
14
|
+
*/
|
|
15
|
+
export interface HeadlessConfig {
|
|
16
|
+
/** Subcommand before prompt (e.g., "exec" for codex, "run" for goose) */
|
|
17
|
+
subcommand?: string;
|
|
18
|
+
|
|
19
|
+
/** Flag to pass the prompt. Empty string means prompt is positional. */
|
|
20
|
+
promptFlag: string;
|
|
21
|
+
|
|
22
|
+
/** Default flags always included in headless mode */
|
|
23
|
+
defaultFlags?: string[];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Definition of a known CLI coding agent.
|
|
28
|
+
* Describes how to detect and invoke the agent in headless mode.
|
|
29
|
+
*/
|
|
30
|
+
export interface CLIAgentDefinition {
|
|
31
|
+
/** Unique identifier (e.g., "claude-code", "codex") */
|
|
32
|
+
id: string;
|
|
33
|
+
|
|
34
|
+
/** Human-readable display name */
|
|
35
|
+
name: string;
|
|
36
|
+
|
|
37
|
+
/** Short description */
|
|
38
|
+
description: string;
|
|
39
|
+
|
|
40
|
+
/** The binary/command name to invoke */
|
|
41
|
+
binary: string;
|
|
42
|
+
|
|
43
|
+
/** Arguments to check version (typically ["--version"]) */
|
|
44
|
+
versionArgs: string[];
|
|
45
|
+
|
|
46
|
+
/** Headless invocation configuration */
|
|
47
|
+
headless: HeadlessConfig;
|
|
48
|
+
|
|
49
|
+
/** Flag for model selection (e.g., "--model") */
|
|
50
|
+
modelFlag?: string;
|
|
51
|
+
|
|
52
|
+
/** Flag for working directory (e.g., "--cwd", "--path") */
|
|
53
|
+
cwdFlag?: string;
|
|
54
|
+
|
|
55
|
+
/** Provider/vendor name */
|
|
56
|
+
vendor: string;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// =============================================================================
|
|
60
|
+
// Detection Results
|
|
61
|
+
// =============================================================================
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Result of detecting a single CLI agent on the system.
|
|
65
|
+
*/
|
|
66
|
+
export interface DetectedAgent {
|
|
67
|
+
/** Agent definition ID */
|
|
68
|
+
id: string;
|
|
69
|
+
|
|
70
|
+
/** Human-readable name */
|
|
71
|
+
name: string;
|
|
72
|
+
|
|
73
|
+
/** Whether the binary was found on PATH */
|
|
74
|
+
installed: boolean;
|
|
75
|
+
|
|
76
|
+
/** Parsed version string (e.g., "1.2.3") */
|
|
77
|
+
version?: string;
|
|
78
|
+
|
|
79
|
+
/** Absolute path to binary */
|
|
80
|
+
path?: string;
|
|
81
|
+
|
|
82
|
+
/** The full agent definition (for client display) */
|
|
83
|
+
definition: CLIAgentDefinition;
|
|
84
|
+
|
|
85
|
+
/** When detection was performed (epoch ms) */
|
|
86
|
+
detectedAt: number;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Result of a full detection scan across all known agents.
|
|
91
|
+
*/
|
|
92
|
+
export interface DetectionResult {
|
|
93
|
+
/** All agents (installed and not installed) */
|
|
94
|
+
agents: DetectedAgent[];
|
|
95
|
+
|
|
96
|
+
/** Number of agents scanned */
|
|
97
|
+
scanned: number;
|
|
98
|
+
|
|
99
|
+
/** Detection duration in milliseconds */
|
|
100
|
+
durationMs: number;
|
|
101
|
+
|
|
102
|
+
/** Whether detection is still in progress */
|
|
103
|
+
pending?: boolean;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// =============================================================================
|
|
107
|
+
// Command Builder
|
|
108
|
+
// =============================================================================
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Options for building a spawn command.
|
|
112
|
+
*/
|
|
113
|
+
export interface SpawnCommandOptions {
|
|
114
|
+
/** Model to use (passed via modelFlag) */
|
|
115
|
+
model?: string;
|
|
116
|
+
|
|
117
|
+
/** Working directory (passed via cwdFlag) */
|
|
118
|
+
cwd?: string;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Result of building a spawn command.
|
|
123
|
+
*/
|
|
124
|
+
export interface SpawnCommand {
|
|
125
|
+
/** The binary/command to execute */
|
|
126
|
+
command: string;
|
|
127
|
+
|
|
128
|
+
/** Arguments to pass to the command */
|
|
129
|
+
args: string[];
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// =============================================================================
|
|
133
|
+
// Detection Configuration
|
|
134
|
+
// =============================================================================
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Configuration for the agent detection system.
|
|
138
|
+
*/
|
|
139
|
+
export interface AgentDetectionConfig {
|
|
140
|
+
/** Whether agent detection is enabled (default: true) */
|
|
141
|
+
enabled?: boolean;
|
|
142
|
+
|
|
143
|
+
/** Cache TTL in milliseconds (default: 60000) */
|
|
144
|
+
cacheTtlMs?: number;
|
|
145
|
+
|
|
146
|
+
/** Timeout for `which` calls in milliseconds (default: 5000) */
|
|
147
|
+
whichTimeoutMs?: number;
|
|
148
|
+
|
|
149
|
+
/** Timeout for version checks in milliseconds (default: 10000) */
|
|
150
|
+
versionTimeoutMs?: number;
|
|
151
|
+
|
|
152
|
+
/** Additional custom agent definitions to include */
|
|
153
|
+
additionalAgents?: CLIAgentDefinition[];
|
|
154
|
+
|
|
155
|
+
/** Agent IDs to exclude from detection */
|
|
156
|
+
disabledAgents?: string[];
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// =============================================================================
|
|
160
|
+
// Errors
|
|
161
|
+
// =============================================================================
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Error codes for agent detection operations.
|
|
165
|
+
*/
|
|
166
|
+
export type AgentDetectionErrorCode =
|
|
167
|
+
| "UNKNOWN_AGENT"
|
|
168
|
+
| "AGENT_NOT_INSTALLED"
|
|
169
|
+
| "DETECTION_FAILED"
|
|
170
|
+
| "DETECTION_TIMEOUT";
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Error thrown by agent detection operations.
|
|
174
|
+
*/
|
|
175
|
+
export class AgentDetectionError extends Error {
|
|
176
|
+
constructor(
|
|
177
|
+
message: string,
|
|
178
|
+
public readonly code: AgentDetectionErrorCode,
|
|
179
|
+
public readonly agentId?: string
|
|
180
|
+
) {
|
|
181
|
+
super(message);
|
|
182
|
+
this.name = "AgentDetectionError";
|
|
183
|
+
}
|
|
184
|
+
}
|
package/src/api/server.ts
CHANGED
|
@@ -549,6 +549,116 @@ export function createAPIServer(
|
|
|
549
549
|
res.json(status);
|
|
550
550
|
});
|
|
551
551
|
|
|
552
|
+
// GET /api/team - Get active team info
|
|
553
|
+
app.get("/api/team", (_req: Request, res: Response) => {
|
|
554
|
+
// Check for team config in EventStore
|
|
555
|
+
const statusEvents = eventStore.query({ type: "status", limit: 50 });
|
|
556
|
+
const teamConfigEvent = statusEvents.find(
|
|
557
|
+
(e) => e.payload?.team_config != null
|
|
558
|
+
);
|
|
559
|
+
|
|
560
|
+
if (!teamConfigEvent?.payload?.team_config) {
|
|
561
|
+
res.json({ active: false });
|
|
562
|
+
return;
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
const tc = teamConfigEvent.payload.team_config as Record<string, unknown>;
|
|
566
|
+
res.json({
|
|
567
|
+
active: true,
|
|
568
|
+
name: tc.teamName,
|
|
569
|
+
strategy: tc.strategy,
|
|
570
|
+
taskMode: tc.taskMode,
|
|
571
|
+
enforcement: tc.enforcement,
|
|
572
|
+
});
|
|
573
|
+
});
|
|
574
|
+
|
|
575
|
+
// ─────────────────────────────────────────────────────────────────
|
|
576
|
+
// Metrics Endpoints (Phase 5)
|
|
577
|
+
// ─────────────────────────────────────────────────────────────────
|
|
578
|
+
|
|
579
|
+
// GET /api/metrics/throughput - Task throughput metrics
|
|
580
|
+
app.get("/api/metrics/throughput", (req: Request, res: Response) => {
|
|
581
|
+
const windowMs = req.query.window_ms
|
|
582
|
+
? Number(req.query.window_ms)
|
|
583
|
+
: 5 * 60 * 1000;
|
|
584
|
+
const after = Date.now() - windowMs;
|
|
585
|
+
|
|
586
|
+
const taskEvents = eventStore.query({ type: "task", after });
|
|
587
|
+
let completed = 0, failed = 0, created = 0;
|
|
588
|
+
for (const e of taskEvents) {
|
|
589
|
+
const action = e.payload?.action as string | undefined;
|
|
590
|
+
if (action === "created") created++;
|
|
591
|
+
else if (action === "completed") completed++;
|
|
592
|
+
else if (action === "failed") failed++;
|
|
593
|
+
}
|
|
594
|
+
const windowMin = windowMs / 60000;
|
|
595
|
+
|
|
596
|
+
res.json({
|
|
597
|
+
tasksCompleted: completed,
|
|
598
|
+
tasksFailed: failed,
|
|
599
|
+
tasksCreated: created,
|
|
600
|
+
completedPerMinute: windowMin > 0 ? Math.round((completed / windowMin) * 100) / 100 : 0,
|
|
601
|
+
windowMs,
|
|
602
|
+
});
|
|
603
|
+
});
|
|
604
|
+
|
|
605
|
+
// GET /api/metrics/utilization - Agent utilization metrics
|
|
606
|
+
app.get("/api/metrics/utilization", (_req: Request, res: Response) => {
|
|
607
|
+
const allAgents = eventStore.listAgents();
|
|
608
|
+
const active = allAgents.filter(
|
|
609
|
+
(a) => a.state === "running" || a.state === "spawning"
|
|
610
|
+
);
|
|
611
|
+
const byRole: Record<string, number> = {};
|
|
612
|
+
const byState: Record<string, number> = {};
|
|
613
|
+
for (const a of active) {
|
|
614
|
+
const role = a.role ?? "unknown";
|
|
615
|
+
byRole[role] = (byRole[role] ?? 0) + 1;
|
|
616
|
+
}
|
|
617
|
+
for (const a of allAgents) {
|
|
618
|
+
byState[a.state] = (byState[a.state] ?? 0) + 1;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
res.json({
|
|
622
|
+
activeAgents: active.length,
|
|
623
|
+
totalAgents: allAgents.length,
|
|
624
|
+
agentsByRole: byRole,
|
|
625
|
+
agentsByState: byState,
|
|
626
|
+
});
|
|
627
|
+
});
|
|
628
|
+
|
|
629
|
+
// GET /api/metrics/errors - Error metrics
|
|
630
|
+
app.get("/api/metrics/errors", (req: Request, res: Response) => {
|
|
631
|
+
const windowMs = req.query.window_ms
|
|
632
|
+
? Number(req.query.window_ms)
|
|
633
|
+
: 30 * 60 * 1000;
|
|
634
|
+
const limit = req.query.limit ? Number(req.query.limit) : 20;
|
|
635
|
+
|
|
636
|
+
const statusEvents = eventStore.query({
|
|
637
|
+
type: "status",
|
|
638
|
+
after: Date.now() - windowMs,
|
|
639
|
+
});
|
|
640
|
+
|
|
641
|
+
const errors: Array<{ timestamp: number; agentId: string; type: string; summary: string }> = [];
|
|
642
|
+
const byType: Record<string, number> = {};
|
|
643
|
+
|
|
644
|
+
for (const e of statusEvents) {
|
|
645
|
+
if (e.payload?.status_type !== "failed") continue;
|
|
646
|
+
const agentId = (e.source as { agent_id?: string })?.agent_id ?? "unknown";
|
|
647
|
+
const summary = (e.payload?.summary as string) ?? "Unknown error";
|
|
648
|
+
const errorType = ((e.payload?.details as Record<string, unknown>)?.signal as string) ?? "agent_failed";
|
|
649
|
+
errors.push({ timestamp: e.timestamp, agentId, type: errorType, summary });
|
|
650
|
+
byType[errorType] = (byType[errorType] ?? 0) + 1;
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
errors.sort((a, b) => b.timestamp - a.timestamp);
|
|
654
|
+
|
|
655
|
+
res.json({
|
|
656
|
+
totalErrors: errors.length,
|
|
657
|
+
errorsByType: byType,
|
|
658
|
+
recentErrors: errors.slice(0, limit),
|
|
659
|
+
});
|
|
660
|
+
});
|
|
661
|
+
|
|
552
662
|
// POST /api/conversation/message - Send message to head manager
|
|
553
663
|
app.post("/api/conversation/message", async (req: Request, res: Response) => {
|
|
554
664
|
// Reject new messages during shutdown
|
package/src/cli/index.ts
CHANGED
|
@@ -16,6 +16,8 @@ import { createAgentManager } from "../agent/agent-manager.js";
|
|
|
16
16
|
import { createTaskManager } from "../task/task-manager.js";
|
|
17
17
|
import { createMessageRouter } from "../router/message-router.js";
|
|
18
18
|
import { createAPIServer } from "../api/server.js";
|
|
19
|
+
import { loadProjectConfig } from "../config/project-config.js";
|
|
20
|
+
import { loadTeam, TeamRuntime } from "../teams/index.js";
|
|
19
21
|
import type { Agent, Task } from "../store/types/index.js";
|
|
20
22
|
|
|
21
23
|
// ─────────────────────────────────────────────────────────────────
|
|
@@ -120,6 +122,7 @@ program
|
|
|
120
122
|
.option("-p, --port <port>", "Port to listen on", "3000")
|
|
121
123
|
.option("-h, --host <host>", "Host to bind to", "localhost")
|
|
122
124
|
.option("--cwd <path>", "Working directory for agents")
|
|
125
|
+
.option("--team <name>", "Load team template")
|
|
123
126
|
.action(async (options) => {
|
|
124
127
|
console.log(chalk.blue("Starting multi-agent server..."));
|
|
125
128
|
|
|
@@ -130,6 +133,32 @@ program
|
|
|
130
133
|
const agentManager = createAgentManager(eventStore, messageRouter);
|
|
131
134
|
const taskManager = createTaskManager(eventStore);
|
|
132
135
|
|
|
136
|
+
// Determine team name: CLI flag > project config > none
|
|
137
|
+
const projectConfig = loadProjectConfig(options.cwd);
|
|
138
|
+
const teamName = options.team ?? projectConfig.team;
|
|
139
|
+
|
|
140
|
+
// Load and initialize team if specified
|
|
141
|
+
let teamRuntime: TeamRuntime | null = null;
|
|
142
|
+
if (teamName) {
|
|
143
|
+
console.log(chalk.blue(`Loading team template '${teamName}'...`));
|
|
144
|
+
const manifest = await loadTeam(
|
|
145
|
+
teamName,
|
|
146
|
+
agentManager.getRoleRegistry(),
|
|
147
|
+
options.cwd
|
|
148
|
+
);
|
|
149
|
+
teamRuntime = new TeamRuntime(manifest, {
|
|
150
|
+
agentManager,
|
|
151
|
+
messageRouter,
|
|
152
|
+
eventStore,
|
|
153
|
+
});
|
|
154
|
+
await teamRuntime.initialize();
|
|
155
|
+
console.log(
|
|
156
|
+
chalk.green(
|
|
157
|
+
`Team '${teamName}' loaded: ${manifest.roles.join(", ")}`
|
|
158
|
+
)
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
|
|
133
162
|
// Create API server
|
|
134
163
|
const server = createAPIServer(
|
|
135
164
|
{ eventStore, agentManager, taskManager, messageRouter },
|
|
@@ -142,11 +171,26 @@ program
|
|
|
142
171
|
console.log(
|
|
143
172
|
chalk.green(`Server running at http://${options.host}:${options.port}`)
|
|
144
173
|
);
|
|
174
|
+
|
|
175
|
+
// Bootstrap team agents after server is running
|
|
176
|
+
if (teamRuntime) {
|
|
177
|
+
const { rootId, companionIds } = await teamRuntime.bootstrap();
|
|
178
|
+
console.log(
|
|
179
|
+
chalk.green(
|
|
180
|
+
`Team '${teamName}' bootstrapped: root=${rootId}` +
|
|
181
|
+
(companionIds.length > 0
|
|
182
|
+
? `, companions=${companionIds.join(", ")}`
|
|
183
|
+
: "")
|
|
184
|
+
)
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
|
|
145
188
|
console.log(chalk.gray("Press Ctrl+C to stop"));
|
|
146
189
|
|
|
147
190
|
// Handle shutdown
|
|
148
191
|
process.on("SIGINT", async () => {
|
|
149
192
|
console.log(chalk.yellow("\nShutting down..."));
|
|
193
|
+
if (teamRuntime) await teamRuntime.teardown();
|
|
150
194
|
await server.stop();
|
|
151
195
|
await agentManager.close();
|
|
152
196
|
await eventStore.close();
|
package/src/cli/mcp.ts
CHANGED
|
@@ -176,6 +176,50 @@ async function main() {
|
|
|
176
176
|
}
|
|
177
177
|
});
|
|
178
178
|
|
|
179
|
+
// Read team config from EventStore (stored by TeamRuntime.initialize)
|
|
180
|
+
let teamTaskMode: string | undefined;
|
|
181
|
+
const teamEvents = eventStore.query({ type: "status", limit: 50 });
|
|
182
|
+
const teamConfigEvent = teamEvents.find(
|
|
183
|
+
(e) => e.payload?.team_config != null
|
|
184
|
+
);
|
|
185
|
+
if (teamConfigEvent?.payload?.team_config) {
|
|
186
|
+
const tc = teamConfigEvent.payload.team_config as Record<string, unknown>;
|
|
187
|
+
teamTaskMode = tc.taskMode as string | undefined;
|
|
188
|
+
debugLog(`[MCP] Found team config: team=${tc.teamName}, strategy=${tc.strategy}, taskMode=${tc.taskMode}`);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Register team roles in local RoleRegistry for capability checks
|
|
192
|
+
const roleRegistry = agentManager.getRoleRegistry();
|
|
193
|
+
let integrationStrategy: import("../workspace/strategies/types.js").IntegrationStrategy | undefined;
|
|
194
|
+
|
|
195
|
+
if (teamConfigEvent?.payload?.team_config) {
|
|
196
|
+
const tc = teamConfigEvent.payload.team_config as Record<string, unknown>;
|
|
197
|
+
|
|
198
|
+
// Register serialized team roles (stored by TeamRuntime.initialize)
|
|
199
|
+
const roles = tc.roles as Record<string, { name: string; capabilities: string[] }> | undefined;
|
|
200
|
+
if (roles) {
|
|
201
|
+
for (const roleDef of Object.values(roles)) {
|
|
202
|
+
roleRegistry.registerRole(roleDef as import("../roles/types.js").RoleDefinition);
|
|
203
|
+
}
|
|
204
|
+
debugLog(`[MCP] Registered ${Object.keys(roles).length} team roles in RoleRegistry`);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// Instantiate integration strategy from team config
|
|
208
|
+
const strategyName = tc.strategy as string | undefined;
|
|
209
|
+
if (strategyName) {
|
|
210
|
+
try {
|
|
211
|
+
const { defaultStrategyRegistry } = await import("../workspace/strategies/registry.js");
|
|
212
|
+
integrationStrategy = defaultStrategyRegistry.get(
|
|
213
|
+
strategyName,
|
|
214
|
+
tc.strategyConfig as Record<string, unknown> | undefined
|
|
215
|
+
);
|
|
216
|
+
debugLog(`[MCP] Instantiated '${strategyName}' integration strategy`);
|
|
217
|
+
} catch (err) {
|
|
218
|
+
debugLog(`[MCP] Failed to instantiate strategy '${strategyName}': ${err}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
179
223
|
// Create MCP server with agent context
|
|
180
224
|
const mcpServer = createMCPServer(
|
|
181
225
|
{
|
|
@@ -191,6 +235,9 @@ async function main() {
|
|
|
191
235
|
taskManager,
|
|
192
236
|
messageRouter,
|
|
193
237
|
activityWatcher,
|
|
238
|
+
taskMode: teamTaskMode as "push" | "pull" | undefined,
|
|
239
|
+
roleRegistry,
|
|
240
|
+
integrationStrategy,
|
|
194
241
|
}
|
|
195
242
|
);
|
|
196
243
|
|