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
|
@@ -170,7 +170,7 @@ describe('EventStore', () => {
|
|
|
170
170
|
});
|
|
171
171
|
|
|
172
172
|
store.emit({
|
|
173
|
-
type: '
|
|
173
|
+
type: 'stop',
|
|
174
174
|
source: { agent_id: 'agent_1' },
|
|
175
175
|
payload: { reason: 'completed' },
|
|
176
176
|
});
|
|
@@ -1096,6 +1096,201 @@ describe('Event Archival', () => {
|
|
|
1096
1096
|
|
|
1097
1097
|
await planStore.close();
|
|
1098
1098
|
});
|
|
1099
|
+
|
|
1100
|
+
it('should update agent name via updateAgentMetadata', async () => {
|
|
1101
|
+
const metaStore = await createEventStore({ inMemory: true });
|
|
1102
|
+
|
|
1103
|
+
metaStore.emit({
|
|
1104
|
+
type: 'spawn',
|
|
1105
|
+
source: { agent_id: 'agent_meta' },
|
|
1106
|
+
payload: {
|
|
1107
|
+
agent_id: 'agent_meta',
|
|
1108
|
+
session_id: 'sess_meta',
|
|
1109
|
+
task: 'test metadata',
|
|
1110
|
+
},
|
|
1111
|
+
});
|
|
1112
|
+
|
|
1113
|
+
// Name starts undefined
|
|
1114
|
+
expect(metaStore.getAgent('agent_meta')?.name).toBeUndefined();
|
|
1115
|
+
|
|
1116
|
+
// Set name via updateAgentMetadata
|
|
1117
|
+
metaStore.updateAgentMetadata('agent_meta', { name: 'MyAgent' });
|
|
1118
|
+
expect(metaStore.getAgent('agent_meta')?.name).toBe('MyAgent');
|
|
1119
|
+
|
|
1120
|
+
await metaStore.close();
|
|
1121
|
+
});
|
|
1122
|
+
|
|
1123
|
+
it('should update agent metadata via updateAgentMetadata', async () => {
|
|
1124
|
+
const metaStore = await createEventStore({ inMemory: true });
|
|
1125
|
+
|
|
1126
|
+
metaStore.emit({
|
|
1127
|
+
type: 'spawn',
|
|
1128
|
+
source: { agent_id: 'agent_meta2' },
|
|
1129
|
+
payload: {
|
|
1130
|
+
agent_id: 'agent_meta2',
|
|
1131
|
+
session_id: 'sess_meta2',
|
|
1132
|
+
task: 'test metadata field',
|
|
1133
|
+
},
|
|
1134
|
+
});
|
|
1135
|
+
|
|
1136
|
+
// Metadata starts undefined
|
|
1137
|
+
expect(metaStore.getAgent('agent_meta2')?.metadata).toBeUndefined();
|
|
1138
|
+
|
|
1139
|
+
// Set metadata
|
|
1140
|
+
metaStore.updateAgentMetadata('agent_meta2', {
|
|
1141
|
+
metadata: { color: 'blue', priority: 1 },
|
|
1142
|
+
});
|
|
1143
|
+
const after = metaStore.getAgent('agent_meta2');
|
|
1144
|
+
expect(after?.metadata).toEqual({ color: 'blue', priority: 1 });
|
|
1145
|
+
|
|
1146
|
+
await metaStore.close();
|
|
1147
|
+
});
|
|
1148
|
+
|
|
1149
|
+
it('should shallow-merge metadata with existing values', async () => {
|
|
1150
|
+
const metaStore = await createEventStore({ inMemory: true });
|
|
1151
|
+
|
|
1152
|
+
metaStore.emit({
|
|
1153
|
+
type: 'spawn',
|
|
1154
|
+
source: { agent_id: 'agent_merge' },
|
|
1155
|
+
payload: {
|
|
1156
|
+
agent_id: 'agent_merge',
|
|
1157
|
+
session_id: 'sess_merge',
|
|
1158
|
+
task: 'test metadata merge',
|
|
1159
|
+
},
|
|
1160
|
+
});
|
|
1161
|
+
|
|
1162
|
+
// Set initial metadata
|
|
1163
|
+
metaStore.updateAgentMetadata('agent_merge', {
|
|
1164
|
+
metadata: { color: 'blue', size: 'large' },
|
|
1165
|
+
});
|
|
1166
|
+
expect(metaStore.getAgent('agent_merge')?.metadata).toEqual({
|
|
1167
|
+
color: 'blue',
|
|
1168
|
+
size: 'large',
|
|
1169
|
+
});
|
|
1170
|
+
|
|
1171
|
+
// Merge with new metadata — existing keys preserved, new keys added
|
|
1172
|
+
metaStore.updateAgentMetadata('agent_merge', {
|
|
1173
|
+
metadata: { color: 'red', shape: 'circle' },
|
|
1174
|
+
});
|
|
1175
|
+
expect(metaStore.getAgent('agent_merge')?.metadata).toEqual({
|
|
1176
|
+
color: 'red',
|
|
1177
|
+
size: 'large',
|
|
1178
|
+
shape: 'circle',
|
|
1179
|
+
});
|
|
1180
|
+
|
|
1181
|
+
await metaStore.close();
|
|
1182
|
+
});
|
|
1183
|
+
|
|
1184
|
+
it('should update multiple fields in a single updateAgentMetadata call', async () => {
|
|
1185
|
+
const metaStore = await createEventStore({ inMemory: true });
|
|
1186
|
+
|
|
1187
|
+
metaStore.emit({
|
|
1188
|
+
type: 'spawn',
|
|
1189
|
+
source: { agent_id: 'agent_multi' },
|
|
1190
|
+
payload: {
|
|
1191
|
+
agent_id: 'agent_multi',
|
|
1192
|
+
session_id: 'sess_multi',
|
|
1193
|
+
task: 'test multi-field update',
|
|
1194
|
+
},
|
|
1195
|
+
});
|
|
1196
|
+
|
|
1197
|
+
const plan = [
|
|
1198
|
+
{ content: 'Step 1', priority: 'high', status: 'pending' },
|
|
1199
|
+
];
|
|
1200
|
+
|
|
1201
|
+
metaStore.updateAgentMetadata('agent_multi', {
|
|
1202
|
+
name: 'MultiAgent',
|
|
1203
|
+
plan,
|
|
1204
|
+
metadata: { tag: 'test' },
|
|
1205
|
+
});
|
|
1206
|
+
|
|
1207
|
+
const agent = metaStore.getAgent('agent_multi');
|
|
1208
|
+
expect(agent?.name).toBe('MultiAgent');
|
|
1209
|
+
expect(agent?.plan).toEqual(plan);
|
|
1210
|
+
expect(agent?.metadata).toEqual({ tag: 'test' });
|
|
1211
|
+
|
|
1212
|
+
await metaStore.close();
|
|
1213
|
+
});
|
|
1214
|
+
|
|
1215
|
+
it('should notify agent change listeners on metadata update', async () => {
|
|
1216
|
+
const metaStore = await createEventStore({ inMemory: true });
|
|
1217
|
+
|
|
1218
|
+
metaStore.emit({
|
|
1219
|
+
type: 'spawn',
|
|
1220
|
+
source: { agent_id: 'agent_notify' },
|
|
1221
|
+
payload: {
|
|
1222
|
+
agent_id: 'agent_notify',
|
|
1223
|
+
session_id: 'sess_notify',
|
|
1224
|
+
task: 'test notify',
|
|
1225
|
+
},
|
|
1226
|
+
});
|
|
1227
|
+
|
|
1228
|
+
const changes: string[] = [];
|
|
1229
|
+
metaStore.onAgentChange((agentId) => {
|
|
1230
|
+
changes.push(agentId);
|
|
1231
|
+
});
|
|
1232
|
+
|
|
1233
|
+
metaStore.updateAgentMetadata('agent_notify', { name: 'Notified' });
|
|
1234
|
+
expect(changes).toContain('agent_notify');
|
|
1235
|
+
|
|
1236
|
+
await metaStore.close();
|
|
1237
|
+
});
|
|
1238
|
+
|
|
1239
|
+
it('should preserve all out-of-band fields across reload', async () => {
|
|
1240
|
+
const metaStore = await createEventStore({
|
|
1241
|
+
baseDir: testDir,
|
|
1242
|
+
instanceId: 'metadata-reload-test',
|
|
1243
|
+
});
|
|
1244
|
+
|
|
1245
|
+
metaStore.emit({
|
|
1246
|
+
type: 'spawn',
|
|
1247
|
+
source: { agent_id: 'agent_reload' },
|
|
1248
|
+
payload: {
|
|
1249
|
+
agent_id: 'agent_reload',
|
|
1250
|
+
session_id: 'sess_reload',
|
|
1251
|
+
task: 'test reload persistence',
|
|
1252
|
+
},
|
|
1253
|
+
});
|
|
1254
|
+
|
|
1255
|
+
// Set all out-of-band fields
|
|
1256
|
+
const plan = [
|
|
1257
|
+
{ content: 'Research', priority: 'high', status: 'completed' },
|
|
1258
|
+
];
|
|
1259
|
+
metaStore.updateAgentMetadata('agent_reload', {
|
|
1260
|
+
name: 'ReloadAgent',
|
|
1261
|
+
plan,
|
|
1262
|
+
metadata: { version: 2, env: 'test' },
|
|
1263
|
+
});
|
|
1264
|
+
|
|
1265
|
+
// Verify before reload
|
|
1266
|
+
const before = metaStore.getAgent('agent_reload');
|
|
1267
|
+
expect(before?.name).toBe('ReloadAgent');
|
|
1268
|
+
expect(before?.plan).toEqual(plan);
|
|
1269
|
+
expect(before?.metadata).toEqual({ version: 2, env: 'test' });
|
|
1270
|
+
|
|
1271
|
+
// Persist and reload (rebuildViews)
|
|
1272
|
+
await metaStore.persist();
|
|
1273
|
+
await metaStore.reload();
|
|
1274
|
+
|
|
1275
|
+
// All fields should survive
|
|
1276
|
+
const after = metaStore.getAgent('agent_reload');
|
|
1277
|
+
expect(after).toBeDefined();
|
|
1278
|
+
expect(after?.name).toBe('ReloadAgent');
|
|
1279
|
+
expect(after?.plan).toEqual(plan);
|
|
1280
|
+
expect(after?.metadata).toEqual({ version: 2, env: 'test' });
|
|
1281
|
+
|
|
1282
|
+
await metaStore.close();
|
|
1283
|
+
});
|
|
1284
|
+
|
|
1285
|
+
it('should no-op when agent does not exist', async () => {
|
|
1286
|
+
const metaStore = await createEventStore({ inMemory: true });
|
|
1287
|
+
|
|
1288
|
+
// Should not throw
|
|
1289
|
+
metaStore.updateAgentMetadata('nonexistent', { name: 'Ghost' });
|
|
1290
|
+
expect(metaStore.getAgent('nonexistent')).toBeNull();
|
|
1291
|
+
|
|
1292
|
+
await metaStore.close();
|
|
1293
|
+
});
|
|
1099
1294
|
});
|
|
1100
1295
|
});
|
|
1101
1296
|
|
|
@@ -467,10 +467,10 @@ describe('Peer Visibility', () => {
|
|
|
467
467
|
it('should filter by whitelist when visibleEventTypes is specified', () => {
|
|
468
468
|
const visibility: PeerVisibilityConfig = {
|
|
469
469
|
exportEvents: true,
|
|
470
|
-
visibleEventTypes: ['spawn', '
|
|
470
|
+
visibleEventTypes: ['spawn', 'stop'],
|
|
471
471
|
};
|
|
472
472
|
expect(isEventTypeVisibleToPeers('spawn', visibility)).toBe(true);
|
|
473
|
-
expect(isEventTypeVisibleToPeers('
|
|
473
|
+
expect(isEventTypeVisibleToPeers('stop', visibility)).toBe(true);
|
|
474
474
|
expect(isEventTypeVisibleToPeers('message', visibility)).toBe(false);
|
|
475
475
|
});
|
|
476
476
|
});
|
|
@@ -503,7 +503,7 @@ describe('Peer Visibility', () => {
|
|
|
503
503
|
{ type: 'spawn', source: { agent_id: 'agent-1' }, payload: {} },
|
|
504
504
|
{ type: 'message', source: { agent_id: 'agent-1' }, payload: {} },
|
|
505
505
|
{ type: 'spawn', source: { agent_id: 'agent-2' }, payload: {} },
|
|
506
|
-
{ type: '
|
|
506
|
+
{ type: 'stop', source: { agent_id: 'agent-2' }, payload: {} },
|
|
507
507
|
];
|
|
508
508
|
|
|
509
509
|
it('should return empty array when export is disabled', () => {
|
package/src/store/event-store.ts
CHANGED
|
@@ -23,6 +23,7 @@ import type {
|
|
|
23
23
|
EventFilter,
|
|
24
24
|
Agent,
|
|
25
25
|
AgentState,
|
|
26
|
+
AgentMetadataUpdate,
|
|
26
27
|
Task,
|
|
27
28
|
TaskStatus,
|
|
28
29
|
QueuedMessage,
|
|
@@ -57,6 +58,7 @@ import {
|
|
|
57
58
|
readInstanceMeta,
|
|
58
59
|
touchInstance,
|
|
59
60
|
registerInstance,
|
|
61
|
+
DEFAULT_BASE_DIR,
|
|
60
62
|
DEFAULT_NAMESPACE,
|
|
61
63
|
DEFAULT_PEER_VISIBILITY,
|
|
62
64
|
filterEventsForPeer,
|
|
@@ -131,8 +133,8 @@ function createTabularBetterSqlite3Persister(
|
|
|
131
133
|
undefined,
|
|
132
134
|
// onIgnoredError
|
|
133
135
|
(error: any) => console.warn('[EventStore] Persister error:', error),
|
|
134
|
-
// destroy
|
|
135
|
-
() =>
|
|
136
|
+
// destroy — do NOT close DB here; close() handles it after the persister drains
|
|
137
|
+
() => {},
|
|
136
138
|
// persist mode (1 = StoreOnly)
|
|
137
139
|
1 as any,
|
|
138
140
|
// thing (the db instance)
|
|
@@ -204,6 +206,7 @@ export interface EventStore {
|
|
|
204
206
|
getAgent(agentId: AgentId): Agent | null;
|
|
205
207
|
listAgents(filter?: { state?: AgentState; parent?: AgentId | null }): Agent[];
|
|
206
208
|
updateAgentPlan(agentId: AgentId, plan: Array<{ content: string; priority: string; status: string }>): void;
|
|
209
|
+
updateAgentMetadata(agentId: AgentId, updates: AgentMetadataUpdate): void;
|
|
207
210
|
|
|
208
211
|
// Task view
|
|
209
212
|
getTask(taskId: TaskId): Task | null;
|
|
@@ -306,7 +309,7 @@ export async function createEventStore(config: StoreConfig = {}): Promise<EventS
|
|
|
306
309
|
}
|
|
307
310
|
|
|
308
311
|
// Track baseDir for MCP subprocess communication
|
|
309
|
-
const baseDir = config.baseDir ??
|
|
312
|
+
const baseDir = config.baseDir ?? DEFAULT_BASE_DIR;
|
|
310
313
|
|
|
311
314
|
// Get peer visibility config (default is restrictive)
|
|
312
315
|
const peerVisibility: PeerVisibilityConfig =
|
|
@@ -380,7 +383,7 @@ export async function createEventStore(config: StoreConfig = {}): Promise<EventS
|
|
|
380
383
|
|
|
381
384
|
// Register in namespace for discovery
|
|
382
385
|
registerInstance(
|
|
383
|
-
config.baseDir ??
|
|
386
|
+
config.baseDir ?? DEFAULT_BASE_DIR,
|
|
384
387
|
namespace,
|
|
385
388
|
instanceId,
|
|
386
389
|
{ label: config.label }
|
|
@@ -521,24 +524,56 @@ export async function createEventStore(config: StoreConfig = {}): Promise<EventS
|
|
|
521
524
|
}
|
|
522
525
|
|
|
523
526
|
/**
|
|
524
|
-
* Update
|
|
527
|
+
* Update agent metadata fields (name, plan, metadata).
|
|
528
|
+
* Only provided fields are updated. Metadata is shallow-merged with existing.
|
|
525
529
|
*/
|
|
526
|
-
function
|
|
530
|
+
function updateAgentMetadata(
|
|
527
531
|
agentId: AgentId,
|
|
528
|
-
|
|
532
|
+
updates: AgentMetadataUpdate,
|
|
529
533
|
): void {
|
|
530
534
|
const row = store.getRow('agents', agentId);
|
|
531
535
|
if (!row.id) return;
|
|
532
536
|
|
|
533
|
-
|
|
534
|
-
plan: JSON.stringify(plan),
|
|
537
|
+
const partial: Record<string, string | number | boolean> = {
|
|
535
538
|
last_activity_at: Date.now(),
|
|
536
|
-
}
|
|
539
|
+
};
|
|
540
|
+
|
|
541
|
+
if (updates.name !== undefined) {
|
|
542
|
+
partial.name = updates.name;
|
|
543
|
+
}
|
|
544
|
+
if (updates.plan !== undefined) {
|
|
545
|
+
partial.plan = JSON.stringify(updates.plan);
|
|
546
|
+
}
|
|
547
|
+
if (updates.metadata !== undefined) {
|
|
548
|
+
// Shallow merge with existing metadata
|
|
549
|
+
const existing = row.metadata ? JSON.parse(row.metadata as string) : {};
|
|
550
|
+
partial.metadata = JSON.stringify({ ...existing, ...updates.metadata });
|
|
551
|
+
}
|
|
552
|
+
if (updates.team_instance !== undefined) {
|
|
553
|
+
partial.team_instance = updates.team_instance;
|
|
554
|
+
}
|
|
555
|
+
if (updates.cwd !== undefined) {
|
|
556
|
+
partial.cwd = updates.cwd;
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
store.setPartialRow('agents', agentId, partial);
|
|
537
560
|
|
|
538
561
|
const agent = rowToAgent(store.getRow('agents', agentId));
|
|
539
562
|
notifyAgentChange(agentId, agent);
|
|
540
563
|
}
|
|
541
564
|
|
|
565
|
+
/**
|
|
566
|
+
* Update an agent's plan entries (persisted to SQLite via TinyBase).
|
|
567
|
+
* Convenience wrapper around updateAgentMetadata.
|
|
568
|
+
*/
|
|
569
|
+
function updateAgentPlan(
|
|
570
|
+
agentId: AgentId,
|
|
571
|
+
plan: Array<{ content: string; priority: string; status: string }>,
|
|
572
|
+
): void {
|
|
573
|
+
updateAgentMetadata(agentId, { plan });
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
|
|
542
577
|
/**
|
|
543
578
|
* Get task by ID
|
|
544
579
|
*/
|
|
@@ -947,8 +982,18 @@ export async function createEventStore(config: StoreConfig = {}): Promise<EventS
|
|
|
947
982
|
*/
|
|
948
983
|
async function close(): Promise<void> {
|
|
949
984
|
if (persister) {
|
|
985
|
+
// Stop auto-save first to prevent race conditions between
|
|
986
|
+
// auto-save callbacks and the explicit save/destroy sequence.
|
|
987
|
+
await persister.stopAutoSave();
|
|
950
988
|
await persister.save();
|
|
989
|
+
// Destroy the persister (removes store listeners) BEFORE closing the DB.
|
|
990
|
+
// The destroy callback is a no-op — we close the DB ourselves below
|
|
991
|
+
// after giving TinyBase's internal async queues time to drain.
|
|
951
992
|
persister.destroy();
|
|
993
|
+
// Allow any in-flight TinyBase microtasks to settle before closing
|
|
994
|
+
// the database connection. Without this, pending writes from store
|
|
995
|
+
// change listeners can race against db.close().
|
|
996
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
952
997
|
}
|
|
953
998
|
if (db) {
|
|
954
999
|
db.close();
|
|
@@ -1224,6 +1269,7 @@ export async function createEventStore(config: StoreConfig = {}): Promise<EventS
|
|
|
1224
1269
|
getAgent,
|
|
1225
1270
|
listAgents,
|
|
1226
1271
|
updateAgentPlan,
|
|
1272
|
+
updateAgentMetadata,
|
|
1227
1273
|
getTask,
|
|
1228
1274
|
listTasks,
|
|
1229
1275
|
getMessages,
|
|
@@ -1291,13 +1337,21 @@ function initializeTables(store: Store): void {
|
|
|
1291
1337
|
*/
|
|
1292
1338
|
function rebuildViews(store: Store): void {
|
|
1293
1339
|
// Preserve out-of-band agent fields that aren't derived from events.
|
|
1294
|
-
//
|
|
1295
|
-
// so
|
|
1296
|
-
const
|
|
1340
|
+
// These fields are written directly (not through events),
|
|
1341
|
+
// so they would be lost when we clear and replay.
|
|
1342
|
+
const OUT_OF_BAND_FIELDS = ['plan', 'name', 'metadata', 'cwd', 'team_instance'] as const;
|
|
1343
|
+
const savedOutOfBand = new Map<string, Record<string, string>>();
|
|
1297
1344
|
for (const rowId of store.getRowIds('agents')) {
|
|
1298
1345
|
const row = store.getRow('agents', rowId);
|
|
1299
|
-
|
|
1300
|
-
|
|
1346
|
+
const saved: Record<string, string> = {};
|
|
1347
|
+
for (const field of OUT_OF_BAND_FIELDS) {
|
|
1348
|
+
const val = row[field] as string | undefined;
|
|
1349
|
+
if (val && val !== '' && val !== '[]') {
|
|
1350
|
+
saved[field] = val;
|
|
1351
|
+
}
|
|
1352
|
+
}
|
|
1353
|
+
if (Object.keys(saved).length > 0) {
|
|
1354
|
+
savedOutOfBand.set(rowId, saved);
|
|
1301
1355
|
}
|
|
1302
1356
|
}
|
|
1303
1357
|
|
|
@@ -1358,10 +1412,10 @@ function rebuildViews(store: Store): void {
|
|
|
1358
1412
|
}
|
|
1359
1413
|
|
|
1360
1414
|
// Restore out-of-band agent fields preserved before the wipe
|
|
1361
|
-
for (const [agentId,
|
|
1415
|
+
for (const [agentId, fields] of savedOutOfBand) {
|
|
1362
1416
|
const row = store.getRow('agents', agentId);
|
|
1363
1417
|
if (row.id) {
|
|
1364
|
-
store.setPartialRow('agents', agentId,
|
|
1418
|
+
store.setPartialRow('agents', agentId, fields);
|
|
1365
1419
|
}
|
|
1366
1420
|
}
|
|
1367
1421
|
}
|
|
@@ -1383,8 +1437,8 @@ function applyEventToViews(
|
|
|
1383
1437
|
case 'spawn':
|
|
1384
1438
|
applySpawnEvent(store, event, notifyAgentChange);
|
|
1385
1439
|
break;
|
|
1386
|
-
case '
|
|
1387
|
-
|
|
1440
|
+
case 'stop':
|
|
1441
|
+
applyStopEvent(store, event, notifyAgentChange);
|
|
1388
1442
|
break;
|
|
1389
1443
|
case 'status':
|
|
1390
1444
|
applyStatusEvent(store, event, notifyAgentChange);
|
|
@@ -1431,6 +1485,7 @@ function applySpawnEvent(
|
|
|
1431
1485
|
task_id?: TaskId;
|
|
1432
1486
|
parent?: AgentId | null;
|
|
1433
1487
|
role?: string;
|
|
1488
|
+
team_instance?: string;
|
|
1434
1489
|
config?: Record<string, unknown>;
|
|
1435
1490
|
cwd?: string;
|
|
1436
1491
|
};
|
|
@@ -1451,6 +1506,7 @@ function applySpawnEvent(
|
|
|
1451
1506
|
|
|
1452
1507
|
store.setRow('agents', agentId, {
|
|
1453
1508
|
id: agentId,
|
|
1509
|
+
name: '',
|
|
1454
1510
|
session_id: payload.session_id,
|
|
1455
1511
|
provider_session_id: '',
|
|
1456
1512
|
parent: parent ?? '',
|
|
@@ -1460,9 +1516,11 @@ function applySpawnEvent(
|
|
|
1460
1516
|
task: payload.task,
|
|
1461
1517
|
task_id: payload.task_id ?? '',
|
|
1462
1518
|
role: payload.role ?? '',
|
|
1519
|
+
team_instance: payload.team_instance ?? '',
|
|
1463
1520
|
config: JSON.stringify(payload.config ?? {}),
|
|
1464
1521
|
cwd: payload.cwd ?? process.cwd(),
|
|
1465
1522
|
plan: '[]',
|
|
1523
|
+
metadata: '',
|
|
1466
1524
|
created_at: event.timestamp,
|
|
1467
1525
|
started_at: 0,
|
|
1468
1526
|
stopped_at: 0,
|
|
@@ -1474,9 +1532,9 @@ function applySpawnEvent(
|
|
|
1474
1532
|
}
|
|
1475
1533
|
|
|
1476
1534
|
/**
|
|
1477
|
-
* Apply
|
|
1535
|
+
* Apply stop event to agents view
|
|
1478
1536
|
*/
|
|
1479
|
-
function
|
|
1537
|
+
function applyStopEvent(
|
|
1480
1538
|
store: Store,
|
|
1481
1539
|
event: Event,
|
|
1482
1540
|
notify: (agentId: AgentId, agent: Agent | null) => void,
|
|
@@ -1618,6 +1676,7 @@ function applyTaskEvent(
|
|
|
1618
1676
|
description: string;
|
|
1619
1677
|
parent_task?: TaskId;
|
|
1620
1678
|
inputs?: Record<string, unknown>;
|
|
1679
|
+
tags?: string[];
|
|
1621
1680
|
retryPolicy?: unknown;
|
|
1622
1681
|
};
|
|
1623
1682
|
store.setRow('tasks', taskId, {
|
|
@@ -1628,6 +1687,7 @@ function applyTaskEvent(
|
|
|
1628
1687
|
parent_task: details.parent_task ?? '',
|
|
1629
1688
|
subtasks: JSON.stringify([]),
|
|
1630
1689
|
blockers: JSON.stringify([]),
|
|
1690
|
+
tags: details.tags ? JSON.stringify(details.tags) : '',
|
|
1631
1691
|
created_at: event.timestamp,
|
|
1632
1692
|
started_at: 0,
|
|
1633
1693
|
completed_at: 0,
|
|
@@ -1674,10 +1734,15 @@ function applyTaskEvent(
|
|
|
1674
1734
|
break;
|
|
1675
1735
|
}
|
|
1676
1736
|
}
|
|
1677
|
-
|
|
1737
|
+
const updates: Record<string, string | number | boolean> = {
|
|
1678
1738
|
assigned_agent: '',
|
|
1679
1739
|
agent_history: JSON.stringify(history),
|
|
1680
|
-
}
|
|
1740
|
+
};
|
|
1741
|
+
// Reset to pending if task was only assigned (not yet started)
|
|
1742
|
+
if (existing.status === 'assigned') {
|
|
1743
|
+
updates.status = 'pending';
|
|
1744
|
+
}
|
|
1745
|
+
store.setPartialRow('tasks', taskId, updates);
|
|
1681
1746
|
break;
|
|
1682
1747
|
}
|
|
1683
1748
|
case 'status_change': {
|
|
@@ -1800,6 +1865,7 @@ function rowToAgent(row: Record<string, unknown>): Agent {
|
|
|
1800
1865
|
const stopReason = row.stop_reason as string;
|
|
1801
1866
|
return {
|
|
1802
1867
|
id: row.id as AgentId,
|
|
1868
|
+
name: (row.name as string) || undefined,
|
|
1803
1869
|
session_id: row.session_id as string,
|
|
1804
1870
|
provider_session_id: (row.provider_session_id as string) || undefined,
|
|
1805
1871
|
parent: (row.parent as string) || null,
|
|
@@ -1809,9 +1875,11 @@ function rowToAgent(row: Record<string, unknown>): Agent {
|
|
|
1809
1875
|
task: row.task as string,
|
|
1810
1876
|
task_id: (row.task_id as string) || undefined,
|
|
1811
1877
|
role: (row.role as string) || undefined,
|
|
1878
|
+
team_instance: (row.team_instance as string) || undefined,
|
|
1812
1879
|
config: row.config ? JSON.parse(row.config as string) : {},
|
|
1813
1880
|
cwd: (row.cwd as string) || process.cwd(),
|
|
1814
1881
|
plan: row.plan ? JSON.parse(row.plan as string) : [],
|
|
1882
|
+
metadata: row.metadata ? JSON.parse(row.metadata as string) : undefined,
|
|
1815
1883
|
created_at: row.created_at as Timestamp,
|
|
1816
1884
|
started_at: (row.started_at as number) || undefined,
|
|
1817
1885
|
stopped_at: (row.stopped_at as number) || undefined,
|
|
@@ -1839,6 +1907,7 @@ function rowToTask(row: Record<string, unknown>): Task {
|
|
|
1839
1907
|
outputs: row.outputs ? JSON.parse(row.outputs as string) : undefined,
|
|
1840
1908
|
artifacts: row.artifacts ? JSON.parse(row.artifacts as string) : undefined,
|
|
1841
1909
|
agent_history: row.agent_history ? JSON.parse(row.agent_history as string) : undefined,
|
|
1910
|
+
tags: row.tags ? JSON.parse(row.tags as string) : undefined,
|
|
1842
1911
|
retryPolicy: row.retry_policy ? JSON.parse(row.retry_policy as string) : undefined,
|
|
1843
1912
|
retryState: row.retry_state ? JSON.parse(row.retry_state as string) : undefined,
|
|
1844
1913
|
};
|
package/src/store/instance.ts
CHANGED
|
@@ -221,8 +221,8 @@ export interface ResolvedInstance {
|
|
|
221
221
|
// Constants
|
|
222
222
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
223
223
|
|
|
224
|
-
/** Default base directory */
|
|
225
|
-
export const DEFAULT_BASE_DIR = path.join(os.homedir(), '.multiagent');
|
|
224
|
+
/** Default base directory (override with MACRO_AGENT_HOME env var) */
|
|
225
|
+
export const DEFAULT_BASE_DIR = process.env.MACRO_AGENT_HOME || path.join(os.homedir(), '.multiagent');
|
|
226
226
|
|
|
227
227
|
/** Default namespace */
|
|
228
228
|
export const DEFAULT_NAMESPACE = 'default';
|
|
@@ -28,6 +28,8 @@ export interface AgentConfig {
|
|
|
28
28
|
// Agent record in materialized view
|
|
29
29
|
export interface Agent {
|
|
30
30
|
id: AgentId;
|
|
31
|
+
/** Optional display name (set via rename, not derived from events) */
|
|
32
|
+
name?: string;
|
|
31
33
|
session_id: SessionId;
|
|
32
34
|
/** Session ID from the underlying agent provider (e.g., Claude Code UUID for --resume) */
|
|
33
35
|
provider_session_id?: string;
|
|
@@ -38,12 +40,30 @@ export interface Agent {
|
|
|
38
40
|
task: string;
|
|
39
41
|
task_id?: TaskId;
|
|
40
42
|
role?: string;
|
|
43
|
+
/** Team instance ID this agent belongs to (set by TeamManager) */
|
|
44
|
+
team_instance?: string;
|
|
41
45
|
config: AgentConfig;
|
|
42
46
|
cwd: string;
|
|
43
47
|
plan: Array<{ content: string; priority: string; status: string }>;
|
|
48
|
+
/** Arbitrary metadata (persisted out-of-band, not derived from events) */
|
|
49
|
+
metadata?: Record<string, unknown>;
|
|
44
50
|
created_at: Timestamp;
|
|
45
51
|
started_at?: Timestamp;
|
|
46
52
|
stopped_at?: Timestamp;
|
|
47
53
|
/** Last time this agent emitted an event (for health monitoring) */
|
|
48
54
|
last_activity_at?: Timestamp;
|
|
49
55
|
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Partial update for agent metadata fields.
|
|
59
|
+
* All fields are optional — only provided fields are updated.
|
|
60
|
+
* `metadata` is merged (shallow) with existing metadata.
|
|
61
|
+
*/
|
|
62
|
+
export interface AgentMetadataUpdate {
|
|
63
|
+
name?: string;
|
|
64
|
+
plan?: Array<{ content: string; priority: string; status: string }>;
|
|
65
|
+
metadata?: Record<string, unknown>;
|
|
66
|
+
team_instance?: string;
|
|
67
|
+
/** Override the agent's working directory (e.g., to workspace worktree path) */
|
|
68
|
+
cwd?: string;
|
|
69
|
+
}
|