@madebywild/agent-harness-framework 0.9.1

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 (185) hide show
  1. package/dist/cli/adapters/commander.d.ts +14 -0
  2. package/dist/cli/adapters/commander.d.ts.map +1 -0
  3. package/dist/cli/adapters/commander.js +348 -0
  4. package/dist/cli/adapters/commander.js.map +1 -0
  5. package/dist/cli/adapters/interactive.d.ts +11 -0
  6. package/dist/cli/adapters/interactive.d.ts.map +1 -0
  7. package/dist/cli/adapters/interactive.js +375 -0
  8. package/dist/cli/adapters/interactive.js.map +1 -0
  9. package/dist/cli/command-registry.d.ts +27 -0
  10. package/dist/cli/command-registry.d.ts.map +1 -0
  11. package/dist/cli/command-registry.js +470 -0
  12. package/dist/cli/command-registry.js.map +1 -0
  13. package/dist/cli/contracts.d.ts +122 -0
  14. package/dist/cli/contracts.d.ts.map +1 -0
  15. package/dist/cli/contracts.js +2 -0
  16. package/dist/cli/contracts.js.map +1 -0
  17. package/dist/cli/handlers/apply.d.ts +3 -0
  18. package/dist/cli/handlers/apply.d.ts.map +1 -0
  19. package/dist/cli/handlers/apply.js +17 -0
  20. package/dist/cli/handlers/apply.js.map +1 -0
  21. package/dist/cli/handlers/doctor.d.ts +3 -0
  22. package/dist/cli/handlers/doctor.d.ts.map +1 -0
  23. package/dist/cli/handlers/doctor.js +16 -0
  24. package/dist/cli/handlers/doctor.js.map +1 -0
  25. package/dist/cli/handlers/entities.d.ts +22 -0
  26. package/dist/cli/handlers/entities.d.ts.map +1 -0
  27. package/dist/cli/handlers/entities.js +92 -0
  28. package/dist/cli/handlers/entities.js.map +1 -0
  29. package/dist/cli/handlers/init.d.ts +5 -0
  30. package/dist/cli/handlers/init.d.ts.map +1 -0
  31. package/dist/cli/handlers/init.js +17 -0
  32. package/dist/cli/handlers/init.js.map +1 -0
  33. package/dist/cli/handlers/migrate.d.ts +6 -0
  34. package/dist/cli/handlers/migrate.d.ts.map +1 -0
  35. package/dist/cli/handlers/migrate.js +22 -0
  36. package/dist/cli/handlers/migrate.js.map +1 -0
  37. package/dist/cli/handlers/plan.d.ts +5 -0
  38. package/dist/cli/handlers/plan.d.ts.map +1 -0
  39. package/dist/cli/handlers/plan.js +18 -0
  40. package/dist/cli/handlers/plan.js.map +1 -0
  41. package/dist/cli/handlers/provider.d.ts +8 -0
  42. package/dist/cli/handlers/provider.d.ts.map +1 -0
  43. package/dist/cli/handlers/provider.js +37 -0
  44. package/dist/cli/handlers/provider.js.map +1 -0
  45. package/dist/cli/handlers/registry.d.ts +27 -0
  46. package/dist/cli/handlers/registry.d.ts.map +1 -0
  47. package/dist/cli/handlers/registry.js +133 -0
  48. package/dist/cli/handlers/registry.js.map +1 -0
  49. package/dist/cli/handlers/validate.d.ts +3 -0
  50. package/dist/cli/handlers/validate.d.ts.map +1 -0
  51. package/dist/cli/handlers/validate.js +16 -0
  52. package/dist/cli/handlers/validate.js.map +1 -0
  53. package/dist/cli/handlers/watch.d.ts +6 -0
  54. package/dist/cli/handlers/watch.d.ts.map +1 -0
  55. package/dist/cli/handlers/watch.js +46 -0
  56. package/dist/cli/handlers/watch.js.map +1 -0
  57. package/dist/cli/main.d.ts +6 -0
  58. package/dist/cli/main.d.ts.map +1 -0
  59. package/dist/cli/main.js +90 -0
  60. package/dist/cli/main.js.map +1 -0
  61. package/dist/cli/renderers/json.d.ts +10 -0
  62. package/dist/cli/renderers/json.d.ts.map +1 -0
  63. package/dist/cli/renderers/json.js +17 -0
  64. package/dist/cli/renderers/json.js.map +1 -0
  65. package/dist/cli/renderers/text.d.ts +3 -0
  66. package/dist/cli/renderers/text.d.ts.map +1 -0
  67. package/dist/cli/renderers/text.js +155 -0
  68. package/dist/cli/renderers/text.js.map +1 -0
  69. package/dist/cli/utils/runtime.d.ts +26 -0
  70. package/dist/cli/utils/runtime.d.ts.map +1 -0
  71. package/dist/cli/utils/runtime.js +158 -0
  72. package/dist/cli/utils/runtime.js.map +1 -0
  73. package/dist/cli.d.ts +3 -0
  74. package/dist/cli.d.ts.map +1 -0
  75. package/dist/cli.js +14 -0
  76. package/dist/cli.js.map +1 -0
  77. package/dist/engine/entities.d.ts +33 -0
  78. package/dist/engine/entities.d.ts.map +1 -0
  79. package/dist/engine/entities.js +461 -0
  80. package/dist/engine/entities.js.map +1 -0
  81. package/dist/engine/state.d.ts +19 -0
  82. package/dist/engine/state.d.ts.map +1 -0
  83. package/dist/engine/state.js +70 -0
  84. package/dist/engine/state.js.map +1 -0
  85. package/dist/engine/utils.d.ts +28 -0
  86. package/dist/engine/utils.d.ts.map +1 -0
  87. package/dist/engine/utils.js +157 -0
  88. package/dist/engine/utils.js.map +1 -0
  89. package/dist/engine.d.ts +59 -0
  90. package/dist/engine.d.ts.map +1 -0
  91. package/dist/engine.js +398 -0
  92. package/dist/engine.js.map +1 -0
  93. package/dist/entity-registries.d.ts +40 -0
  94. package/dist/entity-registries.d.ts.map +1 -0
  95. package/dist/entity-registries.js +257 -0
  96. package/dist/entity-registries.js.map +1 -0
  97. package/dist/index.d.ts +19 -0
  98. package/dist/index.d.ts.map +1 -0
  99. package/dist/index.js +22 -0
  100. package/dist/index.js.map +1 -0
  101. package/dist/loader.d.ts +6 -0
  102. package/dist/loader.d.ts.map +1 -0
  103. package/dist/loader.js +552 -0
  104. package/dist/loader.js.map +1 -0
  105. package/dist/paths.d.ts +23 -0
  106. package/dist/paths.d.ts.map +1 -0
  107. package/dist/paths.js +40 -0
  108. package/dist/paths.js.map +1 -0
  109. package/dist/planner.d.ts +5 -0
  110. package/dist/planner.d.ts.map +1 -0
  111. package/dist/planner.js +316 -0
  112. package/dist/planner.js.map +1 -0
  113. package/dist/provider-adapters/claude.d.ts +4 -0
  114. package/dist/provider-adapters/claude.d.ts.map +1 -0
  115. package/dist/provider-adapters/claude.js +36 -0
  116. package/dist/provider-adapters/claude.js.map +1 -0
  117. package/dist/provider-adapters/codex.d.ts +4 -0
  118. package/dist/provider-adapters/codex.d.ts.map +1 -0
  119. package/dist/provider-adapters/codex.js +93 -0
  120. package/dist/provider-adapters/codex.js.map +1 -0
  121. package/dist/provider-adapters/constants.d.ts +21 -0
  122. package/dist/provider-adapters/constants.d.ts.map +1 -0
  123. package/dist/provider-adapters/constants.js +21 -0
  124. package/dist/provider-adapters/constants.js.map +1 -0
  125. package/dist/provider-adapters/copilot.d.ts +4 -0
  126. package/dist/provider-adapters/copilot.d.ts.map +1 -0
  127. package/dist/provider-adapters/copilot.js +37 -0
  128. package/dist/provider-adapters/copilot.js.map +1 -0
  129. package/dist/provider-adapters/create-adapter.d.ts +4 -0
  130. package/dist/provider-adapters/create-adapter.d.ts.map +1 -0
  131. package/dist/provider-adapters/create-adapter.js +67 -0
  132. package/dist/provider-adapters/create-adapter.js.map +1 -0
  133. package/dist/provider-adapters/mcp.d.ts +4 -0
  134. package/dist/provider-adapters/mcp.d.ts.map +1 -0
  135. package/dist/provider-adapters/mcp.js +40 -0
  136. package/dist/provider-adapters/mcp.js.map +1 -0
  137. package/dist/provider-adapters/registry.d.ts +4 -0
  138. package/dist/provider-adapters/registry.d.ts.map +1 -0
  139. package/dist/provider-adapters/registry.js +11 -0
  140. package/dist/provider-adapters/registry.js.map +1 -0
  141. package/dist/provider-adapters/renderers.d.ts +3 -0
  142. package/dist/provider-adapters/renderers.d.ts.map +1 -0
  143. package/dist/provider-adapters/renderers.js +10 -0
  144. package/dist/provider-adapters/renderers.js.map +1 -0
  145. package/dist/provider-adapters/subagents.d.ts +19 -0
  146. package/dist/provider-adapters/subagents.d.ts.map +1 -0
  147. package/dist/provider-adapters/subagents.js +58 -0
  148. package/dist/provider-adapters/subagents.js.map +1 -0
  149. package/dist/provider-adapters/types.d.ts +18 -0
  150. package/dist/provider-adapters/types.d.ts.map +1 -0
  151. package/dist/provider-adapters/types.js +2 -0
  152. package/dist/provider-adapters/types.js.map +1 -0
  153. package/dist/providers.d.ts +6 -0
  154. package/dist/providers.d.ts.map +1 -0
  155. package/dist/providers.js +15 -0
  156. package/dist/providers.js.map +1 -0
  157. package/dist/registry-validator.d.ts +3 -0
  158. package/dist/registry-validator.d.ts.map +1 -0
  159. package/dist/registry-validator.js +222 -0
  160. package/dist/registry-validator.js.map +1 -0
  161. package/dist/repository.d.ts +36 -0
  162. package/dist/repository.d.ts.map +1 -0
  163. package/dist/repository.js +314 -0
  164. package/dist/repository.js.map +1 -0
  165. package/dist/types.d.ts +190 -0
  166. package/dist/types.d.ts.map +1 -0
  167. package/dist/types.js +11 -0
  168. package/dist/types.js.map +1 -0
  169. package/dist/utils.d.ts +16 -0
  170. package/dist/utils.d.ts.map +1 -0
  171. package/dist/utils.js +115 -0
  172. package/dist/utils.js.map +1 -0
  173. package/dist/versioning/doctor.d.ts +6 -0
  174. package/dist/versioning/doctor.d.ts.map +1 -0
  175. package/dist/versioning/doctor.js +284 -0
  176. package/dist/versioning/doctor.js.map +1 -0
  177. package/dist/versioning/migrate.d.ts +9 -0
  178. package/dist/versioning/migrate.d.ts.map +1 -0
  179. package/dist/versioning/migrate.js +362 -0
  180. package/dist/versioning/migrate.js.map +1 -0
  181. package/dist/versioning/registry.d.ts +18 -0
  182. package/dist/versioning/registry.d.ts.map +1 -0
  183. package/dist/versioning/registry.js +63 -0
  184. package/dist/versioning/registry.js.map +1 -0
  185. package/package.json +52 -0
@@ -0,0 +1,362 @@
1
+ import path from "node:path";
2
+ import { detectDocumentVersion, LATEST_VERSION_BY_KIND, parseManifest, parseProviderOverride, } from "@madebywild/agent-harness-manifest";
3
+ import { loadCanonicalState } from "../loader.js";
4
+ import { buildPlan } from "../planner.js";
5
+ import { copyWorkspaceFileToBackup, emptyManagedIndex } from "../repository.js";
6
+ import { readTextIfExists, stableStringify, withSingleTrailingNewline, writeFileAtomic } from "../utils.js";
7
+ import { runDoctor } from "./doctor.js";
8
+ import { defaultMigrationRegistry, resolveMigrationChain, runMigrationChain } from "./registry.js";
9
+ export async function runMigration(paths, options = {}) {
10
+ if (options.to && options.to !== "latest") {
11
+ return {
12
+ success: false,
13
+ dryRun: options.dryRun === true,
14
+ actions: [],
15
+ diagnostics: [
16
+ {
17
+ code: "MIGRATION_TARGET_UNSUPPORTED",
18
+ severity: "error",
19
+ message: `Unsupported migration target '${options.to}'. Only 'latest' is supported.`,
20
+ path: ".harness",
21
+ },
22
+ ],
23
+ };
24
+ }
25
+ const dryRun = options.dryRun === true;
26
+ const doctor = await runDoctor(paths);
27
+ const actions = [];
28
+ const unsupported = doctor.files.filter((file) => file.status === "unsupported");
29
+ if (unsupported.length > 0) {
30
+ return {
31
+ success: false,
32
+ dryRun,
33
+ actions,
34
+ diagnostics: [
35
+ {
36
+ code: "MIGRATION_DOWNGRADE_UNSUPPORTED",
37
+ severity: "error",
38
+ message: "Cannot migrate because one or more files use a newer schema than this CLI supports.",
39
+ path: ".harness",
40
+ hint: "Install a newer harness CLI and rerun 'harness doctor'.",
41
+ },
42
+ ...doctor.diagnostics,
43
+ ],
44
+ };
45
+ }
46
+ const invalid = doctor.files.filter((file) => file.status === "invalid" || file.status === "missing");
47
+ if (invalid.length > 0) {
48
+ return {
49
+ success: false,
50
+ dryRun,
51
+ actions,
52
+ diagnostics: [
53
+ {
54
+ code: "MIGRATION_BLOCKED_INVALID",
55
+ severity: "error",
56
+ message: "Migration is blocked by invalid or missing version metadata.",
57
+ path: ".harness",
58
+ hint: "Fix diagnostics from 'harness doctor' and rerun migration.",
59
+ },
60
+ ...doctor.diagnostics,
61
+ ],
62
+ };
63
+ }
64
+ const outdated = doctor.files.filter((file) => file.status === "outdated");
65
+ if (outdated.length === 0) {
66
+ actions.push({
67
+ kind: "backup",
68
+ path: ".harness",
69
+ action: "noop",
70
+ details: "Workspace is already on latest schema version",
71
+ });
72
+ return {
73
+ success: true,
74
+ dryRun,
75
+ actions,
76
+ diagnostics: [],
77
+ };
78
+ }
79
+ const manifestText = await readTextIfExists(paths.manifestFile);
80
+ if (manifestText === null) {
81
+ return {
82
+ success: false,
83
+ dryRun,
84
+ actions,
85
+ diagnostics: [
86
+ {
87
+ code: "MANIFEST_NOT_FOUND",
88
+ severity: "error",
89
+ message: "Missing manifest file at .harness/manifest.json",
90
+ path: ".harness/manifest.json",
91
+ hint: "Run 'harness init' first.",
92
+ },
93
+ ],
94
+ };
95
+ }
96
+ let parsedManifest;
97
+ try {
98
+ parsedManifest = JSON.parse(manifestText);
99
+ }
100
+ catch (error) {
101
+ return {
102
+ success: false,
103
+ dryRun,
104
+ actions,
105
+ diagnostics: [
106
+ {
107
+ code: "MANIFEST_INVALID",
108
+ severity: "error",
109
+ message: error instanceof Error ? error.message : "Manifest must be valid JSON",
110
+ path: ".harness/manifest.json",
111
+ },
112
+ ],
113
+ };
114
+ }
115
+ let migratedManifest;
116
+ try {
117
+ migratedManifest = (await migrateVersionedObject("manifest", parsedManifest));
118
+ }
119
+ catch (error) {
120
+ return {
121
+ success: false,
122
+ dryRun,
123
+ actions,
124
+ diagnostics: [toMigrationErrorDiagnostic(error, ".harness/manifest.json", "MANIFEST_MIGRATION_FAILED")],
125
+ };
126
+ }
127
+ const pendingWrites = [];
128
+ for (const file of outdated.filter((status) => status.kind === "provider-override")) {
129
+ const overrideWrite = await buildOverrideWrite(paths, file);
130
+ if (overrideWrite.diagnostic) {
131
+ return {
132
+ success: false,
133
+ dryRun,
134
+ actions,
135
+ diagnostics: [overrideWrite.diagnostic],
136
+ };
137
+ }
138
+ if (overrideWrite.write) {
139
+ pendingWrites.push(overrideWrite.write);
140
+ }
141
+ }
142
+ const derived = await deriveLatestState(paths, migratedManifest);
143
+ if (derived.diagnostics.length > 0) {
144
+ return {
145
+ success: false,
146
+ dryRun,
147
+ actions,
148
+ diagnostics: derived.diagnostics,
149
+ };
150
+ }
151
+ const manifestContent = stableStringify(migratedManifest);
152
+ const lockContent = stableStringify(derived.lock);
153
+ const managedIndexContent = stableStringify(derived.managedIndex);
154
+ const manifestWrite = await maybeWrite(paths.root, "manifest", ".harness/manifest.json", manifestContent, "Manifest schema migrated");
155
+ if (manifestWrite) {
156
+ pendingWrites.push(manifestWrite);
157
+ }
158
+ const lockWrite = await maybeWrite(paths.root, "lock", ".harness/manifest.lock.json", lockContent, "Rebuilt lock from desired outputs");
159
+ if (lockWrite) {
160
+ pendingWrites.push(lockWrite);
161
+ }
162
+ const managedIndexWrite = await maybeWrite(paths.root, "managed-index", ".harness/managed-index.json", managedIndexContent, "Rebuilt managed-index and adopted desired output paths");
163
+ if (managedIndexWrite) {
164
+ pendingWrites.push(managedIndexWrite);
165
+ }
166
+ for (const write of pendingWrites) {
167
+ actions.push({
168
+ kind: write.kind,
169
+ path: write.path,
170
+ action: write.action,
171
+ details: write.details,
172
+ });
173
+ }
174
+ if (pendingWrites.length === 0) {
175
+ return {
176
+ success: true,
177
+ dryRun,
178
+ actions: [
179
+ {
180
+ kind: "backup",
181
+ path: ".harness",
182
+ action: "noop",
183
+ details: "No file content changes required",
184
+ },
185
+ ],
186
+ diagnostics: [],
187
+ };
188
+ }
189
+ const backupRoot = path.join(paths.agentsDir, ".backup", migrationTimestamp());
190
+ const backupTargets = [];
191
+ for (const write of pendingWrites) {
192
+ const existing = await readTextIfExists(path.join(paths.root, write.path));
193
+ if (existing !== null) {
194
+ backupTargets.push(write.path);
195
+ }
196
+ }
197
+ for (const target of backupTargets) {
198
+ actions.push({
199
+ kind: "backup",
200
+ path: target,
201
+ action: "backup",
202
+ details: `Snapshot to ${path.posix.join(".harness/.backup", path.basename(backupRoot), target)}`,
203
+ });
204
+ }
205
+ if (dryRun) {
206
+ return {
207
+ success: true,
208
+ dryRun,
209
+ backupRoot,
210
+ actions,
211
+ diagnostics: [],
212
+ };
213
+ }
214
+ for (const target of backupTargets) {
215
+ await copyWorkspaceFileToBackup(paths, target, backupRoot);
216
+ }
217
+ const writeOrder = sortWriteOrder(pendingWrites);
218
+ for (const write of writeOrder) {
219
+ await writeFileAtomic(path.join(paths.root, write.path), write.content);
220
+ }
221
+ return {
222
+ success: true,
223
+ dryRun,
224
+ backupRoot,
225
+ actions,
226
+ diagnostics: [],
227
+ };
228
+ }
229
+ async function buildOverrideWrite(paths, file) {
230
+ const absolute = path.join(paths.root, file.path ?? "");
231
+ const text = await readTextIfExists(absolute);
232
+ if (text === null) {
233
+ return {
234
+ diagnostic: {
235
+ code: "OVERRIDE_MIGRATION_FAILED",
236
+ severity: "error",
237
+ message: `Missing override file '${file.path}'`,
238
+ path: file.path,
239
+ },
240
+ };
241
+ }
242
+ try {
243
+ const YAML = await import("yaml");
244
+ const parsed = YAML.parse(text);
245
+ const migrated = await migrateVersionedObject("provider-override", parsed);
246
+ const serialized = withSingleTrailingNewline(YAML.stringify(migrated));
247
+ const write = await maybeWrite(paths.root, "provider-override", file.path ?? "", serialized, "Override schema migrated");
248
+ return { write: write ?? undefined };
249
+ }
250
+ catch (error) {
251
+ return {
252
+ diagnostic: toMigrationErrorDiagnostic(error, file.path, "OVERRIDE_MIGRATION_FAILED", file.provider),
253
+ };
254
+ }
255
+ }
256
+ async function migrateVersionedObject(kind, input) {
257
+ const detected = detectDocumentVersion(kind, input);
258
+ if (detected.status !== "ok") {
259
+ throw new Error(`Cannot migrate ${kind}: missing or invalid version field`);
260
+ }
261
+ if (detected.version === undefined) {
262
+ throw new Error(`Cannot migrate ${kind}: missing version value`);
263
+ }
264
+ const targetVersion = LATEST_VERSION_BY_KIND[kind];
265
+ if (detected.version > targetVersion) {
266
+ throw new Error(`Cannot migrate ${kind} from newer version ${detected.version}`);
267
+ }
268
+ if (detected.version === targetVersion) {
269
+ return parseAsCurrent(kind, input);
270
+ }
271
+ const chain = resolveMigrationChain(defaultMigrationRegistry, kind, detected.version, targetVersion);
272
+ if (chain === null) {
273
+ // No migration chain available — fall back to bumping version and re-parsing.
274
+ if (!input || typeof input !== "object" || Array.isArray(input)) {
275
+ throw new Error(`Cannot migrate ${kind}: expected object document`);
276
+ }
277
+ const bumped = {
278
+ ...input,
279
+ version: targetVersion,
280
+ };
281
+ return parseAsCurrent(kind, bumped);
282
+ }
283
+ const migrated = await runMigrationChain(defaultMigrationRegistry, kind, detected.version, targetVersion, input);
284
+ return parseAsCurrent(kind, migrated.output);
285
+ }
286
+ function parseAsCurrent(kind, input) {
287
+ switch (kind) {
288
+ case "manifest":
289
+ return parseManifest(input);
290
+ case "provider-override":
291
+ return parseProviderOverride(input);
292
+ case "lock":
293
+ return input;
294
+ case "managed-index":
295
+ return input;
296
+ }
297
+ }
298
+ async function deriveLatestState(paths, manifest) {
299
+ const loaded = await loadCanonicalState(paths, manifest);
300
+ const firstPass = await buildPlan(paths, loaded, emptyManagedIndex(), null);
301
+ const blockingDiagnostics = firstPass.diagnostics.filter((diagnostic) => diagnostic.severity === "error" && diagnostic.code !== "OUTPUT_COLLISION_UNMANAGED");
302
+ if (blockingDiagnostics.length > 0) {
303
+ return {
304
+ lock: firstPass.nextLock,
305
+ managedIndex: firstPass.nextManagedIndex,
306
+ diagnostics: blockingDiagnostics,
307
+ };
308
+ }
309
+ const secondPass = await buildPlan(paths, loaded, {
310
+ version: LATEST_VERSION_BY_KIND["managed-index"],
311
+ managedSourcePaths: firstPass.nextManagedIndex.managedSourcePaths,
312
+ managedOutputPaths: firstPass.nextManagedIndex.managedOutputPaths,
313
+ }, null);
314
+ const secondBlocking = secondPass.diagnostics.filter((diagnostic) => diagnostic.severity === "error");
315
+ return {
316
+ lock: secondPass.nextLock,
317
+ managedIndex: secondPass.nextManagedIndex,
318
+ diagnostics: secondBlocking,
319
+ };
320
+ }
321
+ async function maybeWrite(rootAbs, kind, relativePath, content, details) {
322
+ const absolute = path.join(rootAbs, relativePath);
323
+ const existing = await readTextIfExists(absolute);
324
+ if (existing === content) {
325
+ return null;
326
+ }
327
+ return {
328
+ kind,
329
+ path: relativePath,
330
+ content,
331
+ details,
332
+ action: kind === "provider-override" ? "migrate" : "rewrite",
333
+ };
334
+ }
335
+ function sortWriteOrder(writes) {
336
+ const order = {
337
+ "provider-override": 0,
338
+ lock: 1,
339
+ "managed-index": 2,
340
+ manifest: 3,
341
+ };
342
+ return [...writes].sort((left, right) => {
343
+ const byKind = order[left.kind] - order[right.kind];
344
+ if (byKind !== 0) {
345
+ return byKind;
346
+ }
347
+ return left.path.localeCompare(right.path);
348
+ });
349
+ }
350
+ function toMigrationErrorDiagnostic(error, pathValue, code, provider) {
351
+ return {
352
+ code,
353
+ severity: "error",
354
+ message: error instanceof Error ? error.message : "Migration failed",
355
+ path: pathValue,
356
+ provider,
357
+ };
358
+ }
359
+ function migrationTimestamp() {
360
+ return new Date().toISOString().replace(/[:.]/g, "-");
361
+ }
362
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/versioning/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAGL,qBAAqB,EACrB,sBAAsB,EACtB,aAAa,EACb,qBAAqB,GACtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAUhF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC5G,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAenG,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAmB,EACnB,UAAmC,EAAE;IAErC,IAAI,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI;YAC/B,OAAO,EAAE,EAAE;YACX,WAAW,EAAE;gBACX;oBACE,IAAI,EAAE,8BAA8B;oBACpC,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,iCAAiC,OAAO,CAAC,EAAE,gCAAgC;oBACpF,IAAI,EAAE,UAAU;iBACjB;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC;IACvC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,OAAO,GAAsB,EAAE,CAAC;IAEtC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC;IACjF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM;YACN,OAAO;YACP,WAAW,EAAE;gBACX;oBACE,IAAI,EAAE,iCAAiC;oBACvC,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,qFAAqF;oBAC9F,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,yDAAyD;iBAChE;gBACD,GAAG,MAAM,CAAC,WAAW;aACtB;SACF,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IACtG,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM;YACN,OAAO;YACP,WAAW,EAAE;gBACX;oBACE,IAAI,EAAE,2BAA2B;oBACjC,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,8DAA8D;oBACvE,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,4DAA4D;iBACnE;gBACD,GAAG,MAAM,CAAC,WAAW;aACtB;SACF,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;IAC3E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,+CAA+C;SACzD,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM;YACN,OAAO;YACP,WAAW,EAAE,EAAE;SAChB,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAChE,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM;YACN,OAAO;YACP,WAAW,EAAE;gBACX;oBACE,IAAI,EAAE,oBAAoB;oBAC1B,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,iDAAiD;oBAC1D,IAAI,EAAE,wBAAwB;oBAC9B,IAAI,EAAE,2BAA2B;iBAClC;aACF;SACF,CAAC;IACJ,CAAC;IAED,IAAI,cAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAY,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM;YACN,OAAO;YACP,WAAW,EAAE;gBACX;oBACE,IAAI,EAAE,kBAAkB;oBACxB,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B;oBAC/E,IAAI,EAAE,wBAAwB;iBAC/B;aACF;SACF,CAAC;IACJ,CAAC;IAED,IAAI,gBAAgC,CAAC;IACrC,IAAI,CAAC;QACH,gBAAgB,GAAG,CAAC,MAAM,sBAAsB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAmB,CAAC;IAClG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM;YACN,OAAO;YACP,WAAW,EAAE,CAAC,0BAA0B,CAAC,KAAK,EAAE,wBAAwB,EAAE,2BAA2B,CAAC,CAAC;SACxG,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAmB,EAAE,CAAC;IAEzC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,mBAAmB,CAAC,EAAE,CAAC;QACpF,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5D,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC;YAC7B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM;gBACN,OAAO;gBACP,WAAW,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC;aACxC,CAAC;QACJ,CAAC;QAED,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;YACxB,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACjE,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM;YACN,OAAO;YACP,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,mBAAmB,GAAG,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAElE,MAAM,aAAa,GAAG,MAAM,UAAU,CACpC,KAAK,CAAC,IAAI,EACV,UAAU,EACV,wBAAwB,EACxB,eAAe,EACf,0BAA0B,CAC3B,CAAC;IACF,IAAI,aAAa,EAAE,CAAC;QAClB,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,UAAU,CAChC,KAAK,CAAC,IAAI,EACV,MAAM,EACN,6BAA6B,EAC7B,WAAW,EACX,mCAAmC,CACpC,CAAC;IACF,IAAI,SAAS,EAAE,CAAC;QACd,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,iBAAiB,GAAG,MAAM,UAAU,CACxC,KAAK,CAAC,IAAI,EACV,eAAe,EACf,6BAA6B,EAC7B,mBAAmB,EACnB,wDAAwD,CACzD,CAAC;IACF,IAAI,iBAAiB,EAAE,CAAC;QACtB,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM;YACN,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,UAAU;oBAChB,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,kCAAkC;iBAC5C;aACF;YACD,WAAW,EAAE,EAAE;SAChB,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC/E,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,eAAe,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,EAAE;SACjG,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM;YACN,UAAU;YACV,OAAO;YACP,WAAW,EAAE,EAAE;SAChB,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;IACjD,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,MAAM;QACN,UAAU;QACV,OAAO;QACP,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,KAAmB,EACnB,IAAuB;IAEvB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO;YACL,UAAU,EAAE;gBACV,IAAI,EAAE,2BAA2B;gBACjC,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,0BAA0B,IAAI,CAAC,IAAI,GAAG;gBAC/C,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB;SACF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;QAC3C,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;QAC3E,MAAM,UAAU,GAAG,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,MAAM,UAAU,CAC5B,KAAK,CAAC,IAAI,EACV,mBAAmB,EACnB,IAAI,CAAC,IAAI,IAAI,EAAE,EACf,UAAU,EACV,0BAA0B,CAC3B,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,UAAU,EAAE,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,2BAA2B,EAAE,IAAI,CAAC,QAAQ,CAAC;SACrG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,IAAkB,EAAE,KAAc;IACtE,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEpD,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,oCAAoC,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,yBAAyB,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,aAAa,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,QAAQ,CAAC,OAAO,GAAG,aAAa,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,uBAAuB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,IAAI,QAAQ,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;QACvC,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,KAAK,GAAG,qBAAqB,CAAC,wBAAwB,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAErG,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,8EAA8E;QAC9E,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,4BAA4B,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,MAAM,GAAG;YACb,GAAI,KAAiC;YACrC,OAAO,EAAE,aAAa;SACvB,CAAC;QACF,OAAO,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,wBAAwB,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;IACjH,OAAO,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,cAAc,CAAC,IAAkB,EAAE,KAAc;IACxD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU;YACb,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,KAAK,mBAAmB;YACtB,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACtC,KAAK,MAAM;YACT,OAAO,KAAK,CAAC;QACf,KAAK,eAAe;YAClB,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,KAAmB,EACnB,QAAwB;IAMxB,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,EAAE,IAAI,CAAC,CAAC;IAE5E,MAAM,mBAAmB,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,CACtD,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,KAAK,OAAO,IAAI,UAAU,CAAC,IAAI,KAAK,4BAA4B,CACpG,CAAC;IAEF,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO;YACL,IAAI,EAAE,SAAS,CAAC,QAAQ;YACxB,YAAY,EAAE,SAAS,CAAC,gBAAgB;YACxC,WAAW,EAAE,mBAAmB;SACjC,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,SAAS,CAChC,KAAK,EACL,MAAM,EACN;QACE,OAAO,EAAE,sBAAsB,CAAC,eAAe,CAA4B;QAC3E,kBAAkB,EAAE,SAAS,CAAC,gBAAgB,CAAC,kBAAkB;QACjE,kBAAkB,EAAE,SAAS,CAAC,gBAAgB,CAAC,kBAAkB;KAClE,EACD,IAAI,CACL,CAAC;IAEF,MAAM,cAAc,GAAG,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IAEtG,OAAO;QACL,IAAI,EAAE,UAAU,CAAC,QAAQ;QACzB,YAAY,EAAE,UAAU,CAAC,gBAAgB;QACzC,WAAW,EAAE,cAAc;KAC5B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,OAAe,EACf,IAAkB,EAClB,YAAoB,EACpB,OAAe,EACf,OAAe;IAEf,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI;QACJ,IAAI,EAAE,YAAY;QAClB,OAAO;QACP,OAAO;QACP,MAAM,EAAE,IAAI,KAAK,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;KAC7D,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,MAAsB;IAC5C,MAAM,KAAK,GAAiC;QAC1C,mBAAmB,EAAE,CAAC;QACtB,IAAI,EAAE,CAAC;QACP,eAAe,EAAE,CAAC;QAClB,QAAQ,EAAE,CAAC;KACZ,CAAC;IAEF,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,0BAA0B,CACjC,KAAc,EACd,SAA6B,EAC7B,IAAY,EACZ,QAAqB;IAErB,OAAO;QACL,IAAI;QACJ,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB;QACpE,IAAI,EAAE,SAAS;QACf,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { DocumentKind } from "@madebywild/agent-harness-manifest";
2
+ export interface MigrationStep {
3
+ kind: DocumentKind;
4
+ fromVersion: number;
5
+ toVersion: number;
6
+ migrate(input: unknown): unknown | Promise<unknown>;
7
+ }
8
+ export interface MigrationRegistry {
9
+ readonly byKind: ReadonlyMap<DocumentKind, ReadonlyArray<MigrationStep>>;
10
+ }
11
+ export declare function createMigrationRegistry(steps: readonly MigrationStep[]): MigrationRegistry;
12
+ export declare function resolveMigrationChain(registry: MigrationRegistry, kind: DocumentKind, fromVersion: number, toVersion: number): MigrationStep[] | null;
13
+ export declare function runMigrationChain(registry: MigrationRegistry, kind: DocumentKind, fromVersion: number, toVersion: number, input: unknown): Promise<{
14
+ output: unknown;
15
+ appliedSteps: number;
16
+ }>;
17
+ export declare const defaultMigrationRegistry: MigrationRegistry;
18
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/versioning/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;CAC1E;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,iBAAiB,CAyB1F;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,EAAE,YAAY,EAClB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,aAAa,EAAE,GAAG,IAAI,CAiCxB;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,EAAE,YAAY,EAClB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAepD;AAED,eAAO,MAAM,wBAAwB,mBAA8B,CAAC"}
@@ -0,0 +1,63 @@
1
+ export function createMigrationRegistry(steps) {
2
+ const map = new Map();
3
+ for (const step of steps) {
4
+ const existing = map.get(step.kind) ?? [];
5
+ existing.push(step);
6
+ map.set(step.kind, existing);
7
+ }
8
+ for (const [kind, kindSteps] of map.entries()) {
9
+ map.set(kind, [...kindSteps].sort((left, right) => {
10
+ const byFrom = left.fromVersion - right.fromVersion;
11
+ if (byFrom !== 0) {
12
+ return byFrom;
13
+ }
14
+ return left.toVersion - right.toVersion;
15
+ }));
16
+ }
17
+ return {
18
+ byKind: map,
19
+ };
20
+ }
21
+ export function resolveMigrationChain(registry, kind, fromVersion, toVersion) {
22
+ if (fromVersion === toVersion) {
23
+ return [];
24
+ }
25
+ if (fromVersion > toVersion) {
26
+ return null;
27
+ }
28
+ const available = registry.byKind.get(kind) ?? [];
29
+ const chain = [];
30
+ let current = fromVersion;
31
+ while (current < toVersion) {
32
+ const next = available.find((step) => step.fromVersion === current);
33
+ if (!next) {
34
+ return null;
35
+ }
36
+ // Ensure the step advances the version and does not overshoot the target.
37
+ if (next.toVersion <= current || next.toVersion > toVersion) {
38
+ return null;
39
+ }
40
+ chain.push(next);
41
+ current = next.toVersion;
42
+ }
43
+ if (current !== toVersion) {
44
+ return null;
45
+ }
46
+ return chain;
47
+ }
48
+ export async function runMigrationChain(registry, kind, fromVersion, toVersion, input) {
49
+ const chain = resolveMigrationChain(registry, kind, fromVersion, toVersion);
50
+ if (chain === null) {
51
+ throw new Error(`No migration chain available for ${kind} ${fromVersion} -> ${toVersion}`);
52
+ }
53
+ let output = input;
54
+ for (const step of chain) {
55
+ output = await step.migrate(output);
56
+ }
57
+ return {
58
+ output,
59
+ appliedSteps: chain.length,
60
+ };
61
+ }
62
+ export const defaultMigrationRegistry = createMigrationRegistry([]);
63
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/versioning/registry.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@madebywild/agent-harness-framework",
3
+ "version": "0.9.1",
4
+ "private": false,
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "bin": {
9
+ "harness": "./dist/cli.js"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "default": "./dist/index.js"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "publishConfig": {
21
+ "access": "restricted"
22
+ },
23
+ "dependencies": {
24
+ "@clack/prompts": "^1.1.0",
25
+ "@iarna/toml": "^2.2.5",
26
+ "chokidar": "^5.0.0",
27
+ "commander": "^14.0.3",
28
+ "gray-matter": "^4.0.3",
29
+ "ora": "^9.3.0",
30
+ "yaml": "^2.8.2",
31
+ "@madebywild/agent-harness-manifest": "0.9.1"
32
+ },
33
+ "devDependencies": {
34
+ "@types/node": "^25.5.0",
35
+ "testcontainers": "^11.13.0",
36
+ "tsx": "^4.21.0",
37
+ "typescript": "^5.9.3"
38
+ },
39
+ "scripts": {
40
+ "build": "pnpm exec tsc -b",
41
+ "clean": "rm -rf dist tsconfig.tsbuildinfo",
42
+ "lint": "biome lint .",
43
+ "lint:write": "biome lint --write .",
44
+ "format": "biome format .",
45
+ "format:write": "biome format --write .",
46
+ "check": "biome check .",
47
+ "check:write": "biome check --write .",
48
+ "test": "pnpm exec tsx --test test/*.test.ts",
49
+ "test:e2e:containers": "pnpm exec tsx --test test/e2e/**/*.e2e.test.ts",
50
+ "typecheck": "pnpm exec tsc -b --pretty false"
51
+ }
52
+ }