@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,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration Registry
|
|
3
|
+
*
|
|
4
|
+
* Provides versioned configuration upgrades with forward and rollback support.
|
|
5
|
+
* Versions follow semver-like major.minor.patch ordering.
|
|
6
|
+
*
|
|
7
|
+
* @module config/migration
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Parsed semver version.
|
|
11
|
+
*/
|
|
12
|
+
export interface SemVer {
|
|
13
|
+
major: number;
|
|
14
|
+
minor: number;
|
|
15
|
+
patch: number;
|
|
16
|
+
raw: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A single migration step between two versions.
|
|
20
|
+
*/
|
|
21
|
+
export interface Migration {
|
|
22
|
+
/** Version to migrate from */
|
|
23
|
+
fromVersion: string;
|
|
24
|
+
/** Version to migrate to */
|
|
25
|
+
toVersion: string;
|
|
26
|
+
/** Forward migration function */
|
|
27
|
+
migrate(config: Record<string, unknown>): Record<string, unknown>;
|
|
28
|
+
/** Optional reverse migration function */
|
|
29
|
+
rollback?(config: Record<string, unknown>): Record<string, unknown>;
|
|
30
|
+
/** Human-readable description */
|
|
31
|
+
description?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Result of running a migration chain.
|
|
35
|
+
*/
|
|
36
|
+
export interface MigrationResult {
|
|
37
|
+
/** Final config after migrations */
|
|
38
|
+
config: Record<string, unknown>;
|
|
39
|
+
/** Starting version */
|
|
40
|
+
fromVersion: string;
|
|
41
|
+
/** Ending version */
|
|
42
|
+
toVersion: string;
|
|
43
|
+
/** Migrations that were applied (in order) */
|
|
44
|
+
applied: Migration[];
|
|
45
|
+
/** Whether rollback was used (reverse direction) */
|
|
46
|
+
rolledBack: boolean;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Parses a semver string into its components.
|
|
50
|
+
*
|
|
51
|
+
* @param version - Version string (e.g. "1.2.3")
|
|
52
|
+
* @returns Parsed SemVer object
|
|
53
|
+
* @throws If the version string is invalid
|
|
54
|
+
*/
|
|
55
|
+
export declare function parseSemVer(version: string): SemVer;
|
|
56
|
+
/**
|
|
57
|
+
* Compares two semver versions.
|
|
58
|
+
*
|
|
59
|
+
* @returns negative if a < b, 0 if equal, positive if a > b
|
|
60
|
+
*/
|
|
61
|
+
export declare function compareSemVer(a: string, b: string): number;
|
|
62
|
+
/**
|
|
63
|
+
* Registry for versioned configuration migrations.
|
|
64
|
+
*
|
|
65
|
+
* Migrations are stored as directed edges in a version graph.
|
|
66
|
+
* `runMigrations` finds a path from source to target version
|
|
67
|
+
* and chains the transforms in order.
|
|
68
|
+
*/
|
|
69
|
+
export declare class MigrationRegistry {
|
|
70
|
+
private migrations;
|
|
71
|
+
/**
|
|
72
|
+
* Registers a migration.
|
|
73
|
+
*
|
|
74
|
+
* @param migration - Migration to register
|
|
75
|
+
* @throws If a migration with the same from/to already exists
|
|
76
|
+
*/
|
|
77
|
+
register(migration: Migration): void;
|
|
78
|
+
/**
|
|
79
|
+
* Unregisters a migration.
|
|
80
|
+
*
|
|
81
|
+
* @returns true if a migration was removed
|
|
82
|
+
*/
|
|
83
|
+
unregister(fromVersion: string, toVersion: string): boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Returns all registered migrations sorted by fromVersion.
|
|
86
|
+
*/
|
|
87
|
+
list(): ReadonlyArray<Migration>;
|
|
88
|
+
/**
|
|
89
|
+
* Checks whether a complete migration path exists between two versions.
|
|
90
|
+
*/
|
|
91
|
+
hasPath(fromVersion: string, toVersion: string): boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Detects gaps in the migration chain between two versions.
|
|
94
|
+
*
|
|
95
|
+
* @returns Array of missing migration edges (fromVersion → toVersion pairs)
|
|
96
|
+
*/
|
|
97
|
+
detectGaps(fromVersion: string, toVersion: string): Array<{
|
|
98
|
+
from: string;
|
|
99
|
+
to: string;
|
|
100
|
+
}>;
|
|
101
|
+
/**
|
|
102
|
+
* Runs migrations to transform config from one version to another.
|
|
103
|
+
*
|
|
104
|
+
* For forward migrations (from < to), chains migrate() calls.
|
|
105
|
+
* For rollback (from > to), chains rollback() calls in reverse order.
|
|
106
|
+
*
|
|
107
|
+
* @param config - Current configuration object
|
|
108
|
+
* @param fromVersion - Current version
|
|
109
|
+
* @param toVersion - Target version
|
|
110
|
+
* @returns Migration result with transformed config
|
|
111
|
+
* @throws If no migration path exists or rollback is not supported
|
|
112
|
+
*/
|
|
113
|
+
runMigrations(config: Record<string, unknown>, fromVersion: string, toVersion: string): MigrationResult;
|
|
114
|
+
/**
|
|
115
|
+
* Finds an ordered migration path between two versions.
|
|
116
|
+
* @internal
|
|
117
|
+
*/
|
|
118
|
+
private findPath;
|
|
119
|
+
private findForwardPath;
|
|
120
|
+
private findRollbackPath;
|
|
121
|
+
private getSortedMigrations;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=migration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../src/config/migration.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClE,0CAA0C;IAC1C,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpE,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,oDAAoD;IACpD,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAWnD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAO1D;AAED;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAAmB;IAErC;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAepC;;;;OAIG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAS3D;;OAEG;IACH,IAAI,IAAI,aAAa,CAAC,SAAS,CAAC;IAIhC;;OAEG;IACH,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IASxD;;;;OAIG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IA2DvF;;;;;;;;;;;OAWG;IACH,aAAa,CACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,eAAe;IA8ClB;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAahB,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,gBAAgB;IAmCxB,OAAO,CAAC,mBAAmB;CAO5B"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration Registry
|
|
3
|
+
*
|
|
4
|
+
* Provides versioned configuration upgrades with forward and rollback support.
|
|
5
|
+
* Versions follow semver-like major.minor.patch ordering.
|
|
6
|
+
*
|
|
7
|
+
* @module config/migration
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Parses a semver string into its components.
|
|
11
|
+
*
|
|
12
|
+
* @param version - Version string (e.g. "1.2.3")
|
|
13
|
+
* @returns Parsed SemVer object
|
|
14
|
+
* @throws If the version string is invalid
|
|
15
|
+
*/
|
|
16
|
+
export function parseSemVer(version) {
|
|
17
|
+
const match = version.match(/^(\d+)\.(\d+)\.(\d+)$/);
|
|
18
|
+
if (!match) {
|
|
19
|
+
throw new Error(`Invalid version format: "${version}" (expected major.minor.patch)`);
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
major: parseInt(match[1], 10),
|
|
23
|
+
minor: parseInt(match[2], 10),
|
|
24
|
+
patch: parseInt(match[3], 10),
|
|
25
|
+
raw: version,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Compares two semver versions.
|
|
30
|
+
*
|
|
31
|
+
* @returns negative if a < b, 0 if equal, positive if a > b
|
|
32
|
+
*/
|
|
33
|
+
export function compareSemVer(a, b) {
|
|
34
|
+
const va = parseSemVer(a);
|
|
35
|
+
const vb = parseSemVer(b);
|
|
36
|
+
if (va.major !== vb.major)
|
|
37
|
+
return va.major - vb.major;
|
|
38
|
+
if (va.minor !== vb.minor)
|
|
39
|
+
return va.minor - vb.minor;
|
|
40
|
+
return va.patch - vb.patch;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Registry for versioned configuration migrations.
|
|
44
|
+
*
|
|
45
|
+
* Migrations are stored as directed edges in a version graph.
|
|
46
|
+
* `runMigrations` finds a path from source to target version
|
|
47
|
+
* and chains the transforms in order.
|
|
48
|
+
*/
|
|
49
|
+
export class MigrationRegistry {
|
|
50
|
+
migrations = [];
|
|
51
|
+
/**
|
|
52
|
+
* Registers a migration.
|
|
53
|
+
*
|
|
54
|
+
* @param migration - Migration to register
|
|
55
|
+
* @throws If a migration with the same from/to already exists
|
|
56
|
+
*/
|
|
57
|
+
register(migration) {
|
|
58
|
+
const existing = this.migrations.find((m) => m.fromVersion === migration.fromVersion && m.toVersion === migration.toVersion);
|
|
59
|
+
if (existing) {
|
|
60
|
+
throw new Error(`Migration from ${migration.fromVersion} to ${migration.toVersion} is already registered`);
|
|
61
|
+
}
|
|
62
|
+
// Validate version strings
|
|
63
|
+
parseSemVer(migration.fromVersion);
|
|
64
|
+
parseSemVer(migration.toVersion);
|
|
65
|
+
this.migrations.push(migration);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Unregisters a migration.
|
|
69
|
+
*
|
|
70
|
+
* @returns true if a migration was removed
|
|
71
|
+
*/
|
|
72
|
+
unregister(fromVersion, toVersion) {
|
|
73
|
+
const idx = this.migrations.findIndex((m) => m.fromVersion === fromVersion && m.toVersion === toVersion);
|
|
74
|
+
if (idx === -1)
|
|
75
|
+
return false;
|
|
76
|
+
this.migrations.splice(idx, 1);
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Returns all registered migrations sorted by fromVersion.
|
|
81
|
+
*/
|
|
82
|
+
list() {
|
|
83
|
+
return [...this.migrations].sort((a, b) => compareSemVer(a.fromVersion, b.fromVersion));
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Checks whether a complete migration path exists between two versions.
|
|
87
|
+
*/
|
|
88
|
+
hasPath(fromVersion, toVersion) {
|
|
89
|
+
try {
|
|
90
|
+
this.findPath(fromVersion, toVersion);
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Detects gaps in the migration chain between two versions.
|
|
99
|
+
*
|
|
100
|
+
* @returns Array of missing migration edges (fromVersion → toVersion pairs)
|
|
101
|
+
*/
|
|
102
|
+
detectGaps(fromVersion, toVersion) {
|
|
103
|
+
const cmp = compareSemVer(fromVersion, toVersion);
|
|
104
|
+
if (cmp === 0)
|
|
105
|
+
return [];
|
|
106
|
+
const forward = cmp < 0;
|
|
107
|
+
const sorted = this.getSortedMigrations(forward);
|
|
108
|
+
// Collect versions that appear in migrations between from and to
|
|
109
|
+
const relevantVersions = new Set();
|
|
110
|
+
relevantVersions.add(fromVersion);
|
|
111
|
+
relevantVersions.add(toVersion);
|
|
112
|
+
for (const m of sorted) {
|
|
113
|
+
const src = forward ? m.fromVersion : m.toVersion;
|
|
114
|
+
const dst = forward ? m.toVersion : m.fromVersion;
|
|
115
|
+
const inRange = forward
|
|
116
|
+
? compareSemVer(src, fromVersion) >= 0 && compareSemVer(dst, toVersion) <= 0
|
|
117
|
+
: compareSemVer(src, toVersion) >= 0 && compareSemVer(dst, fromVersion) <= 0;
|
|
118
|
+
if (inRange) {
|
|
119
|
+
relevantVersions.add(m.fromVersion);
|
|
120
|
+
relevantVersions.add(m.toVersion);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Sort versions in traversal order
|
|
124
|
+
const versions = [...relevantVersions].sort((a, b) => forward ? compareSemVer(a, b) : compareSemVer(b, a));
|
|
125
|
+
const gaps = [];
|
|
126
|
+
for (let i = 0; i < versions.length - 1; i++) {
|
|
127
|
+
const src = versions[i];
|
|
128
|
+
const dst = versions[i + 1];
|
|
129
|
+
const edgeFrom = forward ? src : dst;
|
|
130
|
+
const edgeTo = forward ? dst : src;
|
|
131
|
+
const hasMigration = this.migrations.some((m) => m.fromVersion === edgeFrom && m.toVersion === edgeTo);
|
|
132
|
+
if (!hasMigration) {
|
|
133
|
+
if (forward) {
|
|
134
|
+
const hasRollback = this.migrations.some((m) => m.fromVersion === edgeTo && m.toVersion === edgeFrom && m.rollback);
|
|
135
|
+
if (!hasRollback)
|
|
136
|
+
gaps.push({ from: src, to: dst });
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
const hasRollback = this.migrations.some((m) => m.fromVersion === edgeTo && m.toVersion === edgeFrom && m.rollback);
|
|
140
|
+
if (!hasRollback)
|
|
141
|
+
gaps.push({ from: src, to: dst });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return gaps;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Runs migrations to transform config from one version to another.
|
|
149
|
+
*
|
|
150
|
+
* For forward migrations (from < to), chains migrate() calls.
|
|
151
|
+
* For rollback (from > to), chains rollback() calls in reverse order.
|
|
152
|
+
*
|
|
153
|
+
* @param config - Current configuration object
|
|
154
|
+
* @param fromVersion - Current version
|
|
155
|
+
* @param toVersion - Target version
|
|
156
|
+
* @returns Migration result with transformed config
|
|
157
|
+
* @throws If no migration path exists or rollback is not supported
|
|
158
|
+
*/
|
|
159
|
+
runMigrations(config, fromVersion, toVersion) {
|
|
160
|
+
const cmp = compareSemVer(fromVersion, toVersion);
|
|
161
|
+
if (cmp === 0) {
|
|
162
|
+
return {
|
|
163
|
+
config: { ...config },
|
|
164
|
+
fromVersion,
|
|
165
|
+
toVersion,
|
|
166
|
+
applied: [],
|
|
167
|
+
rolledBack: false,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
const forward = cmp < 0;
|
|
171
|
+
const path = this.findPath(fromVersion, toVersion);
|
|
172
|
+
let current = { ...config };
|
|
173
|
+
const applied = [];
|
|
174
|
+
if (forward) {
|
|
175
|
+
for (const migration of path) {
|
|
176
|
+
current = migration.migrate(current);
|
|
177
|
+
applied.push(migration);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
// Reverse: path is already in rollback order
|
|
182
|
+
for (const migration of path) {
|
|
183
|
+
if (!migration.rollback) {
|
|
184
|
+
throw new Error(`Migration from ${migration.fromVersion} to ${migration.toVersion} does not support rollback`);
|
|
185
|
+
}
|
|
186
|
+
current = migration.rollback(current);
|
|
187
|
+
applied.push(migration);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
config: current,
|
|
192
|
+
fromVersion,
|
|
193
|
+
toVersion,
|
|
194
|
+
applied,
|
|
195
|
+
rolledBack: !forward,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Finds an ordered migration path between two versions.
|
|
200
|
+
* @internal
|
|
201
|
+
*/
|
|
202
|
+
findPath(fromVersion, toVersion) {
|
|
203
|
+
const cmp = compareSemVer(fromVersion, toVersion);
|
|
204
|
+
if (cmp === 0)
|
|
205
|
+
return [];
|
|
206
|
+
const forward = cmp < 0;
|
|
207
|
+
if (forward) {
|
|
208
|
+
return this.findForwardPath(fromVersion, toVersion);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
return this.findRollbackPath(fromVersion, toVersion);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
findForwardPath(fromVersion, toVersion) {
|
|
215
|
+
// BFS to find shortest path
|
|
216
|
+
const queue = [
|
|
217
|
+
{ version: fromVersion, path: [] },
|
|
218
|
+
];
|
|
219
|
+
const visited = new Set();
|
|
220
|
+
visited.add(fromVersion);
|
|
221
|
+
while (queue.length > 0) {
|
|
222
|
+
const { version, path } = queue.shift();
|
|
223
|
+
// Find all migrations from this version
|
|
224
|
+
for (const m of this.migrations) {
|
|
225
|
+
if (m.fromVersion === version && !visited.has(m.toVersion)) {
|
|
226
|
+
const newPath = [...path, m];
|
|
227
|
+
if (m.toVersion === toVersion) {
|
|
228
|
+
return newPath;
|
|
229
|
+
}
|
|
230
|
+
// Only follow edges that move toward the target
|
|
231
|
+
if (compareSemVer(m.toVersion, toVersion) <= 0) {
|
|
232
|
+
visited.add(m.toVersion);
|
|
233
|
+
queue.push({ version: m.toVersion, path: newPath });
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
throw new Error(`No migration path found from ${fromVersion} to ${toVersion}`);
|
|
239
|
+
}
|
|
240
|
+
findRollbackPath(fromVersion, toVersion) {
|
|
241
|
+
// For rollback, we need migrations whose rollback() we can call
|
|
242
|
+
// We traverse forward migrations in reverse
|
|
243
|
+
const queue = [
|
|
244
|
+
{ version: fromVersion, path: [] },
|
|
245
|
+
];
|
|
246
|
+
const visited = new Set();
|
|
247
|
+
visited.add(fromVersion);
|
|
248
|
+
while (queue.length > 0) {
|
|
249
|
+
const { version, path } = queue.shift();
|
|
250
|
+
// Find migrations that end at this version and have rollback
|
|
251
|
+
for (const m of this.migrations) {
|
|
252
|
+
if (m.toVersion === version && m.rollback && !visited.has(m.fromVersion)) {
|
|
253
|
+
const newPath = [...path, m];
|
|
254
|
+
if (m.fromVersion === toVersion) {
|
|
255
|
+
return newPath;
|
|
256
|
+
}
|
|
257
|
+
// Only follow edges that move toward the target (downward)
|
|
258
|
+
if (compareSemVer(m.fromVersion, toVersion) >= 0) {
|
|
259
|
+
visited.add(m.fromVersion);
|
|
260
|
+
queue.push({ version: m.fromVersion, path: newPath });
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
throw new Error(`No rollback path found from ${fromVersion} to ${toVersion}`);
|
|
266
|
+
}
|
|
267
|
+
getSortedMigrations(ascending) {
|
|
268
|
+
return [...this.migrations].sort((a, b) => ascending
|
|
269
|
+
? compareSemVer(a.fromVersion, b.fromVersion)
|
|
270
|
+
: compareSemVer(b.fromVersion, a.fromVersion));
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/config/migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Concrete Migration Definitions
|
|
3
|
+
*
|
|
4
|
+
* Registers real migration functions for known Squad version transitions.
|
|
5
|
+
* Each migration transforms a config object from the old shape to the new.
|
|
6
|
+
*
|
|
7
|
+
* @module config/migrations
|
|
8
|
+
*/
|
|
9
|
+
import { MigrationRegistry, type Migration } from '../migration.js';
|
|
10
|
+
/**
|
|
11
|
+
* Migrate from 0.4.x to 0.5.0.
|
|
12
|
+
*
|
|
13
|
+
* Changes:
|
|
14
|
+
* - Renames `.ai-team/` directory references to `.squad/`
|
|
15
|
+
* - Converts team.md-style flat config to squad.config.ts typed format
|
|
16
|
+
* - Normalises agent names to lowercase with `@` prefix
|
|
17
|
+
*/
|
|
18
|
+
export declare const migration_0_4_to_0_5: Migration;
|
|
19
|
+
/**
|
|
20
|
+
* Migrate from 0.5.0 to 0.6.0.
|
|
21
|
+
*
|
|
22
|
+
* Changes:
|
|
23
|
+
* - Converts simple routing rules to typed RoutingConfig with patterns and tiers
|
|
24
|
+
* - Adds model registry with tier system (premium/standard/fast)
|
|
25
|
+
* - Adds agent source configuration for pluggable discovery
|
|
26
|
+
*/
|
|
27
|
+
export declare const migration_0_5_to_0_6: Migration;
|
|
28
|
+
/**
|
|
29
|
+
* Returns all registered concrete migrations in version order.
|
|
30
|
+
*/
|
|
31
|
+
export declare function getRegisteredMigrations(): ReadonlyArray<Migration>;
|
|
32
|
+
/**
|
|
33
|
+
* Creates a MigrationRegistry pre-loaded with all known migrations.
|
|
34
|
+
*/
|
|
35
|
+
export declare function createDefaultRegistry(): MigrationRegistry;
|
|
36
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,iBAAiB,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAMpE;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAuElC,CAAC;AAMF;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,EAAE,SA0GlC,CAAC;AAMF;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,aAAa,CAAC,SAAS,CAAC,CAElE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,iBAAiB,CAMzD"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Concrete Migration Definitions
|
|
3
|
+
*
|
|
4
|
+
* Registers real migration functions for known Squad version transitions.
|
|
5
|
+
* Each migration transforms a config object from the old shape to the new.
|
|
6
|
+
*
|
|
7
|
+
* @module config/migrations
|
|
8
|
+
*/
|
|
9
|
+
import { MigrationRegistry } from '../migration.js';
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// 0.4.x → 0.5.x: Directory rename + team.md → squad.config.ts
|
|
12
|
+
// ============================================================================
|
|
13
|
+
/**
|
|
14
|
+
* Migrate from 0.4.x to 0.5.0.
|
|
15
|
+
*
|
|
16
|
+
* Changes:
|
|
17
|
+
* - Renames `.ai-team/` directory references to `.squad/`
|
|
18
|
+
* - Converts team.md-style flat config to squad.config.ts typed format
|
|
19
|
+
* - Normalises agent names to lowercase with `@` prefix
|
|
20
|
+
*/
|
|
21
|
+
export const migration_0_4_to_0_5 = {
|
|
22
|
+
fromVersion: '0.4.0',
|
|
23
|
+
toVersion: '0.5.0',
|
|
24
|
+
description: '.ai-team/ → .squad/ directory rename, team.md → squad.config.ts',
|
|
25
|
+
migrate(config) {
|
|
26
|
+
const result = { ...config };
|
|
27
|
+
// Update version
|
|
28
|
+
result.version = '0.5.0';
|
|
29
|
+
// Rename directory references
|
|
30
|
+
if (typeof result.configDir === 'string') {
|
|
31
|
+
result.configDir = result.configDir.replace(/\.ai-team/g, '.squad');
|
|
32
|
+
}
|
|
33
|
+
// Migrate team format: flat team.md → typed agents array
|
|
34
|
+
if (result.teamMembers && Array.isArray(result.teamMembers)) {
|
|
35
|
+
const agents = result.teamMembers.map((member) => ({
|
|
36
|
+
name: normaliseAgentName(String(member.name ?? '')),
|
|
37
|
+
role: String(member.role ?? 'agent'),
|
|
38
|
+
displayName: member.displayName ?? member.name,
|
|
39
|
+
model: member.model,
|
|
40
|
+
tools: member.tools,
|
|
41
|
+
status: 'active',
|
|
42
|
+
}));
|
|
43
|
+
result.agents = agents;
|
|
44
|
+
delete result.teamMembers;
|
|
45
|
+
}
|
|
46
|
+
// Rename any path references
|
|
47
|
+
if (typeof result.agentDir === 'string') {
|
|
48
|
+
result.agentDir = result.agentDir.replace(/\.ai-team/g, '.squad');
|
|
49
|
+
}
|
|
50
|
+
// Mark config format
|
|
51
|
+
result.configFormat = 'squad.config.ts';
|
|
52
|
+
return result;
|
|
53
|
+
},
|
|
54
|
+
rollback(config) {
|
|
55
|
+
const result = { ...config };
|
|
56
|
+
result.version = '0.4.0';
|
|
57
|
+
// Reverse directory references
|
|
58
|
+
if (typeof result.configDir === 'string') {
|
|
59
|
+
result.configDir = result.configDir.replace(/\.squad/g, '.ai-team');
|
|
60
|
+
}
|
|
61
|
+
// Reverse agents array → teamMembers
|
|
62
|
+
if (result.agents && Array.isArray(result.agents)) {
|
|
63
|
+
const teamMembers = result.agents.map((agent) => ({
|
|
64
|
+
name: String(agent.displayName ?? agent.name ?? '').replace(/^@/, ''),
|
|
65
|
+
role: agent.role,
|
|
66
|
+
displayName: agent.displayName,
|
|
67
|
+
model: agent.model,
|
|
68
|
+
tools: agent.tools,
|
|
69
|
+
}));
|
|
70
|
+
result.teamMembers = teamMembers;
|
|
71
|
+
delete result.agents;
|
|
72
|
+
}
|
|
73
|
+
if (typeof result.agentDir === 'string') {
|
|
74
|
+
result.agentDir = result.agentDir.replace(/\.squad/g, '.ai-team');
|
|
75
|
+
}
|
|
76
|
+
delete result.configFormat;
|
|
77
|
+
return result;
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
// ============================================================================
|
|
81
|
+
// 0.5.x → 0.6.x: Typed routing, model registry, agent sources
|
|
82
|
+
// ============================================================================
|
|
83
|
+
/**
|
|
84
|
+
* Migrate from 0.5.0 to 0.6.0.
|
|
85
|
+
*
|
|
86
|
+
* Changes:
|
|
87
|
+
* - Converts simple routing rules to typed RoutingConfig with patterns and tiers
|
|
88
|
+
* - Adds model registry with tier system (premium/standard/fast)
|
|
89
|
+
* - Adds agent source configuration for pluggable discovery
|
|
90
|
+
*/
|
|
91
|
+
export const migration_0_5_to_0_6 = {
|
|
92
|
+
fromVersion: '0.5.0',
|
|
93
|
+
toVersion: '0.6.0',
|
|
94
|
+
description: 'Add typed routing, model registry, agent sources',
|
|
95
|
+
migrate(config) {
|
|
96
|
+
const result = { ...config };
|
|
97
|
+
result.version = '0.6.0';
|
|
98
|
+
// Upgrade routing: simple string rules → typed RoutingRule objects
|
|
99
|
+
if (result.routing && typeof result.routing === 'object') {
|
|
100
|
+
const routing = result.routing;
|
|
101
|
+
if (Array.isArray(routing.rules)) {
|
|
102
|
+
routing.rules = routing.rules.map((rule) => {
|
|
103
|
+
if (typeof rule === 'string') {
|
|
104
|
+
// Simple string format "pattern → agent" → typed rule
|
|
105
|
+
const [pattern, agent] = rule.split('→').map((s) => s.trim());
|
|
106
|
+
return {
|
|
107
|
+
pattern: pattern ?? rule,
|
|
108
|
+
agents: agent ? [normaliseAgentName(agent)] : [],
|
|
109
|
+
tier: 'standard',
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
// Already an object — ensure it has a tier
|
|
113
|
+
const ruleObj = rule;
|
|
114
|
+
if (!ruleObj.tier) {
|
|
115
|
+
ruleObj.tier = 'standard';
|
|
116
|
+
}
|
|
117
|
+
return ruleObj;
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
if (!routing.fallbackBehavior) {
|
|
121
|
+
routing.fallbackBehavior = 'coordinator';
|
|
122
|
+
}
|
|
123
|
+
result.routing = routing;
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
result.routing = {
|
|
127
|
+
rules: [],
|
|
128
|
+
fallbackBehavior: 'coordinator',
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
// Add model registry with tier system
|
|
132
|
+
if (!result.models || typeof result.models !== 'object') {
|
|
133
|
+
result.models = {
|
|
134
|
+
default: 'claude-sonnet-4',
|
|
135
|
+
defaultTier: 'standard',
|
|
136
|
+
tiers: {
|
|
137
|
+
premium: ['claude-opus-4', 'claude-opus-4.5'],
|
|
138
|
+
standard: ['claude-sonnet-4', 'claude-sonnet-4.5', 'gpt-5.1-codex'],
|
|
139
|
+
fast: ['claude-haiku-4.5', 'gpt-5.1-codex-mini'],
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
const models = result.models;
|
|
145
|
+
if (!models.defaultTier) {
|
|
146
|
+
models.defaultTier = 'standard';
|
|
147
|
+
}
|
|
148
|
+
if (!models.tiers) {
|
|
149
|
+
models.tiers = {
|
|
150
|
+
premium: ['claude-opus-4', 'claude-opus-4.5'],
|
|
151
|
+
standard: ['claude-sonnet-4', 'claude-sonnet-4.5', 'gpt-5.1-codex'],
|
|
152
|
+
fast: ['claude-haiku-4.5', 'gpt-5.1-codex-mini'],
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Add agent sources configuration
|
|
157
|
+
if (!result.agentSources) {
|
|
158
|
+
result.agentSources = [{ type: 'local', name: 'local', path: '.squad/agents' }];
|
|
159
|
+
}
|
|
160
|
+
return result;
|
|
161
|
+
},
|
|
162
|
+
rollback(config) {
|
|
163
|
+
const result = { ...config };
|
|
164
|
+
result.version = '0.5.0';
|
|
165
|
+
// Downgrade typed routing rules back to simple format
|
|
166
|
+
if (result.routing && typeof result.routing === 'object') {
|
|
167
|
+
const routing = result.routing;
|
|
168
|
+
if (Array.isArray(routing.rules)) {
|
|
169
|
+
routing.rules = routing.rules.map((rule) => {
|
|
170
|
+
if (rule.pattern && Array.isArray(rule.agents) && rule.agents.length > 0) {
|
|
171
|
+
return `${rule.pattern} → ${rule.agents[0]}`;
|
|
172
|
+
}
|
|
173
|
+
return rule.pattern ?? rule;
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
delete routing.fallbackBehavior;
|
|
177
|
+
result.routing = routing;
|
|
178
|
+
}
|
|
179
|
+
// Remove model tier system
|
|
180
|
+
if (result.models && typeof result.models === 'object') {
|
|
181
|
+
const models = result.models;
|
|
182
|
+
delete models.defaultTier;
|
|
183
|
+
delete models.tiers;
|
|
184
|
+
}
|
|
185
|
+
// Remove agent sources
|
|
186
|
+
delete result.agentSources;
|
|
187
|
+
return result;
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
// ============================================================================
|
|
191
|
+
// Public API
|
|
192
|
+
// ============================================================================
|
|
193
|
+
/**
|
|
194
|
+
* Returns all registered concrete migrations in version order.
|
|
195
|
+
*/
|
|
196
|
+
export function getRegisteredMigrations() {
|
|
197
|
+
return [migration_0_4_to_0_5, migration_0_5_to_0_6];
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Creates a MigrationRegistry pre-loaded with all known migrations.
|
|
201
|
+
*/
|
|
202
|
+
export function createDefaultRegistry() {
|
|
203
|
+
const registry = new MigrationRegistry();
|
|
204
|
+
for (const migration of getRegisteredMigrations()) {
|
|
205
|
+
registry.register(migration);
|
|
206
|
+
}
|
|
207
|
+
return registry;
|
|
208
|
+
}
|
|
209
|
+
// ============================================================================
|
|
210
|
+
// Helpers
|
|
211
|
+
// ============================================================================
|
|
212
|
+
function normaliseAgentName(name) {
|
|
213
|
+
const lower = name.toLowerCase().trim();
|
|
214
|
+
return lower.startsWith('@') ? lower : `@${lower}`;
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=index.js.map
|