macro-agent 0.0.11 → 0.0.13
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/.macro-agent/teams/self-driving/prompts/grinder.md +27 -0
- package/.macro-agent/teams/self-driving/prompts/judge.md +27 -0
- package/.macro-agent/teams/self-driving/prompts/planner.md +33 -0
- package/.macro-agent/teams/self-driving/roles/grinder.yaml +17 -0
- package/.macro-agent/teams/self-driving/roles/judge.yaml +24 -0
- package/.macro-agent/teams/self-driving/roles/planner.yaml +18 -0
- package/.macro-agent/teams/self-driving/team.yaml +103 -0
- package/.macro-agent/teams/structured/prompts/developer.md +26 -0
- package/.macro-agent/teams/structured/prompts/lead.md +25 -0
- package/.macro-agent/teams/structured/prompts/reviewer.md +24 -0
- package/.macro-agent/teams/structured/roles/developer.yaml +12 -0
- package/.macro-agent/teams/structured/roles/lead.yaml +11 -0
- package/.macro-agent/teams/structured/roles/reviewer.yaml +19 -0
- package/.macro-agent/teams/structured/team.yaml +89 -0
- package/.sudocode/issues.jsonl +6 -0
- package/.sudocode/specs.jsonl +7 -0
- package/CLAUDE.md +110 -30
- package/README.md +60 -3
- package/dist/acp/macro-agent.d.ts +4 -0
- package/dist/acp/macro-agent.d.ts.map +1 -1
- package/dist/acp/macro-agent.js +50 -4
- package/dist/acp/macro-agent.js.map +1 -1
- package/dist/acp/session-mapper.d.ts +20 -1
- package/dist/acp/session-mapper.d.ts.map +1 -1
- package/dist/acp/session-mapper.js +90 -1
- package/dist/acp/session-mapper.js.map +1 -1
- package/dist/acp/types.d.ts +24 -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 +25 -1
- package/dist/agent/agent-manager.d.ts.map +1 -1
- package/dist/agent/agent-manager.js +93 -7
- package/dist/agent/agent-manager.js.map +1 -1
- package/dist/agent/types.d.ts +22 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/agent-detection/command-builder.d.ts +30 -0
- package/dist/agent-detection/command-builder.d.ts.map +1 -0
- package/dist/agent-detection/command-builder.js +71 -0
- package/dist/agent-detection/command-builder.js.map +1 -0
- package/dist/agent-detection/detector.d.ts +84 -0
- package/dist/agent-detection/detector.d.ts.map +1 -0
- package/dist/agent-detection/detector.js +240 -0
- package/dist/agent-detection/detector.js.map +1 -0
- package/dist/agent-detection/index.d.ts +12 -0
- package/dist/agent-detection/index.d.ts.map +1 -0
- package/dist/agent-detection/index.js +14 -0
- package/dist/agent-detection/index.js.map +1 -0
- package/dist/agent-detection/registry.d.ts +53 -0
- package/dist/agent-detection/registry.d.ts.map +1 -0
- package/dist/agent-detection/registry.js +177 -0
- package/dist/agent-detection/registry.js.map +1 -0
- package/dist/agent-detection/types.d.ts +121 -0
- package/dist/agent-detection/types.d.ts.map +1 -0
- package/dist/agent-detection/types.js +20 -0
- package/dist/agent-detection/types.js.map +1 -0
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +95 -0
- package/dist/api/server.js.map +1 -1
- package/dist/cli/index.js +29 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/mcp.js +38 -0
- package/dist/cli/mcp.js.map +1 -1
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +2 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/project-config.d.ts +46 -0
- package/dist/config/project-config.d.ts.map +1 -0
- package/dist/config/project-config.js +68 -0
- package/dist/config/project-config.js.map +1 -0
- package/dist/lifecycle/cascade.d.ts +1 -1
- package/dist/lifecycle/cascade.d.ts.map +1 -1
- package/dist/lifecycle/handlers/index.d.ts +4 -0
- package/dist/lifecycle/handlers/index.d.ts.map +1 -1
- package/dist/lifecycle/handlers/index.js +2 -0
- package/dist/lifecycle/handlers/index.js.map +1 -1
- package/dist/lifecycle/handlers/worker.d.ts +4 -0
- package/dist/lifecycle/handlers/worker.d.ts.map +1 -1
- package/dist/lifecycle/handlers/worker.js +35 -3
- package/dist/lifecycle/handlers/worker.js.map +1 -1
- package/dist/map/adapter/acp-over-map.d.ts.map +1 -1
- package/dist/map/adapter/acp-over-map.js +32 -2
- package/dist/map/adapter/acp-over-map.js.map +1 -1
- package/dist/map/adapter/event-translator.d.ts.map +1 -1
- package/dist/map/adapter/event-translator.js +1 -0
- package/dist/map/adapter/event-translator.js.map +1 -1
- package/dist/map/adapter/extensions/agent-detection.d.ts +49 -0
- package/dist/map/adapter/extensions/agent-detection.d.ts.map +1 -0
- package/dist/map/adapter/extensions/agent-detection.js +91 -0
- package/dist/map/adapter/extensions/agent-detection.js.map +1 -0
- package/dist/map/adapter/extensions/index.d.ts +10 -1
- package/dist/map/adapter/extensions/index.d.ts.map +1 -1
- package/dist/map/adapter/extensions/index.js +39 -0
- package/dist/map/adapter/extensions/index.js.map +1 -1
- package/dist/map/adapter/extensions/resume.d.ts +47 -0
- package/dist/map/adapter/extensions/resume.d.ts.map +1 -0
- package/dist/map/adapter/extensions/resume.js +59 -0
- package/dist/map/adapter/extensions/resume.js.map +1 -0
- package/dist/map/adapter/extensions/workspace-files.d.ts +42 -0
- package/dist/map/adapter/extensions/workspace-files.d.ts.map +1 -0
- package/dist/map/adapter/extensions/workspace-files.js +338 -0
- package/dist/map/adapter/extensions/workspace-files.js.map +1 -0
- package/dist/mcp/mcp-server.d.ts +6 -0
- package/dist/mcp/mcp-server.d.ts.map +1 -1
- package/dist/mcp/mcp-server.js +45 -0
- package/dist/mcp/mcp-server.js.map +1 -1
- package/dist/mcp/tools/claim_task.d.ts +35 -0
- package/dist/mcp/tools/claim_task.d.ts.map +1 -0
- package/dist/mcp/tools/claim_task.js +58 -0
- package/dist/mcp/tools/claim_task.js.map +1 -0
- package/dist/mcp/tools/done.d.ts +11 -2
- package/dist/mcp/tools/done.d.ts.map +1 -1
- package/dist/mcp/tools/done.js +15 -10
- package/dist/mcp/tools/done.js.map +1 -1
- package/dist/mcp/tools/list_claimable_tasks.d.ts +38 -0
- package/dist/mcp/tools/list_claimable_tasks.d.ts.map +1 -0
- package/dist/mcp/tools/list_claimable_tasks.js +63 -0
- package/dist/mcp/tools/list_claimable_tasks.js.map +1 -0
- package/dist/mcp/tools/unclaim_task.d.ts +31 -0
- package/dist/mcp/tools/unclaim_task.d.ts.map +1 -0
- package/dist/mcp/tools/unclaim_task.js +47 -0
- package/dist/mcp/tools/unclaim_task.js.map +1 -0
- package/dist/metrics/index.d.ts +2 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +2 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/metrics.d.ts +79 -0
- package/dist/metrics/metrics.d.ts.map +1 -0
- package/dist/metrics/metrics.js +166 -0
- package/dist/metrics/metrics.js.map +1 -0
- package/dist/roles/capabilities.d.ts +1 -0
- package/dist/roles/capabilities.d.ts.map +1 -1
- package/dist/roles/capabilities.js +3 -0
- package/dist/roles/capabilities.js.map +1 -1
- package/dist/roles/types.d.ts +1 -1
- package/dist/roles/types.d.ts.map +1 -1
- package/dist/router/message-router.d.ts +41 -0
- package/dist/router/message-router.d.ts.map +1 -1
- package/dist/router/message-router.js +136 -5
- package/dist/router/message-router.js.map +1 -1
- package/dist/store/event-store.d.ts +8 -1
- package/dist/store/event-store.d.ts.map +1 -1
- package/dist/store/event-store.js +120 -4
- package/dist/store/event-store.js.map +1 -1
- package/dist/store/types/agents.d.ts +1 -1
- 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/store/types/events.js.map +1 -1
- package/dist/store/types/index.d.ts +1 -0
- package/dist/store/types/index.d.ts.map +1 -1
- package/dist/store/types/index.js +1 -0
- package/dist/store/types/index.js.map +1 -1
- package/dist/store/types/sessions.d.ts +44 -0
- package/dist/store/types/sessions.d.ts.map +1 -0
- package/dist/store/types/sessions.js +9 -0
- package/dist/store/types/sessions.js.map +1 -0
- package/dist/store/types/tasks.d.ts +2 -0
- package/dist/store/types/tasks.d.ts.map +1 -1
- package/dist/task/backend/memory.d.ts +4 -1
- package/dist/task/backend/memory.d.ts.map +1 -1
- package/dist/task/backend/memory.js +81 -0
- package/dist/task/backend/memory.js.map +1 -1
- package/dist/task/backend/types.d.ts +30 -0
- package/dist/task/backend/types.d.ts.map +1 -1
- package/dist/task/backend/types.js.map +1 -1
- package/dist/teams/index.d.ts +4 -0
- package/dist/teams/index.d.ts.map +1 -0
- package/dist/teams/index.js +4 -0
- package/dist/teams/index.js.map +1 -0
- package/dist/teams/team-loader.d.ts +20 -0
- package/dist/teams/team-loader.d.ts.map +1 -0
- package/dist/teams/team-loader.js +293 -0
- package/dist/teams/team-loader.js.map +1 -0
- package/dist/teams/team-runtime.d.ts +139 -0
- package/dist/teams/team-runtime.d.ts.map +1 -0
- package/dist/teams/team-runtime.js +613 -0
- package/dist/teams/team-runtime.js.map +1 -0
- package/dist/teams/types.d.ts +266 -0
- package/dist/teams/types.d.ts.map +1 -0
- package/dist/teams/types.js +20 -0
- package/dist/teams/types.js.map +1 -0
- package/dist/workspace/dataplane-adapter.d.ts +1 -1
- package/dist/workspace/dataplane-adapter.d.ts.map +1 -1
- package/dist/workspace/dataplane-adapter.js +1 -1
- package/dist/workspace/dataplane-adapter.js.map +1 -1
- package/dist/workspace/index.d.ts +1 -1
- package/dist/workspace/index.d.ts.map +1 -1
- package/dist/workspace/strategies/index.d.ts +6 -0
- package/dist/workspace/strategies/index.d.ts.map +1 -0
- package/dist/workspace/strategies/index.js +5 -0
- package/dist/workspace/strategies/index.js.map +1 -0
- package/dist/workspace/strategies/optimistic.d.ts +26 -0
- package/dist/workspace/strategies/optimistic.d.ts.map +1 -0
- package/dist/workspace/strategies/optimistic.js +121 -0
- package/dist/workspace/strategies/optimistic.js.map +1 -0
- package/dist/workspace/strategies/queue.d.ts +26 -0
- package/dist/workspace/strategies/queue.d.ts.map +1 -0
- package/dist/workspace/strategies/queue.js +67 -0
- package/dist/workspace/strategies/queue.js.map +1 -0
- package/dist/workspace/strategies/registry.d.ts +37 -0
- package/dist/workspace/strategies/registry.d.ts.map +1 -0
- package/dist/workspace/strategies/registry.js +63 -0
- package/dist/workspace/strategies/registry.js.map +1 -0
- package/dist/workspace/strategies/trunk.d.ts +20 -0
- package/dist/workspace/strategies/trunk.d.ts.map +1 -0
- package/dist/workspace/strategies/trunk.js +108 -0
- package/dist/workspace/strategies/trunk.js.map +1 -0
- package/dist/workspace/strategies/types.d.ts +104 -0
- package/dist/workspace/strategies/types.d.ts.map +1 -0
- package/dist/workspace/strategies/types.js +11 -0
- package/dist/workspace/strategies/types.js.map +1 -0
- package/dist/workspace/types.d.ts +1 -1
- package/dist/workspace/types.d.ts.map +1 -1
- package/dist/workspace/workspace-manager.d.ts +1 -1
- package/dist/workspace/workspace-manager.d.ts.map +1 -1
- package/docs/implementation-details.md +1127 -0
- package/docs/implementation-summary.md +448 -0
- package/docs/plan-self-driving-support.md +433 -0
- package/docs/spec-self-driving-support.md +462 -0
- package/docs/team-templates.md +860 -0
- package/docs/teams.md +233 -0
- package/package.json +5 -3
- package/src/acp/__tests__/integration.test.ts +161 -1
- package/src/acp/__tests__/macro-agent.test.ts +95 -0
- package/src/acp/__tests__/session-persistence.test.ts +276 -0
- package/src/acp/macro-agent.ts +79 -7
- package/src/acp/session-mapper.ts +108 -1
- package/src/acp/types.ts +33 -1
- package/src/agent/agent-manager.ts +158 -6
- package/src/agent/types.ts +27 -0
- package/src/agent-detection/__tests__/command-builder.test.ts +336 -0
- package/src/agent-detection/__tests__/detector.test.ts +768 -0
- package/src/agent-detection/__tests__/registry.test.ts +254 -0
- package/src/agent-detection/command-builder.ts +90 -0
- package/src/agent-detection/detector.ts +307 -0
- package/src/agent-detection/index.ts +36 -0
- package/src/agent-detection/registry.ts +200 -0
- package/src/agent-detection/types.ts +184 -0
- package/src/api/server.ts +110 -0
- package/src/cli/index.ts +44 -0
- package/src/cli/mcp.ts +47 -0
- package/src/config/index.ts +9 -0
- package/src/config/project-config.ts +107 -0
- package/src/lifecycle/cascade.ts +1 -1
- package/src/lifecycle/handlers/index.ts +8 -0
- package/src/lifecycle/handlers/worker.ts +48 -3
- package/src/map/adapter/__tests__/extensions.test.ts +359 -0
- package/src/map/adapter/__tests__/workspace-files.test.ts +673 -0
- package/src/map/adapter/acp-over-map.ts +45 -2
- package/src/map/adapter/event-translator.ts +1 -0
- package/src/map/adapter/extensions/agent-detection.ts +201 -0
- package/src/map/adapter/extensions/index.ts +63 -0
- package/src/map/adapter/extensions/resume.ts +114 -0
- package/src/map/adapter/extensions/workspace-files.ts +449 -0
- package/src/mcp/mcp-server.ts +67 -0
- package/src/mcp/tools/claim_task.ts +86 -0
- package/src/mcp/tools/done.ts +24 -10
- package/src/mcp/tools/list_claimable_tasks.ts +93 -0
- package/src/mcp/tools/unclaim_task.ts +71 -0
- package/src/metrics/index.ts +9 -0
- package/src/metrics/metrics.ts +280 -0
- package/src/roles/capabilities.ts +3 -0
- package/src/roles/types.ts +2 -1
- package/src/router/__tests__/message-router.test.ts +561 -0
- package/src/router/message-router.ts +223 -6
- package/src/store/event-store.ts +151 -3
- package/src/store/types/agents.ts +1 -1
- package/src/store/types/events.ts +2 -1
- package/src/store/types/index.ts +1 -0
- package/src/store/types/sessions.ts +53 -0
- package/src/store/types/tasks.ts +3 -0
- package/src/task/backend/memory.ts +116 -0
- package/src/task/backend/types.ts +43 -0
- package/src/teams/__tests__/cross-subsystem.integration.test.ts +983 -0
- package/src/teams/__tests__/e2e/team-runtime.e2e.test.ts +553 -0
- package/src/teams/__tests__/team-system.test.ts +1280 -0
- package/src/teams/index.ts +13 -0
- package/src/teams/team-loader.ts +434 -0
- package/src/teams/team-runtime.ts +727 -0
- package/src/teams/types.ts +377 -0
- package/src/workspace/dataplane-adapter.ts +1 -1
- package/src/workspace/index.ts +1 -1
- package/src/workspace/strategies/index.ts +18 -0
- package/src/workspace/strategies/optimistic.ts +136 -0
- package/src/workspace/strategies/queue.ts +81 -0
- package/src/workspace/strategies/registry.ts +89 -0
- package/src/workspace/strategies/trunk.ts +123 -0
- package/src/workspace/strategies/types.ts +145 -0
- package/src/workspace/types.ts +1 -1
- package/src/workspace/workspace-manager.ts +1 -1
- package/.claude/settings.local.json +0 -59
- package/dist/map/utils/address-translation.d.ts +0 -99
- package/dist/map/utils/address-translation.d.ts.map +0 -1
- package/dist/map/utils/address-translation.js +0 -285
- package/dist/map/utils/address-translation.js.map +0 -1
- package/dist/map/utils/index.d.ts +0 -7
- package/dist/map/utils/index.d.ts.map +0 -1
- package/dist/map/utils/index.js +0 -7
- package/dist/map/utils/index.js.map +0 -1
- package/references/acp-factory-ref/CHANGELOG.md +0 -33
- package/references/acp-factory-ref/LICENSE +0 -21
- package/references/acp-factory-ref/README.md +0 -341
- package/references/acp-factory-ref/package-lock.json +0 -3102
- package/references/acp-factory-ref/package.json +0 -96
- package/references/acp-factory-ref/python/CHANGELOG.md +0 -33
- package/references/acp-factory-ref/python/LICENSE +0 -21
- package/references/acp-factory-ref/python/Makefile +0 -57
- package/references/acp-factory-ref/python/README.md +0 -253
- package/references/acp-factory-ref/python/pyproject.toml +0 -73
- package/references/acp-factory-ref/python/tests/__init__.py +0 -0
- package/references/acp-factory-ref/python/tests/e2e/__init__.py +0 -1
- package/references/acp-factory-ref/python/tests/e2e/test_codex_e2e.py +0 -349
- package/references/acp-factory-ref/python/tests/e2e/test_gemini_e2e.py +0 -165
- package/references/acp-factory-ref/python/tests/e2e/test_opencode_e2e.py +0 -296
- package/references/acp-factory-ref/python/tests/test_client_handler.py +0 -543
- package/references/acp-factory-ref/python/tests/test_pushable.py +0 -199
- package/references/claude-code-acp/.github/workflows/ci.yml +0 -45
- package/references/claude-code-acp/.github/workflows/publish.yml +0 -34
- package/references/claude-code-acp/.prettierrc.json +0 -4
- package/references/claude-code-acp/CHANGELOG.md +0 -249
- package/references/claude-code-acp/LICENSE +0 -222
- package/references/claude-code-acp/README.md +0 -53
- package/references/claude-code-acp/docs/RELEASES.md +0 -24
- package/references/claude-code-acp/eslint.config.js +0 -48
- package/references/claude-code-acp/package-lock.json +0 -4570
- package/references/claude-code-acp/package.json +0 -88
- package/references/claude-code-acp/scripts/release.sh +0 -119
- package/references/claude-code-acp/src/acp-agent.ts +0 -2065
- package/references/claude-code-acp/src/index.ts +0 -26
- package/references/claude-code-acp/src/lib.ts +0 -38
- package/references/claude-code-acp/src/mcp-server.ts +0 -911
- package/references/claude-code-acp/src/settings.ts +0 -522
- package/references/claude-code-acp/src/tests/.claude/commands/quick-math.md +0 -5
- package/references/claude-code-acp/src/tests/.claude/commands/say-hello.md +0 -6
- package/references/claude-code-acp/src/tests/acp-agent-fork.test.ts +0 -479
- package/references/claude-code-acp/src/tests/acp-agent.test.ts +0 -1502
- package/references/claude-code-acp/src/tests/extract-lines.test.ts +0 -103
- package/references/claude-code-acp/src/tests/fork-session.test.ts +0 -335
- package/references/claude-code-acp/src/tests/replace-and-calculate-location.test.ts +0 -334
- package/references/claude-code-acp/src/tests/settings.test.ts +0 -617
- package/references/claude-code-acp/src/tests/skills-options.test.ts +0 -187
- package/references/claude-code-acp/src/tests/tools.test.ts +0 -318
- package/references/claude-code-acp/src/tests/typescript-declarations.test.ts +0 -558
- package/references/claude-code-acp/src/tools.ts +0 -819
- package/references/claude-code-acp/src/utils.ts +0 -171
- package/references/claude-code-acp/tsconfig.json +0 -18
- package/references/claude-code-acp/vitest.config.ts +0 -19
- package/references/multi-agent-protocol/.sudocode/issues.jsonl +0 -111
- package/references/multi-agent-protocol/.sudocode/specs.jsonl +0 -13
- package/references/multi-agent-protocol/LICENSE +0 -21
- package/references/multi-agent-protocol/README.md +0 -113
- package/references/multi-agent-protocol/docs/00-design-specification.md +0 -496
- package/references/multi-agent-protocol/docs/01-open-questions.md +0 -1050
- package/references/multi-agent-protocol/docs/02-wire-protocol.md +0 -296
- package/references/multi-agent-protocol/docs/03-streaming-semantics.md +0 -252
- package/references/multi-agent-protocol/docs/04-error-handling.md +0 -231
- package/references/multi-agent-protocol/docs/05-connection-model.md +0 -244
- package/references/multi-agent-protocol/docs/06-visibility-permissions.md +0 -243
- package/references/multi-agent-protocol/docs/07-federation.md +0 -259
- package/references/multi-agent-protocol/docs/08-macro-agent-migration.md +0 -253
- package/references/multi-agent-protocol/docs/09-authentication.md +0 -680
- package/references/multi-agent-protocol/docs/10-mail-protocol.md +0 -553
- package/references/multi-agent-protocol/docs/agent-iam-integration.md +0 -877
- package/references/multi-agent-protocol/docs/agentic-mesh-integration-draft.md +0 -459
- package/references/multi-agent-protocol/docs/git-transport-draft.md +0 -251
- package/references/multi-agent-protocol/docs-site/Gemfile +0 -22
- package/references/multi-agent-protocol/docs-site/README.md +0 -82
- package/references/multi-agent-protocol/docs-site/_config.yml +0 -91
- package/references/multi-agent-protocol/docs-site/_includes/head_custom.html +0 -20
- package/references/multi-agent-protocol/docs-site/_sass/color_schemes/map.scss +0 -42
- package/references/multi-agent-protocol/docs-site/_sass/custom/custom.scss +0 -34
- package/references/multi-agent-protocol/docs-site/examples/full-integration.md +0 -510
- package/references/multi-agent-protocol/docs-site/examples/index.md +0 -138
- package/references/multi-agent-protocol/docs-site/examples/simple-chat.md +0 -282
- package/references/multi-agent-protocol/docs-site/examples/task-queue.md +0 -399
- package/references/multi-agent-protocol/docs-site/getting-started/index.md +0 -98
- package/references/multi-agent-protocol/docs-site/getting-started/installation.md +0 -219
- package/references/multi-agent-protocol/docs-site/getting-started/overview.md +0 -172
- package/references/multi-agent-protocol/docs-site/getting-started/quickstart.md +0 -237
- package/references/multi-agent-protocol/docs-site/index.md +0 -136
- package/references/multi-agent-protocol/docs-site/protocol/authentication.md +0 -391
- package/references/multi-agent-protocol/docs-site/protocol/connection-model.md +0 -376
- package/references/multi-agent-protocol/docs-site/protocol/design.md +0 -284
- package/references/multi-agent-protocol/docs-site/protocol/error-handling.md +0 -312
- package/references/multi-agent-protocol/docs-site/protocol/federation.md +0 -449
- package/references/multi-agent-protocol/docs-site/protocol/index.md +0 -129
- package/references/multi-agent-protocol/docs-site/protocol/permissions.md +0 -398
- package/references/multi-agent-protocol/docs-site/protocol/streaming.md +0 -353
- package/references/multi-agent-protocol/docs-site/protocol/wire-protocol.md +0 -369
- package/references/multi-agent-protocol/docs-site/sdk/api/agent.md +0 -357
- package/references/multi-agent-protocol/docs-site/sdk/api/client.md +0 -380
- package/references/multi-agent-protocol/docs-site/sdk/api/index.md +0 -62
- package/references/multi-agent-protocol/docs-site/sdk/api/server.md +0 -453
- package/references/multi-agent-protocol/docs-site/sdk/api/types.md +0 -468
- package/references/multi-agent-protocol/docs-site/sdk/guides/agent.md +0 -375
- package/references/multi-agent-protocol/docs-site/sdk/guides/authentication.md +0 -405
- package/references/multi-agent-protocol/docs-site/sdk/guides/client.md +0 -352
- package/references/multi-agent-protocol/docs-site/sdk/guides/index.md +0 -89
- package/references/multi-agent-protocol/docs-site/sdk/guides/server.md +0 -360
- package/references/multi-agent-protocol/docs-site/sdk/guides/testing.md +0 -446
- package/references/multi-agent-protocol/docs-site/sdk/guides/transports.md +0 -363
- package/references/multi-agent-protocol/docs-site/sdk/index.md +0 -206
- package/references/multi-agent-protocol/package-lock.json +0 -3886
- package/references/multi-agent-protocol/package.json +0 -56
- package/references/multi-agent-protocol/schema/meta.json +0 -467
- package/references/multi-agent-protocol/schema/schema.json +0 -2558
package/src/mcp/tools/done.ts
CHANGED
|
@@ -65,10 +65,16 @@ export interface DoneToolDeps {
|
|
|
65
65
|
/** Get merge queue for coordinating worker merges */
|
|
66
66
|
getMergeQueue?(): AllHandlerDeps["mergeQueue"];
|
|
67
67
|
};
|
|
68
|
+
/** Optional RoleRegistry for capability-based done() checks */
|
|
69
|
+
roleRegistry?: import("../../roles/types.js").RoleRegistry;
|
|
68
70
|
/** Optional MailService for recording completion turns */
|
|
69
71
|
mailService?: import("../../mail/mail-service.js").MailService;
|
|
70
72
|
/** Optional ConversationMap for agent-to-conversation lookup */
|
|
71
73
|
conversationMap?: import("../../mail/conversation-map.js").ConversationMap;
|
|
74
|
+
/** Optional integration strategy (from team config) */
|
|
75
|
+
integrationStrategy?: import("../../workspace/strategies/types.js").IntegrationStrategy;
|
|
76
|
+
/** Optional task mode from team config */
|
|
77
|
+
taskMode?: "push" | "pull";
|
|
72
78
|
}
|
|
73
79
|
|
|
74
80
|
// =============================================================================
|
|
@@ -76,11 +82,15 @@ export interface DoneToolDeps {
|
|
|
76
82
|
// =============================================================================
|
|
77
83
|
|
|
78
84
|
/**
|
|
79
|
-
* Check if an agent has the lifecycle.done capability
|
|
85
|
+
* Check if an agent has the lifecycle.done capability.
|
|
86
|
+
*
|
|
87
|
+
* Uses RoleRegistry for capability resolution, supporting both built-in
|
|
88
|
+
* roles and team-defined roles that extend them.
|
|
80
89
|
*/
|
|
81
90
|
export function hasLifecycleDoneCapability(
|
|
82
91
|
eventStore: EventStore,
|
|
83
|
-
agentId: string
|
|
92
|
+
agentId: string,
|
|
93
|
+
roleRegistry?: import("../../roles/types.js").RoleRegistry
|
|
84
94
|
): { hasCapability: boolean; role: string } {
|
|
85
95
|
// Get the agent to find their role
|
|
86
96
|
const agent = eventStore.getAgent(agentId);
|
|
@@ -88,13 +98,15 @@ export function hasLifecycleDoneCapability(
|
|
|
88
98
|
return { hasCapability: false, role: "unknown" };
|
|
89
99
|
}
|
|
90
100
|
|
|
91
|
-
// Get the agent's role (set at spawn time) or default to "worker"
|
|
92
|
-
// In the future, this should query the RoleRegistry for full capability lookup
|
|
93
101
|
const role = agent.role ?? "worker";
|
|
94
102
|
|
|
95
|
-
//
|
|
96
|
-
|
|
97
|
-
|
|
103
|
+
// Use RoleRegistry for capability lookup when available
|
|
104
|
+
if (roleRegistry) {
|
|
105
|
+
const hasCapability = roleRegistry.hasCapability(role, "lifecycle.done");
|
|
106
|
+
return { hasCapability, role };
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Fallback: check base role via prefix match against known built-in roles
|
|
98
110
|
const rolesWithDoneCapability = new Set([
|
|
99
111
|
"worker",
|
|
100
112
|
"worker.resolver",
|
|
@@ -102,7 +114,6 @@ export function hasLifecycleDoneCapability(
|
|
|
102
114
|
"monitor",
|
|
103
115
|
]);
|
|
104
116
|
|
|
105
|
-
// Check exact match or prefix match
|
|
106
117
|
const hasCapability =
|
|
107
118
|
rolesWithDoneCapability.has(role) ||
|
|
108
119
|
rolesWithDoneCapability.has(role.split(".")[0]);
|
|
@@ -162,7 +173,7 @@ export function createDoneHandler(context: ToolContext, deps: DoneToolDeps) {
|
|
|
162
173
|
details?: Record<string, unknown>;
|
|
163
174
|
task_id?: string;
|
|
164
175
|
}): Promise<DoneResult> => {
|
|
165
|
-
const { eventStore, agentManager, messageRouter, taskManager, workspaceManager, mailService, conversationMap } = deps;
|
|
176
|
+
const { eventStore, agentManager, messageRouter, taskManager, workspaceManager, roleRegistry, mailService, conversationMap } = deps;
|
|
166
177
|
|
|
167
178
|
// ─────────────────────────────────────────────────────────────────────────
|
|
168
179
|
// Step 1: Check capability
|
|
@@ -170,7 +181,8 @@ export function createDoneHandler(context: ToolContext, deps: DoneToolDeps) {
|
|
|
170
181
|
|
|
171
182
|
const { hasCapability, role } = hasLifecycleDoneCapability(
|
|
172
183
|
eventStore,
|
|
173
|
-
context.agent_id
|
|
184
|
+
context.agent_id,
|
|
185
|
+
roleRegistry
|
|
174
186
|
);
|
|
175
187
|
|
|
176
188
|
if (!hasCapability) {
|
|
@@ -286,6 +298,8 @@ export function createDoneHandler(context: ToolContext, deps: DoneToolDeps) {
|
|
|
286
298
|
getWorkspacePath: workspaceManager
|
|
287
299
|
? (agentId: string) => workspaceManager.getWorkspace(agentId)?.path
|
|
288
300
|
: undefined,
|
|
301
|
+
integrationStrategy: deps.integrationStrategy,
|
|
302
|
+
taskMode: deps.taskMode,
|
|
289
303
|
};
|
|
290
304
|
|
|
291
305
|
const handlerResult = await dispatchDone(
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* list_claimable_tasks() MCP Tool
|
|
3
|
+
*
|
|
4
|
+
* Lists tasks available for claiming. Allows agents to preview
|
|
5
|
+
* what's in the task pool before claiming.
|
|
6
|
+
*
|
|
7
|
+
* @module mcp/tools/list_claimable_tasks
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
import type { TaskBackend, ClaimFilter, ExtendedTask } from "../../task/backend/types.js";
|
|
12
|
+
import type { ToolContext } from "../types.js";
|
|
13
|
+
|
|
14
|
+
// =============================================================================
|
|
15
|
+
// Schema
|
|
16
|
+
// =============================================================================
|
|
17
|
+
|
|
18
|
+
export const ListClaimableTasksSchema = {
|
|
19
|
+
tags: z
|
|
20
|
+
.array(z.string())
|
|
21
|
+
.optional()
|
|
22
|
+
.describe("Only list tasks with at least one matching tag"),
|
|
23
|
+
root_tasks_only: z
|
|
24
|
+
.boolean()
|
|
25
|
+
.optional()
|
|
26
|
+
.describe("Only list root tasks (no parent)"),
|
|
27
|
+
limit: z
|
|
28
|
+
.number()
|
|
29
|
+
.optional()
|
|
30
|
+
.describe("Maximum number of tasks to return (default: 20)"),
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
// =============================================================================
|
|
34
|
+
// Handler
|
|
35
|
+
// =============================================================================
|
|
36
|
+
|
|
37
|
+
export interface ListClaimableTasksDeps {
|
|
38
|
+
taskBackend: TaskBackend;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function createListClaimableTasksHandler(
|
|
42
|
+
_context: ToolContext,
|
|
43
|
+
deps: ListClaimableTasksDeps
|
|
44
|
+
) {
|
|
45
|
+
return async (args: {
|
|
46
|
+
tags?: string[];
|
|
47
|
+
root_tasks_only?: boolean;
|
|
48
|
+
limit?: number;
|
|
49
|
+
}): Promise<{
|
|
50
|
+
tasks: ExtendedTask[];
|
|
51
|
+
count: number;
|
|
52
|
+
message: string;
|
|
53
|
+
}> => {
|
|
54
|
+
if (!deps.taskBackend.listClaimable) {
|
|
55
|
+
return {
|
|
56
|
+
tasks: [],
|
|
57
|
+
count: 0,
|
|
58
|
+
message: "Task backend does not support listClaimable operations",
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const filter: ClaimFilter = {};
|
|
63
|
+
if (args.tags) filter.tags = args.tags;
|
|
64
|
+
if (args.root_tasks_only) filter.rootTasksOnly = args.root_tasks_only;
|
|
65
|
+
|
|
66
|
+
let tasks = await deps.taskBackend.listClaimable(filter);
|
|
67
|
+
|
|
68
|
+
const limit = args.limit ?? 20;
|
|
69
|
+
if (tasks.length > limit) {
|
|
70
|
+
tasks = tasks.slice(0, limit);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return {
|
|
74
|
+
tasks,
|
|
75
|
+
count: tasks.length,
|
|
76
|
+
message:
|
|
77
|
+
tasks.length > 0
|
|
78
|
+
? `Found ${tasks.length} claimable task(s)`
|
|
79
|
+
: "No claimable tasks available",
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// =============================================================================
|
|
85
|
+
// Tool Info
|
|
86
|
+
// =============================================================================
|
|
87
|
+
|
|
88
|
+
export const LIST_CLAIMABLE_TASKS_TOOL_INFO = {
|
|
89
|
+
name: "list_claimable_tasks",
|
|
90
|
+
description:
|
|
91
|
+
"List tasks available for claiming. Shows pending, unblocked, unassigned tasks. Requires task.claim capability.",
|
|
92
|
+
schema: ListClaimableTasksSchema,
|
|
93
|
+
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* unclaim_task() MCP Tool
|
|
3
|
+
*
|
|
4
|
+
* Allows agents with `task.claim` capability to release a claimed task
|
|
5
|
+
* back to the pending pool.
|
|
6
|
+
*
|
|
7
|
+
* @module mcp/tools/unclaim_task
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
import type { TaskBackend } from "../../task/backend/types.js";
|
|
12
|
+
import type { ToolContext } from "../types.js";
|
|
13
|
+
|
|
14
|
+
// =============================================================================
|
|
15
|
+
// Schema
|
|
16
|
+
// =============================================================================
|
|
17
|
+
|
|
18
|
+
export const UnclaimTaskSchema = {
|
|
19
|
+
task_id: z.string().describe("ID of the task to unclaim"),
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
// =============================================================================
|
|
23
|
+
// Handler
|
|
24
|
+
// =============================================================================
|
|
25
|
+
|
|
26
|
+
export interface UnclaimTaskDeps {
|
|
27
|
+
taskBackend: TaskBackend;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function createUnclaimTaskHandler(
|
|
31
|
+
_context: ToolContext,
|
|
32
|
+
deps: UnclaimTaskDeps
|
|
33
|
+
) {
|
|
34
|
+
return async (args: {
|
|
35
|
+
task_id: string;
|
|
36
|
+
}): Promise<{
|
|
37
|
+
success: boolean;
|
|
38
|
+
message: string;
|
|
39
|
+
}> => {
|
|
40
|
+
if (!deps.taskBackend.unclaim) {
|
|
41
|
+
return {
|
|
42
|
+
success: false,
|
|
43
|
+
message: "Task backend does not support unclaim operations",
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
try {
|
|
48
|
+
await deps.taskBackend.unclaim(args.task_id);
|
|
49
|
+
return {
|
|
50
|
+
success: true,
|
|
51
|
+
message: `Task ${args.task_id} unclaimed and returned to pending pool`,
|
|
52
|
+
};
|
|
53
|
+
} catch (error) {
|
|
54
|
+
return {
|
|
55
|
+
success: false,
|
|
56
|
+
message: `Failed to unclaim task: ${error instanceof Error ? error.message : String(error)}`,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// =============================================================================
|
|
63
|
+
// Tool Info
|
|
64
|
+
// =============================================================================
|
|
65
|
+
|
|
66
|
+
export const UNCLAIM_TASK_TOOL_INFO = {
|
|
67
|
+
name: "unclaim_task",
|
|
68
|
+
description:
|
|
69
|
+
"Release a claimed task back to the pending pool so another agent can pick it up. Requires task.claim capability.",
|
|
70
|
+
schema: UnclaimTaskSchema,
|
|
71
|
+
};
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metrics Module
|
|
3
|
+
*
|
|
4
|
+
* Computes throughput, utilization, and error metrics from EventStore data.
|
|
5
|
+
* No new events needed — aggregates existing spawn, terminate, task, and
|
|
6
|
+
* status events.
|
|
7
|
+
*
|
|
8
|
+
* @module metrics/metrics
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { EventStore } from "../store/event-store.js";
|
|
12
|
+
import type { Agent } from "../store/types/index.js";
|
|
13
|
+
|
|
14
|
+
// =============================================================================
|
|
15
|
+
// Types
|
|
16
|
+
// =============================================================================
|
|
17
|
+
|
|
18
|
+
export interface ThroughputMetrics {
|
|
19
|
+
/** Tasks completed in the time window */
|
|
20
|
+
tasksCompleted: number;
|
|
21
|
+
|
|
22
|
+
/** Tasks failed in the time window */
|
|
23
|
+
tasksFailed: number;
|
|
24
|
+
|
|
25
|
+
/** Total tasks created in the time window */
|
|
26
|
+
tasksCreated: number;
|
|
27
|
+
|
|
28
|
+
/** Average completion time in ms (completed tasks only) */
|
|
29
|
+
avgCompletionTimeMs: number | null;
|
|
30
|
+
|
|
31
|
+
/** Tasks per minute (completed) */
|
|
32
|
+
completedPerMinute: number;
|
|
33
|
+
|
|
34
|
+
/** Time window start */
|
|
35
|
+
windowStart: number;
|
|
36
|
+
|
|
37
|
+
/** Time window end */
|
|
38
|
+
windowEnd: number;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface UtilizationMetrics {
|
|
42
|
+
/** Currently running agents */
|
|
43
|
+
activeAgents: number;
|
|
44
|
+
|
|
45
|
+
/** Total agents spawned in the time window */
|
|
46
|
+
totalSpawned: number;
|
|
47
|
+
|
|
48
|
+
/** Total agents stopped in the time window */
|
|
49
|
+
totalStopped: number;
|
|
50
|
+
|
|
51
|
+
/** Agents by role */
|
|
52
|
+
agentsByRole: Record<string, number>;
|
|
53
|
+
|
|
54
|
+
/** Agents by state */
|
|
55
|
+
agentsByState: Record<string, number>;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface ErrorMetrics {
|
|
59
|
+
/** Total errors in the time window */
|
|
60
|
+
totalErrors: number;
|
|
61
|
+
|
|
62
|
+
/** Errors by type */
|
|
63
|
+
errorsByType: Record<string, number>;
|
|
64
|
+
|
|
65
|
+
/** Recent errors (last N) */
|
|
66
|
+
recentErrors: ErrorEntry[];
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export interface ErrorEntry {
|
|
70
|
+
/** Timestamp */
|
|
71
|
+
timestamp: number;
|
|
72
|
+
|
|
73
|
+
/** Agent ID */
|
|
74
|
+
agentId: string;
|
|
75
|
+
|
|
76
|
+
/** Error type/category */
|
|
77
|
+
type: string;
|
|
78
|
+
|
|
79
|
+
/** Error summary */
|
|
80
|
+
summary: string;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// =============================================================================
|
|
84
|
+
// Implementation
|
|
85
|
+
// =============================================================================
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Compute throughput metrics for a time window.
|
|
89
|
+
*
|
|
90
|
+
* @param eventStore - EventStore to query
|
|
91
|
+
* @param windowMs - Time window in milliseconds (default: 5 minutes)
|
|
92
|
+
*/
|
|
93
|
+
export function getThroughputMetrics(
|
|
94
|
+
eventStore: EventStore,
|
|
95
|
+
windowMs: number = 5 * 60 * 1000
|
|
96
|
+
): ThroughputMetrics {
|
|
97
|
+
const now = Date.now();
|
|
98
|
+
const windowStart = now - windowMs;
|
|
99
|
+
|
|
100
|
+
const taskEvents = eventStore.query({
|
|
101
|
+
type: "task",
|
|
102
|
+
after: windowStart,
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
let tasksCompleted = 0;
|
|
106
|
+
let tasksFailed = 0;
|
|
107
|
+
let tasksCreated = 0;
|
|
108
|
+
let totalCompletionTimeMs = 0;
|
|
109
|
+
let completedWithTime = 0;
|
|
110
|
+
|
|
111
|
+
for (const event of taskEvents) {
|
|
112
|
+
const action = event.payload?.action as string | undefined;
|
|
113
|
+
|
|
114
|
+
if (action === "created") {
|
|
115
|
+
tasksCreated++;
|
|
116
|
+
} else if (action === "completed") {
|
|
117
|
+
tasksCompleted++;
|
|
118
|
+
|
|
119
|
+
// Try to compute completion time
|
|
120
|
+
const taskId = event.payload?.task_id as string | undefined;
|
|
121
|
+
if (taskId) {
|
|
122
|
+
const task = eventStore.getTask(taskId);
|
|
123
|
+
if (task?.created_at && task?.completed_at) {
|
|
124
|
+
totalCompletionTimeMs += task.completed_at - task.created_at;
|
|
125
|
+
completedWithTime++;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
} else if (action === "failed") {
|
|
129
|
+
tasksFailed++;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const windowMinutes = windowMs / 60000;
|
|
134
|
+
const completedPerMinute =
|
|
135
|
+
windowMinutes > 0 ? tasksCompleted / windowMinutes : 0;
|
|
136
|
+
|
|
137
|
+
return {
|
|
138
|
+
tasksCompleted,
|
|
139
|
+
tasksFailed,
|
|
140
|
+
tasksCreated,
|
|
141
|
+
avgCompletionTimeMs:
|
|
142
|
+
completedWithTime > 0
|
|
143
|
+
? Math.round(totalCompletionTimeMs / completedWithTime)
|
|
144
|
+
: null,
|
|
145
|
+
completedPerMinute: Math.round(completedPerMinute * 100) / 100,
|
|
146
|
+
windowStart,
|
|
147
|
+
windowEnd: now,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Compute utilization metrics (current snapshot + window).
|
|
153
|
+
*
|
|
154
|
+
* @param eventStore - EventStore to query
|
|
155
|
+
* @param windowMs - Time window for spawn/stop counts (default: 5 minutes)
|
|
156
|
+
*/
|
|
157
|
+
export function getUtilizationMetrics(
|
|
158
|
+
eventStore: EventStore,
|
|
159
|
+
windowMs: number = 5 * 60 * 1000
|
|
160
|
+
): UtilizationMetrics {
|
|
161
|
+
const now = Date.now();
|
|
162
|
+
const windowStart = now - windowMs;
|
|
163
|
+
|
|
164
|
+
// Current agents
|
|
165
|
+
const allAgents = eventStore.listAgents();
|
|
166
|
+
const activeAgents = allAgents.filter(
|
|
167
|
+
(a: Agent) => a.state === "running" || a.state === "spawning"
|
|
168
|
+
);
|
|
169
|
+
|
|
170
|
+
// Agents by role
|
|
171
|
+
const agentsByRole: Record<string, number> = {};
|
|
172
|
+
for (const agent of activeAgents) {
|
|
173
|
+
const role = agent.role ?? "unknown";
|
|
174
|
+
agentsByRole[role] = (agentsByRole[role] ?? 0) + 1;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Agents by state
|
|
178
|
+
const agentsByState: Record<string, number> = {};
|
|
179
|
+
for (const agent of allAgents) {
|
|
180
|
+
agentsByState[agent.state] = (agentsByState[agent.state] ?? 0) + 1;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Count spawn and terminate events in window
|
|
184
|
+
const spawnEvents = eventStore.query({
|
|
185
|
+
type: "spawn",
|
|
186
|
+
after: windowStart,
|
|
187
|
+
});
|
|
188
|
+
const terminateEvents = eventStore.query({
|
|
189
|
+
type: "terminate",
|
|
190
|
+
after: windowStart,
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
return {
|
|
194
|
+
activeAgents: activeAgents.length,
|
|
195
|
+
totalSpawned: spawnEvents.length,
|
|
196
|
+
totalStopped: terminateEvents.length,
|
|
197
|
+
agentsByRole,
|
|
198
|
+
agentsByState,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Compute error metrics for a time window.
|
|
204
|
+
*
|
|
205
|
+
* @param eventStore - EventStore to query
|
|
206
|
+
* @param windowMs - Time window in milliseconds (default: 30 minutes)
|
|
207
|
+
* @param maxRecent - Maximum recent errors to return (default: 20)
|
|
208
|
+
*/
|
|
209
|
+
export function getErrorMetrics(
|
|
210
|
+
eventStore: EventStore,
|
|
211
|
+
windowMs: number = 30 * 60 * 1000,
|
|
212
|
+
maxRecent: number = 20
|
|
213
|
+
): ErrorMetrics {
|
|
214
|
+
const now = Date.now();
|
|
215
|
+
const windowStart = now - windowMs;
|
|
216
|
+
|
|
217
|
+
// Query status events that indicate errors
|
|
218
|
+
const statusEvents = eventStore.query({
|
|
219
|
+
type: "status",
|
|
220
|
+
after: windowStart,
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
const errors: ErrorEntry[] = [];
|
|
224
|
+
const errorsByType: Record<string, number> = {};
|
|
225
|
+
|
|
226
|
+
for (const event of statusEvents) {
|
|
227
|
+
const statusType = event.payload?.status_type as string | undefined;
|
|
228
|
+
if (statusType !== "failed") continue;
|
|
229
|
+
|
|
230
|
+
const agentId =
|
|
231
|
+
(event.source as { agent_id?: string })?.agent_id ?? "unknown";
|
|
232
|
+
const summary =
|
|
233
|
+
(event.payload?.summary as string) ?? "Unknown error";
|
|
234
|
+
const errorType =
|
|
235
|
+
(event.payload?.details as Record<string, unknown>)?.signal as string ??
|
|
236
|
+
"agent_failed";
|
|
237
|
+
|
|
238
|
+
errors.push({
|
|
239
|
+
timestamp: event.timestamp,
|
|
240
|
+
agentId,
|
|
241
|
+
type: errorType,
|
|
242
|
+
summary,
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
errorsByType[errorType] = (errorsByType[errorType] ?? 0) + 1;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Also count task failures
|
|
249
|
+
const taskEvents = eventStore.query({
|
|
250
|
+
type: "task",
|
|
251
|
+
after: windowStart,
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
for (const event of taskEvents) {
|
|
255
|
+
if (event.payload?.action !== "failed") continue;
|
|
256
|
+
|
|
257
|
+
const agentId =
|
|
258
|
+
(event.source as { agent_id?: string })?.agent_id ?? "unknown";
|
|
259
|
+
const taskId = (event.payload?.task_id as string) ?? "unknown";
|
|
260
|
+
|
|
261
|
+
errors.push({
|
|
262
|
+
timestamp: event.timestamp,
|
|
263
|
+
agentId,
|
|
264
|
+
type: "task_failed",
|
|
265
|
+
summary: `Task ${taskId} failed`,
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
errorsByType["task_failed"] = (errorsByType["task_failed"] ?? 0) + 1;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Sort by timestamp descending and limit
|
|
272
|
+
errors.sort((a, b) => b.timestamp - a.timestamp);
|
|
273
|
+
const recentErrors = errors.slice(0, maxRecent);
|
|
274
|
+
|
|
275
|
+
return {
|
|
276
|
+
totalErrors: errors.length,
|
|
277
|
+
errorsByType,
|
|
278
|
+
recentErrors,
|
|
279
|
+
};
|
|
280
|
+
}
|
|
@@ -48,6 +48,7 @@ export const TASK_CAPABILITIES = {
|
|
|
48
48
|
ASSIGN: "task.assign" as const,
|
|
49
49
|
UPDATE: "task.update" as const,
|
|
50
50
|
CLOSE: "task.close" as const,
|
|
51
|
+
CLAIM: "task.claim" as const,
|
|
51
52
|
};
|
|
52
53
|
|
|
53
54
|
/** Execution capabilities */
|
|
@@ -101,6 +102,7 @@ export const ALL_CAPABILITIES: Set<Capability> = new Set([
|
|
|
101
102
|
TASK_CAPABILITIES.ASSIGN,
|
|
102
103
|
TASK_CAPABILITIES.UPDATE,
|
|
103
104
|
TASK_CAPABILITIES.CLOSE,
|
|
105
|
+
TASK_CAPABILITIES.CLAIM,
|
|
104
106
|
// Exec
|
|
105
107
|
EXEC_CAPABILITIES.COMMAND,
|
|
106
108
|
EXEC_CAPABILITIES.BUILD,
|
|
@@ -159,6 +161,7 @@ export const CAPABILITY_TOOL_MAP: CapabilityToolMap = {
|
|
|
159
161
|
[TASK_CAPABILITIES.ASSIGN]: ["sudocode_upsert_issue", "assign_task"],
|
|
160
162
|
[TASK_CAPABILITIES.UPDATE]: ["sudocode_upsert_issue", "update_task"],
|
|
161
163
|
[TASK_CAPABILITIES.CLOSE]: ["sudocode_upsert_issue", "close_task"],
|
|
164
|
+
[TASK_CAPABILITIES.CLAIM]: ["claim_task", "unclaim_task", "list_claimable_tasks"],
|
|
162
165
|
|
|
163
166
|
// Execution operations
|
|
164
167
|
[EXEC_CAPABILITIES.COMMAND]: ["bash"],
|