@bradygaster/squad-sdk 0.7.0 → 0.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +296 -296
- package/dist/adapter/client.d.ts +243 -0
- package/dist/adapter/client.d.ts.map +1 -0
- package/dist/adapter/client.js +567 -0
- package/dist/adapter/client.js.map +1 -0
- package/dist/adapter/errors.d.ts +260 -0
- package/dist/adapter/errors.d.ts.map +1 -0
- package/dist/adapter/errors.js +362 -0
- package/dist/adapter/errors.js.map +1 -0
- package/dist/adapter/types.d.ts +779 -0
- package/dist/adapter/types.d.ts.map +1 -0
- package/dist/adapter/types.js +11 -0
- package/dist/adapter/types.js.map +1 -0
- package/dist/agents/charter-compiler.d.ts +102 -0
- package/dist/agents/charter-compiler.d.ts.map +1 -0
- package/dist/agents/charter-compiler.js +157 -0
- package/dist/agents/charter-compiler.js.map +1 -0
- package/dist/agents/history-shadow.d.ts +80 -0
- package/dist/agents/history-shadow.d.ts.map +1 -0
- package/dist/agents/history-shadow.js +239 -0
- package/dist/agents/history-shadow.js.map +1 -0
- package/dist/agents/index.d.ts +71 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +183 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/lifecycle.d.ts +138 -0
- package/dist/agents/lifecycle.d.ts.map +1 -0
- package/dist/agents/lifecycle.js +284 -0
- package/dist/agents/lifecycle.js.map +1 -0
- package/dist/agents/model-selector.d.ts +80 -0
- package/dist/agents/model-selector.d.ts.map +1 -0
- package/dist/agents/model-selector.js +171 -0
- package/dist/agents/model-selector.js.map +1 -0
- package/dist/agents/onboarding.d.ts +65 -0
- package/dist/agents/onboarding.d.ts.map +1 -0
- package/dist/agents/onboarding.js +373 -0
- package/dist/agents/onboarding.js.map +1 -0
- package/dist/build/bundle.d.ts +32 -0
- package/dist/build/bundle.d.ts.map +1 -0
- package/dist/build/bundle.js +97 -0
- package/dist/build/bundle.js.map +1 -0
- package/dist/build/ci-pipeline.d.ts +51 -0
- package/dist/build/ci-pipeline.d.ts.map +1 -0
- package/dist/build/ci-pipeline.js +180 -0
- package/dist/build/ci-pipeline.js.map +1 -0
- package/dist/build/github-dist.d.ts +37 -0
- package/dist/build/github-dist.d.ts.map +1 -0
- package/dist/build/github-dist.js +117 -0
- package/dist/build/github-dist.js.map +1 -0
- package/dist/build/index.d.ts +11 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +11 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/install-migration.d.ts +28 -0
- package/dist/build/install-migration.d.ts.map +1 -0
- package/dist/build/install-migration.js +103 -0
- package/dist/build/install-migration.js.map +1 -0
- package/dist/build/npm-package.d.ts +54 -0
- package/dist/build/npm-package.d.ts.map +1 -0
- package/dist/build/npm-package.js +128 -0
- package/dist/build/npm-package.js.map +1 -0
- package/dist/build/release.d.ts +108 -0
- package/dist/build/release.d.ts.map +1 -0
- package/dist/build/release.js +295 -0
- package/dist/build/release.js.map +1 -0
- package/dist/build/versioning.d.ts +38 -0
- package/dist/build/versioning.d.ts.map +1 -0
- package/dist/build/versioning.js +113 -0
- package/dist/build/versioning.js.map +1 -0
- package/dist/casting/casting-engine.d.ts +60 -0
- package/dist/casting/casting-engine.d.ts.map +1 -0
- package/dist/casting/casting-engine.js +223 -0
- package/dist/casting/casting-engine.js.map +1 -0
- package/dist/casting/casting-history.d.ts +54 -0
- package/dist/casting/casting-history.d.ts.map +1 -0
- package/dist/casting/casting-history.js +63 -0
- package/dist/casting/casting-history.js.map +1 -0
- package/dist/casting/index.d.ts +46 -0
- package/dist/casting/index.d.ts.map +1 -0
- package/dist/casting/index.js +45 -0
- package/dist/casting/index.js.map +1 -0
- package/dist/client/event-bus.d.ts +29 -0
- package/dist/client/event-bus.d.ts.map +1 -0
- package/dist/client/event-bus.js +52 -0
- package/dist/client/event-bus.js.map +1 -0
- package/dist/client/index.d.ts +100 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +170 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/session-pool.d.ts +66 -0
- package/dist/client/session-pool.d.ts.map +1 -0
- package/dist/client/session-pool.js +145 -0
- package/dist/client/session-pool.js.map +1 -0
- package/dist/config/agent-doc.d.ts +43 -0
- package/dist/config/agent-doc.d.ts.map +1 -0
- package/dist/config/agent-doc.js +158 -0
- package/dist/config/agent-doc.js.map +1 -0
- package/dist/config/agent-source.d.ts +95 -0
- package/dist/config/agent-source.d.ts.map +1 -0
- package/dist/config/agent-source.js +274 -0
- package/dist/config/agent-source.js.map +1 -0
- package/dist/config/doc-sync.d.ts +66 -0
- package/dist/config/doc-sync.d.ts.map +1 -0
- package/dist/config/doc-sync.js +270 -0
- package/dist/config/doc-sync.js.map +1 -0
- package/dist/config/feature-audit.d.ts +49 -0
- package/dist/config/feature-audit.d.ts.map +1 -0
- package/dist/config/feature-audit.js +148 -0
- package/dist/config/feature-audit.js.map +1 -0
- package/dist/config/index.d.ts +15 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +15 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/init.d.ts +61 -0
- package/dist/config/init.d.ts.map +1 -0
- package/dist/config/init.js +376 -0
- package/dist/config/init.js.map +1 -0
- package/dist/config/legacy-fallback.d.ts +83 -0
- package/dist/config/legacy-fallback.d.ts.map +1 -0
- package/dist/config/legacy-fallback.js +212 -0
- package/dist/config/legacy-fallback.js.map +1 -0
- package/dist/config/markdown-migration.d.ts +157 -0
- package/dist/config/markdown-migration.d.ts.map +1 -0
- package/dist/config/markdown-migration.js +434 -0
- package/dist/config/markdown-migration.js.map +1 -0
- package/dist/config/migration.d.ts +123 -0
- package/dist/config/migration.d.ts.map +1 -0
- package/dist/config/migration.js +273 -0
- package/dist/config/migration.js.map +1 -0
- package/dist/config/migrations/index.d.ts +36 -0
- package/dist/config/migrations/index.d.ts.map +1 -0
- package/dist/config/migrations/index.js +216 -0
- package/dist/config/migrations/index.js.map +1 -0
- package/dist/config/models.d.ts +134 -0
- package/dist/config/models.d.ts.map +1 -0
- package/dist/config/models.js +354 -0
- package/dist/config/models.js.map +1 -0
- package/dist/config/routing.d.ts +118 -0
- package/dist/config/routing.d.ts.map +1 -0
- package/dist/config/routing.js +247 -0
- package/dist/config/routing.js.map +1 -0
- package/dist/config/schema.d.ts +72 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +63 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/coordinator/coordinator.d.ts +82 -0
- package/dist/coordinator/coordinator.d.ts.map +1 -0
- package/dist/coordinator/coordinator.js +192 -0
- package/dist/coordinator/coordinator.js.map +1 -0
- package/dist/coordinator/direct-response.d.ts +83 -0
- package/dist/coordinator/direct-response.d.ts.map +1 -0
- package/dist/coordinator/direct-response.js +187 -0
- package/dist/coordinator/direct-response.js.map +1 -0
- package/dist/coordinator/fan-out.d.ts +83 -0
- package/dist/coordinator/fan-out.d.ts.map +1 -0
- package/dist/coordinator/fan-out.js +161 -0
- package/dist/coordinator/fan-out.js.map +1 -0
- package/dist/coordinator/index.d.ts +62 -0
- package/dist/coordinator/index.d.ts.map +1 -0
- package/dist/coordinator/index.js +171 -0
- package/dist/coordinator/index.js.map +1 -0
- package/dist/coordinator/response-tiers.d.ts +49 -0
- package/dist/coordinator/response-tiers.d.ts.map +1 -0
- package/dist/coordinator/response-tiers.js +149 -0
- package/dist/coordinator/response-tiers.js.map +1 -0
- package/dist/hooks/index.d.ts +103 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +279 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +33 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -3
- package/dist/index.js.map +1 -1
- package/dist/marketplace/backend.d.ts +35 -0
- package/dist/marketplace/backend.d.ts.map +1 -0
- package/dist/marketplace/backend.js +99 -0
- package/dist/marketplace/backend.js.map +1 -0
- package/dist/marketplace/browser.d.ts +33 -0
- package/dist/marketplace/browser.d.ts.map +1 -0
- package/dist/marketplace/browser.js +97 -0
- package/dist/marketplace/browser.js.map +1 -0
- package/dist/marketplace/extension-adapter.d.ts +51 -0
- package/dist/marketplace/extension-adapter.d.ts.map +1 -0
- package/dist/marketplace/extension-adapter.js +81 -0
- package/dist/marketplace/extension-adapter.js.map +1 -0
- package/dist/marketplace/index.d.ts +51 -0
- package/dist/marketplace/index.d.ts.map +1 -0
- package/dist/marketplace/index.js +108 -0
- package/dist/marketplace/index.js.map +1 -0
- package/dist/marketplace/packaging.d.ts +25 -0
- package/dist/marketplace/packaging.d.ts.map +1 -0
- package/dist/marketplace/packaging.js +117 -0
- package/dist/marketplace/packaging.js.map +1 -0
- package/dist/marketplace/schema.d.ts +50 -0
- package/dist/marketplace/schema.d.ts.map +1 -0
- package/dist/marketplace/schema.js +120 -0
- package/dist/marketplace/schema.js.map +1 -0
- package/dist/marketplace/security.d.ts +26 -0
- package/dist/marketplace/security.d.ts.map +1 -0
- package/dist/marketplace/security.js +199 -0
- package/dist/marketplace/security.js.map +1 -0
- package/dist/parsers.d.ts +15 -0
- package/dist/parsers.d.ts.map +1 -0
- package/dist/parsers.js +15 -0
- package/dist/parsers.js.map +1 -0
- package/dist/ralph/index.d.ts +58 -0
- package/dist/ralph/index.d.ts.map +1 -0
- package/dist/ralph/index.js +128 -0
- package/dist/ralph/index.js.map +1 -0
- package/dist/resolution.d.ts +47 -0
- package/dist/resolution.d.ts.map +1 -0
- package/dist/resolution.js +106 -0
- package/dist/resolution.js.map +1 -0
- package/dist/runtime/benchmarks.d.ts +121 -0
- package/dist/runtime/benchmarks.d.ts.map +1 -0
- package/dist/runtime/benchmarks.js +251 -0
- package/dist/runtime/benchmarks.js.map +1 -0
- package/dist/runtime/config.d.ts +314 -0
- package/dist/runtime/config.d.ts.map +1 -0
- package/dist/runtime/config.js +467 -0
- package/dist/runtime/config.js.map +1 -0
- package/dist/runtime/constants.d.ts +35 -0
- package/dist/runtime/constants.d.ts.map +1 -0
- package/dist/runtime/constants.js +58 -0
- package/dist/runtime/constants.js.map +1 -0
- package/dist/runtime/cost-tracker.d.ts +73 -0
- package/dist/runtime/cost-tracker.d.ts.map +1 -0
- package/dist/runtime/cost-tracker.js +157 -0
- package/dist/runtime/cost-tracker.js.map +1 -0
- package/dist/runtime/event-bus-otel-bridge.d.ts +19 -0
- package/dist/runtime/event-bus-otel-bridge.d.ts.map +1 -0
- package/dist/runtime/event-bus-otel-bridge.js +61 -0
- package/dist/runtime/event-bus-otel-bridge.js.map +1 -0
- package/dist/runtime/event-bus-ws-bridge.d.ts +35 -0
- package/dist/runtime/event-bus-ws-bridge.d.ts.map +1 -0
- package/dist/runtime/event-bus-ws-bridge.js +55 -0
- package/dist/runtime/event-bus-ws-bridge.js.map +1 -0
- package/dist/runtime/event-bus.d.ts +190 -0
- package/dist/runtime/event-bus.d.ts.map +1 -0
- package/dist/runtime/event-bus.js +218 -0
- package/dist/runtime/event-bus.js.map +1 -0
- package/dist/runtime/event-payloads.d.ts +108 -0
- package/dist/runtime/event-payloads.d.ts.map +1 -0
- package/dist/runtime/event-payloads.js +28 -0
- package/dist/runtime/event-payloads.js.map +1 -0
- package/dist/runtime/health.d.ts +66 -0
- package/dist/runtime/health.d.ts.map +1 -0
- package/dist/runtime/health.js +112 -0
- package/dist/runtime/health.js.map +1 -0
- package/dist/runtime/i18n.d.ts +54 -0
- package/dist/runtime/i18n.d.ts.map +1 -0
- package/dist/runtime/i18n.js +126 -0
- package/dist/runtime/i18n.js.map +1 -0
- package/dist/runtime/offline.d.ts +64 -0
- package/dist/runtime/offline.d.ts.map +1 -0
- package/dist/runtime/offline.js +108 -0
- package/dist/runtime/offline.js.map +1 -0
- package/dist/runtime/otel-bridge.d.ts +52 -0
- package/dist/runtime/otel-bridge.d.ts.map +1 -0
- package/dist/runtime/otel-bridge.js +132 -0
- package/dist/runtime/otel-bridge.js.map +1 -0
- package/dist/runtime/otel-init.d.ts +72 -0
- package/dist/runtime/otel-init.d.ts.map +1 -0
- package/dist/runtime/otel-init.js +68 -0
- package/dist/runtime/otel-init.js.map +1 -0
- package/dist/runtime/otel-metrics.d.ts +42 -0
- package/dist/runtime/otel-metrics.d.ts.map +1 -0
- package/dist/runtime/otel-metrics.js +196 -0
- package/dist/runtime/otel-metrics.js.map +1 -0
- package/dist/runtime/otel.d.ts +53 -0
- package/dist/runtime/otel.d.ts.map +1 -0
- package/dist/runtime/otel.js +127 -0
- package/dist/runtime/otel.js.map +1 -0
- package/dist/runtime/squad-observer.d.ts +75 -0
- package/dist/runtime/squad-observer.d.ts.map +1 -0
- package/dist/runtime/squad-observer.js +190 -0
- package/dist/runtime/squad-observer.js.map +1 -0
- package/dist/runtime/streaming.d.ts +106 -0
- package/dist/runtime/streaming.d.ts.map +1 -0
- package/dist/runtime/streaming.js +192 -0
- package/dist/runtime/streaming.js.map +1 -0
- package/dist/runtime/telemetry.d.ts +82 -0
- package/dist/runtime/telemetry.d.ts.map +1 -0
- package/dist/runtime/telemetry.js +120 -0
- package/dist/runtime/telemetry.js.map +1 -0
- package/dist/sharing/agent-repo.d.ts +33 -0
- package/dist/sharing/agent-repo.d.ts.map +1 -0
- package/dist/sharing/agent-repo.js +79 -0
- package/dist/sharing/agent-repo.js.map +1 -0
- package/dist/sharing/cache.d.ts +36 -0
- package/dist/sharing/cache.d.ts.map +1 -0
- package/dist/sharing/cache.js +85 -0
- package/dist/sharing/cache.js.map +1 -0
- package/dist/sharing/conflicts.d.ts +32 -0
- package/dist/sharing/conflicts.d.ts.map +1 -0
- package/dist/sharing/conflicts.js +121 -0
- package/dist/sharing/conflicts.js.map +1 -0
- package/dist/sharing/export.d.ts +50 -0
- package/dist/sharing/export.d.ts.map +1 -0
- package/dist/sharing/export.js +156 -0
- package/dist/sharing/export.js.map +1 -0
- package/dist/sharing/history-split.d.ts +34 -0
- package/dist/sharing/history-split.d.ts.map +1 -0
- package/dist/sharing/history-split.js +101 -0
- package/dist/sharing/history-split.js.map +1 -0
- package/dist/sharing/import.d.ts +37 -0
- package/dist/sharing/import.d.ts.map +1 -0
- package/dist/sharing/import.js +138 -0
- package/dist/sharing/import.js.map +1 -0
- package/dist/sharing/index.d.ts +11 -0
- package/dist/sharing/index.d.ts.map +1 -0
- package/dist/sharing/index.js +11 -0
- package/dist/sharing/index.js.map +1 -0
- package/dist/sharing/versioning.d.ts +32 -0
- package/dist/sharing/versioning.d.ts.map +1 -0
- package/dist/sharing/versioning.js +64 -0
- package/dist/sharing/versioning.js.map +1 -0
- package/dist/skills/index.d.ts +49 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +85 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/skill-loader.d.ts +56 -0
- package/dist/skills/skill-loader.d.ts.map +1 -0
- package/dist/skills/skill-loader.js +106 -0
- package/dist/skills/skill-loader.js.map +1 -0
- package/dist/skills/skill-source.d.ts +63 -0
- package/dist/skills/skill-source.d.ts.map +1 -0
- package/dist/skills/skill-source.js +199 -0
- package/dist/skills/skill-source.js.map +1 -0
- package/dist/tools/index.d.ts +95 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +475 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types.d.ts +43 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/upstream/index.d.ts +8 -0
- package/dist/upstream/index.d.ts.map +1 -0
- package/dist/upstream/index.js +7 -0
- package/dist/upstream/index.js.map +1 -0
- package/dist/upstream/resolver.d.ts +37 -0
- package/dist/upstream/resolver.d.ts.map +1 -0
- package/dist/upstream/resolver.js +234 -0
- package/dist/upstream/resolver.js.map +1 -0
- package/dist/upstream/types.d.ts +55 -0
- package/dist/upstream/types.d.ts.map +1 -0
- package/dist/upstream/types.js +11 -0
- package/dist/upstream/types.js.map +1 -0
- package/dist/utils/normalize-eol.d.ts +6 -0
- package/dist/utils/normalize-eol.d.ts.map +1 -0
- package/dist/utils/normalize-eol.js +8 -0
- package/dist/utils/normalize-eol.js.map +1 -0
- package/package.json +197 -63
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Squad Coordinator (M3-1, Issue #135)
|
|
3
|
+
*
|
|
4
|
+
* The brain of Squad — receives user messages, decides how to handle them,
|
|
5
|
+
* and orchestrates agent spawning. Wires together:
|
|
6
|
+
* - DirectResponseHandler (no-spawn fast path)
|
|
7
|
+
* - Routing rules (matchRoute / compileRoutingRules)
|
|
8
|
+
* - Charter compilation (compileCharter)
|
|
9
|
+
* - Model selection (resolveModel)
|
|
10
|
+
* - Fan-out spawning (spawnParallel)
|
|
11
|
+
* - Event bus (observability)
|
|
12
|
+
*/
|
|
13
|
+
import { DirectResponseHandler, } from './direct-response.js';
|
|
14
|
+
import { matchRoute, compileRoutingRules, } from '../config/routing.js';
|
|
15
|
+
import { spawnParallel } from './fan-out.js';
|
|
16
|
+
import { trace, SpanStatusCode } from '@opentelemetry/api';
|
|
17
|
+
const tracer = trace.getTracer('squad-sdk');
|
|
18
|
+
// --- Coordinator Class ---
|
|
19
|
+
/**
|
|
20
|
+
* Main coordinator entry point.
|
|
21
|
+
*
|
|
22
|
+
* Pipeline:
|
|
23
|
+
* 1. Direct response check (no-spawn fast path)
|
|
24
|
+
* 2. Route analysis (message → routing rules → agent selection)
|
|
25
|
+
* 3. Spawn strategy (single vs multi vs fallback)
|
|
26
|
+
* 4. Fan-out spawn
|
|
27
|
+
* 5. Collect results + emit events
|
|
28
|
+
*/
|
|
29
|
+
export class SquadCoordinator {
|
|
30
|
+
config;
|
|
31
|
+
eventBus;
|
|
32
|
+
directHandler;
|
|
33
|
+
compiledRouter;
|
|
34
|
+
fanOutDeps;
|
|
35
|
+
constructor(options) {
|
|
36
|
+
this.config = options.config;
|
|
37
|
+
this.eventBus = options.eventBus;
|
|
38
|
+
this.fanOutDeps = options.fanOutDeps;
|
|
39
|
+
this.directHandler = options.directHandler ?? new DirectResponseHandler();
|
|
40
|
+
// Compile routing rules from config or use provided router
|
|
41
|
+
if (options.compiledRouter) {
|
|
42
|
+
this.compiledRouter = options.compiledRouter;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
this.compiledRouter = this.compileRouter(this.config);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Main dispatch — handle an incoming user message.
|
|
50
|
+
*/
|
|
51
|
+
async handleMessage(message, context) {
|
|
52
|
+
const span = tracer.startSpan('squad.coordinator.handleMessage');
|
|
53
|
+
span.setAttribute('message.length', message.length);
|
|
54
|
+
try {
|
|
55
|
+
const start = Date.now();
|
|
56
|
+
// Emit coordinator.route event
|
|
57
|
+
await this.emit('coordinator:routing', context.sessionId, {
|
|
58
|
+
phase: 'start',
|
|
59
|
+
messageLength: message.length,
|
|
60
|
+
});
|
|
61
|
+
// --- Step 1: Direct response check ---
|
|
62
|
+
if (this.directHandler.shouldHandleDirectly(message, this.config)) {
|
|
63
|
+
const directResult = this.directHandler.handleDirect(message, context);
|
|
64
|
+
await this.emit('coordinator:routing', context.sessionId, {
|
|
65
|
+
phase: 'complete',
|
|
66
|
+
strategy: 'direct',
|
|
67
|
+
category: directResult.category,
|
|
68
|
+
});
|
|
69
|
+
span.setAttribute('routing.strategy', 'direct');
|
|
70
|
+
return {
|
|
71
|
+
strategy: 'direct',
|
|
72
|
+
directResponse: directResult,
|
|
73
|
+
durationMs: Date.now() - start,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
// --- Step 2: Route analysis ---
|
|
77
|
+
const routing = matchRoute(message, this.compiledRouter);
|
|
78
|
+
await this.emit('coordinator:routing', context.sessionId, {
|
|
79
|
+
phase: 'routed',
|
|
80
|
+
agents: routing.agents,
|
|
81
|
+
confidence: routing.confidence,
|
|
82
|
+
reason: routing.reason,
|
|
83
|
+
});
|
|
84
|
+
span.setAttribute('target.agents', routing.agents.join(','));
|
|
85
|
+
span.setAttribute('routing.confidence', routing.confidence);
|
|
86
|
+
// --- Step 3: Determine spawn strategy ---
|
|
87
|
+
const strategy = this.determineStrategy(routing);
|
|
88
|
+
span.setAttribute('routing.strategy', strategy);
|
|
89
|
+
// --- Step 4: Spawn agents ---
|
|
90
|
+
let spawnResults;
|
|
91
|
+
if (this.fanOutDeps && (strategy === 'single' || strategy === 'multi')) {
|
|
92
|
+
const spawnConfigs = this.buildSpawnConfigs(routing, message, context);
|
|
93
|
+
await this.emit('coordinator:routing', context.sessionId, {
|
|
94
|
+
phase: 'spawning',
|
|
95
|
+
strategy,
|
|
96
|
+
agentCount: spawnConfigs.length,
|
|
97
|
+
});
|
|
98
|
+
spawnResults = await spawnParallel(spawnConfigs, this.fanOutDeps);
|
|
99
|
+
// If all spawns failed in single mode, mark as fallback
|
|
100
|
+
if (strategy === 'single' && spawnResults.every(r => r.status === 'failed')) {
|
|
101
|
+
return {
|
|
102
|
+
strategy: 'fallback',
|
|
103
|
+
routing,
|
|
104
|
+
spawnResults,
|
|
105
|
+
durationMs: Date.now() - start,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// --- Step 5: Complete ---
|
|
110
|
+
await this.emit('coordinator:routing', context.sessionId, {
|
|
111
|
+
phase: 'complete',
|
|
112
|
+
strategy,
|
|
113
|
+
spawnCount: spawnResults?.length ?? 0,
|
|
114
|
+
successCount: spawnResults?.filter(r => r.status === 'success').length ?? 0,
|
|
115
|
+
});
|
|
116
|
+
return {
|
|
117
|
+
strategy,
|
|
118
|
+
routing,
|
|
119
|
+
spawnResults,
|
|
120
|
+
durationMs: Date.now() - start,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: err instanceof Error ? err.message : String(err) });
|
|
125
|
+
span.recordException(err instanceof Error ? err : new Error(String(err)));
|
|
126
|
+
throw err;
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
span.end();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get the compiled router (for inspection / testing).
|
|
134
|
+
*/
|
|
135
|
+
getRouter() {
|
|
136
|
+
return this.compiledRouter;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Get the direct response handler (for inspection / testing).
|
|
140
|
+
*/
|
|
141
|
+
getDirectHandler() {
|
|
142
|
+
return this.directHandler;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Update configuration at runtime.
|
|
146
|
+
*/
|
|
147
|
+
updateConfig(config) {
|
|
148
|
+
this.config = config;
|
|
149
|
+
this.compiledRouter = this.compileRouter(config);
|
|
150
|
+
}
|
|
151
|
+
// --- Private helpers ---
|
|
152
|
+
determineStrategy(routing) {
|
|
153
|
+
if (routing.agents.length === 0)
|
|
154
|
+
return 'fallback';
|
|
155
|
+
if (routing.agents.length === 1)
|
|
156
|
+
return 'single';
|
|
157
|
+
return 'multi';
|
|
158
|
+
}
|
|
159
|
+
buildSpawnConfigs(routing, message, context) {
|
|
160
|
+
return routing.agents.map((agentName) => ({
|
|
161
|
+
agentName: agentName.replace(/^@/, ''),
|
|
162
|
+
task: message,
|
|
163
|
+
priority: routing.confidence === 'high' ? 'normal' : 'low',
|
|
164
|
+
context: context.metadata ? JSON.stringify(context.metadata) : undefined,
|
|
165
|
+
}));
|
|
166
|
+
}
|
|
167
|
+
compileRouter(config) {
|
|
168
|
+
// Convert config routing rules → runtime routing rules for the compiler
|
|
169
|
+
const runtimeRules = (config.routing?.rules ?? []).map((rule) => ({
|
|
170
|
+
workType: rule.workType ?? rule.pattern ?? 'unknown',
|
|
171
|
+
agents: rule.agents,
|
|
172
|
+
examples: rule.examples,
|
|
173
|
+
confidence: rule.confidence,
|
|
174
|
+
}));
|
|
175
|
+
const routingConfig = {
|
|
176
|
+
rules: runtimeRules,
|
|
177
|
+
governance: config.routing?.governance,
|
|
178
|
+
};
|
|
179
|
+
return compileRoutingRules(routingConfig);
|
|
180
|
+
}
|
|
181
|
+
async emit(type, sessionId, payload) {
|
|
182
|
+
if (!this.eventBus)
|
|
183
|
+
return;
|
|
184
|
+
await this.eventBus.emit({
|
|
185
|
+
type: type,
|
|
186
|
+
sessionId,
|
|
187
|
+
payload,
|
|
188
|
+
timestamp: new Date(),
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=coordinator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../src/coordinator/coordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Direct Response Handler (M3-6, Issue #147)
|
|
3
|
+
*
|
|
4
|
+
* Handles simple queries that don't require agent spawning.
|
|
5
|
+
* Acts as a first-pass check in the coordinator pipeline —
|
|
6
|
+
* status queries, help requests, config questions, and team roster
|
|
7
|
+
* queries are answered directly without consuming agent sessions.
|
|
8
|
+
*/
|
|
9
|
+
import type { SquadConfig } from '../runtime/config.js';
|
|
10
|
+
import type { EventBus } from '../runtime/event-bus.js';
|
|
11
|
+
/**
|
|
12
|
+
* Context for coordinator message handling.
|
|
13
|
+
*/
|
|
14
|
+
export interface CoordinatorContext {
|
|
15
|
+
/** Current session ID (coordinator session) */
|
|
16
|
+
sessionId: string;
|
|
17
|
+
/** Squad configuration */
|
|
18
|
+
config: SquadConfig;
|
|
19
|
+
/** Event bus for observability */
|
|
20
|
+
eventBus?: EventBus;
|
|
21
|
+
/** Team roster content (team.md) */
|
|
22
|
+
teamRoster?: string;
|
|
23
|
+
/** Active agent names */
|
|
24
|
+
activeAgents?: string[];
|
|
25
|
+
/** User-provided metadata */
|
|
26
|
+
metadata?: Record<string, unknown>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Result of a direct response.
|
|
30
|
+
*/
|
|
31
|
+
export interface DirectResponseResult {
|
|
32
|
+
/** The response text to return to the user */
|
|
33
|
+
response: string;
|
|
34
|
+
/** Category of the matched pattern */
|
|
35
|
+
category: DirectResponseCategory;
|
|
36
|
+
/** Confidence in the match */
|
|
37
|
+
confidence: 'high' | 'medium';
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Categories of messages handled directly.
|
|
41
|
+
*/
|
|
42
|
+
export type DirectResponseCategory = 'status' | 'help' | 'config' | 'roster' | 'greeting';
|
|
43
|
+
/**
|
|
44
|
+
* A configurable pattern for direct response matching.
|
|
45
|
+
*/
|
|
46
|
+
export interface DirectResponsePattern {
|
|
47
|
+
/** Category this pattern belongs to */
|
|
48
|
+
category: DirectResponseCategory;
|
|
49
|
+
/** Regex patterns that trigger this category */
|
|
50
|
+
patterns: RegExp[];
|
|
51
|
+
/** Handler that produces the response */
|
|
52
|
+
handler: (message: string, context: CoordinatorContext) => string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Handles simple queries without spawning agents.
|
|
56
|
+
*
|
|
57
|
+
* The handler checks incoming messages against a set of configurable
|
|
58
|
+
* patterns. If a match is found, it produces a direct response without
|
|
59
|
+
* going through the routing → charter → spawn pipeline.
|
|
60
|
+
*/
|
|
61
|
+
export declare class DirectResponseHandler {
|
|
62
|
+
private patterns;
|
|
63
|
+
constructor(customPatterns?: DirectResponsePattern[]);
|
|
64
|
+
/**
|
|
65
|
+
* Check whether a message should be handled directly (no agent spawn).
|
|
66
|
+
*/
|
|
67
|
+
shouldHandleDirectly(message: string, config?: SquadConfig): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Handle a message directly and return a response.
|
|
70
|
+
* Should only be called after shouldHandleDirectly() returns true.
|
|
71
|
+
*/
|
|
72
|
+
handleDirect(message: string, context: CoordinatorContext): DirectResponseResult;
|
|
73
|
+
/**
|
|
74
|
+
* Add a custom pattern at runtime.
|
|
75
|
+
*/
|
|
76
|
+
addPattern(pattern: DirectResponsePattern): void;
|
|
77
|
+
/**
|
|
78
|
+
* Get all registered patterns.
|
|
79
|
+
*/
|
|
80
|
+
getPatterns(): ReadonlyArray<DirectResponsePattern>;
|
|
81
|
+
private matchPattern;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=direct-response.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"direct-response.d.ts","sourceRoot":"","sources":["../../src/coordinator/direct-response.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,yBAAyB,CAAC;AAIpE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,MAAM,EAAE,WAAW,CAAC;IACpB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,8BAA8B;IAC9B,UAAU,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAC9B,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,UAAU,CAAC;AAEf;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,uCAAuC;IACvC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,gDAAgD;IAChD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,yCAAyC;IACzC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,KAAK,MAAM,CAAC;CACnE;AA8FD;;;;;;GAMG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAA0B;gBAE9B,cAAc,CAAC,EAAE,qBAAqB,EAAE;IAIpD;;OAEG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO;IAkBpE;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,oBAAoB;IAmChF;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAIhD;;OAEG;IACH,WAAW,IAAI,aAAa,CAAC,qBAAqB,CAAC;IAMnD,OAAO,CAAC,YAAY;CAUrB"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Direct Response Handler (M3-6, Issue #147)
|
|
3
|
+
*
|
|
4
|
+
* Handles simple queries that don't require agent spawning.
|
|
5
|
+
* Acts as a first-pass check in the coordinator pipeline —
|
|
6
|
+
* status queries, help requests, config questions, and team roster
|
|
7
|
+
* queries are answered directly without consuming agent sessions.
|
|
8
|
+
*/
|
|
9
|
+
// --- Default Patterns ---
|
|
10
|
+
const DEFAULT_PATTERNS = [
|
|
11
|
+
{
|
|
12
|
+
category: 'status',
|
|
13
|
+
patterns: [
|
|
14
|
+
/^(?:what(?:'s| is) the )?status\b/i,
|
|
15
|
+
/^(?:show|list|get)\s+(?:active\s+)?(?:agents?|sessions?|status)\b/i,
|
|
16
|
+
/^who(?:'s| is) (?:active|running|working)\b/i,
|
|
17
|
+
/^squad\s+status\b/i,
|
|
18
|
+
],
|
|
19
|
+
handler: (_message, context) => {
|
|
20
|
+
const agents = context.activeAgents ?? [];
|
|
21
|
+
if (agents.length === 0) {
|
|
22
|
+
return 'No agents are currently active. Use a task request to spawn agents.';
|
|
23
|
+
}
|
|
24
|
+
return `Active agents (${agents.length}): ${agents.join(', ')}`;
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
category: 'help',
|
|
29
|
+
patterns: [
|
|
30
|
+
/^(?:help|how do I|what can you do|what commands|usage)\b/i,
|
|
31
|
+
/^(?:show|list)\s+(?:help|commands|capabilities)\b/i,
|
|
32
|
+
/^\?$/,
|
|
33
|
+
],
|
|
34
|
+
handler: () => {
|
|
35
|
+
return [
|
|
36
|
+
'**Squad Coordinator** — I route work to specialist agents.',
|
|
37
|
+
'',
|
|
38
|
+
'You can ask me to:',
|
|
39
|
+
'- Route tasks to specific agents (e.g., "ask Fenster to fix the build")',
|
|
40
|
+
'- Check team status (e.g., "status" or "who is active?")',
|
|
41
|
+
'- View the team roster (e.g., "show team" or "who is on the team?")',
|
|
42
|
+
'- View configuration (e.g., "show config" or "what model am I using?")',
|
|
43
|
+
'',
|
|
44
|
+
'Or just describe what you need and I\'ll route it to the right agent.',
|
|
45
|
+
].join('\n');
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
category: 'config',
|
|
50
|
+
patterns: [
|
|
51
|
+
/^(?:show|get|what(?:'s| is))\s+(?:the\s+)?(?:config|configuration|settings|model)\b/i,
|
|
52
|
+
/^(?:which|what)\s+model\b/i,
|
|
53
|
+
/^config\b/i,
|
|
54
|
+
],
|
|
55
|
+
handler: (_message, context) => {
|
|
56
|
+
const cfg = context.config;
|
|
57
|
+
const model = cfg.models?.defaultModel ?? 'unknown';
|
|
58
|
+
const tier = cfg.models?.defaultTier ?? 'unknown';
|
|
59
|
+
const ruleCount = cfg.routing?.rules?.length ?? 0;
|
|
60
|
+
return [
|
|
61
|
+
`**Configuration** (v${cfg.version})`,
|
|
62
|
+
`- Default model: ${model} (${tier} tier)`,
|
|
63
|
+
`- Routing rules: ${ruleCount}`,
|
|
64
|
+
`- Tier ceiling respected: ${cfg.models?.respectTierCeiling ?? true}`,
|
|
65
|
+
].join('\n');
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
category: 'roster',
|
|
70
|
+
patterns: [
|
|
71
|
+
/^(?:show|list|get|who(?:'s| is)(?: on)?)\s+(?:the\s+)?(?:team|roster|agents?|members?)\b/i,
|
|
72
|
+
/^team\b/i,
|
|
73
|
+
/^roster\b/i,
|
|
74
|
+
],
|
|
75
|
+
handler: (_message, context) => {
|
|
76
|
+
if (context.teamRoster) {
|
|
77
|
+
return context.teamRoster;
|
|
78
|
+
}
|
|
79
|
+
const agents = context.activeAgents ?? [];
|
|
80
|
+
if (agents.length === 0) {
|
|
81
|
+
return 'No team roster available. Configure agents in your squad.config.ts.';
|
|
82
|
+
}
|
|
83
|
+
return `**Team Roster:** ${agents.join(', ')}`;
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
category: 'greeting',
|
|
88
|
+
patterns: [
|
|
89
|
+
/^(?:hi|hello|hey|good (?:morning|afternoon|evening)|yo|sup)\b/i,
|
|
90
|
+
/^(?:hi|hello|hey)!?$/i,
|
|
91
|
+
],
|
|
92
|
+
handler: () => {
|
|
93
|
+
return 'Hello! I\'m the Squad coordinator. Describe what you need and I\'ll route it to the right agent, or type "help" for options.';
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
];
|
|
97
|
+
// --- Direct Response Handler ---
|
|
98
|
+
/**
|
|
99
|
+
* Handles simple queries without spawning agents.
|
|
100
|
+
*
|
|
101
|
+
* The handler checks incoming messages against a set of configurable
|
|
102
|
+
* patterns. If a match is found, it produces a direct response without
|
|
103
|
+
* going through the routing → charter → spawn pipeline.
|
|
104
|
+
*/
|
|
105
|
+
export class DirectResponseHandler {
|
|
106
|
+
patterns;
|
|
107
|
+
constructor(customPatterns) {
|
|
108
|
+
this.patterns = customPatterns ?? DEFAULT_PATTERNS;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Check whether a message should be handled directly (no agent spawn).
|
|
112
|
+
*/
|
|
113
|
+
shouldHandleDirectly(message, config) {
|
|
114
|
+
const trimmed = message.trim();
|
|
115
|
+
if (trimmed.length === 0)
|
|
116
|
+
return false;
|
|
117
|
+
// Check configurable patterns from squad config
|
|
118
|
+
if (config?.routing?.rules) {
|
|
119
|
+
for (const rule of config.routing.rules) {
|
|
120
|
+
if (rule.workType === 'direct' || rule.tier === 'direct') {
|
|
121
|
+
// Rules explicitly marked as 'direct' tier mean
|
|
122
|
+
// the coordinator should handle them, but we still
|
|
123
|
+
// fall through to pattern matching below.
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return this.matchPattern(trimmed) !== undefined;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Handle a message directly and return a response.
|
|
131
|
+
* Should only be called after shouldHandleDirectly() returns true.
|
|
132
|
+
*/
|
|
133
|
+
handleDirect(message, context) {
|
|
134
|
+
const trimmed = message.trim();
|
|
135
|
+
const match = this.matchPattern(trimmed);
|
|
136
|
+
if (!match) {
|
|
137
|
+
return {
|
|
138
|
+
response: 'I\'m not sure how to handle that directly. Let me route it to an agent.',
|
|
139
|
+
category: 'help',
|
|
140
|
+
confidence: 'medium',
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const response = match.handler(trimmed, context);
|
|
144
|
+
// Emit event for observability
|
|
145
|
+
if (context.eventBus) {
|
|
146
|
+
context.eventBus.emit({
|
|
147
|
+
type: 'coordinator:routing',
|
|
148
|
+
sessionId: context.sessionId,
|
|
149
|
+
payload: {
|
|
150
|
+
decision: 'direct',
|
|
151
|
+
category: match.category,
|
|
152
|
+
messageLength: trimmed.length,
|
|
153
|
+
},
|
|
154
|
+
timestamp: new Date(),
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
return {
|
|
158
|
+
response,
|
|
159
|
+
category: match.category,
|
|
160
|
+
confidence: 'high',
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Add a custom pattern at runtime.
|
|
165
|
+
*/
|
|
166
|
+
addPattern(pattern) {
|
|
167
|
+
this.patterns.push(pattern);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Get all registered patterns.
|
|
171
|
+
*/
|
|
172
|
+
getPatterns() {
|
|
173
|
+
return this.patterns;
|
|
174
|
+
}
|
|
175
|
+
// --- Private ---
|
|
176
|
+
matchPattern(message) {
|
|
177
|
+
for (const pattern of this.patterns) {
|
|
178
|
+
for (const regex of pattern.patterns) {
|
|
179
|
+
if (regex.test(message)) {
|
|
180
|
+
return pattern;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return undefined;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=direct-response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"direct-response.js","sourceRoot":"","sources":["../../src/coordinator/direct-response.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parallel Fan-Out Session Spawning (M1-10, Issue #130)
|
|
3
|
+
*
|
|
4
|
+
* Spawns multiple agent sessions concurrently using Promise.allSettled
|
|
5
|
+
* for maximum throughput. Each spawn compiles charter → resolves model
|
|
6
|
+
* → creates session → sends initial message. Event aggregation collects
|
|
7
|
+
* all session events into coordinator's event bus. Error isolation ensures
|
|
8
|
+
* one session failure doesn't affect others.
|
|
9
|
+
*/
|
|
10
|
+
import type { AgentCharter } from '../agents/index.js';
|
|
11
|
+
import type { EventBus } from '../client/event-bus.js';
|
|
12
|
+
import type { SessionPool } from '../client/session-pool.js';
|
|
13
|
+
export interface AgentSpawnConfig {
|
|
14
|
+
/** Agent name to spawn */
|
|
15
|
+
agentName: string;
|
|
16
|
+
/** Task description for the agent */
|
|
17
|
+
task: string;
|
|
18
|
+
/** Priority level */
|
|
19
|
+
priority?: 'low' | 'normal' | 'high' | 'critical';
|
|
20
|
+
/** Additional context to pass */
|
|
21
|
+
context?: string;
|
|
22
|
+
/** Model override (skips resolution) */
|
|
23
|
+
modelOverride?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface SpawnResult {
|
|
26
|
+
/** Agent name that was spawned */
|
|
27
|
+
agentName: string;
|
|
28
|
+
/** Session ID if spawn succeeded */
|
|
29
|
+
sessionId?: string;
|
|
30
|
+
/** Spawn outcome */
|
|
31
|
+
status: 'success' | 'failed';
|
|
32
|
+
/** Error message if failed */
|
|
33
|
+
error?: string;
|
|
34
|
+
/** Start time */
|
|
35
|
+
startTime: Date;
|
|
36
|
+
/** End time */
|
|
37
|
+
endTime: Date;
|
|
38
|
+
}
|
|
39
|
+
export interface FanOutDependencies {
|
|
40
|
+
/** Charter compilation function */
|
|
41
|
+
compileCharter: (agentName: string) => Promise<AgentCharter>;
|
|
42
|
+
/** Model resolution function */
|
|
43
|
+
resolveModel: (charter: AgentCharter, override?: string) => Promise<string>;
|
|
44
|
+
/** Session creation function */
|
|
45
|
+
createSession: (config: any) => Promise<{
|
|
46
|
+
sessionId: string;
|
|
47
|
+
sendMessage: (opts: any) => Promise<void>;
|
|
48
|
+
}>;
|
|
49
|
+
/** Session pool for tracking */
|
|
50
|
+
sessionPool: SessionPool;
|
|
51
|
+
/** Event bus for aggregation */
|
|
52
|
+
eventBus: EventBus;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Spawn multiple agents in parallel using Promise.allSettled.
|
|
56
|
+
*
|
|
57
|
+
* Each spawn:
|
|
58
|
+
* 1. Compile charter.md → AgentCharter
|
|
59
|
+
* 2. Resolve model (override or charter or auto-select)
|
|
60
|
+
* 3. Create session via SquadClient
|
|
61
|
+
* 4. Send initial message with task and context
|
|
62
|
+
* 5. Aggregate events to coordinator's event bus
|
|
63
|
+
*
|
|
64
|
+
* Error isolation: one failure doesn't block others.
|
|
65
|
+
* Returns SpawnResult[] with outcomes for each agent.
|
|
66
|
+
*
|
|
67
|
+
* @param configs - Array of agent spawn configurations
|
|
68
|
+
* @param deps - Injected dependencies (charter compiler, model resolver, client)
|
|
69
|
+
* @returns Promise resolving to array of spawn results
|
|
70
|
+
*/
|
|
71
|
+
export declare function spawnParallel(configs: AgentSpawnConfig[], deps: FanOutDependencies): Promise<SpawnResult[]>;
|
|
72
|
+
/**
|
|
73
|
+
* Subscribe to all events from a spawned session and forward them
|
|
74
|
+
* to the coordinator's event bus with agent context.
|
|
75
|
+
*
|
|
76
|
+
* @param sessionId - Session ID to subscribe to
|
|
77
|
+
* @param agentName - Agent name for context
|
|
78
|
+
* @param sessionEventEmitter - Session's event emitter (if available)
|
|
79
|
+
* @param coordinatorEventBus - Coordinator's event bus
|
|
80
|
+
*/
|
|
81
|
+
export declare function aggregateSessionEvents(sessionId: string, agentName: string, sessionEventEmitter: any, // SquadSession
|
|
82
|
+
coordinatorEventBus: EventBus): void;
|
|
83
|
+
//# sourceMappingURL=fan-out.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fan-out.d.ts","sourceRoot":"","sources":["../../src/coordinator/fan-out.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAI7D,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IAClD,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAID,MAAM,WAAW,WAAW;IAC1B,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7B,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,eAAe;IACf,OAAO,EAAE,IAAI,CAAC;CACf;AAID,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7D,gCAAgC;IAChC,YAAY,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5E,gCAAgC;IAChC,aAAa,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC,CAAC;IAC1G,gCAAgC;IAChC,WAAW,EAAE,WAAW,CAAC;IACzB,gCAAgC;IAChC,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAID;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,gBAAgB,EAAE,EAC3B,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,WAAW,EAAE,CAAC,CAmBxB;AAoGD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,mBAAmB,EAAE,GAAG,EAAE,eAAe;AACzC,mBAAmB,EAAE,QAAQ,GAC5B,IAAI,CAuBN"}
|