@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,467 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Squad Configuration Loader
|
|
3
|
+
*
|
|
4
|
+
* Loads and validates squad.config.ts or squad.config.json configuration files.
|
|
5
|
+
* Implements the config schema design from spike #72.
|
|
6
|
+
*
|
|
7
|
+
* @module runtime/config
|
|
8
|
+
*/
|
|
9
|
+
import { readFileSync, existsSync } from 'fs';
|
|
10
|
+
import { join, resolve, dirname } from 'path';
|
|
11
|
+
import { pathToFileURL } from 'url';
|
|
12
|
+
import { MODELS } from './constants.js';
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Default Configuration
|
|
15
|
+
// ============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Default Squad configuration with typed defaults.
|
|
18
|
+
*/
|
|
19
|
+
export const DEFAULT_CONFIG = {
|
|
20
|
+
version: '1.0.0',
|
|
21
|
+
models: {
|
|
22
|
+
defaultModel: MODELS.DEFAULT,
|
|
23
|
+
defaultTier: 'standard',
|
|
24
|
+
fallbackChains: {
|
|
25
|
+
premium: [...MODELS.FALLBACK_CHAINS.premium],
|
|
26
|
+
standard: [...MODELS.FALLBACK_CHAINS.standard],
|
|
27
|
+
fast: [...MODELS.FALLBACK_CHAINS.fast]
|
|
28
|
+
},
|
|
29
|
+
preferSameProvider: true,
|
|
30
|
+
respectTierCeiling: true,
|
|
31
|
+
nuclearFallback: {
|
|
32
|
+
enabled: false,
|
|
33
|
+
model: MODELS.NUCLEAR_FALLBACK,
|
|
34
|
+
maxRetriesBeforeNuclear: MODELS.NUCLEAR_MAX_RETRIES
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
routing: {
|
|
38
|
+
rules: [
|
|
39
|
+
{
|
|
40
|
+
workType: 'feature-dev',
|
|
41
|
+
agents: ['@coordinator'],
|
|
42
|
+
confidence: 'high'
|
|
43
|
+
}
|
|
44
|
+
],
|
|
45
|
+
governance: {
|
|
46
|
+
eagerByDefault: true,
|
|
47
|
+
scribeAutoRuns: false,
|
|
48
|
+
allowRecursiveSpawn: false
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
casting: {
|
|
52
|
+
allowlistUniverses: [
|
|
53
|
+
'The Usual Suspects',
|
|
54
|
+
'Breaking Bad',
|
|
55
|
+
'The Wire',
|
|
56
|
+
'Firefly',
|
|
57
|
+
'Star Trek',
|
|
58
|
+
'Lord of the Rings',
|
|
59
|
+
'The Godfather',
|
|
60
|
+
'Inception',
|
|
61
|
+
'The Matrix',
|
|
62
|
+
'Blade Runner',
|
|
63
|
+
'Harry Potter',
|
|
64
|
+
'Game of Thrones',
|
|
65
|
+
'The Expanse',
|
|
66
|
+
'Westworld',
|
|
67
|
+
'Sherlock Holmes'
|
|
68
|
+
],
|
|
69
|
+
overflowStrategy: 'generic',
|
|
70
|
+
universeCapacity: {}
|
|
71
|
+
},
|
|
72
|
+
platforms: {
|
|
73
|
+
vscode: {
|
|
74
|
+
disableModelSelection: false,
|
|
75
|
+
scribeMode: 'sync'
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Configuration validation error.
|
|
81
|
+
*/
|
|
82
|
+
export class ConfigValidationError extends Error {
|
|
83
|
+
errors;
|
|
84
|
+
constructor(message, errors) {
|
|
85
|
+
super(message);
|
|
86
|
+
this.errors = errors;
|
|
87
|
+
this.name = 'ConfigValidationError';
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Discovers Squad configuration file by walking up directory tree.
|
|
92
|
+
*
|
|
93
|
+
* Search order per directory:
|
|
94
|
+
* 1. squad.config.ts
|
|
95
|
+
* 2. squad.config.js
|
|
96
|
+
* 3. squad.config.json
|
|
97
|
+
* 4. .squad/config.json
|
|
98
|
+
*
|
|
99
|
+
* @param cwd - Starting directory for upward search
|
|
100
|
+
* @returns Path to config file if found, undefined otherwise
|
|
101
|
+
*/
|
|
102
|
+
export function discoverConfigFile(cwd = process.cwd()) {
|
|
103
|
+
let currentDir = resolve(cwd);
|
|
104
|
+
const root = resolve(dirname(currentDir), '..');
|
|
105
|
+
const configFiles = [
|
|
106
|
+
'squad.config.ts',
|
|
107
|
+
'squad.config.js',
|
|
108
|
+
'squad.config.json',
|
|
109
|
+
join('.squad', 'config.json')
|
|
110
|
+
];
|
|
111
|
+
while (true) {
|
|
112
|
+
for (const configFile of configFiles) {
|
|
113
|
+
const configPath = join(currentDir, configFile);
|
|
114
|
+
if (existsSync(configPath)) {
|
|
115
|
+
return configPath;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Check if we've reached the root
|
|
119
|
+
const parentDir = dirname(currentDir);
|
|
120
|
+
if (parentDir === currentDir || currentDir === root) {
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
currentDir = parentDir;
|
|
124
|
+
}
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Loads Squad configuration from squad.config.ts, squad.config.js, squad.config.json, or .squad/config.json.
|
|
129
|
+
*
|
|
130
|
+
* Search order:
|
|
131
|
+
* 1. squad.config.ts (ESM import)
|
|
132
|
+
* 2. squad.config.js (ESM import)
|
|
133
|
+
* 3. squad.config.json (JSON parse)
|
|
134
|
+
* 4. .squad/config.json (JSON parse)
|
|
135
|
+
* 5. Walk up directory tree to find config file
|
|
136
|
+
* 6. DEFAULT_CONFIG (fallback)
|
|
137
|
+
*
|
|
138
|
+
* @param cwd - Working directory to search for config files
|
|
139
|
+
* @returns Configuration load result with validation
|
|
140
|
+
* @throws {ConfigValidationError} If config validation fails
|
|
141
|
+
*/
|
|
142
|
+
export async function loadConfig(cwd = process.cwd()) {
|
|
143
|
+
const resolvedCwd = resolve(cwd);
|
|
144
|
+
// Try local configs first
|
|
145
|
+
const localConfigs = [
|
|
146
|
+
{ path: join(resolvedCwd, 'squad.config.ts'), type: 'ts' },
|
|
147
|
+
{ path: join(resolvedCwd, 'squad.config.js'), type: 'js' },
|
|
148
|
+
{ path: join(resolvedCwd, 'squad.config.json'), type: 'json' },
|
|
149
|
+
{ path: join(resolvedCwd, '.squad', 'config.json'), type: 'json' }
|
|
150
|
+
];
|
|
151
|
+
for (const { path: configPath, type } of localConfigs) {
|
|
152
|
+
if (existsSync(configPath)) {
|
|
153
|
+
try {
|
|
154
|
+
if (type === 'ts' || type === 'js') {
|
|
155
|
+
const configUrl = pathToFileURL(configPath).href;
|
|
156
|
+
const module = await import(configUrl);
|
|
157
|
+
const config = module.default || module.squadConfig;
|
|
158
|
+
if (!config) {
|
|
159
|
+
throw new Error(`${configPath} must export default or named export "squadConfig"`);
|
|
160
|
+
}
|
|
161
|
+
const validated = validateConfig(config);
|
|
162
|
+
return {
|
|
163
|
+
config: validated,
|
|
164
|
+
source: configPath,
|
|
165
|
+
isDefault: false
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
const content = readFileSync(configPath, 'utf-8');
|
|
170
|
+
const config = JSON.parse(content);
|
|
171
|
+
const validated = validateConfig(config);
|
|
172
|
+
return {
|
|
173
|
+
config: validated,
|
|
174
|
+
source: configPath,
|
|
175
|
+
isDefault: false
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
if (error instanceof ConfigValidationError) {
|
|
181
|
+
throw error;
|
|
182
|
+
}
|
|
183
|
+
throw new Error(`Failed to load ${configPath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// Walk up directory tree
|
|
188
|
+
const discoveredPath = discoverConfigFile(dirname(resolvedCwd));
|
|
189
|
+
if (discoveredPath) {
|
|
190
|
+
try {
|
|
191
|
+
if (discoveredPath.endsWith('.ts') || discoveredPath.endsWith('.js')) {
|
|
192
|
+
const configUrl = pathToFileURL(discoveredPath).href;
|
|
193
|
+
const module = await import(configUrl);
|
|
194
|
+
const config = module.default || module.squadConfig;
|
|
195
|
+
if (!config) {
|
|
196
|
+
throw new Error(`${discoveredPath} must export default or named export "squadConfig"`);
|
|
197
|
+
}
|
|
198
|
+
const validated = validateConfig(config);
|
|
199
|
+
return {
|
|
200
|
+
config: validated,
|
|
201
|
+
source: discoveredPath,
|
|
202
|
+
isDefault: false
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
const content = readFileSync(discoveredPath, 'utf-8');
|
|
207
|
+
const config = JSON.parse(content);
|
|
208
|
+
const validated = validateConfig(config);
|
|
209
|
+
return {
|
|
210
|
+
config: validated,
|
|
211
|
+
source: discoveredPath,
|
|
212
|
+
isDefault: false
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
if (error instanceof ConfigValidationError) {
|
|
218
|
+
throw error;
|
|
219
|
+
}
|
|
220
|
+
throw new Error(`Failed to load ${discoveredPath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
// Fall back to default config
|
|
224
|
+
return {
|
|
225
|
+
config: DEFAULT_CONFIG,
|
|
226
|
+
source: undefined,
|
|
227
|
+
isDefault: true
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Validates Squad configuration schema and returns detailed result.
|
|
232
|
+
*
|
|
233
|
+
* @param config - Configuration object to validate
|
|
234
|
+
* @returns Validation result with errors and warnings
|
|
235
|
+
*/
|
|
236
|
+
export function validateConfigDetailed(config) {
|
|
237
|
+
const errors = [];
|
|
238
|
+
const warnings = [];
|
|
239
|
+
if (!config || typeof config !== 'object') {
|
|
240
|
+
return {
|
|
241
|
+
valid: false,
|
|
242
|
+
errors: ['Config must be an object'],
|
|
243
|
+
warnings
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
const cfg = config;
|
|
247
|
+
// Validate version
|
|
248
|
+
if (!cfg.version || typeof cfg.version !== 'string') {
|
|
249
|
+
errors.push('config.version is required and must be a string');
|
|
250
|
+
}
|
|
251
|
+
// Validate models section
|
|
252
|
+
if (!cfg.models) {
|
|
253
|
+
errors.push('config.models is required');
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
const models = cfg.models;
|
|
257
|
+
if (!models.defaultModel || typeof models.defaultModel !== 'string') {
|
|
258
|
+
errors.push('config.models.defaultModel is required and must be a string');
|
|
259
|
+
}
|
|
260
|
+
if (!models.defaultTier || !['premium', 'standard', 'fast'].includes(models.defaultTier)) {
|
|
261
|
+
errors.push('config.models.defaultTier must be "premium", "standard", or "fast"');
|
|
262
|
+
}
|
|
263
|
+
if (!models.fallbackChains) {
|
|
264
|
+
errors.push('config.models.fallbackChains is required');
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
if (!Array.isArray(models.fallbackChains.premium)) {
|
|
268
|
+
errors.push('config.models.fallbackChains.premium must be an array');
|
|
269
|
+
}
|
|
270
|
+
if (!Array.isArray(models.fallbackChains.standard)) {
|
|
271
|
+
errors.push('config.models.fallbackChains.standard must be an array');
|
|
272
|
+
}
|
|
273
|
+
if (!Array.isArray(models.fallbackChains.fast)) {
|
|
274
|
+
errors.push('config.models.fallbackChains.fast must be an array');
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
// Validate task rules if present
|
|
278
|
+
if (models.taskRules) {
|
|
279
|
+
if (!Array.isArray(models.taskRules)) {
|
|
280
|
+
errors.push('config.models.taskRules must be an array');
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
models.taskRules.forEach((rule, idx) => {
|
|
284
|
+
if (!rule.outputType || typeof rule.outputType !== 'string') {
|
|
285
|
+
errors.push(`config.models.taskRules[${idx}].outputType is required`);
|
|
286
|
+
}
|
|
287
|
+
if (!rule.model || typeof rule.model !== 'string') {
|
|
288
|
+
errors.push(`config.models.taskRules[${idx}].model is required`);
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// Validate role mapping if present
|
|
294
|
+
if (models.roleMapping) {
|
|
295
|
+
if (!Array.isArray(models.roleMapping)) {
|
|
296
|
+
errors.push('config.models.roleMapping must be an array');
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
models.roleMapping.forEach((mapping, idx) => {
|
|
300
|
+
if (!mapping.role || typeof mapping.role !== 'string') {
|
|
301
|
+
errors.push(`config.models.roleMapping[${idx}].role is required`);
|
|
302
|
+
}
|
|
303
|
+
if (!mapping.model || typeof mapping.model !== 'string') {
|
|
304
|
+
errors.push(`config.models.roleMapping[${idx}].model is required`);
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
// Validate routing section
|
|
311
|
+
if (!cfg.routing) {
|
|
312
|
+
errors.push('config.routing is required');
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
if (!Array.isArray(cfg.routing.rules)) {
|
|
316
|
+
errors.push('config.routing.rules must be an array');
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
const agentNames = new Set();
|
|
320
|
+
cfg.routing.rules.forEach((rule, idx) => {
|
|
321
|
+
if (!rule.workType || typeof rule.workType !== 'string') {
|
|
322
|
+
errors.push(`config.routing.rules[${idx}].workType is required`);
|
|
323
|
+
}
|
|
324
|
+
if (!Array.isArray(rule.agents) || rule.agents.length === 0) {
|
|
325
|
+
errors.push(`config.routing.rules[${idx}].agents must be a non-empty array`);
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
rule.agents.forEach(agent => agentNames.add(agent));
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
// Check for duplicate work types
|
|
332
|
+
const workTypes = new Set();
|
|
333
|
+
cfg.routing.rules.forEach(rule => {
|
|
334
|
+
if (rule.workType) {
|
|
335
|
+
if (workTypes.has(rule.workType)) {
|
|
336
|
+
warnings.push(`Duplicate work type in routing rules: ${rule.workType}`);
|
|
337
|
+
}
|
|
338
|
+
workTypes.add(rule.workType);
|
|
339
|
+
}
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
// Validate issue routing if present
|
|
343
|
+
if (cfg.routing.issueRouting) {
|
|
344
|
+
if (!Array.isArray(cfg.routing.issueRouting)) {
|
|
345
|
+
errors.push('config.routing.issueRouting must be an array');
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
cfg.routing.issueRouting.forEach((rule, idx) => {
|
|
349
|
+
if (!rule.label || typeof rule.label !== 'string') {
|
|
350
|
+
errors.push(`config.routing.issueRouting[${idx}].label is required`);
|
|
351
|
+
}
|
|
352
|
+
if (!rule.action || !['assign', 'route', 'evaluate'].includes(rule.action)) {
|
|
353
|
+
errors.push(`config.routing.issueRouting[${idx}].action must be "assign", "route", or "evaluate"`);
|
|
354
|
+
}
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
// Validate agent sources if present
|
|
360
|
+
if (cfg.agentSources) {
|
|
361
|
+
if (!Array.isArray(cfg.agentSources)) {
|
|
362
|
+
errors.push('config.agentSources must be an array');
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
cfg.agentSources.forEach((source, idx) => {
|
|
366
|
+
if (!source.type || !['local', 'git', 'npm', 'url'].includes(source.type)) {
|
|
367
|
+
errors.push(`config.agentSources[${idx}].type must be "local", "git", "npm", or "url"`);
|
|
368
|
+
}
|
|
369
|
+
if (!source.location || typeof source.location !== 'string') {
|
|
370
|
+
errors.push(`config.agentSources[${idx}].location is required`);
|
|
371
|
+
}
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
// Validate casting policy if present
|
|
376
|
+
if (cfg.casting) {
|
|
377
|
+
if (cfg.casting.allowlistUniverses && !Array.isArray(cfg.casting.allowlistUniverses)) {
|
|
378
|
+
errors.push('config.casting.allowlistUniverses must be an array');
|
|
379
|
+
}
|
|
380
|
+
if (cfg.casting.overflowStrategy && !['reject', 'generic', 'rotate'].includes(cfg.casting.overflowStrategy)) {
|
|
381
|
+
errors.push('config.casting.overflowStrategy must be "reject", "generic", or "rotate"');
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
return {
|
|
385
|
+
valid: errors.length === 0,
|
|
386
|
+
errors,
|
|
387
|
+
warnings
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Validates Squad configuration schema.
|
|
392
|
+
*
|
|
393
|
+
* @param config - Configuration object to validate
|
|
394
|
+
* @returns Validated configuration with defaults merged
|
|
395
|
+
* @throws {ConfigValidationError} If validation fails
|
|
396
|
+
*/
|
|
397
|
+
export function validateConfig(config) {
|
|
398
|
+
const result = validateConfigDetailed(config);
|
|
399
|
+
if (!result.valid) {
|
|
400
|
+
throw new ConfigValidationError(`Configuration validation failed:\n${result.errors.map(e => ` - ${e}`).join('\n')}`, result.errors);
|
|
401
|
+
}
|
|
402
|
+
const cfg = config;
|
|
403
|
+
// Merge with defaults for optional fields
|
|
404
|
+
const validated = {
|
|
405
|
+
...DEFAULT_CONFIG,
|
|
406
|
+
...cfg,
|
|
407
|
+
models: {
|
|
408
|
+
...DEFAULT_CONFIG.models,
|
|
409
|
+
...cfg.models
|
|
410
|
+
},
|
|
411
|
+
routing: {
|
|
412
|
+
...DEFAULT_CONFIG.routing,
|
|
413
|
+
...cfg.routing,
|
|
414
|
+
governance: {
|
|
415
|
+
...DEFAULT_CONFIG.routing.governance,
|
|
416
|
+
...cfg.routing?.governance
|
|
417
|
+
}
|
|
418
|
+
},
|
|
419
|
+
casting: {
|
|
420
|
+
...DEFAULT_CONFIG.casting,
|
|
421
|
+
...cfg.casting
|
|
422
|
+
},
|
|
423
|
+
platforms: {
|
|
424
|
+
...DEFAULT_CONFIG.platforms,
|
|
425
|
+
...cfg.platforms
|
|
426
|
+
}
|
|
427
|
+
};
|
|
428
|
+
return validated;
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Synchronously loads Squad configuration.
|
|
432
|
+
* Only supports squad.config.json (TypeScript config requires async import).
|
|
433
|
+
*
|
|
434
|
+
* @param cwd - Working directory to search for config files
|
|
435
|
+
* @returns Configuration load result with validation
|
|
436
|
+
* @throws {ConfigValidationError} If config validation fails
|
|
437
|
+
*/
|
|
438
|
+
export function loadConfigSync(cwd = process.cwd()) {
|
|
439
|
+
const resolvedCwd = resolve(cwd);
|
|
440
|
+
// Only check squad.config.json (sync loading of .ts not supported)
|
|
441
|
+
const jsonConfigPath = join(resolvedCwd, 'squad.config.json');
|
|
442
|
+
if (existsSync(jsonConfigPath)) {
|
|
443
|
+
try {
|
|
444
|
+
const content = readFileSync(jsonConfigPath, 'utf-8');
|
|
445
|
+
const config = JSON.parse(content);
|
|
446
|
+
const validated = validateConfig(config);
|
|
447
|
+
return {
|
|
448
|
+
config: validated,
|
|
449
|
+
source: jsonConfigPath,
|
|
450
|
+
isDefault: false
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
catch (error) {
|
|
454
|
+
if (error instanceof ConfigValidationError) {
|
|
455
|
+
throw error;
|
|
456
|
+
}
|
|
457
|
+
throw new Error(`Failed to load squad.config.json: ${error instanceof Error ? error.message : String(error)}`);
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
// Fall back to default config
|
|
461
|
+
return {
|
|
462
|
+
config: DEFAULT_CONFIG,
|
|
463
|
+
source: undefined,
|
|
464
|
+
isDefault: true
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/runtime/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Central constants — single source of truth for model names, timeouts, roles.
|
|
3
|
+
* All magic values live here. Environment variables override where noted.
|
|
4
|
+
*
|
|
5
|
+
* @module runtime/constants
|
|
6
|
+
*/
|
|
7
|
+
export declare const MODELS: {
|
|
8
|
+
/** Default model for config files and new projects (env-overridable) */
|
|
9
|
+
readonly DEFAULT: string;
|
|
10
|
+
/** Default model for model-selector Layer 4 — cost-first */
|
|
11
|
+
readonly SELECTOR_DEFAULT: "claude-haiku-4.5";
|
|
12
|
+
/** Default tier for the model-selector Layer 4 fallback */
|
|
13
|
+
readonly SELECTOR_DEFAULT_TIER: "fast";
|
|
14
|
+
/** Fallback chains by tier — ordered by preference */
|
|
15
|
+
readonly FALLBACK_CHAINS: {
|
|
16
|
+
readonly premium: readonly ["claude-opus-4.6", "claude-opus-4.6-fast", "claude-opus-4.5", "claude-sonnet-4.5"];
|
|
17
|
+
readonly standard: readonly ["claude-sonnet-4.5", "gpt-5.2-codex", "claude-sonnet-4", "gpt-5.2"];
|
|
18
|
+
readonly fast: readonly ["claude-haiku-4.5", "gpt-5.1-codex-mini", "gpt-4.1", "gpt-5-mini"];
|
|
19
|
+
};
|
|
20
|
+
/** Nuclear fallback model when all chains are exhausted */
|
|
21
|
+
readonly NUCLEAR_FALLBACK: "claude-haiku-4.5";
|
|
22
|
+
/** Maximum retries before nuclear fallback engages */
|
|
23
|
+
readonly NUCLEAR_MAX_RETRIES: 3;
|
|
24
|
+
};
|
|
25
|
+
export declare const TIMEOUTS: {
|
|
26
|
+
/** Health check timeout in milliseconds */
|
|
27
|
+
readonly HEALTH_CHECK_MS: number;
|
|
28
|
+
/** Git clone timeout in milliseconds */
|
|
29
|
+
readonly GIT_CLONE_MS: number;
|
|
30
|
+
/** Plugin/marketplace fetch timeout in milliseconds */
|
|
31
|
+
readonly PLUGIN_FETCH_MS: number;
|
|
32
|
+
};
|
|
33
|
+
export declare const AGENT_ROLES: readonly ["lead", "developer", "tester", "designer", "scribe", "coordinator"];
|
|
34
|
+
export type AgentRole = typeof AGENT_ROLES[number];
|
|
35
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/runtime/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,eAAO,MAAM,MAAM;IACjB,wEAAwE;;IAGxE,4DAA4D;;IAG5D,2DAA2D;;IAG3D,sDAAsD;;;;;;IAsBtD,2DAA2D;;IAG3D,sDAAsD;;CAE9C,CAAC;AAMX,eAAO,MAAM,QAAQ;IACnB,2CAA2C;;IAG3C,wCAAwC;;IAGxC,uDAAuD;;CAE/C,CAAC;AAMX,eAAO,MAAM,WAAW,+EAAgF,CAAC;AACzG,MAAM,MAAM,SAAS,GAAG,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Central constants — single source of truth for model names, timeouts, roles.
|
|
3
|
+
* All magic values live here. Environment variables override where noted.
|
|
4
|
+
*
|
|
5
|
+
* @module runtime/constants
|
|
6
|
+
*/
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// Models
|
|
9
|
+
// ============================================================================
|
|
10
|
+
export const MODELS = {
|
|
11
|
+
/** Default model for config files and new projects (env-overridable) */
|
|
12
|
+
DEFAULT: process.env['SQUAD_DEFAULT_MODEL'] ?? 'claude-sonnet-4.5',
|
|
13
|
+
/** Default model for model-selector Layer 4 — cost-first */
|
|
14
|
+
SELECTOR_DEFAULT: 'claude-haiku-4.5',
|
|
15
|
+
/** Default tier for the model-selector Layer 4 fallback */
|
|
16
|
+
SELECTOR_DEFAULT_TIER: 'fast',
|
|
17
|
+
/** Fallback chains by tier — ordered by preference */
|
|
18
|
+
FALLBACK_CHAINS: {
|
|
19
|
+
premium: [
|
|
20
|
+
'claude-opus-4.6',
|
|
21
|
+
'claude-opus-4.6-fast',
|
|
22
|
+
'claude-opus-4.5',
|
|
23
|
+
'claude-sonnet-4.5',
|
|
24
|
+
],
|
|
25
|
+
standard: [
|
|
26
|
+
'claude-sonnet-4.5',
|
|
27
|
+
'gpt-5.2-codex',
|
|
28
|
+
'claude-sonnet-4',
|
|
29
|
+
'gpt-5.2',
|
|
30
|
+
],
|
|
31
|
+
fast: [
|
|
32
|
+
'claude-haiku-4.5',
|
|
33
|
+
'gpt-5.1-codex-mini',
|
|
34
|
+
'gpt-4.1',
|
|
35
|
+
'gpt-5-mini',
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
/** Nuclear fallback model when all chains are exhausted */
|
|
39
|
+
NUCLEAR_FALLBACK: 'claude-haiku-4.5',
|
|
40
|
+
/** Maximum retries before nuclear fallback engages */
|
|
41
|
+
NUCLEAR_MAX_RETRIES: 3,
|
|
42
|
+
};
|
|
43
|
+
// ============================================================================
|
|
44
|
+
// Timeouts
|
|
45
|
+
// ============================================================================
|
|
46
|
+
export const TIMEOUTS = {
|
|
47
|
+
/** Health check timeout in milliseconds */
|
|
48
|
+
HEALTH_CHECK_MS: parseInt(process.env['SQUAD_HEALTH_CHECK_MS'] ?? '5000', 10),
|
|
49
|
+
/** Git clone timeout in milliseconds */
|
|
50
|
+
GIT_CLONE_MS: parseInt(process.env['SQUAD_GIT_CLONE_MS'] ?? '60000', 10),
|
|
51
|
+
/** Plugin/marketplace fetch timeout in milliseconds */
|
|
52
|
+
PLUGIN_FETCH_MS: parseInt(process.env['SQUAD_PLUGIN_FETCH_MS'] ?? '15000', 10),
|
|
53
|
+
};
|
|
54
|
+
// ============================================================================
|
|
55
|
+
// Agent Roles
|
|
56
|
+
// ============================================================================
|
|
57
|
+
export const AGENT_ROLES = ['lead', 'developer', 'tester', 'designer', 'scribe', 'coordinator'];
|
|
58
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/runtime/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+EAA+E;AAC/E,SAAS;AACT,+EAA+E;AAE/E,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,wEAAwE;IACxE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,mBAAmB;IAElE,4DAA4D;IAC5D,gBAAgB,EAAE,kBAAkB;IAEpC,2DAA2D;IAC3D,qBAAqB,EAAE,MAAM;IAE7B,sDAAsD;IACtD,eAAe,EAAE;QACf,OAAO,EAAE;YACP,iBAAiB;YACjB,sBAAsB;YACtB,iBAAiB;YACjB,mBAAmB;SACpB;QACD,QAAQ,EAAE;YACR,mBAAmB;YACnB,eAAe;YACf,iBAAiB;YACjB,SAAS;SACV;QACD,IAAI,EAAE;YACJ,kBAAkB;YAClB,oBAAoB;YACpB,SAAS;YACT,YAAY;SACb;KACF;IAED,2DAA2D;IAC3D,gBAAgB,EAAE,kBAAkB;IAEpC,sDAAsD;IACtD,mBAAmB,EAAE,CAAC;CACd,CAAC;AAEX,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,2CAA2C;IAC3C,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,MAAM,EAAE,EAAE,CAAC;IAE7E,wCAAwC;IACxC,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,OAAO,EAAE,EAAE,CAAC;IAExE,uDAAuD;IACvD,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,OAAO,EAAE,EAAE,CAAC;CACtE,CAAC;AAEX,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAU,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cost Tracker
|
|
3
|
+
*
|
|
4
|
+
* Accumulates cost and token data across a squad run with per-agent and
|
|
5
|
+
* per-session breakdowns. Wires into EventBus for real-time updates.
|
|
6
|
+
*
|
|
7
|
+
* @module runtime/cost-tracker
|
|
8
|
+
*/
|
|
9
|
+
import type { EventBus } from './event-bus.js';
|
|
10
|
+
/** Per-agent cost/token breakdown. */
|
|
11
|
+
export interface AgentCostEntry {
|
|
12
|
+
agentName: string;
|
|
13
|
+
model: string;
|
|
14
|
+
inputTokens: number;
|
|
15
|
+
outputTokens: number;
|
|
16
|
+
estimatedCost: number;
|
|
17
|
+
turnCount: number;
|
|
18
|
+
fallbackCount: number;
|
|
19
|
+
}
|
|
20
|
+
/** Per-session cost/token breakdown. */
|
|
21
|
+
export interface SessionCostEntry {
|
|
22
|
+
sessionId: string;
|
|
23
|
+
agentName?: string;
|
|
24
|
+
inputTokens: number;
|
|
25
|
+
outputTokens: number;
|
|
26
|
+
estimatedCost: number;
|
|
27
|
+
turnCount: number;
|
|
28
|
+
}
|
|
29
|
+
/** Total summary across all agents and sessions. */
|
|
30
|
+
export interface CostSummary {
|
|
31
|
+
totalInputTokens: number;
|
|
32
|
+
totalOutputTokens: number;
|
|
33
|
+
totalEstimatedCost: number;
|
|
34
|
+
agents: Map<string, AgentCostEntry>;
|
|
35
|
+
sessions: Map<string, SessionCostEntry>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Accumulates cost/token data across the squad run.
|
|
39
|
+
*
|
|
40
|
+
* Can be wired to an EventBus to receive live usage events or fed
|
|
41
|
+
* data manually via `recordUsage()`.
|
|
42
|
+
*/
|
|
43
|
+
export declare class CostTracker {
|
|
44
|
+
private agents;
|
|
45
|
+
private sessions;
|
|
46
|
+
private unsubscribe;
|
|
47
|
+
/**
|
|
48
|
+
* Record a single usage event.
|
|
49
|
+
*/
|
|
50
|
+
recordUsage(opts: {
|
|
51
|
+
sessionId: string;
|
|
52
|
+
agentName?: string;
|
|
53
|
+
model: string;
|
|
54
|
+
inputTokens: number;
|
|
55
|
+
outputTokens: number;
|
|
56
|
+
estimatedCost: number;
|
|
57
|
+
isFallback?: boolean;
|
|
58
|
+
}): void;
|
|
59
|
+
/** Record a model fallback for an agent (increments fallback counter). */
|
|
60
|
+
recordFallback(agentName: string): void;
|
|
61
|
+
/** Get the full cost summary. */
|
|
62
|
+
getSummary(): CostSummary;
|
|
63
|
+
/** Get formatted summary string suitable for terminal output. */
|
|
64
|
+
formatSummary(): string;
|
|
65
|
+
/** Clear all accumulated data. */
|
|
66
|
+
reset(): void;
|
|
67
|
+
/**
|
|
68
|
+
* Wire into an EventBus to receive real-time `session:message` events
|
|
69
|
+
* that carry usage payloads. Returns an unsubscribe function.
|
|
70
|
+
*/
|
|
71
|
+
wireToEventBus(bus: EventBus): () => void;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=cost-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-tracker.d.ts","sourceRoot":"","sources":["../../src/runtime/cost-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,gBAAgB,CAAC;AAM3D,sCAAsC;AACtC,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wCAAwC;AACxC,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,oDAAoD;AACpD,MAAM,WAAW,WAAW;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACpC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CACzC;AAMD;;;;;GAKG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO,CAAC,QAAQ,CAA4C;IAC5D,OAAO,CAAC,WAAW,CAA6B;IAEhD;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,GAAG,IAAI;IA2CR,0EAA0E;IAC1E,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAOvC,iCAAiC;IACjC,UAAU,IAAI,WAAW;IAoBzB,iEAAiE;IACjE,aAAa,IAAI,MAAM;IAmCvB,kCAAkC;IAClC,KAAK,IAAI,IAAI;IAKb;;;OAGG;IACH,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,IAAI;CA8B1C"}
|