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
|
@@ -16,10 +16,10 @@ function extractToolOutput(rawOutput) {
|
|
|
16
16
|
if (typeof rawOutput === "string")
|
|
17
17
|
return rawOutput;
|
|
18
18
|
if (Array.isArray(rawOutput)) {
|
|
19
|
-
return rawOutput
|
|
19
|
+
return (rawOutput
|
|
20
20
|
.filter((item) => item.type === "text" && typeof item.text === "string")
|
|
21
21
|
.map((item) => item.text)
|
|
22
|
-
.join("\n") || undefined;
|
|
22
|
+
.join("\n") || undefined);
|
|
23
23
|
}
|
|
24
24
|
return undefined;
|
|
25
25
|
}
|
|
@@ -31,15 +31,39 @@ export class ACPOverMAPHandler {
|
|
|
31
31
|
eventStore;
|
|
32
32
|
taskManager;
|
|
33
33
|
defaultCwd;
|
|
34
|
+
onAgentRegistered;
|
|
34
35
|
/** Stream states by streamId */
|
|
35
36
|
streams = new Map();
|
|
36
37
|
/** Session mapper for ACP session -> Agent mapping */
|
|
37
|
-
sessionMapper
|
|
38
|
+
sessionMapper;
|
|
38
39
|
constructor(config) {
|
|
39
40
|
this.agentManager = config.agentManager;
|
|
40
41
|
this.eventStore = config.eventStore;
|
|
41
42
|
this.taskManager = config.taskManager;
|
|
42
43
|
this.defaultCwd = config.defaultCwd ?? process.cwd();
|
|
44
|
+
this.onAgentRegistered = config.onAgentRegistered;
|
|
45
|
+
// Initialize session mapper with EventStore for persistence and recovery
|
|
46
|
+
this.sessionMapper = new SessionMapper(this.eventStore);
|
|
47
|
+
const recovered = this.sessionMapper.recoverFromStore();
|
|
48
|
+
if (recovered > 0) {
|
|
49
|
+
console.error(`[ACP-over-MAP] Recovered ${recovered} session(s) from store`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Notify subscribers that a new agent was registered.
|
|
54
|
+
* Looks up agent details from EventStore and calls the onAgentRegistered callback.
|
|
55
|
+
*/
|
|
56
|
+
notifyAgentRegistered(agentId) {
|
|
57
|
+
if (!this.onAgentRegistered)
|
|
58
|
+
return;
|
|
59
|
+
const agent = this.eventStore.getAgent(agentId);
|
|
60
|
+
this.onAgentRegistered({
|
|
61
|
+
id: agentId,
|
|
62
|
+
name: agent?.name,
|
|
63
|
+
role: agent?.role,
|
|
64
|
+
parent: agent?.parent ?? undefined,
|
|
65
|
+
metadata: agent?.metadata,
|
|
66
|
+
});
|
|
43
67
|
}
|
|
44
68
|
/**
|
|
45
69
|
* Abort all active streams targeting a specific agent.
|
|
@@ -136,6 +160,14 @@ export class ACPOverMAPHandler {
|
|
|
136
160
|
throw new Error("Stream already initialized");
|
|
137
161
|
}
|
|
138
162
|
streamState.initialized = true;
|
|
163
|
+
// Extract permission mode from _meta.macroConfig if provided
|
|
164
|
+
const meta = params?._meta;
|
|
165
|
+
const macroConfig = meta?.macroConfig;
|
|
166
|
+
const defaultSubAgentConfig = macroConfig?.defaultSubAgentConfig;
|
|
167
|
+
if (defaultSubAgentConfig?.permissionMode) {
|
|
168
|
+
streamState.permissionMode =
|
|
169
|
+
defaultSubAgentConfig.permissionMode;
|
|
170
|
+
}
|
|
139
171
|
return {
|
|
140
172
|
protocolVersion: 1,
|
|
141
173
|
agentCapabilities: {
|
|
@@ -162,6 +194,7 @@ export class ACPOverMAPHandler {
|
|
|
162
194
|
const spawned = await this.agentManager.getOrCreateHeadManager({
|
|
163
195
|
cwd: workingDir,
|
|
164
196
|
forceNew: true,
|
|
197
|
+
permissionMode: streamState.permissionMode,
|
|
165
198
|
});
|
|
166
199
|
const sessionId = spawned.session_id;
|
|
167
200
|
streamState.sessionId = sessionId;
|
|
@@ -169,6 +202,8 @@ export class ACPOverMAPHandler {
|
|
|
169
202
|
// Create session mapping
|
|
170
203
|
this.sessionMapper.createMapping(sessionId, spawned.id);
|
|
171
204
|
console.error(`[ACP-over-MAP] Created session ${sessionId} -> agent ${spawned.id}`);
|
|
205
|
+
// Notify subscribers that a new agent was registered
|
|
206
|
+
this.notifyAgentRegistered(spawned.id);
|
|
172
207
|
// Emit session_info_update so client has title/timestamps
|
|
173
208
|
this.emitSessionInfo(streamState, sessionId, emitNotification);
|
|
174
209
|
return { sessionId };
|
|
@@ -177,7 +212,7 @@ export class ACPOverMAPHandler {
|
|
|
177
212
|
if (!streamState.initialized) {
|
|
178
213
|
throw new Error("Must call initialize before loadSession");
|
|
179
214
|
}
|
|
180
|
-
const { sessionId: rawSessionId, cwd, _meta } = params ?? {};
|
|
215
|
+
const { sessionId: rawSessionId, cwd, _meta, } = params ?? {};
|
|
181
216
|
if (!rawSessionId) {
|
|
182
217
|
throw new Error("sessionId required");
|
|
183
218
|
}
|
|
@@ -191,6 +226,32 @@ export class ACPOverMAPHandler {
|
|
|
191
226
|
}
|
|
192
227
|
sessionId = agent.session_id;
|
|
193
228
|
console.error(`[ACP-over-MAP] loadSession: Resolved agentId ${metaAgentId} to session ${sessionId}`);
|
|
229
|
+
// Handle the agent directly — works for both head managers and sub-agents.
|
|
230
|
+
// The previous code only searched listHeadManagers(), so sub-agents
|
|
231
|
+
// were never found and a new head manager was created instead.
|
|
232
|
+
if (this.agentManager.hasActiveSession(metaAgentId)) {
|
|
233
|
+
console.error(`[ACP-over-MAP] loadSession: Reusing active session for agent ${metaAgentId}`);
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
// Agent exists but no active session — resume it
|
|
237
|
+
console.error(`[ACP-over-MAP] loadSession: Resuming agent ${metaAgentId}`);
|
|
238
|
+
try {
|
|
239
|
+
await this.agentManager.resume(metaAgentId, streamState.permissionMode);
|
|
240
|
+
}
|
|
241
|
+
catch (resumeErr) {
|
|
242
|
+
// ALREADY_RUNNING can happen in a race — safe to ignore
|
|
243
|
+
const code = resumeErr.code;
|
|
244
|
+
if (code !== "ALREADY_RUNNING") {
|
|
245
|
+
throw resumeErr;
|
|
246
|
+
}
|
|
247
|
+
console.error(`[ACP-over-MAP] loadSession: Agent ${metaAgentId} already running (race), continuing`);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
streamState.sessionId = sessionId;
|
|
251
|
+
streamState.agentId = metaAgentId;
|
|
252
|
+
this.sessionMapper.createMapping(sessionId, metaAgentId);
|
|
253
|
+
this.emitSessionInfo(streamState, sessionId, emitNotification);
|
|
254
|
+
return { sessionId };
|
|
194
255
|
}
|
|
195
256
|
const workingDir = cwd ?? this.defaultCwd;
|
|
196
257
|
// Try to find an existing head manager with this session ID
|
|
@@ -208,7 +269,7 @@ export class ACPOverMAPHandler {
|
|
|
208
269
|
}
|
|
209
270
|
// Agent exists but no active session - resume it
|
|
210
271
|
console.error(`[ACP-over-MAP] loadSession: Resuming stopped agent ${existing.id}`);
|
|
211
|
-
const spawned = await this.agentManager.resume(existing.id);
|
|
272
|
+
const spawned = await this.agentManager.resume(existing.id, streamState.permissionMode);
|
|
212
273
|
streamState.sessionId = sessionId;
|
|
213
274
|
streamState.agentId = spawned.id;
|
|
214
275
|
this.sessionMapper.createMapping(sessionId, spawned.id);
|
|
@@ -220,10 +281,13 @@ export class ACPOverMAPHandler {
|
|
|
220
281
|
const spawned = await this.agentManager.getOrCreateHeadManager({
|
|
221
282
|
cwd: workingDir,
|
|
222
283
|
sessionId,
|
|
284
|
+
permissionMode: streamState.permissionMode,
|
|
223
285
|
});
|
|
224
286
|
streamState.sessionId = sessionId;
|
|
225
287
|
streamState.agentId = spawned.id;
|
|
226
288
|
this.sessionMapper.createMapping(sessionId, spawned.id);
|
|
289
|
+
// Notify subscribers that a new agent was registered
|
|
290
|
+
this.notifyAgentRegistered(spawned.id);
|
|
227
291
|
this.emitSessionInfo(streamState, sessionId, emitNotification);
|
|
228
292
|
return { sessionId };
|
|
229
293
|
}
|
|
@@ -310,6 +374,10 @@ export class ACPOverMAPHandler {
|
|
|
310
374
|
// Accumulate content for history persistence (preserving text/tool interleaving order)
|
|
311
375
|
const u = update;
|
|
312
376
|
const updateType = u.sessionUpdate ?? u.type;
|
|
377
|
+
// Annotate permission_request updates with agentId so clients can respond
|
|
378
|
+
if (updateType === "permission_request") {
|
|
379
|
+
u._agentId = agentId;
|
|
380
|
+
}
|
|
313
381
|
if (updateType === "agent_message_chunk") {
|
|
314
382
|
const content = u.content;
|
|
315
383
|
if (content?.text) {
|
|
@@ -328,7 +396,8 @@ export class ACPOverMAPHandler {
|
|
|
328
396
|
latestPlan = entries;
|
|
329
397
|
}
|
|
330
398
|
}
|
|
331
|
-
else if (updateType === "tool_call" ||
|
|
399
|
+
else if (updateType === "tool_call" ||
|
|
400
|
+
updateType === "tool_call_update") {
|
|
332
401
|
const toolCallId = u.toolCallId;
|
|
333
402
|
const status = u.status;
|
|
334
403
|
const meta = u._meta;
|
|
@@ -342,7 +411,9 @@ export class ACPOverMAPHandler {
|
|
|
342
411
|
}
|
|
343
412
|
if (status === "completed" || status === "failed") {
|
|
344
413
|
// Merge cached info for tool_call_update events that lack title/input
|
|
345
|
-
const cached = toolCallId
|
|
414
|
+
const cached = toolCallId
|
|
415
|
+
? toolInfoCache.get(toolCallId)
|
|
416
|
+
: undefined;
|
|
346
417
|
buffer.parts.push({
|
|
347
418
|
type: "tool",
|
|
348
419
|
toolCallId,
|
|
@@ -373,10 +444,30 @@ export class ACPOverMAPHandler {
|
|
|
373
444
|
return { stopReason };
|
|
374
445
|
}
|
|
375
446
|
catch (error) {
|
|
376
|
-
|
|
447
|
+
// Extract a meaningful error message — errors from the ACP SDK may be
|
|
448
|
+
// plain objects ({code, message}) rather than Error instances.
|
|
449
|
+
let errorMessage;
|
|
450
|
+
if (error instanceof Error) {
|
|
451
|
+
errorMessage = error.message;
|
|
452
|
+
}
|
|
453
|
+
else if (typeof error === "object" &&
|
|
454
|
+
error !== null &&
|
|
455
|
+
"message" in error &&
|
|
456
|
+
typeof error.message === "string") {
|
|
457
|
+
errorMessage = error.message;
|
|
458
|
+
}
|
|
459
|
+
else {
|
|
460
|
+
try {
|
|
461
|
+
errorMessage = JSON.stringify(error);
|
|
462
|
+
}
|
|
463
|
+
catch {
|
|
464
|
+
errorMessage = String(error);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
console.error(`[ACP-over-MAP] Prompt error for agent ${agentId}:`, errorMessage);
|
|
377
468
|
return {
|
|
378
469
|
stopReason: "end_turn",
|
|
379
|
-
error:
|
|
470
|
+
error: errorMessage,
|
|
380
471
|
};
|
|
381
472
|
}
|
|
382
473
|
finally {
|
|
@@ -438,7 +529,11 @@ export class ACPOverMAPHandler {
|
|
|
438
529
|
task,
|
|
439
530
|
cwd: cwd ?? this.defaultCwd,
|
|
440
531
|
role: "worker",
|
|
532
|
+
topics,
|
|
533
|
+
config,
|
|
441
534
|
});
|
|
535
|
+
// Notify subscribers that a new agent was registered
|
|
536
|
+
this.notifyAgentRegistered(spawned.id);
|
|
442
537
|
return {
|
|
443
538
|
agentId: spawned.id,
|
|
444
539
|
sessionId: spawned.session_id,
|
|
@@ -470,8 +565,17 @@ export class ACPOverMAPHandler {
|
|
|
470
565
|
if (!agent) {
|
|
471
566
|
throw new Error(`Agent not found: ${agentId}`);
|
|
472
567
|
}
|
|
568
|
+
// If the agent is already running, return its current state
|
|
569
|
+
// instead of throwing. The caller likely just wants to ensure
|
|
570
|
+
// the agent is active, which it already is.
|
|
473
571
|
if (agent.state !== "stopped" && agent.state !== "failed") {
|
|
474
|
-
|
|
572
|
+
console.error(`[ACP-over-MAP] _macro/resume: Agent ${agentId} is already ${agent.state}, returning current state`);
|
|
573
|
+
return {
|
|
574
|
+
success: true,
|
|
575
|
+
agentId: agent.id,
|
|
576
|
+
sessionId: agent.session_id,
|
|
577
|
+
alreadyRunning: true,
|
|
578
|
+
};
|
|
475
579
|
}
|
|
476
580
|
const spawned = await this.agentManager.resume(agentId);
|
|
477
581
|
return {
|
|
@@ -481,18 +585,18 @@ export class ACPOverMAPHandler {
|
|
|
481
585
|
};
|
|
482
586
|
}
|
|
483
587
|
case "_macro/getHistory": {
|
|
484
|
-
const { sessionId, agentId: historyAgentId, limit } = methodParams;
|
|
588
|
+
const { sessionId, agentId: historyAgentId, limit, } = methodParams;
|
|
485
589
|
// Resolve conversationId: prefer agentId lookup (resolves to the
|
|
486
590
|
// original session_id where turns were recorded), fall back to
|
|
487
591
|
// explicit sessionId. This allows history to survive across server
|
|
488
592
|
// restarts even when the ACP session ID changes (e.g., resume()
|
|
489
593
|
// fails → TUI creates new session with different ID).
|
|
594
|
+
const agent = historyAgentId
|
|
595
|
+
? this.eventStore.getAgent(historyAgentId)
|
|
596
|
+
: undefined;
|
|
490
597
|
let conversationId;
|
|
491
|
-
if (
|
|
492
|
-
|
|
493
|
-
if (agent) {
|
|
494
|
-
conversationId = agent.session_id;
|
|
495
|
-
}
|
|
598
|
+
if (agent) {
|
|
599
|
+
conversationId = agent.session_id;
|
|
496
600
|
}
|
|
497
601
|
if (!conversationId) {
|
|
498
602
|
conversationId = sessionId;
|
|
@@ -500,13 +604,39 @@ export class ACPOverMAPHandler {
|
|
|
500
604
|
if (!conversationId) {
|
|
501
605
|
return { turns: [] };
|
|
502
606
|
}
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
607
|
+
// For forked agents, include the source agent's conversation history
|
|
608
|
+
// (pre-fork turns) followed by this agent's own turns.
|
|
609
|
+
// Only include source turns from before the fork to avoid leaking
|
|
610
|
+
// turns that the source recorded after the fork point.
|
|
611
|
+
const sourceAgentId = agent?.metadata?.fork_of;
|
|
612
|
+
let turns;
|
|
613
|
+
if (sourceAgentId) {
|
|
614
|
+
const sourceAgent = this.eventStore.getAgent(sourceAgentId);
|
|
615
|
+
const sourceConversationId = sourceAgent?.session_id;
|
|
616
|
+
const forkTimestamp = agent.created_at;
|
|
617
|
+
const sourceTurns = sourceConversationId
|
|
618
|
+
? this.eventStore
|
|
619
|
+
.listTurns({
|
|
620
|
+
conversationId: sourceConversationId,
|
|
621
|
+
order: "asc",
|
|
622
|
+
limit: limit ?? 200,
|
|
623
|
+
})
|
|
624
|
+
.filter((t) => t.timestamp <= forkTimestamp)
|
|
625
|
+
: [];
|
|
626
|
+
const ownTurns = this.eventStore.listTurns({
|
|
627
|
+
conversationId,
|
|
628
|
+
order: "asc",
|
|
629
|
+
limit: limit ?? 200,
|
|
630
|
+
});
|
|
631
|
+
turns = [...sourceTurns, ...ownTurns];
|
|
632
|
+
}
|
|
633
|
+
else {
|
|
634
|
+
turns = this.eventStore.listTurns({
|
|
635
|
+
conversationId,
|
|
636
|
+
order: "asc",
|
|
637
|
+
limit: limit ?? 200,
|
|
638
|
+
});
|
|
639
|
+
}
|
|
510
640
|
const plan = agent?.plan ?? [];
|
|
511
641
|
return {
|
|
512
642
|
turns: turns.map((turn) => ({
|
|
@@ -520,6 +650,237 @@ export class ACPOverMAPHandler {
|
|
|
520
650
|
cwd: agent?.cwd ?? null,
|
|
521
651
|
};
|
|
522
652
|
}
|
|
653
|
+
case "_macro/respondToPermission": {
|
|
654
|
+
const { agentId: targetAgentId, requestId, optionId, } = methodParams;
|
|
655
|
+
if (!targetAgentId || !requestId || !optionId) {
|
|
656
|
+
throw new Error("agentId, requestId, and optionId are required");
|
|
657
|
+
}
|
|
658
|
+
const success = this.agentManager.respondToPermission(targetAgentId, requestId, optionId);
|
|
659
|
+
return { success };
|
|
660
|
+
}
|
|
661
|
+
case "_macro/cancelPermission": {
|
|
662
|
+
const { agentId: targetAgentId, requestId } = methodParams;
|
|
663
|
+
if (!targetAgentId || !requestId) {
|
|
664
|
+
throw new Error("agentId and requestId are required");
|
|
665
|
+
}
|
|
666
|
+
const success = this.agentManager.cancelPermission(targetAgentId, requestId);
|
|
667
|
+
return { success };
|
|
668
|
+
}
|
|
669
|
+
case "_macro/setPermissionMode": {
|
|
670
|
+
const { agentId: targetAgentId, permissionMode } = methodParams;
|
|
671
|
+
if (!targetAgentId || !permissionMode) {
|
|
672
|
+
throw new Error("agentId and permissionMode are required");
|
|
673
|
+
}
|
|
674
|
+
const previousMode = this.agentManager.getPermissionMode(targetAgentId);
|
|
675
|
+
const success = this.agentManager.setPermissionMode(targetAgentId, permissionMode);
|
|
676
|
+
if (success) {
|
|
677
|
+
return { success: true, previousMode: previousMode ?? undefined };
|
|
678
|
+
}
|
|
679
|
+
return {
|
|
680
|
+
success: false,
|
|
681
|
+
error: `No active session found for agent ${targetAgentId}`,
|
|
682
|
+
};
|
|
683
|
+
}
|
|
684
|
+
case "_macro/forkAgent": {
|
|
685
|
+
const { agentId, name, prompt, cwd } = methodParams;
|
|
686
|
+
if (!agentId) {
|
|
687
|
+
throw new Error("agentId is required");
|
|
688
|
+
}
|
|
689
|
+
const sourceAgent = this.eventStore.getAgent(agentId);
|
|
690
|
+
if (!sourceAgent) {
|
|
691
|
+
throw new Error(`Agent not found: ${agentId}`);
|
|
692
|
+
}
|
|
693
|
+
const forked = await this.agentManager.forkAgent(agentId, {
|
|
694
|
+
name,
|
|
695
|
+
prompt,
|
|
696
|
+
cwd: cwd ?? sourceAgent.cwd ?? this.defaultCwd,
|
|
697
|
+
});
|
|
698
|
+
// Fire-and-forget initial prompt if provided
|
|
699
|
+
if (prompt) {
|
|
700
|
+
(async () => {
|
|
701
|
+
try {
|
|
702
|
+
for await (const _update of this.agentManager.prompt(forked.id, prompt)) {
|
|
703
|
+
// drain iterator
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
catch {
|
|
707
|
+
// best-effort
|
|
708
|
+
}
|
|
709
|
+
})();
|
|
710
|
+
}
|
|
711
|
+
return {
|
|
712
|
+
newAgentId: forked.id,
|
|
713
|
+
newSessionId: forked.session_id,
|
|
714
|
+
originalAgentId: agentId,
|
|
715
|
+
providerSessionId: forked.session?.id,
|
|
716
|
+
};
|
|
717
|
+
}
|
|
718
|
+
case "_macro/agents/update": {
|
|
719
|
+
const { agentId, name, plan, metadata } = methodParams;
|
|
720
|
+
if (!agentId) {
|
|
721
|
+
throw new Error("agentId is required");
|
|
722
|
+
}
|
|
723
|
+
if (name === undefined &&
|
|
724
|
+
plan === undefined &&
|
|
725
|
+
metadata === undefined) {
|
|
726
|
+
throw new Error("At least one field to update is required (name, plan, or metadata)");
|
|
727
|
+
}
|
|
728
|
+
if (name !== undefined && !name.trim()) {
|
|
729
|
+
throw new Error("name must not be empty");
|
|
730
|
+
}
|
|
731
|
+
const agent = this.eventStore.getAgent(agentId);
|
|
732
|
+
if (!agent) {
|
|
733
|
+
throw new Error(`Agent not found: ${agentId}`);
|
|
734
|
+
}
|
|
735
|
+
const updates = {};
|
|
736
|
+
const updatedFields = [];
|
|
737
|
+
if (name !== undefined) {
|
|
738
|
+
updates.name = name.trim();
|
|
739
|
+
updatedFields.push("name");
|
|
740
|
+
}
|
|
741
|
+
if (plan !== undefined) {
|
|
742
|
+
updates.plan = plan;
|
|
743
|
+
updatedFields.push("plan");
|
|
744
|
+
}
|
|
745
|
+
if (metadata !== undefined) {
|
|
746
|
+
updates.metadata = metadata;
|
|
747
|
+
updatedFields.push("metadata");
|
|
748
|
+
}
|
|
749
|
+
this.eventStore.updateAgentMetadata(agentId, updates);
|
|
750
|
+
return {
|
|
751
|
+
success: true,
|
|
752
|
+
agentId,
|
|
753
|
+
updated: updatedFields,
|
|
754
|
+
};
|
|
755
|
+
}
|
|
756
|
+
case "_macro/getModels": {
|
|
757
|
+
const { sessionId } = methodParams;
|
|
758
|
+
const agentId = this.sessionMapper.getAgentId(sessionId);
|
|
759
|
+
if (!agentId) {
|
|
760
|
+
return { currentModelId: null, availableModels: [] };
|
|
761
|
+
}
|
|
762
|
+
const session = this.agentManager.getSession(agentId);
|
|
763
|
+
if (!session) {
|
|
764
|
+
return { currentModelId: null, availableModels: [] };
|
|
765
|
+
}
|
|
766
|
+
// Try clientHandler's model info store first (from _model_state_update notification)
|
|
767
|
+
const clientHandler = session.clientHandler;
|
|
768
|
+
const modelInfo = clientHandler?.getSessionModelInfo?.(session.id);
|
|
769
|
+
if (modelInfo && modelInfo.availableModels.length > 0) {
|
|
770
|
+
return modelInfo;
|
|
771
|
+
}
|
|
772
|
+
// Fall back to Session.models (from initial session response — just IDs)
|
|
773
|
+
if (session.models && session.models.length > 0) {
|
|
774
|
+
return {
|
|
775
|
+
currentModelId: session.models[0],
|
|
776
|
+
availableModels: session.models.map((id) => ({
|
|
777
|
+
modelId: id,
|
|
778
|
+
name: id,
|
|
779
|
+
})),
|
|
780
|
+
};
|
|
781
|
+
}
|
|
782
|
+
return { currentModelId: null, availableModels: [] };
|
|
783
|
+
}
|
|
784
|
+
case "_session/setCompaction": {
|
|
785
|
+
// Compaction is handled internally by the agent process.
|
|
786
|
+
// Accept the request as a no-op so the client doesn't get an error.
|
|
787
|
+
// TODO: Make sure this overrides if needed.
|
|
788
|
+
return { success: true };
|
|
789
|
+
}
|
|
790
|
+
// ── Task Management Extensions ────────────────────────────────
|
|
791
|
+
// These mirror the registered adapter extensions (_macro/task/*)
|
|
792
|
+
// so they're accessible via ACP-over-MAP streams.
|
|
793
|
+
case "_macro/task/list": {
|
|
794
|
+
const { filter } = (methodParams ?? {});
|
|
795
|
+
const taskFilter = filter
|
|
796
|
+
? {
|
|
797
|
+
status: filter.status,
|
|
798
|
+
assigned_agent: filter.assignedAgent,
|
|
799
|
+
parent_task: filter.parentTask,
|
|
800
|
+
created_by: filter.createdBy,
|
|
801
|
+
rootTasksOnly: filter.rootTasksOnly,
|
|
802
|
+
}
|
|
803
|
+
: undefined;
|
|
804
|
+
const tasks = this.taskManager.list(taskFilter);
|
|
805
|
+
return {
|
|
806
|
+
tasks: tasks.map((t) => ({
|
|
807
|
+
id: t.id,
|
|
808
|
+
description: t.description,
|
|
809
|
+
status: t.status,
|
|
810
|
+
assignedAgent: t.assigned_agent,
|
|
811
|
+
createdBy: t.created_by,
|
|
812
|
+
createdAt: t.created_at,
|
|
813
|
+
parentTask: t.parent_task,
|
|
814
|
+
isBlocked: t.isBlocked,
|
|
815
|
+
externalId: t.external_id,
|
|
816
|
+
})),
|
|
817
|
+
};
|
|
818
|
+
}
|
|
819
|
+
case "_macro/task/get": {
|
|
820
|
+
const { taskId } = methodParams;
|
|
821
|
+
if (!taskId)
|
|
822
|
+
throw new Error("taskId is required");
|
|
823
|
+
const task = this.taskManager.get(taskId);
|
|
824
|
+
if (!task)
|
|
825
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
826
|
+
return {
|
|
827
|
+
task: {
|
|
828
|
+
id: task.id,
|
|
829
|
+
description: task.description,
|
|
830
|
+
status: task.status,
|
|
831
|
+
assignedAgent: task.assigned_agent,
|
|
832
|
+
createdBy: task.created_by,
|
|
833
|
+
createdAt: task.created_at,
|
|
834
|
+
parentTask: task.parent_task,
|
|
835
|
+
isBlocked: task.isBlocked,
|
|
836
|
+
externalId: task.external_id,
|
|
837
|
+
},
|
|
838
|
+
};
|
|
839
|
+
}
|
|
840
|
+
case "_macro/task/create": {
|
|
841
|
+
const { description, parentTask, externalId } = methodParams;
|
|
842
|
+
if (!description)
|
|
843
|
+
throw new Error("description is required");
|
|
844
|
+
// Determine who is creating the task — use the stream's agent or a default
|
|
845
|
+
const createdBy = (streamState.agentId ?? "tui");
|
|
846
|
+
const task = this.taskManager.create({
|
|
847
|
+
description,
|
|
848
|
+
created_by: createdBy,
|
|
849
|
+
parent_task: parentTask,
|
|
850
|
+
});
|
|
851
|
+
return {
|
|
852
|
+
task: {
|
|
853
|
+
id: task.id,
|
|
854
|
+
description: task.description,
|
|
855
|
+
status: task.status,
|
|
856
|
+
assignedAgent: task.assigned_agent,
|
|
857
|
+
createdBy: task.created_by,
|
|
858
|
+
createdAt: task.created_at,
|
|
859
|
+
parentTask: task.parent_task,
|
|
860
|
+
},
|
|
861
|
+
};
|
|
862
|
+
}
|
|
863
|
+
case "_macro/task/assign": {
|
|
864
|
+
const { taskId, agentId, role } = methodParams;
|
|
865
|
+
if (!taskId)
|
|
866
|
+
throw new Error("taskId is required");
|
|
867
|
+
if (!agentId)
|
|
868
|
+
throw new Error("agentId is required");
|
|
869
|
+
this.taskManager.assign(taskId, agentId, role);
|
|
870
|
+
return { success: true };
|
|
871
|
+
}
|
|
872
|
+
case "_macro/task/complete": {
|
|
873
|
+
const { taskId, outputs } = methodParams;
|
|
874
|
+
if (!taskId)
|
|
875
|
+
throw new Error("taskId is required");
|
|
876
|
+
// Update status to completed
|
|
877
|
+
this.taskManager.updateStatus(taskId, "completed");
|
|
878
|
+
// If outputs provided, update task metadata
|
|
879
|
+
if (outputs) {
|
|
880
|
+
this.taskManager.update(taskId, { outputs });
|
|
881
|
+
}
|
|
882
|
+
return { success: true };
|
|
883
|
+
}
|
|
523
884
|
default:
|
|
524
885
|
throw new Error(`Unknown extension method: ${method}`);
|
|
525
886
|
}
|