@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,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Routing Configuration Module
|
|
3
|
+
*
|
|
4
|
+
* Parses routing.md markdown format into typed RoutingConfig and compiles routing rules
|
|
5
|
+
* for fast pattern matching. Supports both markdown (legacy) and typed config (new).
|
|
6
|
+
*
|
|
7
|
+
* @module config/routing
|
|
8
|
+
*/
|
|
9
|
+
import { normalizeEol } from '../utils/normalize-eol.js';
|
|
10
|
+
/**
|
|
11
|
+
* Parses routing.md markdown table format into typed RoutingConfig.
|
|
12
|
+
*
|
|
13
|
+
* Expected format:
|
|
14
|
+
* ```markdown
|
|
15
|
+
* ## Routing Table
|
|
16
|
+
*
|
|
17
|
+
* | Work Type | Route To | Examples |
|
|
18
|
+
* |-----------|----------|----------|
|
|
19
|
+
* | feature-dev | Lead | New features, enhancements |
|
|
20
|
+
* | bug-fix | Developer | Bug fixes, patches |
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @param content - Markdown content from routing.md
|
|
24
|
+
* @returns Parsed routing configuration
|
|
25
|
+
*/
|
|
26
|
+
export function parseRoutingMarkdown(content) {
|
|
27
|
+
content = normalizeEol(content);
|
|
28
|
+
const rules = [];
|
|
29
|
+
const lines = content.split('\n');
|
|
30
|
+
let inRoutingTable = false;
|
|
31
|
+
let headerPassed = false;
|
|
32
|
+
for (const line of lines) {
|
|
33
|
+
const trimmed = line.trim();
|
|
34
|
+
// Detect routing table section
|
|
35
|
+
if (trimmed.toLowerCase().includes('## routing table') ||
|
|
36
|
+
trimmed.toLowerCase().includes('##routing table')) {
|
|
37
|
+
inRoutingTable = true;
|
|
38
|
+
headerPassed = false;
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
// Stop at next section
|
|
42
|
+
if (inRoutingTable && trimmed.startsWith('##') && !trimmed.toLowerCase().includes('routing table')) {
|
|
43
|
+
inRoutingTable = false;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
// Parse table rows
|
|
47
|
+
if (inRoutingTable && trimmed.startsWith('|')) {
|
|
48
|
+
// Skip header row
|
|
49
|
+
if (trimmed.toLowerCase().includes('work type') || trimmed.toLowerCase().includes('pattern')) {
|
|
50
|
+
headerPassed = true;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
// Skip separator row
|
|
54
|
+
if (trimmed.includes('---') || trimmed.includes('===')) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (!headerPassed) {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
// Parse data row: | Work Type | Route To | Examples |
|
|
61
|
+
const cells = trimmed
|
|
62
|
+
.split('|')
|
|
63
|
+
.map(cell => cell.trim())
|
|
64
|
+
.filter(cell => cell.length > 0);
|
|
65
|
+
if (cells.length >= 2) {
|
|
66
|
+
const workType = cells[0];
|
|
67
|
+
const routeTo = cells[1];
|
|
68
|
+
const examples = cells.length >= 3 ? cells[2].split(',').map(ex => ex.trim()) : undefined;
|
|
69
|
+
// Parse agent names (may be comma-separated or single)
|
|
70
|
+
const agents = routeTo.split(',').map(a => a.trim()).filter(a => a.length > 0);
|
|
71
|
+
if (workType && agents.length > 0) {
|
|
72
|
+
rules.push({
|
|
73
|
+
workType,
|
|
74
|
+
agents,
|
|
75
|
+
examples,
|
|
76
|
+
confidence: 'high'
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
rules,
|
|
84
|
+
governance: {
|
|
85
|
+
eagerByDefault: true,
|
|
86
|
+
scribeAutoRuns: false,
|
|
87
|
+
allowRecursiveSpawn: false
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Compiles routing rules for fast pattern matching.
|
|
93
|
+
*
|
|
94
|
+
* Creates regex patterns from work types and assigns priority scores
|
|
95
|
+
* based on specificity. More specific patterns get higher priority.
|
|
96
|
+
*
|
|
97
|
+
* @param config - Routing configuration to compile
|
|
98
|
+
* @returns Compiled router with regex patterns
|
|
99
|
+
*/
|
|
100
|
+
export function compileRoutingRules(config) {
|
|
101
|
+
const workTypeRules = [];
|
|
102
|
+
for (const rule of config.rules) {
|
|
103
|
+
const patterns = generatePatterns(rule.workType, rule.examples);
|
|
104
|
+
const priority = calculatePriority(rule.workType, patterns);
|
|
105
|
+
workTypeRules.push({
|
|
106
|
+
workType: rule.workType,
|
|
107
|
+
agents: rule.agents,
|
|
108
|
+
patterns,
|
|
109
|
+
examples: rule.examples,
|
|
110
|
+
confidence: rule.confidence || 'medium',
|
|
111
|
+
priority
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
// Sort by priority (highest first)
|
|
115
|
+
workTypeRules.sort((a, b) => b.priority - a.priority);
|
|
116
|
+
// Compile issue routing rules if present
|
|
117
|
+
const issueRules = config.issueRouting?.map(compileIssueRule);
|
|
118
|
+
return {
|
|
119
|
+
workTypeRules,
|
|
120
|
+
issueRules,
|
|
121
|
+
governance: config.governance
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Matches a message to routing rules.
|
|
126
|
+
*
|
|
127
|
+
* @param message - User message to match
|
|
128
|
+
* @param router - Compiled router
|
|
129
|
+
* @returns Best routing match
|
|
130
|
+
*/
|
|
131
|
+
export function matchRoute(message, router) {
|
|
132
|
+
const lowerMessage = message.toLowerCase();
|
|
133
|
+
// Try to match work type rules
|
|
134
|
+
for (const rule of router.workTypeRules) {
|
|
135
|
+
for (const pattern of rule.patterns) {
|
|
136
|
+
if (pattern.test(lowerMessage)) {
|
|
137
|
+
return {
|
|
138
|
+
agents: rule.agents,
|
|
139
|
+
confidence: rule.confidence || 'medium',
|
|
140
|
+
rule,
|
|
141
|
+
reason: `Matched work type: ${rule.workType}`
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// No match - return fallback
|
|
147
|
+
return {
|
|
148
|
+
agents: router.fallbackAgent ? [router.fallbackAgent] : ['@coordinator'],
|
|
149
|
+
confidence: 'low',
|
|
150
|
+
reason: 'No matching route found, using fallback'
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Generates regex patterns from work type and examples.
|
|
155
|
+
*/
|
|
156
|
+
function generatePatterns(workType, examples) {
|
|
157
|
+
const patterns = [];
|
|
158
|
+
// Create pattern from work type itself
|
|
159
|
+
const typeWords = workType
|
|
160
|
+
.toLowerCase()
|
|
161
|
+
.split(/[-_\s]+/)
|
|
162
|
+
.filter(w => w.length > 2); // Skip short words like "to", "of"
|
|
163
|
+
if (typeWords.length > 0) {
|
|
164
|
+
// Match if all type words are present
|
|
165
|
+
const typePattern = new RegExp(typeWords.map(w => `(?=.*\\b${escapeRegex(w)})`).join(''), 'i');
|
|
166
|
+
patterns.push(typePattern);
|
|
167
|
+
}
|
|
168
|
+
// Create patterns from examples
|
|
169
|
+
if (examples && examples.length > 0) {
|
|
170
|
+
for (const example of examples) {
|
|
171
|
+
const exampleWords = example
|
|
172
|
+
.toLowerCase()
|
|
173
|
+
.split(/[-_\s,]+/)
|
|
174
|
+
.filter(w => w.length > 2);
|
|
175
|
+
if (exampleWords.length > 0) {
|
|
176
|
+
// Match if any significant example words are present
|
|
177
|
+
const examplePattern = new RegExp(exampleWords.map(w => `\\b${escapeRegex(w)}\\b`).join('|'), 'i');
|
|
178
|
+
patterns.push(examplePattern);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return patterns;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Calculates priority for a rule based on specificity.
|
|
186
|
+
* Higher values = more specific = higher priority.
|
|
187
|
+
*/
|
|
188
|
+
function calculatePriority(workType, patterns) {
|
|
189
|
+
// Base priority on work type length and pattern count
|
|
190
|
+
const typeLength = workType.length;
|
|
191
|
+
const patternCount = patterns.length;
|
|
192
|
+
const wordCount = workType.split(/[-_\s]+/).length;
|
|
193
|
+
// More words and longer types are more specific
|
|
194
|
+
return typeLength + (wordCount * 10) + (patternCount * 5);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Compiles an issue routing rule with regex patterns.
|
|
198
|
+
*/
|
|
199
|
+
function compileIssueRule(rule) {
|
|
200
|
+
return {
|
|
201
|
+
labelPattern: new RegExp(escapeRegex(rule.label), 'i'),
|
|
202
|
+
action: rule.action,
|
|
203
|
+
target: rule.target,
|
|
204
|
+
requiredLabels: rule.requiredLabels?.map(label => new RegExp(escapeRegex(label), 'i')),
|
|
205
|
+
excludedLabels: rule.excludedLabels?.map(label => new RegExp(escapeRegex(label), 'i')),
|
|
206
|
+
state: rule.state
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Escapes special regex characters.
|
|
211
|
+
*/
|
|
212
|
+
function escapeRegex(str) {
|
|
213
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Matches issue labels to routing rules.
|
|
217
|
+
*
|
|
218
|
+
* @param labels - Issue labels to match
|
|
219
|
+
* @param rules - Compiled issue routing rules
|
|
220
|
+
* @returns Matching rule if found
|
|
221
|
+
*/
|
|
222
|
+
export function matchIssueLabels(labels, rules) {
|
|
223
|
+
for (const rule of rules) {
|
|
224
|
+
// Check if primary label matches
|
|
225
|
+
const primaryMatch = labels.some(label => rule.labelPattern.test(label));
|
|
226
|
+
if (!primaryMatch) {
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
// Check required labels
|
|
230
|
+
if (rule.requiredLabels && rule.requiredLabels.length > 0) {
|
|
231
|
+
const allRequiredPresent = rule.requiredLabels.every(pattern => labels.some(label => pattern.test(label)));
|
|
232
|
+
if (!allRequiredPresent) {
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// Check excluded labels
|
|
237
|
+
if (rule.excludedLabels && rule.excludedLabels.length > 0) {
|
|
238
|
+
const anyExcludedPresent = rule.excludedLabels.some(pattern => labels.some(label => pattern.test(label)));
|
|
239
|
+
if (anyExcludedPresent) {
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return rule;
|
|
244
|
+
}
|
|
245
|
+
return undefined;
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../../src/config/routing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Squad Configuration Schema
|
|
3
|
+
* Typed configuration interface for Squad teams
|
|
4
|
+
*/
|
|
5
|
+
export interface SquadConfig {
|
|
6
|
+
version: string;
|
|
7
|
+
team: TeamConfig;
|
|
8
|
+
routing: RoutingConfig;
|
|
9
|
+
models: ModelConfig;
|
|
10
|
+
agents: AgentConfig[];
|
|
11
|
+
hooks?: HooksConfig;
|
|
12
|
+
ceremonies?: CeremonyConfig[];
|
|
13
|
+
plugins?: PluginConfig;
|
|
14
|
+
}
|
|
15
|
+
export interface TeamConfig {
|
|
16
|
+
name: string;
|
|
17
|
+
description?: string;
|
|
18
|
+
projectContext?: string;
|
|
19
|
+
issueSource?: {
|
|
20
|
+
repo: string;
|
|
21
|
+
filters?: string[];
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export interface AgentConfig {
|
|
25
|
+
name: string;
|
|
26
|
+
role: string;
|
|
27
|
+
displayName?: string;
|
|
28
|
+
charter?: string;
|
|
29
|
+
model?: string;
|
|
30
|
+
tools?: string[];
|
|
31
|
+
status?: 'active' | 'inactive' | 'retired';
|
|
32
|
+
}
|
|
33
|
+
export interface RoutingConfig {
|
|
34
|
+
rules: RoutingRule[];
|
|
35
|
+
defaultAgent?: string;
|
|
36
|
+
fallbackBehavior?: 'ask' | 'default-agent' | 'coordinator';
|
|
37
|
+
}
|
|
38
|
+
export interface RoutingRule {
|
|
39
|
+
pattern: string;
|
|
40
|
+
agents: string[];
|
|
41
|
+
tier?: 'direct' | 'lightweight' | 'standard' | 'full';
|
|
42
|
+
priority?: number;
|
|
43
|
+
}
|
|
44
|
+
export interface ModelConfig {
|
|
45
|
+
default: string;
|
|
46
|
+
defaultTier: 'premium' | 'standard' | 'fast';
|
|
47
|
+
tiers: Record<string, string[]>;
|
|
48
|
+
agentOverrides?: Record<string, string>;
|
|
49
|
+
taskTypeMapping?: Record<string, string>;
|
|
50
|
+
}
|
|
51
|
+
export interface HooksConfig {
|
|
52
|
+
allowedWritePaths?: string[];
|
|
53
|
+
blockedCommands?: string[];
|
|
54
|
+
maxAskUserPerSession?: number;
|
|
55
|
+
scrubPii?: boolean;
|
|
56
|
+
reviewerLockout?: boolean;
|
|
57
|
+
}
|
|
58
|
+
export interface CeremonyConfig {
|
|
59
|
+
name: string;
|
|
60
|
+
schedule?: string;
|
|
61
|
+
participants?: string[];
|
|
62
|
+
agenda?: string;
|
|
63
|
+
enabled?: boolean;
|
|
64
|
+
}
|
|
65
|
+
export interface PluginConfig {
|
|
66
|
+
enabled: string[];
|
|
67
|
+
config?: Record<string, unknown>;
|
|
68
|
+
}
|
|
69
|
+
export declare const DEFAULT_CONFIG: SquadConfig;
|
|
70
|
+
export declare function defineConfig(config: Partial<SquadConfig>): SquadConfig;
|
|
71
|
+
export declare function validateConfig(config: unknown): config is SquadConfig;
|
|
72
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;CAC5C;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,KAAK,GAAG,eAAe,GAAG,aAAa,CAAC;CAC5D;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,QAAQ,GAAG,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IAC7C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,WAAW;IAC1B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,eAAO,MAAM,cAAc,EAAE,WAoB5B,CAAC;AAEF,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAoBtE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,WAAW,CAYrE"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Squad Configuration Schema
|
|
3
|
+
* Typed configuration interface for Squad teams
|
|
4
|
+
*/
|
|
5
|
+
export const DEFAULT_CONFIG = {
|
|
6
|
+
version: '0.6.0',
|
|
7
|
+
team: {
|
|
8
|
+
name: 'Default Squad',
|
|
9
|
+
description: 'A Squad team',
|
|
10
|
+
},
|
|
11
|
+
routing: {
|
|
12
|
+
rules: [],
|
|
13
|
+
fallbackBehavior: 'coordinator',
|
|
14
|
+
},
|
|
15
|
+
models: {
|
|
16
|
+
default: 'claude-sonnet-4',
|
|
17
|
+
defaultTier: 'standard',
|
|
18
|
+
tiers: {
|
|
19
|
+
premium: ['claude-opus-4', 'claude-opus-4.5'],
|
|
20
|
+
standard: ['claude-sonnet-4', 'claude-sonnet-4.5', 'gpt-5.1-codex'],
|
|
21
|
+
fast: ['claude-haiku-4.5', 'gpt-5.1-codex-mini'],
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
agents: [],
|
|
25
|
+
};
|
|
26
|
+
export function defineConfig(config) {
|
|
27
|
+
return {
|
|
28
|
+
...DEFAULT_CONFIG,
|
|
29
|
+
...config,
|
|
30
|
+
team: {
|
|
31
|
+
...DEFAULT_CONFIG.team,
|
|
32
|
+
...config.team,
|
|
33
|
+
},
|
|
34
|
+
routing: {
|
|
35
|
+
...DEFAULT_CONFIG.routing,
|
|
36
|
+
...config.routing,
|
|
37
|
+
rules: config.routing?.rules ?? DEFAULT_CONFIG.routing.rules,
|
|
38
|
+
},
|
|
39
|
+
models: {
|
|
40
|
+
...DEFAULT_CONFIG.models,
|
|
41
|
+
...config.models,
|
|
42
|
+
tiers: config.models?.tiers ?? DEFAULT_CONFIG.models.tiers,
|
|
43
|
+
},
|
|
44
|
+
agents: config.agents ?? DEFAULT_CONFIG.agents,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export function validateConfig(config) {
|
|
48
|
+
if (typeof config !== 'object' || config === null)
|
|
49
|
+
return false;
|
|
50
|
+
const c = config;
|
|
51
|
+
if (typeof c.version !== 'string')
|
|
52
|
+
return false;
|
|
53
|
+
if (!c.team || typeof c.team.name !== 'string')
|
|
54
|
+
return false;
|
|
55
|
+
if (!c.routing || !Array.isArray(c.routing.rules))
|
|
56
|
+
return false;
|
|
57
|
+
if (!c.models || typeof c.models.default !== 'string')
|
|
58
|
+
return false;
|
|
59
|
+
if (!Array.isArray(c.agents))
|
|
60
|
+
return false;
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA2EH,MAAM,CAAC,MAAM,cAAc,GAAgB;IACzC,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE;QACJ,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,cAAc;KAC5B;IACD,OAAO,EAAE;QACP,KAAK,EAAE,EAAE;QACT,gBAAgB,EAAE,aAAa;KAChC;IACD,MAAM,EAAE;QACN,OAAO,EAAE,iBAAiB;QAC1B,WAAW,EAAE,UAAU;QACvB,KAAK,EAAE;YACL,OAAO,EAAE,CAAC,eAAe,EAAE,iBAAiB,CAAC;YAC7C,QAAQ,EAAE,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,eAAe,CAAC;YACnE,IAAI,EAAE,CAAC,kBAAkB,EAAE,oBAAoB,CAAC;SACjD;KACF;IACD,MAAM,EAAE,EAAE;CACX,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,MAA4B;IACvD,OAAO;QACL,GAAG,cAAc;QACjB,GAAG,MAAM;QACT,IAAI,EAAE;YACJ,GAAG,cAAc,CAAC,IAAI;YACtB,GAAG,MAAM,CAAC,IAAI;SACf;QACD,OAAO,EAAE;YACP,GAAG,cAAc,CAAC,OAAO;YACzB,GAAG,MAAM,CAAC,OAAO;YACjB,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,IAAI,cAAc,CAAC,OAAO,CAAC,KAAK;SAC7D;QACD,MAAM,EAAE;YACN,GAAG,cAAc,CAAC,MAAM;YACxB,GAAG,MAAM,CAAC,MAAM;YAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,cAAc,CAAC,MAAM,CAAC,KAAK;SAC3D;QACD,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM;KAC/C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAe;IAC5C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAEhE,MAAM,CAAC,GAAG,MAA8B,CAAC;IAEzC,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC7D,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAChE,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACpE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAE3C,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
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 type { EventBus } from '../runtime/event-bus.js';
|
|
14
|
+
import type { SquadConfig } from '../runtime/config.js';
|
|
15
|
+
import { DirectResponseHandler, type CoordinatorContext, type DirectResponseResult } from './direct-response.js';
|
|
16
|
+
import { type CompiledRouter, type RoutingMatch } from '../config/routing.js';
|
|
17
|
+
import { type SpawnResult, type FanOutDependencies } from './fan-out.js';
|
|
18
|
+
export type { CoordinatorContext } from './direct-response.js';
|
|
19
|
+
export type SpawnStrategy = 'direct' | 'single' | 'multi' | 'fallback';
|
|
20
|
+
export interface CoordinatorResult {
|
|
21
|
+
/** How the message was handled */
|
|
22
|
+
strategy: SpawnStrategy;
|
|
23
|
+
/** Direct response (if strategy is 'direct') */
|
|
24
|
+
directResponse?: DirectResponseResult;
|
|
25
|
+
/** Routing match info */
|
|
26
|
+
routing?: RoutingMatch;
|
|
27
|
+
/** Spawn results (if agents were spawned) */
|
|
28
|
+
spawnResults?: SpawnResult[];
|
|
29
|
+
/** Time taken to handle the message in ms */
|
|
30
|
+
durationMs: number;
|
|
31
|
+
}
|
|
32
|
+
export interface SquadCoordinatorOptions {
|
|
33
|
+
/** Squad configuration */
|
|
34
|
+
config: SquadConfig;
|
|
35
|
+
/** Event bus for observability */
|
|
36
|
+
eventBus?: EventBus;
|
|
37
|
+
/** Fan-out dependencies (charter compiler, model resolver, session creator) */
|
|
38
|
+
fanOutDeps?: FanOutDependencies;
|
|
39
|
+
/** Custom direct-response handler */
|
|
40
|
+
directHandler?: DirectResponseHandler;
|
|
41
|
+
/** Custom compiled router (skips compilation from config) */
|
|
42
|
+
compiledRouter?: CompiledRouter;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Main coordinator entry point.
|
|
46
|
+
*
|
|
47
|
+
* Pipeline:
|
|
48
|
+
* 1. Direct response check (no-spawn fast path)
|
|
49
|
+
* 2. Route analysis (message → routing rules → agent selection)
|
|
50
|
+
* 3. Spawn strategy (single vs multi vs fallback)
|
|
51
|
+
* 4. Fan-out spawn
|
|
52
|
+
* 5. Collect results + emit events
|
|
53
|
+
*/
|
|
54
|
+
export declare class SquadCoordinator {
|
|
55
|
+
private config;
|
|
56
|
+
private eventBus?;
|
|
57
|
+
private directHandler;
|
|
58
|
+
private compiledRouter;
|
|
59
|
+
private fanOutDeps?;
|
|
60
|
+
constructor(options: SquadCoordinatorOptions);
|
|
61
|
+
/**
|
|
62
|
+
* Main dispatch — handle an incoming user message.
|
|
63
|
+
*/
|
|
64
|
+
handleMessage(message: string, context: CoordinatorContext): Promise<CoordinatorResult>;
|
|
65
|
+
/**
|
|
66
|
+
* Get the compiled router (for inspection / testing).
|
|
67
|
+
*/
|
|
68
|
+
getRouter(): CompiledRouter;
|
|
69
|
+
/**
|
|
70
|
+
* Get the direct response handler (for inspection / testing).
|
|
71
|
+
*/
|
|
72
|
+
getDirectHandler(): DirectResponseHandler;
|
|
73
|
+
/**
|
|
74
|
+
* Update configuration at runtime.
|
|
75
|
+
*/
|
|
76
|
+
updateConfig(config: SquadConfig): void;
|
|
77
|
+
private determineStrategy;
|
|
78
|
+
private buildSpawnConfigs;
|
|
79
|
+
private compileRouter;
|
|
80
|
+
private emit;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=coordinator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/coordinator/coordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAwC,KAAK,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAM/G,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI/D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;AAIvE,MAAM,WAAW,iBAAiB;IAChC,kCAAkC;IAClC,QAAQ,EAAE,aAAa,CAAC;IACxB,gDAAgD;IAChD,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,yBAAyB;IACzB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,MAAM,WAAW,uBAAuB;IACtC,0BAA0B;IAC1B,MAAM,EAAE,WAAW,CAAC;IACpB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,qCAAqC;IACrC,aAAa,CAAC,EAAE,qBAAqB,CAAC;IACtC,6DAA6D;IAC7D,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAID;;;;;;;;;GASG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,QAAQ,CAAC,CAAW;IAC5B,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,UAAU,CAAC,CAAqB;gBAE5B,OAAO,EAAE,uBAAuB;IAc5C;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC;IA+F7B;;OAEG;IACH,SAAS,IAAI,cAAc;IAI3B;;OAEG;IACH,gBAAgB,IAAI,qBAAqB;IAIzC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAOvC,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,aAAa;YAiBP,IAAI;CAanB"}
|