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
|
@@ -26,15 +26,32 @@ import {
|
|
|
26
26
|
createMAPAdapter,
|
|
27
27
|
createMAPWebSocketHandler,
|
|
28
28
|
registerWorkspaceFileExtensions,
|
|
29
|
+
registerUpdateMetadataExtension,
|
|
30
|
+
registerMCPBridgeExtensions,
|
|
31
|
+
registerTaskExtensions,
|
|
32
|
+
registerResumeExtension,
|
|
33
|
+
registerAgentLifecycleExtensions,
|
|
34
|
+
registerStreamExtensions,
|
|
29
35
|
type MAPAdapter,
|
|
30
36
|
type MAPAdapterServices,
|
|
31
37
|
type MAPWebSocketHandler,
|
|
38
|
+
type StreamExtensionServices,
|
|
32
39
|
} from "../map/adapter/index.js";
|
|
33
40
|
import type { Agent, AgentId } from "../store/types/index.js";
|
|
34
41
|
import type { Address, SendOptions } from "../map/types.js";
|
|
35
42
|
import { createMailService, type MailService } from "../mail/mail-service.js";
|
|
36
|
-
import {
|
|
43
|
+
import {
|
|
44
|
+
createConversationMap,
|
|
45
|
+
type ConversationMap,
|
|
46
|
+
} from "../mail/conversation-map.js";
|
|
37
47
|
import { createTurnRecorder } from "../mail/turn-recorder.js";
|
|
48
|
+
import {
|
|
49
|
+
AgentTokenManager,
|
|
50
|
+
generateToken as generateTokenFn,
|
|
51
|
+
secureCompare,
|
|
52
|
+
} from "../auth/token.js";
|
|
53
|
+
import { TaskBackend, TaskToolProvider } from "../task/backend/types.js";
|
|
54
|
+
import type { TeamManager } from "../teams/team-manager.js";
|
|
38
55
|
|
|
39
56
|
// ─────────────────────────────────────────────────────────────────
|
|
40
57
|
// Types
|
|
@@ -49,6 +66,22 @@ export interface CombinedServerServices {
|
|
|
49
66
|
capabilityManager?: CapabilityManager;
|
|
50
67
|
/** Optional activity watcher for event-driven waking */
|
|
51
68
|
activityWatcher?: ActivityWatcher;
|
|
69
|
+
/** Optional task backend for task tool bridge extensions */
|
|
70
|
+
taskBackend?: TaskBackend;
|
|
71
|
+
/** Optional task tool provider for dynamic task tools in thin-client mode */
|
|
72
|
+
taskToolProvider?: TaskToolProvider;
|
|
73
|
+
/** Mutable context holder for task tool provider agent_id injection */
|
|
74
|
+
taskToolContext?: { agent_id: string };
|
|
75
|
+
/** Per-agent token manager for MCP bridge authentication */
|
|
76
|
+
agentTokenManager?: AgentTokenManager;
|
|
77
|
+
/** Get connected opentasks project paths (for health endpoint) */
|
|
78
|
+
getConnectedProjects?: () => string[];
|
|
79
|
+
/** Optional stream extension services for git-cascade stream/checkpoint/merge-queue features */
|
|
80
|
+
streamExtensions?: StreamExtensionServices;
|
|
81
|
+
/** Optional team manager for dynamic team management */
|
|
82
|
+
teamManager?: TeamManager;
|
|
83
|
+
/** Optional workspace manager for workspace isolation and merge queue */
|
|
84
|
+
workspaceManager?: import("../workspace/types.js").WorkspaceManager;
|
|
52
85
|
}
|
|
53
86
|
|
|
54
87
|
export interface CombinedServerConfig {
|
|
@@ -69,6 +102,12 @@ export interface CombinedServerConfig {
|
|
|
69
102
|
|
|
70
103
|
/** Disable MAP protocol (default: false - MAP is enabled) */
|
|
71
104
|
disableMap?: boolean;
|
|
105
|
+
|
|
106
|
+
/** Server token for authentication. Auto-generated if not provided (unless noAuth is true). */
|
|
107
|
+
serverToken?: string;
|
|
108
|
+
|
|
109
|
+
/** Disable authentication entirely (for local development/testing) */
|
|
110
|
+
noAuth?: boolean;
|
|
72
111
|
}
|
|
73
112
|
|
|
74
113
|
export interface CombinedServer {
|
|
@@ -101,6 +140,9 @@ export interface CombinedServer {
|
|
|
101
140
|
|
|
102
141
|
/** Conversation map (for agent-to-conversation tracking) */
|
|
103
142
|
readonly conversationMap?: ConversationMap;
|
|
143
|
+
|
|
144
|
+
/** Server token used for authentication (exposed for tests). Undefined when auth is disabled. */
|
|
145
|
+
readonly serverToken?: string;
|
|
104
146
|
}
|
|
105
147
|
|
|
106
148
|
// ─────────────────────────────────────────────────────────────────
|
|
@@ -110,7 +152,10 @@ export interface CombinedServer {
|
|
|
110
152
|
/**
|
|
111
153
|
* Get all descendants of an agent recursively.
|
|
112
154
|
*/
|
|
113
|
-
function getDescendantsRecursive(
|
|
155
|
+
function getDescendantsRecursive(
|
|
156
|
+
agentId: AgentId,
|
|
157
|
+
agentManager: AgentManager,
|
|
158
|
+
): AgentId[] {
|
|
114
159
|
const descendants: AgentId[] = [];
|
|
115
160
|
const children = agentManager.getChildren(agentId);
|
|
116
161
|
for (const child of children) {
|
|
@@ -124,7 +169,9 @@ function getDescendantsRecursive(agentId: AgentId, agentManager: AgentManager):
|
|
|
124
169
|
* Create MAPAdapterServices from CombinedServerServices.
|
|
125
170
|
* Wires the internal services to the MAP adapter interface.
|
|
126
171
|
*/
|
|
127
|
-
function createMAPServices(
|
|
172
|
+
function createMAPServices(
|
|
173
|
+
services: CombinedServerServices,
|
|
174
|
+
): MAPAdapterServices {
|
|
128
175
|
// Create agent source for getAncestors (needs lineage lookup)
|
|
129
176
|
// RelevanceAgentSource expects getAgent to return null (not undefined) when not found
|
|
130
177
|
const agentSource: RelevanceAgentSource = {
|
|
@@ -137,10 +184,12 @@ function createMAPServices(services: CombinedServerServices): MAPAdapterServices
|
|
|
137
184
|
agent
|
|
138
185
|
? {
|
|
139
186
|
id: agent.id,
|
|
187
|
+
name: agent.name,
|
|
140
188
|
role: agent.role,
|
|
141
189
|
state: agent.state,
|
|
142
190
|
parent: agent.parent ?? undefined,
|
|
143
191
|
createdAt: agent.created_at,
|
|
192
|
+
metadata: agent.metadata,
|
|
144
193
|
}
|
|
145
194
|
: undefined;
|
|
146
195
|
|
|
@@ -152,7 +201,7 @@ function createMAPServices(services: CombinedServerServices): MAPAdapterServices
|
|
|
152
201
|
from: AgentId,
|
|
153
202
|
to: Address,
|
|
154
203
|
content: string,
|
|
155
|
-
options?: SendOptions
|
|
204
|
+
options?: SendOptions,
|
|
156
205
|
) => {
|
|
157
206
|
const result = await services.messageRouter.sendToAddress({
|
|
158
207
|
from,
|
|
@@ -178,7 +227,7 @@ function createMAPServices(services: CombinedServerServices): MAPAdapterServices
|
|
|
178
227
|
|
|
179
228
|
export function createCombinedServer(
|
|
180
229
|
services: CombinedServerServices,
|
|
181
|
-
config: CombinedServerConfig = {}
|
|
230
|
+
config: CombinedServerConfig = {},
|
|
182
231
|
): CombinedServer {
|
|
183
232
|
const {
|
|
184
233
|
port = 3001,
|
|
@@ -187,8 +236,15 @@ export function createCombinedServer(
|
|
|
187
236
|
cors = true,
|
|
188
237
|
mapPath = "/map",
|
|
189
238
|
disableMap = false,
|
|
239
|
+
serverToken: configToken,
|
|
240
|
+
noAuth = false,
|
|
190
241
|
} = config;
|
|
191
242
|
|
|
243
|
+
// Resolve server token: disabled > config > env > none (no auth by default)
|
|
244
|
+
const resolvedServerToken = noAuth
|
|
245
|
+
? undefined
|
|
246
|
+
: (configToken ?? process.env.MACRO_SERVER_SECRET ?? undefined);
|
|
247
|
+
|
|
192
248
|
// Set up mail service and conversation map (always created, independent of MAP)
|
|
193
249
|
const mailService = createMailService({ eventStore: services.eventStore });
|
|
194
250
|
const conversationMap = createConversationMap();
|
|
@@ -211,7 +267,7 @@ export function createCombinedServer(
|
|
|
211
267
|
// Create Express app with API routes (include mail services)
|
|
212
268
|
const app = createAPIApp(
|
|
213
269
|
{ ...services, mailService, conversationMap },
|
|
214
|
-
{ cors }
|
|
270
|
+
{ cors, serverToken: resolvedServerToken, defaultCwd },
|
|
215
271
|
);
|
|
216
272
|
|
|
217
273
|
// Create HTTP server with Express
|
|
@@ -239,50 +295,149 @@ export function createCombinedServer(
|
|
|
239
295
|
};
|
|
240
296
|
mapAdapter = createMAPAdapter(
|
|
241
297
|
{ name: "macro-agent", version: "1.0.0" },
|
|
242
|
-
mapServices
|
|
298
|
+
mapServices,
|
|
243
299
|
);
|
|
244
300
|
|
|
245
301
|
// Register workspace file extensions for TUI file attachment.
|
|
246
302
|
// Uses defaultCwd (project root) as the workspace path for all agents,
|
|
247
303
|
// since the head manager doesn't have an isolated worktree.
|
|
248
304
|
registerWorkspaceFileExtensions(mapAdapter, {
|
|
249
|
-
getWorkspace: () => ({ path: defaultCwd } as any
|
|
305
|
+
getWorkspace: () => ({ path: defaultCwd }) as any,
|
|
250
306
|
agentExists: () => true,
|
|
251
307
|
});
|
|
252
308
|
|
|
309
|
+
// Register generic metadata update extension
|
|
310
|
+
registerUpdateMetadataExtension(mapAdapter, {
|
|
311
|
+
getAgent: (id) => services.agentManager.get(id),
|
|
312
|
+
updateAgentMetadata: (id, updates) =>
|
|
313
|
+
services.eventStore.updateAgentMetadata(id, updates),
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
// Register task extensions for direct MAP task management
|
|
317
|
+
if (services.taskBackend) {
|
|
318
|
+
registerTaskExtensions(mapAdapter, {
|
|
319
|
+
taskBackend: services.taskBackend,
|
|
320
|
+
sendMessage: async (from, to, content, options) => {
|
|
321
|
+
const result = await services.messageRouter.sendToAddress({
|
|
322
|
+
from: from as AgentId,
|
|
323
|
+
to,
|
|
324
|
+
content: typeof content === "string" ? content : JSON.stringify(content),
|
|
325
|
+
options: options ? { priority: options.priority as any } : undefined,
|
|
326
|
+
});
|
|
327
|
+
return { delivered: result.delivered };
|
|
328
|
+
},
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
// Register resume extension for restarting stopped agents
|
|
333
|
+
registerResumeExtension(mapAdapter, {
|
|
334
|
+
getAgent: (id) => {
|
|
335
|
+
const agent = services.agentManager.get(id);
|
|
336
|
+
if (!agent) return undefined;
|
|
337
|
+
return { id: agent.id, state: agent.state, session_id: agent.session_id };
|
|
338
|
+
},
|
|
339
|
+
resume: (id) => services.agentManager.resume(id),
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
// Register agent lifecycle extensions (spawn, fork, permission management)
|
|
343
|
+
registerAgentLifecycleExtensions(mapAdapter, {
|
|
344
|
+
getAgent: (id) => services.agentManager.get(id),
|
|
345
|
+
spawn: (opts) => services.agentManager.spawn(opts),
|
|
346
|
+
forkAgent: (id, opts) => services.agentManager.forkAgent(id, opts),
|
|
347
|
+
prompt: (id, msg) => services.agentManager.prompt(id, msg),
|
|
348
|
+
setPermissionMode: (id, mode) =>
|
|
349
|
+
services.agentManager.setPermissionMode(id, mode as any),
|
|
350
|
+
getPermissionMode: (id) => services.agentManager.getPermissionMode(id),
|
|
351
|
+
respondToPermission: (id, reqId, optId) =>
|
|
352
|
+
services.agentManager.respondToPermission(id, reqId, optId),
|
|
353
|
+
onAgentRegistered: (agent) => {
|
|
354
|
+
// Emit agent_registered event to all MAP subscribers
|
|
355
|
+
// mapAdapter is guaranteed non-null here (inside if (!disableMap) block)
|
|
356
|
+
mapAdapter!.emitEvent({
|
|
357
|
+
eventId: `agent-reg-${agent.id}-${Date.now()}`,
|
|
358
|
+
type: "agent_registered" as any,
|
|
359
|
+
timestamp: Date.now(),
|
|
360
|
+
data: agent,
|
|
361
|
+
});
|
|
362
|
+
},
|
|
363
|
+
listHeadManagers: () => services.agentManager.listHeadManagers(),
|
|
364
|
+
defaultCwd,
|
|
365
|
+
});
|
|
366
|
+
|
|
367
|
+
// Register MCP bridge extensions for thin-client MCP subprocesses
|
|
368
|
+
registerMCPBridgeExtensions(mapAdapter, {
|
|
369
|
+
eventStore: services.eventStore,
|
|
370
|
+
agentManager: services.agentManager,
|
|
371
|
+
taskManager: services.taskManager,
|
|
372
|
+
messageRouter: services.messageRouter,
|
|
373
|
+
peerManager: services.peerManager,
|
|
374
|
+
activityWatcher: services.activityWatcher,
|
|
375
|
+
taskBackend: services.taskBackend,
|
|
376
|
+
taskToolProvider: services.taskToolProvider,
|
|
377
|
+
taskToolContext: services.taskToolContext,
|
|
378
|
+
agentTokenManager: services.agentTokenManager,
|
|
379
|
+
});
|
|
380
|
+
|
|
381
|
+
// Register stream/checkpoint/diffStack/mergeQueue extensions
|
|
382
|
+
if (services.streamExtensions) {
|
|
383
|
+
registerStreamExtensions(mapAdapter, services.streamExtensions);
|
|
384
|
+
}
|
|
385
|
+
|
|
253
386
|
mapHandler = createMAPWebSocketHandler(mapAdapter);
|
|
254
387
|
}
|
|
255
388
|
|
|
256
389
|
// Handle upgrade requests - route by path
|
|
257
|
-
httpServer.on(
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
390
|
+
httpServer.on(
|
|
391
|
+
"upgrade",
|
|
392
|
+
(request: IncomingMessage, socket: Duplex, head: Buffer) => {
|
|
393
|
+
const parsedUrl = new URL(
|
|
394
|
+
request.url ?? "/",
|
|
395
|
+
`http://${request.headers.host}`,
|
|
396
|
+
);
|
|
397
|
+
const pathname = parsedUrl.pathname;
|
|
398
|
+
|
|
399
|
+
// Validate server token on WebSocket upgrade (skip when auth disabled)
|
|
400
|
+
if (resolvedServerToken) {
|
|
401
|
+
const urlToken = parsedUrl.searchParams.get("token");
|
|
402
|
+
if (!urlToken || !secureCompare(urlToken, resolvedServerToken)) {
|
|
403
|
+
socket.write("HTTP/1.1 401 Unauthorized\r\n\r\n");
|
|
404
|
+
socket.destroy();
|
|
405
|
+
return;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
if (pathname === "/acp") {
|
|
410
|
+
acpWss.handleUpgrade(request, socket, head, (ws) => {
|
|
411
|
+
acpWss.emit("connection", ws, request);
|
|
412
|
+
});
|
|
413
|
+
} else if (pathname === "/api/ws") {
|
|
414
|
+
apiWss.handleUpgrade(request, socket, head, (ws) => {
|
|
415
|
+
apiWss.emit("connection", ws, request);
|
|
416
|
+
});
|
|
417
|
+
} else if (pathname === mapPath && mapHandler) {
|
|
418
|
+
// MAP protocol connection
|
|
419
|
+
acpWss.handleUpgrade(request, socket, head, (ws) => {
|
|
420
|
+
mapHandler.handleConnection(ws, request);
|
|
421
|
+
});
|
|
422
|
+
} else {
|
|
423
|
+
// Unknown WebSocket path
|
|
424
|
+
socket.write("HTTP/1.1 404 Not Found\r\n\r\n");
|
|
425
|
+
socket.destroy();
|
|
426
|
+
}
|
|
427
|
+
},
|
|
428
|
+
);
|
|
279
429
|
|
|
280
430
|
// Add health endpoint
|
|
281
431
|
app.get("/health", (_req, res) => {
|
|
432
|
+
const connectedProjects = services.getConnectedProjects?.() ?? [];
|
|
282
433
|
res.json({
|
|
283
434
|
status: "ok",
|
|
284
435
|
acp_connections: acpHandler.getConnectionCount(),
|
|
285
436
|
map_connections: mapHandler?.getConnectionCount() ?? 0,
|
|
437
|
+
opentasks: {
|
|
438
|
+
connected_projects: connectedProjects,
|
|
439
|
+
project_count: connectedProjects.length,
|
|
440
|
+
},
|
|
286
441
|
timestamp: Date.now(),
|
|
287
442
|
});
|
|
288
443
|
});
|
|
@@ -301,13 +456,23 @@ export function createCombinedServer(
|
|
|
301
456
|
httpServer.on("error", reject);
|
|
302
457
|
httpServer.listen(port, host, () => {
|
|
303
458
|
httpServer.removeListener("error", reject);
|
|
459
|
+
const tokenParam = resolvedServerToken ? `?token=${resolvedServerToken}` : "";
|
|
304
460
|
console.error(`[combined] Server listening on http://${host}:${port}`);
|
|
305
|
-
console.error(`[combined] ACP WebSocket: ws://${host}:${port}/acp`);
|
|
461
|
+
console.error(`[combined] ACP WebSocket: ws://${host}:${port}/acp${tokenParam}`);
|
|
306
462
|
if (mapHandler) {
|
|
307
|
-
console.error(
|
|
463
|
+
console.error(
|
|
464
|
+
`[combined] MAP WebSocket: ws://${host}:${port}${mapPath}${tokenParam}`,
|
|
465
|
+
);
|
|
308
466
|
}
|
|
309
|
-
console.error(
|
|
467
|
+
console.error(
|
|
468
|
+
`[combined] API WebSocket: ws://${host}:${port}/api/ws${tokenParam}`,
|
|
469
|
+
);
|
|
310
470
|
console.error(`[combined] REST API: http://${host}:${port}/api/*`);
|
|
471
|
+
if (resolvedServerToken) {
|
|
472
|
+
console.error(`[combined] Server token: ${resolvedServerToken.substring(0, 8)}...`);
|
|
473
|
+
} else {
|
|
474
|
+
console.error(`[combined] Auth: disabled`);
|
|
475
|
+
}
|
|
311
476
|
resolve();
|
|
312
477
|
});
|
|
313
478
|
});
|
|
@@ -348,6 +513,10 @@ export function createCombinedServer(
|
|
|
348
513
|
}
|
|
349
514
|
|
|
350
515
|
function getUrl(): string {
|
|
516
|
+
const addr = httpServer.address();
|
|
517
|
+
if (addr && typeof addr === "object") {
|
|
518
|
+
return `http://${host}:${addr.port}`;
|
|
519
|
+
}
|
|
351
520
|
return `http://${host}:${port}`;
|
|
352
521
|
}
|
|
353
522
|
|
|
@@ -370,5 +539,6 @@ export function createCombinedServer(
|
|
|
370
539
|
mapAdapter,
|
|
371
540
|
mailService,
|
|
372
541
|
conversationMap,
|
|
542
|
+
serverToken: resolvedServerToken,
|
|
373
543
|
};
|
|
374
544
|
}
|
|
@@ -671,7 +671,7 @@ describe("Steering Integration", () => {
|
|
|
671
671
|
payload: { status_type: "started" },
|
|
672
672
|
});
|
|
673
673
|
eventStore.emit({
|
|
674
|
-
type: "
|
|
674
|
+
type: "stop",
|
|
675
675
|
source: { agent_id: "stopped-agent" },
|
|
676
676
|
payload: { agent_id: "stopped-agent", reason: "completed" },
|
|
677
677
|
});
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EventStore Out-of-Band Field Preservation Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests that fields written via updateAgentMetadata() (out-of-band,
|
|
5
|
+
* not through events) survive the rebuildViews() cycle that occurs
|
|
6
|
+
* on every auto-load (every 1 second) and on reload().
|
|
7
|
+
*
|
|
8
|
+
* The preservation relies on OUT_OF_BAND_FIELDS in rebuildViews()
|
|
9
|
+
* which saves these values before clearing views, replays all events,
|
|
10
|
+
* then restores the saved values.
|
|
11
|
+
*
|
|
12
|
+
* @module store/__tests__/event-store-oob
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
16
|
+
import { createEventStore, type EventStore } from "../event-store.js";
|
|
17
|
+
import type { AgentId } from "../types/index.js";
|
|
18
|
+
|
|
19
|
+
describe("EventStore — Out-of-Band Field Preservation", () => {
|
|
20
|
+
let eventStore: EventStore;
|
|
21
|
+
|
|
22
|
+
const AGENT_ID = "oob-test-001" as AgentId;
|
|
23
|
+
|
|
24
|
+
beforeEach(async () => {
|
|
25
|
+
eventStore = await createEventStore({ instanceId: `oob-test-${Date.now()}` });
|
|
26
|
+
|
|
27
|
+
// Create an agent via spawn event
|
|
28
|
+
eventStore.emit({
|
|
29
|
+
type: "spawn",
|
|
30
|
+
source: { agent_id: AGENT_ID },
|
|
31
|
+
payload: {
|
|
32
|
+
agent_id: AGENT_ID,
|
|
33
|
+
task: "Test task",
|
|
34
|
+
role: "worker",
|
|
35
|
+
cwd: "/original/path",
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
await eventStore.persist();
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
afterEach(async () => {
|
|
42
|
+
try { await eventStore.close(); } catch { /* ignore */ }
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it("cwd survives rebuildViews after updateAgentMetadata", async () => {
|
|
46
|
+
// Verify initial cwd from spawn event
|
|
47
|
+
expect(eventStore.getAgent(AGENT_ID)?.cwd).toBe("/original/path");
|
|
48
|
+
|
|
49
|
+
// Update cwd out-of-band
|
|
50
|
+
eventStore.updateAgentMetadata(AGENT_ID, { cwd: "/workspace/worktree-001" });
|
|
51
|
+
expect(eventStore.getAgent(AGENT_ID)?.cwd).toBe("/workspace/worktree-001");
|
|
52
|
+
|
|
53
|
+
// Persist and reload (triggers rebuildViews)
|
|
54
|
+
await eventStore.persist();
|
|
55
|
+
await eventStore.reload();
|
|
56
|
+
|
|
57
|
+
// cwd should survive the rebuild
|
|
58
|
+
const agent = eventStore.getAgent(AGENT_ID);
|
|
59
|
+
expect(agent).not.toBeNull();
|
|
60
|
+
expect(agent!.cwd).toBe("/workspace/worktree-001");
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it("team_instance survives rebuildViews", async () => {
|
|
64
|
+
// Set team_instance out-of-band
|
|
65
|
+
eventStore.updateAgentMetadata(AGENT_ID, { team_instance: "team-alpha-001" });
|
|
66
|
+
expect(eventStore.getAgent(AGENT_ID)?.team_instance).toBe("team-alpha-001");
|
|
67
|
+
|
|
68
|
+
// Persist and reload
|
|
69
|
+
await eventStore.persist();
|
|
70
|
+
await eventStore.reload();
|
|
71
|
+
|
|
72
|
+
// team_instance should survive
|
|
73
|
+
expect(eventStore.getAgent(AGENT_ID)?.team_instance).toBe("team-alpha-001");
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it("all OUT_OF_BAND_FIELDS preserved together", async () => {
|
|
77
|
+
// Set all out-of-band fields simultaneously
|
|
78
|
+
eventStore.updateAgentMetadata(AGENT_ID, {
|
|
79
|
+
name: "Developer Alpha",
|
|
80
|
+
plan: [{ content: "Step 1: do the thing", priority: "high", status: "pending" }],
|
|
81
|
+
metadata: { custom_key: "custom_value" },
|
|
82
|
+
cwd: "/workspace/worktree-002",
|
|
83
|
+
team_instance: "team-beta-002",
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
// Verify all set correctly
|
|
87
|
+
const before = eventStore.getAgent(AGENT_ID)!;
|
|
88
|
+
expect(before.name).toBe("Developer Alpha");
|
|
89
|
+
expect(before.cwd).toBe("/workspace/worktree-002");
|
|
90
|
+
expect(before.team_instance).toBe("team-beta-002");
|
|
91
|
+
|
|
92
|
+
// Persist and reload (triggers rebuildViews)
|
|
93
|
+
await eventStore.persist();
|
|
94
|
+
await eventStore.reload();
|
|
95
|
+
|
|
96
|
+
// All fields should survive
|
|
97
|
+
const after = eventStore.getAgent(AGENT_ID)!;
|
|
98
|
+
expect(after.name).toBe("Developer Alpha");
|
|
99
|
+
expect(after.cwd).toBe("/workspace/worktree-002");
|
|
100
|
+
expect(after.team_instance).toBe("team-beta-002");
|
|
101
|
+
|
|
102
|
+
// plan and metadata may be stored as JSON strings or objects depending on TinyBase internals
|
|
103
|
+
const plan = typeof after.plan === "string" ? JSON.parse(after.plan) : after.plan;
|
|
104
|
+
expect(plan).toEqual([{ content: "Step 1: do the thing", priority: "high", status: "pending" }]);
|
|
105
|
+
|
|
106
|
+
const metadata = typeof after.metadata === "string" ? JSON.parse(after.metadata) : after.metadata;
|
|
107
|
+
expect(metadata).toEqual({ custom_key: "custom_value" });
|
|
108
|
+
});
|
|
109
|
+
});
|