@accelerator-mzq/forge 1.4.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 (663) hide show
  1. package/LICENSE +21 -0
  2. package/LICENSE-THIRD-PARTY.md +50 -0
  3. package/README.md +159 -0
  4. package/dist/cli/commands/ack.d.ts +7 -0
  5. package/dist/cli/commands/ack.d.ts.map +1 -0
  6. package/dist/cli/commands/ack.js +223 -0
  7. package/dist/cli/commands/ack.js.map +1 -0
  8. package/dist/cli/commands/archive.d.ts +44 -0
  9. package/dist/cli/commands/archive.d.ts.map +1 -0
  10. package/dist/cli/commands/archive.js +689 -0
  11. package/dist/cli/commands/archive.js.map +1 -0
  12. package/dist/cli/commands/backlog.d.ts +3 -0
  13. package/dist/cli/commands/backlog.d.ts.map +1 -0
  14. package/dist/cli/commands/backlog.js +55 -0
  15. package/dist/cli/commands/backlog.js.map +1 -0
  16. package/dist/cli/commands/config.d.ts +3 -0
  17. package/dist/cli/commands/config.d.ts.map +1 -0
  18. package/dist/cli/commands/config.js +107 -0
  19. package/dist/cli/commands/config.js.map +1 -0
  20. package/dist/cli/commands/evidence.d.ts +7 -0
  21. package/dist/cli/commands/evidence.d.ts.map +1 -0
  22. package/dist/cli/commands/evidence.js +662 -0
  23. package/dist/cli/commands/evidence.js.map +1 -0
  24. package/dist/cli/commands/finding.d.ts +3 -0
  25. package/dist/cli/commands/finding.d.ts.map +1 -0
  26. package/dist/cli/commands/finding.js +93 -0
  27. package/dist/cli/commands/finding.js.map +1 -0
  28. package/dist/cli/commands/init.d.ts +3 -0
  29. package/dist/cli/commands/init.d.ts.map +1 -0
  30. package/dist/cli/commands/init.js +126 -0
  31. package/dist/cli/commands/init.js.map +1 -0
  32. package/dist/cli/commands/legacy-bridge.d.ts +11 -0
  33. package/dist/cli/commands/legacy-bridge.d.ts.map +1 -0
  34. package/dist/cli/commands/legacy-bridge.js +586 -0
  35. package/dist/cli/commands/legacy-bridge.js.map +1 -0
  36. package/dist/cli/commands/migrate.d.ts +3 -0
  37. package/dist/cli/commands/migrate.d.ts.map +1 -0
  38. package/dist/cli/commands/migrate.js +34 -0
  39. package/dist/cli/commands/migrate.js.map +1 -0
  40. package/dist/cli/commands/monitor.d.ts +3 -0
  41. package/dist/cli/commands/monitor.d.ts.map +1 -0
  42. package/dist/cli/commands/monitor.js +113 -0
  43. package/dist/cli/commands/monitor.js.map +1 -0
  44. package/dist/cli/commands/preflight.d.ts +7 -0
  45. package/dist/cli/commands/preflight.d.ts.map +1 -0
  46. package/dist/cli/commands/preflight.js +63 -0
  47. package/dist/cli/commands/preflight.js.map +1 -0
  48. package/dist/cli/commands/scope.d.ts +3 -0
  49. package/dist/cli/commands/scope.d.ts.map +1 -0
  50. package/dist/cli/commands/scope.js +32 -0
  51. package/dist/cli/commands/scope.js.map +1 -0
  52. package/dist/cli/commands/stage-extensions.d.ts +45 -0
  53. package/dist/cli/commands/stage-extensions.d.ts.map +1 -0
  54. package/dist/cli/commands/stage-extensions.js +590 -0
  55. package/dist/cli/commands/stage-extensions.js.map +1 -0
  56. package/dist/cli/commands/update.d.ts +3 -0
  57. package/dist/cli/commands/update.d.ts.map +1 -0
  58. package/dist/cli/commands/update.js +98 -0
  59. package/dist/cli/commands/update.js.map +1 -0
  60. package/dist/cli/commands/upgrade.d.ts +3 -0
  61. package/dist/cli/commands/upgrade.d.ts.map +1 -0
  62. package/dist/cli/commands/upgrade.js +277 -0
  63. package/dist/cli/commands/upgrade.js.map +1 -0
  64. package/dist/cli/commands/validate.d.ts +3 -0
  65. package/dist/cli/commands/validate.d.ts.map +1 -0
  66. package/dist/cli/commands/validate.js +66 -0
  67. package/dist/cli/commands/validate.js.map +1 -0
  68. package/dist/cli/index.d.ts +3 -0
  69. package/dist/cli/index.d.ts.map +1 -0
  70. package/dist/cli/index.js +69 -0
  71. package/dist/cli/index.js.map +1 -0
  72. package/dist/core/ack-log.d.ts +107 -0
  73. package/dist/core/ack-log.d.ts.map +1 -0
  74. package/dist/core/ack-log.js +197 -0
  75. package/dist/core/ack-log.js.map +1 -0
  76. package/dist/core/archive/ack-log-consistency.d.ts +15 -0
  77. package/dist/core/archive/ack-log-consistency.d.ts.map +1 -0
  78. package/dist/core/archive/ack-log-consistency.js +164 -0
  79. package/dist/core/archive/ack-log-consistency.js.map +1 -0
  80. package/dist/core/archive/fence.d.ts +66 -0
  81. package/dist/core/archive/fence.d.ts.map +1 -0
  82. package/dist/core/archive/fence.js +218 -0
  83. package/dist/core/archive/fence.js.map +1 -0
  84. package/dist/core/archive/index.d.ts +4 -0
  85. package/dist/core/archive/index.d.ts.map +1 -0
  86. package/dist/core/archive/index.js +6 -0
  87. package/dist/core/archive/index.js.map +1 -0
  88. package/dist/core/archive/legacy-exemption.d.ts +14 -0
  89. package/dist/core/archive/legacy-exemption.d.ts.map +1 -0
  90. package/dist/core/archive/legacy-exemption.js +82 -0
  91. package/dist/core/archive/legacy-exemption.js.map +1 -0
  92. package/dist/core/archive/lock.d.ts +46 -0
  93. package/dist/core/archive/lock.d.ts.map +1 -0
  94. package/dist/core/archive/lock.js +98 -0
  95. package/dist/core/archive/lock.js.map +1 -0
  96. package/dist/core/archive/pause-decisions-fence.d.ts +13 -0
  97. package/dist/core/archive/pause-decisions-fence.d.ts.map +1 -0
  98. package/dist/core/archive/pause-decisions-fence.js +384 -0
  99. package/dist/core/archive/pause-decisions-fence.js.map +1 -0
  100. package/dist/core/archive/process-evidence-fence.d.ts +110 -0
  101. package/dist/core/archive/process-evidence-fence.d.ts.map +1 -0
  102. package/dist/core/archive/process-evidence-fence.js +449 -0
  103. package/dist/core/archive/process-evidence-fence.js.map +1 -0
  104. package/dist/core/archive/process-evidence-rerun.d.ts +9 -0
  105. package/dist/core/archive/process-evidence-rerun.d.ts.map +1 -0
  106. package/dist/core/archive/process-evidence-rerun.js +238 -0
  107. package/dist/core/archive/process-evidence-rerun.js.map +1 -0
  108. package/dist/core/archive/recover-prompt.d.ts +10 -0
  109. package/dist/core/archive/recover-prompt.d.ts.map +1 -0
  110. package/dist/core/archive/recover-prompt.js +29 -0
  111. package/dist/core/archive/recover-prompt.js.map +1 -0
  112. package/dist/core/archive/recover.d.ts +83 -0
  113. package/dist/core/archive/recover.d.ts.map +1 -0
  114. package/dist/core/archive/recover.js +219 -0
  115. package/dist/core/archive/recover.js.map +1 -0
  116. package/dist/core/archive/resume-summary.d.ts +22 -0
  117. package/dist/core/archive/resume-summary.d.ts.map +1 -0
  118. package/dist/core/archive/resume-summary.js +82 -0
  119. package/dist/core/archive/resume-summary.js.map +1 -0
  120. package/dist/core/archive/summary-builder.d.ts +28 -0
  121. package/dist/core/archive/summary-builder.d.ts.map +1 -0
  122. package/dist/core/archive/summary-builder.js +287 -0
  123. package/dist/core/archive/summary-builder.js.map +1 -0
  124. package/dist/core/archive/summary-render.d.ts +8 -0
  125. package/dist/core/archive/summary-render.d.ts.map +1 -0
  126. package/dist/core/archive/summary-render.js +64 -0
  127. package/dist/core/archive/summary-render.js.map +1 -0
  128. package/dist/core/archive/three-level-fence.d.ts +10 -0
  129. package/dist/core/archive/three-level-fence.d.ts.map +1 -0
  130. package/dist/core/archive/three-level-fence.js +93 -0
  131. package/dist/core/archive/three-level-fence.js.map +1 -0
  132. package/dist/core/archive/transaction.d.ts +41 -0
  133. package/dist/core/archive/transaction.d.ts.map +1 -0
  134. package/dist/core/archive/transaction.js +184 -0
  135. package/dist/core/archive/transaction.js.map +1 -0
  136. package/dist/core/archive/verify-findings-fence.d.ts +11 -0
  137. package/dist/core/archive/verify-findings-fence.d.ts.map +1 -0
  138. package/dist/core/archive/verify-findings-fence.js +80 -0
  139. package/dist/core/archive/verify-findings-fence.js.map +1 -0
  140. package/dist/core/archive/version-retrograde-fence.d.ts +10 -0
  141. package/dist/core/archive/version-retrograde-fence.d.ts.map +1 -0
  142. package/dist/core/archive/version-retrograde-fence.js +103 -0
  143. package/dist/core/archive/version-retrograde-fence.js.map +1 -0
  144. package/dist/core/artifact-graph/builder.d.ts +16 -0
  145. package/dist/core/artifact-graph/builder.d.ts.map +1 -0
  146. package/dist/core/artifact-graph/builder.js +32 -0
  147. package/dist/core/artifact-graph/builder.js.map +1 -0
  148. package/dist/core/artifact-graph/index.d.ts +3 -0
  149. package/dist/core/artifact-graph/index.d.ts.map +1 -0
  150. package/dist/core/artifact-graph/index.js +4 -0
  151. package/dist/core/artifact-graph/index.js.map +1 -0
  152. package/dist/core/artifact-graph/types.d.ts +14 -0
  153. package/dist/core/artifact-graph/types.d.ts.map +1 -0
  154. package/dist/core/artifact-graph/types.js +2 -0
  155. package/dist/core/artifact-graph/types.js.map +1 -0
  156. package/dist/core/backlog/assets/backlog-readme.md +11 -0
  157. package/dist/core/backlog/index.d.ts +20 -0
  158. package/dist/core/backlog/index.d.ts.map +1 -0
  159. package/dist/core/backlog/index.js +60 -0
  160. package/dist/core/backlog/index.js.map +1 -0
  161. package/dist/core/backlog/render.d.ts +51 -0
  162. package/dist/core/backlog/render.d.ts.map +1 -0
  163. package/dist/core/backlog/render.js +196 -0
  164. package/dist/core/backlog/render.js.map +1 -0
  165. package/dist/core/bootstrap/index.d.ts +2 -0
  166. package/dist/core/bootstrap/index.d.ts.map +1 -0
  167. package/dist/core/bootstrap/index.js +5 -0
  168. package/dist/core/bootstrap/index.js.map +1 -0
  169. package/dist/core/canonical-json.d.ts +11 -0
  170. package/dist/core/canonical-json.d.ts.map +1 -0
  171. package/dist/core/canonical-json.js +43 -0
  172. package/dist/core/canonical-json.js.map +1 -0
  173. package/dist/core/git/utils.d.ts +27 -0
  174. package/dist/core/git/utils.d.ts.map +1 -0
  175. package/dist/core/git/utils.js +53 -0
  176. package/dist/core/git/utils.js.map +1 -0
  177. package/dist/core/harness-adapters/claude.d.ts +13 -0
  178. package/dist/core/harness-adapters/claude.d.ts.map +1 -0
  179. package/dist/core/harness-adapters/claude.js +53 -0
  180. package/dist/core/harness-adapters/claude.js.map +1 -0
  181. package/dist/core/harness-adapters/codex.d.ts +14 -0
  182. package/dist/core/harness-adapters/codex.d.ts.map +1 -0
  183. package/dist/core/harness-adapters/codex.js +60 -0
  184. package/dist/core/harness-adapters/codex.js.map +1 -0
  185. package/dist/core/harness-adapters/detector.d.ts +15 -0
  186. package/dist/core/harness-adapters/detector.d.ts.map +1 -0
  187. package/dist/core/harness-adapters/detector.js +45 -0
  188. package/dist/core/harness-adapters/detector.js.map +1 -0
  189. package/dist/core/harness-adapters/hash-compare.d.ts +21 -0
  190. package/dist/core/harness-adapters/hash-compare.d.ts.map +1 -0
  191. package/dist/core/harness-adapters/hash-compare.js +49 -0
  192. package/dist/core/harness-adapters/hash-compare.js.map +1 -0
  193. package/dist/core/harness-adapters/index.d.ts +8 -0
  194. package/dist/core/harness-adapters/index.d.ts.map +1 -0
  195. package/dist/core/harness-adapters/index.js +8 -0
  196. package/dist/core/harness-adapters/index.js.map +1 -0
  197. package/dist/core/harness-adapters/interface.d.ts +52 -0
  198. package/dist/core/harness-adapters/interface.d.ts.map +1 -0
  199. package/dist/core/harness-adapters/interface.js +3 -0
  200. package/dist/core/harness-adapters/interface.js.map +1 -0
  201. package/dist/core/harness-adapters/legacy-detector.d.ts +14 -0
  202. package/dist/core/harness-adapters/legacy-detector.d.ts.map +1 -0
  203. package/dist/core/harness-adapters/legacy-detector.js +83 -0
  204. package/dist/core/harness-adapters/legacy-detector.js.map +1 -0
  205. package/dist/core/harness-adapters/transaction.d.ts +12 -0
  206. package/dist/core/harness-adapters/transaction.d.ts.map +1 -0
  207. package/dist/core/harness-adapters/transaction.js +113 -0
  208. package/dist/core/harness-adapters/transaction.js.map +1 -0
  209. package/dist/core/harness-adapters/types.d.ts +45 -0
  210. package/dist/core/harness-adapters/types.d.ts.map +1 -0
  211. package/dist/core/harness-adapters/types.js +3 -0
  212. package/dist/core/harness-adapters/types.js.map +1 -0
  213. package/dist/core/hash/content.d.ts +10 -0
  214. package/dist/core/hash/content.d.ts.map +1 -0
  215. package/dist/core/hash/content.js +131 -0
  216. package/dist/core/hash/content.js.map +1 -0
  217. package/dist/core/hash/diff.d.ts +26 -0
  218. package/dist/core/hash/diff.d.ts.map +1 -0
  219. package/dist/core/hash/diff.js +40 -0
  220. package/dist/core/hash/diff.js.map +1 -0
  221. package/dist/core/hash/index.d.ts +6 -0
  222. package/dist/core/hash/index.d.ts.map +1 -0
  223. package/dist/core/hash/index.js +7 -0
  224. package/dist/core/hash/index.js.map +1 -0
  225. package/dist/core/hash/log.d.ts +7 -0
  226. package/dist/core/hash/log.d.ts.map +1 -0
  227. package/dist/core/hash/log.js +14 -0
  228. package/dist/core/hash/log.js.map +1 -0
  229. package/dist/core/hash/tasks.d.ts +9 -0
  230. package/dist/core/hash/tasks.d.ts.map +1 -0
  231. package/dist/core/hash/tasks.js +20 -0
  232. package/dist/core/hash/tasks.js.map +1 -0
  233. package/dist/core/legacy-bridge/ack.d.ts +30 -0
  234. package/dist/core/legacy-bridge/ack.d.ts.map +1 -0
  235. package/dist/core/legacy-bridge/ack.js +133 -0
  236. package/dist/core/legacy-bridge/ack.js.map +1 -0
  237. package/dist/core/legacy-bridge/anchors.d.ts +15 -0
  238. package/dist/core/legacy-bridge/anchors.d.ts.map +1 -0
  239. package/dist/core/legacy-bridge/anchors.js +119 -0
  240. package/dist/core/legacy-bridge/anchors.js.map +1 -0
  241. package/dist/core/legacy-bridge/budget.d.ts +39 -0
  242. package/dist/core/legacy-bridge/budget.d.ts.map +1 -0
  243. package/dist/core/legacy-bridge/budget.js +83 -0
  244. package/dist/core/legacy-bridge/budget.js.map +1 -0
  245. package/dist/core/legacy-bridge/conflict.d.ts +44 -0
  246. package/dist/core/legacy-bridge/conflict.d.ts.map +1 -0
  247. package/dist/core/legacy-bridge/conflict.js +105 -0
  248. package/dist/core/legacy-bridge/conflict.js.map +1 -0
  249. package/dist/core/legacy-bridge/diff-report.d.ts +14 -0
  250. package/dist/core/legacy-bridge/diff-report.d.ts.map +1 -0
  251. package/dist/core/legacy-bridge/diff-report.js +105 -0
  252. package/dist/core/legacy-bridge/diff-report.js.map +1 -0
  253. package/dist/core/legacy-bridge/encoding.d.ts +42 -0
  254. package/dist/core/legacy-bridge/encoding.d.ts.map +1 -0
  255. package/dist/core/legacy-bridge/encoding.js +104 -0
  256. package/dist/core/legacy-bridge/encoding.js.map +1 -0
  257. package/dist/core/legacy-bridge/excel.d.ts +32 -0
  258. package/dist/core/legacy-bridge/excel.d.ts.map +1 -0
  259. package/dist/core/legacy-bridge/excel.js +124 -0
  260. package/dist/core/legacy-bridge/excel.js.map +1 -0
  261. package/dist/core/legacy-bridge/hash-anchor.d.ts +23 -0
  262. package/dist/core/legacy-bridge/hash-anchor.d.ts.map +1 -0
  263. package/dist/core/legacy-bridge/hash-anchor.js +55 -0
  264. package/dist/core/legacy-bridge/hash-anchor.js.map +1 -0
  265. package/dist/core/legacy-bridge/indexer.d.ts +28 -0
  266. package/dist/core/legacy-bridge/indexer.d.ts.map +1 -0
  267. package/dist/core/legacy-bridge/indexer.js +145 -0
  268. package/dist/core/legacy-bridge/indexer.js.map +1 -0
  269. package/dist/core/legacy-bridge/mapper.d.ts +40 -0
  270. package/dist/core/legacy-bridge/mapper.d.ts.map +1 -0
  271. package/dist/core/legacy-bridge/mapper.js +241 -0
  272. package/dist/core/legacy-bridge/mapper.js.map +1 -0
  273. package/dist/core/legacy-bridge/quality-judge.d.ts +65 -0
  274. package/dist/core/legacy-bridge/quality-judge.d.ts.map +1 -0
  275. package/dist/core/legacy-bridge/quality-judge.js +277 -0
  276. package/dist/core/legacy-bridge/quality-judge.js.map +1 -0
  277. package/dist/core/legacy-bridge/redact.d.ts +28 -0
  278. package/dist/core/legacy-bridge/redact.d.ts.map +1 -0
  279. package/dist/core/legacy-bridge/redact.js +121 -0
  280. package/dist/core/legacy-bridge/redact.js.map +1 -0
  281. package/dist/core/legacy-bridge/regenerator.d.ts +50 -0
  282. package/dist/core/legacy-bridge/regenerator.d.ts.map +1 -0
  283. package/dist/core/legacy-bridge/regenerator.js +193 -0
  284. package/dist/core/legacy-bridge/regenerator.js.map +1 -0
  285. package/dist/core/legacy-bridge/resolve.d.ts +28 -0
  286. package/dist/core/legacy-bridge/resolve.d.ts.map +1 -0
  287. package/dist/core/legacy-bridge/resolve.js +75 -0
  288. package/dist/core/legacy-bridge/resolve.js.map +1 -0
  289. package/dist/core/legacy-bridge/sync-check.d.ts +47 -0
  290. package/dist/core/legacy-bridge/sync-check.d.ts.map +1 -0
  291. package/dist/core/legacy-bridge/sync-check.js +198 -0
  292. package/dist/core/legacy-bridge/sync-check.js.map +1 -0
  293. package/dist/core/legacy-bridge/types.d.ts +114 -0
  294. package/dist/core/legacy-bridge/types.d.ts.map +1 -0
  295. package/dist/core/legacy-bridge/types.js +4 -0
  296. package/dist/core/legacy-bridge/types.js.map +1 -0
  297. package/dist/core/markers/index.d.ts +3 -0
  298. package/dist/core/markers/index.d.ts.map +1 -0
  299. package/dist/core/markers/index.js +3 -0
  300. package/dist/core/markers/index.js.map +1 -0
  301. package/dist/core/markers/parse.d.ts +12 -0
  302. package/dist/core/markers/parse.d.ts.map +1 -0
  303. package/dist/core/markers/parse.js +31 -0
  304. package/dist/core/markers/parse.js.map +1 -0
  305. package/dist/core/markers/types.d.ts +142 -0
  306. package/dist/core/markers/types.d.ts.map +1 -0
  307. package/dist/core/markers/types.js +3 -0
  308. package/dist/core/markers/types.js.map +1 -0
  309. package/dist/core/migrate/ack.d.ts +13 -0
  310. package/dist/core/migrate/ack.d.ts.map +1 -0
  311. package/dist/core/migrate/ack.js +62 -0
  312. package/dist/core/migrate/ack.js.map +1 -0
  313. package/dist/core/migrate/archive-detect.d.ts +19 -0
  314. package/dist/core/migrate/archive-detect.d.ts.map +1 -0
  315. package/dist/core/migrate/archive-detect.js +89 -0
  316. package/dist/core/migrate/archive-detect.js.map +1 -0
  317. package/dist/core/migrate/budget.d.ts +7 -0
  318. package/dist/core/migrate/budget.d.ts.map +1 -0
  319. package/dist/core/migrate/budget.js +25 -0
  320. package/dist/core/migrate/budget.js.map +1 -0
  321. package/dist/core/migrate/conflict.d.ts +49 -0
  322. package/dist/core/migrate/conflict.d.ts.map +1 -0
  323. package/dist/core/migrate/conflict.js +99 -0
  324. package/dist/core/migrate/conflict.js.map +1 -0
  325. package/dist/core/migrate/index.d.ts +7 -0
  326. package/dist/core/migrate/index.d.ts.map +1 -0
  327. package/dist/core/migrate/index.js +389 -0
  328. package/dist/core/migrate/index.js.map +1 -0
  329. package/dist/core/migrate/markdown-aware.d.ts +27 -0
  330. package/dist/core/migrate/markdown-aware.d.ts.map +1 -0
  331. package/dist/core/migrate/markdown-aware.js +112 -0
  332. package/dist/core/migrate/markdown-aware.js.map +1 -0
  333. package/dist/core/migrate/quality.d.ts +66 -0
  334. package/dist/core/migrate/quality.d.ts.map +1 -0
  335. package/dist/core/migrate/quality.js +302 -0
  336. package/dist/core/migrate/quality.js.map +1 -0
  337. package/dist/core/migrate/regenerate.d.ts +24 -0
  338. package/dist/core/migrate/regenerate.d.ts.map +1 -0
  339. package/dist/core/migrate/regenerate.js +145 -0
  340. package/dist/core/migrate/regenerate.js.map +1 -0
  341. package/dist/core/migrate/report.d.ts +36 -0
  342. package/dist/core/migrate/report.d.ts.map +1 -0
  343. package/dist/core/migrate/report.js +154 -0
  344. package/dist/core/migrate/report.js.map +1 -0
  345. package/dist/core/migrate/sources/index.d.ts +4 -0
  346. package/dist/core/migrate/sources/index.d.ts.map +1 -0
  347. package/dist/core/migrate/sources/index.js +17 -0
  348. package/dist/core/migrate/sources/index.js.map +1 -0
  349. package/dist/core/migrate/sources/openspec.d.ts +14 -0
  350. package/dist/core/migrate/sources/openspec.d.ts.map +1 -0
  351. package/dist/core/migrate/sources/openspec.js +453 -0
  352. package/dist/core/migrate/sources/openspec.js.map +1 -0
  353. package/dist/core/migrate/sources/superpowers.d.ts +12 -0
  354. package/dist/core/migrate/sources/superpowers.d.ts.map +1 -0
  355. package/dist/core/migrate/sources/superpowers.js +310 -0
  356. package/dist/core/migrate/sources/superpowers.js.map +1 -0
  357. package/dist/core/migrate/types.d.ts +183 -0
  358. package/dist/core/migrate/types.d.ts.map +1 -0
  359. package/dist/core/migrate/types.js +5 -0
  360. package/dist/core/migrate/types.js.map +1 -0
  361. package/dist/core/migrate/utils.d.ts +2 -0
  362. package/dist/core/migrate/utils.d.ts.map +1 -0
  363. package/dist/core/migrate/utils.js +28 -0
  364. package/dist/core/migrate/utils.js.map +1 -0
  365. package/dist/core/monitor/artifact-observer.d.ts +9 -0
  366. package/dist/core/monitor/artifact-observer.d.ts.map +1 -0
  367. package/dist/core/monitor/artifact-observer.js +180 -0
  368. package/dist/core/monitor/artifact-observer.js.map +1 -0
  369. package/dist/core/monitor/config.d.ts +16 -0
  370. package/dist/core/monitor/config.d.ts.map +1 -0
  371. package/dist/core/monitor/config.js +48 -0
  372. package/dist/core/monitor/config.js.map +1 -0
  373. package/dist/core/monitor/divergence-map.d.ts +5 -0
  374. package/dist/core/monitor/divergence-map.d.ts.map +1 -0
  375. package/dist/core/monitor/divergence-map.js +92 -0
  376. package/dist/core/monitor/divergence-map.js.map +1 -0
  377. package/dist/core/monitor/exit-handler.d.ts +6 -0
  378. package/dist/core/monitor/exit-handler.d.ts.map +1 -0
  379. package/dist/core/monitor/exit-handler.js +27 -0
  380. package/dist/core/monitor/exit-handler.js.map +1 -0
  381. package/dist/core/monitor/health-verdict.d.ts +9 -0
  382. package/dist/core/monitor/health-verdict.d.ts.map +1 -0
  383. package/dist/core/monitor/health-verdict.js +55 -0
  384. package/dist/core/monitor/health-verdict.js.map +1 -0
  385. package/dist/core/monitor/report-renderer.d.ts +4 -0
  386. package/dist/core/monitor/report-renderer.d.ts.map +1 -0
  387. package/dist/core/monitor/report-renderer.js +82 -0
  388. package/dist/core/monitor/report-renderer.js.map +1 -0
  389. package/dist/core/monitor/trace-store.d.ts +39 -0
  390. package/dist/core/monitor/trace-store.d.ts.map +1 -0
  391. package/dist/core/monitor/trace-store.js +130 -0
  392. package/dist/core/monitor/trace-store.js.map +1 -0
  393. package/dist/core/monitor/types.d.ts +63 -0
  394. package/dist/core/monitor/types.d.ts.map +1 -0
  395. package/dist/core/monitor/types.js +26 -0
  396. package/dist/core/monitor/types.js.map +1 -0
  397. package/dist/core/parse/design.d.ts +14 -0
  398. package/dist/core/parse/design.d.ts.map +1 -0
  399. package/dist/core/parse/design.js +17 -0
  400. package/dist/core/parse/design.js.map +1 -0
  401. package/dist/core/parse/fenced-yaml.d.ts +18 -0
  402. package/dist/core/parse/fenced-yaml.d.ts.map +1 -0
  403. package/dist/core/parse/fenced-yaml.js +45 -0
  404. package/dist/core/parse/fenced-yaml.js.map +1 -0
  405. package/dist/core/parse/index.d.ts +7 -0
  406. package/dist/core/parse/index.d.ts.map +1 -0
  407. package/dist/core/parse/index.js +8 -0
  408. package/dist/core/parse/index.js.map +1 -0
  409. package/dist/core/parse/markdown.d.ts +30 -0
  410. package/dist/core/parse/markdown.d.ts.map +1 -0
  411. package/dist/core/parse/markdown.js +66 -0
  412. package/dist/core/parse/markdown.js.map +1 -0
  413. package/dist/core/parse/proposal.d.ts +18 -0
  414. package/dist/core/parse/proposal.d.ts.map +1 -0
  415. package/dist/core/parse/proposal.js +22 -0
  416. package/dist/core/parse/proposal.js.map +1 -0
  417. package/dist/core/parse/specs.d.ts +25 -0
  418. package/dist/core/parse/specs.d.ts.map +1 -0
  419. package/dist/core/parse/specs.js +58 -0
  420. package/dist/core/parse/specs.js.map +1 -0
  421. package/dist/core/parse/tasks.d.ts +33 -0
  422. package/dist/core/parse/tasks.d.ts.map +1 -0
  423. package/dist/core/parse/tasks.js +82 -0
  424. package/dist/core/parse/tasks.js.map +1 -0
  425. package/dist/core/parse/yaml.d.ts +13 -0
  426. package/dist/core/parse/yaml.d.ts.map +1 -0
  427. package/dist/core/parse/yaml.js +39 -0
  428. package/dist/core/parse/yaml.js.map +1 -0
  429. package/dist/core/process-evidence-freeze-warnings.d.ts +24 -0
  430. package/dist/core/process-evidence-freeze-warnings.d.ts.map +1 -0
  431. package/dist/core/process-evidence-freeze-warnings.js +153 -0
  432. package/dist/core/process-evidence-freeze-warnings.js.map +1 -0
  433. package/dist/core/schema/index.d.ts +5 -0
  434. package/dist/core/schema/index.d.ts.map +1 -0
  435. package/dist/core/schema/index.js +6 -0
  436. package/dist/core/schema/index.js.map +1 -0
  437. package/dist/core/schema/model-tiers-config.d.ts +41 -0
  438. package/dist/core/schema/model-tiers-config.d.ts.map +1 -0
  439. package/dist/core/schema/model-tiers-config.js +85 -0
  440. package/dist/core/schema/model-tiers-config.js.map +1 -0
  441. package/dist/core/schema/process-verification-config.d.ts +18 -0
  442. package/dist/core/schema/process-verification-config.d.ts.map +1 -0
  443. package/dist/core/schema/process-verification-config.js +74 -0
  444. package/dist/core/schema/process-verification-config.js.map +1 -0
  445. package/dist/core/schema/stage-extensions-config.d.ts +28 -0
  446. package/dist/core/schema/stage-extensions-config.d.ts.map +1 -0
  447. package/dist/core/schema/stage-extensions-config.js +228 -0
  448. package/dist/core/schema/stage-extensions-config.js.map +1 -0
  449. package/dist/core/schema/types.d.ts +262 -0
  450. package/dist/core/schema/types.d.ts.map +1 -0
  451. package/dist/core/schema/types.js +51 -0
  452. package/dist/core/schema/types.js.map +1 -0
  453. package/dist/core/schema/writing-plans-config.d.ts +11 -0
  454. package/dist/core/schema/writing-plans-config.d.ts.map +1 -0
  455. package/dist/core/schema/writing-plans-config.js +40 -0
  456. package/dist/core/schema/writing-plans-config.js.map +1 -0
  457. package/dist/core/schemas/archive-summary.d.ts +131 -0
  458. package/dist/core/schemas/archive-summary.d.ts.map +1 -0
  459. package/dist/core/schemas/archive-summary.js +31 -0
  460. package/dist/core/schemas/archive-summary.js.map +1 -0
  461. package/dist/core/schemas/process-evidence.d.ts +156 -0
  462. package/dist/core/schemas/process-evidence.d.ts.map +1 -0
  463. package/dist/core/schemas/process-evidence.js +12 -0
  464. package/dist/core/schemas/process-evidence.js.map +1 -0
  465. package/dist/core/schemas/scope-entries.d.ts +68 -0
  466. package/dist/core/schemas/scope-entries.d.ts.map +1 -0
  467. package/dist/core/schemas/scope-entries.js +47 -0
  468. package/dist/core/schemas/scope-entries.js.map +1 -0
  469. package/dist/core/schemas/severity.d.ts +58 -0
  470. package/dist/core/schemas/severity.d.ts.map +1 -0
  471. package/dist/core/schemas/severity.js +26 -0
  472. package/dist/core/schemas/severity.js.map +1 -0
  473. package/dist/core/scope/aggregator.d.ts +49 -0
  474. package/dist/core/scope/aggregator.d.ts.map +1 -0
  475. package/dist/core/scope/aggregator.js +141 -0
  476. package/dist/core/scope/aggregator.js.map +1 -0
  477. package/dist/core/scope/index.d.ts +2 -0
  478. package/dist/core/scope/index.d.ts.map +1 -0
  479. package/dist/core/scope/index.js +2 -0
  480. package/dist/core/scope/index.js.map +1 -0
  481. package/dist/core/specs-sync/apply.d.ts +8 -0
  482. package/dist/core/specs-sync/apply.d.ts.map +1 -0
  483. package/dist/core/specs-sync/apply.js +26 -0
  484. package/dist/core/specs-sync/apply.js.map +1 -0
  485. package/dist/core/specs-sync/deltas.d.ts +15 -0
  486. package/dist/core/specs-sync/deltas.d.ts.map +1 -0
  487. package/dist/core/specs-sync/deltas.js +27 -0
  488. package/dist/core/specs-sync/deltas.js.map +1 -0
  489. package/dist/core/specs-sync/index.d.ts +3 -0
  490. package/dist/core/specs-sync/index.d.ts.map +1 -0
  491. package/dist/core/specs-sync/index.js +4 -0
  492. package/dist/core/specs-sync/index.js.map +1 -0
  493. package/dist/core/stage-extensions/convergence-judge.d.ts +35 -0
  494. package/dist/core/stage-extensions/convergence-judge.d.ts.map +1 -0
  495. package/dist/core/stage-extensions/convergence-judge.js +47 -0
  496. package/dist/core/stage-extensions/convergence-judge.js.map +1 -0
  497. package/dist/core/stage-extensions/index.d.ts +13 -0
  498. package/dist/core/stage-extensions/index.d.ts.map +1 -0
  499. package/dist/core/stage-extensions/index.js +11 -0
  500. package/dist/core/stage-extensions/index.js.map +1 -0
  501. package/dist/core/stage-extensions/output-watcher.d.ts +93 -0
  502. package/dist/core/stage-extensions/output-watcher.d.ts.map +1 -0
  503. package/dist/core/stage-extensions/output-watcher.js +163 -0
  504. package/dist/core/stage-extensions/output-watcher.js.map +1 -0
  505. package/dist/core/stage-extensions/severity-mapper.d.ts +21 -0
  506. package/dist/core/stage-extensions/severity-mapper.d.ts.map +1 -0
  507. package/dist/core/stage-extensions/severity-mapper.js +26 -0
  508. package/dist/core/stage-extensions/severity-mapper.js.map +1 -0
  509. package/dist/core/stage-extensions/state-machine.d.ts +43 -0
  510. package/dist/core/stage-extensions/state-machine.d.ts.map +1 -0
  511. package/dist/core/stage-extensions/state-machine.js +19 -0
  512. package/dist/core/stage-extensions/state-machine.js.map +1 -0
  513. package/dist/core/stage-extensions/thread-map.d.ts +60 -0
  514. package/dist/core/stage-extensions/thread-map.d.ts.map +1 -0
  515. package/dist/core/stage-extensions/thread-map.js +107 -0
  516. package/dist/core/stage-extensions/thread-map.js.map +1 -0
  517. package/dist/core/stage-extensions/trend-analyzer.d.ts +29 -0
  518. package/dist/core/stage-extensions/trend-analyzer.d.ts.map +1 -0
  519. package/dist/core/stage-extensions/trend-analyzer.js +60 -0
  520. package/dist/core/stage-extensions/trend-analyzer.js.map +1 -0
  521. package/dist/core/stage-extensions/types.d.ts +39 -0
  522. package/dist/core/stage-extensions/types.d.ts.map +1 -0
  523. package/dist/core/stage-extensions/types.js +5 -0
  524. package/dist/core/stage-extensions/types.js.map +1 -0
  525. package/dist/core/staging-lock.d.ts +36 -0
  526. package/dist/core/staging-lock.d.ts.map +1 -0
  527. package/dist/core/staging-lock.js +122 -0
  528. package/dist/core/staging-lock.js.map +1 -0
  529. package/dist/core/templates/commands/ack-confirm.md +32 -0
  530. package/dist/core/templates/commands/apply.md +220 -0
  531. package/dist/core/templates/commands/archive.md +178 -0
  532. package/dist/core/templates/commands/brainstorm.md +58 -0
  533. package/dist/core/templates/commands/codex-adversarial.md +95 -0
  534. package/dist/core/templates/commands/explore.md +29 -0
  535. package/dist/core/templates/commands/index.d.ts +12 -0
  536. package/dist/core/templates/commands/index.d.ts.map +1 -0
  537. package/dist/core/templates/commands/index.js +26 -0
  538. package/dist/core/templates/commands/index.js.map +1 -0
  539. package/dist/core/templates/commands/propose.md +90 -0
  540. package/dist/core/templates/commands/review.md +105 -0
  541. package/dist/core/templates/commands/upgrade.md +58 -0
  542. package/dist/core/templates/commands/verify.md +186 -0
  543. package/dist/core/templates/index.d.ts +3 -0
  544. package/dist/core/templates/index.d.ts.map +1 -0
  545. package/dist/core/templates/index.js +5 -0
  546. package/dist/core/templates/index.js.map +1 -0
  547. package/dist/core/templates/skills/_shared/scope-category-guidance.md +40 -0
  548. package/dist/core/templates/skills/brainstorming.md +161 -0
  549. package/dist/core/templates/skills/dispatching-parallel-agents.md +209 -0
  550. package/dist/core/templates/skills/exploring.md +476 -0
  551. package/dist/core/templates/skills/finishing-a-development-branch.md +251 -0
  552. package/dist/core/templates/skills/index.d.ts +17 -0
  553. package/dist/core/templates/skills/index.d.ts.map +1 -0
  554. package/dist/core/templates/skills/index.js +53 -0
  555. package/dist/core/templates/skills/index.js.map +1 -0
  556. package/dist/core/templates/skills/process-evidence.md +146 -0
  557. package/dist/core/templates/skills/receiving-code-review.md +294 -0
  558. package/dist/core/templates/skills/requesting-code-review.md +108 -0
  559. package/dist/core/templates/skills/subagent-driven-development.md +405 -0
  560. package/dist/core/templates/skills/subagent-driven-discipline/references/codex-tools.md +72 -0
  561. package/dist/core/templates/skills/subagent-driven-discipline/references/opencode-tools.md +104 -0
  562. package/dist/core/templates/skills/subagent-driven-discipline.md +725 -0
  563. package/dist/core/templates/skills/systematic-debugging.md +297 -0
  564. package/dist/core/templates/skills/test-driven-development.md +402 -0
  565. package/dist/core/templates/skills/using-forge.md +163 -0
  566. package/dist/core/templates/skills/using-git-worktrees.md +229 -0
  567. package/dist/core/templates/skills/verification-before-completion.md +175 -0
  568. package/dist/core/templates/skills/verifying-three-dimensions.md +245 -0
  569. package/dist/core/templates/skills/writing-plans.md +259 -0
  570. package/dist/core/templates/skills/writing-skills.md +214 -0
  571. package/dist/core/test-reporters/index.d.ts +41 -0
  572. package/dist/core/test-reporters/index.d.ts.map +1 -0
  573. package/dist/core/test-reporters/index.js +39 -0
  574. package/dist/core/test-reporters/index.js.map +1 -0
  575. package/dist/core/test-reporters/junit.d.ts +8 -0
  576. package/dist/core/test-reporters/junit.d.ts.map +1 -0
  577. package/dist/core/test-reporters/junit.js +94 -0
  578. package/dist/core/test-reporters/junit.js.map +1 -0
  579. package/dist/core/test-reporters/tap.d.ts +18 -0
  580. package/dist/core/test-reporters/tap.d.ts.map +1 -0
  581. package/dist/core/test-reporters/tap.js +73 -0
  582. package/dist/core/test-reporters/tap.js.map +1 -0
  583. package/dist/core/test-reporters/vitest-json.d.ts +8 -0
  584. package/dist/core/test-reporters/vitest-json.d.ts.map +1 -0
  585. package/dist/core/test-reporters/vitest-json.js +56 -0
  586. package/dist/core/test-reporters/vitest-json.js.map +1 -0
  587. package/dist/core/upgrade/resign-markers.d.ts +14 -0
  588. package/dist/core/upgrade/resign-markers.d.ts.map +1 -0
  589. package/dist/core/upgrade/resign-markers.js +245 -0
  590. package/dist/core/upgrade/resign-markers.js.map +1 -0
  591. package/dist/core/validate/archive-summary-schema.d.ts +8 -0
  592. package/dist/core/validate/archive-summary-schema.d.ts.map +1 -0
  593. package/dist/core/validate/archive-summary-schema.js +186 -0
  594. package/dist/core/validate/archive-summary-schema.js.map +1 -0
  595. package/dist/core/validate/auto-findings.d.ts +36 -0
  596. package/dist/core/validate/auto-findings.d.ts.map +1 -0
  597. package/dist/core/validate/auto-findings.js +38 -0
  598. package/dist/core/validate/auto-findings.js.map +1 -0
  599. package/dist/core/validate/candidate-validators.d.ts +22 -0
  600. package/dist/core/validate/candidate-validators.d.ts.map +1 -0
  601. package/dist/core/validate/candidate-validators.js +46 -0
  602. package/dist/core/validate/candidate-validators.js.map +1 -0
  603. package/dist/core/validate/change.d.ts +3 -0
  604. package/dist/core/validate/change.d.ts.map +1 -0
  605. package/dist/core/validate/change.js +205 -0
  606. package/dist/core/validate/change.js.map +1 -0
  607. package/dist/core/validate/coverage-gap.d.ts +37 -0
  608. package/dist/core/validate/coverage-gap.d.ts.map +1 -0
  609. package/dist/core/validate/coverage-gap.js +181 -0
  610. package/dist/core/validate/coverage-gap.js.map +1 -0
  611. package/dist/core/validate/finding-hash.d.ts +14 -0
  612. package/dist/core/validate/finding-hash.d.ts.map +1 -0
  613. package/dist/core/validate/finding-hash.js +29 -0
  614. package/dist/core/validate/finding-hash.js.map +1 -0
  615. package/dist/core/validate/index.d.ts +15 -0
  616. package/dist/core/validate/index.d.ts.map +1 -0
  617. package/dist/core/validate/index.js +19 -0
  618. package/dist/core/validate/index.js.map +1 -0
  619. package/dist/core/validate/marker-integrity.d.ts +28 -0
  620. package/dist/core/validate/marker-integrity.d.ts.map +1 -0
  621. package/dist/core/validate/marker-integrity.js +170 -0
  622. package/dist/core/validate/marker-integrity.js.map +1 -0
  623. package/dist/core/validate/marker-schema.d.ts +10 -0
  624. package/dist/core/validate/marker-schema.d.ts.map +1 -0
  625. package/dist/core/validate/marker-schema.js +661 -0
  626. package/dist/core/validate/marker-schema.js.map +1 -0
  627. package/dist/core/validate/orphan-tmp.d.ts +13 -0
  628. package/dist/core/validate/orphan-tmp.d.ts.map +1 -0
  629. package/dist/core/validate/orphan-tmp.js +49 -0
  630. package/dist/core/validate/orphan-tmp.js.map +1 -0
  631. package/dist/core/validate/proposal.d.ts +4 -0
  632. package/dist/core/validate/proposal.d.ts.map +1 -0
  633. package/dist/core/validate/proposal.js +40 -0
  634. package/dist/core/validate/proposal.js.map +1 -0
  635. package/dist/core/validate/scope-entries.d.ts +23 -0
  636. package/dist/core/validate/scope-entries.d.ts.map +1 -0
  637. package/dist/core/validate/scope-entries.js +108 -0
  638. package/dist/core/validate/scope-entries.js.map +1 -0
  639. package/dist/core/validate/specs.d.ts +4 -0
  640. package/dist/core/validate/specs.d.ts.map +1 -0
  641. package/dist/core/validate/specs.js +74 -0
  642. package/dist/core/validate/specs.js.map +1 -0
  643. package/dist/core/validate/tasks.d.ts +4 -0
  644. package/dist/core/validate/tasks.d.ts.map +1 -0
  645. package/dist/core/validate/tasks.js +48 -0
  646. package/dist/core/validate/tasks.js.map +1 -0
  647. package/dist/core/validate/test-failure-stub.d.ts +23 -0
  648. package/dist/core/validate/test-failure-stub.d.ts.map +1 -0
  649. package/dist/core/validate/test-failure-stub.js +21 -0
  650. package/dist/core/validate/test-failure-stub.js.map +1 -0
  651. package/dist/core/validate/types.d.ts +33 -0
  652. package/dist/core/validate/types.d.ts.map +1 -0
  653. package/dist/core/validate/types.js +20 -0
  654. package/dist/core/validate/types.js.map +1 -0
  655. package/dist/core/worktree.d.ts +52 -0
  656. package/dist/core/worktree.d.ts.map +1 -0
  657. package/dist/core/worktree.js +145 -0
  658. package/dist/core/worktree.js.map +1 -0
  659. package/dist/index.d.ts +12 -0
  660. package/dist/index.d.ts.map +1 -0
  661. package/dist/index.js +14 -0
  662. package/dist/index.js.map +1 -0
  663. package/package.json +82 -0
@@ -0,0 +1,302 @@
1
+ // src/core/migrate/quality.ts
2
+ // quality:facts 抽取 + judge + callAnthropic 封装 — Plan 8e Task 5.3-5.9
3
+ // 对应 spec §2.8 步骤 6-7 + M15 facts 目标分桶 + M9 不复用 legacy-bridge quality
4
+ // ============================================================================
5
+ // Errors
6
+ // ============================================================================
7
+ /** abort 后 SDK 抛错统一映射类型(spec §2.8 v4 修订) */
8
+ export class AbortInterrupted extends Error {
9
+ constructor() {
10
+ super('LLM call interrupted by AbortController');
11
+ this.name = 'AbortInterrupted';
12
+ }
13
+ }
14
+ /** quality 失败:facts 不足 / parse 错 / fidelity 低 */
15
+ export class QualityFailure extends Error {
16
+ reason;
17
+ constructor(reason) {
18
+ super(`quality fail: ${reason}`);
19
+ this.reason = reason;
20
+ this.name = 'QualityFailure';
21
+ }
22
+ }
23
+ // ============================================================================
24
+ // 模型常量
25
+ // ============================================================================
26
+ // quality(extract + judge)用 sonnet(快+便宜),实际生成走 opus 在 regenerate.ts
27
+ const QUALITY_MODEL = 'claude-sonnet-4-6';
28
+ // spec M15 v3 阈值:< 5 条 facts 视为信息密度不足,直接 fail
29
+ const MIN_FACTS = 5;
30
+ // ============================================================================
31
+ // Task 5.3:callAnthropic({signal}) 统一封装
32
+ // ============================================================================
33
+ /**
34
+ * 统一封装 SDK 调用:transient AbortError → AbortInterrupted。
35
+ * 注意:input.signal 必传,中断信号穿透到 SDK 层。
36
+ */
37
+ export async function callAnthropic(client, input) {
38
+ try {
39
+ const result = await client.messages.create({
40
+ model: input.model,
41
+ max_tokens: input.maxTokens,
42
+ messages: [{ role: 'user', content: input.prompt }],
43
+ }, { signal: input.signal });
44
+ // TS strict 下 content 是 union ContentBlock[];用 type guard narrow 到 TextBlock
45
+ const block = result.content.find((b) => b.type === 'text');
46
+ return block?.text ?? '';
47
+ }
48
+ catch (err) {
49
+ const name = err.name;
50
+ // SDK 抛 AbortError 或 signal 已 abort → 统一映射 AbortInterrupted
51
+ if (name === 'AbortError' || input.signal.aborted) {
52
+ throw new AbortInterrupted();
53
+ }
54
+ throw err;
55
+ }
56
+ }
57
+ // ============================================================================
58
+ // 通用 facts 解析(容忍 ```json fence + 去重 + MIN_FACTS 阈值)
59
+ // ============================================================================
60
+ /** 容忍 LLM ```json 包裹 + 解析 JSON 数组 + 去重 + 阈值检查 */
61
+ function parseFactsResponse(text) {
62
+ // 容忍 ```json fence(legacy-bridge I-3 修)
63
+ const cleaned = text
64
+ .trim()
65
+ .replace(/^```(?:json|JSON)?\r?\n/, '')
66
+ .replace(/\r?\n```\s*$/, '')
67
+ .trim();
68
+ let parsed;
69
+ try {
70
+ parsed = JSON.parse(cleaned);
71
+ }
72
+ catch {
73
+ throw new QualityFailure('parse-error');
74
+ }
75
+ if (!Array.isArray(parsed))
76
+ throw new QualityFailure('parse-error');
77
+ // 字段宽松解析 + 默认值兜底
78
+ const facts = parsed
79
+ .map((item) => {
80
+ const o = item;
81
+ return {
82
+ text: typeof o.text === 'string' ? o.text : '',
83
+ section: typeof o.section === 'string' ? o.section : '(unstructured)',
84
+ critical: typeof o.critical === 'boolean' ? o.critical : false,
85
+ };
86
+ })
87
+ .filter((f) => f.text.trim().length > 0);
88
+ // 重复 facts 去重(text 小写完全相等去重 — 简化策略,任务 5.7)
89
+ const seen = new Set();
90
+ const unique = facts.filter((f) => {
91
+ const key = f.text.toLowerCase().trim();
92
+ if (seen.has(key))
93
+ return false;
94
+ seen.add(key);
95
+ return true;
96
+ });
97
+ // 任务 5.10:< 5 条直接 fail(spec M15 v3 阈值)
98
+ if (unique.length < MIN_FACTS) {
99
+ throw new QualityFailure('too-few-facts');
100
+ }
101
+ return unique;
102
+ }
103
+ // ============================================================================
104
+ // 三套 prompt(Task 5.4-5.6)— positive/negative examples 区分
105
+ // ============================================================================
106
+ // Task 5.4 — 通用 extractFacts(给 OpenSpec 已有件,无目标分桶)
107
+ const EXTRACT_FACTS_PROMPT = (content, n) => `从下面"原文"中抽出最多 ${n} 条关键事实。
108
+ 关键事实定义:数字 / 字段约束 / 业务规则 / 合规条款 / 设计决策 / 接口契约 / 错误码。
109
+ 每条 fact 必须是单句、可独立验证的陈述。
110
+
111
+ # 输出格式(严格 JSON 数组)
112
+ 每项含 { "text": string, "section": string, "critical": boolean }
113
+ - text:简短陈述(<= 80 字),保留原文中的具体数值 / 字段名
114
+ - section:原文中所属章节锚(如 "§4.5" 或 "## 接口";若无章节,填 "(unstructured)")
115
+ - critical:true 仅当该事实属于合规 / 安全 / 业务硬约束;其余 false
116
+
117
+ # 抽取标准
118
+ positive(应抽):
119
+ - "rate-limit:每用户 60 req/min"(数值约束)
120
+ - "字段 user_id 必须 UUID v4"(字段约束)
121
+ - "PII 数据不落盘"(合规)
122
+
123
+ negative(不抽):
124
+ - "本系统采用微服务架构"(过泛,无可验证陈述)
125
+ - "团队约定使用 TypeScript"(开发约定,非业务事实)
126
+ - "// TODO: 后面优化"(注释非事实)
127
+
128
+ # 原文
129
+ ${content}
130
+
131
+ 仅输出 JSON 数组,不输出 preamble、不带 markdown code fence。`;
132
+ // Task 5.5 — extractMotivationFacts(design → proposal 校验)
133
+ // M15 facts 目标分桶:proposal 关注"问题/动机/约束",不进实现细节
134
+ const EXTRACT_MOTIVATION_PROMPT = (designContent) => `从下面"design 文档"中**只抽取"问题 / 动机 / 约束 / 背景"类事实**。
135
+ 用途:验证后续生成的 proposal.md 是否完整覆盖动机。
136
+ **严格按目标分桶过滤,实现层细节不要进来**。
137
+
138
+ # 抽取标准
139
+
140
+ positive(应抽 — 动机 / 约束 / 背景):
141
+ - "用户当前无法 X,需 Y 因为 Z"(动机阐述)
142
+ - "系统约束:必须 < 100ms p99 响应"(性能约束)
143
+ - "依赖 module A v2.0+;v1 接口不兼容"(背景依赖)
144
+ - "合规要求:PII 数据不存盘"(critical 约束)
145
+ - "选 hashmap 因为 read >> write 比例 100:1"(设计决策的 why,不是 how)
146
+
147
+ negative(不抽 — 实现细节 / 执行步骤 / 接口定义):
148
+ - "实现:用 Map<string, User> 存储"(实现 how)
149
+ - "Step 1: 创建 schema"(任务步骤,该进 tasks)
150
+ - "POST /api/users 入参 { name, email }"(接口定义,该进 specs)
151
+ - "架构图:gateway → service → db"(架构图,实现层)
152
+ - 单纯方案描述无 why
153
+
154
+ # 输出格式(严格 JSON 数组)
155
+ { "text": string(<= 80 字), "section": string, "critical": boolean }
156
+ critical=true 仅当该约束是合规 / 安全 / 业务硬底线。
157
+
158
+ # 阈值
159
+ **至少抽 5 条;< 5 条说明 design 缺动机阐述,即视为 fail。**
160
+
161
+ # design 文档
162
+ ${designContent}
163
+
164
+ 仅输出 JSON 数组,不输出 preamble。`;
165
+ // Task 5.6 — extractBehaviorFacts(tasks → specs 校验)
166
+ // M15 facts 目标分桶:specs 关注"行为/输出/给定条件",不进动机
167
+ const EXTRACT_BEHAVIOR_PROMPT = (tasksContent) => `从下面"tasks/plan 文档"中**只抽取"行为 / 输出 / 给定条件 / 错误处理"类事实**。
168
+ 用途:验证后续生成的 specs/<area>.md 是否完整覆盖行为契约。
169
+ **严格按目标分桶过滤,动机 / 实现细节不要进来**。
170
+
171
+ # 抽取标准
172
+
173
+ positive(应抽 — 行为 / 输出 / 输入 / 错误):
174
+ - "task-1: 用户登录后跳到 /home"(行为)
175
+ - "task-2: 输入空 username → 返 400 + 错误码 USER_REQUIRED"(行为 + 错误)
176
+ - "task-3: 配置 retries=3, backoff=exponential"(给定参数)
177
+ - "成功响应:status=200, body 含 user_id 和 token"(输出契约)
178
+ - "task-5: 重复提交相同 idempotency-key → 返同一结果"(幂等行为)
179
+
180
+ negative(不抽 — 动机 / 实现 / 流程):
181
+ - "动机:简化 onboarding"(动机,该进 motivation)
182
+ - "依赖 lodash@4 的 debounce"(实现细节)
183
+ - "提交后跑 lint 和 typecheck"(开发流程,非产品行为)
184
+ - "项目背景:取代旧 v1 系统"(背景说明)
185
+ - "PR 合并需 2 人 review"(协作流程)
186
+
187
+ # 输出格式(严格 JSON 数组)
188
+ { "text": string(<= 80 字), "section": string, "critical": boolean }
189
+ critical=true 仅当该行为是合规 / 安全 / 业务硬契约。
190
+
191
+ # 阈值
192
+ **至少抽 5 条;< 5 条 fail。**
193
+
194
+ # tasks 文档
195
+ ${tasksContent}
196
+
197
+ 仅输出 JSON 数组,不输出 preamble。`;
198
+ // ============================================================================
199
+ // Task 5.4-5.6:三个 extract 入口
200
+ // ============================================================================
201
+ /**
202
+ * 通用 extractFacts:给 OpenSpec 已有件用(spec.md / proposal.md 等),不分桶。
203
+ * 默认 n=30;tokens 上限 4096(覆盖 30 条 80 字 + 字段)。
204
+ */
205
+ export async function extractFacts(client, content, signal, n = 30) {
206
+ const text = await callAnthropic(client, {
207
+ model: QUALITY_MODEL,
208
+ prompt: EXTRACT_FACTS_PROMPT(content, n),
209
+ maxTokens: 4096,
210
+ signal,
211
+ });
212
+ return parseFactsResponse(text);
213
+ }
214
+ /** extractMotivationFacts:从 design 抽"问题/动机/约束",用于 proposal 校验。 */
215
+ export async function extractMotivationFacts(client, designContent, signal) {
216
+ const text = await callAnthropic(client, {
217
+ model: QUALITY_MODEL,
218
+ prompt: EXTRACT_MOTIVATION_PROMPT(designContent),
219
+ maxTokens: 4096,
220
+ signal,
221
+ });
222
+ return parseFactsResponse(text);
223
+ }
224
+ /** extractBehaviorFacts:从 tasks 抽"行为/输出",用于 specs 校验。 */
225
+ export async function extractBehaviorFacts(client, tasksContent, signal) {
226
+ const text = await callAnthropic(client, {
227
+ model: QUALITY_MODEL,
228
+ prompt: EXTRACT_BEHAVIOR_PROMPT(tasksContent),
229
+ maxTokens: 4096,
230
+ signal,
231
+ });
232
+ return parseFactsResponse(text);
233
+ }
234
+ // ============================================================================
235
+ // Task 5.8:judgeAll(三态判断 + 聚合 critical/total rate)
236
+ // ============================================================================
237
+ /** judge prompt:三态判断 preserved / paraphrased / lost */
238
+ const JUDGE_PROMPT = (generatedBody, fact) => `判断下面这条"原文事实"是否在"生成产物"里被保留。
239
+
240
+ # 三态定义
241
+ - preserved:字面量或数值一致(原文数字 / 字段名 / 错误码 / 状态码 在产物中可找到)
242
+ - paraphrased:同义改写但语义等价(无遗漏数值 / 约束 / 关键名词)
243
+ - lost:完全没提到 / 漏关键数值 / 漏约束 / 改成不同含义
244
+
245
+ # 原文事实
246
+ - 章节:${fact.section}
247
+ - 重要级:${fact.critical ? 'critical' : 'non-critical'}
248
+ - 内容:${fact.text}
249
+
250
+ # 生成产物
251
+ ${generatedBody}
252
+
253
+ # 输出格式
254
+ 第 1 行只输出一个词:preserved / paraphrased / lost
255
+ 第 2 行起(可省):简短理由(<= 50 字)`;
256
+ /**
257
+ * judgeAll:并行 judge 每条 fact,聚合 critical+total rate。
258
+ * 通过条件:criticalRate === 1 AND totalRate >= threshold。
259
+ */
260
+ export async function judgeAll(client, generatedBody, facts, threshold, signal) {
261
+ // 并行 judge(每个 fact 独立调用,Promise.all 聚合)
262
+ const judges = await Promise.all(facts.map(async (fact) => {
263
+ const text = await callAnthropic(client, {
264
+ model: QUALITY_MODEL,
265
+ prompt: JUDGE_PROMPT(generatedBody, fact),
266
+ maxTokens: 256,
267
+ signal,
268
+ });
269
+ const firstLine = (text.split('\n')[0] ?? '').trim().toLowerCase();
270
+ // 解析失败默认 lost(防 LLM 输出意外格式 → 保守判 lost,不假装通过)
271
+ const state = firstLine === 'preserved' || firstLine === 'paraphrased' || firstLine === 'lost'
272
+ ? firstLine
273
+ : 'lost';
274
+ return { fact, state };
275
+ }));
276
+ const critical = judges.filter((j) => j.fact.critical);
277
+ const critPreserved = critical.filter((j) => j.state !== 'lost');
278
+ const totalPreserved = judges.filter((j) => j.state !== 'lost');
279
+ // critical 列表为空时视为 1(无 critical 约束)
280
+ const criticalRate = critical.length === 0 ? 1 : critPreserved.length / critical.length;
281
+ const totalRate = judges.length === 0 ? 1 : totalPreserved.length / judges.length;
282
+ const lostFacts = judges.filter((j) => j.state === 'lost').map((j) => j.fact);
283
+ return {
284
+ passed: criticalRate >= 1 && totalRate >= threshold,
285
+ totalRate,
286
+ criticalRate,
287
+ lostFacts,
288
+ };
289
+ }
290
+ // ============================================================================
291
+ // Task 5.9:getFidelityThreshold
292
+ // ============================================================================
293
+ /**
294
+ * fidelity threshold:
295
+ * - superpowers 0.6(LLM 生成质量约束;非 brownfield 路径 — superpowers 是专属 plugin 产物,
296
+ * 与 legacy-bridge brownfield 是不同的迁移源,prompt 不混用;阈值偏松因 plugin 产物结构噪声)
297
+ * - openspec 0.9(spec 严格,行为契约期望高保真)
298
+ */
299
+ export function getFidelityThreshold(sourceId) {
300
+ return sourceId === 'superpowers' ? 0.6 : 0.9;
301
+ }
302
+ //# sourceMappingURL=quality.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality.js","sourceRoot":"","sources":["../../../src/core/migrate/quality.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { type AnthropicClient } from './quality.js';
2
+ import type { ClassificationPlan, MigrateSource, TraceOp } from './types.js';
3
+ export interface RegenerateContext {
4
+ source: MigrateSource;
5
+ plan: ClassificationPlan;
6
+ cwd: string;
7
+ abortController: AbortController;
8
+ client: AnthropicClient;
9
+ /** 追加一条 TraceOp 到 trace.json */
10
+ appendTraceOp: (op: TraceOp) => Promise<void>;
11
+ }
12
+ export interface RegenerateResult {
13
+ succeeded: number;
14
+ failed: number;
15
+ /** .partial 文件路径列表(给 report 汇总显示) */
16
+ partials: string[];
17
+ }
18
+ /**
19
+ * runRegenerate:遍历 missing artifacts,逐件 regenerate。
20
+ * 失败写 .partial 文件(spec §3.1),用户可查看失败原因。
21
+ * AbortInterrupted → 立即 break,不继续处理后续件。
22
+ */
23
+ export declare function runRegenerate(ctx: RegenerateContext): Promise<RegenerateResult>;
24
+ //# sourceMappingURL=regenerate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regenerate.d.ts","sourceRoot":"","sources":["../../../src/core/migrate/regenerate.ts"],"names":[],"mappings":"AAOA,OAAO,EASL,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EACV,kBAAkB,EAElB,aAAa,EACb,OAAO,EAER,MAAM,YAAY,CAAC;AASpB,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,kBAAkB,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,eAAe,CAAC;IACjC,MAAM,EAAE,eAAe,CAAC;IACxB,gCAAgC;IAChC,aAAa,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAMD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8CrF"}
@@ -0,0 +1,145 @@
1
+ // src/core/migrate/regenerate.ts
2
+ // --regenerate 主流程 — Plan 8e Task 5.11
3
+ // Spec §2.8 v3 完整流程 + §5.1 复用 legacy-bridge/redact
4
+ import { readFile, writeFile } from 'node:fs/promises';
5
+ import { join } from 'node:path';
6
+ import { redact } from '../legacy-bridge/redact.js';
7
+ import { callAnthropic, extractFacts, extractMotivationFacts, extractBehaviorFacts, judgeAll, getFidelityThreshold, QualityFailure, AbortInterrupted, } from './quality.js';
8
+ // 生成用 opus(质量高);extract+judge 用 sonnet(quality.ts 内部已固定)
9
+ const REGEN_MODEL = 'claude-opus-4-7';
10
+ // ============================================================================
11
+ // 主流程
12
+ // ============================================================================
13
+ /**
14
+ * runRegenerate:遍历 missing artifacts,逐件 regenerate。
15
+ * 失败写 .partial 文件(spec §3.1),用户可查看失败原因。
16
+ * AbortInterrupted → 立即 break,不继续处理后续件。
17
+ */
18
+ export async function runRegenerate(ctx) {
19
+ const result = { succeeded: 0, failed: 0, partials: [] };
20
+ // 枚举缺件(由 MigrateSource.listMissingArtifacts 提供)
21
+ const missing = ctx.source.listMissingArtifacts(ctx.plan);
22
+ // 按源类型取 fidelity 阈值(superpowers 0.6 / openspec 0.9)
23
+ const threshold = getFidelityThreshold(ctx.source.id);
24
+ for (const m of missing) {
25
+ // 检查 abort 信号,若已中断则停止遍历
26
+ if (ctx.abortController.signal.aborted)
27
+ break;
28
+ try {
29
+ const generated = await regenerateOne(m, ctx, threshold);
30
+ const targetAbs = join(ctx.cwd, m.targetPath);
31
+ await writeFile(targetAbs, generated, 'utf8');
32
+ // 写 TraceOp:regen 字段记录 model / facts 占位(facts 数量在 judgeAll 内部处理)
33
+ await ctx.appendTraceOp({
34
+ from: null,
35
+ to: targetAbs,
36
+ // MissingArtifact.kind 是 'proposal'|'specs';TraceOp.kind 是 ArtifactKind
37
+ // 'specs' 不在 ArtifactKind 里,映射为 'spec'
38
+ kind: m.kind === 'specs' ? 'spec' : 'proposal',
39
+ transform: ['regen'],
40
+ validate: 'ok',
41
+ regen: { model: REGEN_MODEL, facts: 0, passed: 0, threshold },
42
+ writtenAt: new Date().toISOString(),
43
+ status: 'committed',
44
+ });
45
+ result.succeeded++;
46
+ }
47
+ catch (err) {
48
+ // 分类错误原因:quality 失败 / 中断 / 网络
49
+ const reason = err instanceof QualityFailure
50
+ ? `quality-fail: ${err.reason}`
51
+ : err instanceof AbortInterrupted
52
+ ? 'interrupted'
53
+ : 'network-error';
54
+ // .partial 文件:写失败原因注释,让用户知道哪件失败(spec §3.1)
55
+ const partialPath = join(ctx.cwd, `${m.targetPath}.partial-${m.kind}.md`);
56
+ await writeFile(partialPath, `<!-- regen failed: ${reason} -->\n`, 'utf8');
57
+ result.partials.push(partialPath);
58
+ result.failed++;
59
+ // AbortInterrupted → 立即终止整个循环
60
+ if (err instanceof AbortInterrupted)
61
+ break;
62
+ }
63
+ }
64
+ return result;
65
+ }
66
+ // ============================================================================
67
+ // 单件 regenerate
68
+ // ============================================================================
69
+ /**
70
+ * regenerateOne:
71
+ * 1. 读 facts source(M15 目标分桶:design → motivation / tasks → behavior / self → generic)
72
+ * 2. redact — 发 LLM 前去除敏感信息(spec §5.1 复用 legacy-bridge/redact)
73
+ * 3. callAnthropic opus 生成目标产物
74
+ * 4. extractFacts 抽 facts 验证覆盖度
75
+ * 5. judgeAll 判定 fidelity,低于阈值抛 QualityFailure
76
+ * 6. 写盘前二次检查 abort(spec §3.1)
77
+ */
78
+ async function regenerateOne(m, ctx, threshold) {
79
+ // ---- 步骤 1:读 facts source ----
80
+ let factsSourceContent;
81
+ if (m.factsSource === 'design') {
82
+ // 从 plan.changes 找对应 slug 的 design 文件
83
+ const designFile = findArtifact(ctx.plan, m.changeSlug, 'design');
84
+ factsSourceContent = designFile ? await readFile(designFile.absPath, 'utf8') : '';
85
+ }
86
+ else if (m.factsSource === 'tasks') {
87
+ // 从 plan.changes 找对应 slug 的 tasks 文件
88
+ const tasksFile = findArtifact(ctx.plan, m.changeSlug, 'tasks');
89
+ factsSourceContent = tasksFile ? await readFile(tasksFile.absPath, 'utf8') : '';
90
+ }
91
+ else {
92
+ // 'self' 路径:从 sourceAbsPath 读已有件作 facts 源(C2 修);无 sourceAbsPath 则留空
93
+ if (m.sourceAbsPath) {
94
+ factsSourceContent = await readFile(m.sourceAbsPath, 'utf8');
95
+ }
96
+ else {
97
+ factsSourceContent = '';
98
+ }
99
+ }
100
+ // ---- 步骤 2:redact — 使用内置默认规则(DEFAULT_REDACT_RULES 已内置于 redact()) ----
101
+ const { redactedText } = redact(factsSourceContent);
102
+ // ---- 步骤 3:调 SDK 生成目标(用 opus,质量高) ----
103
+ // proposal:依据 design 输出 forge 格式 proposal.md
104
+ // specs:依据 tasks 输出 forge 格式 specs/<area>.md
105
+ const targetPrompt = m.kind === 'proposal'
106
+ ? `基于下面 design,生成符合 forge 格式的 proposal.md(# 标题 + ## Why + ## What):\n\n${redactedText}`
107
+ : `基于下面 tasks,生成符合 forge 格式的 specs/<area>.md(# 标题 + ## Scenario: <id> + **Given/When/Then**):\n\n${redactedText}`;
108
+ const generated = await callAnthropic(ctx.client, {
109
+ model: REGEN_MODEL,
110
+ prompt: targetPrompt,
111
+ maxTokens: 4096,
112
+ signal: ctx.abortController.signal,
113
+ });
114
+ // ---- 步骤 4:抽 facts(M15 目标分桶决定用哪种 extractor) ----
115
+ // design → extractMotivationFacts(问题/动机/约束)
116
+ // tasks → extractBehaviorFacts(行为/输出)
117
+ // self → extractFacts(通用)
118
+ const facts = m.factsSource === 'design'
119
+ ? await extractMotivationFacts(ctx.client, redactedText, ctx.abortController.signal)
120
+ : m.factsSource === 'tasks'
121
+ ? await extractBehaviorFacts(ctx.client, redactedText, ctx.abortController.signal)
122
+ : await extractFacts(ctx.client, redactedText, ctx.abortController.signal);
123
+ // ---- 步骤 5:judge — 验生成产物覆盖了多少 facts ----
124
+ const judge = await judgeAll(ctx.client, generated, facts, threshold, ctx.abortController.signal);
125
+ if (!judge.passed) {
126
+ // fidelity 不达标 → 抛 QualityFailure(主流程写 .partial)
127
+ throw new QualityFailure('low-fidelity');
128
+ }
129
+ // ---- 步骤 6:写盘前二次检查 abort(spec §3.1) ----
130
+ if (ctx.abortController.signal.aborted)
131
+ throw new AbortInterrupted();
132
+ return generated;
133
+ }
134
+ // ============================================================================
135
+ // 工具函数
136
+ // ============================================================================
137
+ /**
138
+ * findArtifact:从 ClassificationPlan 中找指定 slug 的 design/tasks 文件。
139
+ * 返回 undefined 表示对应产物不存在(调用方回退到空字符串)。
140
+ */
141
+ function findArtifact(plan, slug, kind) {
142
+ const change = plan.changes.find((c) => c.slug === slug);
143
+ return change?.artifacts[kind];
144
+ }
145
+ //# sourceMappingURL=regenerate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regenerate.js","sourceRoot":"","sources":["../../../src/core/migrate/regenerate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { MigrateTrace, TraceOp } from './types.js';
2
+ /**
3
+ * Journal:NDJSON 行式写入 + 每步 fsync
4
+ * crash 时半完成 ops 仍可被 readTrace 重建
5
+ */
6
+ export declare class Journal {
7
+ private readonly fh;
8
+ private constructor();
9
+ /** 打开 journal 文件(append 模式) */
10
+ static open(filePath: string): Promise<Journal>;
11
+ /** 追加一个 op,立即 fsync 防 crash 丢数据 */
12
+ append(op: TraceOp): Promise<void>;
13
+ /** 关闭文件句柄 */
14
+ close(): Promise<void>;
15
+ }
16
+ /**
17
+ * reader 优先级:.json > .ndjson(重建)> .tmp(忽略,返 null)
18
+ * 说明:
19
+ * - .json 是末态原子 rename 写成的,可信
20
+ * - .ndjson 是 crash 半完成态,可重建 ops
21
+ * - .tmp 是崩溃中的写入,不可读(可能不完整)
22
+ */
23
+ export declare function readTrace(dir: string): Promise<MigrateTrace | null>;
24
+ /**
25
+ * 末态原子 rename 三步走:
26
+ * 1. 写 .tmp(完整 final trace JSON)
27
+ * 2. fs.rename .tmp → .json(POSIX 原子)
28
+ * 3. 删 .ndjson(若存在)
29
+ */
30
+ export declare function finalizeAndRename(dir: string, finalTrace: MigrateTrace): Promise<void>;
31
+ /**
32
+ * 写 migrate-report.md(spec §3.4)
33
+ * 磁盘满或写入失败时:降级 stderr 输出全文(spec §3.1)
34
+ */
35
+ export declare function writeReportMd(dir: string, finalTrace: MigrateTrace): Promise<void>;
36
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/core/migrate/report.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAY,MAAM,YAAY,CAAC;AAOlE;;;GAGG;AACH,qBAAa,OAAO;IACE,OAAO,CAAC,QAAQ,CAAC,EAAE;IAAvC,OAAO;IAEP,+BAA+B;WAClB,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrD,mCAAmC;IAC7B,MAAM,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxC,aAAa;IACP,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA2CzE;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAa5F;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA2CxF"}