@gfdelarue/testkit 0.3.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 (1548) hide show
  1. package/LICENSE +68 -0
  2. package/README.md +1125 -0
  3. package/bin/testkit-windows-owner-arm64.exe +0 -0
  4. package/bin/testkit-windows-owner-x64.exe +0 -0
  5. package/bin/testkit.mjs +60 -0
  6. package/dist/app/cleanup/index.d.ts +52 -0
  7. package/dist/app/cleanup/index.js +1 -0
  8. package/dist/app/cloud/campaigns.d.ts +6 -0
  9. package/dist/app/cloud/campaigns.js +1 -0
  10. package/dist/app/cloud/control-actions.d.ts +12 -0
  11. package/dist/app/cloud/control-actions.js +2 -0
  12. package/dist/app/cloud/control-links.d.ts +5 -0
  13. package/dist/app/cloud/control-links.js +1 -0
  14. package/dist/app/cloud/control-read.d.ts +24 -0
  15. package/dist/app/cloud/control-read.js +1 -0
  16. package/dist/app/cloud/control-resources.d.ts +3 -0
  17. package/dist/app/cloud/control-resources.js +1 -0
  18. package/dist/app/cloud/control.d.ts +34 -0
  19. package/dist/app/cloud/control.js +5 -0
  20. package/dist/app/cloud/credentials.d.ts +11 -0
  21. package/dist/app/cloud/credentials.js +2 -0
  22. package/dist/app/cloud/index.d.ts +22 -0
  23. package/dist/app/cloud/index.js +2 -0
  24. package/dist/app/cloud/login.d.ts +63 -0
  25. package/dist/app/cloud/login.js +2 -0
  26. package/dist/app/cloud/migration/archive.d.ts +13 -0
  27. package/dist/app/cloud/migration/archive.js +1 -0
  28. package/dist/app/cloud/migration/commands.d.ts +8 -0
  29. package/dist/app/cloud/migration/commands.js +1 -0
  30. package/dist/app/cloud/migration/evidence.d.ts +13 -0
  31. package/dist/app/cloud/migration/evidence.js +2 -0
  32. package/dist/app/cloud/migration/files.d.ts +16 -0
  33. package/dist/app/cloud/migration/files.js +2 -0
  34. package/dist/app/cloud/migration/index.d.ts +6 -0
  35. package/dist/app/cloud/migration/index.js +1 -0
  36. package/dist/app/cloud/migration/journal.d.ts +64 -0
  37. package/dist/app/cloud/migration/journal.js +1 -0
  38. package/dist/app/cloud/migration/mapping-dispositions.d.ts +3 -0
  39. package/dist/app/cloud/migration/mapping-dispositions.js +1 -0
  40. package/dist/app/cloud/migration/mapping.d.ts +11 -0
  41. package/dist/app/cloud/migration/mapping.js +2 -0
  42. package/dist/app/cloud/migration/model.d.ts +175 -0
  43. package/dist/app/cloud/migration/model.js +1 -0
  44. package/dist/app/cloud/migration/plan.d.ts +7 -0
  45. package/dist/app/cloud/migration/plan.js +1 -0
  46. package/dist/app/cloud/migration/progress.d.ts +19 -0
  47. package/dist/app/cloud/migration/progress.js +1 -0
  48. package/dist/app/cloud/migration/reconcile.d.ts +22 -0
  49. package/dist/app/cloud/migration/reconcile.js +1 -0
  50. package/dist/app/cloud/migration/reconciliation-spool.d.ts +4 -0
  51. package/dist/app/cloud/migration/reconciliation-spool.js +1 -0
  52. package/dist/app/cloud/migration/state.d.ts +15 -0
  53. package/dist/app/cloud/migration/state.js +1 -0
  54. package/dist/app/cloud/migration/transfer.d.ts +6 -0
  55. package/dist/app/cloud/migration/transfer.js +1 -0
  56. package/dist/app/db-schema/prepare.d.ts +11 -0
  57. package/dist/app/db-schema/prepare.js +1 -0
  58. package/dist/app/db-schema/refresh.d.ts +17 -0
  59. package/dist/app/db-schema/refresh.js +1 -0
  60. package/dist/app/db-schema/verify.d.ts +11 -0
  61. package/dist/app/db-schema/verify.js +1 -0
  62. package/dist/app/destroy/index.d.ts +16 -0
  63. package/dist/app/destroy/index.js +1 -0
  64. package/dist/app/discover/index.d.ts +8 -0
  65. package/dist/app/discover/index.js +2 -0
  66. package/dist/app/doctor/index.d.ts +17 -0
  67. package/dist/app/doctor/index.js +1 -0
  68. package/dist/app/file-selection.d.ts +1 -0
  69. package/dist/app/file-selection.js +1 -0
  70. package/dist/app/inspect/artifacts.d.ts +29 -0
  71. package/dist/app/inspect/artifacts.js +1 -0
  72. package/dist/app/inspect/index.d.ts +112 -0
  73. package/dist/app/inspect/index.js +1 -0
  74. package/dist/app/lint/index.d.ts +28 -0
  75. package/dist/app/lint/index.js +2 -0
  76. package/dist/app/lint/native.d.ts +10 -0
  77. package/dist/app/lint/native.js +1 -0
  78. package/dist/app/lint/options.d.ts +67 -0
  79. package/dist/app/lint/options.js +1 -0
  80. package/dist/app/lint/policy.d.ts +21 -0
  81. package/dist/app/lint/policy.js +1 -0
  82. package/dist/app/lint/rules/data.d.ts +3 -0
  83. package/dist/app/lint/rules/data.js +1 -0
  84. package/dist/app/lint/rules/engine-imports.d.ts +3 -0
  85. package/dist/app/lint/rules/engine-imports.js +1 -0
  86. package/dist/app/lint/rules/syntax.d.ts +4 -0
  87. package/dist/app/lint/rules/syntax.js +1 -0
  88. package/dist/app/lint/rules/unit.d.ts +3 -0
  89. package/dist/app/lint/rules/unit.js +1 -0
  90. package/dist/app/lint/shared.d.ts +36 -0
  91. package/dist/app/lint/shared.js +1 -0
  92. package/dist/app/package-inspection.d.ts +20 -0
  93. package/dist/app/package-inspection.js +1 -0
  94. package/dist/app/run/endpoint-readiness.d.ts +43 -0
  95. package/dist/app/run/endpoint-readiness.js +1 -0
  96. package/dist/app/run/engine-evidence-persistence.d.ts +39 -0
  97. package/dist/app/run/engine-evidence-persistence.js +1 -0
  98. package/dist/app/run/engine-execution-cleanup.d.ts +8 -0
  99. package/dist/app/run/engine-execution-cleanup.js +1 -0
  100. package/dist/app/run/engine-execution-failures.d.ts +41 -0
  101. package/dist/app/run/engine-execution-failures.js +1 -0
  102. package/dist/app/run/engine-execution-observer.d.ts +21 -0
  103. package/dist/app/run/engine-execution-observer.js +1 -0
  104. package/dist/app/run/engine-execution-reporting.d.ts +17 -0
  105. package/dist/app/run/engine-execution-reporting.js +1 -0
  106. package/dist/app/run/engine-execution.d.ts +60 -0
  107. package/dist/app/run/engine-execution.js +1 -0
  108. package/dist/app/run/engine-orchestration.d.ts +49 -0
  109. package/dist/app/run/engine-orchestration.js +1 -0
  110. package/dist/app/run/failure-details.d.ts +36 -0
  111. package/dist/app/run/failure-details.js +1 -0
  112. package/dist/app/run/live-run.d.ts +27 -0
  113. package/dist/app/run/live-run.js +1 -0
  114. package/dist/app/run/operation-progress.d.ts +13 -0
  115. package/dist/app/run/operation-progress.js +1 -0
  116. package/dist/app/run/orchestrator.d.ts +68 -0
  117. package/dist/app/run/orchestrator.js +1 -0
  118. package/dist/app/run/planning-types.d.ts +68 -0
  119. package/dist/app/run/planning-types.js +1 -0
  120. package/dist/app/run/planning.d.ts +15 -0
  121. package/dist/app/run/planning.js +1 -0
  122. package/dist/app/run/playwright-configuration.d.ts +2 -0
  123. package/dist/app/run/playwright-configuration.js +1 -0
  124. package/dist/app/run/request.d.ts +30 -0
  125. package/dist/app/run/request.js +1 -0
  126. package/dist/app/run/results.d.ts +161 -0
  127. package/dist/app/run/results.js +1 -0
  128. package/dist/app/run/run-events.d.ts +144 -0
  129. package/dist/app/run/run-events.js +1 -0
  130. package/dist/app/run/run-finalization.d.ts +52 -0
  131. package/dist/app/run/run-finalization.js +1 -0
  132. package/dist/app/run/run-guards.d.ts +3 -0
  133. package/dist/app/run/run-guards.js +3 -0
  134. package/dist/app/run/runtime-failures.d.ts +18 -0
  135. package/dist/app/run/runtime-failures.js +1 -0
  136. package/dist/app/run/runtime-fixtures.d.ts +2 -0
  137. package/dist/app/run/runtime-fixtures.js +1 -0
  138. package/dist/app/run/runtime-task-types.d.ts +20 -0
  139. package/dist/app/run/runtime-task-types.js +1 -0
  140. package/dist/app/run/scheduler/estimates.d.ts +32 -0
  141. package/dist/app/run/scheduler/estimates.js +1 -0
  142. package/dist/app/run/scheduler/identity.d.ts +9 -0
  143. package/dist/app/run/scheduler/identity.js +1 -0
  144. package/dist/app/run/scheduler/index.d.ts +124 -0
  145. package/dist/app/run/scheduler/index.js +1 -0
  146. package/dist/app/run/scheduler/observations.d.ts +20 -0
  147. package/dist/app/run/scheduler/observations.js +1 -0
  148. package/dist/app/run/selection.d.ts +10 -0
  149. package/dist/app/run/selection.js +1 -0
  150. package/dist/app/run/setup/runtime-node-setup-errors.d.ts +13 -0
  151. package/dist/app/run/setup/runtime-node-setup-errors.js +1 -0
  152. package/dist/app/run/setup/runtime-node-setup-protocol.d.ts +85 -0
  153. package/dist/app/run/setup/runtime-node-setup-protocol.js +1 -0
  154. package/dist/app/run/setup/runtime-node-setup-worker.d.ts +1 -0
  155. package/dist/app/run/setup/runtime-node-setup-worker.js +1 -0
  156. package/dist/app/run/setup/runtime-node-setup.d.ts +48 -0
  157. package/dist/app/run/setup/runtime-node-setup.js +3 -0
  158. package/dist/app/run/task-batches.d.ts +23 -0
  159. package/dist/app/run/task-batches.js +1 -0
  160. package/dist/app/run/worker-loop.d.ts +57 -0
  161. package/dist/app/run/worker-loop.js +1 -0
  162. package/dist/app/setup/playwright.d.ts +22 -0
  163. package/dist/app/setup/playwright.js +1 -0
  164. package/dist/app/status/index.d.ts +7 -0
  165. package/dist/app/status/index.js +1 -0
  166. package/dist/app/status/model.d.ts +29 -0
  167. package/dist/app/status/model.js +1 -0
  168. package/dist/app/status/runs.d.ts +99 -0
  169. package/dist/app/status/runs.js +1 -0
  170. package/dist/app/stop/index.d.ts +14 -0
  171. package/dist/app/stop/index.js +1 -0
  172. package/dist/app/typecheck/index.d.ts +61 -0
  173. package/dist/app/typecheck/index.js +4 -0
  174. package/dist/app/typecheck/unavailable.d.ts +1 -0
  175. package/dist/app/typecheck/unavailable.js +1 -0
  176. package/dist/cli/cloud-apply-help.d.ts +1 -0
  177. package/dist/cli/cloud-apply-help.js +56 -0
  178. package/dist/cli/cloud-selection.d.ts +2 -0
  179. package/dist/cli/cloud-selection.js +3 -0
  180. package/dist/cli/command-catalog.d.ts +238 -0
  181. package/dist/cli/command-catalog.js +1 -0
  182. package/dist/cli/command-flags.d.ts +19 -0
  183. package/dist/cli/command-flags.js +1 -0
  184. package/dist/cli/command-registry.d.ts +2 -0
  185. package/dist/cli/command-registry.js +1 -0
  186. package/dist/cli/commands/artifacts.d.ts +48 -0
  187. package/dist/cli/commands/artifacts.js +3 -0
  188. package/dist/cli/commands/cleanup.d.ts +13 -0
  189. package/dist/cli/commands/cleanup.js +1 -0
  190. package/dist/cli/commands/cloud/apply.d.ts +5 -0
  191. package/dist/cli/commands/cloud/apply.js +1 -0
  192. package/dist/cli/commands/cloud/campaign/create.d.ts +5 -0
  193. package/dist/cli/commands/cloud/campaign/create.js +1 -0
  194. package/dist/cli/commands/cloud/download.d.ts +5 -0
  195. package/dist/cli/commands/cloud/download.js +1 -0
  196. package/dist/cli/commands/cloud/list.d.ts +5 -0
  197. package/dist/cli/commands/cloud/list.js +1 -0
  198. package/dist/cli/commands/cloud/login.d.ts +13 -0
  199. package/dist/cli/commands/cloud/login.js +2 -0
  200. package/dist/cli/commands/cloud/logout.d.ts +7 -0
  201. package/dist/cli/commands/cloud/logout.js +1 -0
  202. package/dist/cli/commands/cloud/migrate/apply.d.ts +2 -0
  203. package/dist/cli/commands/cloud/migrate/apply.js +1 -0
  204. package/dist/cli/commands/cloud/migrate/plan.d.ts +7 -0
  205. package/dist/cli/commands/cloud/migrate/plan.js +1 -0
  206. package/dist/cli/commands/cloud/migrate/progress.d.ts +2 -0
  207. package/dist/cli/commands/cloud/migrate/progress.js +2 -0
  208. package/dist/cli/commands/cloud/migrate/reconcile.d.ts +2 -0
  209. package/dist/cli/commands/cloud/migrate/reconcile.js +1 -0
  210. package/dist/cli/commands/cloud/policy/preview.d.ts +5 -0
  211. package/dist/cli/commands/cloud/policy/preview.js +1 -0
  212. package/dist/cli/commands/cloud/project/create.d.ts +5 -0
  213. package/dist/cli/commands/cloud/project/create.js +1 -0
  214. package/dist/cli/commands/cloud/publish.d.ts +7 -0
  215. package/dist/cli/commands/cloud/publish.js +1 -0
  216. package/dist/cli/commands/cloud/session/revoke.d.ts +8 -0
  217. package/dist/cli/commands/cloud/session/revoke.js +1 -0
  218. package/dist/cli/commands/cloud/show.d.ts +5 -0
  219. package/dist/cli/commands/cloud/show.js +1 -0
  220. package/dist/cli/commands/cloud/snapshot.d.ts +5 -0
  221. package/dist/cli/commands/cloud/snapshot.js +1 -0
  222. package/dist/cli/commands/cloud/status.d.ts +33 -0
  223. package/dist/cli/commands/cloud/status.js +1 -0
  224. package/dist/cli/commands/db/schema/refresh.d.ts +2 -0
  225. package/dist/cli/commands/db/schema/refresh.js +1 -0
  226. package/dist/cli/commands/db/schema/verify.d.ts +2 -0
  227. package/dist/cli/commands/db/schema/verify.js +1 -0
  228. package/dist/cli/commands/destroy.d.ts +9 -0
  229. package/dist/cli/commands/destroy.js +1 -0
  230. package/dist/cli/commands/discover.d.ts +2 -0
  231. package/dist/cli/commands/discover.js +1 -0
  232. package/dist/cli/commands/doctor.d.ts +2 -0
  233. package/dist/cli/commands/doctor.js +1 -0
  234. package/dist/cli/commands/guard/unsafe-entrypoint.d.ts +2 -0
  235. package/dist/cli/commands/guard/unsafe-entrypoint.js +2 -0
  236. package/dist/cli/commands/lint.d.ts +2 -0
  237. package/dist/cli/commands/lint.js +1 -0
  238. package/dist/cli/commands/run/status.d.ts +5 -0
  239. package/dist/cli/commands/run/status.js +1 -0
  240. package/dist/cli/commands/run/stop.d.ts +7 -0
  241. package/dist/cli/commands/run/stop.js +1 -0
  242. package/dist/cli/commands/run.d.ts +9 -0
  243. package/dist/cli/commands/run.js +1 -0
  244. package/dist/cli/commands/setup/playwright.d.ts +2 -0
  245. package/dist/cli/commands/setup/playwright.js +1 -0
  246. package/dist/cli/commands/status.d.ts +5 -0
  247. package/dist/cli/commands/status.js +1 -0
  248. package/dist/cli/commands/stop.d.ts +12 -0
  249. package/dist/cli/commands/stop.js +1 -0
  250. package/dist/cli/commands/typecheck.d.ts +2 -0
  251. package/dist/cli/commands/typecheck.js +1 -0
  252. package/dist/cli/commands/workspace.d.ts +2 -0
  253. package/dist/cli/commands/workspace.js +1 -0
  254. package/dist/cli/entrypoint.d.ts +1 -0
  255. package/dist/cli/entrypoint.js +1 -0
  256. package/dist/cli/framework/command.d.ts +21 -0
  257. package/dist/cli/framework/command.js +1 -0
  258. package/dist/cli/framework/definitions.d.ts +100 -0
  259. package/dist/cli/framework/definitions.js +1 -0
  260. package/dist/cli/framework/errors.d.ts +6 -0
  261. package/dist/cli/framework/errors.js +1 -0
  262. package/dist/cli/framework/execute.d.ts +13 -0
  263. package/dist/cli/framework/execute.js +6 -0
  264. package/dist/cli/framework/help.d.ts +11 -0
  265. package/dist/cli/framework/help.js +8 -0
  266. package/dist/cli/framework/index.d.ts +3 -0
  267. package/dist/cli/framework/index.js +1 -0
  268. package/dist/cli/framework/parser.d.ts +6 -0
  269. package/dist/cli/framework/parser.js +1 -0
  270. package/dist/cli/index.d.ts +4 -0
  271. package/dist/cli/index.js +1 -0
  272. package/dist/cli/json-errors.d.ts +3 -0
  273. package/dist/cli/json-errors.js +1 -0
  274. package/dist/cli/operations/db/schema/refresh/operation.d.ts +6 -0
  275. package/dist/cli/operations/db/schema/refresh/operation.js +1 -0
  276. package/dist/cli/operations/db/schema/verify/operation.d.ts +6 -0
  277. package/dist/cli/operations/db/schema/verify/operation.js +1 -0
  278. package/dist/cli/operations/run/operation.d.ts +24 -0
  279. package/dist/cli/operations/run/operation.js +2 -0
  280. package/dist/cli/process-signal.d.ts +1 -0
  281. package/dist/cli/process-signal.js +1 -0
  282. package/dist/cli/renderers/artifact-preview.d.ts +4 -0
  283. package/dist/cli/renderers/artifact-preview.js +1 -0
  284. package/dist/cli/renderers/cleanup/format.d.ts +14 -0
  285. package/dist/cli/renderers/cleanup/format.js +1 -0
  286. package/dist/cli/renderers/db-schema/text.d.ts +4 -0
  287. package/dist/cli/renderers/db-schema/text.js +1 -0
  288. package/dist/cli/renderers/destroy/text.d.ts +4 -0
  289. package/dist/cli/renderers/destroy/text.js +1 -0
  290. package/dist/cli/renderers/discover/report.d.ts +7 -0
  291. package/dist/cli/renderers/discover/report.js +1 -0
  292. package/dist/cli/renderers/discover/text.d.ts +3 -0
  293. package/dist/cli/renderers/discover/text.js +1 -0
  294. package/dist/cli/renderers/doctor/text.d.ts +2 -0
  295. package/dist/cli/renderers/doctor/text.js +1 -0
  296. package/dist/cli/renderers/lint/text.d.ts +2 -0
  297. package/dist/cli/renderers/lint/text.js +1 -0
  298. package/dist/cli/renderers/run/events.d.ts +8 -0
  299. package/dist/cli/renderers/run/events.js +2 -0
  300. package/dist/cli/renderers/run/failure.d.ts +8 -0
  301. package/dist/cli/renderers/run/failure.js +1 -0
  302. package/dist/cli/renderers/run/formatting.d.ts +79 -0
  303. package/dist/cli/renderers/run/formatting.js +1 -0
  304. package/dist/cli/renderers/run/status.d.ts +6 -0
  305. package/dist/cli/renderers/run/status.js +1 -0
  306. package/dist/cli/renderers/run/text-reporter.d.ts +19 -0
  307. package/dist/cli/renderers/run/text-reporter.js +23 -0
  308. package/dist/cli/renderers/status/text.d.ts +2 -0
  309. package/dist/cli/renderers/status/text.js +1 -0
  310. package/dist/cli/renderers/stop/text.d.ts +7 -0
  311. package/dist/cli/renderers/stop/text.js +1 -0
  312. package/dist/cli/renderers/typecheck/text.d.ts +2 -0
  313. package/dist/cli/renderers/typecheck/text.js +1 -0
  314. package/dist/cli/terminal/colors.d.ts +10 -0
  315. package/dist/cli/terminal/colors.js +1 -0
  316. package/dist/cli/terminal/layout.d.ts +11 -0
  317. package/dist/cli/terminal/layout.js +2 -0
  318. package/dist/cli/version-drift.d.ts +25 -0
  319. package/dist/cli/version-drift.js +7 -0
  320. package/dist/cloud/account.d.ts +34 -0
  321. package/dist/cloud/account.js +1 -0
  322. package/dist/cloud/archive-contract.d.ts +1 -0
  323. package/dist/cloud/archive-contract.js +1 -0
  324. package/dist/cloud/archive.d.ts +12 -0
  325. package/dist/cloud/archive.js +1 -0
  326. package/dist/cloud/campaigns.d.ts +200 -0
  327. package/dist/cloud/campaigns.js +2 -0
  328. package/dist/cloud/client.d.ts +68 -0
  329. package/dist/cloud/client.js +4 -0
  330. package/dist/cloud/download.d.ts +5 -0
  331. package/dist/cloud/download.js +1 -0
  332. package/dist/cloud/historical-contract.d.ts +224 -0
  333. package/dist/cloud/historical-contract.js +1 -0
  334. package/dist/cloud/historical-json.d.ts +16 -0
  335. package/dist/cloud/historical-json.js +1 -0
  336. package/dist/cloud/historical.d.ts +69 -0
  337. package/dist/cloud/historical.js +1 -0
  338. package/dist/cloud/pagination.d.ts +5 -0
  339. package/dist/cloud/pagination.js +1 -0
  340. package/dist/cloud/transport.d.ts +18 -0
  341. package/dist/cloud/transport.js +1 -0
  342. package/dist/config/authoring/build-config-contract.d.ts +27 -0
  343. package/dist/config/authoring/build-config-contract.js +1 -0
  344. package/dist/config/authoring/configured-step-contract.d.ts +18 -0
  345. package/dist/config/authoring/configured-step-contract.js +1 -0
  346. package/dist/config/authoring/http-execution-contract.d.ts +70 -0
  347. package/dist/config/authoring/http-execution-contract.js +1 -0
  348. package/dist/config/authoring/http-methods.d.ts +18 -0
  349. package/dist/config/authoring/http-methods.js +1 -0
  350. package/dist/config/authoring/index.d.ts +376 -0
  351. package/dist/config/authoring/index.js +1 -0
  352. package/dist/config/authoring/preset-env.d.ts +19 -0
  353. package/dist/config/authoring/preset-env.js +1 -0
  354. package/dist/config/authoring/runtime.d.ts +64 -0
  355. package/dist/config/authoring/runtime.js +1 -0
  356. package/dist/config/loader/cloud.d.ts +2 -0
  357. package/dist/config/loader/cloud.js +1 -0
  358. package/dist/config/loader/config-loader.d.ts +9 -0
  359. package/dist/config/loader/config-loader.js +1 -0
  360. package/dist/config/loader/database-materialization.d.ts +19 -0
  361. package/dist/config/loader/database-materialization.js +1 -0
  362. package/dist/config/loader/database-roles.d.ts +2 -0
  363. package/dist/config/loader/database-roles.js +1 -0
  364. package/dist/config/loader/database.d.ts +55 -0
  365. package/dist/config/loader/database.js +1 -0
  366. package/dist/config/loader/decode-discovery.d.ts +5 -0
  367. package/dist/config/loader/decode-discovery.js +1 -0
  368. package/dist/config/loader/decode-execution.d.ts +9 -0
  369. package/dist/config/loader/decode-execution.js +1 -0
  370. package/dist/config/loader/dependencies.d.ts +7 -0
  371. package/dist/config/loader/dependencies.js +1 -0
  372. package/dist/config/loader/discover-tests.d.ts +101 -0
  373. package/dist/config/loader/discover-tests.js +1 -0
  374. package/dist/config/loader/discovery-summary.d.ts +29 -0
  375. package/dist/config/loader/discovery-summary.js +1 -0
  376. package/dist/config/loader/discovery.d.ts +54 -0
  377. package/dist/config/loader/discovery.js +2 -0
  378. package/dist/config/loader/env.d.ts +4 -0
  379. package/dist/config/loader/env.js +1 -0
  380. package/dist/config/loader/execution-model.d.ts +16 -0
  381. package/dist/config/loader/execution-model.js +1 -0
  382. package/dist/config/loader/file-metadata.d.ts +19 -0
  383. package/dist/config/loader/file-metadata.js +1 -0
  384. package/dist/config/loader/index.d.ts +10 -0
  385. package/dist/config/loader/index.js +1 -0
  386. package/dist/config/loader/load.d.ts +89 -0
  387. package/dist/config/loader/load.js +1 -0
  388. package/dist/config/loader/managed-configs.d.ts +21 -0
  389. package/dist/config/loader/managed-configs.js +1 -0
  390. package/dist/config/loader/path-policy.d.ts +9 -0
  391. package/dist/config/loader/path-policy.js +1 -0
  392. package/dist/config/loader/paths.d.ts +5 -0
  393. package/dist/config/loader/paths.js +1 -0
  394. package/dist/config/loader/runtime-isolation.d.ts +44 -0
  395. package/dist/config/loader/runtime-isolation.js +1 -0
  396. package/dist/config/loader/runtime.d.ts +25 -0
  397. package/dist/config/loader/runtime.js +1 -0
  398. package/dist/config/loader/skip-config.d.ts +44 -0
  399. package/dist/config/loader/skip-config.js +1 -0
  400. package/dist/config/loader/validation.d.ts +16 -0
  401. package/dist/config/loader/validation.js +1 -0
  402. package/dist/config/loader/values.d.ts +4 -0
  403. package/dist/config/loader/values.js +1 -0
  404. package/dist/config/runtime/build-assets.d.ts +6 -0
  405. package/dist/config/runtime/build-assets.js +1 -0
  406. package/dist/config/runtime/env/index.d.ts +35 -0
  407. package/dist/config/runtime/env/index.js +1 -0
  408. package/dist/config/runtime/next-runtime-tsconfig.d.ts +6 -0
  409. package/dist/config/runtime/next-runtime-tsconfig.js +2 -0
  410. package/dist/database/activity-gate.d.ts +22 -0
  411. package/dist/database/activity-gate.js +1 -0
  412. package/dist/database/admin.d.ts +31 -0
  413. package/dist/database/admin.js +2 -0
  414. package/dist/database/cleanup.d.ts +36 -0
  415. package/dist/database/cleanup.js +1 -0
  416. package/dist/database/configured-steps.d.ts +27 -0
  417. package/dist/database/configured-steps.js +1 -0
  418. package/dist/database/constants.d.ts +11 -0
  419. package/dist/database/constants.js +1 -0
  420. package/dist/database/docker.d.ts +65 -0
  421. package/dist/database/docker.js +5 -0
  422. package/dist/database/drizzle/index.d.ts +13 -0
  423. package/dist/database/drizzle/index.js +1 -0
  424. package/dist/database/fingerprint.d.ts +12 -0
  425. package/dist/database/fingerprint.js +1 -0
  426. package/dist/database/index.d.ts +41 -0
  427. package/dist/database/index.js +1 -0
  428. package/dist/database/local-postgres.d.ts +71 -0
  429. package/dist/database/local-postgres.js +2 -0
  430. package/dist/database/naming.d.ts +17 -0
  431. package/dist/database/naming.js +1 -0
  432. package/dist/database/postgres/index.d.ts +71 -0
  433. package/dist/database/postgres/index.js +2 -0
  434. package/dist/database/progress.d.ts +6 -0
  435. package/dist/database/progress.js +1 -0
  436. package/dist/database/roles.d.ts +19 -0
  437. package/dist/database/roles.js +41 -0
  438. package/dist/database/runtime-config.d.ts +16 -0
  439. package/dist/database/runtime-config.js +1 -0
  440. package/dist/database/runtime-reservations.d.ts +19 -0
  441. package/dist/database/runtime-reservations.js +1 -0
  442. package/dist/database/schema-operations.d.ts +18 -0
  443. package/dist/database/schema-operations.js +1 -0
  444. package/dist/database/schema-source.d.ts +93 -0
  445. package/dist/database/schema-source.js +3 -0
  446. package/dist/database/source-refresh-lock.d.ts +8 -0
  447. package/dist/database/source-refresh-lock.js +1 -0
  448. package/dist/database/source-url.d.ts +22 -0
  449. package/dist/database/source-url.js +2 -0
  450. package/dist/database/state-files.d.ts +13 -0
  451. package/dist/database/state-files.js +1 -0
  452. package/dist/database/state.d.ts +26 -0
  453. package/dist/database/state.js +1 -0
  454. package/dist/database/steps.d.ts +16 -0
  455. package/dist/database/steps.js +4 -0
  456. package/dist/database/template-steps.d.ts +35 -0
  457. package/dist/database/template-steps.js +4 -0
  458. package/dist/domain/file-timeout.d.ts +28 -0
  459. package/dist/domain/file-timeout.js +1 -0
  460. package/dist/domain/identifiers.d.ts +9 -0
  461. package/dist/domain/identifiers.js +1 -0
  462. package/dist/domain/operation-display.d.ts +10 -0
  463. package/dist/domain/operation-display.js +1 -0
  464. package/dist/domain/operation-reason.d.ts +5 -0
  465. package/dist/domain/operation-reason.js +1 -0
  466. package/dist/domain/postgres-route.d.ts +4 -0
  467. package/dist/domain/postgres-route.js +1 -0
  468. package/dist/domain/runtime-identity.d.ts +1 -0
  469. package/dist/domain/runtime-identity.js +1 -0
  470. package/dist/domain/runtime-isolation-contract.d.ts +5 -0
  471. package/dist/domain/runtime-isolation-contract.js +1 -0
  472. package/dist/domain/service-name.d.ts +2 -0
  473. package/dist/domain/service-name.js +1 -0
  474. package/dist/domain/suite-selection.d.ts +20 -0
  475. package/dist/domain/suite-selection.js +1 -0
  476. package/dist/domain/test-outcomes.d.ts +3 -0
  477. package/dist/domain/test-outcomes.js +1 -0
  478. package/dist/domain/test-types.d.ts +16 -0
  479. package/dist/domain/test-types.js +1 -0
  480. package/dist/engines/adapters/evidence-files.d.ts +32 -0
  481. package/dist/engines/adapters/evidence-files.js +1 -0
  482. package/dist/engines/adapters/evidence-identity.d.ts +12 -0
  483. package/dist/engines/adapters/evidence-identity.js +1 -0
  484. package/dist/engines/adapters/execution.d.ts +38 -0
  485. package/dist/engines/adapters/execution.js +1 -0
  486. package/dist/engines/adapters/native-report.d.ts +25 -0
  487. package/dist/engines/adapters/native-report.js +1 -0
  488. package/dist/engines/adapters/workspace.d.ts +4 -0
  489. package/dist/engines/adapters/workspace.js +1 -0
  490. package/dist/engines/api/capabilities.d.ts +31 -0
  491. package/dist/engines/api/capabilities.js +1 -0
  492. package/dist/engines/api/evidence.d.ts +38 -0
  493. package/dist/engines/api/evidence.js +1 -0
  494. package/dist/engines/api/execution-observer.d.ts +8 -0
  495. package/dist/engines/api/execution-observer.js +1 -0
  496. package/dist/engines/api/execution-scope.d.ts +17 -0
  497. package/dist/engines/api/execution-scope.js +1 -0
  498. package/dist/engines/api/execution.d.ts +99 -0
  499. package/dist/engines/api/execution.js +1 -0
  500. package/dist/engines/api/index.d.ts +5 -0
  501. package/dist/engines/api/index.js +1 -0
  502. package/dist/engines/api/k6-runtime-input.d.ts +26 -0
  503. package/dist/engines/api/k6-runtime-input.js +1 -0
  504. package/dist/engines/api/runtime-artifact.d.ts +19 -0
  505. package/dist/engines/api/runtime-artifact.js +1 -0
  506. package/dist/engines/bundle-cache.d.ts +32 -0
  507. package/dist/engines/bundle-cache.js +1 -0
  508. package/dist/engines/catalog.d.ts +32 -0
  509. package/dist/engines/catalog.js +1 -0
  510. package/dist/engines/contracts/fixture-manifest.d.ts +34 -0
  511. package/dist/engines/contracts/fixture-manifest.js +1 -0
  512. package/dist/engines/contracts/json-bounds.d.ts +36 -0
  513. package/dist/engines/contracts/json-bounds.js +2 -0
  514. package/dist/engines/contracts/k6-repository-configuration.d.ts +12 -0
  515. package/dist/engines/contracts/k6-repository-configuration.js +1 -0
  516. package/dist/engines/contracts/test-context.d.ts +15 -0
  517. package/dist/engines/contracts/test-context.js +1 -0
  518. package/dist/engines/definitions.d.ts +15 -0
  519. package/dist/engines/definitions.js +1 -0
  520. package/dist/engines/factory.d.ts +6 -0
  521. package/dist/engines/factory.js +1 -0
  522. package/dist/engines/installation-catalog.d.ts +27 -0
  523. package/dist/engines/installation-catalog.js +1 -0
  524. package/dist/engines/installations/k6.d.ts +98 -0
  525. package/dist/engines/installations/k6.js +1 -0
  526. package/dist/engines/installations/node-vitest.d.ts +47 -0
  527. package/dist/engines/installations/node-vitest.js +1 -0
  528. package/dist/engines/installations/package-resolution.d.ts +51 -0
  529. package/dist/engines/installations/package-resolution.js +1 -0
  530. package/dist/engines/installations/playwright-resolution-child.d.ts +1 -0
  531. package/dist/engines/installations/playwright-resolution-child.js +2 -0
  532. package/dist/engines/installations/playwright.d.ts +85 -0
  533. package/dist/engines/installations/playwright.js +1 -0
  534. package/dist/engines/installations/types.d.ts +10 -0
  535. package/dist/engines/installations/types.js +1 -0
  536. package/dist/engines/k6/adapter/bundle.d.ts +25 -0
  537. package/dist/engines/k6/adapter/bundle.js +112 -0
  538. package/dist/engines/k6/adapter/evidence.d.ts +15 -0
  539. package/dist/engines/k6/adapter/evidence.js +4 -0
  540. package/dist/engines/k6/adapter/executor.d.ts +13 -0
  541. package/dist/engines/k6/adapter/executor.js +1 -0
  542. package/dist/engines/k6/adapter/index.d.ts +1 -0
  543. package/dist/engines/k6/adapter/index.js +1 -0
  544. package/dist/engines/k6/adapter/input.d.ts +21 -0
  545. package/dist/engines/k6/adapter/input.js +1 -0
  546. package/dist/engines/k6/adapter/native-summary.d.ts +11 -0
  547. package/dist/engines/k6/adapter/native-summary.js +1 -0
  548. package/dist/engines/k6/adapter/repository-configuration.d.ts +2 -0
  549. package/dist/engines/k6/adapter/repository-configuration.js +1 -0
  550. package/dist/engines/k6/authoring-type-paths.d.ts +3 -0
  551. package/dist/engines/k6/authoring-type-paths.js +1 -0
  552. package/dist/engines/k6/runtime/ambient-types/bundle-manifest.json +146 -0
  553. package/dist/engines/k6/runtime/ambient-types/k6/LICENSE +21 -0
  554. package/dist/engines/k6/runtime/ambient-types/k6/browser/index.d.ts +6332 -0
  555. package/dist/engines/k6/runtime/ambient-types/k6/crypto/index.d.ts +218 -0
  556. package/dist/engines/k6/runtime/ambient-types/k6/data/index.d.ts +16 -0
  557. package/dist/engines/k6/runtime/ambient-types/k6/encoding/index.d.ts +46 -0
  558. package/dist/engines/k6/runtime/ambient-types/k6/execution/index.d.ts +127 -0
  559. package/dist/engines/k6/runtime/ambient-types/k6/experimental/csv/index.d.ts +96 -0
  560. package/dist/engines/k6/runtime/ambient-types/k6/experimental/fs/index.d.ts +104 -0
  561. package/dist/engines/k6/runtime/ambient-types/k6/experimental/redis/index.d.ts +821 -0
  562. package/dist/engines/k6/runtime/ambient-types/k6/experimental/streams/index.d.ts +198 -0
  563. package/dist/engines/k6/runtime/ambient-types/k6/global.d.ts +83 -0
  564. package/dist/engines/k6/runtime/ambient-types/k6/html/index.d.ts +1325 -0
  565. package/dist/engines/k6/runtime/ambient-types/k6/http/index.d.ts +806 -0
  566. package/dist/engines/k6/runtime/ambient-types/k6/index.d.ts +126 -0
  567. package/dist/engines/k6/runtime/ambient-types/k6/metrics/index.d.ts +66 -0
  568. package/dist/engines/k6/runtime/ambient-types/k6/net/grpc/index.d.ts +247 -0
  569. package/dist/engines/k6/runtime/ambient-types/k6/options/index.d.ts +459 -0
  570. package/dist/engines/k6/runtime/ambient-types/k6/package.json +79 -0
  571. package/dist/engines/k6/runtime/ambient-types/k6/secrets/index.d.ts +36 -0
  572. package/dist/engines/k6/runtime/ambient-types/k6/timers/index.d.ts +47 -0
  573. package/dist/engines/k6/runtime/ambient-types/k6/websockets/index.d.ts +324 -0
  574. package/dist/engines/k6/runtime/ambient-types/k6/ws/index.d.ts +283 -0
  575. package/dist/engines/k6/runtime/ambient-types/xk6-sql/LICENSE +201 -0
  576. package/dist/engines/k6/runtime/ambient-types/xk6-sql/index.d.ts +397 -0
  577. package/dist/engines/k6/runtime/ambient-types/xk6-sql/package.json +15 -0
  578. package/dist/engines/k6/runtime/artifacts.d.ts +2 -0
  579. package/dist/engines/k6/runtime/artifacts.js +1 -0
  580. package/dist/engines/k6/runtime/checks.d.ts +17 -0
  581. package/dist/engines/k6/runtime/checks.js +1 -0
  582. package/dist/engines/k6/runtime/dal-fixtures.d.ts +24 -0
  583. package/dist/engines/k6/runtime/dal-fixtures.js +1 -0
  584. package/dist/engines/k6/runtime/dal-suite.d.ts +24 -0
  585. package/dist/engines/k6/runtime/dal-suite.js +1 -0
  586. package/dist/engines/k6/runtime/dal.d.ts +10 -0
  587. package/dist/engines/k6/runtime/dal.js +1 -0
  588. package/dist/engines/k6/runtime/fixtures.d.ts +3 -0
  589. package/dist/engines/k6/runtime/fixtures.js +1 -0
  590. package/dist/engines/k6/runtime/http-assertions.d.ts +19 -0
  591. package/dist/engines/k6/runtime/http-assertions.js +1 -0
  592. package/dist/engines/k6/runtime/http-checks.d.ts +19 -0
  593. package/dist/engines/k6/runtime/http-checks.js +1 -0
  594. package/dist/engines/k6/runtime/http-suite-runtime.d.ts +103 -0
  595. package/dist/engines/k6/runtime/http-suite-runtime.js +1 -0
  596. package/dist/engines/k6/runtime/http.d.ts +15 -0
  597. package/dist/engines/k6/runtime/http.js +1 -0
  598. package/dist/engines/k6/runtime/index.d.ts +11 -0
  599. package/dist/engines/k6/runtime/index.js +1 -0
  600. package/dist/engines/k6/runtime/input.d.ts +3 -0
  601. package/dist/engines/k6/runtime/input.js +1 -0
  602. package/dist/engines/k6/runtime/k6-repository-configuration.d.ts +9 -0
  603. package/dist/engines/k6/runtime/k6-repository-configuration.js +1 -0
  604. package/dist/engines/k6/runtime/node-setup.d.ts +13 -0
  605. package/dist/engines/k6/runtime/node-setup.js +1 -0
  606. package/dist/engines/k6/runtime/runtime-globals.d.ts +10 -0
  607. package/dist/engines/k6/runtime/runtime-globals.js +1 -0
  608. package/dist/engines/k6/runtime/runtime.d.ts +54 -0
  609. package/dist/engines/k6/runtime/runtime.js +1 -0
  610. package/dist/engines/k6/runtime/shared/assertion-details.d.ts +19 -0
  611. package/dist/engines/k6/runtime/shared/assertion-details.js +2 -0
  612. package/dist/engines/k6/runtime/shared/db-normalization.d.ts +19 -0
  613. package/dist/engines/k6/runtime/shared/db-normalization.js +1 -0
  614. package/dist/engines/k6/runtime/shared/error-body.d.ts +3 -0
  615. package/dist/engines/k6/runtime/shared/error-body.js +1 -0
  616. package/dist/engines/k6/runtime/shared/file-data.d.ts +1 -0
  617. package/dist/engines/k6/runtime/shared/file-data.js +1 -0
  618. package/dist/engines/k6/runtime/shared/fixture-engine.d.ts +8 -0
  619. package/dist/engines/k6/runtime/shared/fixture-engine.js +2 -0
  620. package/dist/engines/k6/runtime/shared/http-check-plan.d.ts +29 -0
  621. package/dist/engines/k6/runtime/shared/http-check-plan.js +1 -0
  622. package/dist/engines/k6/runtime/shared/http-parsing.d.ts +10 -0
  623. package/dist/engines/k6/runtime/shared/http-parsing.js +3 -0
  624. package/dist/engines/k6/runtime/shared/ordering.d.ts +2 -0
  625. package/dist/engines/k6/runtime/shared/ordering.js +1 -0
  626. package/dist/engines/k6/runtime/shared/properties.d.ts +1 -0
  627. package/dist/engines/k6/runtime/shared/properties.js +1 -0
  628. package/dist/engines/k6/runtime/suite.d.ts +4 -0
  629. package/dist/engines/k6/runtime/suite.js +1 -0
  630. package/dist/engines/k6/runtime/types.d.ts +242 -0
  631. package/dist/engines/k6/runtime/types.js +1 -0
  632. package/dist/engines/k6/runtime/xk6-sql-driver-postgres.d.ts +7 -0
  633. package/dist/engines/k6/runtime/xk6-sql-driver-postgres.js +1 -0
  634. package/dist/engines/managed-module-resolution-policy-input.d.ts +9 -0
  635. package/dist/engines/managed-module-resolution-policy-input.js +1 -0
  636. package/dist/engines/managed-module-resolution-policy.d.ts +25 -0
  637. package/dist/engines/managed-module-resolution-policy.js +1 -0
  638. package/dist/engines/managed-module-resolution.d.ts +13 -0
  639. package/dist/engines/managed-module-resolution.js +697 -0
  640. package/dist/engines/manager.d.ts +24 -0
  641. package/dist/engines/manager.js +1 -0
  642. package/dist/engines/node-vitest/adapter/adapter.d.ts +16 -0
  643. package/dist/engines/node-vitest/adapter/adapter.js +1 -0
  644. package/dist/engines/node-vitest/adapter/consumer-typescript-paths.d.ts +17 -0
  645. package/dist/engines/node-vitest/adapter/consumer-typescript-paths.js +3 -0
  646. package/dist/engines/node-vitest/adapter/evidence.d.ts +33 -0
  647. package/dist/engines/node-vitest/adapter/evidence.js +2 -0
  648. package/dist/engines/node-vitest/adapter/failure-details.d.ts +2 -0
  649. package/dist/engines/node-vitest/adapter/failure-details.js +2 -0
  650. package/dist/engines/node-vitest/adapter/index.d.ts +1 -0
  651. package/dist/engines/node-vitest/adapter/index.js +1 -0
  652. package/dist/engines/node-vitest/adapter/reporter.d.ts +7 -0
  653. package/dist/engines/node-vitest/adapter/reporter.js +1 -0
  654. package/dist/engines/node-vitest/adapter/resolution.d.ts +12 -0
  655. package/dist/engines/node-vitest/adapter/resolution.js +1 -0
  656. package/dist/engines/node-vitest/adapter/workspace.d.ts +19 -0
  657. package/dist/engines/node-vitest/adapter/workspace.js +177 -0
  658. package/dist/engines/node-vitest/runtime/contract/index.d.ts +64 -0
  659. package/dist/engines/node-vitest/runtime/contract/index.js +1 -0
  660. package/dist/engines/node-vitest/runtime/data/http.d.ts +4 -0
  661. package/dist/engines/node-vitest/runtime/data/http.js +1 -0
  662. package/dist/engines/node-vitest/runtime/data/index.d.ts +8 -0
  663. package/dist/engines/node-vitest/runtime/data/index.js +1 -0
  664. package/dist/engines/node-vitest/runtime/data/primitives.d.ts +1 -0
  665. package/dist/engines/node-vitest/runtime/data/primitives.js +1 -0
  666. package/dist/engines/node-vitest/runtime/data/report.d.ts +3 -0
  667. package/dist/engines/node-vitest/runtime/data/report.js +6 -0
  668. package/dist/engines/node-vitest/runtime/data/runner.d.ts +4 -0
  669. package/dist/engines/node-vitest/runtime/data/runner.js +1 -0
  670. package/dist/engines/node-vitest/runtime/data/scenario.d.ts +12 -0
  671. package/dist/engines/node-vitest/runtime/data/scenario.js +2 -0
  672. package/dist/engines/node-vitest/runtime/data/types.d.ts +412 -0
  673. package/dist/engines/node-vitest/runtime/data/types.js +1 -0
  674. package/dist/engines/node-vitest/runtime/runtime-input.d.ts +63 -0
  675. package/dist/engines/node-vitest/runtime/runtime-input.js +1 -0
  676. package/dist/engines/playwright/adapter/adapter.d.ts +18 -0
  677. package/dist/engines/playwright/adapter/adapter.js +1 -0
  678. package/dist/engines/playwright/adapter/attachments.d.ts +25 -0
  679. package/dist/engines/playwright/adapter/attachments.js +1 -0
  680. package/dist/engines/playwright/adapter/config.d.ts +45 -0
  681. package/dist/engines/playwright/adapter/config.js +167 -0
  682. package/dist/engines/playwright/adapter/evidence-validation.d.ts +12 -0
  683. package/dist/engines/playwright/adapter/evidence-validation.js +1 -0
  684. package/dist/engines/playwright/adapter/evidence.d.ts +32 -0
  685. package/dist/engines/playwright/adapter/evidence.js +1 -0
  686. package/dist/engines/playwright/adapter/failure-details.d.ts +2 -0
  687. package/dist/engines/playwright/adapter/failure-details.js +2 -0
  688. package/dist/engines/playwright/adapter/index.d.ts +3 -0
  689. package/dist/engines/playwright/adapter/index.js +1 -0
  690. package/dist/engines/playwright/adapter/reporter.d.ts +12 -0
  691. package/dist/engines/playwright/adapter/reporter.js +1 -0
  692. package/dist/engines/playwright/runtime/config-file.d.ts +2 -0
  693. package/dist/engines/playwright/runtime/config-file.js +1 -0
  694. package/dist/engines/playwright/runtime/config.d.ts +24 -0
  695. package/dist/engines/playwright/runtime/config.js +1 -0
  696. package/dist/engines/playwright/runtime/index.d.ts +4 -0
  697. package/dist/engines/playwright/runtime/index.js +1 -0
  698. package/dist/engines/playwright/runtime/runtime-input.d.ts +36 -0
  699. package/dist/engines/playwright/runtime/runtime-input.js +151 -0
  700. package/dist/engines/playwright/runtime/sandbox.d.ts +84 -0
  701. package/dist/engines/playwright/runtime/sandbox.js +1 -0
  702. package/dist/engines/runtime-input-file.d.ts +25 -0
  703. package/dist/engines/runtime-input-file.js +1 -0
  704. package/dist/environment/lifecycle-artifacts.d.ts +7 -0
  705. package/dist/environment/lifecycle-artifacts.js +1 -0
  706. package/dist/environment/lifecycle-controller.d.ts +71 -0
  707. package/dist/environment/lifecycle-controller.js +1 -0
  708. package/dist/environment/lifecycle.d.ts +29 -0
  709. package/dist/environment/lifecycle.js +1 -0
  710. package/dist/environment/maintenance.d.ts +68 -0
  711. package/dist/environment/maintenance.js +1 -0
  712. package/dist/environment/planning-types.d.ts +35 -0
  713. package/dist/environment/planning-types.js +1 -0
  714. package/dist/environment/readiness.d.ts +12 -0
  715. package/dist/environment/readiness.js +1 -0
  716. package/dist/environment/ready-environment.d.ts +17 -0
  717. package/dist/environment/ready-environment.js +1 -0
  718. package/dist/environment/run-environment.d.ts +38 -0
  719. package/dist/environment/run-environment.js +1 -0
  720. package/dist/environment/run-stopping.d.ts +13 -0
  721. package/dist/environment/run-stopping.js +1 -0
  722. package/dist/environment/runtime-contexts.d.ts +32 -0
  723. package/dist/environment/runtime-contexts.js +1 -0
  724. package/dist/environment/runtime-manager.d.ts +95 -0
  725. package/dist/environment/runtime-manager.js +1 -0
  726. package/dist/environment/runtime-planning.d.ts +16 -0
  727. package/dist/environment/runtime-planning.js +1 -0
  728. package/dist/environment/runtime-preparation.d.ts +30 -0
  729. package/dist/environment/runtime-preparation.js +1 -0
  730. package/dist/environment/runtime-service.d.ts +18 -0
  731. package/dist/environment/runtime-service.js +1 -0
  732. package/dist/environment/services.d.ts +48 -0
  733. package/dist/environment/services.js +1 -0
  734. package/dist/environment/state.d.ts +18 -0
  735. package/dist/environment/state.js +1 -0
  736. package/dist/environment/status-runtime.d.ts +53 -0
  737. package/dist/environment/status-runtime.js +1 -0
  738. package/dist/environment/template.d.ts +180 -0
  739. package/dist/environment/template.js +1 -0
  740. package/dist/evidence/artifact-config.d.ts +14 -0
  741. package/dist/evidence/artifact-config.js +1 -0
  742. package/dist/evidence/artifact-validation.d.ts +5 -0
  743. package/dist/evidence/artifact-validation.js +1 -0
  744. package/dist/evidence/artifacts.d.ts +75 -0
  745. package/dist/evidence/artifacts.js +2 -0
  746. package/dist/evidence/bundles.d.ts +28 -0
  747. package/dist/evidence/bundles.js +1 -0
  748. package/dist/evidence/ci-provenance.d.ts +9 -0
  749. package/dist/evidence/ci-provenance.js +1 -0
  750. package/dist/evidence/contracts.d.ts +162 -0
  751. package/dist/evidence/contracts.js +1 -0
  752. package/dist/evidence/file-evidence.d.ts +23 -0
  753. package/dist/evidence/file-evidence.js +1 -0
  754. package/dist/evidence/finalization.d.ts +9 -0
  755. package/dist/evidence/finalization.js +1 -0
  756. package/dist/evidence/index.d.ts +8 -0
  757. package/dist/evidence/index.js +1 -0
  758. package/dist/evidence/logs.d.ts +31 -0
  759. package/dist/evidence/logs.js +2 -0
  760. package/dist/evidence/operation-timings.d.ts +60 -0
  761. package/dist/evidence/operation-timings.js +1 -0
  762. package/dist/evidence/read-bundle.d.ts +4 -0
  763. package/dist/evidence/read-bundle.js +1 -0
  764. package/dist/evidence/read-fields.d.ts +22 -0
  765. package/dist/evidence/read-fields.js +1 -0
  766. package/dist/evidence/read-provenance.d.ts +2 -0
  767. package/dist/evidence/read-provenance.js +1 -0
  768. package/dist/evidence/read-redaction.d.ts +2 -0
  769. package/dist/evidence/read-redaction.js +1 -0
  770. package/dist/evidence/read-retention.d.ts +2 -0
  771. package/dist/evidence/read-retention.js +1 -0
  772. package/dist/evidence/read-run.d.ts +2 -0
  773. package/dist/evidence/read-run.js +1 -0
  774. package/dist/evidence/reading.d.ts +28 -0
  775. package/dist/evidence/reading.js +1 -0
  776. package/dist/evidence/reporting-types.d.ts +330 -0
  777. package/dist/evidence/reporting-types.js +1 -0
  778. package/dist/evidence/reporting.d.ts +3 -0
  779. package/dist/evidence/reporting.js +1 -0
  780. package/dist/evidence/secure-file-copy.d.ts +24 -0
  781. package/dist/evidence/secure-file-copy.js +1 -0
  782. package/dist/evidence/setup-progress.d.ts +63 -0
  783. package/dist/evidence/setup-progress.js +1 -0
  784. package/dist/evidence/step-output.d.ts +16 -0
  785. package/dist/evidence/step-output.js +6 -0
  786. package/dist/evidence/storage-inventory.d.ts +27 -0
  787. package/dist/evidence/storage-inventory.js +1 -0
  788. package/dist/evidence/storage.d.ts +27 -0
  789. package/dist/evidence/storage.js +2 -0
  790. package/dist/evidence/timing.d.ts +23 -0
  791. package/dist/evidence/timing.js +1 -0
  792. package/dist/file.d.ts +11 -0
  793. package/dist/file.js +1 -0
  794. package/dist/index.d.ts +4 -0
  795. package/dist/index.js +1 -0
  796. package/dist/kernel/error-serialization.d.ts +38 -0
  797. package/dist/kernel/error-serialization.js +1 -0
  798. package/dist/kernel/redaction.d.ts +1 -0
  799. package/dist/kernel/redaction.js +1 -0
  800. package/dist/kernel/unknown-values.d.ts +6 -0
  801. package/dist/kernel/unknown-values.js +1 -0
  802. package/dist/process/capture-output.d.ts +7 -0
  803. package/dist/process/capture-output.js +1 -0
  804. package/dist/process/command-shell.d.ts +1 -0
  805. package/dist/process/command-shell.js +1 -0
  806. package/dist/process/environment-overlay.d.ts +17 -0
  807. package/dist/process/environment-overlay.js +1 -0
  808. package/dist/process/environment.d.ts +33 -0
  809. package/dist/process/environment.js +1 -0
  810. package/dist/process/files/contained-path.d.ts +8 -0
  811. package/dist/process/files/contained-path.js +1 -0
  812. package/dist/process/files/directory-status.d.ts +14 -0
  813. package/dist/process/files/directory-status.js +1 -0
  814. package/dist/process/files/dotenv.d.ts +2 -0
  815. package/dist/process/files/dotenv.js +1 -0
  816. package/dist/process/files/file-snapshot.d.ts +34 -0
  817. package/dist/process/files/file-snapshot.js +1 -0
  818. package/dist/process/files/json-file.d.ts +11 -0
  819. package/dist/process/files/json-file.js +1 -0
  820. package/dist/process/files/paths.d.ts +1 -0
  821. package/dist/process/files/paths.js +1 -0
  822. package/dist/process/files/temp-dir.d.ts +11 -0
  823. package/dist/process/files/temp-dir.js +1 -0
  824. package/dist/process/host/metadata.d.ts +6 -0
  825. package/dist/process/host/metadata.js +1 -0
  826. package/dist/process/host/platform.d.ts +57 -0
  827. package/dist/process/host/platform.js +1 -0
  828. package/dist/process/host-command.d.ts +4 -0
  829. package/dist/process/host-command.js +3 -0
  830. package/dist/process/host-inspection-command.d.ts +13 -0
  831. package/dist/process/host-inspection-command.js +1 -0
  832. package/dist/process/host-process.d.ts +14 -0
  833. package/dist/process/host-process.js +1 -0
  834. package/dist/process/index.d.ts +9 -0
  835. package/dist/process/index.js +1 -0
  836. package/dist/process/lifecycle-fence.d.ts +11 -0
  837. package/dist/process/lifecycle-fence.js +1 -0
  838. package/dist/process/locks.d.ts +28 -0
  839. package/dist/process/locks.js +4 -0
  840. package/dist/process/process-contracts.d.ts +70 -0
  841. package/dist/process/process-contracts.js +1 -0
  842. package/dist/process/process-group.d.ts +12 -0
  843. package/dist/process/process-group.js +1 -0
  844. package/dist/process/process-identity.d.ts +27 -0
  845. package/dist/process/process-identity.js +1 -0
  846. package/dist/process/process-limits.d.ts +6 -0
  847. package/dist/process/process-limits.js +1 -0
  848. package/dist/process/process.d.ts +11 -0
  849. package/dist/process/process.js +1 -0
  850. package/dist/process/readiness.d.ts +37 -0
  851. package/dist/process/readiness.js +1 -0
  852. package/dist/process/recovery.d.ts +3 -0
  853. package/dist/process/recovery.js +1 -0
  854. package/dist/process/runs/manifest.d.ts +85 -0
  855. package/dist/process/runs/manifest.js +1 -0
  856. package/dist/process/runs/ownership.d.ts +11 -0
  857. package/dist/process/runs/ownership.js +1 -0
  858. package/dist/process/runs/product-state.d.ts +2 -0
  859. package/dist/process/runs/product-state.js +1 -0
  860. package/dist/process/runs/schema.d.ts +3 -0
  861. package/dist/process/runs/schema.js +1 -0
  862. package/dist/process/runs/stop.d.ts +19 -0
  863. package/dist/process/runs/stop.js +1 -0
  864. package/dist/process/runtime-socket.d.ts +4 -0
  865. package/dist/process/runtime-socket.js +1 -0
  866. package/dist/process/service-processes.d.ts +13 -0
  867. package/dist/process/service-processes.js +1 -0
  868. package/dist/process/shutdown.d.ts +10 -0
  869. package/dist/process/shutdown.js +1 -0
  870. package/dist/process/windows-cli-owner.d.ts +2 -0
  871. package/dist/process/windows-cli-owner.js +3 -0
  872. package/dist/process/windows-native.d.ts +6 -0
  873. package/dist/process/windows-native.js +1 -0
  874. package/dist/process/windows-process-identity.d.ts +4 -0
  875. package/dist/process/windows-process-identity.js +1 -0
  876. package/dist/repo/ci-environment.d.ts +7 -0
  877. package/dist/repo/ci-environment.js +1 -0
  878. package/dist/repo/fingerprint-policy.d.ts +15 -0
  879. package/dist/repo/fingerprint-policy.js +1 -0
  880. package/dist/repo/git-path.d.ts +2 -0
  881. package/dist/repo/git-path.js +1 -0
  882. package/dist/repo/managed-git.d.ts +10 -0
  883. package/dist/repo/managed-git.js +1 -0
  884. package/dist/repo/metadata.d.ts +3 -0
  885. package/dist/repo/metadata.js +1 -0
  886. package/dist/repo/physical-tree.d.ts +37 -0
  887. package/dist/repo/physical-tree.js +1 -0
  888. package/dist/repo/remote.d.ts +6 -0
  889. package/dist/repo/remote.js +1 -0
  890. package/dist/repo/state.d.ts +25 -0
  891. package/dist/repo/state.js +5 -0
  892. package/dist/steps/build-config.d.ts +35 -0
  893. package/dist/steps/build-config.js +1 -0
  894. package/dist/steps/configured-step-testkit-modules.d.ts +19 -0
  895. package/dist/steps/configured-step-testkit-modules.js +1 -0
  896. package/dist/steps/configured-steps.d.ts +51 -0
  897. package/dist/steps/configured-steps.js +1 -0
  898. package/dist/steps/environment.d.ts +78 -0
  899. package/dist/steps/environment.js +1 -0
  900. package/dist/steps/index.d.ts +2 -0
  901. package/dist/steps/index.js +1 -0
  902. package/dist/steps/module-runner.d.ts +1 -0
  903. package/dist/steps/module-runner.js +1 -0
  904. package/dist/steps/run.d.ts +36 -0
  905. package/dist/steps/run.js +3 -0
  906. package/dist/toolchains/archive.d.ts +53 -0
  907. package/dist/toolchains/archive.js +1 -0
  908. package/dist/toolchains/esbuild.d.ts +9 -0
  909. package/dist/toolchains/esbuild.js +1 -0
  910. package/dist/toolchains/host-node-support.d.ts +3 -0
  911. package/dist/toolchains/host-node-support.js +1 -0
  912. package/dist/toolchains/index.d.ts +114 -0
  913. package/dist/toolchains/index.js +4 -0
  914. package/dist/toolchains/managed-node-releases.d.ts +28 -0
  915. package/dist/toolchains/managed-node-releases.js +1 -0
  916. package/dist/toolchains/node-cache.d.ts +20 -0
  917. package/dist/toolchains/node-cache.js +1 -0
  918. package/dist/toolchains/node-integrity.d.ts +16 -0
  919. package/dist/toolchains/node-integrity.js +1 -0
  920. package/dist/toolchains/node-provisioning.d.ts +29 -0
  921. package/dist/toolchains/node-provisioning.js +2 -0
  922. package/dist/toolchains/semver.d.ts +13 -0
  923. package/dist/toolchains/semver.js +1 -0
  924. package/dist/toolchains/shared-operation.d.ts +11 -0
  925. package/dist/toolchains/shared-operation.js +1 -0
  926. package/dist/toolchains/timeouts.d.ts +1 -0
  927. package/dist/toolchains/timeouts.js +1 -0
  928. package/dist/toolchains/vitest/index.d.ts +13 -0
  929. package/dist/toolchains/vitest/index.js +1 -0
  930. package/docs/cloud-control.md +105 -0
  931. package/docs/engine-architecture.md +631 -0
  932. package/docs/test-types.md +120 -0
  933. package/docs/testkit-cloud-boundary.md +640 -0
  934. package/node_modules/@isaacs/fs-minipass/LICENSE +15 -0
  935. package/node_modules/@isaacs/fs-minipass/README.md +71 -0
  936. package/node_modules/@isaacs/fs-minipass/dist/commonjs/index.d.ts +118 -0
  937. package/node_modules/@isaacs/fs-minipass/dist/commonjs/index.d.ts.map +1 -0
  938. package/node_modules/@isaacs/fs-minipass/dist/commonjs/index.js +430 -0
  939. package/node_modules/@isaacs/fs-minipass/dist/commonjs/index.js.map +1 -0
  940. package/node_modules/@isaacs/fs-minipass/dist/commonjs/package.json +3 -0
  941. package/node_modules/@isaacs/fs-minipass/dist/esm/index.d.ts +118 -0
  942. package/node_modules/@isaacs/fs-minipass/dist/esm/index.d.ts.map +1 -0
  943. package/node_modules/@isaacs/fs-minipass/dist/esm/index.js +420 -0
  944. package/node_modules/@isaacs/fs-minipass/dist/esm/index.js.map +1 -0
  945. package/node_modules/@isaacs/fs-minipass/dist/esm/package.json +3 -0
  946. package/node_modules/@isaacs/fs-minipass/package.json +72 -0
  947. package/node_modules/buffer-crc32/LICENSE +19 -0
  948. package/node_modules/buffer-crc32/README.md +55 -0
  949. package/node_modules/buffer-crc32/dist/index.cjs +306 -0
  950. package/node_modules/buffer-crc32/dist/index.d.cts +35 -0
  951. package/node_modules/buffer-crc32/dist/index.d.mts +35 -0
  952. package/node_modules/buffer-crc32/dist/index.mjs +304 -0
  953. package/node_modules/buffer-crc32/index.d.ts +35 -0
  954. package/node_modules/buffer-crc32/package.json +54 -0
  955. package/node_modules/chownr/LICENSE.md +63 -0
  956. package/node_modules/chownr/README.md +3 -0
  957. package/node_modules/chownr/dist/commonjs/index.d.ts +3 -0
  958. package/node_modules/chownr/dist/commonjs/index.d.ts.map +1 -0
  959. package/node_modules/chownr/dist/commonjs/index.js +93 -0
  960. package/node_modules/chownr/dist/commonjs/index.js.map +1 -0
  961. package/node_modules/chownr/dist/commonjs/package.json +3 -0
  962. package/node_modules/chownr/dist/esm/index.d.ts +3 -0
  963. package/node_modules/chownr/dist/esm/index.d.ts.map +1 -0
  964. package/node_modules/chownr/dist/esm/index.js +85 -0
  965. package/node_modules/chownr/dist/esm/index.js.map +1 -0
  966. package/node_modules/chownr/dist/esm/package.json +3 -0
  967. package/node_modules/chownr/package.json +69 -0
  968. package/node_modules/diff/CONTRIBUTING.md +28 -0
  969. package/node_modules/diff/LICENSE +29 -0
  970. package/node_modules/diff/README.md +468 -0
  971. package/node_modules/diff/dist/diff.js +2313 -0
  972. package/node_modules/diff/dist/diff.min.js +1 -0
  973. package/node_modules/diff/eslint.config.mjs +182 -0
  974. package/node_modules/diff/libcjs/convert/dmp.d.ts +8 -0
  975. package/node_modules/diff/libcjs/convert/dmp.d.ts.map +1 -0
  976. package/node_modules/diff/libcjs/convert/dmp.js +24 -0
  977. package/node_modules/diff/libcjs/convert/xml.d.ts +6 -0
  978. package/node_modules/diff/libcjs/convert/xml.d.ts.map +1 -0
  979. package/node_modules/diff/libcjs/convert/xml.js +34 -0
  980. package/node_modules/diff/libcjs/diff/array.d.ts +19 -0
  981. package/node_modules/diff/libcjs/diff/array.d.ts.map +1 -0
  982. package/node_modules/diff/libcjs/diff/array.js +23 -0
  983. package/node_modules/diff/libcjs/diff/base.d.ts +20 -0
  984. package/node_modules/diff/libcjs/diff/base.d.ts.map +1 -0
  985. package/node_modules/diff/libcjs/diff/base.js +256 -0
  986. package/node_modules/diff/libcjs/diff/character.d.ts +19 -0
  987. package/node_modules/diff/libcjs/diff/character.d.ts.map +1 -0
  988. package/node_modules/diff/libcjs/diff/character.js +14 -0
  989. package/node_modules/diff/libcjs/diff/css.d.ts +18 -0
  990. package/node_modules/diff/libcjs/diff/css.d.ts.map +1 -0
  991. package/node_modules/diff/libcjs/diff/css.js +17 -0
  992. package/node_modules/diff/libcjs/diff/json.d.ts +24 -0
  993. package/node_modules/diff/libcjs/diff/json.d.ts.map +1 -0
  994. package/node_modules/diff/libcjs/diff/json.js +86 -0
  995. package/node_modules/diff/libcjs/diff/line.d.ts +24 -0
  996. package/node_modules/diff/libcjs/diff/line.d.ts.map +1 -0
  997. package/node_modules/diff/libcjs/diff/line.js +74 -0
  998. package/node_modules/diff/libcjs/diff/sentence.d.ts +21 -0
  999. package/node_modules/diff/libcjs/diff/sentence.d.ts.map +1 -0
  1000. package/node_modules/diff/libcjs/diff/sentence.js +50 -0
  1001. package/node_modules/diff/libcjs/diff/word.d.ts +35 -0
  1002. package/node_modules/diff/libcjs/diff/word.d.ts.map +1 -0
  1003. package/node_modules/diff/libcjs/diff/word.js +289 -0
  1004. package/node_modules/diff/libcjs/index.d.ts +20 -0
  1005. package/node_modules/diff/libcjs/index.d.ts.map +1 -0
  1006. package/node_modules/diff/libcjs/index.js +67 -0
  1007. package/node_modules/diff/libcjs/package.json +1 -0
  1008. package/node_modules/diff/libcjs/patch/apply.d.ts +62 -0
  1009. package/node_modules/diff/libcjs/patch/apply.d.ts.map +1 -0
  1010. package/node_modules/diff/libcjs/patch/apply.js +264 -0
  1011. package/node_modules/diff/libcjs/patch/create.d.ts +131 -0
  1012. package/node_modules/diff/libcjs/patch/create.d.ts.map +1 -0
  1013. package/node_modules/diff/libcjs/patch/create.js +364 -0
  1014. package/node_modules/diff/libcjs/patch/line-endings.d.ts +17 -0
  1015. package/node_modules/diff/libcjs/patch/line-endings.d.ts.map +1 -0
  1016. package/node_modules/diff/libcjs/patch/line-endings.js +50 -0
  1017. package/node_modules/diff/libcjs/patch/parse.d.ts +16 -0
  1018. package/node_modules/diff/libcjs/patch/parse.d.ts.map +1 -0
  1019. package/node_modules/diff/libcjs/patch/parse.js +515 -0
  1020. package/node_modules/diff/libcjs/patch/reverse.d.ts +22 -0
  1021. package/node_modules/diff/libcjs/patch/reverse.d.ts.map +1 -0
  1022. package/node_modules/diff/libcjs/patch/reverse.js +63 -0
  1023. package/node_modules/diff/libcjs/types.d.ts +260 -0
  1024. package/node_modules/diff/libcjs/types.d.ts.map +1 -0
  1025. package/node_modules/diff/libcjs/types.js +2 -0
  1026. package/node_modules/diff/libcjs/util/array.d.ts +3 -0
  1027. package/node_modules/diff/libcjs/util/array.d.ts.map +1 -0
  1028. package/node_modules/diff/libcjs/util/array.js +21 -0
  1029. package/node_modules/diff/libcjs/util/distance-iterator.d.ts +2 -0
  1030. package/node_modules/diff/libcjs/util/distance-iterator.d.ts.map +1 -0
  1031. package/node_modules/diff/libcjs/util/distance-iterator.js +40 -0
  1032. package/node_modules/diff/libcjs/util/params.d.ts +4 -0
  1033. package/node_modules/diff/libcjs/util/params.d.ts.map +1 -0
  1034. package/node_modules/diff/libcjs/util/params.js +17 -0
  1035. package/node_modules/diff/libcjs/util/string.d.ts +30 -0
  1036. package/node_modules/diff/libcjs/util/string.d.ts.map +1 -0
  1037. package/node_modules/diff/libcjs/util/string.js +199 -0
  1038. package/node_modules/diff/libesm/convert/dmp.d.ts +8 -0
  1039. package/node_modules/diff/libesm/convert/dmp.d.ts.map +1 -0
  1040. package/node_modules/diff/libesm/convert/dmp.js +21 -0
  1041. package/node_modules/diff/libesm/convert/xml.d.ts +6 -0
  1042. package/node_modules/diff/libesm/convert/xml.d.ts.map +1 -0
  1043. package/node_modules/diff/libesm/convert/xml.js +31 -0
  1044. package/node_modules/diff/libesm/diff/array.d.ts +19 -0
  1045. package/node_modules/diff/libesm/diff/array.d.ts.map +1 -0
  1046. package/node_modules/diff/libesm/diff/array.js +16 -0
  1047. package/node_modules/diff/libesm/diff/base.d.ts +20 -0
  1048. package/node_modules/diff/libesm/diff/base.d.ts.map +1 -0
  1049. package/node_modules/diff/libesm/diff/base.js +253 -0
  1050. package/node_modules/diff/libesm/diff/character.d.ts +19 -0
  1051. package/node_modules/diff/libesm/diff/character.d.ts.map +1 -0
  1052. package/node_modules/diff/libesm/diff/character.js +7 -0
  1053. package/node_modules/diff/libesm/diff/css.d.ts +18 -0
  1054. package/node_modules/diff/libesm/diff/css.d.ts.map +1 -0
  1055. package/node_modules/diff/libesm/diff/css.js +10 -0
  1056. package/node_modules/diff/libesm/diff/json.d.ts +24 -0
  1057. package/node_modules/diff/libesm/diff/json.d.ts.map +1 -0
  1058. package/node_modules/diff/libesm/diff/json.js +78 -0
  1059. package/node_modules/diff/libesm/diff/line.d.ts +24 -0
  1060. package/node_modules/diff/libesm/diff/line.d.ts.map +1 -0
  1061. package/node_modules/diff/libesm/diff/line.js +65 -0
  1062. package/node_modules/diff/libesm/diff/sentence.d.ts +21 -0
  1063. package/node_modules/diff/libesm/diff/sentence.d.ts.map +1 -0
  1064. package/node_modules/diff/libesm/diff/sentence.js +43 -0
  1065. package/node_modules/diff/libesm/diff/word.d.ts +35 -0
  1066. package/node_modules/diff/libesm/diff/word.d.ts.map +1 -0
  1067. package/node_modules/diff/libesm/diff/word.js +281 -0
  1068. package/node_modules/diff/libesm/index.d.ts +20 -0
  1069. package/node_modules/diff/libesm/index.d.ts.map +1 -0
  1070. package/node_modules/diff/libesm/index.js +30 -0
  1071. package/node_modules/diff/libesm/package.json +1 -0
  1072. package/node_modules/diff/libesm/patch/apply.d.ts +62 -0
  1073. package/node_modules/diff/libesm/patch/apply.d.ts.map +1 -0
  1074. package/node_modules/diff/libesm/patch/apply.js +257 -0
  1075. package/node_modules/diff/libesm/patch/create.d.ts +131 -0
  1076. package/node_modules/diff/libesm/patch/create.d.ts.map +1 -0
  1077. package/node_modules/diff/libesm/patch/create.js +357 -0
  1078. package/node_modules/diff/libesm/patch/line-endings.d.ts +17 -0
  1079. package/node_modules/diff/libesm/patch/line-endings.d.ts.map +1 -0
  1080. package/node_modules/diff/libesm/patch/line-endings.js +44 -0
  1081. package/node_modules/diff/libesm/patch/parse.d.ts +16 -0
  1082. package/node_modules/diff/libesm/patch/parse.d.ts.map +1 -0
  1083. package/node_modules/diff/libesm/patch/parse.js +512 -0
  1084. package/node_modules/diff/libesm/patch/reverse.d.ts +22 -0
  1085. package/node_modules/diff/libesm/patch/reverse.d.ts.map +1 -0
  1086. package/node_modules/diff/libesm/patch/reverse.js +60 -0
  1087. package/node_modules/diff/libesm/types.d.ts +260 -0
  1088. package/node_modules/diff/libesm/types.d.ts.map +1 -0
  1089. package/node_modules/diff/libesm/types.js +1 -0
  1090. package/node_modules/diff/libesm/util/array.d.ts +3 -0
  1091. package/node_modules/diff/libesm/util/array.d.ts.map +1 -0
  1092. package/node_modules/diff/libesm/util/array.js +17 -0
  1093. package/node_modules/diff/libesm/util/distance-iterator.d.ts +2 -0
  1094. package/node_modules/diff/libesm/util/distance-iterator.d.ts.map +1 -0
  1095. package/node_modules/diff/libesm/util/distance-iterator.js +37 -0
  1096. package/node_modules/diff/libesm/util/params.d.ts +4 -0
  1097. package/node_modules/diff/libesm/util/params.d.ts.map +1 -0
  1098. package/node_modules/diff/libesm/util/params.js +14 -0
  1099. package/node_modules/diff/libesm/util/string.d.ts +30 -0
  1100. package/node_modules/diff/libesm/util/string.d.ts.map +1 -0
  1101. package/node_modules/diff/libesm/util/string.js +184 -0
  1102. package/node_modules/diff/package.json +130 -0
  1103. package/node_modules/diff/release-notes.md +474 -0
  1104. package/node_modules/minipass/LICENSE.md +55 -0
  1105. package/node_modules/minipass/README.md +825 -0
  1106. package/node_modules/minipass/dist/commonjs/index.d.ts +545 -0
  1107. package/node_modules/minipass/dist/commonjs/index.d.ts.map +1 -0
  1108. package/node_modules/minipass/dist/commonjs/index.js +1038 -0
  1109. package/node_modules/minipass/dist/commonjs/index.js.map +1 -0
  1110. package/node_modules/minipass/dist/commonjs/package.json +3 -0
  1111. package/node_modules/minipass/dist/esm/index.d.ts +545 -0
  1112. package/node_modules/minipass/dist/esm/index.d.ts.map +1 -0
  1113. package/node_modules/minipass/dist/esm/index.js +1020 -0
  1114. package/node_modules/minipass/dist/esm/index.js.map +1 -0
  1115. package/node_modules/minipass/dist/esm/package.json +3 -0
  1116. package/node_modules/minipass/package.json +77 -0
  1117. package/node_modules/minizlib/LICENSE +26 -0
  1118. package/node_modules/minizlib/README.md +64 -0
  1119. package/node_modules/minizlib/dist/commonjs/constants.d.ts +2 -0
  1120. package/node_modules/minizlib/dist/commonjs/constants.d.ts.map +1 -0
  1121. package/node_modules/minizlib/dist/commonjs/constants.js +123 -0
  1122. package/node_modules/minizlib/dist/commonjs/constants.js.map +1 -0
  1123. package/node_modules/minizlib/dist/commonjs/index.d.ts +99 -0
  1124. package/node_modules/minizlib/dist/commonjs/index.d.ts.map +1 -0
  1125. package/node_modules/minizlib/dist/commonjs/index.js +416 -0
  1126. package/node_modules/minizlib/dist/commonjs/index.js.map +1 -0
  1127. package/node_modules/minizlib/dist/commonjs/package.json +3 -0
  1128. package/node_modules/minizlib/dist/esm/constants.d.ts +2 -0
  1129. package/node_modules/minizlib/dist/esm/constants.d.ts.map +1 -0
  1130. package/node_modules/minizlib/dist/esm/constants.js +117 -0
  1131. package/node_modules/minizlib/dist/esm/constants.js.map +1 -0
  1132. package/node_modules/minizlib/dist/esm/index.d.ts +99 -0
  1133. package/node_modules/minizlib/dist/esm/index.d.ts.map +1 -0
  1134. package/node_modules/minizlib/dist/esm/index.js +363 -0
  1135. package/node_modules/minizlib/dist/esm/index.js.map +1 -0
  1136. package/node_modules/minizlib/dist/esm/package.json +3 -0
  1137. package/node_modules/minizlib/package.json +80 -0
  1138. package/node_modules/pend/LICENSE +23 -0
  1139. package/node_modules/pend/README.md +41 -0
  1140. package/node_modules/pend/index.js +55 -0
  1141. package/node_modules/pend/package.json +18 -0
  1142. package/node_modules/pend/test.js +137 -0
  1143. package/node_modules/tar/LICENSE.md +55 -0
  1144. package/node_modules/tar/README.md +1233 -0
  1145. package/node_modules/tar/dist/commonjs/create.d.ts +3 -0
  1146. package/node_modules/tar/dist/commonjs/create.d.ts.map +1 -0
  1147. package/node_modules/tar/dist/commonjs/create.js +82 -0
  1148. package/node_modules/tar/dist/commonjs/create.js.map +1 -0
  1149. package/node_modules/tar/dist/commonjs/cwd-error.d.ts +8 -0
  1150. package/node_modules/tar/dist/commonjs/cwd-error.d.ts.map +1 -0
  1151. package/node_modules/tar/dist/commonjs/cwd-error.js +18 -0
  1152. package/node_modules/tar/dist/commonjs/cwd-error.js.map +1 -0
  1153. package/node_modules/tar/dist/commonjs/extract.d.ts +3 -0
  1154. package/node_modules/tar/dist/commonjs/extract.d.ts.map +1 -0
  1155. package/node_modules/tar/dist/commonjs/extract.js +88 -0
  1156. package/node_modules/tar/dist/commonjs/extract.js.map +1 -0
  1157. package/node_modules/tar/dist/commonjs/get-write-flag.d.ts +2 -0
  1158. package/node_modules/tar/dist/commonjs/get-write-flag.d.ts.map +1 -0
  1159. package/node_modules/tar/dist/commonjs/get-write-flag.js +32 -0
  1160. package/node_modules/tar/dist/commonjs/get-write-flag.js.map +1 -0
  1161. package/node_modules/tar/dist/commonjs/header.d.ts +53 -0
  1162. package/node_modules/tar/dist/commonjs/header.d.ts.map +1 -0
  1163. package/node_modules/tar/dist/commonjs/header.js +348 -0
  1164. package/node_modules/tar/dist/commonjs/header.js.map +1 -0
  1165. package/node_modules/tar/dist/commonjs/index.d.ts +20 -0
  1166. package/node_modules/tar/dist/commonjs/index.d.ts.map +1 -0
  1167. package/node_modules/tar/dist/commonjs/index.js +64 -0
  1168. package/node_modules/tar/dist/commonjs/index.js.map +1 -0
  1169. package/node_modules/tar/dist/commonjs/index.min.js +4 -0
  1170. package/node_modules/tar/dist/commonjs/index.min.js.map +7 -0
  1171. package/node_modules/tar/dist/commonjs/large-numbers.d.ts +3 -0
  1172. package/node_modules/tar/dist/commonjs/large-numbers.d.ts.map +1 -0
  1173. package/node_modules/tar/dist/commonjs/large-numbers.js +99 -0
  1174. package/node_modules/tar/dist/commonjs/large-numbers.js.map +1 -0
  1175. package/node_modules/tar/dist/commonjs/list.d.ts +7 -0
  1176. package/node_modules/tar/dist/commonjs/list.d.ts.map +1 -0
  1177. package/node_modules/tar/dist/commonjs/list.js +153 -0
  1178. package/node_modules/tar/dist/commonjs/list.js.map +1 -0
  1179. package/node_modules/tar/dist/commonjs/make-command.d.ts +49 -0
  1180. package/node_modules/tar/dist/commonjs/make-command.d.ts.map +1 -0
  1181. package/node_modules/tar/dist/commonjs/make-command.js +52 -0
  1182. package/node_modules/tar/dist/commonjs/make-command.js.map +1 -0
  1183. package/node_modules/tar/dist/commonjs/mkdir.d.ts +25 -0
  1184. package/node_modules/tar/dist/commonjs/mkdir.d.ts.map +1 -0
  1185. package/node_modules/tar/dist/commonjs/mkdir.js +187 -0
  1186. package/node_modules/tar/dist/commonjs/mkdir.js.map +1 -0
  1187. package/node_modules/tar/dist/commonjs/mode-fix.d.ts +2 -0
  1188. package/node_modules/tar/dist/commonjs/mode-fix.d.ts.map +1 -0
  1189. package/node_modules/tar/dist/commonjs/mode-fix.js +29 -0
  1190. package/node_modules/tar/dist/commonjs/mode-fix.js.map +1 -0
  1191. package/node_modules/tar/dist/commonjs/normalize-unicode.d.ts +2 -0
  1192. package/node_modules/tar/dist/commonjs/normalize-unicode.d.ts.map +1 -0
  1193. package/node_modules/tar/dist/commonjs/normalize-unicode.js +38 -0
  1194. package/node_modules/tar/dist/commonjs/normalize-unicode.js.map +1 -0
  1195. package/node_modules/tar/dist/commonjs/normalize-windows-path.d.ts +2 -0
  1196. package/node_modules/tar/dist/commonjs/normalize-windows-path.d.ts.map +1 -0
  1197. package/node_modules/tar/dist/commonjs/normalize-windows-path.js +12 -0
  1198. package/node_modules/tar/dist/commonjs/normalize-windows-path.js.map +1 -0
  1199. package/node_modules/tar/dist/commonjs/options.d.ts +604 -0
  1200. package/node_modules/tar/dist/commonjs/options.d.ts.map +1 -0
  1201. package/node_modules/tar/dist/commonjs/options.js +66 -0
  1202. package/node_modules/tar/dist/commonjs/options.js.map +1 -0
  1203. package/node_modules/tar/dist/commonjs/pack.d.ts +105 -0
  1204. package/node_modules/tar/dist/commonjs/pack.d.ts.map +1 -0
  1205. package/node_modules/tar/dist/commonjs/pack.js +544 -0
  1206. package/node_modules/tar/dist/commonjs/pack.js.map +1 -0
  1207. package/node_modules/tar/dist/commonjs/package.json +3 -0
  1208. package/node_modules/tar/dist/commonjs/parse.d.ts +92 -0
  1209. package/node_modules/tar/dist/commonjs/parse.d.ts.map +1 -0
  1210. package/node_modules/tar/dist/commonjs/parse.js +655 -0
  1211. package/node_modules/tar/dist/commonjs/parse.js.map +1 -0
  1212. package/node_modules/tar/dist/commonjs/path-reservations.d.ts +11 -0
  1213. package/node_modules/tar/dist/commonjs/path-reservations.d.ts.map +1 -0
  1214. package/node_modules/tar/dist/commonjs/path-reservations.js +170 -0
  1215. package/node_modules/tar/dist/commonjs/path-reservations.js.map +1 -0
  1216. package/node_modules/tar/dist/commonjs/pax.d.ts +26 -0
  1217. package/node_modules/tar/dist/commonjs/pax.d.ts.map +1 -0
  1218. package/node_modules/tar/dist/commonjs/pax.js +182 -0
  1219. package/node_modules/tar/dist/commonjs/pax.js.map +1 -0
  1220. package/node_modules/tar/dist/commonjs/process-umask.d.ts +2 -0
  1221. package/node_modules/tar/dist/commonjs/process-umask.d.ts.map +1 -0
  1222. package/node_modules/tar/dist/commonjs/process-umask.js +7 -0
  1223. package/node_modules/tar/dist/commonjs/process-umask.js.map +1 -0
  1224. package/node_modules/tar/dist/commonjs/read-entry.d.ts +36 -0
  1225. package/node_modules/tar/dist/commonjs/read-entry.d.ts.map +1 -0
  1226. package/node_modules/tar/dist/commonjs/read-entry.js +136 -0
  1227. package/node_modules/tar/dist/commonjs/read-entry.js.map +1 -0
  1228. package/node_modules/tar/dist/commonjs/replace.d.ts +2 -0
  1229. package/node_modules/tar/dist/commonjs/replace.d.ts.map +1 -0
  1230. package/node_modules/tar/dist/commonjs/replace.js +227 -0
  1231. package/node_modules/tar/dist/commonjs/replace.js.map +1 -0
  1232. package/node_modules/tar/dist/commonjs/strip-absolute-path.d.ts +2 -0
  1233. package/node_modules/tar/dist/commonjs/strip-absolute-path.d.ts.map +1 -0
  1234. package/node_modules/tar/dist/commonjs/strip-absolute-path.js +29 -0
  1235. package/node_modules/tar/dist/commonjs/strip-absolute-path.js.map +1 -0
  1236. package/node_modules/tar/dist/commonjs/strip-trailing-slashes.d.ts +2 -0
  1237. package/node_modules/tar/dist/commonjs/strip-trailing-slashes.d.ts.map +1 -0
  1238. package/node_modules/tar/dist/commonjs/strip-trailing-slashes.js +18 -0
  1239. package/node_modules/tar/dist/commonjs/strip-trailing-slashes.js.map +1 -0
  1240. package/node_modules/tar/dist/commonjs/symlink-error.d.ts +9 -0
  1241. package/node_modules/tar/dist/commonjs/symlink-error.d.ts.map +1 -0
  1242. package/node_modules/tar/dist/commonjs/symlink-error.js +19 -0
  1243. package/node_modules/tar/dist/commonjs/symlink-error.js.map +1 -0
  1244. package/node_modules/tar/dist/commonjs/types.d.ts +16 -0
  1245. package/node_modules/tar/dist/commonjs/types.d.ts.map +1 -0
  1246. package/node_modules/tar/dist/commonjs/types.js +70 -0
  1247. package/node_modules/tar/dist/commonjs/types.js.map +1 -0
  1248. package/node_modules/tar/dist/commonjs/unpack.d.ts +101 -0
  1249. package/node_modules/tar/dist/commonjs/unpack.d.ts.map +1 -0
  1250. package/node_modules/tar/dist/commonjs/unpack.js +932 -0
  1251. package/node_modules/tar/dist/commonjs/unpack.js.map +1 -0
  1252. package/node_modules/tar/dist/commonjs/update.d.ts +2 -0
  1253. package/node_modules/tar/dist/commonjs/update.d.ts.map +1 -0
  1254. package/node_modules/tar/dist/commonjs/update.js +33 -0
  1255. package/node_modules/tar/dist/commonjs/update.js.map +1 -0
  1256. package/node_modules/tar/dist/commonjs/warn-method.d.ts +24 -0
  1257. package/node_modules/tar/dist/commonjs/warn-method.d.ts.map +1 -0
  1258. package/node_modules/tar/dist/commonjs/warn-method.js +31 -0
  1259. package/node_modules/tar/dist/commonjs/warn-method.js.map +1 -0
  1260. package/node_modules/tar/dist/commonjs/winchars.d.ts +3 -0
  1261. package/node_modules/tar/dist/commonjs/winchars.d.ts.map +1 -0
  1262. package/node_modules/tar/dist/commonjs/winchars.js +14 -0
  1263. package/node_modules/tar/dist/commonjs/winchars.js.map +1 -0
  1264. package/node_modules/tar/dist/commonjs/write-entry.d.ts +129 -0
  1265. package/node_modules/tar/dist/commonjs/write-entry.d.ts.map +1 -0
  1266. package/node_modules/tar/dist/commonjs/write-entry.js +698 -0
  1267. package/node_modules/tar/dist/commonjs/write-entry.js.map +1 -0
  1268. package/node_modules/tar/dist/esm/create.d.ts +3 -0
  1269. package/node_modules/tar/dist/esm/create.d.ts.map +1 -0
  1270. package/node_modules/tar/dist/esm/create.js +76 -0
  1271. package/node_modules/tar/dist/esm/create.js.map +1 -0
  1272. package/node_modules/tar/dist/esm/cwd-error.d.ts +8 -0
  1273. package/node_modules/tar/dist/esm/cwd-error.d.ts.map +1 -0
  1274. package/node_modules/tar/dist/esm/cwd-error.js +14 -0
  1275. package/node_modules/tar/dist/esm/cwd-error.js.map +1 -0
  1276. package/node_modules/tar/dist/esm/extract.d.ts +3 -0
  1277. package/node_modules/tar/dist/esm/extract.d.ts.map +1 -0
  1278. package/node_modules/tar/dist/esm/extract.js +49 -0
  1279. package/node_modules/tar/dist/esm/extract.js.map +1 -0
  1280. package/node_modules/tar/dist/esm/get-write-flag.d.ts +2 -0
  1281. package/node_modules/tar/dist/esm/get-write-flag.d.ts.map +1 -0
  1282. package/node_modules/tar/dist/esm/get-write-flag.js +26 -0
  1283. package/node_modules/tar/dist/esm/get-write-flag.js.map +1 -0
  1284. package/node_modules/tar/dist/esm/header.d.ts +53 -0
  1285. package/node_modules/tar/dist/esm/header.d.ts.map +1 -0
  1286. package/node_modules/tar/dist/esm/header.js +311 -0
  1287. package/node_modules/tar/dist/esm/header.js.map +1 -0
  1288. package/node_modules/tar/dist/esm/index.d.ts +20 -0
  1289. package/node_modules/tar/dist/esm/index.d.ts.map +1 -0
  1290. package/node_modules/tar/dist/esm/index.js +20 -0
  1291. package/node_modules/tar/dist/esm/index.js.map +1 -0
  1292. package/node_modules/tar/dist/esm/index.min.js +4 -0
  1293. package/node_modules/tar/dist/esm/index.min.js.map +7 -0
  1294. package/node_modules/tar/dist/esm/large-numbers.d.ts +3 -0
  1295. package/node_modules/tar/dist/esm/large-numbers.d.ts.map +1 -0
  1296. package/node_modules/tar/dist/esm/large-numbers.js +94 -0
  1297. package/node_modules/tar/dist/esm/large-numbers.js.map +1 -0
  1298. package/node_modules/tar/dist/esm/list.d.ts +7 -0
  1299. package/node_modules/tar/dist/esm/list.d.ts.map +1 -0
  1300. package/node_modules/tar/dist/esm/list.js +113 -0
  1301. package/node_modules/tar/dist/esm/list.js.map +1 -0
  1302. package/node_modules/tar/dist/esm/make-command.d.ts +49 -0
  1303. package/node_modules/tar/dist/esm/make-command.d.ts.map +1 -0
  1304. package/node_modules/tar/dist/esm/make-command.js +48 -0
  1305. package/node_modules/tar/dist/esm/make-command.js.map +1 -0
  1306. package/node_modules/tar/dist/esm/mkdir.d.ts +25 -0
  1307. package/node_modules/tar/dist/esm/mkdir.d.ts.map +1 -0
  1308. package/node_modules/tar/dist/esm/mkdir.js +179 -0
  1309. package/node_modules/tar/dist/esm/mkdir.js.map +1 -0
  1310. package/node_modules/tar/dist/esm/mode-fix.d.ts +2 -0
  1311. package/node_modules/tar/dist/esm/mode-fix.d.ts.map +1 -0
  1312. package/node_modules/tar/dist/esm/mode-fix.js +25 -0
  1313. package/node_modules/tar/dist/esm/mode-fix.js.map +1 -0
  1314. package/node_modules/tar/dist/esm/normalize-unicode.d.ts +2 -0
  1315. package/node_modules/tar/dist/esm/normalize-unicode.d.ts.map +1 -0
  1316. package/node_modules/tar/dist/esm/normalize-unicode.js +34 -0
  1317. package/node_modules/tar/dist/esm/normalize-unicode.js.map +1 -0
  1318. package/node_modules/tar/dist/esm/normalize-windows-path.d.ts +2 -0
  1319. package/node_modules/tar/dist/esm/normalize-windows-path.d.ts.map +1 -0
  1320. package/node_modules/tar/dist/esm/normalize-windows-path.js +9 -0
  1321. package/node_modules/tar/dist/esm/normalize-windows-path.js.map +1 -0
  1322. package/node_modules/tar/dist/esm/options.d.ts +604 -0
  1323. package/node_modules/tar/dist/esm/options.d.ts.map +1 -0
  1324. package/node_modules/tar/dist/esm/options.js +54 -0
  1325. package/node_modules/tar/dist/esm/options.js.map +1 -0
  1326. package/node_modules/tar/dist/esm/pack.d.ts +105 -0
  1327. package/node_modules/tar/dist/esm/pack.d.ts.map +1 -0
  1328. package/node_modules/tar/dist/esm/pack.js +502 -0
  1329. package/node_modules/tar/dist/esm/pack.js.map +1 -0
  1330. package/node_modules/tar/dist/esm/package.json +3 -0
  1331. package/node_modules/tar/dist/esm/parse.d.ts +92 -0
  1332. package/node_modules/tar/dist/esm/parse.d.ts.map +1 -0
  1333. package/node_modules/tar/dist/esm/parse.js +651 -0
  1334. package/node_modules/tar/dist/esm/parse.js.map +1 -0
  1335. package/node_modules/tar/dist/esm/path-reservations.d.ts +11 -0
  1336. package/node_modules/tar/dist/esm/path-reservations.d.ts.map +1 -0
  1337. package/node_modules/tar/dist/esm/path-reservations.js +166 -0
  1338. package/node_modules/tar/dist/esm/path-reservations.js.map +1 -0
  1339. package/node_modules/tar/dist/esm/pax.d.ts +26 -0
  1340. package/node_modules/tar/dist/esm/pax.d.ts.map +1 -0
  1341. package/node_modules/tar/dist/esm/pax.js +178 -0
  1342. package/node_modules/tar/dist/esm/pax.js.map +1 -0
  1343. package/node_modules/tar/dist/esm/process-umask.d.ts +2 -0
  1344. package/node_modules/tar/dist/esm/process-umask.d.ts.map +1 -0
  1345. package/node_modules/tar/dist/esm/process-umask.js +3 -0
  1346. package/node_modules/tar/dist/esm/process-umask.js.map +1 -0
  1347. package/node_modules/tar/dist/esm/read-entry.d.ts +36 -0
  1348. package/node_modules/tar/dist/esm/read-entry.d.ts.map +1 -0
  1349. package/node_modules/tar/dist/esm/read-entry.js +132 -0
  1350. package/node_modules/tar/dist/esm/read-entry.js.map +1 -0
  1351. package/node_modules/tar/dist/esm/replace.d.ts +2 -0
  1352. package/node_modules/tar/dist/esm/replace.d.ts.map +1 -0
  1353. package/node_modules/tar/dist/esm/replace.js +221 -0
  1354. package/node_modules/tar/dist/esm/replace.js.map +1 -0
  1355. package/node_modules/tar/dist/esm/strip-absolute-path.d.ts +2 -0
  1356. package/node_modules/tar/dist/esm/strip-absolute-path.d.ts.map +1 -0
  1357. package/node_modules/tar/dist/esm/strip-absolute-path.js +25 -0
  1358. package/node_modules/tar/dist/esm/strip-absolute-path.js.map +1 -0
  1359. package/node_modules/tar/dist/esm/strip-trailing-slashes.d.ts +2 -0
  1360. package/node_modules/tar/dist/esm/strip-trailing-slashes.d.ts.map +1 -0
  1361. package/node_modules/tar/dist/esm/strip-trailing-slashes.js +14 -0
  1362. package/node_modules/tar/dist/esm/strip-trailing-slashes.js.map +1 -0
  1363. package/node_modules/tar/dist/esm/symlink-error.d.ts +9 -0
  1364. package/node_modules/tar/dist/esm/symlink-error.d.ts.map +1 -0
  1365. package/node_modules/tar/dist/esm/symlink-error.js +15 -0
  1366. package/node_modules/tar/dist/esm/symlink-error.js.map +1 -0
  1367. package/node_modules/tar/dist/esm/types.d.ts +16 -0
  1368. package/node_modules/tar/dist/esm/types.d.ts.map +1 -0
  1369. package/node_modules/tar/dist/esm/types.js +65 -0
  1370. package/node_modules/tar/dist/esm/types.js.map +1 -0
  1371. package/node_modules/tar/dist/esm/unpack.d.ts +101 -0
  1372. package/node_modules/tar/dist/esm/unpack.d.ts.map +1 -0
  1373. package/node_modules/tar/dist/esm/unpack.js +891 -0
  1374. package/node_modules/tar/dist/esm/unpack.js.map +1 -0
  1375. package/node_modules/tar/dist/esm/update.d.ts +2 -0
  1376. package/node_modules/tar/dist/esm/update.d.ts.map +1 -0
  1377. package/node_modules/tar/dist/esm/update.js +30 -0
  1378. package/node_modules/tar/dist/esm/update.js.map +1 -0
  1379. package/node_modules/tar/dist/esm/warn-method.d.ts +24 -0
  1380. package/node_modules/tar/dist/esm/warn-method.d.ts.map +1 -0
  1381. package/node_modules/tar/dist/esm/warn-method.js +27 -0
  1382. package/node_modules/tar/dist/esm/warn-method.js.map +1 -0
  1383. package/node_modules/tar/dist/esm/winchars.d.ts +3 -0
  1384. package/node_modules/tar/dist/esm/winchars.d.ts.map +1 -0
  1385. package/node_modules/tar/dist/esm/winchars.js +9 -0
  1386. package/node_modules/tar/dist/esm/winchars.js.map +1 -0
  1387. package/node_modules/tar/dist/esm/write-entry.d.ts +129 -0
  1388. package/node_modules/tar/dist/esm/write-entry.d.ts.map +1 -0
  1389. package/node_modules/tar/dist/esm/write-entry.js +656 -0
  1390. package/node_modules/tar/dist/esm/write-entry.js.map +1 -0
  1391. package/node_modules/tar/package.json +298 -0
  1392. package/node_modules/typescript/LICENSE.txt +55 -0
  1393. package/node_modules/typescript/README.md +50 -0
  1394. package/node_modules/typescript/SECURITY.md +41 -0
  1395. package/node_modules/typescript/ThirdPartyNoticeText.txt +193 -0
  1396. package/node_modules/typescript/bin/tsc +2 -0
  1397. package/node_modules/typescript/bin/tsserver +2 -0
  1398. package/node_modules/typescript/lib/_tsc.js +133818 -0
  1399. package/node_modules/typescript/lib/_tsserver.js +659 -0
  1400. package/node_modules/typescript/lib/_typingsInstaller.js +222 -0
  1401. package/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +2122 -0
  1402. package/node_modules/typescript/lib/de/diagnosticMessages.generated.json +2122 -0
  1403. package/node_modules/typescript/lib/es/diagnosticMessages.generated.json +2122 -0
  1404. package/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +2122 -0
  1405. package/node_modules/typescript/lib/it/diagnosticMessages.generated.json +2122 -0
  1406. package/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +2122 -0
  1407. package/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +2122 -0
  1408. package/node_modules/typescript/lib/lib.d.ts +22 -0
  1409. package/node_modules/typescript/lib/lib.decorators.d.ts +384 -0
  1410. package/node_modules/typescript/lib/lib.decorators.legacy.d.ts +22 -0
  1411. package/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +41 -0
  1412. package/node_modules/typescript/lib/lib.dom.d.ts +39429 -0
  1413. package/node_modules/typescript/lib/lib.dom.iterable.d.ts +571 -0
  1414. package/node_modules/typescript/lib/lib.es2015.collection.d.ts +147 -0
  1415. package/node_modules/typescript/lib/lib.es2015.core.d.ts +597 -0
  1416. package/node_modules/typescript/lib/lib.es2015.d.ts +28 -0
  1417. package/node_modules/typescript/lib/lib.es2015.generator.d.ts +77 -0
  1418. package/node_modules/typescript/lib/lib.es2015.iterable.d.ts +605 -0
  1419. package/node_modules/typescript/lib/lib.es2015.promise.d.ts +81 -0
  1420. package/node_modules/typescript/lib/lib.es2015.proxy.d.ts +128 -0
  1421. package/node_modules/typescript/lib/lib.es2015.reflect.d.ts +144 -0
  1422. package/node_modules/typescript/lib/lib.es2015.symbol.d.ts +46 -0
  1423. package/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +326 -0
  1424. package/node_modules/typescript/lib/lib.es2016.array.include.d.ts +116 -0
  1425. package/node_modules/typescript/lib/lib.es2016.d.ts +21 -0
  1426. package/node_modules/typescript/lib/lib.es2016.full.d.ts +23 -0
  1427. package/node_modules/typescript/lib/lib.es2016.intl.d.ts +31 -0
  1428. package/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts +21 -0
  1429. package/node_modules/typescript/lib/lib.es2017.d.ts +26 -0
  1430. package/node_modules/typescript/lib/lib.es2017.date.d.ts +31 -0
  1431. package/node_modules/typescript/lib/lib.es2017.full.d.ts +23 -0
  1432. package/node_modules/typescript/lib/lib.es2017.intl.d.ts +44 -0
  1433. package/node_modules/typescript/lib/lib.es2017.object.d.ts +49 -0
  1434. package/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +135 -0
  1435. package/node_modules/typescript/lib/lib.es2017.string.d.ts +45 -0
  1436. package/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +53 -0
  1437. package/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +77 -0
  1438. package/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +53 -0
  1439. package/node_modules/typescript/lib/lib.es2018.d.ts +24 -0
  1440. package/node_modules/typescript/lib/lib.es2018.full.d.ts +24 -0
  1441. package/node_modules/typescript/lib/lib.es2018.intl.d.ts +83 -0
  1442. package/node_modules/typescript/lib/lib.es2018.promise.d.ts +30 -0
  1443. package/node_modules/typescript/lib/lib.es2018.regexp.d.ts +37 -0
  1444. package/node_modules/typescript/lib/lib.es2019.array.d.ts +79 -0
  1445. package/node_modules/typescript/lib/lib.es2019.d.ts +24 -0
  1446. package/node_modules/typescript/lib/lib.es2019.full.d.ts +24 -0
  1447. package/node_modules/typescript/lib/lib.es2019.intl.d.ts +23 -0
  1448. package/node_modules/typescript/lib/lib.es2019.object.d.ts +33 -0
  1449. package/node_modules/typescript/lib/lib.es2019.string.d.ts +37 -0
  1450. package/node_modules/typescript/lib/lib.es2019.symbol.d.ts +24 -0
  1451. package/node_modules/typescript/lib/lib.es2020.bigint.d.ts +765 -0
  1452. package/node_modules/typescript/lib/lib.es2020.d.ts +27 -0
  1453. package/node_modules/typescript/lib/lib.es2020.date.d.ts +42 -0
  1454. package/node_modules/typescript/lib/lib.es2020.full.d.ts +24 -0
  1455. package/node_modules/typescript/lib/lib.es2020.intl.d.ts +474 -0
  1456. package/node_modules/typescript/lib/lib.es2020.number.d.ts +28 -0
  1457. package/node_modules/typescript/lib/lib.es2020.promise.d.ts +47 -0
  1458. package/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts +99 -0
  1459. package/node_modules/typescript/lib/lib.es2020.string.d.ts +44 -0
  1460. package/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +41 -0
  1461. package/node_modules/typescript/lib/lib.es2021.d.ts +23 -0
  1462. package/node_modules/typescript/lib/lib.es2021.full.d.ts +24 -0
  1463. package/node_modules/typescript/lib/lib.es2021.intl.d.ts +166 -0
  1464. package/node_modules/typescript/lib/lib.es2021.promise.d.ts +48 -0
  1465. package/node_modules/typescript/lib/lib.es2021.string.d.ts +33 -0
  1466. package/node_modules/typescript/lib/lib.es2021.weakref.d.ts +78 -0
  1467. package/node_modules/typescript/lib/lib.es2022.array.d.ts +121 -0
  1468. package/node_modules/typescript/lib/lib.es2022.d.ts +25 -0
  1469. package/node_modules/typescript/lib/lib.es2022.error.d.ts +75 -0
  1470. package/node_modules/typescript/lib/lib.es2022.full.d.ts +24 -0
  1471. package/node_modules/typescript/lib/lib.es2022.intl.d.ts +145 -0
  1472. package/node_modules/typescript/lib/lib.es2022.object.d.ts +26 -0
  1473. package/node_modules/typescript/lib/lib.es2022.regexp.d.ts +39 -0
  1474. package/node_modules/typescript/lib/lib.es2022.string.d.ts +25 -0
  1475. package/node_modules/typescript/lib/lib.es2023.array.d.ts +924 -0
  1476. package/node_modules/typescript/lib/lib.es2023.collection.d.ts +21 -0
  1477. package/node_modules/typescript/lib/lib.es2023.d.ts +22 -0
  1478. package/node_modules/typescript/lib/lib.es2023.full.d.ts +24 -0
  1479. package/node_modules/typescript/lib/lib.es2023.intl.d.ts +56 -0
  1480. package/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts +65 -0
  1481. package/node_modules/typescript/lib/lib.es2024.collection.d.ts +29 -0
  1482. package/node_modules/typescript/lib/lib.es2024.d.ts +26 -0
  1483. package/node_modules/typescript/lib/lib.es2024.full.d.ts +24 -0
  1484. package/node_modules/typescript/lib/lib.es2024.object.d.ts +29 -0
  1485. package/node_modules/typescript/lib/lib.es2024.promise.d.ts +35 -0
  1486. package/node_modules/typescript/lib/lib.es2024.regexp.d.ts +25 -0
  1487. package/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts +68 -0
  1488. package/node_modules/typescript/lib/lib.es2024.string.d.ts +29 -0
  1489. package/node_modules/typescript/lib/lib.es5.d.ts +4601 -0
  1490. package/node_modules/typescript/lib/lib.es6.d.ts +23 -0
  1491. package/node_modules/typescript/lib/lib.esnext.array.d.ts +35 -0
  1492. package/node_modules/typescript/lib/lib.esnext.collection.d.ts +96 -0
  1493. package/node_modules/typescript/lib/lib.esnext.d.ts +29 -0
  1494. package/node_modules/typescript/lib/lib.esnext.decorators.d.ts +28 -0
  1495. package/node_modules/typescript/lib/lib.esnext.disposable.d.ts +193 -0
  1496. package/node_modules/typescript/lib/lib.esnext.error.d.ts +24 -0
  1497. package/node_modules/typescript/lib/lib.esnext.float16.d.ts +445 -0
  1498. package/node_modules/typescript/lib/lib.esnext.full.d.ts +24 -0
  1499. package/node_modules/typescript/lib/lib.esnext.intl.d.ts +21 -0
  1500. package/node_modules/typescript/lib/lib.esnext.iterator.d.ts +148 -0
  1501. package/node_modules/typescript/lib/lib.esnext.promise.d.ts +34 -0
  1502. package/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts +25 -0
  1503. package/node_modules/typescript/lib/lib.scripthost.d.ts +322 -0
  1504. package/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +41 -0
  1505. package/node_modules/typescript/lib/lib.webworker.d.ts +13150 -0
  1506. package/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +23 -0
  1507. package/node_modules/typescript/lib/lib.webworker.iterable.d.ts +340 -0
  1508. package/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +2122 -0
  1509. package/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +2122 -0
  1510. package/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +2122 -0
  1511. package/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +2122 -0
  1512. package/node_modules/typescript/lib/tsc.js +8 -0
  1513. package/node_modules/typescript/lib/tsserver.js +8 -0
  1514. package/node_modules/typescript/lib/tsserverlibrary.d.ts +17 -0
  1515. package/node_modules/typescript/lib/tsserverlibrary.js +21 -0
  1516. package/node_modules/typescript/lib/typesMap.json +497 -0
  1517. package/node_modules/typescript/lib/typescript.d.ts +11437 -0
  1518. package/node_modules/typescript/lib/typescript.js +200276 -0
  1519. package/node_modules/typescript/lib/typingsInstaller.js +8 -0
  1520. package/node_modules/typescript/lib/watchGuard.js +53 -0
  1521. package/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json +2122 -0
  1522. package/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json +2122 -0
  1523. package/node_modules/typescript/package.json +120 -0
  1524. package/node_modules/yallist/LICENSE.md +63 -0
  1525. package/node_modules/yallist/README.md +205 -0
  1526. package/node_modules/yallist/dist/commonjs/index.d.ts +39 -0
  1527. package/node_modules/yallist/dist/commonjs/index.d.ts.map +1 -0
  1528. package/node_modules/yallist/dist/commonjs/index.js +384 -0
  1529. package/node_modules/yallist/dist/commonjs/index.js.map +1 -0
  1530. package/node_modules/yallist/dist/commonjs/package.json +3 -0
  1531. package/node_modules/yallist/dist/esm/index.d.ts +39 -0
  1532. package/node_modules/yallist/dist/esm/index.d.ts.map +1 -0
  1533. package/node_modules/yallist/dist/esm/index.js +379 -0
  1534. package/node_modules/yallist/dist/esm/index.js.map +1 -0
  1535. package/node_modules/yallist/dist/esm/package.json +3 -0
  1536. package/node_modules/yallist/package.json +68 -0
  1537. package/node_modules/yauzl/LICENSE +21 -0
  1538. package/node_modules/yauzl/README.md +1015 -0
  1539. package/node_modules/yauzl/crc32.js +45 -0
  1540. package/node_modules/yauzl/fd-slicer.js +188 -0
  1541. package/node_modules/yauzl/index.js +1096 -0
  1542. package/node_modules/yauzl/package.json +40 -0
  1543. package/node_modules/yazl/LICENSE +21 -0
  1544. package/node_modules/yazl/README.md +457 -0
  1545. package/node_modules/yazl/index.js +826 -0
  1546. package/node_modules/yazl/package.json +34 -0
  1547. package/package.json +163 -0
  1548. package/testkit-config-schema.md +718 -0
@@ -0,0 +1,64 @@
1
+ import { type HistoricalBatch, type HistoricalBatchResult, type HistoricalBegin, type HistoricalEvidence, type HistoricalImport, type HistoricalPage, type HistoricalReceipt, type HistoricalUploadPlan } from "../../../cloud/historical-contract.js";
2
+ import type { MigrationPlan } from "./model.js";
3
+ export interface OperationResults {
4
+ begin: HistoricalImport;
5
+ stage: HistoricalUploadPlan;
6
+ upload: {
7
+ uploaded: true;
8
+ };
9
+ archive: {
10
+ uploaded: true;
11
+ };
12
+ receipt: HistoricalReceipt;
13
+ batch: HistoricalBatchResult;
14
+ complete: HistoricalPage;
15
+ }
16
+ export interface OperationRequests {
17
+ begin: HistoricalBegin;
18
+ stage: HistoricalEvidence;
19
+ upload: {
20
+ url: string;
21
+ path: string;
22
+ bytes: number;
23
+ sha256: string;
24
+ };
25
+ archive: {
26
+ url: string;
27
+ bytes: number;
28
+ sha256: string;
29
+ manifestDigest: string;
30
+ };
31
+ receipt: {
32
+ url: string;
33
+ };
34
+ batch: HistoricalBatch;
35
+ complete: {
36
+ importId: string;
37
+ };
38
+ }
39
+ export type OperationKind = keyof OperationResults;
40
+ export interface MigrationOperation<K extends OperationKind = OperationKind> {
41
+ kind: K;
42
+ key: string;
43
+ request: string;
44
+ state: "pending" | "accepted" | "rejected" | "unknown";
45
+ result?: OperationResults[K];
46
+ error?: string;
47
+ }
48
+ export interface MigrationJournal {
49
+ schemaVersion: 1 | 2;
50
+ upgradedFrom?: 1;
51
+ legacyStages?: string[];
52
+ planDigest: string;
53
+ importId?: string;
54
+ operations: MigrationOperation[];
55
+ receiptIds: Record<string, string>;
56
+ caseIds: Record<string, string>;
57
+ }
58
+ export declare function operationIs<K extends OperationKind>(operation: MigrationOperation, kind: K): operation is MigrationOperation<K>;
59
+ export declare function emptyJournal(plan: MigrationPlan, planDigest: string): MigrationJournal;
60
+ /** Durable results are decoded against their saved command and the reviewed plan at first read. */
61
+ export declare function decodeJournal(value: unknown, plan: MigrationPlan, planDigest: string): MigrationJournal;
62
+ export declare function stagingRequest(plan: MigrationPlan, journal: MigrationJournal, runId: string): HistoricalEvidence;
63
+ /** openJournal has already validated this request against the plan and staging result. */
64
+ export declare function savedArchiveRequest(journal: MigrationJournal, key: string): OperationRequests["archive"] | undefined;
@@ -0,0 +1 @@
1
+ import{parseHistoricalBatchResult as N,parseHistoricalImport as A,parseHistoricalPage as C,parseHistoricalReceipt as D,parseHistoricalResponse as O,parseHistoricalUploadPlan as z}from"../../../cloud/historical-contract.js";import{canonicalHistoricalJson as F,historicalDigest as S}from"../../../cloud/historical-json.js";import{MAX_CLOUD_ARCHIVE_BYTES as E}from"../../../cloud/archive-contract.js";import{array as H,object as q,text as v}from"./files.js";import{batchRecords as _,beginCommand as B,plannedRecords as J}from"./commands.js";function t(l,e){if(!l)throw new Error(`Invalid migration journal: ${e}`)}function I(l,e){const u=v(l,e,128);return t(/^[A-Za-z0-9_-]+$/u.test(u),e),u}function m(l,e,u){t(F(l)===F(e),u)}function $(l,e){const u=v(l,"operation URL"),n=new URL(u,e.target.origin);return t(n.origin===e.target.origin&&!n.username&&!n.password&&!n.hash&&!n.search,"operation URL target"),u}export function operationIs(l,e){return l.kind===e}export function emptyJournal(l,e){return{schemaVersion:1,planDigest:e,operations:[],receiptIds:Object.assign(Object.create(null),l.reusedRuns),caseIds:Object.create(null)}}export function decodeJournal(l,e,u){const n=q(l,"journal");t((n.schemaVersion===1||n.schemaVersion===2)&&n.planDigest===u,"journal belongs to another plan"),n.completed!==void 0&&t(typeof n.completed=="boolean","legacy completion state");const j=n.importId===void 0?void 0:I(n.importId,"importId"),o=emptyJournal(e,u);o.schemaVersion=n.schemaVersion,n.schemaVersion===1?(t(n.upgradedFrom===void 0&&n.legacyStages===void 0,"legacy journal has upgrade metadata"),delete o.legacyStages):(t(n.upgradedFrom===void 0||n.upgradedFrom===1,"journal upgrade origin"),n.upgradedFrom===1&&(o.upgradedFrom=1),o.legacyStages=H(n.legacyStages,"legacy stages").map(g=>v(g,"legacy stage")),t(new Set(o.legacyStages).size===o.legacyStages.length,"duplicate legacy stage"),t(o.upgradedFrom===1||o.legacyStages.length===0,"legacy stages require an upgraded journal"));const R=new Set,h=B(e,u);let x=e.campaignVersion;for(const g of H(n.operations,"operations")){const r=q(g,"operation"),a=v(r.key,"operation key");t(!R.has(a),"duplicate operation key"),R.add(a),t(r.state==="pending"||r.state==="accepted"||r.state==="rejected"||r.state==="unknown","operation state");const V=v(r.request,"operation request",2*1024**2),f=q(O(V),"operation request"),U=r.state,L={key:a,request:V,state:U,...r.error===void 0?{}:{error:v(r.error,"operation error",65536)}},y=(i,s)=>{t(r.kind===void 0||r.kind===i,"operation kind"),t(r.state!=="accepted"||s!==void 0,"accepted operation lacks result"),o.operations.push({...L,kind:i,...s===void 0?{}:{result:s}})};if(a==="begin"){m(f,h,"begin request differs from plan");const i=r.result===void 0?void 0:A(r.result,e.target.projectId,e.target.campaignId);i&&(I(i.id,"begin import identity"),t(i.namespace===h.namespace&&i.inventoryDigest===h.inventoryDigest&&i.total===h.inventory.length,"begin inventory identity"),r.state==="accepted"&&(o.importId=i.id)),y("begin",i);continue}if(t(o.importId,"operation precedes accepted begin"),a.startsWith("stage:")){const i=e.runs.find(p=>a===`stage:${p.runId}`);t(i&&!Object.hasOwn(e.reusedRuns,i.runId),"stage run identity");const s=stagingRequest(e,o,i.runId);m(f,s,"stage request differs from plan");const c=r.result===void 0?void 0:z(r.result,s);if(c){$(c.completeUrl,e);for(const p of c.uploads)$(p.url,e);c.archive&&$(c.archive.url,e)}y("stage",c);continue}if(a.startsWith("archive:")){t(o.schemaVersion===2,"archive operation requires journal schema 2");const i=e.runs.find(p=>a.startsWith(`archive:${p.runId}:`));t(i,"archive run identity");const s=o.operations.find(p=>p.key===`stage:${i.runId}`);t(s&&operationIs(s,"stage")&&s.result,"archive lacks staging result");const c=$(f.url,e);t(a===`archive:${i.runId}:${S(c)}`,"archive operation key"),t(new URL(c,e.target.origin).pathname===`/api/v1/publications/${s.result.publicationId}/archive`,"archive publication identity"),t(s.result.archive?s.result.archive.url===c:s.result.status==="accepted","archive target identity"),t(stagingRequest(e,o,i.runId).evidenceFormat==="zip-v1","archive transport identity"),t(Number.isSafeInteger(f.bytes)&&Number(f.bytes)>0&&Number(f.bytes)<=(s.result.archive?.maxBytes??E),"archive byte bound"),t(typeof f.sha256=="string"&&/^[a-f0-9]{64}$/.test(f.sha256),"archive digest"),m(f,{url:c,bytes:f.bytes,sha256:f.sha256,manifestDigest:i.request.manifest.digest},"archive request identity"),r.result!==void 0&&m(r.result,{uploaded:!0},"archive result"),y("archive",r.result===void 0?void 0:{uploaded:!0});continue}if(a.startsWith("upload:")||a.startsWith("receipt:")){const i=a.startsWith("upload:")?"upload":"receipt",s=e.runs.find(d=>a.startsWith(`${i}:${d.runId}:`));t(s,"evidence operation run identity");const c=o.operations.find(d=>operationIs(d,"stage")&&d.key===`stage:${s.runId}`)?.result;t(c,"evidence operation lacks a decoded staging result");const p=$(f.url,e);if(i==="upload"){const d=Number(a.split(":").at(-2)),b=s.request.manifest.files.at(d),k=b&&s.files.find(W=>W.path===b.path);t(Number.isSafeInteger(d)&&d>=0&&k,"upload file identity"),t(a===`upload:${s.runId}:${String(d)}:${S(p)}`,"upload operation key"),m(f,{url:p,path:k.absolutePath,bytes:k.bytes,sha256:k.sha256},"upload request differs from plan"),r.result!==void 0&&m(r.result,{uploaded:!0},"upload result"),y("upload",r.result===void 0?void 0:{uploaded:!0})}else{t(a===`receipt:${s.runId}:${S(p)}`&&p===c.completeUrl,"receipt completion identity"),m(f,{url:p},"receipt request");const d=r.result===void 0?void 0:D(r.result,e.target.projectId,{importId:o.importId,evidence:s.request,reused:c.reused});d&&(I(d.id,"receipt identity"),t(d.repository.toLowerCase()===`${e.repository.owner}/${e.repository.name}`.toLowerCase(),"receipt repository"),r.state==="accepted"&&(o.receiptIds[s.runId]=d.id)),y("receipt",d)}continue}const w=/^(case|finding)s-(\d+)$/u.exec(a);if(w){const i=w[1]==="case"?"case":"finding",s=Number(w[2]),c=_(J(e,o,i))[s];t(c,"batch position");const p={schemaVersion:1,idempotencyKey:`migration-${u}-${i}-${String(s)}`,expectedVersion:x,records:c};m(f,p,"batch request differs from plan or prior version");const d=r.result===void 0?void 0:N(r.result,o.importId,p);if(d&&(t(d.rejected?r.state==="rejected":r.state!=="rejected","batch result state"),r.state==="accepted"&&(x=d.version,i==="case")))for(const b of d.items)o.caseIds[b.id]=I(b.cloudId,"case outcome identity");y("batch",d);continue}if(a==="complete"){m(f,{importId:o.importId},"completion request identity");const i=r.result===void 0?void 0:C(r.result,e.target.projectId,e.target.campaignId,o.importId);i&&(t(i.import.namespace===h.namespace&&i.import.inventoryDigest===h.inventoryDigest&&i.import.total===h.inventory.length,"completed inventory identity"),t(i.import.completedAt&&Object.values(i.counts).every(s=>Object.entries(s).every(([c,p])=>["accepted","reused"].includes(c)||p===0)),"incomplete completion result")),y("complete",i);continue}throw new Error(`Invalid migration journal: unknown operation ${a}`)}j!==void 0&&t(j===o.importId,"saved import identity differs from accepted begin");for(const g of o.legacyStages??[])t(o.operations.some(r=>r.kind==="stage"&&r.key===`stage:${g}`),"legacy stage is absent");for(const g of["receiptIds","caseIds"])for(const[r,a]of Object.entries(q(n[g],g)))t(o[g][r]===I(a,g),`${g} differs from accepted operations`);return o}export function stagingRequest(l,e,u){const n=l.runs.find(j=>j.runId===u);return t(n,"stage run identity"),e.schemaVersion===1||e.legacyStages?.includes(u)?n.request:{...n.request,evidenceFormat:"zip-v1"}}export function savedArchiveRequest(l,e){const u=l.operations.find(n=>operationIs(n,"archive")&&n.key===e);return u?O(u.request):void 0}
@@ -0,0 +1,3 @@
1
+ import type { PlannedRecord } from "./model.js";
2
+ /** Describe projections while keeping the complete sanitized source record. */
3
+ export declare function describeFields(source: Record<string, unknown>, record: PlannedRecord, kind: "bug" | "observation" | "case"): NonNullable<PlannedRecord["fieldDispositions"]>;
@@ -0,0 +1 @@
1
+ export function describeFields(n,s,c){const t=c==="case"?{id:"source.id",summary:"case.title",classification:"case.classification",state:"case.state",fingerprints:"case.fingerprint",lifecycle:"case.firstSeenAt,case.lastSeenAt",issue:"case.issueNumber,case.issueRepository"}:{id:"source.id",title:"finding.title",deduplicationKey:"finding.rootCauseKey",classification:"finding.classification",contract:"finding.expectedBehavior,finding.authority",expected:"finding.expectedBehavior",actual:"finding.observedBehavior",impact:"finding.impact",severity:"finding.severity",reproduction:"finding.reproduction",evidenceLimitations:"finding.limitations",surface:"finding.surface",issueReferences:"finding.issueReferences",evidence:"evidence",runIds:"evidence",artifacts:"evidence",observedAt:"observedAt",recordedAt:"observedAt",regressionCaseIds:"regressionSourceIds"},r=Object.keys(n).sort().map(e=>({field:e,disposition:t[e]?"mapped":"retained",reason:t[e]?"Projected through the explicit mapping or supported legacy fields; full original retained in sourceRecord":"No historical Cloud field represents this detail; retained in sourceRecord",...t[e]?{target:t[e]}:{}}));if(c==="bug"&&n.classification===void 0&&s.finding&&r.push({field:"classification",disposition:"mapped",target:"finding.classification",reason:`The legacy bugs collection supplies the default product_bug classification; selected value: ${s.finding.classification}`}),c==="bug"){const e=n.evidence,d=new Set(s.evidence?.map(a=>a.runId));for(const[a,i]of(e?.artifacts??[]).entries()){const f=typeof i=="string"?i:i.path,o=(typeof i=="string"?void 0:i.runId)??/^(?:\.testkit\/results\/runs\/)?([^/]+)\//.exec(f)?.[1];o&&!d.has(o)&&r.push({field:`evidence.artifacts[${String(a)}]`,disposition:"retained",reason:"Supporting artifact is outside the confirming run set; retained in sourceRecord and excluded from verification evidence"})}}return r}
@@ -0,0 +1,11 @@
1
+ import type { MigrationMapping, MigrationProblem, PlannedRecord } from "./model.js";
2
+ export declare function decodeMapping(value: unknown): MigrationMapping;
3
+ export declare function mapRecords(registryLossless: unknown, regressionsLossless: unknown, mapping: MigrationMapping, runTimes: ReadonlyMap<string, string>): {
4
+ records: PlannedRecord[];
5
+ problems: MigrationProblem[];
6
+ sourceSummary: {
7
+ bugs: number;
8
+ observations: number;
9
+ cases: number;
10
+ };
11
+ };
@@ -0,0 +1,2 @@
1
+ import{HISTORICAL_SOURCE_LIMIT as N}from"../../../cloud/historical-contract.js";import{canonicalHistoricalJson as j,historicalDigest as D}from"../../../cloud/historical-json.js";import{array as R,object as u,plain as x,text as F}from"./files.js";import{describeFields as L}from"./mapping-dispositions.js";const $=["product_bug","testkit_failure","environment_failure","stale_assertion","unproven","intended_behavior","observation"],T=["untriaged","regression","flaky","expected","quarantined"],B=["expectedBehavior","authority","observedBehavior","impact","severity","reproduction","limitations"];function t(i,n,s){if(!i)throw Object.assign(new Error(s),{field:n})}function w(i,n,s){t(Object.keys(i).every(o=>n.includes(o)),s,"Unknown mapping field")}function A(i,n,s){return t(typeof i=="string"&&n.includes(i),s,"An explicit supported mapping is required"),i}function c(i,n,s=4096){let o;try{o=F(i,n,s)}catch{throw Object.assign(new Error(`Requires nonblank text of at most ${String(s)} bytes`),{field:n})}return t(!/[\ud800-\udfff]/u.test(o)&&Array.from(o).every(d=>d.charCodeAt(0)>=32||`
2
+ \r `.includes(d)),n,"Unsupported control character"),o}function V(i){return c(typeof i=="string"?i.replace(/\u001b\[[0-9;:]*m/gu,""):i,"summary")}function k(i,n){const s=c(i,n,128);return t(/^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(?:\.\d+)?(?:Z|[+-]\d\d:\d\d)$/.test(s)&&Number.isFinite(Date.parse(s)),n,"Requires an original RFC3339 observation time or an explicit evidence rule"),s}function q(i,n,s=32){const o=R(i,n);return t(o.length<=s,n,`At most ${String(s)} entries are supported`),o.map(d=>c(d,n))}function M(i){return q(i,"issueReferences").map(n=>{const s=URL.parse(n);return t(s&&["https:","http:"].includes(s.protocol)&&!s.username&&!s.password,"issueReferences","Issue references require HTTP URLs without credentials"),n})}function E(i){const n=u(i,"relationship");w(n,["kind","targetId"],"relationship"),A(n.kind,["independent","known","duplicate"],"relationship.kind"),n.kind==="independent"?t(n.targetId===void 0,"relationship.targetId","Independent findings cannot have a relationship target"):t(/^[A-Za-z0-9_-]{1,128}$/.test(c(n.targetId,"relationship.targetId",128)),"relationship.targetId","Requires a Cloud finding ID")}export function decodeMapping(i){const n=u(x(i),"mapping");w(n,["schemaVersion","namespace","repository","findings","cases","runReceipts"],"mapping"),t(n.schemaVersion===1,"schemaVersion","Requires mapping schema 1"),c(n.namespace,"namespace",128);const s=u(n.repository,"repository");w(s,["host","owner","name"],"repository");for(const r of["host","owner","name"])c(s[r],`repository.${r}`,256);const o=u(n.findings??{},"findings");for(const[r,a]of Object.entries(o)){c(r,"finding mapping ID");const e=u(a,"finding mapping");w(e,["title","rootCauseKey","classification","observedAt","observationRule","observationRationale","verify","relationship","regressionCaseIds","issueReferences","fields"],"finding mapping");for(const f of["title","rootCauseKey"])e[f]!==void 0&&c(e[f],f,256);if(e.classification!==void 0&&A(e.classification,$,"classification"),e.observedAt!==void 0&&k(e.observedAt,"observedAt"),e.observationRationale!==void 0&&c(e.observationRationale,"observationRationale"),e.observationRule!==void 0&&A(e.observationRule,["second_confirmation","last_evidence"],"observationRule"),t(e.observedAt===void 0||e.observationRule===void 0,"observedAt","Choose an explicit time or an evidence rule, not both"),e.verify!==void 0&&t(typeof e.verify=="boolean","verify","Requires a boolean"),e.relationship!==void 0&&E(e.relationship),e.regressionCaseIds!==void 0&&q(e.regressionCaseIds,"regressionCaseIds"),e.issueReferences!==void 0&&M(e.issueReferences),e.fields!==void 0){const f=u(e.fields,"fields");w(f,[...B],"fields");for(const[l,y]of Object.entries(f))c(y,l)}}const d=u(n.cases??{},"cases");for(const r of Object.values(d)){const a=u(r,"case mapping");w(a,["sourceId","engineId","profileId","failureKey","testType","classification"],"case mapping");for(const e of["engineId","profileId"])c(a[e],e);for(const e of["sourceId","failureKey","testType"])a[e]!==void 0&&c(a[e],e,e==="sourceId"?128:4096);a.classification!==void 0&&A(a.classification,T,"case.classification")}if(n.runReceipts!==void 0)for(const[r,a]of Object.entries(u(n.runReceipts,"runReceipts")))c(r,"runId",128),c(a,"receiptId",128);return{...n,findings:o,cases:d}}function U(i,n){const s=u(i.evidence??{},"evidence"),o=q(n?s.reproducingRunIds??[]:i.runIds??[],"runIds",1e4),d=new Set(n?[]:o);for(const e of R(s.runs??[],"evidence.runs"))d.add(c(u(e,"evidence run").runId,"runId",128));const r=[];for(const e of R(n?s.artifacts??[]:i.artifacts??[],"artifacts")){const f=typeof e=="string"?{path:e}:u(e,"artifact"),l=c(f.path,"artifact.path"),y=/^(?:\.testkit\/results\/runs\/)?([^/]+)\/(.+)$/.exec(l),g=typeof f.runId=="string"?f.runId:y?.[1];if(t(g,"artifact.runId","Artifact requires an explicit run identity"),n&&!o.includes(g))continue;const v=`.testkit/results/runs/${g}/`,p=l.startsWith(v)?l.slice(v.length):l.startsWith(`${g}/`)?l.slice(g.length+1):l;t(!p.startsWith("/")&&!p.includes("\\")&&p.split("/").every(C=>C&&C!=="."&&C!==".."),"artifact.path","Artifact path must be normalized and relative"),r.push({runId:g,path:p}),d.add(g)}for(const e of o)t(d.has(e),"evidence","Confirming run requires source evidence"),r.some(f=>f.runId===e)||r.push({runId:e,path:"run.json"});const a=[...new Map(r.map(e=>[`${e.runId}\0${e.path}`,e])).values()];return t(a.length<=64,"evidence","At most 64 evidence references can be mapped"),a}function H(i,n,s,o){const d=i.observedAt??i.recordedAt;if(d!==void 0){const e=k(d,"observedAt");return t(n.observedAt===void 0||Date.parse(n.observedAt)===Date.parse(e),"observedAt","Mapping cannot replace an original observation time"),{observedAt:e,observation:{origin:"source",rationale:"Preserved original observation time"}}}if(n.observedAt!==void 0)return{observedAt:k(n.observedAt,"observedAt"),observation:{origin:"mapping",rationale:n.observationRationale??"Explicit observation time supplied by the mapping"}};t(n.observationRule,"observedAt","Missing observation time requires an explicit mapping or evidence rule");const r=[...new Set(s.map(e=>e.runId))].map(e=>({runId:e,observedAt:k(o.get(e),"evidence observation time")}));r.sort((e,f)=>Date.parse(e.observedAt)-Date.parse(f.observedAt));const a=n.observationRule==="second_confirmation"?r[1]:r.at(-1);return{observedAt:k(a?.observedAt,"observedAt"),observation:{origin:n.observationRule,rationale:n.observationRationale??(n.observationRule==="second_confirmation"?"The second distinct confirming run establishes the two-run observation":"The latest cited evidence run establishes the observation"),runIds:r.map(e=>e.runId)}}}function z(i,n){if(i==null)return;const s=typeof i=="string"?i:j(i);return c(s,n)}function P(i,n,s,o,d){const r=c(i.id,"id",128);t(/^[A-Za-z0-9_-]{1,128}$/.test(r),"id","Finding IDs must use letters, numbers, underscores or hyphens");const a=c(s.rootCauseKey??i.deduplicationKey,"rootCauseKey",256);t(i.deduplicationKey===void 0||s.rootCauseKey===void 0||s.rootCauseKey===i.deduplicationKey,"rootCauseKey","Original deduplication keys must be preserved");const e={title:c(s.title??i.title,"title",256),rootCauseKey:a,classification:A(s.classification??i.classification??(o?"product_bug":void 0),$,"classification")},f=u(i.contract??{},"contract"),l=i.reproduction&&typeof i.reproduction=="object"?Object.fromEntries(Object.entries(u(i.reproduction,"reproduction")).filter(([v])=>v!=="variants")):i.reproduction,y={expectedBehavior:f.expected??i.expected,authority:f.sources,observedBehavior:i.actual,impact:i.impact,severity:i.severity,reproduction:l,limitations:i.evidenceLimitations};for(const v of B){const p=z(s.fields?.[v]??y[v],v);p!==void 0&&(e[v]=p)}i.surface!==void 0&&(e.surface=c(i.surface,"surface")),(s.issueReferences!==void 0||i.issueReferences!==void 0)&&(e.issueReferences=M(s.issueReferences??i.issueReferences));const g=U(i,o);return{originalId:r,source:{kind:"finding",id:r,digest:D(n)},sourceRecord:n,...H(i,s,g,d),finding:e,verify:s.verify??o,relationship:s.relationship??{kind:"independent"},evidence:g,regressionSourceIds:q(s.regressionCaseIds??i.regressionCaseIds??[],"regressionCaseIds")}}function W(i,n,s){const o=c(i.id,"id");t(s,"case mapping","Historical engine and profile identity require an explicit case mapping");const d=c(s.sourceId??o,"sourceId",128),r=R(i.fingerprints,"fingerprints");t(r.length===1,"fingerprints","A case requires exactly one unambiguous fingerprint");const a=u(r[0],"fingerprint");t(s.failureKey!==void 0||a.errorIncludes===void 0&&a.metricKey===void 0,"failureKey","Selector-based fingerprints require an explicit failure key mapping");const e=[a.service,s.testType??a.type,s.engineId,s.profileId,a.path,s.failureKey??a.failureKey].map(v=>{const p=c(v,"fingerprint");return t(!p.includes("::"),"fingerprint","Fingerprint components cannot contain ::"),p}),f=u(i.lifecycle,"lifecycle"),l=k(f.firstSeenAt,"firstSeenAt"),y=k(f.lastSeenAt,"lastSeenAt");t(Date.parse(l)<=Date.parse(y),"lifecycle","Last observation cannot precede first observation");const g={id:d,service:e[0],testType:e[1],engineId:e[2],profileId:e[3],path:e[4],failureKey:e[5],fingerprint:[...e.slice(0,5),"failure",e[5]].join("::"),title:V(i.summary),classification:A(s.classification??i.classification,T,"case.classification"),state:A(i.state,["active","resolved","fixed_pending_verification"],"case.state"),firstSeenAt:l,lastSeenAt:y};if(i.issue!==void 0&&i.issue!==null){const v=u(i.issue,"issue"),p=x(v.number);t(Number.isSafeInteger(p)&&Number(p)>0&&Number(p)<=2147483647,"issue.number","Requires a valid issue number"),g.issueNumber=Number(p),g.issueRepository=c(v.repository,"issue.repository")}return{originalId:o,source:{kind:"case",id:d,digest:D(n)},sourceRecord:n,observedAt:y,observation:{origin:"lifecycle",rationale:"Preserved original lastSeenAt lifecycle time"},case:g}}export function mapRecords(i,n,s,o){const d=u(i,"registry"),r=u(n,"regressions");t(x(d.schemaVersion)===1,"registry.schemaVersion","Requires campaign schema 1"),t(x(r.schemaVersion)===3,"regressions.schemaVersion","Requires regression schema 3");const a=R(d.bugs,"bugs"),e=R(d.classifiedNonBugs,"classifiedNonBugs"),f=R(r.cases,"cases"),l=[],y=[],g=new Set,v=new Set,p=new Set;for(const[b,I]of[["case",f],["bug",a],["observation",e]])for(const K of I){let S="unknown";try{const m=u(K,b);S=c(m.id,"id"),t(Buffer.byteLength(j(K))<=N,"sourceRecord","Source record exceeds 128 KiB");const h=b==="case"?W(m,K,Object.hasOwn(s.cases,S)?s.cases[S]:void 0):P(m,K,Object.hasOwn(s.findings,S)?s.findings[S]:{},b==="bug",o),O=`${h.source.kind}\0${h.source.id}`;if(t(!g.has(O),"source.id","Duplicate source identity or alias collision"),g.add(O),h.finding&&(t(!v.has(h.finding.rootCauseKey),"rootCauseKey","Multiple findings share a root-cause key"),v.add(h.finding.rootCauseKey)),h.case){const _=h.case.fingerprint;t(!p.has(_),"fingerprint","Multiple source cases share a mapped fingerprint"),p.add(_)}h.fieldDispositions=L(m,h,b),l.push(h)}catch(m){y.push({kind:b,id:S,field:m.field??"record",detail:m instanceof Error?m.message:"Invalid source record"})}}const C=new Map(l.filter(b=>b.case).map(b=>[b.originalId,b.source.id]));for(const b of l)if(b.finding){for(const I of b.regressionSourceIds??[])C.has(I)||y.push({kind:"finding",id:b.originalId,field:"regressionCaseIds",detail:`Referenced case is not mapped: ${I}`});b.regressionSourceIds=(b.regressionSourceIds??[]).map(I=>C.get(I)??I)}return{records:l,problems:y,sourceSummary:{bugs:a.length,observations:e.length,cases:f.length}}}
@@ -0,0 +1,175 @@
1
+ import type { FindingData, Relationship } from "../../../cloud/campaigns.js";
2
+ import type { HistoricalCase, HistoricalManifest } from "../../../cloud/historical-contract.js";
3
+ export interface MigrationTarget {
4
+ origin: string;
5
+ projectId: string;
6
+ campaignId: string;
7
+ }
8
+ export interface RepositoryIdentity {
9
+ host: string;
10
+ owner: string;
11
+ name: string;
12
+ }
13
+ export interface FindingMapping {
14
+ title?: string;
15
+ rootCauseKey?: string;
16
+ classification?: FindingData["classification"];
17
+ observedAt?: string;
18
+ observationRule?: "second_confirmation" | "last_evidence";
19
+ observationRationale?: string;
20
+ verify?: boolean;
21
+ relationship?: Relationship;
22
+ regressionCaseIds?: string[];
23
+ issueReferences?: string[];
24
+ fields?: Partial<Pick<FindingData, "expectedBehavior" | "authority" | "observedBehavior" | "impact" | "severity" | "reproduction" | "limitations">>;
25
+ }
26
+ export interface CaseMapping {
27
+ sourceId?: string;
28
+ engineId: string;
29
+ profileId: string;
30
+ failureKey?: string;
31
+ testType?: string;
32
+ classification?: string;
33
+ }
34
+ export interface MigrationMapping {
35
+ schemaVersion: 1;
36
+ namespace: string;
37
+ repository: RepositoryIdentity;
38
+ findings: Record<string, FindingMapping>;
39
+ cases: Record<string, CaseMapping>;
40
+ runReceipts?: Record<string, string>;
41
+ }
42
+ export interface SourceFile {
43
+ path: string;
44
+ bytes: number;
45
+ sha256: string;
46
+ }
47
+ export interface ImportSource {
48
+ kind: "run" | "case" | "finding";
49
+ id: string;
50
+ digest: string;
51
+ }
52
+ export interface EvidenceFile {
53
+ path: string;
54
+ absolutePath: string;
55
+ bytes: number;
56
+ sha256: string;
57
+ }
58
+ export interface PlannedRun {
59
+ runId: string;
60
+ reusedOriginalEvidence?: boolean;
61
+ observedAt: string;
62
+ request: {
63
+ schemaVersion: 1;
64
+ evidenceFormat?: "zip-v1";
65
+ source: ImportSource;
66
+ sourceRecord: RunSourceRecord;
67
+ manifest: HistoricalManifest;
68
+ artifacts: Array<{
69
+ path: string;
70
+ originalPath: string;
71
+ originalBytes: number;
72
+ originalSha256: string;
73
+ transformation?: string;
74
+ }>;
75
+ };
76
+ files: EvidenceFile[];
77
+ }
78
+ export interface RunSourceRecord {
79
+ runId: string;
80
+ observedAt: string;
81
+ originalManifestSha256: string;
82
+ originalManifestDigest: string;
83
+ converterVersion: "testkit-legacy-v1";
84
+ schemaTuple: {
85
+ manifest: number;
86
+ run: number;
87
+ provenance: number;
88
+ };
89
+ }
90
+ export interface PlannedRecord {
91
+ originalId: string;
92
+ source: ImportSource;
93
+ sourceRecord: unknown;
94
+ observedAt: string;
95
+ case?: HistoricalCase;
96
+ finding?: FindingData;
97
+ relationship?: Relationship;
98
+ verify?: boolean;
99
+ evidence?: Array<{
100
+ runId: string;
101
+ path: string;
102
+ }>;
103
+ regressionSourceIds?: string[];
104
+ observation?: {
105
+ origin: "source" | "mapping" | "second_confirmation" | "last_evidence" | "lifecycle";
106
+ rationale: string;
107
+ runIds?: string[];
108
+ };
109
+ fieldDispositions?: Array<{
110
+ field: string;
111
+ disposition: "mapped" | "retained" | "blocked";
112
+ reason: string;
113
+ target?: string;
114
+ }>;
115
+ }
116
+ export interface MigrationProblem {
117
+ kind: string;
118
+ id: string;
119
+ field: string;
120
+ detail: string;
121
+ }
122
+ export interface MigrationPlan {
123
+ schemaVersion: 1;
124
+ converterVersion: "testkit-legacy-v1";
125
+ target: MigrationTarget;
126
+ namespace: string;
127
+ sourceDir: string;
128
+ outputDir: string;
129
+ sourceFiles: SourceFile[];
130
+ mappingFile: SourceFile;
131
+ inputFiles: {
132
+ registry: string;
133
+ regressions: string;
134
+ mapping: string;
135
+ };
136
+ sourceSummary: {
137
+ bugs: number;
138
+ observations: number;
139
+ cases: number;
140
+ runs: number;
141
+ };
142
+ repository: RepositoryIdentity;
143
+ campaignVersion: number;
144
+ minimumConfirmingRuns: number;
145
+ runs: PlannedRun[];
146
+ records: PlannedRecord[];
147
+ reusedRuns: Record<string, string>;
148
+ problems: MigrationProblem[];
149
+ dispositions?: Array<{
150
+ kind: string;
151
+ id: string;
152
+ status: "mapped" | "unmapped";
153
+ sourceId?: string;
154
+ detail?: string;
155
+ retainedFields?: string[];
156
+ fields?: NonNullable<PlannedRecord["fieldDispositions"]>;
157
+ }>;
158
+ plannedCaseIds?: Record<string, string>;
159
+ ready: boolean;
160
+ }
161
+ export interface PlanOptions extends MigrationTarget {
162
+ sourceDir: string;
163
+ registry: string;
164
+ regressions: string;
165
+ mapping: string;
166
+ outputDir: string;
167
+ env?: NodeJS.ProcessEnv;
168
+ }
169
+ export interface MigrationResult {
170
+ complete: boolean;
171
+ planPath: string;
172
+ reportPath: string;
173
+ importId?: string;
174
+ problems: MigrationProblem[];
175
+ }
@@ -0,0 +1 @@
1
+ export{};
@@ -0,0 +1,7 @@
1
+ import type { MigrationPlan, MigrationProblem, PlanOptions } from "./model.js";
2
+ export declare function planMigration(options: PlanOptions): Promise<{
3
+ ready: boolean;
4
+ planPath: string;
5
+ problems: MigrationProblem[];
6
+ summary: MigrationPlan["sourceSummary"];
7
+ }>;
@@ -0,0 +1 @@
1
+ import $ from"node:fs";import M from"node:path";import{walkCloudPages as _}from"../../../cloud/pagination.js";import{CloudClient as Z}from"../../../cloud/client.js";import{cloudToken as ee}from"../credentials.js";import{HistoricalClient as ie}from"../../../cloud/historical.js";import{historicalDigest as L,parseHistoricalJson as ne}from"../../../cloud/historical-json.js";import{array as z,digest as U,object as D,readBoundedFile as re,readSourceJson as G,sanitize as h,separateOutput as te,text as Q,withOutputLock as oe,writeDocument as se}from"./files.js";import{includeOriginalManifest as ae,prepareHistoricalRun as de,referencedRuns as ce,verifyCitedHashes as W}from"./evidence.js";import{decodeMapping as pe,mapRecords as fe}from"./mapping.js";export async function planMigration(t){const g=$.realpathSync(t.sourceDir),u=M.resolve(t.outputDir);te(g,u);const a=t.env??process.env,y={origin:t.origin,projectId:t.projectId,campaignId:t.campaignId},H=await ee(y.origin,a),f=new Z({...y,token:H}),q=new ie({...y,token:H});y.origin=f.origin.origin;for(const[w,d]of Object.entries(y))Q(d,w,w==="origin"?4096:128);return oe(u,async()=>{const w=M.join(u,"plan.json");if($.existsSync(w)||$.existsSync(M.join(u,"evidence")))throw new Error("Migration output already contains a plan or derived evidence; use a new output directory");const d=[],I=G(g,t.registry,d),R=G(g,t.regressions,d),x=M.resolve(g,t.mapping),O=re(x,8*1024**2),o=pe(ne(new TextDecoder("utf-8",{fatal:!0}).decode(O)));if(L(o)!==L(h(o,a)))throw new Error("Mapping contains sensitive URL or credential data; sanitize it before planning");const X=await q.repository();for(const e of["host","owner","name"])if(X[e].toLowerCase()!==o.repository[e].toLowerCase())throw new Error("Selected Cloud project repository differs from the explicit mapping");const l=await f.campaign(t.campaignId),V=await f.snapshot(),r=[],C=[],B=ce(I,R);for(const e of B)try{const i=de({sourceDir:g,outputDir:u,runId:e,mapping:o,sourceFiles:d,env:a});i.request.evidenceFormat="zip-v1",C.push(i)}catch(i){r.push({kind:"run",id:e,field:"evidence",detail:String(h(i instanceof Error?i.message:String(i),a))})}try{W(I,d),W(R,d)}catch(e){r.push({kind:"source",id:"registry",field:"sha256",detail:String(h(e instanceof Error?e.message:String(e),a))})}const s=fe(h(I,a),h(R,a),o,new Map(C.map(e=>[e.runId,e.observedAt])));r.push(...s.problems);const S=new Map(C.map(e=>[e.runId,e])),K=new Set(s.records.flatMap(e=>(e.evidence??[]).filter(i=>i.path==="manifest.json").map(i=>i.runId)));for(const e of K){const i=S.get(e);if(i)try{ae(i,g,u,d,a)}catch(n){r.push({kind:"run",id:e,field:"evidence",detail:String(h(n instanceof Error?n.message:String(n),a))})}}for(const e of s.records)for(const i of e.evidence??[])S.get(i.runId)?.files.some(n=>n.path===i.path)||r.push({kind:"finding",id:e.originalId,field:"evidence",detail:`Referenced run artifact is unavailable: ${i.runId}/${i.path}`});const F=Object.create(null);for(const[e,i]of Object.entries(o.runReceipts??{})){if(!S.has(e)){r.push({kind:"run",id:e,field:"receipt",detail:"Receipt mapping names an unreferenced run"});continue}try{const n=await f.receipt(i),c=S.get(e);if(!c)throw new Error("Missing planned run");if(n.runId!==e||n.repository.toLowerCase()!==`${o.repository.owner}/${o.repository.name}`.toLowerCase())throw new Error("Mapped receipt identity does not match original run/repository");if(n.manifestDigest!==c.request.manifest.digest){if(n.manifestDigest!==c.request.sourceRecord.originalManifestDigest)throw new Error("Mapped receipt has a different evidence representation");if(K.has(e))throw new Error("Reused original receipt cannot supply a manifest.json evidence citation");c.reusedOriginalEvidence=!0}F[e]=i}catch(n){r.push({kind:"run",id:e,field:"receipt",detail:String(h(n instanceof Error?n.message:String(n),a))})}}const b=new Set,P=new Map;await _(async e=>{const i=await f.snapshot({campaignId:t.campaignId,limit:100,...e?{cursor:e}:{}});if(i.campaignVersion!==void 0&&i.campaignVersion!==l.version)throw new Error("Campaign changed during dry-run collision reads; repeat planning");return i},e=>{for(const i of e){if(b.has(i.id))throw new Error("Cloud repeated a finding identity during planning");b.add(i.id),P.set(i.rootCauseKey,i.id)}if(b.size>1e5)throw new Error("Remote finding inventory exceeds migration bound")});for(const e of s.records){if(!e.finding)continue;if(b.has(e.source.id)){const m=(await f.finding(t.campaignId,e.source.id)).finding.import;(!m||m.namespace!==o.namespace||m.digest!==e.source.digest)&&r.push({kind:"finding",id:e.originalId,field:"identity",detail:"Existing finding conflicts with this source identity; resolve before applying"})}const n=P.get(e.finding.rootCauseKey);n&&n!==e.source.id&&r.push({kind:"finding",id:e.originalId,field:"rootCauseKey",detail:"Another remote finding uses this root-cause key"})}const A={},k=new Map,J=new Map;for(const e of V.cases)J.set(e.fingerprint,e.id);await _(e=>q.cases(e,100),e=>{for(const i of e){if(k.has(i.id))throw new Error("Cloud repeated a case identity during planning");k.set(i.id,i.fingerprint)}if(k.size>1e5)throw new Error("Remote case inventory exceeds migration bound")});for(const e of s.records){if(!e.case)continue;const i=e.case.fingerprint,n=J.get(i)??`case_${U(i).slice(0,16)}`;A[e.source.id]=n,k.has(n)&&k.get(n)!==i&&r.push({kind:"case",id:e.originalId,field:"identity",detail:"Mapped case identity collides with a different remote fingerprint"})}if((await f.campaign(t.campaignId)).version!==l.version)throw new Error("Campaign changed during dry run; repeat planning");if((await f.snapshot()).version!==V.version)throw new Error("Project cases changed during dry run; repeat planning");const N=C.length-Object.keys(F).length+s.records.length;(N<1||N>1e4)&&r.push({kind:"source",id:"inventory",field:"count",detail:"Historical import requires 1 to 10,000 inventory records"});for(const e of s.records)e.verify&&new Set(e.evidence?.map(i=>i.runId)).size<l.minimumConfirmingRuns&&r.push({kind:"finding",id:e.originalId,field:"verification",detail:`Campaign requires ${String(l.minimumConfirmingRuns)} distinct confirming runs`});s.records.some(e=>e.verify)&&l.minimumConfirmingRuns!==2&&r.push({kind:"campaign",id:t.campaignId,field:"minimumConfirmingRuns",detail:"Historical two-run verification policy differs from the selected campaign threshold"});const T=[];for(const[e,i]of[["bug",z(D(I,"registry").bugs,"bugs")],["observation",z(D(I,"registry").classifiedNonBugs,"classifiedNonBugs")],["case",z(D(R,"regressions").cases,"cases")]])for(const n of i){const c=D(n,"source record"),m=Q(c.id,"source ID"),E=s.records.find(p=>p.originalId===m&&p.source.kind===(e==="case"?"case":"finding")),j=r.filter(p=>p.id===m);T.push({kind:e,id:m,status:!E||j.length?"unmapped":"mapped",...E?{sourceId:E.source.id,retainedFields:Object.keys(c).sort(),fields:E.fieldDispositions}:{fields:Object.keys(c).sort().map(p=>({field:p,disposition:"blocked",reason:j.map(Y=>Y.detail).join("; ")||"Record could not be mapped"}))},...j.length?{detail:j.map(p=>`${p.field}: ${p.detail}`).join("; ")}:{}})}const v={schemaVersion:1,converterVersion:"testkit-legacy-v1",target:y,namespace:o.namespace,sourceDir:g,outputDir:u,sourceFiles:d.sort((e,i)=>e.path.localeCompare(i.path)),mappingFile:{path:x,bytes:O.length,sha256:U(O)},inputFiles:{registry:t.registry,regressions:t.regressions,mapping:x},sourceSummary:{...s.sourceSummary,runs:B.length},repository:o.repository,campaignVersion:l.version,minimumConfirmingRuns:l.minimumConfirmingRuns,runs:C,records:s.records,reusedRuns:F,problems:r,ready:r.length===0};return v.dispositions=T,v.plannedCaseIds=A,se(w,{...v,planDigest:L(v)}),{ready:v.ready,planPath:w,problems:r,summary:v.sourceSummary}})}
@@ -0,0 +1,19 @@
1
+ export interface MigrationProgress {
2
+ phase: "source-verification" | "journal-upgrade" | "packaging" | "uploading" | "receipt-accepted" | "record-admission" | "reconciliation" | "completion" | "failed";
3
+ completedRuns: number;
4
+ totalRuns: number;
5
+ /** Payload bytes read for upload during this attempt, including retries. */
6
+ bytesTransferred: number;
7
+ verifiedBytes?: number;
8
+ retries: number;
9
+ runId?: string;
10
+ operation?: string;
11
+ detail?: string;
12
+ }
13
+ export type MigrationProgressCallback = (progress: MigrationProgress) => void;
14
+ export type MigrationProgressReporter = ReturnType<typeof createMigrationProgress>;
15
+ export declare function createMigrationProgress(onProgress: MigrationProgressCallback | undefined, env: NodeJS.ProcessEnv): {
16
+ readonly current: MigrationProgress;
17
+ fail(error: unknown): void;
18
+ emit(phase: MigrationProgress["phase"], update?: Partial<Omit<MigrationProgress, "phase">>): void;
19
+ };
@@ -0,0 +1 @@
1
+ import{sanitize as o}from"./files.js";export function createMigrationProgress(s,a){let r={phase:"source-verification",completedRuns:0,totalRuns:0,bytesTransferred:0,verifiedBytes:0,retries:0};const t=e=>String(o(e,a)).replace(/[a-z][a-z0-9+.-]*:\/\/[^\s"'<>]+/giu,"<url>").replace(/\p{Cc}/gu," ").slice(0,1024),i=e=>{r={...e,...e.runId?{runId:t(e.runId)}:{},...e.operation?{operation:t(e.operation)}:{},...e.detail?{detail:t(e.detail)}:{}},s?.(r)};return{get current(){return r},fail(e){i({...r,phase:"failed",detail:e instanceof Error?e.message:String(e)})},emit(e,n={}){i({phase:e,completedRuns:r.completedRuns,totalRuns:r.totalRuns,bytesTransferred:r.bytesTransferred,verifiedBytes:r.verifiedBytes??0,retries:r.retries,...n})}}}
@@ -0,0 +1,22 @@
1
+ import type { FindingData } from "../../../cloud/campaigns.js";
2
+ import { type HistoricalOutcome, type HistoricalCase } from "../../../cloud/historical-contract.js";
3
+ import type { HistoricalClient } from "../../../cloud/historical.js";
4
+ import type { MigrationPlan, MigrationProblem, PlannedRecord } from "./model.js";
5
+ import type { MigrationJournal } from "./state.js";
6
+ interface ReconciliationResult {
7
+ complete: boolean;
8
+ problems: MigrationProblem[];
9
+ items: HistoricalOutcome[];
10
+ counts: unknown;
11
+ campaignVersion: number;
12
+ verifyCompletion(): Promise<ReconciliationResult>;
13
+ }
14
+ interface ReconciliationOptions {
15
+ onVerified?: (bytes: number) => void;
16
+ }
17
+ /** Go emits empty text and null slices for omitted optional finding fields. */
18
+ export declare function normalizedFindingData(data: FindingData): Record<string, unknown>;
19
+ export declare function expectedFindingData(record: PlannedRecord, journal: MigrationJournal): FindingData;
20
+ export declare function reconcileState(plan: MigrationPlan, journal: MigrationJournal, client: HistoricalClient, options?: ReconciliationOptions): Promise<ReconciliationResult>;
21
+ export declare function compareHistoricalCase(value: HistoricalCase, expected: HistoricalCase): void;
22
+ export {};
@@ -0,0 +1 @@
1
+ import U from"node:path";import{rm as P}from"node:fs/promises";import"../../../cloud/historical-contract.js";import{canonicalHistoricalJson as H,historicalDigest as T}from"../../../cloud/historical-json.js";import{walkCloudPages as F}from"../../../cloud/pagination.js";import{createReconciliationSpool as _}from"./reconciliation-spool.js";const M=n=>n==="accepted"||n==="reused",R=n=>`${n.kind}\0${n.id}`;function t(n,a){if(!n)throw new Error(a)}function v(n,a,s){t(H(n)===H(a),`${s} differs from the reviewed migration plan`)}function x(n,a,s){const l=y=>{const I=/T\d\d:\d\d:\d\d\.(\d+)/.exec(y)?.[1]??"";return BigInt(Date.parse(y))*1000000n+BigInt((I+"000000000").slice(3,9))};t(typeof n=="string"&&typeof a=="string"&&Number.isFinite(Date.parse(n))&&Number.isFinite(Date.parse(a))&&l(n)===l(a),`${s} differs from the original observation time`)}export function normalizedFindingData(n){const a={};for(const s of["title","rootCauseKey","classification","surface","severity","expectedBehavior","authority","observedBehavior","impact","reproduction","limitations"])a[s]=n[s]??"";for(const s of["variants","issueReferences","regressionCaseIds","evidence"])a[s]=n[s]??[];return a}export function expectedFindingData(n,a){return t(n.finding,"Mapped finding data is missing"),{...n.finding,regressionCaseIds:(n.regressionSourceIds??[]).map(s=>{const l=a.caseIds[s];return t(l,`Missing admitted case mapping for ${s}`),l}),evidence:(n.evidence??[]).map(s=>{const l=a.receiptIds[s.runId];return t(l,`Missing admitted receipt mapping for run ${s.runId}`),{receiptId:l,path:s.path}})}}export async function reconcileState(n,a,s,l={}){return L(n,a,s,l)}async function L(n,a,s,l,y){const I=[],q=[];let b=n.campaignVersion,C=n.minimumConfirmingRuns;const h=async(i,r,d,e)=>{try{await e()}catch(o){I.push({kind:i,id:r,field:d,detail:o instanceof Error?o.message:String(o)})}};await h("campaign",n.target.campaignId,"version",async()=>{const i=await s.campaign();b=i.version,C=i.minimumConfirmingRuns,y&&t(b===y.campaignVersion&&C===y.minimumConfirmingRuns,"Campaign changed across import completion; repeat full reconciliation")});const $=[...n.runs.filter(i=>!Object.hasOwn(n.reusedRuns,i.runId)).map(i=>i.request.source),...n.records.map(i=>i.source)],V=new Map($.map(i=>[R(i),i])),w=new Map;let k;await h("import",a.importId??"missing","inventory",async()=>{t(a.importId,"The migration journal has no admitted import ID");const i=a.importId;t(V.size===$.length,"The reviewed inventory contains duplicate source identities");let r;await F(async d=>{const e=await s.page(i,d);t(e.import.namespace===n.namespace&&e.import.inventoryDigest===T($)&&e.import.total===$.length,"Cloud import inventory or namespace differs from the reviewed plan"),y&&t(e.import.completedAt,"Server import is not complete");const o={id:e.import.id,namespace:e.import.namespace,inventoryDigest:e.import.inventoryDigest,total:e.import.total,completedAt:e.import.completedAt??null};return r===void 0?r=o:v(o,r,"Import identity across pages"),k===void 0?k=e.counts:v(e.counts,k,"Import counts across pages"),e},d=>{for(const e of d){const o=R(e);t(!w.has(o),`Duplicate reconciliation outcome: ${e.kind} ${e.id}`),w.set(o,e),q.push(e)}}),t(w.size===V.size,"Cloud reconciliation does not cover the complete declared inventory");for(const[d,e]of w)t(V.get(d)?.digest===e.digest,`Unexpected or changed reconciliation source: ${e.kind} ${e.id}`)});const O={};for(const i of q){const r=O[i.kind]??={};r[i.status]=(r[i.status]??0)+1}await h("import",a.importId??"missing","counts",()=>{t(k!==void 0,"Cloud reconciliation counts are unavailable"),v(O,k,"Counts derived from all returned source outcomes")});for(const i of $){const r=w.get(R(i));(!r||r.digest!==i.digest||!M(r.status))&&I.push({kind:i.kind,id:i.id,field:"status",detail:r?.detail??`Source is ${r?.status??"missing"}; every declared source must be accepted or reused`})}const z=new Map,B=new Set,E=new Set,A=[];let S;try{await h("evidence","downloads","spool",async()=>{y||(S=await _(n,a))});for(const e of n.runs){const o=a.receiptIds[e.runId];A.push(()=>h("run",e.runId,"receipt",async()=>{t(o,"The journal has no admitted receipt mapping for this run");const c=Object.hasOwn(n.reusedRuns,e.runId),p=w.get(R(e.request.source));c?t(n.reusedRuns[e.runId]===o,"Current receipt mapping differs from the reviewed plan"):(t(p&&M(p.status)&&p.cloudId===o,"Run outcome differs from its admitted receipt mapping"),t(p.evidenceAvailable===!0,"Historical evidence is no longer available"));const f=c?await s.currentReceipt(o):await s.receipt(o);t(f.id===o&&f.projectId===n.target.projectId&&f.runId===e.runId&&f.manifestDigest===(e.reusedOriginalEvidence?e.request.sourceRecord.originalManifestDigest:e.request.manifest.digest),"Receipt run, project, or manifest identity differs from the reviewed run"),t(f.repository.toLowerCase()===`${n.repository.owner}/${n.repository.name}`.toLowerCase(),"Receipt repository differs from the reviewed repository");const m=z.get(o);if(t(m===void 0||m===e.runId,"One receipt was assigned to different original run identities"),z.set(o,e.runId),!c){t("historical"in f,"Expected a historical receipt");const g=f.historical;t(g.sourceDigest===e.request.source.digest&&g.manifestVersion===e.request.manifest.schemaVersion,"Receipt source or schema differs from the reviewed run"),v(g.sourceRecord,e.request.sourceRecord,"Receipt retained source record"),v(g.artifacts.map(u=>({path:u.path,originalPath:u.originalPath,originalSha256:u.originalSha256,originalBytes:u.originalBytes,...u.transformation===void 0?{}:{transformation:u.transformation}})),e.request.artifacts,"Receipt original artifact mappings")}}));for(const c of e.files){const p=A.length;A.push(()=>h("run",e.runId,`artifact:${c.path}`,async()=>{t(o,"Cannot verify artifacts without an admitted receipt");const f=e.request.artifacts.find(u=>u.path===c.path);t(f,"Original artifact mapping is missing");const m=e.reusedOriginalEvidence?{bytes:f.originalBytes,sha256:f.originalSha256}:{bytes:c.bytes,sha256:c.sha256},g=H({receiptId:o,path:c.path,...m});if(y)t(y.artifacts.has(g),"Artifact was not verified before import completion"),Object.hasOwn(n.reusedRuns,e.runId)&&await s.checkArtifactAvailable(o,c.path);else{t(S,"Cannot verify artifacts without a local download directory");const u=U.join(S,`artifact-${String(p)}`);try{await s.download(s.artifactURL(o,c.path),u,m),l.onVerified?.(m.bytes)}finally{await P(u,{force:!0})}}E.add(g),B.add(`${o}\0${c.path}`)}))}}let i=0;const r=async()=>{for(;i<A.length;)await A[i++]()},d=await Promise.allSettled([r(),r()]);for(const e of d)if(e.status==="rejected")throw e.reason}finally{S&&await P(S,{recursive:!0,force:!0})}const N=new Map(n.records.filter(i=>i.source.kind==="case").map(i=>[a.caseIds[i.source.id],i])),K=new Map;N.size&&await h("case","all","list",async()=>{const i=new Set;await F(r=>s.cases(r),r=>{for(const d of r)t(!i.has(d.id),`Duplicate case across Cloud pages: ${d.id}`),i.add(d.id),N.has(d.id)&&K.set(d.id,d)})});for(const i of n.records.filter(r=>r.source.kind==="case"))await h("case",i.source.id,"history",async()=>{const r=a.caseIds[i.source.id],d=w.get(R(i.source));t(r&&d&&d.cloudId===r&&M(d.status),"Case outcome differs from its journal identity mapping");const e=K.get(r);t(e,"Admitted case is absent from the complete Cloud case list"),t(i.case,"Mapped historical case is missing");const o=i.case;t(e.fingerprint===i.case.fingerprint,"Cloud case fingerprint differs from the reviewed fingerprint");let c=0;const p=new Set;await F(f=>s.caseHistory(r,f),f=>{for(const m of f){const g=`${m.id}\0${m.commandType}`;t(!p.has(g),`Duplicate case history event across pages: ${m.id}`),p.add(g);const u=m.historical;m.commandType!=="case.import"||!u||u.sourceId!==i.source.id||T(u.sourceRecord)!==i.source.digest||(d.status!=="reused"&&t(u.importId===a.importId,"Case observation belongs to another import"),v(u.sourceRecord,i.sourceRecord,"Retained case source record"),x(u.observedAt,i.observedAt,"Case observedAt"),compareHistoricalCase(u.case,o),t(m.state===u.case.state&&m.classification===u.case.classification&&m.issueNumber===(u.case.issueNumber??0)&&m.issueRepository===(u.case.issueRepository??""),"Case history event contradicts its original observation"),x(m.appliedAt,u.importedAt,"Case admission time"),c++)}}),t(c===1,`Expected one matching historical case observation; found ${String(c)}`)});const D=new Map;for(const i of n.records.filter(r=>r.source.kind==="finding"))await h("finding",i.source.id,"detail",async()=>{const r=w.get(R(i.source));t(r?.cloudId&&M(r.status),"Finding has no accepted Cloud identity");const d=await s.finding(r.cloudId);t(d.campaignVersion===b,"Campaign changed while reading finding details; reconciliation is inconclusive");const e=d.finding;t(e.id===i.source.id,"Admitted finding ID differs from the declared source identity");const o=expectedFindingData(i,a);v(normalizedFindingData(e.data),normalizedFindingData(o),"Mapped finding data"),v(e.relationship,i.relationship??{kind:"independent"},"Finding relationship");const c=e.import;t(c,"Historical finding source metadata is missing"),t(c.namespace===n.namespace&&c.sourceId===i.source.id&&c.digest===i.source.digest,"Finding import source identity differs from the reviewed plan"),r.status!=="reused"&&t(c.importId===a.importId,"Finding metadata belongs to another import"),v(c.record,i.sourceRecord,"Retained finding source record"),t(T(c.record)===i.source.digest,"Retained finding source digest does not match"),x(c.observedAt,i.observedAt,"Finding observedAt");for(const p of d.evidence)t(p.available&&B.has(`${p.receiptId}\0${p.path}`),`Finding evidence unavailable or not verified: ${p.receiptId}/${p.path}`);if(i.verify){const p=e.verification;t(p,"Requested finding verification is missing"),t(p.findingRevision===e.revision,"Finding verification does not cover its current revision"),t(p.minimumConfirmingRuns===C,"Verification threshold differs from the campaign's current threshold");const f=new Map;for(const m of d.evidence.filter(g=>g.available)){const g=z.get(m.receiptId);t(g,`Verification receipt has no reconciled original run: ${m.receiptId}`);const u=f.get(g);(u===void 0||m.receiptId<u)&&f.set(g,m.receiptId)}t(f.size>=C,`Verification requires ${String(C)} distinct original runs; ${String(f.size)} eligible`),v([...p.confirmingReceiptIds].sort(),[...f.values()].sort(),"Distinct confirming receipt identities")}else t(e.verification===null,"An explicitly unverified historical finding unexpectedly has verification");D.set(e.id,{counted:e.data.classification==="product_bug"&&e.verification!==null&&e.relationship.kind==="independent",verified:e.verification!==null})});return D.size&&await h("campaign",n.target.campaignId,"finding counts",async()=>{const i=new Set;let r=0,d;await F(async e=>{const o=await s.snapshot({campaignId:n.target.campaignId,findings:!0,view:"all",...e?{cursor:e}:{}});return t(o.campaignVersion===b,"Campaign changed during paginated finding reconciliation"),d===void 0?d=o.bugCount:t(o.bugCount===d,"Campaign bug count changed across pages"),o},e=>{for(const o of e){const c=o.id;t(!i.has(c),`Duplicate campaign finding across pages: ${c}`),i.add(c);const p=o.classification==="product_bug"&&o.verified&&o.relationship.kind==="independent";t(o.counted===p,`Finding count does not follow classification, verification and relationship: ${c}`),p&&r++;const f=D.get(c);f&&t(o.counted===f.counted&&o.verified===f.verified,`Finding summary contradicts admitted detail: ${c}`)}}),t(r===d,"Campaign bug count differs from counted findings across all pages");for(const e of D.keys())t(i.has(e),`Admitted finding is absent from the complete campaign feed: ${e}`)}),await h("campaign",n.target.campaignId,"version",async()=>{const i=await s.campaign();t(i.version===b&&i.minimumConfirmingRuns===C,"Campaign changed during reconciliation; repeat reads before declaring completion")}),{complete:I.length===0,problems:I,items:q,counts:O,campaignVersion:b,verifyCompletion:()=>(t(I.length===0,"Full reconciliation must succeed before checking import completion"),L(n,a,s,l,{artifacts:E,campaignVersion:b,minimumConfirmingRuns:C}))}}export function compareHistoricalCase(n,a){for(const s of["id","classification","engineId","failureKey","fingerprint","path","profileId","service","state","testType","title"])v(n[s],a[s],`Historical case ${s}`);for(const s of["firstSeenAt","lastSeenAt"])x(n[s],a[s],`Historical case ${s}`);t((n.version??0)===(a.version??0)&&(n.issueNumber??0)===(a.issueNumber??0)&&(n.issueRepository??"")===(a.issueRepository??""),"Historical case version or issue linkage differs from its original mapping")}
@@ -0,0 +1,4 @@
1
+ import type { MigrationPlan } from "./model.js";
2
+ import type { MigrationJournal } from "./state.js";
3
+ /** Called while execute holds the migration output lock. Unknown files are never reclaimed. */
4
+ export declare function createReconciliationSpool(plan: Pick<MigrationPlan, "outputDir">, journal: Pick<MigrationJournal, "planDigest" | "importId">): Promise<string>;
@@ -0,0 +1 @@
1
+ import r from"node:path";import{lstat as l,mkdtemp as p,readdir as m,rm as f,writeFile as w}from"node:fs/promises";import{canonicalHistoricalJson as d}from"../../../cloud/historical-json.js";import{readBoundedFile as y}from"./files.js";const e=".testkit-reconciliation",h=/^artifact-\d+(?:\.[a-f0-9-]{36}\.partial)?$/u;export async function createReconciliationSpool(n,a){const s=d({schemaVersion:1,planDigest:a.planDigest,importId:a.importId??null});for(const t of await m(n.outputDir,{withFileTypes:!0})){if(!/^reconcile-[A-Za-z0-9]{6}$/u.test(t.name)||!t.isDirectory()||t.isSymbolicLink())continue;const c=r.join(n.outputDir,t.name),u=await m(c,{withFileTypes:!0});if(!u.some(i=>!i.isFile()||i.name!==e&&!h.test(i.name))&&u.some(i=>i.name===e)){try{if(y(r.join(c,e),1024).toString("utf8")!==s)continue}catch{continue}await f(c,{recursive:!0,force:!0})}}const o=await p(r.join(n.outputDir,"reconcile-"));try{const t=await l(o);if(!t.isDirectory()||t.isSymbolicLink())throw new Error("Reconciliation directory is unsafe");return await w(r.join(o,e),s,{flag:"wx",mode:384}),o}catch(t){throw await f(o,{recursive:!0,force:!0}),t}}
@@ -0,0 +1,15 @@
1
+ import { type OperationKind, type OperationRequests, type OperationResults, type MigrationJournal } from "./journal.js";
2
+ export type { MigrationJournal, MigrationOperation } from "./journal.js";
3
+ import type { MigrationPlan } from "./model.js";
4
+ export declare function loadPlan(filename: string): {
5
+ plan: MigrationPlan;
6
+ planDigest: string;
7
+ };
8
+ export declare function verifyPlanFiles(plan: MigrationPlan): void;
9
+ export declare function openJournal(plan: MigrationPlan, planDigest: string): MigrationJournal;
10
+ export declare function saveJournal(plan: MigrationPlan, journal: MigrationJournal): void;
11
+ /** Atomically upgrade a journal already decoded by openJournal, retaining every staged request. */
12
+ export declare function upgradeJournal(plan: MigrationPlan, journal: MigrationJournal): void;
13
+ /** Re-staging must establish availability before an obsolete evidence rejection can be retried. */
14
+ export declare function recoverEvidenceOperation(plan: MigrationPlan, journal: MigrationJournal, key: string): void;
15
+ export declare function performOperation<K extends OperationKind>(plan: MigrationPlan, journal: MigrationJournal, kind: K, key: string, input: OperationRequests[K], run: (saved: OperationRequests[K]) => Promise<OperationResults[K]>, env: NodeJS.ProcessEnv, refreshAccepted?: boolean): Promise<OperationResults[K]>;
@@ -0,0 +1 @@
1
+ import w from"node:fs";import g from"node:path";import{canonicalHistoricalJson as y,historicalDigest as I}from"../../../cloud/historical-json.js";import{validateHistoricalBatch as V,validateHistoricalBegin as R,validateHistoricalEvidence as F}from"../../../cloud/historical-contract.js";import{decodeJournal as q,emptyJournal as M,operationIs as k}from"./journal.js";import{array as v,contained as J,digest as b,object as u,plain as N,readDocument as D,readSource as S,sanitize as O,separateOutput as P,text as f,writeDocument as C}from"./files.js";const j="campaign command conflict: abandoned evidence cleanup is pending; retry after retention completes";function x(t,e){if(t==="receipt"&&e==="evidence is expired")return 422;if((t==="upload"||t==="archive")&&(e==="conflict: publication is pending"||e==="conflict: publication does not accept an archive"))return 409}export function loadPlan(t){const e=u(D(t),"migration plan"),{planDigest:i,...r}=e;if(e.schemaVersion!==1||e.converterVersion!=="testkit-legacy-v1"||I(r)!==i)throw new Error("Migration plan version/digest is invalid");for(const n of["sourceDir","outputDir"])f(e[n],n);if(f(e.namespace,"namespace",128),g.resolve(t)!==g.join(String(e.outputDir),"plan.json"))throw new Error("Migration plan must remain in its bound output directory");P(String(e.sourceDir),String(e.outputDir));const a=u(e.target,"target");for(const n of["origin","projectId","campaignId"])f(a[n],n);for(const n of["sourceFiles","runs","records","problems"])v(e[n],n);if(typeof e.ready!="boolean")throw new Error("Migration readiness must be a boolean");if(!Number.isSafeInteger(e.campaignVersion)||Number(e.campaignVersion)<1||!Number.isSafeInteger(e.minimumConfirmingRuns)||Number(e.minimumConfirmingRuns)<1||Number(e.minimumConfirmingRuns)>64)throw new Error("Invalid migration campaign version or verification threshold");const m=v(e.runs,"runs"),p=v(e.records,"records");if(m.length+p.length>1e4)throw new Error("Migration inventory exceeds bound");const h=u(e.reusedRuns,"reusedRuns");for(const[n,o]of Object.entries(h))if(!m.some(c=>u(c,"run").runId===n)||!/^[A-Za-z0-9_-]{1,128}$/u.test(f(o,"reused receipt",128)))throw new Error("Invalid reused run receipt identity");for(const n of v(e.runs,"runs")){const o=u(n,"run"),c=u(o.request,"evidence request");F(c);const d=u(N(c.sourceRecord),"run sourceRecord");if(y(d)!==y(c.sourceRecord))throw new Error("Invalid run source numeric encoding");if(c.sourceRecord=d,d.runId!==o.runId||d.observedAt!==o.observedAt||d.converterVersion!=="testkit-legacy-v1")throw new Error("Invalid run source identity");for(const E of["originalManifestSha256","originalManifestDigest"])if(!/^[a-f0-9]{64}$/.test(f(d[E],E,64)))throw new Error("Invalid original manifest digest");const l=u(d.schemaTuple,"schemaTuple"),$=u(c.manifest,"manifest");if(l.manifest!==$.schemaVersion||l.run!==(l.manifest===1?16:19)||l.provenance!==(l.manifest===1?1:3))throw new Error("Invalid original schema tuple")}const s=[...m.filter(n=>!Object.hasOwn(h,f(u(n,"run").runId,"runId"))).map(n=>u(u(n,"run").request,"evidence request").source),...p.map(n=>u(n,"record").source)];(e.ready||s.length)&&R({schemaVersion:1,idempotencyKey:`migration-${i}`,namespace:e.namespace,inventory:s,inventoryDigest:I(s)});for(let n=0;n<p.length;n+=25)V({schemaVersion:1,idempotencyKey:"plan-records",expectedVersion:e.campaignVersion,records:p.slice(n,n+25)});return{plan:r,planDigest:f(i,"planDigest",64)}}export function verifyPlanFiles(t){for(const r of t.sourceFiles){const a=S(t.sourceDir,f(r.path,"source path"),[],r.bytes);if(a.length!==r.bytes||b(a)!==r.sha256)throw new Error(`Source changed since planning: ${r.path}`)}const e=f(t.mappingFile.path,"mapping file"),i=w.lstatSync(e);if(!i.isFile()||i.isSymbolicLink()||i.size!==t.mappingFile.bytes||b(w.readFileSync(e))!==t.mappingFile.sha256)throw new Error("Mapping changed since planning");for(const r of t.runs)for(const a of r.files){if(J(t.outputDir,`evidence/${r.runId}/${a.path}`)!==a.absolutePath)throw new Error("Derived evidence path differs from its plan");const p=S(t.outputDir,`evidence/${r.runId}/${a.path}`,[],a.bytes);if(p.length!==a.bytes||b(p)!==a.sha256)throw new Error(`Derived evidence changed: ${r.runId}/${a.path}`)}}export function openJournal(t,e){const i=g.join(t.outputDir,"journal.json");return w.existsSync(i)?q(D(i),t,e):M(t,e)}export function saveJournal(t,e){C(g.join(t.outputDir,"journal.json"),e)}export function upgradeJournal(t,e){if(e.schemaVersion===2)return;const i=w.existsSync(g.join(t.outputDir,"journal.json"));e.schemaVersion=2,i&&(e.upgradedFrom=1),e.legacyStages=e.operations.filter(r=>r.kind==="stage").map(r=>r.key.slice(6));for(const r of e.operations)r.kind==="stage"&&r.state==="rejected"&&r.error===j&&(r.state="unknown");saveJournal(t,e)}export function recoverEvidenceOperation(t,e,i){const r=e.operations.find(a=>a.key===i);r?.state==="rejected"&&x(r.kind,r.error)!==void 0&&(r.state="unknown",saveJournal(t,e))}export async function performOperation(t,e,i,r,a,m,p,h=!1){let s=e.operations.find(o=>k(o,i)&&o.key===r);const n=y(a);if(s&&s.request!==n)throw new Error(`Conflicting retry payload: ${r}`);if(s?.state==="accepted"&&!h){if(s.result===void 0)throw new Error("Accepted operation has no decoded result");return s.result}if(s?.state==="rejected")throw new Error(`Prior operation was definitively rejected: ${r}; use a reviewed new plan for corrections`);s||(s={kind:i,key:r,request:n,state:"pending"},e.operations.push(s)),saveJournal(t,e);try{const o=await m(a);if(s.result=o,s.state="rejected"in o&&o.rejected===!0?"rejected":"accepted",delete s.error,saveJournal(t,e),s.state==="rejected")throw new Error(`Cloud rejected the atomic batch: ${r}; durable per-record diagnostics are in the journal`);return o}catch(o){if(s.state!=="rejected"){const c=o&&typeof o=="object"&&"status"in o?Number(o.status):void 0,d=o instanceof Error?o.message:void 0;s.state=c&&c>=400&&c<500&&![401,403,408,429,...i==="begin"?[404]:[]].includes(c)&&!(i==="stage"&&c===409&&d===j)&&c!==x(i,d)?"rejected":"unknown"}throw s.error=String(O(o instanceof Error?o.message:String(o),p)),saveJournal(t,e),o}}
@@ -0,0 +1,6 @@
1
+ import { HistoricalClient } from "../../../cloud/historical.js";
2
+ import type { MigrationPlan } from "./model.js";
3
+ export { batchRecords, dependencyOrder } from "./commands.js";
4
+ import { type MigrationJournal } from "./state.js";
5
+ import type { MigrationProgressReporter } from "./progress.js";
6
+ export declare function transfer(plan: MigrationPlan, journal: MigrationJournal, client: HistoricalClient, env: NodeJS.ProcessEnv, progress: MigrationProgressReporter): Promise<void>;
@@ -0,0 +1 @@
1
+ import"../../../cloud/historical.js";import{historicalDigest as b}from"../../../cloud/historical-json.js";import{batchRecords as k,beginCommand as q,plannedRecords as D}from"./commands.js";export{batchRecords,dependencyOrder}from"./commands.js";import{performOperation as m,recoverEvidenceOperation as z,saveJournal as l}from"./state.js";import{savedArchiveRequest as A,stagingRequest as R}from"./journal.js";import{prepareMigrationArchive as O,removeMigrationArchive as C}from"./archive.js";export async function transfer(r,i,u,p,I){let y=r.runs.filter(e=>i.receiptIds[e.runId]).length;const h=(e,o={})=>{I.emit(e,{completedRuns:y,totalRuns:r.runs.length,...o})},g=(e,o,t,f=!1)=>{const a=i.operations.some(s=>s.key===o&&(f||s.state!=="accepted"));h(e,{runId:t,operation:o,retries:I.current.retries+(a?1:0)})},w=(e,o,t=!1)=>{z(r,i,e),g("uploading",e,o,t)},$=(e,o,t)=>{h("uploading",{runId:o,operation:t,bytesTransferred:I.current.bytesTransferred+e})};for(const e of r.runs)i.receiptIds[e.runId]&&await C(r,e.runId);if(!i.operations.some(e=>e.kind==="batch")){const e=await u.campaign();if(e.version!==r.campaignVersion||e.minimumConfirmingRuns!==r.minimumConfirmingRuns)throw new Error("Campaign version or verification threshold changed since planning; create a new reviewed plan")}g("uploading","begin");const v=await m(r,i,"begin","begin",q(r,i.planDigest),e=>u.begin(e),p);i.importId=v.id,l(r,i);for(const e of r.runs){if(i.receiptIds[e.runId])continue;const o=`stage:${e.runId}`;g("uploading",o,e.runId,!0);const t=await m(r,i,"stage",o,R(r,i,e.runId),s=>u.stage(v.id,s),p,!0);if(t.status==="rejected")throw new Error(`Cloud rejected evidence for ${e.runId}; inspect the publication before retrying`);if(t.status==="accepted"&&(t.archive||t.uploads.length))throw new Error("Accepted historical evidence unexpectedly includes upload targets");if(t.status==="pending"&&(R(r,i,e.runId).evidenceFormat==="zip-v1"?!t.archive||t.uploads.length!==0:t.archive||t.uploads.length!==e.files.length))throw new Error(`Cloud staging transport differs from the saved request for ${e.runId}`);if(t.archive){const s=t.archive,n=`archive:${e.runId}:${b(t.archive.url)}`,d=A(i,n);h("packaging",{runId:e.runId});const c=await O(r,e,t.archive.maxBytes,d);w(n,e.runId,!0),await m(r,i,"archive",n,{url:t.archive.url,bytes:c.bytes,sha256:c.sha256,manifestDigest:e.request.manifest.digest},async()=>(await u.upload(s.url,c.path,c.bytes,"application/zip",x=>{$(x,e.runId,n)}),{uploaded:!0}),p,!0)}for(const s of t.uploads){const n=e.files.find(c=>c.path===s.path);if(!n||n.bytes!==s.bytes||n.sha256!==s.sha256)throw new Error(`Cloud requested an unplanned artifact: ${e.runId}/${s.path}`);const d=`upload:${e.runId}:${String(s.index)}:${b(s.url)}`;w(d,e.runId,!0),await m(r,i,"upload",d,{url:s.url,path:n.absolutePath,bytes:n.bytes,sha256:n.sha256},async()=>(await u.upload(s.url,n.absolutePath,n.bytes,"application/octet-stream",c=>{$(c,e.runId,d)}),{uploaded:!0}),p,!0)}const f=`receipt:${e.runId}:${b(t.completeUrl)}`;w(f,e.runId);const a=await m(r,i,"receipt",f,{url:t.completeUrl},()=>u.completeEvidence(t.completeUrl),p);if(a.runId!==e.runId||a.manifestDigest!==e.request.manifest.digest)throw new Error(`Receipt differs from planned run: ${e.runId}`);i.receiptIds[e.runId]=a.id,l(r,i),y++,h("receipt-accepted",{runId:e.runId}),await C(r,e.runId)}let E=r.campaignVersion;for(const e of["case","finding"]){const o=D(r,i,e);for(const[t,f]of k(o).entries()){const a=`${e}s-${String(t)}`,s={schemaVersion:1,idempotencyKey:`migration-${i.planDigest}-${e}-${String(t)}`,expectedVersion:E,records:f};g("record-admission",a);const n=await m(r,i,"batch",a,s,d=>u.batch(v.id,d),p);if(E=n.version,e==="case"){for(const d of n.items){if(!d.cloudId||!["accepted","reused"].includes(d.status))throw new Error(`Case was not admitted: ${d.id}`);i.caseIds[d.id]=d.cloudId}l(r,i)}}}}
@@ -0,0 +1,11 @@
1
+ import type { SchemaOperationConfigResolver } from "../../database/schema-operations.js";
2
+ export interface SchemaOperationOptions {
3
+ dir?: string;
4
+ service?: string;
5
+ }
6
+ export interface PreparedSchemaOperation {
7
+ productDir: string;
8
+ serviceName: string;
9
+ resolveConfigs: SchemaOperationConfigResolver;
10
+ }
11
+ export declare function prepareSchemaOperation(options: Readonly<SchemaOperationOptions>, graphPrefix: "schema-refresh" | "schema-verify"): Promise<PreparedSchemaOperation>;
@@ -0,0 +1 @@
1
+ import g from"node:path";import{resolveProductDir as f}from"../../config/loader/index.js";import{collectRequiredConfigs as l,loadManagedConfigs as p,resolveTargetConfig as d,topologicallySortConfigs as u}from"../../config/loader/managed-configs.js";import{runtimePlanning as v}from"../../environment/runtime-planning.js";export async function prepareSchemaOperation(r,s){const o=f(process.cwd(),r.dir),{configs:n}=await p({dir:o}),e=d(n,r.service||null),a=l(n,e.name);return{productDir:o,serviceName:e.name,resolveConfigs(c){const t=v.resolveRuntimeInstanceConfigs(a,"runtime-1",g.join(c,"runtime-1"),{graphDirName:`${s}-${e.name}`,portNamespaceIndex:0,portNamespaceStride:1}),i=t.find(m=>m.name===e.name);if(!i)throw new Error(`Resolved runtime config missing target service "${e.name}"`);return{configs:u(t),target:i}}}}
@@ -0,0 +1,17 @@
1
+ import type { SourceSchemaDumpResolution } from "../../database/source-url.js";
2
+ import { type ConfiguredStepReporter } from "../../steps/index.js";
3
+ import { type SchemaOperationOptions } from "./prepare.js";
4
+ export type DatabaseSchemaRefreshOptions = SchemaOperationOptions;
5
+ export interface DatabaseSchemaRefreshResult {
6
+ cacheKey: string;
7
+ cacheKind: string;
8
+ envName: null | string;
9
+ ok: true;
10
+ outputLabel: string;
11
+ outputPath: string;
12
+ productDir: string;
13
+ reusedExistingRefresh: boolean;
14
+ service: string;
15
+ sourceUrl: SourceSchemaDumpResolution["metadata"] | null;
16
+ }
17
+ export declare function executeDatabaseSchemaRefresh(options: Readonly<DatabaseSchemaRefreshOptions>, reporter: ConfiguredStepReporter): Promise<DatabaseSchemaRefreshResult>;
@@ -0,0 +1 @@
1
+ import s from"path";import{refreshDatabaseSchema as h}from"../../database/index.js";import{createRunLogRegistry as f}from"../../evidence/logs.js";import"../../steps/index.js";import{createSetupOperationRegistry as p}from"../../evidence/setup-progress.js";import{prepareSchemaOperation as u}from"./prepare.js";export async function executeDatabaseSchemaRefresh(o,c){const{productDir:r,serviceName:i,resolveConfigs:n}=await u(o,"schema-refresh"),a=f(r),m=p({logRegistry:a});try{const e=await h(r,n,{progress:{reporter:c,setupRegistry:m}}),t=e.cachePath;return{ok:!0,productDir:r,service:i,outputPath:t,outputLabel:s.relative(r,t)||s.basename(t),cacheKey:e.cacheKey,cacheKind:e.cacheKind,envName:e.envName,sourceUrl:e.refreshInfo.metadata.sourceUrl||null,reusedExistingRefresh:e.refreshInfo.reusedExistingRefresh}}finally{await a.closeAll()}}
@@ -0,0 +1,11 @@
1
+ import { type ConfiguredStepReporter } from "../../steps/index.js";
2
+ import { type SchemaOperationOptions } from "./prepare.js";
3
+ export interface DatabaseSchemaVerifyOptions extends SchemaOperationOptions {
4
+ "skip-schema-source-verify"?: boolean;
5
+ }
6
+ export interface DatabaseSchemaVerifyResult {
7
+ ok: true;
8
+ productDir: string;
9
+ service: string;
10
+ }
11
+ export declare function executeDatabaseSchemaVerify(options: Readonly<DatabaseSchemaVerifyOptions>, reporter: ConfiguredStepReporter): Promise<DatabaseSchemaVerifyResult>;
@@ -0,0 +1 @@
1
+ import{verifyDatabaseSchema as c}from"../../database/index.js";import{createRunLogRegistry as m}from"../../evidence/logs.js";import"../../steps/index.js";import{createSetupOperationRegistry as p}from"../../evidence/setup-progress.js";import{prepareSchemaOperation as f}from"./prepare.js";export async function executeDatabaseSchemaVerify(r,a){const{productDir:e,serviceName:i,resolveConfigs:o}=await f(r,"schema-verify"),t=m(e),s=p({logRegistry:t});try{return await c(e,o,{progress:{reporter:a,setupRegistry:s},skipSchemaSourceVerify:r["skip-schema-source-verify"]}),{ok:!0,productDir:e,service:i}}finally{await t.closeAll()}}
@@ -0,0 +1,16 @@
1
+ import { type NormalizedServiceConfig } from "../../config/loader/index.js";
2
+ export interface DestroyOptions {
3
+ destroyOwnedResources?: boolean;
4
+ }
5
+ export declare function destroy(productDir: string, configs: readonly Readonly<NormalizedServiceConfig>[], options?: Readonly<DestroyOptions>): Promise<void>;
6
+ export declare function destroyEnvironment(options: Readonly<{
7
+ dir?: string;
8
+ service?: string;
9
+ }>): Promise<{
10
+ ok: true;
11
+ productDir: string;
12
+ results: Array<{
13
+ destroyed: true;
14
+ name: string;
15
+ }>;
16
+ }>;
@@ -0,0 +1 @@
1
+ import{filterConfigsByService as o}from"../../config/loader/managed-configs.js";import{loadConfigContext as i}from"../../config/loader/index.js";import{createEnvironmentMaintenance as s}from"../../environment/maintenance.js";export async function destroy(e,r,t={}){await s(e).maintain({kind:"destroy",configs:r,destroyOwnedResources:t.destroyOwnedResources})}export async function destroyEnvironment(e){const r=await i({dir:e.dir}),t=o(r.configs,e.service||null);return await destroy(r.productDir,t,{destroyOwnedResources:!e.service}),{ok:!0,productDir:r.productDir,results:t.map(n=>({name:n.name,destroyed:!0}))}}
@@ -0,0 +1,8 @@
1
+ import { type DiscoverTestsOptions, type DiscoveryResult } from "../../config/loader/index.js";
2
+ export interface DiscoverOperationResult extends DiscoveryResult {
3
+ outputLabel: null | string;
4
+ }
5
+ export declare function executeDiscoverOperation(options: Readonly<Omit<DiscoverTestsOptions, "file"> & {
6
+ file?: readonly string[];
7
+ output?: string;
8
+ }>, cwd?: string): Promise<DiscoverOperationResult>;
@@ -0,0 +1,2 @@
1
+ import{resolveRequestedFiles as n}from"../file-selection.js";import s from"fs";import i from"path";import{discoverTests as a,resolveProductDir as m}from"../../config/loader/index.js";export async function executeDiscoverOperation(e,o=process.cwd()){const r=m(o,e.dir),c=n(e.file||[],r,o),u=await a({...e,dir:r,file:c});let l=null;if(e.output){const t=i.resolve(r,e.output);s.mkdirSync(i.dirname(t),{recursive:!0}),s.writeFileSync(t,`${JSON.stringify(u,null,2)}
2
+ `),l=(i.relative(r,t)||i.basename(t)).replaceAll("\\","/")}return{...u,outputLabel:l}}
@@ -0,0 +1,17 @@
1
+ import { type LintViolation } from "../lint/index.js";
2
+ export interface DoctorOptions {
3
+ dir?: string;
4
+ typecheck?: boolean;
5
+ }
6
+ export interface DoctorCheck {
7
+ code: "config-load" | "discovery" | "lint" | "typecheck";
8
+ details?: LintViolation[] | unknown[];
9
+ level: "fail" | "pass";
10
+ message: string;
11
+ }
12
+ export interface DoctorResult {
13
+ checks: DoctorCheck[];
14
+ ok: boolean;
15
+ productDir: string;
16
+ }
17
+ export declare function runDoctor(options?: DoctorOptions): Promise<DoctorResult>;