macro-agent 0.1.0 → 0.1.1
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/specs.jsonl +4 -0
- package/CLAUDE.md +16 -14
- 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 +464 -183
- package/dist/agent/agent-manager.js.map +1 -1
- package/dist/agent/types.d.ts +1 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/api/server.d.ts +3 -0
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +37 -6
- package/dist/api/server.js.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 +127 -61
- package/dist/cli/acp.js.map +1 -1
- package/dist/cli/index.js +147 -15
- 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 +268 -181
- 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 +74 -7
- package/dist/config/project-config.d.ts.map +1 -1
- package/dist/config/project-config.js +123 -20
- package/dist/config/project-config.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 +10 -1
- package/dist/map/adapter/extensions/index.d.ts.map +1 -1
- package/dist/map/adapter/extensions/index.js +34 -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/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 +8 -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 +2 -0
- 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 +14 -0
- package/dist/mcp/mcp-server.d.ts.map +1 -1
- package/dist/mcp/mcp-server.js +113 -85
- package/dist/mcp/mcp-server.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/capabilities.d.ts +3 -1
- package/dist/roles/capabilities.d.ts.map +1 -1
- package/dist/roles/capabilities.js +17 -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 +6 -6
- 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/server/combined-server.d.ts +20 -0
- package/dist/server/combined-server.d.ts.map +1 -1
- package/dist/server/combined-server.js +107 -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 +69 -20
- package/dist/store/event-store.js.map +1 -1
- package/dist/store/types/agents.d.ts +18 -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/team-loader.d.ts +2 -2
- package/dist/teams/team-loader.js +3 -3
- package/dist/teams/team-loader.js.map +1 -1
- package/dist/teams/team-runtime.d.ts.map +1 -1
- package/dist/teams/team-runtime.js +2 -0
- package/dist/teams/team-runtime.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 +3 -3
- package/docs/troubleshooting.md +10 -11
- package/package.json +6 -4
- 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 +714 -261
- package/src/agent/types.ts +3 -1
- package/src/api/server.ts +41 -7
- 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 +130 -72
- package/src/cli/index.ts +120 -14
- package/src/cli/mcp.ts +311 -207
- package/src/cli/parse-args.ts +54 -0
- package/src/cli/stable-instance-id.ts +14 -0
- package/src/config/project-config.ts +190 -27
- package/src/lifecycle/__tests__/cascade-termination.test.ts +1 -1
- 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__/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 +60 -0
- package/src/map/adapter/extensions/mcp-bridge.ts +995 -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 +28 -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 +2 -0
- 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 +191 -100
- 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/capabilities.ts +17 -7
- package/src/roles/config-loader.ts +6 -6
- package/src/roles/registry.ts +2 -2
- package/src/server/__tests__/combined-server.test.ts +94 -21
- package/src/server/combined-server.ts +189 -33
- package/src/steering/__tests__/steering-integration.test.ts +1 -1
- 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 +80 -21
- package/src/store/types/agents.ts +15 -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__/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 +253 -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/__tests__/cross-subsystem.integration.test.ts +1 -1
- package/src/teams/team-loader.ts +3 -3
- package/src/teams/team-runtime.ts +2 -0
- 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
|
@@ -662,7 +662,7 @@ describe("Metrics ↔ EventStore Integration", () => {
|
|
|
662
662
|
payload: { agent_id: "grinder-1" },
|
|
663
663
|
} as unknown as Event);
|
|
664
664
|
events.push({
|
|
665
|
-
id: "e3", type: "
|
|
665
|
+
id: "e3", type: "stop", timestamp: now - 1000,
|
|
666
666
|
source: { agent_id: "grinder-1" },
|
|
667
667
|
payload: { reason: "completed" },
|
|
668
668
|
} as unknown as Event);
|
package/src/teams/team-loader.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Team Template Loader
|
|
3
3
|
*
|
|
4
|
-
* Reads .
|
|
4
|
+
* Reads .multiagent/teams/<name>/ directories, parses team.yaml,
|
|
5
5
|
* resolves role inheritance, loads prompts, and validates communication.
|
|
6
6
|
*
|
|
7
7
|
* @module teams/team-loader
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
// Constants
|
|
27
27
|
// =============================================================================
|
|
28
28
|
|
|
29
|
-
const TEAMS_DIR = ".
|
|
29
|
+
const TEAMS_DIR = ".multiagent/teams";
|
|
30
30
|
const MANIFEST_FILE = "team.yaml";
|
|
31
31
|
const ROLES_DIR = "roles";
|
|
32
32
|
const PROMPTS_DIR = "prompts";
|
|
@@ -40,7 +40,7 @@ const MCP_SERVERS_FILE = "mcp-servers.json";
|
|
|
40
40
|
/**
|
|
41
41
|
* Load a team template from disk and resolve all references.
|
|
42
42
|
*
|
|
43
|
-
* @param teamName - Team name (directory name under .
|
|
43
|
+
* @param teamName - Team name (directory name under .multiagent/teams/)
|
|
44
44
|
* @param roleRegistry - Role registry for resolving extends chains
|
|
45
45
|
* @param basePath - Project root (default: process.cwd())
|
|
46
46
|
* @returns Fully resolved TeamManifest
|
|
@@ -362,6 +362,8 @@ export class TeamRuntime {
|
|
|
362
362
|
if (strategyName) {
|
|
363
363
|
teamEnv.MACRO_INTEGRATION_STRATEGY = strategyName;
|
|
364
364
|
}
|
|
365
|
+
// Task backend config is propagated by AgentManager.buildMacroAgentMcp()
|
|
366
|
+
// from its taskBackend/openTasksSocketPath config options.
|
|
365
367
|
|
|
366
368
|
return {
|
|
367
369
|
...options,
|
package/test_fixtures/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Testing infrastructure for multi-agent orchestration scenarios.
|
|
4
4
|
|
|
5
|
-
>
|
|
5
|
+
> Multi-Agent Orchestration Testing Strategy
|
|
6
6
|
|
|
7
7
|
## Overview
|
|
8
8
|
|
|
@@ -26,8 +26,7 @@ test_fixtures/
|
|
|
26
26
|
│ │ └── typescript-project.ts
|
|
27
27
|
│ ├── repos/ # Repository utilities
|
|
28
28
|
│ │ └── temp-repo-factory.ts
|
|
29
|
-
│ └──
|
|
30
|
-
│ ├── specs.ts
|
|
29
|
+
│ └── opentasks/ # OpenTasks fixtures
|
|
31
30
|
│ └── issues.ts
|
|
32
31
|
│
|
|
33
32
|
├── harness/ # Test harness implementation
|
|
@@ -1,186 +1,44 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Project with
|
|
2
|
+
* Project Fixtures with Pre-configured Data
|
|
3
3
|
*
|
|
4
|
-
* Projects pre-configured with
|
|
5
|
-
*
|
|
6
|
-
* @see s-1zcx Multi-Agent Orchestration Testing Strategy
|
|
7
|
-
* @see i-7f2l Phase 4: Fixtures Library
|
|
4
|
+
* Projects pre-configured with dataplane for testing.
|
|
8
5
|
*/
|
|
9
6
|
|
|
10
|
-
import type { TempRepoOptions
|
|
7
|
+
import type { TempRepoOptions } from "../repos/types.js";
|
|
11
8
|
import { TYPESCRIPT_PROJECT } from "./typescript-project.js";
|
|
12
9
|
|
|
13
10
|
/**
|
|
14
|
-
*
|
|
15
|
-
*/
|
|
16
|
-
export const SAMPLE_SPECS: PartialSpec[] = [
|
|
17
|
-
{
|
|
18
|
-
id: "s-auth",
|
|
19
|
-
title: "User Authentication System",
|
|
20
|
-
description: `## Overview
|
|
21
|
-
Implement a secure user authentication system.
|
|
22
|
-
|
|
23
|
-
## Requirements
|
|
24
|
-
- Support email/password login
|
|
25
|
-
- JWT token management
|
|
26
|
-
- Session handling
|
|
27
|
-
|
|
28
|
-
## Acceptance Criteria
|
|
29
|
-
- Users can register with email/password
|
|
30
|
-
- Users can login and receive JWT
|
|
31
|
-
- Invalid credentials return 401`,
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
id: "s-api",
|
|
35
|
-
title: "REST API Design",
|
|
36
|
-
description: `## Overview
|
|
37
|
-
Design and implement REST API endpoints.
|
|
38
|
-
|
|
39
|
-
## Endpoints
|
|
40
|
-
- GET /users - List users
|
|
41
|
-
- POST /users - Create user
|
|
42
|
-
- GET /users/:id - Get user
|
|
43
|
-
- PUT /users/:id - Update user
|
|
44
|
-
- DELETE /users/:id - Delete user
|
|
45
|
-
|
|
46
|
-
## Standards
|
|
47
|
-
- Use JSON for request/response
|
|
48
|
-
- Follow REST conventions
|
|
49
|
-
- Include proper error handling`,
|
|
50
|
-
},
|
|
51
|
-
];
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Sample issues for testing
|
|
55
|
-
*/
|
|
56
|
-
export const SAMPLE_ISSUES: PartialIssue[] = [
|
|
57
|
-
{
|
|
58
|
-
id: "i-auth-login",
|
|
59
|
-
title: "Implement login endpoint",
|
|
60
|
-
implements: "s-auth",
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
id: "i-auth-jwt",
|
|
64
|
-
title: "Add JWT token generation",
|
|
65
|
-
implements: "s-auth",
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
id: "i-api-users",
|
|
69
|
-
title: "Create users CRUD endpoints",
|
|
70
|
-
implements: "s-api",
|
|
71
|
-
},
|
|
72
|
-
];
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* TypeScript project with sudocode specs and issues
|
|
11
|
+
* TypeScript project with dataplane enabled
|
|
76
12
|
*/
|
|
77
13
|
export const PROJECT_WITH_SPECS: TempRepoOptions = {
|
|
78
14
|
initialFiles: TYPESCRIPT_PROJECT,
|
|
79
15
|
withDataplane: true,
|
|
80
|
-
withSudocode: true,
|
|
81
|
-
sudocodeSpecs: SAMPLE_SPECS,
|
|
82
|
-
sudocodeIssues: SAMPLE_ISSUES,
|
|
83
16
|
};
|
|
84
17
|
|
|
85
18
|
/**
|
|
86
|
-
* Create project with
|
|
19
|
+
* Create project with dataplane and custom files
|
|
87
20
|
*/
|
|
88
21
|
export function createProjectWithSpecs(
|
|
89
|
-
specs: PartialSpec[],
|
|
90
|
-
issues: PartialIssue[],
|
|
91
22
|
initialFiles: Record<string, string> = TYPESCRIPT_PROJECT
|
|
92
23
|
): TempRepoOptions {
|
|
93
24
|
return {
|
|
94
25
|
initialFiles,
|
|
95
26
|
withDataplane: true,
|
|
96
|
-
withSudocode: true,
|
|
97
|
-
sudocodeSpecs: specs,
|
|
98
|
-
sudocodeIssues: issues,
|
|
99
27
|
};
|
|
100
28
|
}
|
|
101
29
|
|
|
102
30
|
/**
|
|
103
|
-
* Project with
|
|
31
|
+
* Project with dataplane and branches
|
|
104
32
|
*/
|
|
105
33
|
export const PROJECT_WITH_HIERARCHICAL_SPECS: TempRepoOptions = {
|
|
106
34
|
initialFiles: TYPESCRIPT_PROJECT,
|
|
107
35
|
withDataplane: true,
|
|
108
|
-
withSudocode: true,
|
|
109
|
-
sudocodeSpecs: [
|
|
110
|
-
{
|
|
111
|
-
id: "s-main",
|
|
112
|
-
title: "Main Feature",
|
|
113
|
-
description: "The main feature specification",
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
id: "s-sub1",
|
|
117
|
-
title: "Sub-feature 1",
|
|
118
|
-
description: "First sub-feature",
|
|
119
|
-
parent: "s-main",
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
id: "s-sub2",
|
|
123
|
-
title: "Sub-feature 2",
|
|
124
|
-
description: "Second sub-feature",
|
|
125
|
-
parent: "s-main",
|
|
126
|
-
},
|
|
127
|
-
],
|
|
128
|
-
sudocodeIssues: [
|
|
129
|
-
{
|
|
130
|
-
id: "i-main",
|
|
131
|
-
title: "Implement main feature",
|
|
132
|
-
implements: "s-main",
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
id: "i-sub1",
|
|
136
|
-
title: "Implement sub-feature 1",
|
|
137
|
-
implements: "s-sub1",
|
|
138
|
-
},
|
|
139
|
-
{
|
|
140
|
-
id: "i-sub2",
|
|
141
|
-
title: "Implement sub-feature 2",
|
|
142
|
-
implements: "s-sub2",
|
|
143
|
-
},
|
|
144
|
-
],
|
|
145
36
|
};
|
|
146
37
|
|
|
147
38
|
/**
|
|
148
|
-
* Project with
|
|
39
|
+
* Project with dataplane for dependency testing
|
|
149
40
|
*/
|
|
150
41
|
export const PROJECT_WITH_BLOCKED_ISSUES: TempRepoOptions = {
|
|
151
42
|
initialFiles: TYPESCRIPT_PROJECT,
|
|
152
43
|
withDataplane: true,
|
|
153
|
-
withSudocode: true,
|
|
154
|
-
sudocodeSpecs: [
|
|
155
|
-
{
|
|
156
|
-
id: "s-pipeline",
|
|
157
|
-
title: "Data Pipeline",
|
|
158
|
-
description: "Build data processing pipeline",
|
|
159
|
-
},
|
|
160
|
-
],
|
|
161
|
-
sudocodeIssues: [
|
|
162
|
-
{
|
|
163
|
-
id: "i-setup",
|
|
164
|
-
title: "Setup infrastructure",
|
|
165
|
-
implements: "s-pipeline",
|
|
166
|
-
},
|
|
167
|
-
{
|
|
168
|
-
id: "i-ingest",
|
|
169
|
-
title: "Implement data ingestion",
|
|
170
|
-
implements: "s-pipeline",
|
|
171
|
-
blockedBy: ["i-setup"],
|
|
172
|
-
},
|
|
173
|
-
{
|
|
174
|
-
id: "i-transform",
|
|
175
|
-
title: "Implement data transformation",
|
|
176
|
-
implements: "s-pipeline",
|
|
177
|
-
blockedBy: ["i-ingest"],
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
id: "i-output",
|
|
181
|
-
title: "Implement data output",
|
|
182
|
-
implements: "s-pipeline",
|
|
183
|
-
blockedBy: ["i-transform"],
|
|
184
|
-
},
|
|
185
|
-
],
|
|
186
44
|
};
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Temp Repo Factory exports
|
|
3
|
-
*
|
|
4
|
-
* @see s-1zcx Multi-Agent Orchestration Testing Strategy
|
|
5
3
|
*/
|
|
6
4
|
|
|
7
5
|
export * from "./types.js";
|
|
8
|
-
export { createTempRepo
|
|
6
|
+
export { createTempRepo } from "./temp-repo-factory.js";
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* TempRepoFactory - Creates temporary git repositories for testing
|
|
3
|
-
*
|
|
4
|
-
* @see s-1zcx Multi-Agent Orchestration Testing Strategy
|
|
5
3
|
*/
|
|
6
4
|
|
|
7
5
|
import * as fs from "fs";
|
|
@@ -29,9 +27,6 @@ export async function createTempRepo(
|
|
|
29
27
|
bare = false,
|
|
30
28
|
remoteOrigin,
|
|
31
29
|
withDataplane = false,
|
|
32
|
-
withSudocode = false,
|
|
33
|
-
sudocodeSpecs = [],
|
|
34
|
-
sudocodeIssues = [],
|
|
35
30
|
branches = [],
|
|
36
31
|
} = options;
|
|
37
32
|
|
|
@@ -123,17 +118,6 @@ export async function createTempRepo(
|
|
|
123
118
|
// Initialize dataplane schema (minimal for testing)
|
|
124
119
|
initializeDataplaneSchema(db);
|
|
125
120
|
|
|
126
|
-
if (withSudocode) {
|
|
127
|
-
initializeSudocodeSchema(db);
|
|
128
|
-
|
|
129
|
-
// Create specs and issues
|
|
130
|
-
for (const spec of sudocodeSpecs) {
|
|
131
|
-
createSpec(db, spec);
|
|
132
|
-
}
|
|
133
|
-
for (const issue of sudocodeIssues) {
|
|
134
|
-
createIssue(db, issue);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
121
|
}
|
|
138
122
|
|
|
139
123
|
// Build TempRepo object
|
|
@@ -313,103 +297,3 @@ function initializeDataplaneSchema(db: Database.Database): void {
|
|
|
313
297
|
`);
|
|
314
298
|
}
|
|
315
299
|
|
|
316
|
-
/**
|
|
317
|
-
* Initialize sudocode schema for testing
|
|
318
|
-
*/
|
|
319
|
-
function initializeSudocodeSchema(db: Database.Database): void {
|
|
320
|
-
db.exec(`
|
|
321
|
-
-- Specs table
|
|
322
|
-
CREATE TABLE IF NOT EXISTS sudocode_specs (
|
|
323
|
-
id TEXT PRIMARY KEY,
|
|
324
|
-
title TEXT NOT NULL,
|
|
325
|
-
description TEXT,
|
|
326
|
-
priority INTEGER DEFAULT 2,
|
|
327
|
-
tags TEXT,
|
|
328
|
-
created_at INTEGER DEFAULT (unixepoch() * 1000),
|
|
329
|
-
updated_at INTEGER DEFAULT (unixepoch() * 1000)
|
|
330
|
-
);
|
|
331
|
-
|
|
332
|
-
-- Issues table
|
|
333
|
-
CREATE TABLE IF NOT EXISTS sudocode_issues (
|
|
334
|
-
id TEXT PRIMARY KEY,
|
|
335
|
-
title TEXT NOT NULL,
|
|
336
|
-
description TEXT,
|
|
337
|
-
status TEXT DEFAULT 'open',
|
|
338
|
-
priority INTEGER DEFAULT 2,
|
|
339
|
-
tags TEXT,
|
|
340
|
-
created_at INTEGER DEFAULT (unixepoch() * 1000),
|
|
341
|
-
updated_at INTEGER DEFAULT (unixepoch() * 1000)
|
|
342
|
-
);
|
|
343
|
-
|
|
344
|
-
-- Links table
|
|
345
|
-
CREATE TABLE IF NOT EXISTS sudocode_links (
|
|
346
|
-
from_id TEXT NOT NULL,
|
|
347
|
-
to_id TEXT NOT NULL,
|
|
348
|
-
type TEXT NOT NULL,
|
|
349
|
-
created_at INTEGER DEFAULT (unixepoch() * 1000),
|
|
350
|
-
PRIMARY KEY (from_id, to_id, type)
|
|
351
|
-
);
|
|
352
|
-
`);
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
/**
|
|
356
|
-
* Create a spec in the database
|
|
357
|
-
*/
|
|
358
|
-
function createSpec(
|
|
359
|
-
db: Database.Database,
|
|
360
|
-
spec: { id?: string; title: string; description?: string; priority?: number; tags?: string[] }
|
|
361
|
-
): string {
|
|
362
|
-
const id = spec.id || `s-${Date.now().toString(36)}`;
|
|
363
|
-
db.prepare(`
|
|
364
|
-
INSERT INTO sudocode_specs (id, title, description, priority, tags)
|
|
365
|
-
VALUES (?, ?, ?, ?, ?)
|
|
366
|
-
`).run(
|
|
367
|
-
id,
|
|
368
|
-
spec.title,
|
|
369
|
-
spec.description || "",
|
|
370
|
-
spec.priority || 2,
|
|
371
|
-
JSON.stringify(spec.tags || [])
|
|
372
|
-
);
|
|
373
|
-
return id;
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
/**
|
|
377
|
-
* Create an issue in the database
|
|
378
|
-
*/
|
|
379
|
-
function createIssue(
|
|
380
|
-
db: Database.Database,
|
|
381
|
-
issue: {
|
|
382
|
-
id?: string;
|
|
383
|
-
title: string;
|
|
384
|
-
description?: string;
|
|
385
|
-
status?: string;
|
|
386
|
-
priority?: number;
|
|
387
|
-
implements?: string;
|
|
388
|
-
tags?: string[];
|
|
389
|
-
}
|
|
390
|
-
): string {
|
|
391
|
-
const id = issue.id || `i-${Date.now().toString(36)}`;
|
|
392
|
-
db.prepare(`
|
|
393
|
-
INSERT INTO sudocode_issues (id, title, description, status, priority, tags)
|
|
394
|
-
VALUES (?, ?, ?, ?, ?, ?)
|
|
395
|
-
`).run(
|
|
396
|
-
id,
|
|
397
|
-
issue.title,
|
|
398
|
-
issue.description || "",
|
|
399
|
-
issue.status || "open",
|
|
400
|
-
issue.priority || 2,
|
|
401
|
-
JSON.stringify(issue.tags || [])
|
|
402
|
-
);
|
|
403
|
-
|
|
404
|
-
// Create implements link if specified
|
|
405
|
-
if (issue.implements) {
|
|
406
|
-
db.prepare(`
|
|
407
|
-
INSERT INTO sudocode_links (from_id, to_id, type)
|
|
408
|
-
VALUES (?, ?, 'implements')
|
|
409
|
-
`).run(id, issue.implements);
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
return id;
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
export { createSpec, createIssue };
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Types for TempRepoFactory
|
|
3
|
-
*
|
|
4
|
-
* @see s-1zcx Multi-Agent Orchestration Testing Strategy
|
|
5
3
|
*/
|
|
6
4
|
|
|
7
5
|
import type Database from "better-sqlite3";
|
|
@@ -25,15 +23,6 @@ export interface TempRepoOptions {
|
|
|
25
23
|
/** Initialize dataplane schema (creates SQLite database) */
|
|
26
24
|
withDataplane?: boolean;
|
|
27
25
|
|
|
28
|
-
/** Initialize sudocode (requires withDataplane) */
|
|
29
|
-
withSudocode?: boolean;
|
|
30
|
-
|
|
31
|
-
/** Sudocode specs to create */
|
|
32
|
-
sudocodeSpecs?: PartialSpec[];
|
|
33
|
-
|
|
34
|
-
/** Sudocode issues to create */
|
|
35
|
-
sudocodeIssues?: PartialIssue[];
|
|
36
|
-
|
|
37
26
|
/** Additional branches to create */
|
|
38
27
|
branches?: BranchConfig[];
|
|
39
28
|
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Fixtures Library Tests
|
|
3
3
|
*
|
|
4
|
-
* Tests for project fixtures
|
|
5
|
-
*
|
|
6
|
-
* @see s-1zcx Multi-Agent Orchestration Testing Strategy
|
|
4
|
+
* Tests for project fixtures and behavior fixtures.
|
|
7
5
|
*/
|
|
8
6
|
|
|
9
7
|
import { describe, it, expect, afterEach } from "vitest";
|
|
@@ -29,12 +27,6 @@ import {
|
|
|
29
27
|
SIMPLE_INTEGRATOR,
|
|
30
28
|
SIMPLE_MONITOR,
|
|
31
29
|
createWorker,
|
|
32
|
-
// Sudocode fixtures
|
|
33
|
-
SIMPLE_FEATURE_SPEC,
|
|
34
|
-
AUTH_SPEC,
|
|
35
|
-
AUTH_ISSUES,
|
|
36
|
-
createSpec,
|
|
37
|
-
createIssue,
|
|
38
30
|
} from "../../fixtures/index.js";
|
|
39
31
|
|
|
40
32
|
describe("Fixtures Library", () => {
|
|
@@ -97,23 +89,19 @@ describe("Fixtures Library", () => {
|
|
|
97
89
|
expect(repo.readFile("index.ts")).toContain("version");
|
|
98
90
|
});
|
|
99
91
|
|
|
100
|
-
it("should create project with
|
|
92
|
+
it("should create project with dataplane", async () => {
|
|
101
93
|
harness = await createTestHarness();
|
|
102
94
|
const repo = await harness.createTempRepo(PROJECT_WITH_SPECS);
|
|
103
95
|
|
|
104
96
|
expect(repo.db).toBeDefined();
|
|
105
97
|
|
|
106
|
-
// Verify
|
|
107
|
-
const
|
|
108
|
-
.prepare(
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
const issues = repo.db!
|
|
114
|
-
.prepare("SELECT * FROM sudocode_issues")
|
|
115
|
-
.all() as Array<{ id: string }>;
|
|
116
|
-
expect(issues.length).toBeGreaterThan(0);
|
|
98
|
+
// Verify dataplane tables exist
|
|
99
|
+
const tables = repo.db!
|
|
100
|
+
.prepare(
|
|
101
|
+
"SELECT name FROM sqlite_master WHERE type='table' AND name LIKE 'dataplane_%'"
|
|
102
|
+
)
|
|
103
|
+
.all() as Array<{ name: string }>;
|
|
104
|
+
expect(tables.length).toBeGreaterThan(0);
|
|
117
105
|
});
|
|
118
106
|
|
|
119
107
|
it("should create custom TypeScript project options", async () => {
|
|
@@ -308,77 +296,6 @@ describe("Fixtures Library", () => {
|
|
|
308
296
|
});
|
|
309
297
|
});
|
|
310
298
|
|
|
311
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
312
|
-
// Sudocode Fixtures
|
|
313
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
314
|
-
|
|
315
|
-
describe("Sudocode Fixtures", () => {
|
|
316
|
-
let harness: TestHarness;
|
|
317
|
-
|
|
318
|
-
afterEach(async () => {
|
|
319
|
-
if (harness) {
|
|
320
|
-
await harness.cleanup();
|
|
321
|
-
}
|
|
322
|
-
});
|
|
323
|
-
|
|
324
|
-
it("should create project with predefined specs", async () => {
|
|
325
|
-
harness = await createTestHarness();
|
|
326
|
-
const repo = await harness.createTempRepo({
|
|
327
|
-
initialFiles: MINIMAL_PROJECT,
|
|
328
|
-
withDataplane: true,
|
|
329
|
-
withSudocode: true,
|
|
330
|
-
sudocodeSpecs: [SIMPLE_FEATURE_SPEC, AUTH_SPEC],
|
|
331
|
-
});
|
|
332
|
-
|
|
333
|
-
const specs = repo.db!
|
|
334
|
-
.prepare("SELECT * FROM sudocode_specs")
|
|
335
|
-
.all() as Array<{ id: string; title: string }>;
|
|
336
|
-
|
|
337
|
-
expect(specs.length).toBe(2);
|
|
338
|
-
expect(specs.some((s) => s.title === "Simple Feature")).toBe(true);
|
|
339
|
-
expect(specs.some((s) => s.title === "User Authentication")).toBe(true);
|
|
340
|
-
});
|
|
341
|
-
|
|
342
|
-
it("should create project with predefined issues", async () => {
|
|
343
|
-
harness = await createTestHarness();
|
|
344
|
-
const repo = await harness.createTempRepo({
|
|
345
|
-
initialFiles: MINIMAL_PROJECT,
|
|
346
|
-
withDataplane: true,
|
|
347
|
-
withSudocode: true,
|
|
348
|
-
sudocodeSpecs: [AUTH_SPEC],
|
|
349
|
-
sudocodeIssues: AUTH_ISSUES,
|
|
350
|
-
});
|
|
351
|
-
|
|
352
|
-
const issues = repo.db!
|
|
353
|
-
.prepare("SELECT * FROM sudocode_issues")
|
|
354
|
-
.all() as Array<{ id: string; title: string }>;
|
|
355
|
-
|
|
356
|
-
expect(issues.length).toBe(4); // 4 auth issues
|
|
357
|
-
});
|
|
358
|
-
|
|
359
|
-
it("should create custom spec", () => {
|
|
360
|
-
const spec = createSpec("s-custom", "Custom Spec", "Custom description", {
|
|
361
|
-
priority: 1,
|
|
362
|
-
tags: ["custom"],
|
|
363
|
-
});
|
|
364
|
-
|
|
365
|
-
expect(spec.id).toBe("s-custom");
|
|
366
|
-
expect(spec.title).toBe("Custom Spec");
|
|
367
|
-
expect(spec.priority).toBe(1);
|
|
368
|
-
});
|
|
369
|
-
|
|
370
|
-
it("should create custom issue", () => {
|
|
371
|
-
const issue = createIssue("i-custom", "Custom Issue", {
|
|
372
|
-
implements: "s-custom",
|
|
373
|
-
status: "in_progress",
|
|
374
|
-
});
|
|
375
|
-
|
|
376
|
-
expect(issue.id).toBe("i-custom");
|
|
377
|
-
expect(issue.title).toBe("Custom Issue");
|
|
378
|
-
expect(issue.implements).toBe("s-custom");
|
|
379
|
-
});
|
|
380
|
-
});
|
|
381
|
-
|
|
382
299
|
// ─────────────────────────────────────────────────────────────────────────
|
|
383
300
|
// Integration Tests
|
|
384
301
|
// ─────────────────────────────────────────────────────────────────────────
|
|
@@ -395,19 +312,10 @@ describe("Fixtures Library", () => {
|
|
|
395
312
|
it("should run complete workflow with fixtures", async () => {
|
|
396
313
|
harness = await createTestHarness();
|
|
397
314
|
|
|
398
|
-
// Create project
|
|
315
|
+
// Create project
|
|
399
316
|
await harness.createTempRepo({
|
|
400
317
|
initialFiles: TYPESCRIPT_PROJECT,
|
|
401
318
|
withDataplane: true,
|
|
402
|
-
withSudocode: true,
|
|
403
|
-
sudocodeSpecs: [SIMPLE_FEATURE_SPEC],
|
|
404
|
-
sudocodeIssues: [
|
|
405
|
-
{
|
|
406
|
-
id: "i-impl",
|
|
407
|
-
title: "Implement feature",
|
|
408
|
-
implements: "s-simple",
|
|
409
|
-
},
|
|
410
|
-
],
|
|
411
319
|
});
|
|
412
320
|
|
|
413
321
|
// Spawn coordinator that spawns worker
|
|
@@ -111,39 +111,6 @@ describe("TempRepoFactory and AgentSimulator", () => {
|
|
|
111
111
|
expect(tables.length).toBeGreaterThan(0);
|
|
112
112
|
});
|
|
113
113
|
|
|
114
|
-
it("should create repo with sudocode schema and fixtures", async () => {
|
|
115
|
-
repo = await createTempRepo({
|
|
116
|
-
withDataplane: true,
|
|
117
|
-
withSudocode: true,
|
|
118
|
-
sudocodeSpecs: [
|
|
119
|
-
{ id: "s-test", title: "Test Spec", description: "Test description" },
|
|
120
|
-
],
|
|
121
|
-
sudocodeIssues: [
|
|
122
|
-
{ id: "i-test", title: "Test Issue", implements: "s-test" },
|
|
123
|
-
],
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
// Verify spec was created
|
|
127
|
-
const spec = repo.db!
|
|
128
|
-
.prepare("SELECT * FROM sudocode_specs WHERE id = ?")
|
|
129
|
-
.get("s-test") as { title: string } | undefined;
|
|
130
|
-
expect(spec).toBeDefined();
|
|
131
|
-
expect(spec!.title).toBe("Test Spec");
|
|
132
|
-
|
|
133
|
-
// Verify issue was created
|
|
134
|
-
const issue = repo.db!
|
|
135
|
-
.prepare("SELECT * FROM sudocode_issues WHERE id = ?")
|
|
136
|
-
.get("i-test") as { title: string } | undefined;
|
|
137
|
-
expect(issue).toBeDefined();
|
|
138
|
-
expect(issue!.title).toBe("Test Issue");
|
|
139
|
-
|
|
140
|
-
// Verify link was created
|
|
141
|
-
const link = repo.db!
|
|
142
|
-
.prepare("SELECT * FROM sudocode_links WHERE from_id = ? AND to_id = ?")
|
|
143
|
-
.get("i-test", "s-test") as { type: string } | undefined;
|
|
144
|
-
expect(link).toBeDefined();
|
|
145
|
-
expect(link!.type).toBe("implements");
|
|
146
|
-
});
|
|
147
114
|
});
|
|
148
115
|
|
|
149
116
|
// ─────────────────────────────────────────────────────────────────────────
|
|
@@ -155,9 +155,9 @@ class DefaultAgentSimulator implements AgentSimulator {
|
|
|
155
155
|
async stop(): Promise<void> {
|
|
156
156
|
if (!this.running) return;
|
|
157
157
|
|
|
158
|
-
// Emit
|
|
158
|
+
// Emit stop event
|
|
159
159
|
this.services.eventStore.emit({
|
|
160
|
-
type: "
|
|
160
|
+
type: "stop",
|
|
161
161
|
source: { agent_id: this.agentId },
|
|
162
162
|
payload: {
|
|
163
163
|
agent_id: this.agentId,
|
|
@@ -753,9 +753,9 @@ class DefaultAgentSimulator implements AgentSimulator {
|
|
|
753
753
|
});
|
|
754
754
|
}
|
|
755
755
|
|
|
756
|
-
// Emit
|
|
756
|
+
// Emit stop event
|
|
757
757
|
this.services.eventStore.emit({
|
|
758
|
-
type: "
|
|
758
|
+
type: "stop",
|
|
759
759
|
source: { agent_id: this.agentId },
|
|
760
760
|
payload: {
|
|
761
761
|
agent_id: this.agentId,
|
package/vitest.config.ts
CHANGED
|
@@ -22,7 +22,7 @@ export default defineConfig({
|
|
|
22
22
|
},
|
|
23
23
|
server: {
|
|
24
24
|
deps: {
|
|
25
|
-
// Force inline
|
|
25
|
+
// Force inline external packages to avoid Node.js type stripping issues
|
|
26
26
|
inline: [/@sudocode-ai\/.*/],
|
|
27
27
|
},
|
|
28
28
|
},
|
package/vitest.e2e.config.ts
CHANGED
|
@@ -20,7 +20,7 @@ export default defineConfig({
|
|
|
20
20
|
fileParallelism: false,
|
|
21
21
|
server: {
|
|
22
22
|
deps: {
|
|
23
|
-
// Force inline
|
|
23
|
+
// Force inline external packages to avoid Node.js type stripping issues
|
|
24
24
|
inline: [/@sudocode-ai\/.*/],
|
|
25
25
|
},
|
|
26
26
|
},
|