macro-agent 0.1.0 → 0.1.2
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/.claude/settings.local.json +3 -1
- package/.sudocode/issues.jsonl +28 -0
- package/.sudocode/specs.jsonl +8 -0
- package/CLAUDE.md +25 -17
- package/README.md +11 -29
- package/dist/acp/macro-agent.d.ts +15 -0
- package/dist/acp/macro-agent.d.ts.map +1 -1
- package/dist/acp/macro-agent.js +131 -35
- package/dist/acp/macro-agent.js.map +1 -1
- package/dist/acp/types.d.ts +32 -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 +65 -1
- package/dist/agent/agent-manager.d.ts.map +1 -1
- package/dist/agent/agent-manager.js +544 -200
- package/dist/agent/agent-manager.js.map +1 -1
- package/dist/agent/types.d.ts +8 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/api/server.d.ts +8 -1
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +136 -8
- package/dist/api/server.js.map +1 -1
- package/dist/api/types.d.ts +1 -1
- package/dist/api/types.d.ts.map +1 -1
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +2 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/token.d.ts +41 -0
- package/dist/auth/token.d.ts.map +1 -0
- package/dist/auth/token.js +73 -0
- package/dist/auth/token.js.map +1 -0
- package/dist/cli/acp.d.ts +2 -23
- package/dist/cli/acp.d.ts.map +1 -1
- package/dist/cli/acp.js +197 -61
- package/dist/cli/acp.js.map +1 -1
- package/dist/cli/index.js +152 -16
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/mcp.d.ts +6 -0
- package/dist/cli/mcp.d.ts.map +1 -1
- package/dist/cli/mcp.js +279 -173
- package/dist/cli/mcp.js.map +1 -1
- package/dist/cli/parse-args.d.ts +20 -0
- package/dist/cli/parse-args.d.ts.map +1 -0
- package/dist/cli/parse-args.js +43 -0
- package/dist/cli/parse-args.js.map +1 -0
- package/dist/cli/stable-instance-id.d.ts +8 -0
- package/dist/cli/stable-instance-id.d.ts.map +1 -0
- package/dist/cli/stable-instance-id.js +14 -0
- package/dist/cli/stable-instance-id.js.map +1 -0
- package/dist/config/project-config.d.ts +85 -7
- package/dist/config/project-config.d.ts.map +1 -1
- package/dist/config/project-config.js +133 -20
- package/dist/config/project-config.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lifecycle/handlers/index.d.ts +7 -3
- package/dist/lifecycle/handlers/index.d.ts.map +1 -1
- package/dist/lifecycle/handlers/index.js +25 -8
- package/dist/lifecycle/handlers/index.js.map +1 -1
- package/dist/lifecycle/types.d.ts +2 -0
- package/dist/lifecycle/types.d.ts.map +1 -1
- package/dist/lifecycle/types.js.map +1 -1
- package/dist/map/adapter/acp-over-map.d.ts +17 -0
- package/dist/map/adapter/acp-over-map.d.ts.map +1 -1
- package/dist/map/adapter/acp-over-map.js +384 -23
- package/dist/map/adapter/acp-over-map.js.map +1 -1
- package/dist/map/adapter/connection-manager.d.ts.map +1 -1
- package/dist/map/adapter/connection-manager.js +3 -0
- package/dist/map/adapter/connection-manager.js.map +1 -1
- package/dist/map/adapter/event-log.d.ts +87 -0
- package/dist/map/adapter/event-log.d.ts.map +1 -0
- package/dist/map/adapter/event-log.js +122 -0
- package/dist/map/adapter/event-log.js.map +1 -0
- package/dist/map/adapter/event-translator.js +6 -6
- package/dist/map/adapter/event-translator.js.map +1 -1
- package/dist/map/adapter/extensions/agent-lifecycle.d.ts +82 -0
- package/dist/map/adapter/extensions/agent-lifecycle.d.ts.map +1 -0
- package/dist/map/adapter/extensions/agent-lifecycle.js +164 -0
- package/dist/map/adapter/extensions/agent-lifecycle.js.map +1 -0
- package/dist/map/adapter/extensions/index.d.ts +13 -1
- package/dist/map/adapter/extensions/index.d.ts.map +1 -1
- package/dist/map/adapter/extensions/index.js +61 -0
- package/dist/map/adapter/extensions/index.js.map +1 -1
- package/dist/map/adapter/extensions/mcp-bridge.d.ts +57 -0
- package/dist/map/adapter/extensions/mcp-bridge.d.ts.map +1 -0
- package/dist/map/adapter/extensions/mcp-bridge.js +745 -0
- package/dist/map/adapter/extensions/mcp-bridge.js.map +1 -0
- package/dist/map/adapter/extensions/rename.d.ts +29 -0
- package/dist/map/adapter/extensions/rename.d.ts.map +1 -0
- package/dist/map/adapter/extensions/rename.js +49 -0
- package/dist/map/adapter/extensions/rename.js.map +1 -0
- package/dist/map/adapter/extensions/streams.d.ts +95 -0
- package/dist/map/adapter/extensions/streams.d.ts.map +1 -0
- package/dist/map/adapter/extensions/streams.js +515 -0
- package/dist/map/adapter/extensions/streams.js.map +1 -0
- package/dist/map/adapter/extensions/task.d.ts.map +1 -1
- package/dist/map/adapter/extensions/task.js +10 -0
- package/dist/map/adapter/extensions/task.js.map +1 -1
- package/dist/map/adapter/extensions/update-metadata.d.ts +29 -0
- package/dist/map/adapter/extensions/update-metadata.d.ts.map +1 -0
- package/dist/map/adapter/extensions/update-metadata.js +67 -0
- package/dist/map/adapter/extensions/update-metadata.js.map +1 -0
- package/dist/map/adapter/index.d.ts +2 -1
- package/dist/map/adapter/index.d.ts.map +1 -1
- package/dist/map/adapter/index.js +10 -2
- package/dist/map/adapter/index.js.map +1 -1
- package/dist/map/adapter/interface.d.ts +2 -0
- package/dist/map/adapter/interface.d.ts.map +1 -1
- package/dist/map/adapter/map-adapter.d.ts +3 -0
- package/dist/map/adapter/map-adapter.d.ts.map +1 -1
- package/dist/map/adapter/map-adapter.js +258 -35
- package/dist/map/adapter/map-adapter.js.map +1 -1
- package/dist/map/adapter/subscription-manager.d.ts.map +1 -1
- package/dist/map/adapter/subscription-manager.js +5 -1
- package/dist/map/adapter/subscription-manager.js.map +1 -1
- package/dist/map/adapter/types.d.ts +3 -1
- package/dist/map/adapter/types.d.ts.map +1 -1
- package/dist/mcp/map-client.d.ts +39 -0
- package/dist/mcp/map-client.d.ts.map +1 -0
- package/dist/mcp/map-client.js +129 -0
- package/dist/mcp/map-client.js.map +1 -0
- package/dist/mcp/mcp-server.d.ts +16 -0
- package/dist/mcp/mcp-server.d.ts.map +1 -1
- package/dist/mcp/mcp-server.js +125 -88
- package/dist/mcp/mcp-server.js.map +1 -1
- package/dist/mcp/tools/done.d.ts.map +1 -1
- package/dist/mcp/tools/done.js +18 -0
- package/dist/mcp/tools/done.js.map +1 -1
- package/dist/mcp/types.d.ts +9 -1
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/mcp/types.js.map +1 -1
- package/dist/metrics/metrics.js +1 -1
- package/dist/metrics/metrics.js.map +1 -1
- package/dist/roles/builtin/coordinator.d.ts.map +1 -1
- package/dist/roles/builtin/coordinator.js +2 -1
- package/dist/roles/builtin/coordinator.js.map +1 -1
- package/dist/roles/builtin/integrator.d.ts.map +1 -1
- package/dist/roles/builtin/integrator.js +2 -1
- package/dist/roles/builtin/integrator.js.map +1 -1
- package/dist/roles/builtin/worker.d.ts.map +1 -1
- package/dist/roles/builtin/worker.js +3 -1
- package/dist/roles/builtin/worker.js.map +1 -1
- package/dist/roles/capabilities.d.ts +9 -1
- package/dist/roles/capabilities.d.ts.map +1 -1
- package/dist/roles/capabilities.js +27 -7
- package/dist/roles/capabilities.js.map +1 -1
- package/dist/roles/config-loader.d.ts +6 -6
- package/dist/roles/config-loader.d.ts.map +1 -1
- package/dist/roles/config-loader.js +8 -7
- package/dist/roles/config-loader.js.map +1 -1
- package/dist/roles/registry.d.ts +2 -2
- package/dist/roles/registry.js +2 -2
- package/dist/roles/types.d.ts +3 -1
- package/dist/roles/types.d.ts.map +1 -1
- package/dist/server/combined-server.d.ts +28 -1
- package/dist/server/combined-server.d.ts.map +1 -1
- package/dist/server/combined-server.js +111 -8
- package/dist/server/combined-server.js.map +1 -1
- package/dist/store/event-store.d.ts +2 -1
- package/dist/store/event-store.d.ts.map +1 -1
- package/dist/store/event-store.js +80 -24
- package/dist/store/event-store.js.map +1 -1
- package/dist/store/instance.d.ts +1 -1
- package/dist/store/instance.d.ts.map +1 -1
- package/dist/store/instance.js +2 -2
- package/dist/store/instance.js.map +1 -1
- package/dist/store/types/agents.d.ts +23 -0
- 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/task/backend/index.d.ts +47 -29
- package/dist/task/backend/index.d.ts.map +1 -1
- package/dist/task/backend/index.js +109 -71
- package/dist/task/backend/index.js.map +1 -1
- package/dist/task/backend/memory.d.ts +1 -0
- package/dist/task/backend/memory.d.ts.map +1 -1
- package/dist/task/backend/memory.js +3 -0
- package/dist/task/backend/memory.js.map +1 -1
- package/dist/task/backend/opentasks/backend.d.ts +140 -0
- package/dist/task/backend/opentasks/backend.d.ts.map +1 -0
- package/dist/task/backend/opentasks/backend.js +1023 -0
- package/dist/task/backend/opentasks/backend.js.map +1 -0
- package/dist/task/backend/opentasks/client.d.ts +337 -0
- package/dist/task/backend/opentasks/client.d.ts.map +1 -0
- package/dist/task/backend/opentasks/client.js +225 -0
- package/dist/task/backend/opentasks/client.js.map +1 -0
- package/dist/task/backend/opentasks/daemon-manager.d.ts +89 -0
- package/dist/task/backend/opentasks/daemon-manager.d.ts.map +1 -0
- package/dist/task/backend/opentasks/daemon-manager.js +195 -0
- package/dist/task/backend/opentasks/daemon-manager.js.map +1 -0
- package/dist/task/backend/opentasks/index.d.ts +21 -0
- package/dist/task/backend/opentasks/index.d.ts.map +1 -0
- package/dist/task/backend/opentasks/index.js +21 -0
- package/dist/task/backend/opentasks/index.js.map +1 -0
- package/dist/task/backend/opentasks/mapping.d.ts +48 -0
- package/dist/task/backend/opentasks/mapping.d.ts.map +1 -0
- package/dist/task/backend/opentasks/mapping.js +77 -0
- package/dist/task/backend/opentasks/mapping.js.map +1 -0
- package/dist/task/backend/types.d.ts +33 -53
- package/dist/task/backend/types.d.ts.map +1 -1
- package/dist/task/backend/types.js +7 -11
- package/dist/task/backend/types.js.map +1 -1
- package/dist/task/backend/unified-tool-provider.d.ts +57 -0
- package/dist/task/backend/unified-tool-provider.d.ts.map +1 -0
- package/dist/task/backend/unified-tool-provider.js +623 -0
- package/dist/task/backend/unified-tool-provider.js.map +1 -0
- package/dist/teams/index.d.ts +3 -1
- package/dist/teams/index.d.ts.map +1 -1
- package/dist/teams/index.js +2 -0
- package/dist/teams/index.js.map +1 -1
- package/dist/teams/seed-defaults.d.ts +20 -0
- package/dist/teams/seed-defaults.d.ts.map +1 -0
- package/dist/teams/seed-defaults.js +71 -0
- package/dist/teams/seed-defaults.js.map +1 -0
- package/dist/teams/team-loader.d.ts +7 -3
- package/dist/teams/team-loader.d.ts.map +1 -1
- package/dist/teams/team-loader.js +156 -164
- package/dist/teams/team-loader.js.map +1 -1
- package/dist/teams/team-manager.d.ts +112 -0
- package/dist/teams/team-manager.d.ts.map +1 -0
- package/dist/teams/team-manager.js +305 -0
- package/dist/teams/team-manager.js.map +1 -0
- package/dist/teams/team-runtime.d.ts +125 -19
- package/dist/teams/team-runtime.d.ts.map +1 -1
- package/dist/teams/team-runtime.js +529 -119
- package/dist/teams/team-runtime.js.map +1 -1
- package/dist/teams/types.d.ts +41 -151
- package/dist/teams/types.d.ts.map +1 -1
- package/dist/teams/types.js +2 -3
- package/dist/teams/types.js.map +1 -1
- package/docs/architecture.md +7 -6
- package/docs/configuration.md +26 -62
- package/docs/implementation-details.md +5 -5
- package/docs/implementation-summary.md +17 -17
- package/docs/plan-self-driving-support.md +4 -4
- package/docs/spec-self-driving-support.md +10 -10
- package/docs/team-templates.md +2 -2
- package/docs/teams.md +76 -3
- package/docs/troubleshooting.md +10 -11
- package/package.json +7 -4
- package/references/minimem/.claude/settings.json +7 -0
- package/references/minimem/.sudocode/issues.jsonl +18 -0
- package/references/minimem/.sudocode/specs.jsonl +1 -0
- package/references/minimem/CLAUDE.md +310 -0
- package/references/minimem/README.md +562 -0
- package/references/minimem/claude-plugin/.claude-plugin/plugin.json +10 -0
- package/references/minimem/claude-plugin/.mcp.json +7 -0
- package/references/minimem/claude-plugin/README.md +158 -0
- package/references/minimem/claude-plugin/commands/recall.md +47 -0
- package/references/minimem/claude-plugin/commands/remember.md +41 -0
- package/references/minimem/claude-plugin/hooks/__tests__/hooks.test.ts +272 -0
- package/references/minimem/claude-plugin/hooks/hooks.json +27 -0
- package/references/minimem/claude-plugin/hooks/session-end.sh +86 -0
- package/references/minimem/claude-plugin/hooks/session-start.sh +85 -0
- package/references/minimem/claude-plugin/skills/memory/SKILL.md +108 -0
- package/references/minimem/media/banner.png +0 -0
- package/references/minimem/package-lock.json +5373 -0
- package/references/minimem/package.json +72 -0
- package/references/minimem/scripts/postbuild.js +35 -0
- package/references/minimem/src/__tests__/edge-cases.test.ts +371 -0
- package/references/minimem/src/__tests__/errors.test.ts +265 -0
- package/references/minimem/src/__tests__/helpers.ts +199 -0
- package/references/minimem/src/__tests__/internal.test.ts +407 -0
- package/references/minimem/src/__tests__/knowledge.test.ts +287 -0
- package/references/minimem/src/__tests__/minimem.integration.test.ts +1127 -0
- package/references/minimem/src/__tests__/session.test.ts +190 -0
- package/references/minimem/src/cli/__tests__/commands.test.ts +759 -0
- package/references/minimem/src/cli/commands/__tests__/conflicts.test.ts +141 -0
- package/references/minimem/src/cli/commands/append.ts +76 -0
- package/references/minimem/src/cli/commands/config.ts +262 -0
- package/references/minimem/src/cli/commands/conflicts.ts +413 -0
- package/references/minimem/src/cli/commands/daemon.ts +169 -0
- package/references/minimem/src/cli/commands/index.ts +12 -0
- package/references/minimem/src/cli/commands/init.ts +88 -0
- package/references/minimem/src/cli/commands/mcp.ts +177 -0
- package/references/minimem/src/cli/commands/push-pull.ts +213 -0
- package/references/minimem/src/cli/commands/search.ts +158 -0
- package/references/minimem/src/cli/commands/status.ts +84 -0
- package/references/minimem/src/cli/commands/sync-init.ts +290 -0
- package/references/minimem/src/cli/commands/sync.ts +70 -0
- package/references/minimem/src/cli/commands/upsert.ts +197 -0
- package/references/minimem/src/cli/config.ts +584 -0
- package/references/minimem/src/cli/index.ts +264 -0
- package/references/minimem/src/cli/shared.ts +161 -0
- package/references/minimem/src/cli/sync/__tests__/central.test.ts +152 -0
- package/references/minimem/src/cli/sync/__tests__/conflicts.test.ts +209 -0
- package/references/minimem/src/cli/sync/__tests__/daemon.test.ts +118 -0
- package/references/minimem/src/cli/sync/__tests__/detection.test.ts +207 -0
- package/references/minimem/src/cli/sync/__tests__/integration.test.ts +476 -0
- package/references/minimem/src/cli/sync/__tests__/registry.test.ts +363 -0
- package/references/minimem/src/cli/sync/__tests__/state.test.ts +255 -0
- package/references/minimem/src/cli/sync/__tests__/validation.test.ts +193 -0
- package/references/minimem/src/cli/sync/__tests__/watcher.test.ts +178 -0
- package/references/minimem/src/cli/sync/central.ts +292 -0
- package/references/minimem/src/cli/sync/conflicts.ts +204 -0
- package/references/minimem/src/cli/sync/daemon.ts +407 -0
- package/references/minimem/src/cli/sync/detection.ts +138 -0
- package/references/minimem/src/cli/sync/index.ts +107 -0
- package/references/minimem/src/cli/sync/operations.ts +373 -0
- package/references/minimem/src/cli/sync/registry.ts +279 -0
- package/references/minimem/src/cli/sync/state.ts +355 -0
- package/references/minimem/src/cli/sync/validation.ts +206 -0
- package/references/minimem/src/cli/sync/watcher.ts +234 -0
- package/references/minimem/src/cli/version.ts +34 -0
- package/references/minimem/src/core/index.ts +9 -0
- package/references/minimem/src/core/indexer.ts +628 -0
- package/references/minimem/src/core/searcher.ts +221 -0
- package/references/minimem/src/db/schema.ts +183 -0
- package/references/minimem/src/db/sqlite-vec.ts +24 -0
- package/references/minimem/src/embeddings/__tests__/embeddings.test.ts +431 -0
- package/references/minimem/src/embeddings/batch-gemini.ts +392 -0
- package/references/minimem/src/embeddings/batch-openai.ts +409 -0
- package/references/minimem/src/embeddings/embeddings.ts +434 -0
- package/references/minimem/src/index.ts +109 -0
- package/references/minimem/src/internal.ts +299 -0
- package/references/minimem/src/minimem.ts +1276 -0
- package/references/minimem/src/search/__tests__/hybrid.test.ts +247 -0
- package/references/minimem/src/search/graph.ts +234 -0
- package/references/minimem/src/search/hybrid.ts +151 -0
- package/references/minimem/src/search/search.ts +256 -0
- package/references/minimem/src/server/__tests__/mcp.test.ts +341 -0
- package/references/minimem/src/server/__tests__/tools.test.ts +364 -0
- package/references/minimem/src/server/mcp.ts +326 -0
- package/references/minimem/src/server/tools.ts +720 -0
- package/references/minimem/src/session.ts +460 -0
- package/references/minimem/tsconfig.json +19 -0
- package/references/minimem/tsup.config.ts +26 -0
- package/references/minimem/vitest.config.ts +24 -0
- package/references/openteams/.claude/settings.json +6 -0
- package/references/openteams/README.md +1 -0
- package/references/openteams/SKILL.md +341 -0
- package/references/openteams/design.md +411 -0
- package/references/openteams/examples/bmad-method/prompts/analyst/ROLE.md +16 -0
- package/references/openteams/examples/bmad-method/prompts/analyst/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/architect/ROLE.md +24 -0
- package/references/openteams/examples/bmad-method/prompts/architect/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/developer/ROLE.md +25 -0
- package/references/openteams/examples/bmad-method/prompts/developer/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/master/ROLE.md +21 -0
- package/references/openteams/examples/bmad-method/prompts/master/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/pm/ROLE.md +20 -0
- package/references/openteams/examples/bmad-method/prompts/pm/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/qa/ROLE.md +17 -0
- package/references/openteams/examples/bmad-method/prompts/qa/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/quick-flow-dev/ROLE.md +23 -0
- package/references/openteams/examples/bmad-method/prompts/quick-flow-dev/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/scrum-master/ROLE.md +27 -0
- package/references/openteams/examples/bmad-method/prompts/scrum-master/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/tech-writer/ROLE.md +21 -0
- package/references/openteams/examples/bmad-method/prompts/tech-writer/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/ux-designer/ROLE.md +16 -0
- package/references/openteams/examples/bmad-method/prompts/ux-designer/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/roles/analyst.yaml +9 -0
- package/references/openteams/examples/bmad-method/roles/architect.yaml +9 -0
- package/references/openteams/examples/bmad-method/roles/developer.yaml +8 -0
- package/references/openteams/examples/bmad-method/roles/master.yaml +8 -0
- package/references/openteams/examples/bmad-method/roles/pm.yaml +9 -0
- package/references/openteams/examples/bmad-method/roles/qa.yaml +8 -0
- package/references/openteams/examples/bmad-method/roles/quick-flow-dev.yaml +8 -0
- package/references/openteams/examples/bmad-method/roles/scrum-master.yaml +9 -0
- package/references/openteams/examples/bmad-method/roles/tech-writer.yaml +8 -0
- package/references/openteams/examples/bmad-method/roles/ux-designer.yaml +8 -0
- package/references/openteams/examples/bmad-method/team.yaml +161 -0
- package/references/openteams/examples/get-shit-done/prompts/codebase-mapper/ROLE.md +17 -0
- package/references/openteams/examples/get-shit-done/prompts/codebase-mapper/SOUL.md +5 -0
- package/references/openteams/examples/get-shit-done/prompts/debugger/ROLE.md +25 -0
- package/references/openteams/examples/get-shit-done/prompts/debugger/SOUL.md +5 -0
- package/references/openteams/examples/get-shit-done/prompts/executor/ROLE.md +34 -0
- package/references/openteams/examples/get-shit-done/prompts/executor/SOUL.md +5 -0
- package/references/openteams/examples/get-shit-done/prompts/integration-checker/ROLE.md +18 -0
- package/references/openteams/examples/get-shit-done/prompts/integration-checker/SOUL.md +3 -0
- package/references/openteams/examples/get-shit-done/prompts/orchestrator/ROLE.md +42 -0
- package/references/openteams/examples/get-shit-done/prompts/orchestrator/SOUL.md +5 -0
- package/references/openteams/examples/get-shit-done/prompts/phase-researcher/ROLE.md +15 -0
- package/references/openteams/examples/get-shit-done/prompts/phase-researcher/SOUL.md +3 -0
- package/references/openteams/examples/get-shit-done/prompts/plan-checker/ROLE.md +17 -0
- package/references/openteams/examples/get-shit-done/prompts/plan-checker/SOUL.md +3 -0
- package/references/openteams/examples/get-shit-done/prompts/planner/ROLE.md +28 -0
- package/references/openteams/examples/get-shit-done/prompts/planner/SOUL.md +5 -0
- package/references/openteams/examples/get-shit-done/prompts/project-researcher/ROLE.md +16 -0
- package/references/openteams/examples/get-shit-done/prompts/project-researcher/SOUL.md +3 -0
- package/references/openteams/examples/get-shit-done/prompts/research-synthesizer/ROLE.md +13 -0
- package/references/openteams/examples/get-shit-done/prompts/research-synthesizer/SOUL.md +3 -0
- package/references/openteams/examples/get-shit-done/prompts/roadmapper/ROLE.md +14 -0
- package/references/openteams/examples/get-shit-done/prompts/roadmapper/SOUL.md +3 -0
- package/references/openteams/examples/get-shit-done/prompts/verifier/ROLE.md +19 -0
- package/references/openteams/examples/get-shit-done/prompts/verifier/SOUL.md +5 -0
- package/references/openteams/examples/get-shit-done/roles/codebase-mapper.yaml +8 -0
- package/references/openteams/examples/get-shit-done/roles/debugger.yaml +8 -0
- package/references/openteams/examples/get-shit-done/roles/executor.yaml +8 -0
- package/references/openteams/examples/get-shit-done/roles/integration-checker.yaml +8 -0
- package/references/openteams/examples/get-shit-done/roles/orchestrator.yaml +9 -0
- package/references/openteams/examples/get-shit-done/roles/phase-researcher.yaml +7 -0
- package/references/openteams/examples/get-shit-done/roles/plan-checker.yaml +8 -0
- package/references/openteams/examples/get-shit-done/roles/planner.yaml +8 -0
- package/references/openteams/examples/get-shit-done/roles/project-researcher.yaml +8 -0
- package/references/openteams/examples/get-shit-done/roles/research-synthesizer.yaml +7 -0
- package/references/openteams/examples/get-shit-done/roles/roadmapper.yaml +7 -0
- package/references/openteams/examples/get-shit-done/roles/verifier.yaml +8 -0
- package/references/openteams/examples/get-shit-done/team.yaml +154 -0
- package/references/openteams/package-lock.json +2181 -0
- package/references/openteams/package.json +48 -0
- package/references/openteams/schema/role.schema.json +125 -0
- package/references/openteams/schema/team.schema.json +284 -0
- package/references/openteams/src/cli/agent.ts +104 -0
- package/references/openteams/src/cli/cli.test.ts +381 -0
- package/references/openteams/src/cli/generate.ts +220 -0
- package/references/openteams/src/cli/message.ts +241 -0
- package/references/openteams/src/cli/task.ts +154 -0
- package/references/openteams/src/cli/team.ts +104 -0
- package/references/openteams/src/cli/template.ts +207 -0
- package/references/openteams/src/cli.ts +45 -0
- package/references/openteams/src/db/database.test.ts +185 -0
- package/references/openteams/src/db/database.ts +240 -0
- package/references/openteams/src/generators/agent-prompt-generator.test.ts +332 -0
- package/references/openteams/src/generators/agent-prompt-generator.ts +521 -0
- package/references/openteams/src/generators/package-generator.test.ts +129 -0
- package/references/openteams/src/generators/package-generator.ts +102 -0
- package/references/openteams/src/generators/skill-generator.test.ts +246 -0
- package/references/openteams/src/generators/skill-generator.ts +374 -0
- package/references/openteams/src/index.ts +104 -0
- package/references/openteams/src/services/agent-service.test.ts +158 -0
- package/references/openteams/src/services/agent-service.ts +84 -0
- package/references/openteams/src/services/communication-service.test.ts +455 -0
- package/references/openteams/src/services/communication-service.ts +371 -0
- package/references/openteams/src/services/message-service.test.ts +342 -0
- package/references/openteams/src/services/message-service.ts +203 -0
- package/references/openteams/src/services/task-service.test.ts +434 -0
- package/references/openteams/src/services/task-service.ts +239 -0
- package/references/openteams/src/services/team-service.test.ts +181 -0
- package/references/openteams/src/services/team-service.ts +139 -0
- package/references/openteams/src/services/template-service.test.ts +306 -0
- package/references/openteams/src/services/template-service.ts +182 -0
- package/references/openteams/src/spawner/acp-factory.ts +96 -0
- package/references/openteams/src/spawner/interface.ts +31 -0
- package/references/openteams/src/spawner/mock.test.ts +93 -0
- package/references/openteams/src/spawner/mock.ts +59 -0
- package/references/openteams/src/template/loader.test.ts +1319 -0
- package/references/openteams/src/template/loader.ts +698 -0
- package/references/openteams/src/template/types.ts +200 -0
- package/references/openteams/src/types.ts +205 -0
- package/references/openteams/tsconfig.json +18 -0
- package/references/openteams/vitest.config.ts +9 -0
- package/references/skill-tree/.claude/settings.json +6 -0
- package/references/skill-tree/.sudocode/issues.jsonl +11 -0
- package/references/skill-tree/.sudocode/specs.jsonl +1 -0
- package/references/skill-tree/CLAUDE.md +150 -0
- package/references/skill-tree/README.md +324 -0
- package/references/skill-tree/docs/GAPS_v1.md +221 -0
- package/references/skill-tree/docs/INTEGRATION_PLAN.md +467 -0
- package/references/skill-tree/docs/TODOS.md +91 -0
- package/references/skill-tree/docs/anthropic_skill_guide.md +1364 -0
- package/references/skill-tree/docs/design/federated-skill-trees.md +524 -0
- package/references/skill-tree/docs/design/multi-agent-sync.md +759 -0
- package/references/skill-tree/docs/scraper/BRAINSTORM.md +583 -0
- package/references/skill-tree/docs/scraper/POC_PLAN.md +420 -0
- package/references/skill-tree/docs/scraper/README.md +170 -0
- package/references/skill-tree/examples/basic-usage.ts +190 -0
- package/references/skill-tree/package-lock.json +1509 -0
- package/references/skill-tree/package.json +66 -0
- package/references/skill-tree/scraper/README.md +123 -0
- package/references/skill-tree/scraper/docs/DESIGN.md +683 -0
- package/references/skill-tree/scraper/docs/PLAN.md +336 -0
- package/references/skill-tree/scraper/drizzle.config.ts +10 -0
- package/references/skill-tree/scraper/package-lock.json +6329 -0
- package/references/skill-tree/scraper/package.json +68 -0
- package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-description.md +7 -0
- package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-name.md +7 -0
- package/references/skill-tree/scraper/test/fixtures/minimal-skill/SKILL.md +27 -0
- package/references/skill-tree/scraper/test/fixtures/skill-json/SKILL.json +21 -0
- package/references/skill-tree/scraper/test/fixtures/skill-with-meta/SKILL.md +54 -0
- package/references/skill-tree/scraper/test/fixtures/skill-with-meta/_meta.json +24 -0
- package/references/skill-tree/scraper/test/fixtures/valid-skill/SKILL.md +93 -0
- package/references/skill-tree/scraper/test/fixtures/valid-skill/_meta.json +22 -0
- package/references/skill-tree/scraper/tsup.config.ts +14 -0
- package/references/skill-tree/scraper/vitest.config.ts +17 -0
- package/references/skill-tree/scripts/convert-to-vitest.ts +166 -0
- package/references/skill-tree/skills/skill-writer/SKILL.md +339 -0
- package/references/skill-tree/skills/skill-writer/references/examples.md +326 -0
- package/references/skill-tree/skills/skill-writer/references/patterns.md +210 -0
- package/references/skill-tree/skills/skill-writer/references/quality-checklist.md +123 -0
- package/references/skill-tree/test/run-all.ts +106 -0
- package/references/skill-tree/test/utils.ts +128 -0
- package/references/skill-tree/vitest.config.ts +16 -0
- package/src/__tests__/e2e/agent-spawn-visibility.e2e.test.ts +761 -0
- package/src/__tests__/e2e/full-agent-conflict-resolution.e2e.test.ts +2 -2
- package/src/__tests__/e2e/mcp-thin-client-bridge.e2e.test.ts +304 -0
- package/src/__tests__/e2e/mcp-tools-available.e2e.test.ts +324 -0
- package/src/__tests__/e2e/multi-agent.e2e.test.ts +5 -5
- package/src/__tests__/e2e/spawn-session-streaming.e2e.test.ts +563 -0
- package/src/acp/__tests__/integration.test.ts +56 -31
- package/src/acp/__tests__/macro-agent.test.ts +16 -7
- package/src/acp/macro-agent.ts +170 -36
- package/src/acp/types.ts +46 -1
- package/src/agent/__tests__/agent-manager.test.ts +228 -2
- package/src/agent/agent-manager.ts +809 -285
- package/src/agent/types.ts +12 -1
- package/src/api/__tests__/server.test.ts +203 -4
- package/src/api/server.ts +169 -10
- package/src/api/types.ts +3 -1
- package/src/auth/__tests__/token.test.ts +100 -0
- package/src/auth/index.ts +1 -0
- package/src/auth/token.ts +82 -0
- package/src/cli/__tests__/acp.test.ts +1 -1
- package/src/cli/__tests__/stable-instance-id.test.ts +1 -1
- package/src/cli/acp.ts +197 -72
- package/src/cli/index.ts +125 -15
- package/src/cli/mcp.ts +315 -197
- package/src/cli/parse-args.ts +54 -0
- package/src/cli/stable-instance-id.ts +14 -0
- package/src/config/project-config.ts +214 -27
- package/src/index.ts +3 -0
- package/src/lifecycle/__tests__/cascade-termination.test.ts +1 -1
- package/src/lifecycle/__tests__/handlers.test.ts +53 -0
- package/src/lifecycle/handlers/index.ts +25 -8
- package/src/lifecycle/types.ts +3 -0
- package/src/map/adapter/__tests__/acp-over-map-cancel.test.ts +22 -4
- package/src/map/adapter/__tests__/acp-over-map-getmodels.test.ts +355 -0
- package/src/map/adapter/__tests__/acp-over-map-history.test.ts +263 -0
- package/src/map/adapter/__tests__/acp-over-map-persistence.e2e.test.ts +1 -1
- package/src/map/adapter/__tests__/event-broadcast.test.ts +420 -0
- package/src/map/adapter/__tests__/event-log.test.ts +527 -0
- package/src/map/adapter/__tests__/event-translator.test.ts +3 -3
- package/src/map/adapter/__tests__/extensions.test.ts +408 -0
- package/src/map/adapter/__tests__/map-adapter.test.ts +99 -0
- package/src/map/adapter/__tests__/mcp-bridge.test.ts +1187 -0
- package/src/map/adapter/__tests__/multi-client-broadcast.test.ts +711 -0
- package/src/map/adapter/__tests__/stream-extensions.test.ts +494 -0
- package/src/map/adapter/__tests__/websocket-integration.test.ts +218 -0
- package/src/map/adapter/acp-over-map.ts +678 -66
- package/src/map/adapter/connection-manager.ts +3 -0
- package/src/map/adapter/event-log.ts +208 -0
- package/src/map/adapter/event-translator.ts +6 -6
- package/src/map/adapter/extensions/agent-lifecycle.ts +267 -0
- package/src/map/adapter/extensions/index.ts +96 -0
- package/src/map/adapter/extensions/mcp-bridge.ts +995 -0
- package/src/map/adapter/extensions/streams.ts +839 -0
- package/src/map/adapter/extensions/task.ts +11 -0
- package/src/map/adapter/extensions/update-metadata.ts +126 -0
- package/src/map/adapter/index.ts +33 -0
- package/src/map/adapter/interface.ts +2 -0
- package/src/map/adapter/map-adapter.ts +312 -47
- package/src/map/adapter/subscription-manager.ts +5 -1
- package/src/map/adapter/types.ts +10 -1
- package/src/mcp/__tests__/map-client.test.ts +386 -0
- package/src/mcp/__tests__/mcp-server-thin-client.test.ts +368 -0
- package/src/mcp/__tests__/mcp-server.test.ts +100 -1
- package/src/mcp/map-client.ts +177 -0
- package/src/mcp/mcp-server.ts +205 -103
- package/src/mcp/tools/done.ts +19 -0
- package/src/mcp/types.ts +6 -1
- package/src/metrics/metrics.ts +1 -1
- package/src/monitor/__tests__/stale-agent-flow.integration.test.ts +1 -1
- package/src/roles/__tests__/config-loader.test.ts +7 -7
- package/src/roles/builtin/coordinator.ts +2 -0
- package/src/roles/builtin/integrator.ts +2 -0
- package/src/roles/builtin/worker.ts +3 -0
- package/src/roles/capabilities.ts +28 -7
- package/src/roles/config-loader.ts +8 -7
- package/src/roles/registry.ts +2 -2
- package/src/roles/types.ts +7 -0
- package/src/server/__tests__/combined-server.test.ts +94 -21
- package/src/server/combined-server.ts +203 -33
- package/src/steering/__tests__/steering-integration.test.ts +1 -1
- package/src/store/__tests__/event-store-oob.test.ts +109 -0
- package/src/store/__tests__/event-store.test.ts +196 -1
- package/src/store/__tests__/instance.test.ts +3 -3
- package/src/store/event-store.ts +92 -23
- package/src/store/instance.ts +2 -2
- package/src/store/types/agents.ts +20 -0
- package/src/store/types/events.ts +1 -1
- package/src/task/backend/__tests__/create-task-backend.test.ts +225 -0
- package/src/task/backend/__tests__/e2e/unified-tool-provider-opentasks.e2e.test.ts +524 -0
- package/src/task/backend/__tests__/memory-pull-mode.test.ts +153 -0
- package/src/task/backend/__tests__/unified-tool-provider.test.ts +579 -0
- package/src/task/backend/index.ts +156 -106
- package/src/task/backend/memory.ts +4 -0
- package/src/task/backend/opentasks/__tests__/backend.test.ts +968 -0
- package/src/task/backend/opentasks/__tests__/daemon-manager.test.ts +406 -0
- package/src/task/backend/opentasks/__tests__/mapping.test.ts +84 -0
- package/src/task/backend/opentasks/__tests__/opentasks-backend.e2e.test.ts +1338 -0
- package/src/task/backend/opentasks/backend.ts +1323 -0
- package/src/task/backend/opentasks/client.ts +652 -0
- package/src/task/backend/opentasks/daemon-manager.ts +256 -0
- package/src/task/backend/opentasks/index.ts +69 -0
- package/src/task/backend/opentasks/mapping.ts +94 -0
- package/src/task/backend/types.ts +42 -66
- package/src/task/backend/unified-tool-provider.ts +779 -0
- package/src/teams/CLAUDE.md +180 -0
- package/src/teams/__tests__/cross-subsystem.integration.test.ts +1 -1
- package/src/teams/__tests__/e2e/workspace-isolation.e2e.test.ts +1263 -0
- package/src/teams/__tests__/team-manager.test.ts +814 -0
- package/src/teams/__tests__/team-system.test.ts +1291 -8
- package/src/teams/index.ts +21 -3
- package/src/teams/seed-defaults.ts +79 -0
- package/src/teams/team-loader.ts +202 -236
- package/src/teams/team-manager.ts +387 -0
- package/src/teams/team-runtime.ts +592 -121
- package/src/teams/types.ts +99 -200
- package/test_fixtures/README.md +2 -3
- package/test_fixtures/fixtures/index.ts +0 -3
- package/test_fixtures/fixtures/projects/project-with-specs.ts +7 -149
- package/test_fixtures/fixtures/repos/index.ts +1 -3
- package/test_fixtures/fixtures/repos/temp-repo-factory.ts +0 -116
- package/test_fixtures/fixtures/repos/types.ts +0 -11
- package/test_fixtures/harness/__tests__/fixtures.test.ts +10 -102
- package/test_fixtures/harness/__tests__/temp-repo-and-simulator.test.ts +0 -33
- package/test_fixtures/harness/simulator/agent-simulator.ts +4 -4
- package/vitest.config.ts +1 -1
- package/vitest.e2e.config.ts +1 -1
- package/vitest.setup.ts +1 -30
- package/.macro-agent/teams/self-driving/prompts/grinder.md +0 -27
- package/.macro-agent/teams/self-driving/prompts/judge.md +0 -27
- package/.macro-agent/teams/self-driving/prompts/planner.md +0 -33
- package/.macro-agent/teams/self-driving/roles/grinder.yaml +0 -17
- package/.macro-agent/teams/self-driving/roles/judge.yaml +0 -24
- package/.macro-agent/teams/self-driving/roles/planner.yaml +0 -18
- package/.macro-agent/teams/self-driving/team.yaml +0 -103
- package/.macro-agent/teams/structured/prompts/developer.md +0 -26
- package/.macro-agent/teams/structured/prompts/lead.md +0 -25
- package/.macro-agent/teams/structured/prompts/reviewer.md +0 -24
- package/.macro-agent/teams/structured/roles/developer.yaml +0 -12
- package/.macro-agent/teams/structured/roles/lead.yaml +0 -11
- package/.macro-agent/teams/structured/roles/reviewer.yaml +0 -19
- package/.macro-agent/teams/structured/team.yaml +0 -89
- package/docs/sudocode-integration.md +0 -383
- package/src/task/backend/__tests__/backend-parity.test.ts +0 -451
- package/src/task/backend/__tests__/tool-provider-edge-cases.test.ts +0 -430
- package/src/task/backend/__tests__/tool-provider.test.ts +0 -983
- package/src/task/backend/sudocode/__tests__/backend-edge-cases.test.ts +0 -575
- package/src/task/backend/sudocode/__tests__/backend.test.ts +0 -1194
- package/src/task/backend/sudocode/__tests__/client-integration.test.ts +0 -418
- package/src/task/backend/sudocode/__tests__/client.test.ts +0 -345
- package/src/task/backend/sudocode/__tests__/e2e/backend.e2e.test.ts +0 -753
- package/src/task/backend/sudocode/__tests__/e2e/server-client.e2e.test.ts +0 -680
- package/src/task/backend/sudocode/__tests__/e2e-workflow.test.ts +0 -666
- package/src/task/backend/sudocode/__tests__/integration/standalone-client.integration.test.ts +0 -396
- package/src/task/backend/sudocode/__tests__/integration/sudocode-cli.integration.test.ts +0 -328
- package/src/task/backend/sudocode/__tests__/integration/test-utils.ts +0 -175
- package/src/task/backend/sudocode/__tests__/mapping-edge-cases.test.ts +0 -265
- package/src/task/backend/sudocode/__tests__/server-client.test.ts +0 -675
- package/src/task/backend/sudocode/__tests__/sync-policy-edge-cases.test.ts +0 -521
- package/src/task/backend/sudocode/__tests__/sync-policy.test.ts +0 -519
- package/src/task/backend/sudocode/__tests__/tools.test.ts +0 -471
- package/src/task/backend/sudocode/backend.ts +0 -1237
- package/src/task/backend/sudocode/client.ts +0 -515
- package/src/task/backend/sudocode/index.ts +0 -120
- package/src/task/backend/sudocode/mapping.ts +0 -93
- package/src/task/backend/sudocode/server-client.ts +0 -522
- package/src/task/backend/sudocode/standalone-client.ts +0 -623
- package/src/task/backend/sudocode/sync-policy.ts +0 -387
- package/src/task/backend/sudocode/tools.ts +0 -896
- package/src/task/backend/tool-provider.ts +0 -506
- package/test_fixtures/fixtures/sudocode/index.ts +0 -29
- package/test_fixtures/fixtures/sudocode/issues.ts +0 -185
- package/test_fixtures/fixtures/sudocode/specs.ts +0 -159
package/dist/teams/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { loadTeam } from "./team-loader.js";
|
|
2
2
|
export { TeamRuntime } from "./team-runtime.js";
|
|
3
|
+
export { TeamManager } from "./team-manager.js";
|
|
4
|
+
export { seedDefaultTemplates } from "./seed-defaults.js";
|
|
3
5
|
export { TeamLoadError, } from "./types.js";
|
|
4
6
|
//# sourceMappingURL=index.js.map
|
package/dist/teams/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/teams/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAA+C,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EACL,aAAa,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/teams/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAA+C,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAAE,WAAW,EAA8C,MAAM,mBAAmB,CAAC;AAC5F,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EACL,aAAa,GAyBd,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Seed Default Team Templates
|
|
3
|
+
*
|
|
4
|
+
* Copies bundled default team templates from the macro-agent package
|
|
5
|
+
* to the project's .multiagent/teams/ directory on first use.
|
|
6
|
+
* Idempotent — only copies templates that don't already exist.
|
|
7
|
+
*
|
|
8
|
+
* @module teams/seed-defaults
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Copy bundled default team templates to the project's .multiagent/teams/ directory.
|
|
12
|
+
*
|
|
13
|
+
* Only copies templates that don't already exist at the target path —
|
|
14
|
+
* user-customized templates are never overwritten. Safe to call on every startup.
|
|
15
|
+
*
|
|
16
|
+
* @param basePath - Project root directory (e.g., process.cwd())
|
|
17
|
+
* @returns Names of templates that were copied
|
|
18
|
+
*/
|
|
19
|
+
export declare function seedDefaultTemplates(basePath: string): Promise<string[]>;
|
|
20
|
+
//# sourceMappingURL=seed-defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed-defaults.d.ts","sourceRoot":"","sources":["../../src/teams/seed-defaults.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAYH;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAiC9E"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Seed Default Team Templates
|
|
3
|
+
*
|
|
4
|
+
* Copies bundled default team templates from the macro-agent package
|
|
5
|
+
* to the project's .multiagent/teams/ directory on first use.
|
|
6
|
+
* Idempotent — only copies templates that don't already exist.
|
|
7
|
+
*
|
|
8
|
+
* @module teams/seed-defaults
|
|
9
|
+
*/
|
|
10
|
+
import * as fs from "fs";
|
|
11
|
+
import * as path from "path";
|
|
12
|
+
import { fileURLToPath } from "url";
|
|
13
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
14
|
+
// Package root: up from src/teams/ → src/ → package root
|
|
15
|
+
const PACKAGE_ROOT = path.resolve(__dirname, "..", "..");
|
|
16
|
+
const BUNDLED_TEAMS_DIR = path.join(PACKAGE_ROOT, ".multiagent", "teams");
|
|
17
|
+
const TEAMS_DIR = ".multiagent/teams";
|
|
18
|
+
/**
|
|
19
|
+
* Copy bundled default team templates to the project's .multiagent/teams/ directory.
|
|
20
|
+
*
|
|
21
|
+
* Only copies templates that don't already exist at the target path —
|
|
22
|
+
* user-customized templates are never overwritten. Safe to call on every startup.
|
|
23
|
+
*
|
|
24
|
+
* @param basePath - Project root directory (e.g., process.cwd())
|
|
25
|
+
* @returns Names of templates that were copied
|
|
26
|
+
*/
|
|
27
|
+
export async function seedDefaultTemplates(basePath) {
|
|
28
|
+
const targetDir = path.join(basePath, TEAMS_DIR);
|
|
29
|
+
const seeded = [];
|
|
30
|
+
// Check if bundled templates exist in the package
|
|
31
|
+
if (!fs.existsSync(BUNDLED_TEAMS_DIR))
|
|
32
|
+
return seeded;
|
|
33
|
+
let bundledTemplates;
|
|
34
|
+
try {
|
|
35
|
+
bundledTemplates = fs.readdirSync(BUNDLED_TEAMS_DIR, { withFileTypes: true })
|
|
36
|
+
.filter(d => d.isDirectory());
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return seeded;
|
|
40
|
+
}
|
|
41
|
+
if (bundledTemplates.length === 0)
|
|
42
|
+
return seeded;
|
|
43
|
+
// Ensure target directory exists
|
|
44
|
+
fs.mkdirSync(targetDir, { recursive: true });
|
|
45
|
+
for (const templateDir of bundledTemplates) {
|
|
46
|
+
const targetTemplatePath = path.join(targetDir, templateDir.name);
|
|
47
|
+
if (fs.existsSync(targetTemplatePath))
|
|
48
|
+
continue; // Don't overwrite
|
|
49
|
+
// Recursive copy of the entire template directory
|
|
50
|
+
copyDirRecursive(path.join(BUNDLED_TEAMS_DIR, templateDir.name), targetTemplatePath);
|
|
51
|
+
seeded.push(templateDir.name);
|
|
52
|
+
}
|
|
53
|
+
return seeded;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Recursively copy a directory tree.
|
|
57
|
+
*/
|
|
58
|
+
function copyDirRecursive(src, dest) {
|
|
59
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
60
|
+
for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
|
|
61
|
+
const srcPath = path.join(src, entry.name);
|
|
62
|
+
const destPath = path.join(dest, entry.name);
|
|
63
|
+
if (entry.isDirectory()) {
|
|
64
|
+
copyDirRecursive(srcPath, destPath);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
fs.copyFileSync(srcPath, destPath);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=seed-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed-defaults.js","sourceRoot":"","sources":["../../src/teams/seed-defaults.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,yDAAyD;AACzD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACzD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;AAC1E,MAAM,SAAS,GAAG,mBAAmB,CAAC;AAEtC;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,QAAgB;IACzD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACjD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,kDAAkD;IAClD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAAE,OAAO,MAAM,CAAC;IAErD,IAAI,gBAA6B,CAAC;IAClC,IAAI,CAAC;QACH,gBAAgB,GAAG,EAAE,CAAC,WAAW,CAAC,iBAAiB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;aAC1E,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAEjD,iCAAiC;IACjC,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,KAAK,MAAM,WAAW,IAAI,gBAAgB,EAAE,CAAC;QAC3C,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAClE,IAAI,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC;YAAE,SAAS,CAAC,kBAAkB;QAEnE,kDAAkD;QAClD,gBAAgB,CACd,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,IAAI,CAAC,EAC9C,kBAAkB,CACnB,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,GAAW,EAAE,IAAY;IACjD,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Team Template Loader
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Thin wrapper around openteams TemplateLoader that maps the result
|
|
5
|
+
* into macro-agent's TeamManifest format with enforcement-enriched roles.
|
|
6
6
|
*
|
|
7
7
|
* @module teams/team-loader
|
|
8
8
|
*/
|
|
@@ -11,7 +11,11 @@ import { type TeamManifest } from "./types.js";
|
|
|
11
11
|
/**
|
|
12
12
|
* Load a team template from disk and resolve all references.
|
|
13
13
|
*
|
|
14
|
-
*
|
|
14
|
+
* Delegates to openteams TemplateLoader for YAML parsing, role resolution,
|
|
15
|
+
* prompt loading, and MCP server config. Enriches the result with macro-agent
|
|
16
|
+
* specific enforcement (workspace, lifecycle, spawn rules).
|
|
17
|
+
*
|
|
18
|
+
* @param teamName - Team name (directory name under .multiagent/teams/)
|
|
15
19
|
* @param roleRegistry - Role registry for resolving extends chains
|
|
16
20
|
* @param basePath - Project root (default: process.cwd())
|
|
17
21
|
* @returns Fully resolved TeamManifest
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"team-loader.d.ts","sourceRoot":"","sources":["../../src/teams/team-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"team-loader.d.ts","sourceRoot":"","sources":["../../src/teams/team-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,KAAK,EAAE,YAAY,EAA8B,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAEL,KAAK,YAAY,EAKlB,MAAM,YAAY,CAAC;AAYpB;;;;;;;;;;;GAWG;AACH,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,YAAY,EAC1B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC,CA+EvB"}
|
|
@@ -1,31 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Team Template Loader
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Thin wrapper around openteams TemplateLoader that maps the result
|
|
5
|
+
* into macro-agent's TeamManifest format with enforcement-enriched roles.
|
|
6
6
|
*
|
|
7
7
|
* @module teams/team-loader
|
|
8
8
|
*/
|
|
9
|
-
import * as fs from "fs";
|
|
10
9
|
import * as path from "path";
|
|
11
|
-
import
|
|
10
|
+
import { TemplateLoader } from "openteams";
|
|
12
11
|
import { TeamLoadError, } from "./types.js";
|
|
13
12
|
// =============================================================================
|
|
14
13
|
// Constants
|
|
15
14
|
// =============================================================================
|
|
16
|
-
const TEAMS_DIR = ".
|
|
17
|
-
const MANIFEST_FILE = "team.yaml";
|
|
18
|
-
const ROLES_DIR = "roles";
|
|
19
|
-
const PROMPTS_DIR = "prompts";
|
|
20
|
-
const TOOLS_DIR = "tools";
|
|
21
|
-
const MCP_SERVERS_FILE = "mcp-servers.json";
|
|
15
|
+
const TEAMS_DIR = ".multiagent/teams";
|
|
22
16
|
// =============================================================================
|
|
23
17
|
// TeamLoader
|
|
24
18
|
// =============================================================================
|
|
25
19
|
/**
|
|
26
20
|
* Load a team template from disk and resolve all references.
|
|
27
21
|
*
|
|
28
|
-
*
|
|
22
|
+
* Delegates to openteams TemplateLoader for YAML parsing, role resolution,
|
|
23
|
+
* prompt loading, and MCP server config. Enriches the result with macro-agent
|
|
24
|
+
* specific enforcement (workspace, lifecycle, spawn rules).
|
|
25
|
+
*
|
|
26
|
+
* @param teamName - Team name (directory name under .multiagent/teams/)
|
|
29
27
|
* @param roleRegistry - Role registry for resolving extends chains
|
|
30
28
|
* @param basePath - Project root (default: process.cwd())
|
|
31
29
|
* @returns Fully resolved TeamManifest
|
|
@@ -33,225 +31,219 @@ const MCP_SERVERS_FILE = "mcp-servers.json";
|
|
|
33
31
|
export async function loadTeam(teamName, roleRegistry, basePath) {
|
|
34
32
|
const root = basePath ?? process.cwd();
|
|
35
33
|
const teamDir = path.join(root, TEAMS_DIR, teamName);
|
|
36
|
-
// 1.
|
|
37
|
-
|
|
38
|
-
throw new TeamLoadError(`Team directory not found: ${teamDir}`, "MANIFEST_NOT_FOUND", teamName);
|
|
39
|
-
}
|
|
40
|
-
// 2. Read and parse team.yaml
|
|
41
|
-
const manifestPath = path.join(teamDir, MANIFEST_FILE);
|
|
42
|
-
if (!fs.existsSync(manifestPath)) {
|
|
43
|
-
throw new TeamLoadError(`Team manifest not found: ${manifestPath}`, "MANIFEST_NOT_FOUND", teamName);
|
|
44
|
-
}
|
|
45
|
-
const raw = fs.readFileSync(manifestPath, "utf-8");
|
|
46
|
-
let parsed;
|
|
34
|
+
// 1. Load via openteams TemplateLoader with hooks
|
|
35
|
+
let template;
|
|
47
36
|
try {
|
|
48
|
-
|
|
37
|
+
template = await TemplateLoader.loadAsync(teamDir, {
|
|
38
|
+
resolveExternalRole: (name) => mapRegistryRole(roleRegistry, name),
|
|
39
|
+
postProcessRole: (role, manifest) => enrichRoleWithSpawnRules(role, manifest),
|
|
40
|
+
});
|
|
49
41
|
}
|
|
50
42
|
catch (err) {
|
|
51
|
-
throw
|
|
43
|
+
throw mapToTeamLoadError(err, teamName, teamDir);
|
|
52
44
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
const macroAgent = (parsed.macro_agent ?? {});
|
|
58
|
-
const roleNames = parsed.roles;
|
|
59
|
-
// 4. Resolve roles
|
|
45
|
+
const manifest = template.manifest;
|
|
46
|
+
const communication = (manifest.communication ?? {});
|
|
47
|
+
const macroAgent = parseMacroAgentExtensions(manifest.macro_agent);
|
|
48
|
+
// 2. Build enforcement-enriched roles
|
|
60
49
|
const resolvedRoles = new Map();
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
const resolved = resolveTeamRole(roleName, teamDir, roleRegistry, spawnRules);
|
|
64
|
-
resolvedRoles.set(roleName, resolved);
|
|
50
|
+
for (const [roleName, openteamsRole] of template.roles) {
|
|
51
|
+
resolvedRoles.set(roleName, buildResolvedTeamRole(roleName, openteamsRole, roleRegistry));
|
|
65
52
|
}
|
|
66
|
-
//
|
|
53
|
+
// 3. Build loaded prompts map (backward compat: path → assembled content)
|
|
54
|
+
// Assembles multi-file prompts (primary + additional sections) into a single
|
|
55
|
+
// string so the runtime can use it transparently.
|
|
67
56
|
const loadedPrompts = new Map();
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
57
|
+
for (const [roleName, resolvedPrompts] of template.prompts) {
|
|
58
|
+
if (!resolvedPrompts.primary)
|
|
59
|
+
continue;
|
|
60
|
+
const role = template.roles.get(roleName);
|
|
61
|
+
// Assemble full prompt: primary + additional sections
|
|
62
|
+
let fullPrompt = resolvedPrompts.primary;
|
|
63
|
+
for (const section of resolvedPrompts.additional) {
|
|
64
|
+
fullPrompt += `\n\n## ${section.name}\n\n${section.content}`;
|
|
65
|
+
}
|
|
66
|
+
// Store under role's promptFile key (used by getPromptForRole)
|
|
67
|
+
if (role?.promptFile) {
|
|
68
|
+
loadedPrompts.set(role.promptFile, fullPrompt);
|
|
69
|
+
}
|
|
70
|
+
// Store under topology node prompt keys (used by getPromptForTopologyNode)
|
|
71
|
+
if (manifest.topology.root.role === roleName && manifest.topology.root.prompt) {
|
|
72
|
+
loadedPrompts.set(manifest.topology.root.prompt, fullPrompt);
|
|
73
|
+
}
|
|
74
|
+
for (const comp of manifest.topology.companions ?? []) {
|
|
75
|
+
if (comp.role === roleName && comp.prompt) {
|
|
76
|
+
loadedPrompts.set(comp.prompt, fullPrompt);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Convention fallback key
|
|
80
|
+
if (!role?.promptFile) {
|
|
81
|
+
loadedPrompts.set(`prompts/${roleName}.md`, fullPrompt);
|
|
74
82
|
}
|
|
75
|
-
loadedPrompts.set(promptPath, fs.readFileSync(fullPath, "utf-8"));
|
|
76
83
|
}
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
// 7. Validate communication topology
|
|
80
|
-
validateCommunication(communication, roleNames, teamName);
|
|
84
|
+
// 4. Validate communication topology
|
|
85
|
+
validateCommunication(communication, manifest.roles, teamName);
|
|
81
86
|
return {
|
|
82
|
-
name:
|
|
83
|
-
description:
|
|
84
|
-
version:
|
|
85
|
-
roles:
|
|
86
|
-
topology,
|
|
87
|
+
name: manifest.name,
|
|
88
|
+
description: manifest.description ?? "",
|
|
89
|
+
version: manifest.version ?? 1,
|
|
90
|
+
roles: manifest.roles,
|
|
91
|
+
topology: manifest.topology,
|
|
87
92
|
communication,
|
|
88
93
|
macro_agent: macroAgent,
|
|
89
94
|
_resolvedRoles: resolvedRoles,
|
|
90
95
|
_loadedPrompts: loadedPrompts,
|
|
91
|
-
_mcpServers: mcpServers,
|
|
96
|
+
_mcpServers: template.mcpServers,
|
|
92
97
|
};
|
|
93
98
|
}
|
|
94
99
|
// =============================================================================
|
|
95
|
-
//
|
|
100
|
+
// Hook: Map RoleRegistry → openteams ResolvedRole
|
|
96
101
|
// =============================================================================
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
102
|
+
/**
|
|
103
|
+
* Convert a macro-agent RoleRegistry entry to an openteams ResolvedRole.
|
|
104
|
+
* Used as the resolveExternalRole hook for TemplateLoader.
|
|
105
|
+
*/
|
|
106
|
+
function mapRegistryRole(roleRegistry, name) {
|
|
107
|
+
try {
|
|
108
|
+
const rd = roleRegistry.resolveRole(name);
|
|
109
|
+
return {
|
|
110
|
+
name: rd.name,
|
|
111
|
+
displayName: rd.displayName ?? rd.name,
|
|
112
|
+
description: rd.description ?? `Role: ${rd.name}`,
|
|
113
|
+
capabilities: [...rd.capabilities],
|
|
114
|
+
raw: { name: rd.name, capabilities: [...rd.capabilities] },
|
|
115
|
+
};
|
|
109
116
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
throw new TeamLoadError("Team topology requires a 'root' object", "INVALID_MANIFEST", teamName);
|
|
117
|
+
catch {
|
|
118
|
+
return null;
|
|
113
119
|
}
|
|
114
120
|
}
|
|
115
121
|
// =============================================================================
|
|
116
|
-
//
|
|
122
|
+
// Hook: Enrich roles with spawn_rules capabilities
|
|
117
123
|
// =============================================================================
|
|
118
124
|
/**
|
|
119
|
-
*
|
|
120
|
-
*
|
|
125
|
+
* Translate team topology spawn_rules into agent.spawn.* capabilities.
|
|
126
|
+
* Used as the postProcessRole hook for TemplateLoader.
|
|
121
127
|
*/
|
|
122
|
-
function
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
128
|
+
function enrichRoleWithSpawnRules(role, manifest) {
|
|
129
|
+
const spawnRules = manifest.topology.spawn_rules;
|
|
130
|
+
if (!spawnRules)
|
|
131
|
+
return role;
|
|
132
|
+
const allowedSpawns = spawnRules[role.name];
|
|
133
|
+
if (!allowedSpawns || allowedSpawns.length === 0)
|
|
134
|
+
return role;
|
|
135
|
+
const capabilities = [...role.capabilities];
|
|
136
|
+
for (const target of allowedSpawns) {
|
|
137
|
+
const cap = `agent.spawn.${target}`;
|
|
138
|
+
if (!capabilities.includes(cap)) {
|
|
139
|
+
capabilities.push(cap);
|
|
133
140
|
}
|
|
134
141
|
}
|
|
135
|
-
|
|
136
|
-
|
|
142
|
+
return { ...role, capabilities };
|
|
143
|
+
}
|
|
144
|
+
// =============================================================================
|
|
145
|
+
// Build ResolvedTeamRole
|
|
146
|
+
// =============================================================================
|
|
147
|
+
/**
|
|
148
|
+
* Build a macro-agent ResolvedTeamRole from an openteams ResolvedRole.
|
|
149
|
+
* Enriches with enforcement-specific fields (workspace, lifecycle, tools, etc.)
|
|
150
|
+
* from the parent RoleDefinition and macro_agent overrides from role YAML.
|
|
151
|
+
*/
|
|
152
|
+
function buildResolvedTeamRole(roleName, openteamsRole, roleRegistry) {
|
|
153
|
+
const baseRoleName = openteamsRole.extends ?? roleName;
|
|
137
154
|
let parentRole;
|
|
138
155
|
try {
|
|
139
156
|
parentRole = roleRegistry.resolveRole(baseRoleName);
|
|
140
157
|
}
|
|
141
158
|
catch {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}
|
|
150
|
-
else if (teamRoleDef?.capabilities_add || teamRoleDef?.capabilities_remove) {
|
|
151
|
-
// Additive/subtractive
|
|
152
|
-
const base = new Set(parentRole.capabilities);
|
|
153
|
-
for (const cap of teamRoleDef.capabilities_add ?? []) {
|
|
154
|
-
base.add(cap);
|
|
155
|
-
}
|
|
156
|
-
for (const cap of teamRoleDef.capabilities_remove ?? []) {
|
|
157
|
-
base.delete(cap);
|
|
158
|
-
}
|
|
159
|
-
capabilities = Array.from(base);
|
|
159
|
+
// Fallback for roles without a registry parent
|
|
160
|
+
parentRole = {
|
|
161
|
+
name: baseRoleName,
|
|
162
|
+
displayName: baseRoleName,
|
|
163
|
+
description: `Role: ${baseRoleName}`,
|
|
164
|
+
capabilities: [],
|
|
165
|
+
};
|
|
160
166
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
167
|
+
const macroAgent = openteamsRole.raw.macro_agent;
|
|
168
|
+
let capabilities = openteamsRole.capabilities;
|
|
169
|
+
// If the role YAML had no capability specification (no capabilities,
|
|
170
|
+
// capabilities_add, or capabilities_remove), openteams leaves capabilities
|
|
171
|
+
// empty. In that case, inherit all parent capabilities. Spawn-rule enrichment
|
|
172
|
+
// may have already added some caps, so merge with parent.
|
|
173
|
+
const hasExplicitCapabilitySpec = openteamsRole.raw.capabilities !== undefined;
|
|
174
|
+
if (!hasExplicitCapabilitySpec && parentRole.capabilities.length > 0) {
|
|
175
|
+
const merged = new Set([...parentRole.capabilities, ...capabilities]);
|
|
176
|
+
capabilities = [...merged];
|
|
164
177
|
}
|
|
165
|
-
// Translate spawn_rules into capability additions (RD3)
|
|
166
|
-
const allowedSpawns = spawnRules[roleName];
|
|
167
|
-
if (allowedSpawns) {
|
|
168
|
-
for (const targetRole of allowedSpawns) {
|
|
169
|
-
const spawnCap = `agent.spawn.${targetRole}`;
|
|
170
|
-
if (!capabilities.includes(spawnCap)) {
|
|
171
|
-
capabilities.push(spawnCap);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
// Build the resolved RoleDefinition for registry
|
|
176
178
|
const roleDefinition = {
|
|
177
179
|
name: roleName,
|
|
178
|
-
displayName:
|
|
179
|
-
description:
|
|
180
|
+
displayName: openteamsRole.displayName,
|
|
181
|
+
description: openteamsRole.description,
|
|
180
182
|
capabilities,
|
|
181
|
-
workspace:
|
|
183
|
+
workspace: macroAgent?.workspace
|
|
182
184
|
? {
|
|
183
|
-
type: (
|
|
184
|
-
branchPattern:
|
|
185
|
-
cleanupOnTerminate:
|
|
185
|
+
type: (macroAgent.workspace.type ?? "own"),
|
|
186
|
+
branchPattern: macroAgent.workspace.branch_pattern,
|
|
187
|
+
cleanupOnTerminate: macroAgent.workspace.cleanup_on_terminate,
|
|
186
188
|
}
|
|
187
189
|
: parentRole.workspace,
|
|
188
|
-
lifecycle:
|
|
190
|
+
lifecycle: macroAgent?.lifecycle
|
|
189
191
|
? {
|
|
190
|
-
type: (
|
|
191
|
-
cascadeTerminate:
|
|
192
|
-
selfCleanup:
|
|
193
|
-
taskBound:
|
|
194
|
-
parentBound:
|
|
195
|
-
maxDurationMs:
|
|
192
|
+
type: (macroAgent.lifecycle.type ?? "ephemeral"),
|
|
193
|
+
cascadeTerminate: macroAgent.lifecycle.cascade_terminate,
|
|
194
|
+
selfCleanup: macroAgent.lifecycle.self_cleanup,
|
|
195
|
+
taskBound: macroAgent.lifecycle.task_bound,
|
|
196
|
+
parentBound: macroAgent.lifecycle.parent_bound,
|
|
197
|
+
maxDurationMs: macroAgent.lifecycle.max_duration_ms,
|
|
196
198
|
}
|
|
197
199
|
: parentRole.lifecycle,
|
|
198
200
|
tools: parentRole.tools,
|
|
199
201
|
protocol: parentRole.protocol,
|
|
200
202
|
permissions: parentRole.permissions,
|
|
201
|
-
extends:
|
|
203
|
+
extends: openteamsRole.extends,
|
|
202
204
|
systemPrompt: parentRole.systemPrompt,
|
|
203
205
|
};
|
|
204
206
|
return {
|
|
205
207
|
name: roleName,
|
|
206
208
|
baseRole: baseRoleName,
|
|
207
209
|
capabilities,
|
|
208
|
-
prompt:
|
|
210
|
+
prompt: openteamsRole.promptFile,
|
|
209
211
|
roleDefinition,
|
|
210
212
|
};
|
|
211
213
|
}
|
|
212
214
|
// =============================================================================
|
|
213
|
-
//
|
|
215
|
+
// Parse macro_agent extensions
|
|
214
216
|
// =============================================================================
|
|
215
217
|
/**
|
|
216
|
-
*
|
|
218
|
+
* Parse the opaque macro_agent field from the manifest into typed extensions.
|
|
217
219
|
*/
|
|
218
|
-
function
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
refs.add(topology.root.prompt);
|
|
223
|
-
for (const companion of topology.companions ?? []) {
|
|
224
|
-
if (companion.prompt)
|
|
225
|
-
refs.add(companion.prompt);
|
|
226
|
-
}
|
|
227
|
-
// From role definitions
|
|
228
|
-
for (const resolved of resolvedRoles.values()) {
|
|
229
|
-
if (resolved.prompt)
|
|
230
|
-
refs.add(resolved.prompt);
|
|
231
|
-
}
|
|
232
|
-
return refs;
|
|
220
|
+
function parseMacroAgentExtensions(raw) {
|
|
221
|
+
if (!raw)
|
|
222
|
+
return {};
|
|
223
|
+
return raw;
|
|
233
224
|
}
|
|
234
225
|
// =============================================================================
|
|
235
|
-
//
|
|
226
|
+
// Error Mapping
|
|
236
227
|
// =============================================================================
|
|
237
228
|
/**
|
|
238
|
-
*
|
|
239
|
-
* Returns a map of role name → MCP server entries.
|
|
229
|
+
* Map openteams loader errors to macro-agent TeamLoadError for backward compat.
|
|
240
230
|
*/
|
|
241
|
-
function
|
|
242
|
-
const
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
return result;
|
|
231
|
+
function mapToTeamLoadError(err, teamName, teamDir) {
|
|
232
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
233
|
+
if (message.includes("not found") || message.includes("not exist")) {
|
|
234
|
+
return new TeamLoadError(`Team directory or manifest not found: ${teamDir}`, "MANIFEST_NOT_FOUND", teamName);
|
|
246
235
|
}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
236
|
+
if (message.includes("parse") || message.includes("YAML")) {
|
|
237
|
+
return new TeamLoadError(`Failed to parse team manifest: ${message}`, "INVALID_MANIFEST", teamName);
|
|
238
|
+
}
|
|
239
|
+
if (message.includes("role") && message.includes("not in")) {
|
|
240
|
+
return new TeamLoadError(message, "INVALID_MANIFEST", teamName);
|
|
241
|
+
}
|
|
242
|
+
if (message.includes("Circular")) {
|
|
243
|
+
return new TeamLoadError(message, "INVALID_ROLE", teamName);
|
|
253
244
|
}
|
|
254
|
-
|
|
245
|
+
// Default: treat as invalid manifest
|
|
246
|
+
return new TeamLoadError(`Failed to load team '${teamName}': ${message}`, "INVALID_MANIFEST", teamName);
|
|
255
247
|
}
|
|
256
248
|
// =============================================================================
|
|
257
249
|
// Communication Validation
|