@bradygaster/squad-sdk 0.6.2 → 0.8.0

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.
Files changed (306) hide show
  1. package/README.md +296 -296
  2. package/dist/adapter/client.d.ts +225 -0
  3. package/dist/adapter/client.d.ts.map +1 -0
  4. package/dist/adapter/client.js +397 -0
  5. package/dist/adapter/client.js.map +1 -0
  6. package/dist/adapter/errors.d.ts +260 -0
  7. package/dist/adapter/errors.d.ts.map +1 -0
  8. package/dist/adapter/errors.js +362 -0
  9. package/dist/adapter/errors.js.map +1 -0
  10. package/dist/adapter/types.d.ts +779 -0
  11. package/dist/adapter/types.d.ts.map +1 -0
  12. package/dist/adapter/types.js +11 -0
  13. package/dist/adapter/types.js.map +1 -0
  14. package/dist/agents/charter-compiler.d.ts +102 -0
  15. package/dist/agents/charter-compiler.d.ts.map +1 -0
  16. package/dist/agents/charter-compiler.js +157 -0
  17. package/dist/agents/charter-compiler.js.map +1 -0
  18. package/dist/agents/history-shadow.d.ts +80 -0
  19. package/dist/agents/history-shadow.d.ts.map +1 -0
  20. package/dist/agents/history-shadow.js +239 -0
  21. package/dist/agents/history-shadow.js.map +1 -0
  22. package/dist/agents/index.d.ts +68 -0
  23. package/dist/agents/index.d.ts.map +1 -0
  24. package/dist/agents/index.js +74 -0
  25. package/dist/agents/index.js.map +1 -0
  26. package/dist/agents/lifecycle.d.ts +138 -0
  27. package/dist/agents/lifecycle.d.ts.map +1 -0
  28. package/dist/agents/lifecycle.js +258 -0
  29. package/dist/agents/lifecycle.js.map +1 -0
  30. package/dist/agents/model-selector.d.ts +80 -0
  31. package/dist/agents/model-selector.d.ts.map +1 -0
  32. package/dist/agents/model-selector.js +198 -0
  33. package/dist/agents/model-selector.js.map +1 -0
  34. package/dist/agents/onboarding.d.ts +65 -0
  35. package/dist/agents/onboarding.d.ts.map +1 -0
  36. package/dist/agents/onboarding.js +373 -0
  37. package/dist/agents/onboarding.js.map +1 -0
  38. package/dist/build/bundle.d.ts +32 -0
  39. package/dist/build/bundle.d.ts.map +1 -0
  40. package/dist/build/bundle.js +97 -0
  41. package/dist/build/bundle.js.map +1 -0
  42. package/dist/build/ci-pipeline.d.ts +51 -0
  43. package/dist/build/ci-pipeline.d.ts.map +1 -0
  44. package/dist/build/ci-pipeline.js +180 -0
  45. package/dist/build/ci-pipeline.js.map +1 -0
  46. package/dist/build/github-dist.d.ts +37 -0
  47. package/dist/build/github-dist.d.ts.map +1 -0
  48. package/dist/build/github-dist.js +117 -0
  49. package/dist/build/github-dist.js.map +1 -0
  50. package/dist/build/index.d.ts +11 -0
  51. package/dist/build/index.d.ts.map +1 -0
  52. package/dist/build/index.js +11 -0
  53. package/dist/build/index.js.map +1 -0
  54. package/dist/build/install-migration.d.ts +28 -0
  55. package/dist/build/install-migration.d.ts.map +1 -0
  56. package/dist/build/install-migration.js +103 -0
  57. package/dist/build/install-migration.js.map +1 -0
  58. package/dist/build/npm-package.d.ts +54 -0
  59. package/dist/build/npm-package.d.ts.map +1 -0
  60. package/dist/build/npm-package.js +128 -0
  61. package/dist/build/npm-package.js.map +1 -0
  62. package/dist/build/release.d.ts +108 -0
  63. package/dist/build/release.d.ts.map +1 -0
  64. package/dist/build/release.js +295 -0
  65. package/dist/build/release.js.map +1 -0
  66. package/dist/build/versioning.d.ts +38 -0
  67. package/dist/build/versioning.d.ts.map +1 -0
  68. package/dist/build/versioning.js +113 -0
  69. package/dist/build/versioning.js.map +1 -0
  70. package/dist/casting/casting-engine.d.ts +60 -0
  71. package/dist/casting/casting-engine.d.ts.map +1 -0
  72. package/dist/casting/casting-engine.js +223 -0
  73. package/dist/casting/casting-engine.js.map +1 -0
  74. package/dist/casting/casting-history.d.ts +54 -0
  75. package/dist/casting/casting-history.d.ts.map +1 -0
  76. package/dist/casting/casting-history.js +63 -0
  77. package/dist/casting/casting-history.js.map +1 -0
  78. package/dist/casting/index.d.ts +46 -0
  79. package/dist/casting/index.d.ts.map +1 -0
  80. package/dist/casting/index.js +37 -0
  81. package/dist/casting/index.js.map +1 -0
  82. package/dist/client/event-bus.d.ts +29 -0
  83. package/dist/client/event-bus.d.ts.map +1 -0
  84. package/dist/client/event-bus.js +53 -0
  85. package/dist/client/event-bus.js.map +1 -0
  86. package/dist/client/index.d.ts +100 -0
  87. package/dist/client/index.d.ts.map +1 -0
  88. package/dist/client/index.js +170 -0
  89. package/dist/client/index.js.map +1 -0
  90. package/dist/client/session-pool.d.ts +66 -0
  91. package/dist/client/session-pool.d.ts.map +1 -0
  92. package/dist/client/session-pool.js +145 -0
  93. package/dist/client/session-pool.js.map +1 -0
  94. package/dist/config/agent-doc.d.ts +43 -0
  95. package/dist/config/agent-doc.d.ts.map +1 -0
  96. package/dist/config/agent-doc.js +158 -0
  97. package/dist/config/agent-doc.js.map +1 -0
  98. package/dist/config/agent-source.d.ts +95 -0
  99. package/dist/config/agent-source.d.ts.map +1 -0
  100. package/dist/config/agent-source.js +274 -0
  101. package/dist/config/agent-source.js.map +1 -0
  102. package/dist/config/doc-sync.d.ts +66 -0
  103. package/dist/config/doc-sync.d.ts.map +1 -0
  104. package/dist/config/doc-sync.js +270 -0
  105. package/dist/config/doc-sync.js.map +1 -0
  106. package/dist/config/feature-audit.d.ts +49 -0
  107. package/dist/config/feature-audit.d.ts.map +1 -0
  108. package/dist/config/feature-audit.js +148 -0
  109. package/dist/config/feature-audit.js.map +1 -0
  110. package/dist/config/index.d.ts +15 -0
  111. package/dist/config/index.d.ts.map +1 -0
  112. package/dist/config/index.js +15 -0
  113. package/dist/config/index.js.map +1 -0
  114. package/dist/config/init.d.ts +61 -0
  115. package/dist/config/init.d.ts.map +1 -0
  116. package/dist/config/init.js +369 -0
  117. package/dist/config/init.js.map +1 -0
  118. package/dist/config/legacy-fallback.d.ts +83 -0
  119. package/dist/config/legacy-fallback.d.ts.map +1 -0
  120. package/dist/config/legacy-fallback.js +212 -0
  121. package/dist/config/legacy-fallback.js.map +1 -0
  122. package/dist/config/markdown-migration.d.ts +157 -0
  123. package/dist/config/markdown-migration.d.ts.map +1 -0
  124. package/dist/config/markdown-migration.js +434 -0
  125. package/dist/config/markdown-migration.js.map +1 -0
  126. package/dist/config/migration.d.ts +123 -0
  127. package/dist/config/migration.d.ts.map +1 -0
  128. package/dist/config/migration.js +273 -0
  129. package/dist/config/migration.js.map +1 -0
  130. package/dist/config/migrations/index.d.ts +36 -0
  131. package/dist/config/migrations/index.d.ts.map +1 -0
  132. package/dist/config/migrations/index.js +216 -0
  133. package/dist/config/migrations/index.js.map +1 -0
  134. package/dist/config/models.d.ts +134 -0
  135. package/dist/config/models.d.ts.map +1 -0
  136. package/dist/config/models.js +354 -0
  137. package/dist/config/models.js.map +1 -0
  138. package/dist/config/routing.d.ts +118 -0
  139. package/dist/config/routing.d.ts.map +1 -0
  140. package/dist/config/routing.js +247 -0
  141. package/dist/config/routing.js.map +1 -0
  142. package/dist/config/schema.d.ts +72 -0
  143. package/dist/config/schema.d.ts.map +1 -0
  144. package/dist/config/schema.js +63 -0
  145. package/dist/config/schema.js.map +1 -0
  146. package/dist/coordinator/coordinator.d.ts +82 -0
  147. package/dist/coordinator/coordinator.d.ts.map +1 -0
  148. package/dist/coordinator/coordinator.js +174 -0
  149. package/dist/coordinator/coordinator.js.map +1 -0
  150. package/dist/coordinator/direct-response.d.ts +83 -0
  151. package/dist/coordinator/direct-response.d.ts.map +1 -0
  152. package/dist/coordinator/direct-response.js +187 -0
  153. package/dist/coordinator/direct-response.js.map +1 -0
  154. package/dist/coordinator/fan-out.d.ts +83 -0
  155. package/dist/coordinator/fan-out.d.ts.map +1 -0
  156. package/dist/coordinator/fan-out.js +161 -0
  157. package/dist/coordinator/fan-out.js.map +1 -0
  158. package/dist/coordinator/index.d.ts +47 -0
  159. package/dist/coordinator/index.d.ts.map +1 -0
  160. package/dist/coordinator/index.js +54 -0
  161. package/dist/coordinator/index.js.map +1 -0
  162. package/dist/coordinator/response-tiers.d.ts +49 -0
  163. package/dist/coordinator/response-tiers.d.ts.map +1 -0
  164. package/dist/coordinator/response-tiers.js +149 -0
  165. package/dist/coordinator/response-tiers.js.map +1 -0
  166. package/dist/hooks/index.d.ts +103 -0
  167. package/dist/hooks/index.d.ts.map +1 -0
  168. package/dist/hooks/index.js +279 -0
  169. package/dist/hooks/index.js.map +1 -0
  170. package/dist/index.d.ts +24 -1
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +23 -3
  173. package/dist/index.js.map +1 -1
  174. package/dist/marketplace/backend.d.ts +35 -0
  175. package/dist/marketplace/backend.d.ts.map +1 -0
  176. package/dist/marketplace/backend.js +99 -0
  177. package/dist/marketplace/backend.js.map +1 -0
  178. package/dist/marketplace/browser.d.ts +33 -0
  179. package/dist/marketplace/browser.d.ts.map +1 -0
  180. package/dist/marketplace/browser.js +97 -0
  181. package/dist/marketplace/browser.js.map +1 -0
  182. package/dist/marketplace/extension-adapter.d.ts +51 -0
  183. package/dist/marketplace/extension-adapter.d.ts.map +1 -0
  184. package/dist/marketplace/extension-adapter.js +81 -0
  185. package/dist/marketplace/extension-adapter.js.map +1 -0
  186. package/dist/marketplace/index.d.ts +51 -0
  187. package/dist/marketplace/index.d.ts.map +1 -0
  188. package/dist/marketplace/index.js +108 -0
  189. package/dist/marketplace/index.js.map +1 -0
  190. package/dist/marketplace/packaging.d.ts +25 -0
  191. package/dist/marketplace/packaging.d.ts.map +1 -0
  192. package/dist/marketplace/packaging.js +117 -0
  193. package/dist/marketplace/packaging.js.map +1 -0
  194. package/dist/marketplace/schema.d.ts +50 -0
  195. package/dist/marketplace/schema.d.ts.map +1 -0
  196. package/dist/marketplace/schema.js +120 -0
  197. package/dist/marketplace/schema.js.map +1 -0
  198. package/dist/marketplace/security.d.ts +26 -0
  199. package/dist/marketplace/security.d.ts.map +1 -0
  200. package/dist/marketplace/security.js +199 -0
  201. package/dist/marketplace/security.js.map +1 -0
  202. package/dist/parsers.d.ts +15 -0
  203. package/dist/parsers.d.ts.map +1 -0
  204. package/dist/parsers.js +15 -0
  205. package/dist/parsers.js.map +1 -0
  206. package/dist/ralph/index.d.ts +56 -0
  207. package/dist/ralph/index.d.ts.map +1 -0
  208. package/dist/ralph/index.js +61 -0
  209. package/dist/ralph/index.js.map +1 -0
  210. package/dist/resolution.d.ts +47 -0
  211. package/dist/resolution.d.ts.map +1 -0
  212. package/dist/resolution.js +106 -0
  213. package/dist/resolution.js.map +1 -0
  214. package/dist/runtime/benchmarks.d.ts +121 -0
  215. package/dist/runtime/benchmarks.d.ts.map +1 -0
  216. package/dist/runtime/benchmarks.js +251 -0
  217. package/dist/runtime/benchmarks.js.map +1 -0
  218. package/dist/runtime/config.d.ts +313 -0
  219. package/dist/runtime/config.d.ts.map +1 -0
  220. package/dist/runtime/config.js +466 -0
  221. package/dist/runtime/config.js.map +1 -0
  222. package/dist/runtime/cost-tracker.d.ts +73 -0
  223. package/dist/runtime/cost-tracker.d.ts.map +1 -0
  224. package/dist/runtime/cost-tracker.js +157 -0
  225. package/dist/runtime/cost-tracker.js.map +1 -0
  226. package/dist/runtime/event-bus.d.ts +190 -0
  227. package/dist/runtime/event-bus.d.ts.map +1 -0
  228. package/dist/runtime/event-bus.js +218 -0
  229. package/dist/runtime/event-bus.js.map +1 -0
  230. package/dist/runtime/health.d.ts +66 -0
  231. package/dist/runtime/health.d.ts.map +1 -0
  232. package/dist/runtime/health.js +111 -0
  233. package/dist/runtime/health.js.map +1 -0
  234. package/dist/runtime/i18n.d.ts +54 -0
  235. package/dist/runtime/i18n.d.ts.map +1 -0
  236. package/dist/runtime/i18n.js +126 -0
  237. package/dist/runtime/i18n.js.map +1 -0
  238. package/dist/runtime/offline.d.ts +64 -0
  239. package/dist/runtime/offline.d.ts.map +1 -0
  240. package/dist/runtime/offline.js +108 -0
  241. package/dist/runtime/offline.js.map +1 -0
  242. package/dist/runtime/streaming.d.ts +97 -0
  243. package/dist/runtime/streaming.d.ts.map +1 -0
  244. package/dist/runtime/streaming.js +156 -0
  245. package/dist/runtime/streaming.js.map +1 -0
  246. package/dist/runtime/telemetry.d.ts +82 -0
  247. package/dist/runtime/telemetry.d.ts.map +1 -0
  248. package/dist/runtime/telemetry.js +120 -0
  249. package/dist/runtime/telemetry.js.map +1 -0
  250. package/dist/sharing/agent-repo.d.ts +33 -0
  251. package/dist/sharing/agent-repo.d.ts.map +1 -0
  252. package/dist/sharing/agent-repo.js +79 -0
  253. package/dist/sharing/agent-repo.js.map +1 -0
  254. package/dist/sharing/cache.d.ts +36 -0
  255. package/dist/sharing/cache.d.ts.map +1 -0
  256. package/dist/sharing/cache.js +85 -0
  257. package/dist/sharing/cache.js.map +1 -0
  258. package/dist/sharing/conflicts.d.ts +32 -0
  259. package/dist/sharing/conflicts.d.ts.map +1 -0
  260. package/dist/sharing/conflicts.js +121 -0
  261. package/dist/sharing/conflicts.js.map +1 -0
  262. package/dist/sharing/export.d.ts +50 -0
  263. package/dist/sharing/export.d.ts.map +1 -0
  264. package/dist/sharing/export.js +156 -0
  265. package/dist/sharing/export.js.map +1 -0
  266. package/dist/sharing/history-split.d.ts +34 -0
  267. package/dist/sharing/history-split.d.ts.map +1 -0
  268. package/dist/sharing/history-split.js +101 -0
  269. package/dist/sharing/history-split.js.map +1 -0
  270. package/dist/sharing/import.d.ts +37 -0
  271. package/dist/sharing/import.d.ts.map +1 -0
  272. package/dist/sharing/import.js +138 -0
  273. package/dist/sharing/import.js.map +1 -0
  274. package/dist/sharing/index.d.ts +11 -0
  275. package/dist/sharing/index.d.ts.map +1 -0
  276. package/dist/sharing/index.js +11 -0
  277. package/dist/sharing/index.js.map +1 -0
  278. package/dist/sharing/versioning.d.ts +32 -0
  279. package/dist/sharing/versioning.d.ts.map +1 -0
  280. package/dist/sharing/versioning.js +64 -0
  281. package/dist/sharing/versioning.js.map +1 -0
  282. package/dist/skills/index.d.ts +49 -0
  283. package/dist/skills/index.d.ts.map +1 -0
  284. package/dist/skills/index.js +85 -0
  285. package/dist/skills/index.js.map +1 -0
  286. package/dist/skills/skill-loader.d.ts +56 -0
  287. package/dist/skills/skill-loader.d.ts.map +1 -0
  288. package/dist/skills/skill-loader.js +106 -0
  289. package/dist/skills/skill-loader.js.map +1 -0
  290. package/dist/skills/skill-source.d.ts +63 -0
  291. package/dist/skills/skill-source.d.ts.map +1 -0
  292. package/dist/skills/skill-source.js +199 -0
  293. package/dist/skills/skill-source.js.map +1 -0
  294. package/dist/tools/index.d.ts +87 -0
  295. package/dist/tools/index.d.ts.map +1 -0
  296. package/dist/tools/index.js +419 -0
  297. package/dist/tools/index.js.map +1 -0
  298. package/dist/types.d.ts +43 -0
  299. package/dist/types.d.ts.map +1 -0
  300. package/dist/types.js +8 -0
  301. package/dist/types.js.map +1 -0
  302. package/dist/utils/normalize-eol.d.ts +6 -0
  303. package/dist/utils/normalize-eol.d.ts.map +1 -0
  304. package/dist/utils/normalize-eol.js +8 -0
  305. package/dist/utils/normalize-eol.js.map +1 -0
  306. package/package.json +115 -39
@@ -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