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,13 @@
|
|
|
1
|
+
export { loadTeam } from "./team-loader.js";
|
|
2
|
+
export { TeamRuntime, type TeamServices, type TeamBootstrapResult } from "./team-runtime.js";
|
|
3
|
+
export {
|
|
4
|
+
TeamLoadError,
|
|
5
|
+
type TeamManifest,
|
|
6
|
+
type TeamTopology,
|
|
7
|
+
type TeamCommunication,
|
|
8
|
+
type MacroAgentExtensions,
|
|
9
|
+
type TeamRoleDefinition,
|
|
10
|
+
type ResolvedTeamRole,
|
|
11
|
+
type McpServerEntry,
|
|
12
|
+
type TeamLoadErrorCode,
|
|
13
|
+
} from "./types.js";
|
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Team Template Loader
|
|
3
|
+
*
|
|
4
|
+
* Reads .macro-agent/teams/<name>/ directories, parses team.yaml,
|
|
5
|
+
* resolves role inheritance, loads prompts, and validates communication.
|
|
6
|
+
*
|
|
7
|
+
* @module teams/team-loader
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import * as fs from "fs";
|
|
11
|
+
import * as path from "path";
|
|
12
|
+
import yaml from "js-yaml";
|
|
13
|
+
import type { RoleRegistry, RoleDefinition, Capability } from "../roles/types.js";
|
|
14
|
+
import {
|
|
15
|
+
TeamLoadError,
|
|
16
|
+
type TeamManifest,
|
|
17
|
+
type TeamTopology,
|
|
18
|
+
type TeamCommunication,
|
|
19
|
+
type MacroAgentExtensions,
|
|
20
|
+
type TeamRoleDefinition,
|
|
21
|
+
type ResolvedTeamRole,
|
|
22
|
+
type McpServerEntry,
|
|
23
|
+
} from "./types.js";
|
|
24
|
+
|
|
25
|
+
// =============================================================================
|
|
26
|
+
// Constants
|
|
27
|
+
// =============================================================================
|
|
28
|
+
|
|
29
|
+
const TEAMS_DIR = ".macro-agent/teams";
|
|
30
|
+
const MANIFEST_FILE = "team.yaml";
|
|
31
|
+
const ROLES_DIR = "roles";
|
|
32
|
+
const PROMPTS_DIR = "prompts";
|
|
33
|
+
const TOOLS_DIR = "tools";
|
|
34
|
+
const MCP_SERVERS_FILE = "mcp-servers.json";
|
|
35
|
+
|
|
36
|
+
// =============================================================================
|
|
37
|
+
// TeamLoader
|
|
38
|
+
// =============================================================================
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Load a team template from disk and resolve all references.
|
|
42
|
+
*
|
|
43
|
+
* @param teamName - Team name (directory name under .macro-agent/teams/)
|
|
44
|
+
* @param roleRegistry - Role registry for resolving extends chains
|
|
45
|
+
* @param basePath - Project root (default: process.cwd())
|
|
46
|
+
* @returns Fully resolved TeamManifest
|
|
47
|
+
*/
|
|
48
|
+
export async function loadTeam(
|
|
49
|
+
teamName: string,
|
|
50
|
+
roleRegistry: RoleRegistry,
|
|
51
|
+
basePath?: string
|
|
52
|
+
): Promise<TeamManifest> {
|
|
53
|
+
const root = basePath ?? process.cwd();
|
|
54
|
+
const teamDir = path.join(root, TEAMS_DIR, teamName);
|
|
55
|
+
|
|
56
|
+
// 1. Check team directory exists
|
|
57
|
+
if (!fs.existsSync(teamDir)) {
|
|
58
|
+
throw new TeamLoadError(
|
|
59
|
+
`Team directory not found: ${teamDir}`,
|
|
60
|
+
"MANIFEST_NOT_FOUND",
|
|
61
|
+
teamName
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// 2. Read and parse team.yaml
|
|
66
|
+
const manifestPath = path.join(teamDir, MANIFEST_FILE);
|
|
67
|
+
if (!fs.existsSync(manifestPath)) {
|
|
68
|
+
throw new TeamLoadError(
|
|
69
|
+
`Team manifest not found: ${manifestPath}`,
|
|
70
|
+
"MANIFEST_NOT_FOUND",
|
|
71
|
+
teamName
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const raw = fs.readFileSync(manifestPath, "utf-8");
|
|
76
|
+
let parsed: Record<string, unknown>;
|
|
77
|
+
try {
|
|
78
|
+
parsed = yaml.load(raw) as Record<string, unknown>;
|
|
79
|
+
} catch (err) {
|
|
80
|
+
throw new TeamLoadError(
|
|
81
|
+
`Failed to parse ${manifestPath}: ${err instanceof Error ? err.message : String(err)}`,
|
|
82
|
+
"INVALID_MANIFEST",
|
|
83
|
+
teamName
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// 3. Validate required fields
|
|
88
|
+
validateManifest(parsed, teamName);
|
|
89
|
+
|
|
90
|
+
const topology = parsed.topology as TeamTopology;
|
|
91
|
+
const communication = (parsed.communication ?? {}) as TeamCommunication;
|
|
92
|
+
const macroAgent = (parsed.macro_agent ?? {}) as MacroAgentExtensions;
|
|
93
|
+
const roleNames = parsed.roles as string[];
|
|
94
|
+
|
|
95
|
+
// 4. Resolve roles
|
|
96
|
+
const resolvedRoles = new Map<string, ResolvedTeamRole>();
|
|
97
|
+
const spawnRules = topology.spawn_rules ?? {};
|
|
98
|
+
|
|
99
|
+
for (const roleName of roleNames) {
|
|
100
|
+
const resolved = resolveTeamRole(
|
|
101
|
+
roleName,
|
|
102
|
+
teamDir,
|
|
103
|
+
roleRegistry,
|
|
104
|
+
spawnRules
|
|
105
|
+
);
|
|
106
|
+
resolvedRoles.set(roleName, resolved);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// 5. Load prompts
|
|
110
|
+
const loadedPrompts = new Map<string, string>();
|
|
111
|
+
|
|
112
|
+
// Load prompts from topology nodes
|
|
113
|
+
const promptRefs = collectPromptRefs(topology, resolvedRoles);
|
|
114
|
+
for (const promptPath of promptRefs) {
|
|
115
|
+
const fullPath = path.join(teamDir, promptPath);
|
|
116
|
+
if (!fs.existsSync(fullPath)) {
|
|
117
|
+
throw new TeamLoadError(
|
|
118
|
+
`Prompt file not found: ${fullPath}`,
|
|
119
|
+
"PROMPT_NOT_FOUND",
|
|
120
|
+
teamName
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
loadedPrompts.set(promptPath, fs.readFileSync(fullPath, "utf-8"));
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// 6. Load MCP server configs
|
|
127
|
+
const mcpServers = loadMcpServers(teamDir);
|
|
128
|
+
|
|
129
|
+
// 7. Validate communication topology
|
|
130
|
+
validateCommunication(communication, roleNames, teamName);
|
|
131
|
+
|
|
132
|
+
return {
|
|
133
|
+
name: parsed.name as string,
|
|
134
|
+
description: (parsed.description as string) ?? "",
|
|
135
|
+
version: (parsed.version as number) ?? 1,
|
|
136
|
+
roles: roleNames,
|
|
137
|
+
topology,
|
|
138
|
+
communication,
|
|
139
|
+
macro_agent: macroAgent,
|
|
140
|
+
_resolvedRoles: resolvedRoles,
|
|
141
|
+
_loadedPrompts: loadedPrompts,
|
|
142
|
+
_mcpServers: mcpServers,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// =============================================================================
|
|
147
|
+
// Manifest Validation
|
|
148
|
+
// =============================================================================
|
|
149
|
+
|
|
150
|
+
function validateManifest(
|
|
151
|
+
parsed: Record<string, unknown>,
|
|
152
|
+
teamName: string
|
|
153
|
+
): void {
|
|
154
|
+
if (!parsed || typeof parsed !== "object") {
|
|
155
|
+
throw new TeamLoadError(
|
|
156
|
+
"Team manifest must be a YAML object",
|
|
157
|
+
"INVALID_MANIFEST",
|
|
158
|
+
teamName
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if (!parsed.name || typeof parsed.name !== "string") {
|
|
163
|
+
throw new TeamLoadError(
|
|
164
|
+
"Team manifest requires a 'name' string field",
|
|
165
|
+
"INVALID_MANIFEST",
|
|
166
|
+
teamName
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (!Array.isArray(parsed.roles) || parsed.roles.length === 0) {
|
|
171
|
+
throw new TeamLoadError(
|
|
172
|
+
"Team manifest requires a non-empty 'roles' array",
|
|
173
|
+
"INVALID_MANIFEST",
|
|
174
|
+
teamName
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
if (!parsed.topology || typeof parsed.topology !== "object") {
|
|
179
|
+
throw new TeamLoadError(
|
|
180
|
+
"Team manifest requires a 'topology' object",
|
|
181
|
+
"INVALID_MANIFEST",
|
|
182
|
+
teamName
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
const topology = parsed.topology as Record<string, unknown>;
|
|
187
|
+
if (!topology.root || typeof topology.root !== "object") {
|
|
188
|
+
throw new TeamLoadError(
|
|
189
|
+
"Team topology requires a 'root' object",
|
|
190
|
+
"INVALID_MANIFEST",
|
|
191
|
+
teamName
|
|
192
|
+
);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// =============================================================================
|
|
197
|
+
// Role Resolution
|
|
198
|
+
// =============================================================================
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Resolve a single team role: load YAML if present, resolve extends,
|
|
202
|
+
* compute capabilities, translate spawn rules.
|
|
203
|
+
*/
|
|
204
|
+
function resolveTeamRole(
|
|
205
|
+
roleName: string,
|
|
206
|
+
teamDir: string,
|
|
207
|
+
roleRegistry: RoleRegistry,
|
|
208
|
+
spawnRules: Record<string, string[]>
|
|
209
|
+
): ResolvedTeamRole {
|
|
210
|
+
// Try to load role YAML from team directory
|
|
211
|
+
const roleFilePath = path.join(teamDir, ROLES_DIR, `${roleName}.yaml`);
|
|
212
|
+
let teamRoleDef: TeamRoleDefinition | null = null;
|
|
213
|
+
|
|
214
|
+
if (fs.existsSync(roleFilePath)) {
|
|
215
|
+
const raw = fs.readFileSync(roleFilePath, "utf-8");
|
|
216
|
+
try {
|
|
217
|
+
teamRoleDef = yaml.load(raw) as TeamRoleDefinition;
|
|
218
|
+
} catch (err) {
|
|
219
|
+
throw new TeamLoadError(
|
|
220
|
+
`Failed to parse role file ${roleFilePath}: ${err instanceof Error ? err.message : String(err)}`,
|
|
221
|
+
"INVALID_ROLE",
|
|
222
|
+
roleName
|
|
223
|
+
);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// Determine base role
|
|
228
|
+
const baseRoleName = teamRoleDef?.extends ?? roleName;
|
|
229
|
+
let parentRole: RoleDefinition;
|
|
230
|
+
try {
|
|
231
|
+
parentRole = roleRegistry.resolveRole(baseRoleName);
|
|
232
|
+
} catch {
|
|
233
|
+
throw new TeamLoadError(
|
|
234
|
+
`Base role '${baseRoleName}' not found for team role '${roleName}'`,
|
|
235
|
+
"ROLE_NOT_FOUND",
|
|
236
|
+
roleName
|
|
237
|
+
);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
// Compute capabilities
|
|
241
|
+
let capabilities: Capability[];
|
|
242
|
+
if (teamRoleDef?.capabilities) {
|
|
243
|
+
// Full replacement
|
|
244
|
+
capabilities = teamRoleDef.capabilities as Capability[];
|
|
245
|
+
} else if (teamRoleDef?.capabilities_add || teamRoleDef?.capabilities_remove) {
|
|
246
|
+
// Additive/subtractive
|
|
247
|
+
const base = new Set(parentRole.capabilities);
|
|
248
|
+
for (const cap of teamRoleDef.capabilities_add ?? []) {
|
|
249
|
+
base.add(cap as Capability);
|
|
250
|
+
}
|
|
251
|
+
for (const cap of teamRoleDef.capabilities_remove ?? []) {
|
|
252
|
+
base.delete(cap as Capability);
|
|
253
|
+
}
|
|
254
|
+
capabilities = Array.from(base);
|
|
255
|
+
} else {
|
|
256
|
+
// Inherit parent capabilities
|
|
257
|
+
capabilities = [...parentRole.capabilities];
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// Translate spawn_rules into capability additions (RD3)
|
|
261
|
+
const allowedSpawns = spawnRules[roleName];
|
|
262
|
+
if (allowedSpawns) {
|
|
263
|
+
for (const targetRole of allowedSpawns) {
|
|
264
|
+
const spawnCap = `agent.spawn.${targetRole}` as Capability;
|
|
265
|
+
if (!capabilities.includes(spawnCap)) {
|
|
266
|
+
capabilities.push(spawnCap);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Build the resolved RoleDefinition for registry
|
|
272
|
+
const roleDefinition: RoleDefinition = {
|
|
273
|
+
name: roleName,
|
|
274
|
+
displayName: teamRoleDef?.display_name ?? parentRole.displayName,
|
|
275
|
+
description: teamRoleDef?.description ?? parentRole.description,
|
|
276
|
+
capabilities,
|
|
277
|
+
workspace: teamRoleDef?.macro_agent?.workspace
|
|
278
|
+
? {
|
|
279
|
+
type: (teamRoleDef.macro_agent.workspace.type ?? "own") as "own" | "shared" | "mount" | "none",
|
|
280
|
+
branchPattern: teamRoleDef.macro_agent.workspace.branch_pattern,
|
|
281
|
+
cleanupOnTerminate: teamRoleDef.macro_agent.workspace.cleanup_on_terminate,
|
|
282
|
+
}
|
|
283
|
+
: parentRole.workspace,
|
|
284
|
+
lifecycle: teamRoleDef?.macro_agent?.lifecycle
|
|
285
|
+
? {
|
|
286
|
+
type: (teamRoleDef.macro_agent.lifecycle.type ?? "ephemeral") as "ephemeral" | "persistent" | "daemon" | "event-driven",
|
|
287
|
+
cascadeTerminate: teamRoleDef.macro_agent.lifecycle.cascade_terminate,
|
|
288
|
+
selfCleanup: teamRoleDef.macro_agent.lifecycle.self_cleanup,
|
|
289
|
+
taskBound: teamRoleDef.macro_agent.lifecycle.task_bound,
|
|
290
|
+
parentBound: teamRoleDef.macro_agent.lifecycle.parent_bound,
|
|
291
|
+
maxDurationMs: teamRoleDef.macro_agent.lifecycle.max_duration_ms,
|
|
292
|
+
}
|
|
293
|
+
: parentRole.lifecycle,
|
|
294
|
+
tools: parentRole.tools,
|
|
295
|
+
protocol: parentRole.protocol,
|
|
296
|
+
permissions: parentRole.permissions,
|
|
297
|
+
extends: teamRoleDef?.extends,
|
|
298
|
+
systemPrompt: parentRole.systemPrompt,
|
|
299
|
+
};
|
|
300
|
+
|
|
301
|
+
return {
|
|
302
|
+
name: roleName,
|
|
303
|
+
baseRole: baseRoleName,
|
|
304
|
+
capabilities,
|
|
305
|
+
prompt: teamRoleDef?.prompt,
|
|
306
|
+
roleDefinition,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
// =============================================================================
|
|
311
|
+
// Prompt Collection
|
|
312
|
+
// =============================================================================
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* Collect all prompt file paths referenced by topology and roles.
|
|
316
|
+
*/
|
|
317
|
+
function collectPromptRefs(
|
|
318
|
+
topology: TeamTopology,
|
|
319
|
+
resolvedRoles: Map<string, ResolvedTeamRole>
|
|
320
|
+
): Set<string> {
|
|
321
|
+
const refs = new Set<string>();
|
|
322
|
+
|
|
323
|
+
// From topology nodes
|
|
324
|
+
if (topology.root.prompt) refs.add(topology.root.prompt);
|
|
325
|
+
for (const companion of topology.companions ?? []) {
|
|
326
|
+
if (companion.prompt) refs.add(companion.prompt);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
// From role definitions
|
|
330
|
+
for (const resolved of resolvedRoles.values()) {
|
|
331
|
+
if (resolved.prompt) refs.add(resolved.prompt);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
return refs;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// =============================================================================
|
|
338
|
+
// MCP Server Loading
|
|
339
|
+
// =============================================================================
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Load tools/mcp-servers.json if it exists.
|
|
343
|
+
* Returns a map of role name → MCP server entries.
|
|
344
|
+
*/
|
|
345
|
+
function loadMcpServers(
|
|
346
|
+
teamDir: string
|
|
347
|
+
): Map<string, McpServerEntry[]> {
|
|
348
|
+
const result = new Map<string, McpServerEntry[]>();
|
|
349
|
+
const mcpPath = path.join(teamDir, TOOLS_DIR, MCP_SERVERS_FILE);
|
|
350
|
+
|
|
351
|
+
if (!fs.existsSync(mcpPath)) {
|
|
352
|
+
return result;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
const raw = fs.readFileSync(mcpPath, "utf-8");
|
|
356
|
+
const parsed = JSON.parse(raw) as Record<
|
|
357
|
+
string,
|
|
358
|
+
{ servers: McpServerEntry[] }
|
|
359
|
+
>;
|
|
360
|
+
|
|
361
|
+
for (const [roleName, config] of Object.entries(parsed)) {
|
|
362
|
+
if (config.servers && Array.isArray(config.servers)) {
|
|
363
|
+
result.set(roleName, config.servers);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
return result;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// =============================================================================
|
|
371
|
+
// Communication Validation
|
|
372
|
+
// =============================================================================
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* Validate communication topology references.
|
|
376
|
+
*/
|
|
377
|
+
function validateCommunication(
|
|
378
|
+
communication: TeamCommunication,
|
|
379
|
+
roleNames: string[],
|
|
380
|
+
teamName: string
|
|
381
|
+
): void {
|
|
382
|
+
const channels = communication.channels ?? {};
|
|
383
|
+
const channelNames = new Set(Object.keys(channels));
|
|
384
|
+
const roleNameSet = new Set(roleNames);
|
|
385
|
+
|
|
386
|
+
// Validate subscriptions reference existing channels and roles
|
|
387
|
+
for (const [roleName, subs] of Object.entries(communication.subscriptions ?? {})) {
|
|
388
|
+
if (!roleNameSet.has(roleName)) {
|
|
389
|
+
throw new TeamLoadError(
|
|
390
|
+
`Subscription references unknown role '${roleName}'`,
|
|
391
|
+
"INVALID_COMMUNICATION",
|
|
392
|
+
teamName
|
|
393
|
+
);
|
|
394
|
+
}
|
|
395
|
+
for (const sub of subs) {
|
|
396
|
+
if (!channelNames.has(sub.channel)) {
|
|
397
|
+
throw new TeamLoadError(
|
|
398
|
+
`Role '${roleName}' subscribes to unknown channel '${sub.channel}'`,
|
|
399
|
+
"INVALID_COMMUNICATION",
|
|
400
|
+
teamName
|
|
401
|
+
);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
// Validate emissions reference existing roles
|
|
407
|
+
for (const roleName of Object.keys(communication.emissions ?? {})) {
|
|
408
|
+
if (!roleNameSet.has(roleName)) {
|
|
409
|
+
throw new TeamLoadError(
|
|
410
|
+
`Emissions references unknown role '${roleName}'`,
|
|
411
|
+
"INVALID_COMMUNICATION",
|
|
412
|
+
teamName
|
|
413
|
+
);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
// Validate peer connections
|
|
418
|
+
for (const peer of communication.routing?.peers ?? []) {
|
|
419
|
+
if (!roleNameSet.has(peer.from)) {
|
|
420
|
+
throw new TeamLoadError(
|
|
421
|
+
`Peer connection references unknown role '${peer.from}'`,
|
|
422
|
+
"INVALID_COMMUNICATION",
|
|
423
|
+
teamName
|
|
424
|
+
);
|
|
425
|
+
}
|
|
426
|
+
if (!roleNameSet.has(peer.to)) {
|
|
427
|
+
throw new TeamLoadError(
|
|
428
|
+
`Peer connection references unknown role '${peer.to}'`,
|
|
429
|
+
"INVALID_COMMUNICATION",
|
|
430
|
+
teamName
|
|
431
|
+
);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|