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
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTasks Daemon Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages the lifecycle of the central opentasks daemon as part of the
|
|
5
|
+
* task backend lifecycle. The daemon is auto-started by createTaskBackend()
|
|
6
|
+
* and stopped via TaskBackendResult.shutdown().
|
|
7
|
+
*
|
|
8
|
+
* Architecture:
|
|
9
|
+
* - Central daemon lives at ~/.multiagent/opentasks/
|
|
10
|
+
* - If a daemon is already running, we connect to it (ownsDaemon=false)
|
|
11
|
+
* - If not, we start one and own its lifecycle (ownsDaemon=true)
|
|
12
|
+
* - On shutdown, we only stop the daemon if we started it
|
|
13
|
+
*
|
|
14
|
+
* @module task/backend/opentasks/daemon-manager
|
|
15
|
+
*/
|
|
16
|
+
import type { OpenTasksClient } from "./client.js";
|
|
17
|
+
/**
|
|
18
|
+
* Configuration for the DaemonManager.
|
|
19
|
+
*/
|
|
20
|
+
export interface DaemonManagerConfig {
|
|
21
|
+
/** Central daemon location (default: ~/.multiagent/opentasks) */
|
|
22
|
+
centralPath?: string;
|
|
23
|
+
/** Whether to auto-connect project .opentasks/ on connectProject() */
|
|
24
|
+
connectOnSpawn?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Result from ensureDaemon() — the running daemon's connection info.
|
|
28
|
+
*/
|
|
29
|
+
export interface DaemonManagerResult {
|
|
30
|
+
/** Connected OpenTasks client */
|
|
31
|
+
client: OpenTasksClient;
|
|
32
|
+
/** Daemon socket path */
|
|
33
|
+
socketPath: string;
|
|
34
|
+
/** Whether we started the daemon (vs connecting to existing) */
|
|
35
|
+
ownsDaemon: boolean;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Manages the central opentasks daemon lifecycle.
|
|
39
|
+
*
|
|
40
|
+
* Internal to the opentasks backend module — not exposed as a standalone service.
|
|
41
|
+
*/
|
|
42
|
+
export declare class DaemonManager {
|
|
43
|
+
private readonly centralPath;
|
|
44
|
+
private readonly connectOnSpawn;
|
|
45
|
+
private daemon;
|
|
46
|
+
private client;
|
|
47
|
+
private ownsDaemon;
|
|
48
|
+
private connectedProjects;
|
|
49
|
+
constructor(config?: DaemonManagerConfig);
|
|
50
|
+
/**
|
|
51
|
+
* Ensure the central daemon is running and return a connected client.
|
|
52
|
+
*
|
|
53
|
+
* 1. Check if a daemon is already running at the central path
|
|
54
|
+
* 2. If running, connect to it (ownsDaemon=false)
|
|
55
|
+
* 3. If not running, start one (ownsDaemon=true)
|
|
56
|
+
* 4. Return connected client + socket path
|
|
57
|
+
*/
|
|
58
|
+
ensureDaemon(): Promise<DaemonManagerResult>;
|
|
59
|
+
/**
|
|
60
|
+
* Connect a project's .opentasks/ directory to the central daemon.
|
|
61
|
+
*
|
|
62
|
+
* This is a fire-and-forget operation — connection failures are logged
|
|
63
|
+
* but do not affect the caller.
|
|
64
|
+
*
|
|
65
|
+
* @param projectPath - Path to the project root (will look for .opentasks/ subdirectory)
|
|
66
|
+
*/
|
|
67
|
+
connectProject(projectPath: string): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Check if a project is already connected to the central daemon.
|
|
70
|
+
*/
|
|
71
|
+
isProjectConnected(projectPath: string): boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Get list of connected project .opentasks/ paths.
|
|
74
|
+
*/
|
|
75
|
+
getConnectedProjects(): string[];
|
|
76
|
+
/**
|
|
77
|
+
* Shut down the daemon manager.
|
|
78
|
+
*
|
|
79
|
+
* - Disconnects the client
|
|
80
|
+
* - Stops the daemon if we started it (ownsDaemon=true)
|
|
81
|
+
* - Leaves the daemon running if someone else started it
|
|
82
|
+
*/
|
|
83
|
+
shutdown(): Promise<void>;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Create a DaemonManager instance.
|
|
87
|
+
*/
|
|
88
|
+
export declare function createDaemonManager(config?: DaemonManagerConfig): DaemonManager;
|
|
89
|
+
//# sourceMappingURL=daemon-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-manager.d.ts","sourceRoot":"","sources":["../../../../src/task/backend/opentasks/daemon-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAMnD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,sEAAsE;IACtE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,iCAAiC;IACjC,MAAM,EAAE,eAAe,CAAC;IAExB,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IAEnB,gEAAgE;IAChE,UAAU,EAAE,OAAO,CAAC;CACrB;AAkBD;;;;GAIG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,iBAAiB,CAAqB;gBAElC,MAAM,CAAC,EAAE,mBAAmB;IAKxC;;;;;;;OAOG;IACG,YAAY,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAsDlD;;;;;;;OAOG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCxD;;OAEG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAKhD;;OAEG;IACH,oBAAoB,IAAI,MAAM,EAAE;IAIhC;;;;;;OAMG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CA2BhC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,CAAC,EAAE,mBAAmB,GAC3B,aAAa,CAEf"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTasks Daemon Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages the lifecycle of the central opentasks daemon as part of the
|
|
5
|
+
* task backend lifecycle. The daemon is auto-started by createTaskBackend()
|
|
6
|
+
* and stopped via TaskBackendResult.shutdown().
|
|
7
|
+
*
|
|
8
|
+
* Architecture:
|
|
9
|
+
* - Central daemon lives at ~/.multiagent/opentasks/
|
|
10
|
+
* - If a daemon is already running, we connect to it (ownsDaemon=false)
|
|
11
|
+
* - If not, we start one and own its lifecycle (ownsDaemon=true)
|
|
12
|
+
* - On shutdown, we only stop the daemon if we started it
|
|
13
|
+
*
|
|
14
|
+
* @module task/backend/opentasks/daemon-manager
|
|
15
|
+
*/
|
|
16
|
+
import * as fs from "node:fs";
|
|
17
|
+
import * as os from "node:os";
|
|
18
|
+
import * as path from "node:path";
|
|
19
|
+
import { checkExistingDaemon, createDaemonWithStore } from "opentasks";
|
|
20
|
+
import { IPCOpenTasksClient } from "./client.js";
|
|
21
|
+
// =============================================================================
|
|
22
|
+
// Constants
|
|
23
|
+
// =============================================================================
|
|
24
|
+
const DEFAULT_CENTRAL_PATH = path.join(process.env.MACRO_AGENT_HOME || path.join(os.homedir(), ".multiagent"), "opentasks");
|
|
25
|
+
/** Grace period (ms) between client disconnect and daemon.stop() to let children finish disconnecting */
|
|
26
|
+
const DAEMON_DRAIN_MS = 500;
|
|
27
|
+
// =============================================================================
|
|
28
|
+
// DaemonManager Implementation
|
|
29
|
+
// =============================================================================
|
|
30
|
+
/**
|
|
31
|
+
* Manages the central opentasks daemon lifecycle.
|
|
32
|
+
*
|
|
33
|
+
* Internal to the opentasks backend module — not exposed as a standalone service.
|
|
34
|
+
*/
|
|
35
|
+
export class DaemonManager {
|
|
36
|
+
centralPath;
|
|
37
|
+
connectOnSpawn;
|
|
38
|
+
daemon = null;
|
|
39
|
+
client = null;
|
|
40
|
+
ownsDaemon = false;
|
|
41
|
+
connectedProjects = new Set();
|
|
42
|
+
constructor(config) {
|
|
43
|
+
this.centralPath = config?.centralPath ?? DEFAULT_CENTRAL_PATH;
|
|
44
|
+
this.connectOnSpawn = config?.connectOnSpawn ?? true;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Ensure the central daemon is running and return a connected client.
|
|
48
|
+
*
|
|
49
|
+
* 1. Check if a daemon is already running at the central path
|
|
50
|
+
* 2. If running, connect to it (ownsDaemon=false)
|
|
51
|
+
* 3. If not running, start one (ownsDaemon=true)
|
|
52
|
+
* 4. Return connected client + socket path
|
|
53
|
+
*/
|
|
54
|
+
async ensureDaemon() {
|
|
55
|
+
// Ensure the central directory exists
|
|
56
|
+
fs.mkdirSync(this.centralPath, { recursive: true });
|
|
57
|
+
// Check if a daemon is already running at this location
|
|
58
|
+
const existing = await checkExistingDaemon(this.centralPath);
|
|
59
|
+
if (existing.running && existing.socketPath) {
|
|
60
|
+
// Connect to the existing daemon
|
|
61
|
+
console.error(`[opentasks] Connecting to existing daemon at ${existing.socketPath} (pid: ${existing.pid})`);
|
|
62
|
+
const client = new IPCOpenTasksClient({
|
|
63
|
+
socketPath: existing.socketPath,
|
|
64
|
+
});
|
|
65
|
+
await client.connect();
|
|
66
|
+
this.client = client;
|
|
67
|
+
this.ownsDaemon = false;
|
|
68
|
+
return {
|
|
69
|
+
client,
|
|
70
|
+
socketPath: existing.socketPath,
|
|
71
|
+
ownsDaemon: false,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
// No daemon running — start one
|
|
75
|
+
console.error(`[opentasks] Starting daemon at ${this.centralPath}`);
|
|
76
|
+
const daemon = await createDaemonWithStore({
|
|
77
|
+
locationPath: this.centralPath,
|
|
78
|
+
version: "0.0.3",
|
|
79
|
+
});
|
|
80
|
+
await daemon.start();
|
|
81
|
+
this.daemon = daemon;
|
|
82
|
+
this.ownsDaemon = true;
|
|
83
|
+
const socketPath = daemon.socketPath;
|
|
84
|
+
console.error(`[opentasks] Daemon started (socket: ${socketPath})`);
|
|
85
|
+
// Connect client to the daemon
|
|
86
|
+
const client = new IPCOpenTasksClient({ socketPath });
|
|
87
|
+
await client.connect();
|
|
88
|
+
this.client = client;
|
|
89
|
+
return {
|
|
90
|
+
client,
|
|
91
|
+
socketPath,
|
|
92
|
+
ownsDaemon: true,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Connect a project's .opentasks/ directory to the central daemon.
|
|
97
|
+
*
|
|
98
|
+
* This is a fire-and-forget operation — connection failures are logged
|
|
99
|
+
* but do not affect the caller.
|
|
100
|
+
*
|
|
101
|
+
* @param projectPath - Path to the project root (will look for .opentasks/ subdirectory)
|
|
102
|
+
*/
|
|
103
|
+
async connectProject(projectPath) {
|
|
104
|
+
if (!this.connectOnSpawn)
|
|
105
|
+
return;
|
|
106
|
+
if (!this.client)
|
|
107
|
+
return;
|
|
108
|
+
const opentasksDir = path.join(projectPath, ".opentasks");
|
|
109
|
+
// Check if project has .opentasks/
|
|
110
|
+
if (!fs.existsSync(opentasksDir))
|
|
111
|
+
return;
|
|
112
|
+
// Check if already connected
|
|
113
|
+
if (this.connectedProjects.has(opentasksDir))
|
|
114
|
+
return;
|
|
115
|
+
try {
|
|
116
|
+
// Read the project's config.json to get its location hash
|
|
117
|
+
const configPath = path.join(opentasksDir, "config.json");
|
|
118
|
+
const configContent = fs.readFileSync(configPath, "utf-8");
|
|
119
|
+
const config = JSON.parse(configContent);
|
|
120
|
+
const hash = config?.location?.hash;
|
|
121
|
+
if (!hash) {
|
|
122
|
+
console.error(`[opentasks] No location hash in ${configPath}, skipping`);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
// Register the location with the daemon via IPC
|
|
126
|
+
const client = this.client;
|
|
127
|
+
if (typeof client.call === "function") {
|
|
128
|
+
await client.call("location.register", {
|
|
129
|
+
hash,
|
|
130
|
+
opentasksPath: opentasksDir,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
this.connectedProjects.add(opentasksDir);
|
|
134
|
+
console.error(`[opentasks] Connected to project: ${opentasksDir}`);
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
// Non-fatal — log and continue
|
|
138
|
+
console.error(`[opentasks] Failed to connect project ${opentasksDir}: ${error}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Check if a project is already connected to the central daemon.
|
|
143
|
+
*/
|
|
144
|
+
isProjectConnected(projectPath) {
|
|
145
|
+
const opentasksDir = path.join(projectPath, ".opentasks");
|
|
146
|
+
return this.connectedProjects.has(opentasksDir);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Get list of connected project .opentasks/ paths.
|
|
150
|
+
*/
|
|
151
|
+
getConnectedProjects() {
|
|
152
|
+
return Array.from(this.connectedProjects);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Shut down the daemon manager.
|
|
156
|
+
*
|
|
157
|
+
* - Disconnects the client
|
|
158
|
+
* - Stops the daemon if we started it (ownsDaemon=true)
|
|
159
|
+
* - Leaves the daemon running if someone else started it
|
|
160
|
+
*/
|
|
161
|
+
async shutdown() {
|
|
162
|
+
// Disconnect client
|
|
163
|
+
if (this.client) {
|
|
164
|
+
try {
|
|
165
|
+
this.client.disconnect();
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
// Ignore disconnect errors
|
|
169
|
+
}
|
|
170
|
+
this.client = null;
|
|
171
|
+
}
|
|
172
|
+
// Stop daemon only if we own it
|
|
173
|
+
if (this.ownsDaemon && this.daemon) {
|
|
174
|
+
try {
|
|
175
|
+
// Grace period to let child agents finish disconnecting from the daemon
|
|
176
|
+
await new Promise(resolve => setTimeout(resolve, DAEMON_DRAIN_MS));
|
|
177
|
+
console.error("[opentasks] Stopping daemon");
|
|
178
|
+
await this.daemon.stop();
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
console.error(`[opentasks] Error stopping daemon: ${error}`);
|
|
182
|
+
}
|
|
183
|
+
this.daemon = null;
|
|
184
|
+
this.ownsDaemon = false;
|
|
185
|
+
}
|
|
186
|
+
this.connectedProjects.clear();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Create a DaemonManager instance.
|
|
191
|
+
*/
|
|
192
|
+
export function createDaemonManager(config) {
|
|
193
|
+
return new DaemonManager(config);
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=daemon-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-manager.js","sourceRoot":"","sources":["../../../../src/task/backend/opentasks/daemon-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTasks Task Backend Module
|
|
3
|
+
*
|
|
4
|
+
* Integrates macro-agent's task system with OpenTasks, a graph connector
|
|
5
|
+
* for linking heterogeneous task and issue systems.
|
|
6
|
+
*
|
|
7
|
+
* Tasks are stored as OpenTasks issues with bidirectional ID mapping.
|
|
8
|
+
* Blocking dependencies use OpenTasks 'blocks' edges.
|
|
9
|
+
* The pull model leverages OpenTasks' ready query and claimed_by field.
|
|
10
|
+
*
|
|
11
|
+
* @module task/backend/opentasks
|
|
12
|
+
*/
|
|
13
|
+
export { OpenTasksTaskBackend, OpenTasksBackendError, createOpenTasksTaskBackend, } from "./backend.js";
|
|
14
|
+
export type { OpenTasksBackendConfig } from "./backend.js";
|
|
15
|
+
export { IPCOpenTasksClient, OpenTasksClientError, createOpenTasksClient, } from "./client.js";
|
|
16
|
+
export type { OpenTasksClient, OpenTasksClientConfig, OpenTasksIssue, OpenTasksEdge, OpenTasksNodeSummary, CreateIssueInput, UpdateIssueInput, IssueChangeType, IssueChangeEvent, IssueChangeCallback, ClientUnsubscribe, TaskAction, TaskParams, TaskResult, TaskTransitionData, TaskReadyData, TaskAssignData, TaskValidActionsData, TaskNodeSummary, ProviderSummary, } from "./client.js";
|
|
17
|
+
export { DaemonManager, createDaemonManager, } from "./daemon-manager.js";
|
|
18
|
+
export type { DaemonManagerConfig, DaemonManagerResult, } from "./daemon-manager.js";
|
|
19
|
+
export { mapOpenTasksStatus, mapTaskStatus, isIssueComplete, isIssueBlocked, } from "./mapping.js";
|
|
20
|
+
export type { OpenTasksIssueStatus } from "./mapping.js";
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/task/backend/opentasks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAG3D,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EAEjB,UAAU,EACV,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTasks Task Backend Module
|
|
3
|
+
*
|
|
4
|
+
* Integrates macro-agent's task system with OpenTasks, a graph connector
|
|
5
|
+
* for linking heterogeneous task and issue systems.
|
|
6
|
+
*
|
|
7
|
+
* Tasks are stored as OpenTasks issues with bidirectional ID mapping.
|
|
8
|
+
* Blocking dependencies use OpenTasks 'blocks' edges.
|
|
9
|
+
* The pull model leverages OpenTasks' ready query and claimed_by field.
|
|
10
|
+
*
|
|
11
|
+
* @module task/backend/opentasks
|
|
12
|
+
*/
|
|
13
|
+
// Backend
|
|
14
|
+
export { OpenTasksTaskBackend, OpenTasksBackendError, createOpenTasksTaskBackend, } from "./backend.js";
|
|
15
|
+
// Client
|
|
16
|
+
export { IPCOpenTasksClient, OpenTasksClientError, createOpenTasksClient, } from "./client.js";
|
|
17
|
+
// Daemon Manager
|
|
18
|
+
export { DaemonManager, createDaemonManager, } from "./daemon-manager.js";
|
|
19
|
+
// Mapping
|
|
20
|
+
export { mapOpenTasksStatus, mapTaskStatus, isIssueComplete, isIssueBlocked, } from "./mapping.js";
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/task/backend/opentasks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,UAAU;AACV,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AAGtB,SAAS;AACT,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAyBrB,iBAAiB;AACjB,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAM7B,UAAU;AACV,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,cAAc,GACf,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Status Mapping Utilities for OpenTasks Integration
|
|
3
|
+
*
|
|
4
|
+
* Maps between OpenTasks issue statuses and macro-agent task statuses.
|
|
5
|
+
*
|
|
6
|
+
* @module task/backend/opentasks/mapping
|
|
7
|
+
*/
|
|
8
|
+
import type { TaskStatus } from "../../../store/types/index.js";
|
|
9
|
+
/**
|
|
10
|
+
* OpenTasks issue status values.
|
|
11
|
+
* These are the canonical statuses used by OpenTasks issues.
|
|
12
|
+
*/
|
|
13
|
+
export type OpenTasksIssueStatus = "open" | "in_progress" | "blocked" | "closed";
|
|
14
|
+
/**
|
|
15
|
+
* Map OpenTasks issue status to macro-agent task status.
|
|
16
|
+
*
|
|
17
|
+
* OpenTasks statuses:
|
|
18
|
+
* - open: Not started
|
|
19
|
+
* - in_progress: Currently being worked on
|
|
20
|
+
* - blocked: Blocked by dependencies (handled via isBlocked flag)
|
|
21
|
+
* - closed: Completed
|
|
22
|
+
*
|
|
23
|
+
* Macro-agent statuses:
|
|
24
|
+
* - pending: Not started
|
|
25
|
+
* - assigned: Assigned to an agent but not started
|
|
26
|
+
* - in_progress: Currently executing
|
|
27
|
+
* - completed: Finished successfully
|
|
28
|
+
* - failed: Finished with error
|
|
29
|
+
*/
|
|
30
|
+
export declare function mapOpenTasksStatus(openTasksStatus: string): TaskStatus;
|
|
31
|
+
/**
|
|
32
|
+
* Map macro-agent task status to OpenTasks issue status.
|
|
33
|
+
*
|
|
34
|
+
* Note: Some task statuses don't have direct OpenTasks equivalents:
|
|
35
|
+
* - assigned: No direct equivalent (maps to open, assignee set separately)
|
|
36
|
+
* - failed: No direct equivalent (maps to closed with error in metadata)
|
|
37
|
+
*/
|
|
38
|
+
export declare function mapTaskStatus(taskStatus: TaskStatus): OpenTasksIssueStatus;
|
|
39
|
+
/**
|
|
40
|
+
* Check if an OpenTasks issue status indicates completion.
|
|
41
|
+
*/
|
|
42
|
+
export declare function isIssueComplete(status: string): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Check if an OpenTasks issue has an explicit blocked status.
|
|
45
|
+
* Note: This is the explicit 'blocked' status, not dependency-based blocking.
|
|
46
|
+
*/
|
|
47
|
+
export declare function isIssueBlocked(status: string): boolean;
|
|
48
|
+
//# sourceMappingURL=mapping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapping.d.ts","sourceRoot":"","sources":["../../../../src/task/backend/opentasks/mapping.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAC5B,MAAM,GACN,aAAa,GACb,SAAS,GACT,QAAQ,CAAC;AAEb;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,MAAM,GACtB,UAAU,CAcZ;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,oBAAoB,CAiB1E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEtD"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Status Mapping Utilities for OpenTasks Integration
|
|
3
|
+
*
|
|
4
|
+
* Maps between OpenTasks issue statuses and macro-agent task statuses.
|
|
5
|
+
*
|
|
6
|
+
* @module task/backend/opentasks/mapping
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Map OpenTasks issue status to macro-agent task status.
|
|
10
|
+
*
|
|
11
|
+
* OpenTasks statuses:
|
|
12
|
+
* - open: Not started
|
|
13
|
+
* - in_progress: Currently being worked on
|
|
14
|
+
* - blocked: Blocked by dependencies (handled via isBlocked flag)
|
|
15
|
+
* - closed: Completed
|
|
16
|
+
*
|
|
17
|
+
* Macro-agent statuses:
|
|
18
|
+
* - pending: Not started
|
|
19
|
+
* - assigned: Assigned to an agent but not started
|
|
20
|
+
* - in_progress: Currently executing
|
|
21
|
+
* - completed: Finished successfully
|
|
22
|
+
* - failed: Finished with error
|
|
23
|
+
*/
|
|
24
|
+
export function mapOpenTasksStatus(openTasksStatus) {
|
|
25
|
+
switch (openTasksStatus) {
|
|
26
|
+
case "open":
|
|
27
|
+
return "pending";
|
|
28
|
+
case "in_progress":
|
|
29
|
+
return "in_progress";
|
|
30
|
+
case "blocked":
|
|
31
|
+
// Blocked issues map to pending - the isBlocked flag handles blocking
|
|
32
|
+
return "pending";
|
|
33
|
+
case "closed":
|
|
34
|
+
return "completed";
|
|
35
|
+
default:
|
|
36
|
+
return "pending";
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Map macro-agent task status to OpenTasks issue status.
|
|
41
|
+
*
|
|
42
|
+
* Note: Some task statuses don't have direct OpenTasks equivalents:
|
|
43
|
+
* - assigned: No direct equivalent (maps to open, assignee set separately)
|
|
44
|
+
* - failed: No direct equivalent (maps to closed with error in metadata)
|
|
45
|
+
*/
|
|
46
|
+
export function mapTaskStatus(taskStatus) {
|
|
47
|
+
switch (taskStatus) {
|
|
48
|
+
case "pending":
|
|
49
|
+
return "open";
|
|
50
|
+
case "assigned":
|
|
51
|
+
// Assigned tasks remain open in OpenTasks; assignee field handles assignment
|
|
52
|
+
return "open";
|
|
53
|
+
case "in_progress":
|
|
54
|
+
return "in_progress";
|
|
55
|
+
case "completed":
|
|
56
|
+
return "closed";
|
|
57
|
+
case "failed":
|
|
58
|
+
// Failed tasks are closed in OpenTasks (failure tracked in metadata)
|
|
59
|
+
return "closed";
|
|
60
|
+
default:
|
|
61
|
+
return "open";
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Check if an OpenTasks issue status indicates completion.
|
|
66
|
+
*/
|
|
67
|
+
export function isIssueComplete(status) {
|
|
68
|
+
return status === "closed";
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Check if an OpenTasks issue has an explicit blocked status.
|
|
72
|
+
* Note: This is the explicit 'blocked' status, not dependency-based blocking.
|
|
73
|
+
*/
|
|
74
|
+
export function isIssueBlocked(status) {
|
|
75
|
+
return status === "blocked";
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=mapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapping.js","sourceRoot":"","sources":["../../../../src/task/backend/opentasks/mapping.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAChC,eAAuB;IAEvB,QAAQ,eAAe,EAAE,CAAC;QACxB,KAAK,MAAM;YACT,OAAO,SAAS,CAAC;QACnB,KAAK,aAAa;YAChB,OAAO,aAAa,CAAC;QACvB,KAAK,SAAS;YACZ,sEAAsE;YACtE,OAAO,SAAS,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,WAAW,CAAC;QACrB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,UAAsB;IAClD,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC;QAChB,KAAK,UAAU;YACb,6EAA6E;YAC7E,OAAO,MAAM,CAAC;QAChB,KAAK,aAAa;YAChB,OAAO,aAAa,CAAC;QACvB,KAAK,WAAW;YACd,OAAO,QAAQ,CAAC;QAClB,KAAK,QAAQ;YACX,qEAAqE;YACrE,OAAO,QAAQ,CAAC;QAClB;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,MAAM,KAAK,QAAQ,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,OAAO,MAAM,KAAK,SAAS,CAAC;AAC9B,CAAC"}
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
* internal task system to be backed by external task management systems.
|
|
6
6
|
*
|
|
7
7
|
* @module task/backend
|
|
8
|
-
* @see s-8472 Pluggable Task Backend Integration with Sudocode
|
|
9
8
|
*/
|
|
10
9
|
import type { AgentId, TaskId, Timestamp, Task, TaskStatus, ArtifactRef, AgentHistoryEntry } from "../../store/types/index.js";
|
|
11
10
|
export type { Task, TaskStatus, ArtifactRef, AgentHistoryEntry };
|
|
@@ -16,8 +15,10 @@ export type { Task, TaskStatus, ArtifactRef, AgentHistoryEntry };
|
|
|
16
15
|
export interface ExtendedTask extends Task {
|
|
17
16
|
/** True if blocked by dependencies (computed, not stored) */
|
|
18
17
|
isBlocked?: boolean;
|
|
19
|
-
/** Binding to external system (e.g.,
|
|
18
|
+
/** Binding to external system (e.g., OpenTasks issue ID "i-xxxx") */
|
|
20
19
|
external_id?: string;
|
|
20
|
+
/** Source project location (e.g., opentasks path or URI) for federated tasks */
|
|
21
|
+
source_location?: string;
|
|
21
22
|
}
|
|
22
23
|
/**
|
|
23
24
|
* Options for creating a new task
|
|
@@ -29,7 +30,7 @@ export interface CreateTaskOptions {
|
|
|
29
30
|
created_by: AgentId;
|
|
30
31
|
/** Optional parent task for subtask hierarchy */
|
|
31
32
|
parent_task?: TaskId;
|
|
32
|
-
/** Optional binding to external system (e.g.,
|
|
33
|
+
/** Optional binding to external system (e.g., OpenTasks issue ID) */
|
|
33
34
|
external_id?: string;
|
|
34
35
|
/** Optional tags for classification and filtering (pull model) */
|
|
35
36
|
tags?: string[];
|
|
@@ -156,10 +157,11 @@ export type Unsubscribe = () => void;
|
|
|
156
157
|
*
|
|
157
158
|
* Abstraction over task storage allowing different implementations:
|
|
158
159
|
* - InMemoryTaskBackend - Current behavior (default)
|
|
159
|
-
* -
|
|
160
|
-
* - Future: LinearTaskBackend, JiraTaskBackend, etc.
|
|
160
|
+
* - OpenTasksTaskBackend - Backed by OpenTasks graph
|
|
161
161
|
*/
|
|
162
162
|
export interface TaskBackend {
|
|
163
|
+
/** Gracefully close the backend. After close(), write operations may throw. */
|
|
164
|
+
close?(): Promise<void>;
|
|
163
165
|
/** Create a new task */
|
|
164
166
|
create(options: CreateTaskOptions): Promise<ExtendedTask>;
|
|
165
167
|
/** Get a task by ID */
|
|
@@ -212,6 +214,14 @@ export interface TaskBackend {
|
|
|
212
214
|
listClaimable?(filter?: ClaimFilter): Promise<ExtendedTask[]>;
|
|
213
215
|
/** Get agent assignment history for a task */
|
|
214
216
|
getAgentHistory(taskId: TaskId): Promise<AgentHistoryEntry[]>;
|
|
217
|
+
/**
|
|
218
|
+
* Sync a task transition that happened externally (e.g., via opentasks daemon).
|
|
219
|
+
* Updates the internal store without re-syncing to the external system.
|
|
220
|
+
* @param externalId - The external system's task ID (e.g., opentasks issue ID)
|
|
221
|
+
* @param action - The transition action (e.g., "complete", "start", "close")
|
|
222
|
+
* @param agentId - The agent that performed the transition
|
|
223
|
+
*/
|
|
224
|
+
syncExternalTransition?(externalId: string, action: string, agentId?: string): Promise<void>;
|
|
215
225
|
/** Subscribe to all task changes */
|
|
216
226
|
onTaskChange(callback: TaskChangeCallback): Unsubscribe;
|
|
217
227
|
/** Subscribe to changes for a specific task */
|
|
@@ -230,10 +240,6 @@ export interface MCPToolDefinition {
|
|
|
230
240
|
/** Tool handler function */
|
|
231
241
|
handler: (params: unknown) => Promise<unknown>;
|
|
232
242
|
}
|
|
233
|
-
/**
|
|
234
|
-
* Task tool mode
|
|
235
|
-
*/
|
|
236
|
-
export type TaskToolMode = "abstract" | "native" | "both" | "auto";
|
|
237
243
|
/**
|
|
238
244
|
* Task Tool Provider Interface
|
|
239
245
|
*
|
|
@@ -252,66 +258,40 @@ export interface InMemoryBackendConfig {
|
|
|
252
258
|
type: "memory";
|
|
253
259
|
}
|
|
254
260
|
/**
|
|
255
|
-
*
|
|
256
|
-
*/
|
|
257
|
-
export type ExecutionTrackingConfig = {
|
|
258
|
-
mode: "none";
|
|
259
|
-
} | {
|
|
260
|
-
mode: "bound-only";
|
|
261
|
-
} | {
|
|
262
|
-
mode: "all";
|
|
263
|
-
} | {
|
|
264
|
-
mode: "filter";
|
|
265
|
-
filter: ExecutionFilter;
|
|
266
|
-
};
|
|
267
|
-
/**
|
|
268
|
-
* Execution filter options
|
|
269
|
-
*/
|
|
270
|
-
export interface ExecutionFilter {
|
|
271
|
-
/** Only create executions for these agent roles */
|
|
272
|
-
roles?: string[];
|
|
273
|
-
/** Only when task has external binding */
|
|
274
|
-
requireExternalBinding?: boolean;
|
|
275
|
-
/** Exclude coordination-only agents (no code changes) */
|
|
276
|
-
excludeCoordinationOnly?: boolean;
|
|
277
|
-
}
|
|
278
|
-
/**
|
|
279
|
-
* Sudocode backend configuration
|
|
261
|
+
* OpenTasks backend configuration
|
|
280
262
|
*/
|
|
281
|
-
export interface
|
|
282
|
-
type: "
|
|
283
|
-
/** Path to
|
|
284
|
-
|
|
285
|
-
/**
|
|
286
|
-
|
|
287
|
-
/**
|
|
288
|
-
|
|
289
|
-
/**
|
|
290
|
-
|
|
291
|
-
/**
|
|
292
|
-
|
|
293
|
-
/**
|
|
294
|
-
|
|
263
|
+
export interface OpenTasksBackendConfig {
|
|
264
|
+
type: "opentasks";
|
|
265
|
+
/** Path to the OpenTasks daemon socket (auto-discovered if not set) */
|
|
266
|
+
socketPath?: string;
|
|
267
|
+
/** Whether to sync status changes to OpenTasks (default: true) */
|
|
268
|
+
syncStatus?: boolean;
|
|
269
|
+
/** Source label for issues created by this backend (default: "macro-agent") */
|
|
270
|
+
sourceLabel?: string;
|
|
271
|
+
/** Auto-start the central opentasks daemon (default: true) */
|
|
272
|
+
autoStart?: boolean;
|
|
273
|
+
/** Central daemon location (default: ~/.multiagent/opentasks) */
|
|
274
|
+
centralPath?: string;
|
|
275
|
+
/** Auto-connect project .opentasks/ dirs on agent spawn (default: true) */
|
|
276
|
+
connectOnSpawn?: boolean;
|
|
295
277
|
}
|
|
296
278
|
/**
|
|
297
279
|
* Task backend configuration
|
|
298
280
|
*/
|
|
299
|
-
export type TaskBackendConfig = InMemoryBackendConfig |
|
|
281
|
+
export type TaskBackendConfig = InMemoryBackendConfig | OpenTasksBackendConfig;
|
|
300
282
|
/**
|
|
301
283
|
* Macro-agent task configuration
|
|
302
284
|
*/
|
|
303
285
|
export interface TaskConfig {
|
|
304
286
|
/** Task backend configuration */
|
|
305
287
|
backend: TaskBackendConfig;
|
|
306
|
-
/** Task tool mode (default: 'auto') */
|
|
307
|
-
toolMode?: TaskToolMode;
|
|
308
288
|
}
|
|
309
289
|
/**
|
|
310
290
|
* Default task configuration
|
|
311
291
|
*/
|
|
312
292
|
export declare const DEFAULT_TASK_CONFIG: TaskConfig;
|
|
313
293
|
/**
|
|
314
|
-
* Default
|
|
294
|
+
* Default OpenTasks backend configuration
|
|
315
295
|
*/
|
|
316
|
-
export declare const
|
|
296
|
+
export declare const DEFAULT_OPENTASKS_CONFIG: Omit<OpenTasksBackendConfig, "type">;
|
|
317
297
|
//# sourceMappingURL=types.d.ts.map
|