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
|
@@ -1,296 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
E2E tests for OpenCode agent integration.
|
|
3
|
-
|
|
4
|
-
These tests use the real OpenCode CLI and require:
|
|
5
|
-
1. OpenCode installed (curl -fsSL https://opencode.ai/install | bash)
|
|
6
|
-
2. OpenCode configured with a provider (Claude, OpenAI, Gemini, etc.)
|
|
7
|
-
|
|
8
|
-
Run with: RUN_E2E_TESTS=true pytest tests/e2e/test_opencode_e2e.py -v
|
|
9
|
-
"""
|
|
10
|
-
|
|
11
|
-
import os
|
|
12
|
-
import shutil
|
|
13
|
-
import tempfile
|
|
14
|
-
|
|
15
|
-
import pytest
|
|
16
|
-
|
|
17
|
-
from acp_factory import AgentFactory, AgentHandle, ExtendedSessionUpdate, Session
|
|
18
|
-
|
|
19
|
-
# Skip all tests if RUN_E2E_TESTS is not set
|
|
20
|
-
pytestmark = pytest.mark.skipif(
|
|
21
|
-
os.environ.get("RUN_E2E_TESTS") != "true",
|
|
22
|
-
reason="E2E tests require RUN_E2E_TESTS=true",
|
|
23
|
-
)
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
class TestOpenCodeAgent:
|
|
27
|
-
"""E2E tests for OpenCode agent."""
|
|
28
|
-
|
|
29
|
-
handle: AgentHandle | None = None
|
|
30
|
-
temp_dir: str | None = None
|
|
31
|
-
|
|
32
|
-
@pytest.fixture(autouse=True)
|
|
33
|
-
async def setup_and_teardown(self) -> None:
|
|
34
|
-
"""Set up and tear down for each test."""
|
|
35
|
-
# Create temp directory
|
|
36
|
-
self.temp_dir = tempfile.mkdtemp(prefix="opencode-e2e-")
|
|
37
|
-
|
|
38
|
-
yield
|
|
39
|
-
|
|
40
|
-
# Cleanup temp directory
|
|
41
|
-
if self.temp_dir and os.path.exists(self.temp_dir):
|
|
42
|
-
shutil.rmtree(self.temp_dir, ignore_errors=True)
|
|
43
|
-
|
|
44
|
-
@pytest.fixture(scope="class")
|
|
45
|
-
async def agent_handle(self) -> AgentHandle:
|
|
46
|
-
"""Spawn OpenCode agent once for the class."""
|
|
47
|
-
handle = await AgentFactory.spawn("opencode")
|
|
48
|
-
yield handle
|
|
49
|
-
await handle.close()
|
|
50
|
-
|
|
51
|
-
class TestAgentInitialization:
|
|
52
|
-
"""Tests for agent initialization."""
|
|
53
|
-
|
|
54
|
-
def test_should_have_opencode_registered_in_factory(self) -> None:
|
|
55
|
-
"""OpenCode should be registered in factory."""
|
|
56
|
-
config = AgentFactory.get_config("opencode")
|
|
57
|
-
assert config is not None
|
|
58
|
-
assert config.command == "opencode"
|
|
59
|
-
assert "acp" in config.args
|
|
60
|
-
|
|
61
|
-
@pytest.mark.asyncio
|
|
62
|
-
async def test_should_spawn_opencode_agent_successfully(
|
|
63
|
-
self, agent_handle: AgentHandle
|
|
64
|
-
) -> None:
|
|
65
|
-
"""Agent should spawn successfully."""
|
|
66
|
-
assert agent_handle is not None
|
|
67
|
-
assert agent_handle.capabilities is not None
|
|
68
|
-
|
|
69
|
-
@pytest.mark.asyncio
|
|
70
|
-
async def test_should_advertise_capabilities(
|
|
71
|
-
self, agent_handle: AgentHandle
|
|
72
|
-
) -> None:
|
|
73
|
-
"""Agent should advertise capabilities."""
|
|
74
|
-
print(f"OpenCode capabilities: {agent_handle.capabilities}")
|
|
75
|
-
assert agent_handle.capabilities is not None
|
|
76
|
-
|
|
77
|
-
class TestSessionManagement:
|
|
78
|
-
"""Tests for session management."""
|
|
79
|
-
|
|
80
|
-
@pytest.mark.asyncio
|
|
81
|
-
async def test_should_create_a_new_session(
|
|
82
|
-
self, agent_handle: AgentHandle
|
|
83
|
-
) -> None:
|
|
84
|
-
"""Should create a new session."""
|
|
85
|
-
temp_dir = tempfile.mkdtemp(prefix="opencode-session-")
|
|
86
|
-
try:
|
|
87
|
-
session = await agent_handle.create_session(temp_dir)
|
|
88
|
-
assert session is not None
|
|
89
|
-
assert session.id is not None
|
|
90
|
-
assert session.cwd == temp_dir
|
|
91
|
-
finally:
|
|
92
|
-
shutil.rmtree(temp_dir, ignore_errors=True)
|
|
93
|
-
|
|
94
|
-
@pytest.mark.asyncio
|
|
95
|
-
async def test_should_create_multiple_sessions(
|
|
96
|
-
self, agent_handle: AgentHandle
|
|
97
|
-
) -> None:
|
|
98
|
-
"""Should create multiple independent sessions."""
|
|
99
|
-
temp_dir = tempfile.mkdtemp(prefix="opencode-multi-")
|
|
100
|
-
try:
|
|
101
|
-
session1 = await agent_handle.create_session(temp_dir)
|
|
102
|
-
session2 = await agent_handle.create_session(temp_dir)
|
|
103
|
-
|
|
104
|
-
assert session1.id is not None
|
|
105
|
-
assert session2.id is not None
|
|
106
|
-
assert session1.id != session2.id
|
|
107
|
-
finally:
|
|
108
|
-
shutil.rmtree(temp_dir, ignore_errors=True)
|
|
109
|
-
|
|
110
|
-
class TestBasicPrompting:
|
|
111
|
-
"""Tests for basic prompting functionality."""
|
|
112
|
-
|
|
113
|
-
@pytest.mark.asyncio
|
|
114
|
-
async def test_should_respond_to_a_simple_prompt(
|
|
115
|
-
self, agent_handle: AgentHandle
|
|
116
|
-
) -> None:
|
|
117
|
-
"""Should respond to a simple prompt."""
|
|
118
|
-
temp_dir = tempfile.mkdtemp(prefix="opencode-prompt-")
|
|
119
|
-
try:
|
|
120
|
-
session = await agent_handle.create_session(temp_dir)
|
|
121
|
-
updates: list[ExtendedSessionUpdate] = []
|
|
122
|
-
|
|
123
|
-
async for update in session.prompt(
|
|
124
|
-
"What is 2 + 2? Reply with just the number."
|
|
125
|
-
):
|
|
126
|
-
updates.append(update)
|
|
127
|
-
|
|
128
|
-
# Should have received some updates
|
|
129
|
-
assert len(updates) > 0
|
|
130
|
-
|
|
131
|
-
# Check for agent message chunks
|
|
132
|
-
message_chunks = [
|
|
133
|
-
u for u in updates if u.get("sessionUpdate") == "agent_message_chunk"
|
|
134
|
-
]
|
|
135
|
-
assert len(message_chunks) > 0
|
|
136
|
-
finally:
|
|
137
|
-
shutil.rmtree(temp_dir, ignore_errors=True)
|
|
138
|
-
|
|
139
|
-
@pytest.mark.asyncio
|
|
140
|
-
async def test_should_handle_multi_turn_conversation(
|
|
141
|
-
self, agent_handle: AgentHandle
|
|
142
|
-
) -> None:
|
|
143
|
-
"""Should handle multi-turn conversation with context."""
|
|
144
|
-
temp_dir = tempfile.mkdtemp(prefix="opencode-multi-turn-")
|
|
145
|
-
try:
|
|
146
|
-
session = await agent_handle.create_session(temp_dir)
|
|
147
|
-
|
|
148
|
-
# First turn
|
|
149
|
-
updates1: list[ExtendedSessionUpdate] = []
|
|
150
|
-
async for update in session.prompt(
|
|
151
|
-
"Remember the word 'apple'. Just say 'I will remember apple'."
|
|
152
|
-
):
|
|
153
|
-
updates1.append(update)
|
|
154
|
-
assert len(updates1) > 0
|
|
155
|
-
|
|
156
|
-
# Second turn - recall
|
|
157
|
-
updates2: list[ExtendedSessionUpdate] = []
|
|
158
|
-
response_text = ""
|
|
159
|
-
async for update in session.prompt(
|
|
160
|
-
"What word did I ask you to remember? Just say the word."
|
|
161
|
-
):
|
|
162
|
-
updates2.append(update)
|
|
163
|
-
if update.get("sessionUpdate") == "agent_message_chunk":
|
|
164
|
-
content = update.get("content", {})
|
|
165
|
-
if isinstance(content, dict) and content.get("type") == "text":
|
|
166
|
-
response_text += content.get("text", "")
|
|
167
|
-
|
|
168
|
-
assert len(updates2) > 0
|
|
169
|
-
assert "apple" in response_text.lower()
|
|
170
|
-
finally:
|
|
171
|
-
shutil.rmtree(temp_dir, ignore_errors=True)
|
|
172
|
-
|
|
173
|
-
@pytest.mark.asyncio
|
|
174
|
-
async def test_should_handle_streaming_responses(
|
|
175
|
-
self, agent_handle: AgentHandle
|
|
176
|
-
) -> None:
|
|
177
|
-
"""Should handle streaming responses."""
|
|
178
|
-
temp_dir = tempfile.mkdtemp(prefix="opencode-stream-")
|
|
179
|
-
try:
|
|
180
|
-
session = await agent_handle.create_session(temp_dir)
|
|
181
|
-
updates: list[ExtendedSessionUpdate] = []
|
|
182
|
-
text_content = ""
|
|
183
|
-
|
|
184
|
-
async for update in session.prompt(
|
|
185
|
-
"Count from 1 to 5, each number on a new line."
|
|
186
|
-
):
|
|
187
|
-
updates.append(update)
|
|
188
|
-
if update.get("sessionUpdate") == "agent_message_chunk":
|
|
189
|
-
content = update.get("content", {})
|
|
190
|
-
if isinstance(content, dict) and content.get("type") == "text":
|
|
191
|
-
text_content += content.get("text", "")
|
|
192
|
-
|
|
193
|
-
# Should have multiple streaming chunks
|
|
194
|
-
message_chunks = [
|
|
195
|
-
u for u in updates if u.get("sessionUpdate") == "agent_message_chunk"
|
|
196
|
-
]
|
|
197
|
-
assert len(message_chunks) > 0
|
|
198
|
-
|
|
199
|
-
# Content should include numbers
|
|
200
|
-
assert any(str(n) in text_content for n in range(1, 6))
|
|
201
|
-
finally:
|
|
202
|
-
shutil.rmtree(temp_dir, ignore_errors=True)
|
|
203
|
-
|
|
204
|
-
class TestSessionProperties:
|
|
205
|
-
"""Tests for session properties."""
|
|
206
|
-
|
|
207
|
-
@pytest.mark.asyncio
|
|
208
|
-
async def test_should_have_modes_property(
|
|
209
|
-
self, agent_handle: AgentHandle
|
|
210
|
-
) -> None:
|
|
211
|
-
"""Session should have modes property."""
|
|
212
|
-
temp_dir = tempfile.mkdtemp(prefix="opencode-modes-")
|
|
213
|
-
try:
|
|
214
|
-
session = await agent_handle.create_session(temp_dir)
|
|
215
|
-
print(f"OpenCode session modes: {session.modes}")
|
|
216
|
-
assert session.modes is not None
|
|
217
|
-
finally:
|
|
218
|
-
shutil.rmtree(temp_dir, ignore_errors=True)
|
|
219
|
-
|
|
220
|
-
@pytest.mark.asyncio
|
|
221
|
-
async def test_should_have_models_property(
|
|
222
|
-
self, agent_handle: AgentHandle
|
|
223
|
-
) -> None:
|
|
224
|
-
"""Session should have models property."""
|
|
225
|
-
temp_dir = tempfile.mkdtemp(prefix="opencode-models-")
|
|
226
|
-
try:
|
|
227
|
-
session = await agent_handle.create_session(temp_dir)
|
|
228
|
-
print(f"OpenCode session models: {session.models}")
|
|
229
|
-
assert session.models is not None
|
|
230
|
-
finally:
|
|
231
|
-
shutil.rmtree(temp_dir, ignore_errors=True)
|
|
232
|
-
|
|
233
|
-
@pytest.mark.asyncio
|
|
234
|
-
async def test_should_track_is_processing_state(
|
|
235
|
-
self, agent_handle: AgentHandle
|
|
236
|
-
) -> None:
|
|
237
|
-
"""Session should track isProcessing state."""
|
|
238
|
-
temp_dir = tempfile.mkdtemp(prefix="opencode-processing-")
|
|
239
|
-
try:
|
|
240
|
-
session = await agent_handle.create_session(temp_dir)
|
|
241
|
-
|
|
242
|
-
# Initially not processing
|
|
243
|
-
assert session.is_processing is False
|
|
244
|
-
|
|
245
|
-
# Start a prompt and consume it
|
|
246
|
-
async for _ in session.prompt("Say hello"):
|
|
247
|
-
# During processing
|
|
248
|
-
pass
|
|
249
|
-
|
|
250
|
-
# After completion, should not be processing
|
|
251
|
-
assert session.is_processing is False
|
|
252
|
-
finally:
|
|
253
|
-
shutil.rmtree(temp_dir, ignore_errors=True)
|
|
254
|
-
|
|
255
|
-
class TestCapabilities:
|
|
256
|
-
"""Tests for agent capabilities."""
|
|
257
|
-
|
|
258
|
-
@pytest.mark.asyncio
|
|
259
|
-
async def test_should_check_load_session_capability(
|
|
260
|
-
self, agent_handle: AgentHandle
|
|
261
|
-
) -> None:
|
|
262
|
-
"""Should check loadSession capability."""
|
|
263
|
-
print(
|
|
264
|
-
f"OpenCode loadSession capability: {agent_handle.capabilities.get('loadSession')}"
|
|
265
|
-
)
|
|
266
|
-
assert "loadSession" in agent_handle.capabilities or True # May not be present
|
|
267
|
-
|
|
268
|
-
@pytest.mark.asyncio
|
|
269
|
-
async def test_should_check_fork_capability(
|
|
270
|
-
self, agent_handle: AgentHandle
|
|
271
|
-
) -> None:
|
|
272
|
-
"""Should check fork capability."""
|
|
273
|
-
session_caps = agent_handle.capabilities.get("sessionCapabilities", {})
|
|
274
|
-
print(f"OpenCode fork capability: {session_caps.get('fork')}")
|
|
275
|
-
assert agent_handle.capabilities is not None
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
class TestAllAgentsComparison:
|
|
279
|
-
"""Tests comparing all registered agents."""
|
|
280
|
-
|
|
281
|
-
def test_should_have_all_four_agents_registered(self) -> None:
|
|
282
|
-
"""All four agents should be registered."""
|
|
283
|
-
agents = AgentFactory.list_agents()
|
|
284
|
-
|
|
285
|
-
assert "claude-code" in agents
|
|
286
|
-
assert "codex" in agents
|
|
287
|
-
assert "gemini" in agents
|
|
288
|
-
assert "opencode" in agents
|
|
289
|
-
|
|
290
|
-
@pytest.mark.asyncio
|
|
291
|
-
async def test_should_spawn_opencode_agent_successfully(self) -> None:
|
|
292
|
-
"""Should spawn opencode agent successfully."""
|
|
293
|
-
handle = await AgentFactory.spawn("opencode")
|
|
294
|
-
assert handle is not None
|
|
295
|
-
assert handle.capabilities is not None
|
|
296
|
-
await handle.close()
|