agent-relay 2.3.2 → 2.3.5
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/README.md +1 -1
- package/dist/index.cjs +1 -1
- package/dist/src/cli/index.js +124 -7
- package/dist/src/cli/index.js.map +1 -1
- package/package.json +20 -26
- package/packages/acp-bridge/package.json +2 -2
- package/packages/bridge/package.json +7 -7
- package/packages/config/dist/cloud-config.d.ts +1 -1
- package/packages/config/dist/cloud-config.d.ts.map +1 -1
- package/packages/config/dist/cloud-config.js.map +1 -1
- package/packages/config/dist/schemas.d.ts +5 -5
- package/packages/config/dist/schemas.js +1 -1
- package/packages/config/dist/schemas.js.map +1 -1
- package/packages/config/package.json +2 -2
- package/packages/config/src/cloud-config.ts +2 -2
- package/packages/config/src/schemas.test.ts +48 -0
- package/packages/config/src/schemas.ts +1 -1
- package/packages/continuity/package.json +2 -2
- package/packages/daemon/package.json +12 -12
- package/packages/hooks/package.json +4 -4
- package/packages/mcp/package.json +5 -5
- package/packages/memory/package.json +2 -2
- package/packages/policy/package.json +2 -2
- package/packages/protocol/package.json +1 -1
- package/packages/resiliency/package.json +1 -1
- package/packages/sdk/dist/index.d.ts +1 -29
- package/packages/sdk/dist/index.d.ts.map +1 -1
- package/packages/sdk/dist/index.js +1 -38
- package/packages/sdk/dist/index.js.map +1 -1
- package/packages/sdk/package.json +4 -25
- package/packages/sdk/src/index.ts +1 -69
- package/packages/sdk-py/README.md +56 -0
- package/packages/sdk-py/pyproject.toml +23 -0
- package/packages/sdk-py/src/agent_relay/__init__.py +27 -0
- package/packages/sdk-py/src/agent_relay/builder.py +367 -0
- package/packages/sdk-py/src/agent_relay/types.py +92 -0
- package/packages/sdk-py/tests/__init__.py +0 -0
- package/packages/sdk-py/tests/test_builder.py +101 -0
- package/packages/sdk-ts/dist/__tests__/facade.test.d.ts +2 -0
- package/packages/sdk-ts/dist/__tests__/facade.test.d.ts.map +1 -0
- package/packages/sdk-ts/dist/__tests__/facade.test.js +257 -0
- package/packages/sdk-ts/dist/__tests__/facade.test.js.map +1 -0
- package/packages/sdk-ts/dist/__tests__/unit.test.d.ts +2 -0
- package/packages/sdk-ts/dist/__tests__/unit.test.d.ts.map +1 -0
- package/packages/sdk-ts/dist/__tests__/unit.test.js +124 -0
- package/packages/sdk-ts/dist/__tests__/unit.test.js.map +1 -0
- package/packages/sdk-ts/dist/client.d.ts +2 -0
- package/packages/sdk-ts/dist/client.d.ts.map +1 -1
- package/packages/sdk-ts/dist/client.js +2 -0
- package/packages/sdk-ts/dist/client.js.map +1 -1
- package/packages/sdk-ts/dist/index.d.ts +1 -0
- package/packages/sdk-ts/dist/index.d.ts.map +1 -1
- package/packages/sdk-ts/dist/index.js +1 -0
- package/packages/sdk-ts/dist/index.js.map +1 -1
- package/packages/sdk-ts/dist/protocol.d.ts +1 -0
- package/packages/sdk-ts/dist/protocol.d.ts.map +1 -1
- package/packages/sdk-ts/dist/relay.d.ts +44 -0
- package/packages/sdk-ts/dist/relay.d.ts.map +1 -1
- package/packages/sdk-ts/dist/relay.js +89 -11
- package/packages/sdk-ts/dist/relay.js.map +1 -1
- package/packages/sdk-ts/dist/relaycast.js +2 -2
- package/packages/sdk-ts/dist/relaycast.js.map +1 -1
- package/packages/sdk-ts/dist/workflows/barrier.d.ts +72 -0
- package/packages/sdk-ts/dist/workflows/barrier.d.ts.map +1 -0
- package/packages/sdk-ts/dist/workflows/barrier.js +162 -0
- package/packages/sdk-ts/dist/workflows/barrier.js.map +1 -0
- package/packages/sdk-ts/dist/workflows/builder.d.ts +101 -0
- package/packages/sdk-ts/dist/workflows/builder.d.ts.map +1 -0
- package/packages/sdk-ts/dist/workflows/builder.js +179 -0
- package/packages/sdk-ts/dist/workflows/builder.js.map +1 -0
- package/packages/sdk-ts/dist/workflows/cli.d.ts +10 -0
- package/packages/sdk-ts/dist/workflows/cli.d.ts.map +1 -0
- package/packages/sdk-ts/dist/workflows/cli.js +82 -0
- package/packages/sdk-ts/dist/workflows/cli.js.map +1 -0
- package/packages/sdk-ts/dist/workflows/coordinator.d.ts +68 -0
- package/packages/sdk-ts/dist/workflows/coordinator.d.ts.map +1 -0
- package/packages/sdk-ts/dist/workflows/coordinator.js +353 -0
- package/packages/sdk-ts/dist/workflows/coordinator.js.map +1 -0
- package/packages/sdk-ts/dist/workflows/index.d.ts +10 -0
- package/packages/sdk-ts/dist/workflows/index.d.ts.map +1 -0
- package/packages/sdk-ts/dist/workflows/index.js +10 -0
- package/packages/sdk-ts/dist/workflows/index.js.map +1 -0
- package/packages/sdk-ts/dist/workflows/memory-db.d.ts +17 -0
- package/packages/sdk-ts/dist/workflows/memory-db.d.ts.map +1 -0
- package/packages/sdk-ts/dist/workflows/memory-db.js +33 -0
- package/packages/sdk-ts/dist/workflows/memory-db.js.map +1 -0
- package/packages/sdk-ts/dist/workflows/run.d.ts +31 -0
- package/packages/sdk-ts/dist/workflows/run.d.ts.map +1 -0
- package/packages/sdk-ts/dist/workflows/run.js +24 -0
- package/packages/sdk-ts/dist/workflows/run.js.map +1 -0
- package/packages/sdk-ts/dist/workflows/runner.d.ts +119 -0
- package/packages/sdk-ts/dist/workflows/runner.d.ts.map +1 -0
- package/packages/sdk-ts/dist/workflows/runner.js +650 -0
- package/packages/sdk-ts/dist/workflows/runner.js.map +1 -0
- package/packages/sdk-ts/dist/workflows/state.d.ts +77 -0
- package/packages/sdk-ts/dist/workflows/state.d.ts.map +1 -0
- package/packages/sdk-ts/dist/workflows/state.js +140 -0
- package/packages/sdk-ts/dist/workflows/state.js.map +1 -0
- package/packages/sdk-ts/dist/workflows/templates.d.ts +47 -0
- package/packages/sdk-ts/dist/workflows/templates.d.ts.map +1 -0
- package/packages/sdk-ts/dist/workflows/templates.js +395 -0
- package/packages/sdk-ts/dist/workflows/templates.js.map +1 -0
- package/packages/sdk-ts/dist/workflows/types.d.ts +126 -0
- package/packages/sdk-ts/dist/workflows/types.d.ts.map +1 -0
- package/packages/sdk-ts/dist/workflows/types.js +8 -0
- package/packages/sdk-ts/dist/workflows/types.js.map +1 -0
- package/packages/sdk-ts/package.json +9 -3
- package/packages/sdk-ts/src/__tests__/error-scenarios.test.ts +682 -0
- package/packages/sdk-ts/src/__tests__/facade.test.ts +296 -0
- package/packages/sdk-ts/src/__tests__/swarm-coordinator.test.ts +416 -0
- package/packages/sdk-ts/src/__tests__/unit.test.ts +152 -0
- package/packages/sdk-ts/src/__tests__/workflow-runner.test.ts +333 -0
- package/packages/sdk-ts/src/client.ts +4 -0
- package/packages/sdk-ts/src/index.ts +1 -0
- package/packages/sdk-ts/src/protocol.ts +1 -1
- package/packages/sdk-ts/src/relay.ts +112 -11
- package/packages/sdk-ts/src/relaycast.ts +2 -2
- package/packages/sdk-ts/src/workflows/README.md +450 -0
- package/packages/sdk-ts/src/workflows/barrier.ts +254 -0
- package/packages/sdk-ts/src/workflows/builder.ts +241 -0
- package/packages/sdk-ts/src/workflows/builtin-templates/bug-fix.yaml +75 -0
- package/packages/sdk-ts/src/workflows/builtin-templates/code-review.yaml +82 -0
- package/packages/sdk-ts/src/workflows/builtin-templates/documentation.yaml +70 -0
- package/packages/sdk-ts/src/workflows/builtin-templates/feature-dev.yaml +76 -0
- package/packages/sdk-ts/src/workflows/builtin-templates/refactor.yaml +82 -0
- package/packages/sdk-ts/src/workflows/builtin-templates/security-audit.yaml +84 -0
- package/packages/sdk-ts/src/workflows/cli.ts +93 -0
- package/packages/sdk-ts/src/workflows/coordinator.ts +520 -0
- package/packages/sdk-ts/src/workflows/index.ts +9 -0
- package/packages/sdk-ts/src/workflows/memory-db.ts +39 -0
- package/packages/sdk-ts/src/workflows/run.ts +47 -0
- package/packages/sdk-ts/src/workflows/runner.ts +873 -0
- package/packages/sdk-ts/src/workflows/schema.json +321 -0
- package/packages/sdk-ts/src/workflows/state.ts +279 -0
- package/packages/sdk-ts/src/workflows/templates.ts +544 -0
- package/packages/sdk-ts/src/workflows/types.ts +178 -0
- package/packages/sdk-ts/tsconfig.json +6 -1
- package/packages/spawner/package.json +1 -1
- package/packages/state/package.json +1 -1
- package/packages/storage/package.json +2 -2
- package/packages/telemetry/package.json +1 -1
- package/packages/trajectory/package.json +2 -2
- package/packages/user-directory/package.json +2 -2
- package/packages/utils/package.json +3 -3
- package/packages/wrapper/package.json +5 -6
- package/scripts/postinstall.js +106 -2
- package/packages/api-types/.trajectories/active/traj_xbsvuzogscey.json +0 -15
- package/packages/api-types/.trajectories/index.json +0 -12
- package/packages/api-types/dist/index.d.ts +0 -21
- package/packages/api-types/dist/index.d.ts.map +0 -1
- package/packages/api-types/dist/index.js +0 -22
- package/packages/api-types/dist/index.js.map +0 -1
- package/packages/api-types/dist/schemas/agent.d.ts +0 -259
- package/packages/api-types/dist/schemas/agent.d.ts.map +0 -1
- package/packages/api-types/dist/schemas/agent.js +0 -102
- package/packages/api-types/dist/schemas/agent.js.map +0 -1
- package/packages/api-types/dist/schemas/api.d.ts +0 -290
- package/packages/api-types/dist/schemas/api.d.ts.map +0 -1
- package/packages/api-types/dist/schemas/api.js +0 -162
- package/packages/api-types/dist/schemas/api.js.map +0 -1
- package/packages/api-types/dist/schemas/decision.d.ts +0 -230
- package/packages/api-types/dist/schemas/decision.d.ts.map +0 -1
- package/packages/api-types/dist/schemas/decision.js +0 -104
- package/packages/api-types/dist/schemas/decision.js.map +0 -1
- package/packages/api-types/dist/schemas/fleet.d.ts +0 -615
- package/packages/api-types/dist/schemas/fleet.d.ts.map +0 -1
- package/packages/api-types/dist/schemas/fleet.js +0 -71
- package/packages/api-types/dist/schemas/fleet.js.map +0 -1
- package/packages/api-types/dist/schemas/history.d.ts +0 -180
- package/packages/api-types/dist/schemas/history.d.ts.map +0 -1
- package/packages/api-types/dist/schemas/history.js +0 -72
- package/packages/api-types/dist/schemas/history.js.map +0 -1
- package/packages/api-types/dist/schemas/index.d.ts +0 -14
- package/packages/api-types/dist/schemas/index.d.ts.map +0 -1
- package/packages/api-types/dist/schemas/index.js +0 -22
- package/packages/api-types/dist/schemas/index.js.map +0 -1
- package/packages/api-types/dist/schemas/message.d.ts +0 -456
- package/packages/api-types/dist/schemas/message.d.ts.map +0 -1
- package/packages/api-types/dist/schemas/message.js +0 -88
- package/packages/api-types/dist/schemas/message.js.map +0 -1
- package/packages/api-types/dist/schemas/session.d.ts +0 -60
- package/packages/api-types/dist/schemas/session.d.ts.map +0 -1
- package/packages/api-types/dist/schemas/session.js +0 -36
- package/packages/api-types/dist/schemas/session.js.map +0 -1
- package/packages/api-types/dist/schemas/task.d.ts +0 -111
- package/packages/api-types/dist/schemas/task.d.ts.map +0 -1
- package/packages/api-types/dist/schemas/task.js +0 -64
- package/packages/api-types/dist/schemas/task.js.map +0 -1
- package/packages/api-types/package.json +0 -61
- package/packages/api-types/scripts/generate-openapi.ts +0 -106
- package/packages/api-types/src/index.ts +0 -22
- package/packages/api-types/src/schemas/agent.test.ts +0 -164
- package/packages/api-types/src/schemas/agent.ts +0 -110
- package/packages/api-types/src/schemas/api.test.ts +0 -372
- package/packages/api-types/src/schemas/api.ts +0 -194
- package/packages/api-types/src/schemas/decision.test.ts +0 -324
- package/packages/api-types/src/schemas/decision.ts +0 -136
- package/packages/api-types/src/schemas/fleet.test.ts +0 -212
- package/packages/api-types/src/schemas/fleet.ts +0 -83
- package/packages/api-types/src/schemas/history.test.ts +0 -242
- package/packages/api-types/src/schemas/history.ts +0 -84
- package/packages/api-types/src/schemas/index.ts +0 -148
- package/packages/api-types/src/schemas/message.test.ts +0 -192
- package/packages/api-types/src/schemas/message.ts +0 -98
- package/packages/api-types/src/schemas/session.test.ts +0 -104
- package/packages/api-types/src/schemas/session.ts +0 -40
- package/packages/api-types/src/schemas/task.test.ts +0 -192
- package/packages/api-types/src/schemas/task.ts +0 -78
- package/packages/api-types/tsconfig.json +0 -19
- package/packages/api-types/vitest.config.ts +0 -9
- package/packages/benchmark/README.md +0 -200
- package/packages/benchmark/datasets/coding-tasks.yaml +0 -127
- package/packages/benchmark/datasets/coordination-tasks.yaml +0 -122
- package/packages/benchmark/datasets/quick-test.yaml +0 -20
- package/packages/benchmark/dist/benchmark.d.ts +0 -47
- package/packages/benchmark/dist/benchmark.d.ts.map +0 -1
- package/packages/benchmark/dist/benchmark.js +0 -224
- package/packages/benchmark/dist/benchmark.js.map +0 -1
- package/packages/benchmark/dist/cli.d.ts +0 -8
- package/packages/benchmark/dist/cli.d.ts.map +0 -1
- package/packages/benchmark/dist/cli.js +0 -185
- package/packages/benchmark/dist/cli.js.map +0 -1
- package/packages/benchmark/dist/harbor.d.ts +0 -53
- package/packages/benchmark/dist/harbor.d.ts.map +0 -1
- package/packages/benchmark/dist/harbor.js +0 -127
- package/packages/benchmark/dist/harbor.js.map +0 -1
- package/packages/benchmark/dist/index.d.ts +0 -48
- package/packages/benchmark/dist/index.d.ts.map +0 -1
- package/packages/benchmark/dist/index.js +0 -50
- package/packages/benchmark/dist/index.js.map +0 -1
- package/packages/benchmark/dist/runners/base.d.ts +0 -63
- package/packages/benchmark/dist/runners/base.d.ts.map +0 -1
- package/packages/benchmark/dist/runners/base.js +0 -156
- package/packages/benchmark/dist/runners/base.js.map +0 -1
- package/packages/benchmark/dist/runners/index.d.ts +0 -10
- package/packages/benchmark/dist/runners/index.d.ts.map +0 -1
- package/packages/benchmark/dist/runners/index.js +0 -10
- package/packages/benchmark/dist/runners/index.js.map +0 -1
- package/packages/benchmark/dist/runners/single.d.ts +0 -19
- package/packages/benchmark/dist/runners/single.d.ts.map +0 -1
- package/packages/benchmark/dist/runners/single.js +0 -111
- package/packages/benchmark/dist/runners/single.js.map +0 -1
- package/packages/benchmark/dist/runners/subagent.d.ts +0 -32
- package/packages/benchmark/dist/runners/subagent.d.ts.map +0 -1
- package/packages/benchmark/dist/runners/subagent.js +0 -212
- package/packages/benchmark/dist/runners/subagent.js.map +0 -1
- package/packages/benchmark/dist/runners/swarm.d.ts +0 -36
- package/packages/benchmark/dist/runners/swarm.d.ts.map +0 -1
- package/packages/benchmark/dist/runners/swarm.js +0 -273
- package/packages/benchmark/dist/runners/swarm.js.map +0 -1
- package/packages/benchmark/dist/types.d.ts +0 -178
- package/packages/benchmark/dist/types.d.ts.map +0 -1
- package/packages/benchmark/dist/types.js +0 -16
- package/packages/benchmark/dist/types.js.map +0 -1
- package/packages/benchmark/package.json +0 -80
- package/packages/benchmark/src/benchmark.ts +0 -298
- package/packages/benchmark/src/cli.ts +0 -240
- package/packages/benchmark/src/harbor.ts +0 -170
- package/packages/benchmark/src/index.ts +0 -73
- package/packages/benchmark/src/runners/base.ts +0 -205
- package/packages/benchmark/src/runners/index.ts +0 -10
- package/packages/benchmark/src/runners/single.ts +0 -121
- package/packages/benchmark/src/runners/subagent.ts +0 -240
- package/packages/benchmark/src/runners/swarm.ts +0 -326
- package/packages/benchmark/src/types.ts +0 -205
- package/packages/benchmark/tsconfig.json +0 -20
- package/packages/cli-tester/README.md +0 -277
- package/packages/cli-tester/dist/index.d.ts +0 -21
- package/packages/cli-tester/dist/index.d.ts.map +0 -1
- package/packages/cli-tester/dist/index.js +0 -21
- package/packages/cli-tester/dist/index.js.map +0 -1
- package/packages/cli-tester/dist/utils/credential-check.d.ts +0 -56
- package/packages/cli-tester/dist/utils/credential-check.d.ts.map +0 -1
- package/packages/cli-tester/dist/utils/credential-check.js +0 -230
- package/packages/cli-tester/dist/utils/credential-check.js.map +0 -1
- package/packages/cli-tester/dist/utils/socket-client.d.ts +0 -76
- package/packages/cli-tester/dist/utils/socket-client.d.ts.map +0 -1
- package/packages/cli-tester/dist/utils/socket-client.js +0 -153
- package/packages/cli-tester/dist/utils/socket-client.js.map +0 -1
- package/packages/cli-tester/docker/Dockerfile +0 -61
- package/packages/cli-tester/docker/docker-compose.yml +0 -71
- package/packages/cli-tester/docker/entrypoint.sh +0 -58
- package/packages/cli-tester/package.json +0 -32
- package/packages/cli-tester/scripts/clear-auth.sh +0 -101
- package/packages/cli-tester/scripts/inject-message.sh +0 -42
- package/packages/cli-tester/scripts/start.sh +0 -71
- package/packages/cli-tester/scripts/test-cli.sh +0 -56
- package/packages/cli-tester/scripts/test-full-spawn.sh +0 -238
- package/packages/cli-tester/scripts/test-registration.sh +0 -182
- package/packages/cli-tester/scripts/test-setup-flow.sh +0 -202
- package/packages/cli-tester/scripts/test-spawn.sh +0 -140
- package/packages/cli-tester/scripts/test-with-daemon.sh +0 -247
- package/packages/cli-tester/scripts/verify-auth.sh +0 -112
- package/packages/cli-tester/src/index.ts +0 -40
- package/packages/cli-tester/src/utils/credential-check.ts +0 -284
- package/packages/cli-tester/src/utils/socket-client.ts +0 -211
- package/packages/cli-tester/tests/credential-check.test.ts +0 -56
- package/packages/cli-tester/tsconfig.json +0 -11
- package/packages/sdk/dist/browser-client.d.ts +0 -212
- package/packages/sdk/dist/browser-client.d.ts.map +0 -1
- package/packages/sdk/dist/browser-client.js +0 -750
- package/packages/sdk/dist/browser-client.js.map +0 -1
- package/packages/sdk/dist/browser-framing.d.ts +0 -46
- package/packages/sdk/dist/browser-framing.d.ts.map +0 -1
- package/packages/sdk/dist/browser-framing.js +0 -122
- package/packages/sdk/dist/browser-framing.js.map +0 -1
- package/packages/sdk/dist/standalone.d.ts +0 -89
- package/packages/sdk/dist/standalone.d.ts.map +0 -1
- package/packages/sdk/dist/standalone.js +0 -131
- package/packages/sdk/dist/standalone.js.map +0 -1
- package/packages/sdk/dist/transports/index.d.ts +0 -92
- package/packages/sdk/dist/transports/index.d.ts.map +0 -1
- package/packages/sdk/dist/transports/index.js +0 -129
- package/packages/sdk/dist/transports/index.js.map +0 -1
- package/packages/sdk/dist/transports/socket-transport.d.ts +0 -30
- package/packages/sdk/dist/transports/socket-transport.d.ts.map +0 -1
- package/packages/sdk/dist/transports/socket-transport.js +0 -94
- package/packages/sdk/dist/transports/socket-transport.js.map +0 -1
- package/packages/sdk/dist/transports/types.d.ts +0 -69
- package/packages/sdk/dist/transports/types.d.ts.map +0 -1
- package/packages/sdk/dist/transports/types.js +0 -10
- package/packages/sdk/dist/transports/types.js.map +0 -1
- package/packages/sdk/dist/transports/websocket-transport.d.ts +0 -55
- package/packages/sdk/dist/transports/websocket-transport.d.ts.map +0 -1
- package/packages/sdk/dist/transports/websocket-transport.js +0 -180
- package/packages/sdk/dist/transports/websocket-transport.js.map +0 -1
- package/packages/sdk/src/browser-client.ts +0 -985
- package/packages/sdk/src/browser-framing.test.ts +0 -115
- package/packages/sdk/src/browser-framing.ts +0 -150
- package/packages/sdk/src/standalone.ts +0 -183
- package/packages/sdk/src/transports/index.ts +0 -197
- package/packages/sdk/src/transports/socket-transport.ts +0 -115
- package/packages/sdk/src/transports/types.ts +0 -77
- package/packages/sdk/src/transports/websocket-transport.ts +0 -245
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sub-Agent Runner
|
|
3
|
-
*
|
|
4
|
-
* Runs tasks using a lead agent that spawns and coordinates workers hierarchically.
|
|
5
|
-
*/
|
|
6
|
-
import { ConfigurationRunner } from './base.js';
|
|
7
|
-
/**
|
|
8
|
-
* Runner for sub-agent (hierarchical) configuration
|
|
9
|
-
*/
|
|
10
|
-
export class SubAgentRunner extends ConfigurationRunner {
|
|
11
|
-
workerCount = 0;
|
|
12
|
-
get configurationType() {
|
|
13
|
-
return 'subagent';
|
|
14
|
-
}
|
|
15
|
-
async run(task) {
|
|
16
|
-
const startTime = Date.now();
|
|
17
|
-
let firstActionTime = 0;
|
|
18
|
-
let success = false;
|
|
19
|
-
this.resetMetrics();
|
|
20
|
-
this.workerCount = 0;
|
|
21
|
-
this.log(`Starting task: ${task.id}`);
|
|
22
|
-
try {
|
|
23
|
-
// Set up message monitoring before spawning
|
|
24
|
-
this.setupMessageMonitoring();
|
|
25
|
-
// Spawn lead agent that will delegate to workers
|
|
26
|
-
const leadResult = await this.orchestrator.spawn({
|
|
27
|
-
name: 'Lead',
|
|
28
|
-
cli: this.config.cli,
|
|
29
|
-
task: this.buildLeadPrompt(task),
|
|
30
|
-
cwd: this.config.cwd,
|
|
31
|
-
});
|
|
32
|
-
if (!leadResult.success) {
|
|
33
|
-
this.metrics.errors.push(leadResult.error || 'Lead spawn failed');
|
|
34
|
-
return this.buildFailedResult(task, startTime, this.metrics.errors);
|
|
35
|
-
}
|
|
36
|
-
this.metrics.spawnedAgents.push('Lead');
|
|
37
|
-
firstActionTime = Date.now() - startTime;
|
|
38
|
-
this.log(`Lead agent spawned in ${firstActionTime}ms`);
|
|
39
|
-
// Wait for lead to complete (including all worker coordination)
|
|
40
|
-
success = await this.waitForLeadCompletion(task);
|
|
41
|
-
if (success) {
|
|
42
|
-
this.log(`Task completed with ${this.workerCount} workers`);
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
this.log('Task failed or timed out');
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
catch (err) {
|
|
49
|
-
this.metrics.errors.push(err.message);
|
|
50
|
-
}
|
|
51
|
-
// Collect final metrics
|
|
52
|
-
let totalTokens = 0;
|
|
53
|
-
let peakMemory = 0;
|
|
54
|
-
try {
|
|
55
|
-
const metrics = await this.orchestrator.getMetrics();
|
|
56
|
-
totalTokens = this.extractTokens(metrics);
|
|
57
|
-
peakMemory = this.extractMemory(metrics);
|
|
58
|
-
}
|
|
59
|
-
catch {
|
|
60
|
-
// Metrics collection failed
|
|
61
|
-
}
|
|
62
|
-
const completedAt = Date.now();
|
|
63
|
-
const agentCount = 1 + this.workerCount;
|
|
64
|
-
return {
|
|
65
|
-
taskId: task.id,
|
|
66
|
-
configuration: 'subagent',
|
|
67
|
-
totalTimeMs: completedAt - startTime,
|
|
68
|
-
timeToFirstActionMs: firstActionTime,
|
|
69
|
-
messageCount: this.metrics.messages,
|
|
70
|
-
avgLatencyMs: this.metrics.latencies.length > 0
|
|
71
|
-
? this.metrics.latencies.reduce((a, b) => a + b, 0) /
|
|
72
|
-
this.metrics.latencies.length
|
|
73
|
-
: 0,
|
|
74
|
-
latencyP50Ms: this.percentile(this.metrics.latencies, 50),
|
|
75
|
-
latencyP99Ms: this.percentile(this.metrics.latencies, 99),
|
|
76
|
-
coordinationRounds: Math.ceil(this.metrics.messages / Math.max(1, this.workerCount)),
|
|
77
|
-
agentCount,
|
|
78
|
-
totalTokensUsed: totalTokens,
|
|
79
|
-
peakMemoryMb: peakMemory,
|
|
80
|
-
success,
|
|
81
|
-
completionRate: success ? 1.0 : this.workerCount > 0 ? 0.5 : 0.0,
|
|
82
|
-
errors: this.metrics.errors,
|
|
83
|
-
startedAt: startTime,
|
|
84
|
-
completedAt,
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Set up message monitoring to track worker spawns and coordination
|
|
89
|
-
*/
|
|
90
|
-
setupMessageMonitoring() {
|
|
91
|
-
this.orchestrator.onMessage = (from, payload, id, meta) => {
|
|
92
|
-
this.metrics.messages++;
|
|
93
|
-
// Track when lead spawns workers
|
|
94
|
-
if (from === 'Lead') {
|
|
95
|
-
// Check for spawn patterns in messages
|
|
96
|
-
if (payload.body.includes('->relay-file:spawn') ||
|
|
97
|
-
typeof payload.data?.name === 'string') {
|
|
98
|
-
this.workerCount++;
|
|
99
|
-
const workerName = payload.data?.name || `Worker${this.workerCount}`;
|
|
100
|
-
this.metrics.spawnedAgents.push(workerName);
|
|
101
|
-
this.log(`Worker spawned: ${workerName}`);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
// Track latencies if we have sync metadata
|
|
105
|
-
if (meta?.sync?.correlationId) {
|
|
106
|
-
// This would require tracking send times, simplified here
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Wait for the lead agent to signal completion
|
|
112
|
-
*/
|
|
113
|
-
waitForLeadCompletion(task) {
|
|
114
|
-
const timeoutMs = task.timeoutMs || 300000;
|
|
115
|
-
return new Promise((resolve) => {
|
|
116
|
-
const timeout = setTimeout(() => {
|
|
117
|
-
this.metrics.errors.push('Timeout waiting for Lead completion');
|
|
118
|
-
resolve(false);
|
|
119
|
-
}, timeoutMs);
|
|
120
|
-
const originalHandler = this.orchestrator.onMessage;
|
|
121
|
-
this.orchestrator.onMessage = (from, payload, id, meta, originalTo) => {
|
|
122
|
-
// Call existing handler for tracking
|
|
123
|
-
if (originalHandler) {
|
|
124
|
-
originalHandler(from, payload, id, meta, originalTo);
|
|
125
|
-
}
|
|
126
|
-
// Check for completion from Lead
|
|
127
|
-
if (from === 'Lead' && payload.body.startsWith('DONE:')) {
|
|
128
|
-
clearTimeout(timeout);
|
|
129
|
-
resolve(true);
|
|
130
|
-
}
|
|
131
|
-
// Check for fatal errors
|
|
132
|
-
if (from === 'Lead' && payload.body.startsWith('ERROR:')) {
|
|
133
|
-
this.metrics.errors.push(payload.body);
|
|
134
|
-
clearTimeout(timeout);
|
|
135
|
-
resolve(false);
|
|
136
|
-
}
|
|
137
|
-
};
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Build the task prompt for the lead agent
|
|
142
|
-
*/
|
|
143
|
-
buildLeadPrompt(task) {
|
|
144
|
-
const suggestedWorkers = this.suggestWorkerCount(task);
|
|
145
|
-
return `You are the Lead agent. Your job is to delegate subtasks to workers and coordinate their efforts.
|
|
146
|
-
|
|
147
|
-
## Task
|
|
148
|
-
${task.description}
|
|
149
|
-
|
|
150
|
-
## Files to Work On
|
|
151
|
-
${task.files.map((f) => `- ${f}`).join('\n')}
|
|
152
|
-
|
|
153
|
-
## Success Criteria
|
|
154
|
-
${task.expectedOutcome}
|
|
155
|
-
|
|
156
|
-
## Your Responsibilities
|
|
157
|
-
|
|
158
|
-
1. **Analyze the task** and break it into subtasks
|
|
159
|
-
2. **Spawn workers** for each subtask (suggested: ${suggestedWorkers} workers)
|
|
160
|
-
3. **Coordinate** their work and handle dependencies
|
|
161
|
-
4. **Aggregate results** and verify success criteria are met
|
|
162
|
-
|
|
163
|
-
## Spawning Workers
|
|
164
|
-
|
|
165
|
-
Use the relay protocol to spawn workers:
|
|
166
|
-
|
|
167
|
-
\`\`\`bash
|
|
168
|
-
cat > $AGENT_RELAY_OUTBOX/spawn << 'EOF'
|
|
169
|
-
KIND: spawn
|
|
170
|
-
NAME: Worker1
|
|
171
|
-
CLI: ${this.config.cli}
|
|
172
|
-
|
|
173
|
-
<Task description for this worker>
|
|
174
|
-
EOF
|
|
175
|
-
\`\`\`
|
|
176
|
-
Then output: ->relay-file:spawn
|
|
177
|
-
|
|
178
|
-
## Communication Protocol
|
|
179
|
-
|
|
180
|
-
- Workers will send you status updates
|
|
181
|
-
- Monitor for "DONE:" messages from workers
|
|
182
|
-
- Handle "BLOCKED:" or "ERROR:" messages by reassigning or helping
|
|
183
|
-
|
|
184
|
-
## Completion
|
|
185
|
-
|
|
186
|
-
When ALL subtasks are complete and verified:
|
|
187
|
-
\`\`\`
|
|
188
|
-
DONE: <summary of what was accomplished, including worker contributions>
|
|
189
|
-
\`\`\`
|
|
190
|
-
|
|
191
|
-
If you encounter an unrecoverable error:
|
|
192
|
-
\`\`\`
|
|
193
|
-
ERROR: <description of the problem>
|
|
194
|
-
\`\`\``;
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Suggest number of workers based on task complexity
|
|
198
|
-
*/
|
|
199
|
-
suggestWorkerCount(task) {
|
|
200
|
-
switch (task.complexity) {
|
|
201
|
-
case 'low':
|
|
202
|
-
return Math.min(2, task.files.length);
|
|
203
|
-
case 'medium':
|
|
204
|
-
return Math.min(3, task.files.length);
|
|
205
|
-
case 'high':
|
|
206
|
-
return Math.min(5, task.files.length, this.config.maxSwarmSize);
|
|
207
|
-
default:
|
|
208
|
-
return 2;
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
//# sourceMappingURL=subagent.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"subagent.js","sourceRoot":"","sources":["../../src/runners/subagent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Swarm Runner
|
|
3
|
-
*
|
|
4
|
-
* Runs tasks using peer agents that coordinate as equals via messaging.
|
|
5
|
-
*/
|
|
6
|
-
import type { Task, RunResult, ConfigurationType } from '../types.js';
|
|
7
|
-
import { ConfigurationRunner } from './base.js';
|
|
8
|
-
/**
|
|
9
|
-
* Runner for swarm (peer-to-peer) configuration
|
|
10
|
-
*/
|
|
11
|
-
export declare class SwarmRunner extends ConfigurationRunner {
|
|
12
|
-
private completedPeers;
|
|
13
|
-
get configurationType(): ConfigurationType;
|
|
14
|
-
run(task: Task): Promise<RunResult>;
|
|
15
|
-
/**
|
|
16
|
-
* Set up channel message monitoring
|
|
17
|
-
*/
|
|
18
|
-
private setupChannelMonitoring;
|
|
19
|
-
/**
|
|
20
|
-
* Determine swarm size based on task complexity and files
|
|
21
|
-
*/
|
|
22
|
-
private determineSwarmSize;
|
|
23
|
-
/**
|
|
24
|
-
* Partition task files among agents
|
|
25
|
-
*/
|
|
26
|
-
private partitionTask;
|
|
27
|
-
/**
|
|
28
|
-
* Build prompt for a peer agent
|
|
29
|
-
*/
|
|
30
|
-
private buildPeerPrompt;
|
|
31
|
-
/**
|
|
32
|
-
* Wait for all peers to complete
|
|
33
|
-
*/
|
|
34
|
-
private waitForSwarmCompletion;
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=swarm.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"swarm.d.ts","sourceRoot":"","sources":["../../src/runners/swarm.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD;;GAEG;AACH,qBAAa,WAAY,SAAQ,mBAAmB;IAClD,OAAO,CAAC,cAAc,CAAqB;IAE3C,IAAI,iBAAiB,IAAI,iBAAiB,CAEzC;IAEK,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;IA+GzC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAqB9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAqBrB;;OAEG;IACH,OAAO,CAAC,eAAe;IA6EvB;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAsC/B"}
|
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Swarm Runner
|
|
3
|
-
*
|
|
4
|
-
* Runs tasks using peer agents that coordinate as equals via messaging.
|
|
5
|
-
*/
|
|
6
|
-
import { ConfigurationRunner } from './base.js';
|
|
7
|
-
/**
|
|
8
|
-
* Runner for swarm (peer-to-peer) configuration
|
|
9
|
-
*/
|
|
10
|
-
export class SwarmRunner extends ConfigurationRunner {
|
|
11
|
-
completedPeers = new Set();
|
|
12
|
-
get configurationType() {
|
|
13
|
-
return 'swarm';
|
|
14
|
-
}
|
|
15
|
-
async run(task) {
|
|
16
|
-
const startTime = Date.now();
|
|
17
|
-
let firstActionTime = 0;
|
|
18
|
-
let success = false;
|
|
19
|
-
this.resetMetrics();
|
|
20
|
-
this.completedPeers.clear();
|
|
21
|
-
this.log(`Starting task: ${task.id}`);
|
|
22
|
-
// Determine swarm size based on task complexity
|
|
23
|
-
const agentCount = this.determineSwarmSize(task);
|
|
24
|
-
const peerNames = [];
|
|
25
|
-
try {
|
|
26
|
-
// Set up channel monitoring
|
|
27
|
-
this.setupChannelMonitoring();
|
|
28
|
-
// Partition task among peers
|
|
29
|
-
const subtasks = this.partitionTask(task, agentCount);
|
|
30
|
-
// Spawn peer agents simultaneously
|
|
31
|
-
this.log(`Spawning ${agentCount} peer agents...`);
|
|
32
|
-
const spawnPromises = subtasks.map((subtask, i) => this.orchestrator.spawn({
|
|
33
|
-
name: `Peer${i}`,
|
|
34
|
-
cli: this.config.cli,
|
|
35
|
-
task: this.buildPeerPrompt(subtask, i, agentCount, task),
|
|
36
|
-
cwd: this.config.cwd,
|
|
37
|
-
team: 'swarm',
|
|
38
|
-
}));
|
|
39
|
-
const results = await Promise.all(spawnPromises);
|
|
40
|
-
firstActionTime = Date.now() - startTime;
|
|
41
|
-
this.log(`Peers spawned in ${firstActionTime}ms`);
|
|
42
|
-
// Track successful spawns
|
|
43
|
-
for (let i = 0; i < results.length; i++) {
|
|
44
|
-
if (results[i].success) {
|
|
45
|
-
peerNames.push(`Peer${i}`);
|
|
46
|
-
this.metrics.spawnedAgents.push(`Peer${i}`);
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
this.metrics.errors.push(`Peer${i} spawn failed: ${results[i].error}`);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
if (peerNames.length === 0) {
|
|
53
|
-
return this.buildFailedResult(task, startTime, this.metrics.errors);
|
|
54
|
-
}
|
|
55
|
-
// Have orchestrator join #swarm channel to monitor
|
|
56
|
-
this.orchestrator.joinChannel('#swarm');
|
|
57
|
-
// Wait for swarm consensus on completion
|
|
58
|
-
success = await this.waitForSwarmCompletion(peerNames, task);
|
|
59
|
-
if (success) {
|
|
60
|
-
this.log(`Task completed by swarm of ${peerNames.length} peers`);
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
this.log(`Swarm completed ${this.completedPeers.size}/${peerNames.length} subtasks`);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
catch (err) {
|
|
67
|
-
this.metrics.errors.push(err.message);
|
|
68
|
-
}
|
|
69
|
-
// Collect final metrics
|
|
70
|
-
let totalTokens = 0;
|
|
71
|
-
let peakMemory = 0;
|
|
72
|
-
try {
|
|
73
|
-
const metrics = await this.orchestrator.getMetrics();
|
|
74
|
-
totalTokens = this.extractTokens(metrics);
|
|
75
|
-
peakMemory = this.extractMemory(metrics);
|
|
76
|
-
}
|
|
77
|
-
catch {
|
|
78
|
-
// Metrics collection failed
|
|
79
|
-
}
|
|
80
|
-
const completedAt = Date.now();
|
|
81
|
-
return {
|
|
82
|
-
taskId: task.id,
|
|
83
|
-
configuration: 'swarm',
|
|
84
|
-
totalTimeMs: completedAt - startTime,
|
|
85
|
-
timeToFirstActionMs: firstActionTime,
|
|
86
|
-
messageCount: this.metrics.messages,
|
|
87
|
-
avgLatencyMs: this.metrics.latencies.length > 0
|
|
88
|
-
? this.metrics.latencies.reduce((a, b) => a + b, 0) /
|
|
89
|
-
this.metrics.latencies.length
|
|
90
|
-
: 0,
|
|
91
|
-
latencyP50Ms: this.percentile(this.metrics.latencies, 50),
|
|
92
|
-
latencyP99Ms: this.percentile(this.metrics.latencies, 99),
|
|
93
|
-
coordinationRounds: Math.ceil(this.metrics.messages / Math.max(1, peerNames.length)),
|
|
94
|
-
agentCount: peerNames.length,
|
|
95
|
-
totalTokensUsed: totalTokens,
|
|
96
|
-
peakMemoryMb: peakMemory,
|
|
97
|
-
success,
|
|
98
|
-
completionRate: this.completedPeers.size / Math.max(1, peerNames.length),
|
|
99
|
-
errors: this.metrics.errors,
|
|
100
|
-
startedAt: startTime,
|
|
101
|
-
completedAt,
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Set up channel message monitoring
|
|
106
|
-
*/
|
|
107
|
-
setupChannelMonitoring() {
|
|
108
|
-
this.orchestrator.onChannelMessage = (from, channel, body, envelope) => {
|
|
109
|
-
this.metrics.messages++;
|
|
110
|
-
// Track completion announcements
|
|
111
|
-
if (channel === '#swarm' && body.startsWith('DONE:')) {
|
|
112
|
-
this.completedPeers.add(from);
|
|
113
|
-
this.log(`${from} completed: ${body.substring(5).trim()}`);
|
|
114
|
-
}
|
|
115
|
-
// Track errors
|
|
116
|
-
if (body.startsWith('ERROR:') || body.startsWith('BLOCKED:')) {
|
|
117
|
-
this.metrics.errors.push(`${from}: ${body}`);
|
|
118
|
-
}
|
|
119
|
-
};
|
|
120
|
-
this.orchestrator.onMessage = (from, payload, id, meta, originalTo) => {
|
|
121
|
-
this.metrics.messages++;
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Determine swarm size based on task complexity and files
|
|
126
|
-
*/
|
|
127
|
-
determineSwarmSize(task) {
|
|
128
|
-
let baseSize;
|
|
129
|
-
switch (task.complexity) {
|
|
130
|
-
case 'low':
|
|
131
|
-
baseSize = 2;
|
|
132
|
-
break;
|
|
133
|
-
case 'medium':
|
|
134
|
-
baseSize = 3;
|
|
135
|
-
break;
|
|
136
|
-
case 'high':
|
|
137
|
-
baseSize = 5;
|
|
138
|
-
break;
|
|
139
|
-
default:
|
|
140
|
-
baseSize = 3;
|
|
141
|
-
}
|
|
142
|
-
// Don't have more agents than files
|
|
143
|
-
const fileCount = task.files.length;
|
|
144
|
-
const size = Math.min(baseSize, fileCount, this.config.maxSwarmSize);
|
|
145
|
-
return Math.max(2, size); // At least 2 for swarm
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Partition task files among agents
|
|
149
|
-
*/
|
|
150
|
-
partitionTask(task, count) {
|
|
151
|
-
const filesPerAgent = Math.ceil(task.files.length / count);
|
|
152
|
-
const subtasks = [];
|
|
153
|
-
for (let i = 0; i < count; i++) {
|
|
154
|
-
const start = i * filesPerAgent;
|
|
155
|
-
const files = task.files.slice(start, start + filesPerAgent);
|
|
156
|
-
// Handle case where we have more agents than files
|
|
157
|
-
if (files.length === 0)
|
|
158
|
-
continue;
|
|
159
|
-
subtasks.push({
|
|
160
|
-
...task,
|
|
161
|
-
id: `${task.id}-part${i}`,
|
|
162
|
-
files,
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
return subtasks;
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Build prompt for a peer agent
|
|
169
|
-
*/
|
|
170
|
-
buildPeerPrompt(subtask, index, totalPeers, fullTask) {
|
|
171
|
-
const otherPeers = Array.from({ length: totalPeers }, (_, i) => `Peer${i}`)
|
|
172
|
-
.filter((_, i) => i !== index)
|
|
173
|
-
.join(', ');
|
|
174
|
-
return `You are Peer${index} in a swarm of ${totalPeers} peer agents working together.
|
|
175
|
-
|
|
176
|
-
## Your Subtask
|
|
177
|
-
Work on these files: ${subtask.files.map((f) => `\`${f}\``).join(', ')}
|
|
178
|
-
|
|
179
|
-
## Full Task Context
|
|
180
|
-
${fullTask.description}
|
|
181
|
-
|
|
182
|
-
## Success Criteria (for full task)
|
|
183
|
-
${fullTask.expectedOutcome}
|
|
184
|
-
|
|
185
|
-
## Peer Coordination
|
|
186
|
-
|
|
187
|
-
You are working alongside: ${otherPeers}
|
|
188
|
-
|
|
189
|
-
**Communication via #swarm channel:**
|
|
190
|
-
|
|
191
|
-
Share your progress:
|
|
192
|
-
\`\`\`bash
|
|
193
|
-
cat > $AGENT_RELAY_OUTBOX/msg << 'EOF'
|
|
194
|
-
TO: #swarm
|
|
195
|
-
|
|
196
|
-
STATUS: Working on <what you're doing>
|
|
197
|
-
EOF
|
|
198
|
-
\`\`\`
|
|
199
|
-
Then: ->relay-file:msg
|
|
200
|
-
|
|
201
|
-
Ask questions to the swarm:
|
|
202
|
-
\`\`\`bash
|
|
203
|
-
cat > $AGENT_RELAY_OUTBOX/msg << 'EOF'
|
|
204
|
-
TO: #swarm
|
|
205
|
-
|
|
206
|
-
QUESTION: <your question>
|
|
207
|
-
EOF
|
|
208
|
-
\`\`\`
|
|
209
|
-
Then: ->relay-file:msg
|
|
210
|
-
|
|
211
|
-
Report blockers:
|
|
212
|
-
\`\`\`bash
|
|
213
|
-
cat > $AGENT_RELAY_OUTBOX/msg << 'EOF'
|
|
214
|
-
TO: #swarm
|
|
215
|
-
|
|
216
|
-
BLOCKED: <what's blocking you>
|
|
217
|
-
EOF
|
|
218
|
-
\`\`\`
|
|
219
|
-
Then: ->relay-file:msg
|
|
220
|
-
|
|
221
|
-
## Completion
|
|
222
|
-
|
|
223
|
-
When YOUR part is complete:
|
|
224
|
-
\`\`\`bash
|
|
225
|
-
cat > $AGENT_RELAY_OUTBOX/msg << 'EOF'
|
|
226
|
-
TO: #swarm
|
|
227
|
-
|
|
228
|
-
DONE: Peer${index} completed <brief summary>
|
|
229
|
-
EOF
|
|
230
|
-
\`\`\`
|
|
231
|
-
Then: ->relay-file:msg
|
|
232
|
-
|
|
233
|
-
## Guidelines
|
|
234
|
-
|
|
235
|
-
1. Focus on your assigned files
|
|
236
|
-
2. Coordinate with peers on shared interfaces/dependencies
|
|
237
|
-
3. Don't duplicate work - check the channel for updates
|
|
238
|
-
4. Help peers if they're blocked and you can assist`;
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* Wait for all peers to complete
|
|
242
|
-
*/
|
|
243
|
-
waitForSwarmCompletion(peers, task) {
|
|
244
|
-
const timeoutMs = task.timeoutMs || 300000;
|
|
245
|
-
return new Promise((resolve) => {
|
|
246
|
-
const timeout = setTimeout(() => {
|
|
247
|
-
this.metrics.errors.push(`Swarm timeout: ${this.completedPeers.size}/${peers.length} completed`);
|
|
248
|
-
resolve(false);
|
|
249
|
-
}, timeoutMs);
|
|
250
|
-
// Check periodically if all peers are done
|
|
251
|
-
const checkInterval = setInterval(() => {
|
|
252
|
-
if (this.completedPeers.size >= peers.length) {
|
|
253
|
-
clearInterval(checkInterval);
|
|
254
|
-
clearTimeout(timeout);
|
|
255
|
-
resolve(true);
|
|
256
|
-
}
|
|
257
|
-
}, 1000);
|
|
258
|
-
// Also check on each channel message
|
|
259
|
-
const originalHandler = this.orchestrator.onChannelMessage;
|
|
260
|
-
this.orchestrator.onChannelMessage = (from, channel, body, envelope) => {
|
|
261
|
-
if (originalHandler) {
|
|
262
|
-
originalHandler(from, channel, body, envelope);
|
|
263
|
-
}
|
|
264
|
-
if (this.completedPeers.size >= peers.length) {
|
|
265
|
-
clearInterval(checkInterval);
|
|
266
|
-
clearTimeout(timeout);
|
|
267
|
-
resolve(true);
|
|
268
|
-
}
|
|
269
|
-
};
|
|
270
|
-
});
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
//# sourceMappingURL=swarm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"swarm.js","sourceRoot":"","sources":["../../src/runners/swarm.ts"],"names":[],"mappings":"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"}
|