@12ui/design 0.2.57 → 0.2.59

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 (456) hide show
  1. package/SKILL.md +1 -1
  2. package/dist/artifact-materializer.d.ts.map +1 -1
  3. package/dist/artifact-materializer.js +4 -1
  4. package/dist/artifact-materializer.js.map +1 -1
  5. package/dist/atomic-file-replace.d.ts +21 -0
  6. package/dist/atomic-file-replace.d.ts.map +1 -0
  7. package/dist/atomic-file-replace.js +48 -0
  8. package/dist/atomic-file-replace.js.map +1 -0
  9. package/dist/branch-client.d.ts +84 -2
  10. package/dist/branch-client.d.ts.map +1 -1
  11. package/dist/branch-client.js +30 -0
  12. package/dist/branch-client.js.map +1 -1
  13. package/dist/cli-arguments.d.ts.map +1 -1
  14. package/dist/cli-arguments.js +2 -1
  15. package/dist/cli-arguments.js.map +1 -1
  16. package/dist/cli-capabilities.d.ts +1 -1
  17. package/dist/cli-conversion-derivation.d.ts +14 -1
  18. package/dist/cli-conversion-derivation.d.ts.map +1 -1
  19. package/dist/cli-conversion-derivation.js +14 -7
  20. package/dist/cli-conversion-derivation.js.map +1 -1
  21. package/dist/cli-convert-command.d.ts +2 -0
  22. package/dist/cli-convert-command.d.ts.map +1 -1
  23. package/dist/cli-convert-command.js +86 -34
  24. package/dist/cli-convert-command.js.map +1 -1
  25. package/dist/cli-corpus-command.d.ts.map +1 -1
  26. package/dist/cli-corpus-command.js +0 -3
  27. package/dist/cli-corpus-command.js.map +1 -1
  28. package/dist/cli-draft-command.d.ts +16 -0
  29. package/dist/cli-draft-command.d.ts.map +1 -1
  30. package/dist/cli-draft-command.js +47 -9
  31. package/dist/cli-draft-command.js.map +1 -1
  32. package/dist/cli-help/design.d.ts +7 -4
  33. package/dist/cli-help/design.d.ts.map +1 -1
  34. package/dist/cli-help/design.js +20 -7
  35. package/dist/cli-help/design.js.map +1 -1
  36. package/dist/cli-help/index.d.ts +9 -6
  37. package/dist/cli-help/index.d.ts.map +1 -1
  38. package/dist/cli-help/meta.d.ts +2 -2
  39. package/dist/cli-help/meta.d.ts.map +1 -1
  40. package/dist/cli-help/meta.js +4 -1
  41. package/dist/cli-help/meta.js.map +1 -1
  42. package/dist/cli-improve-command.d.ts.map +1 -1
  43. package/dist/cli-improve-command.js +215 -33
  44. package/dist/cli-improve-command.js.map +1 -1
  45. package/dist/cli-redesign-command.d.ts.map +1 -1
  46. package/dist/cli-redesign-command.js +268 -156
  47. package/dist/cli-redesign-command.js.map +1 -1
  48. package/dist/cli-run.d.ts.map +1 -1
  49. package/dist/cli-run.js +13 -3
  50. package/dist/cli-run.js.map +1 -1
  51. package/dist/cli-spend-command.d.ts +12 -1
  52. package/dist/cli-spend-command.d.ts.map +1 -1
  53. package/dist/cli-spend-command.js +94 -2
  54. package/dist/cli-spend-command.js.map +1 -1
  55. package/dist/cli-usage.js +5 -5
  56. package/dist/cli-usage.js.map +1 -1
  57. package/dist/concept-input.d.ts +6 -77
  58. package/dist/concept-input.d.ts.map +1 -1
  59. package/dist/concept-input.js +6 -87
  60. package/dist/concept-input.js.map +1 -1
  61. package/dist/conversion-client.d.ts +106 -17
  62. package/dist/conversion-client.d.ts.map +1 -1
  63. package/dist/conversion-client.js +244 -80
  64. package/dist/conversion-client.js.map +1 -1
  65. package/dist/corpus-client.d.ts.map +1 -1
  66. package/dist/corpus-client.js +0 -3
  67. package/dist/corpus-client.js.map +1 -1
  68. package/dist/draft-identity.d.ts +7 -0
  69. package/dist/draft-identity.d.ts.map +1 -1
  70. package/dist/draft-identity.js +4 -0
  71. package/dist/draft-identity.js.map +1 -1
  72. package/dist/draft-run.d.ts +13 -0
  73. package/dist/draft-run.d.ts.map +1 -1
  74. package/dist/draft-run.js +20 -2
  75. package/dist/draft-run.js.map +1 -1
  76. package/dist/draft-workspace.d.ts +4 -0
  77. package/dist/draft-workspace.d.ts.map +1 -1
  78. package/dist/draft-workspace.js.map +1 -1
  79. package/dist/hosted-draft-identity.d.ts +18 -0
  80. package/dist/hosted-draft-identity.d.ts.map +1 -1
  81. package/dist/hosted-draft-identity.js +8 -0
  82. package/dist/hosted-draft-identity.js.map +1 -1
  83. package/dist/hosted-draft-run.d.ts +15 -0
  84. package/dist/hosted-draft-run.d.ts.map +1 -1
  85. package/dist/hosted-draft-run.js +27 -0
  86. package/dist/hosted-draft-run.js.map +1 -1
  87. package/dist/improve-added-specs.d.ts +12 -40
  88. package/dist/improve-added-specs.d.ts.map +1 -1
  89. package/dist/improve-added-specs.js +63 -172
  90. package/dist/improve-added-specs.js.map +1 -1
  91. package/dist/improve-artifact-writer.d.ts +13 -0
  92. package/dist/improve-artifact-writer.d.ts.map +1 -0
  93. package/dist/improve-artifact-writer.js +27 -0
  94. package/dist/improve-artifact-writer.js.map +1 -0
  95. package/dist/improve-bootstrap-history.d.ts +21 -0
  96. package/dist/improve-bootstrap-history.d.ts.map +1 -0
  97. package/dist/improve-bootstrap-history.js +43 -0
  98. package/dist/improve-bootstrap-history.js.map +1 -0
  99. package/dist/improve-branch-stage.d.ts +10 -0
  100. package/dist/improve-branch-stage.d.ts.map +1 -0
  101. package/dist/improve-branch-stage.js +325 -0
  102. package/dist/improve-branch-stage.js.map +1 -0
  103. package/dist/improve-capture-redirect.d.ts +19 -0
  104. package/dist/improve-capture-redirect.d.ts.map +1 -1
  105. package/dist/improve-capture-redirect.js +18 -1
  106. package/dist/improve-capture-redirect.js.map +1 -1
  107. package/dist/improve-capture-words.d.ts +43 -0
  108. package/dist/improve-capture-words.d.ts.map +1 -0
  109. package/dist/improve-capture-words.js +25 -0
  110. package/dist/improve-capture-words.js.map +1 -0
  111. package/dist/improve-concept.d.ts +6 -20
  112. package/dist/improve-concept.d.ts.map +1 -1
  113. package/dist/improve-concept.js +12 -59
  114. package/dist/improve-concept.js.map +1 -1
  115. package/dist/improve-conversion-attempts.d.ts +12 -4
  116. package/dist/improve-conversion-attempts.d.ts.map +1 -1
  117. package/dist/improve-conversion-attempts.js.map +1 -1
  118. package/dist/improve-conversion-stage.d.ts +13 -2
  119. package/dist/improve-conversion-stage.d.ts.map +1 -1
  120. package/dist/improve-conversion-stage.js +211 -20
  121. package/dist/improve-conversion-stage.js.map +1 -1
  122. package/dist/improve-convert-progress.d.ts +10 -2
  123. package/dist/improve-convert-progress.d.ts.map +1 -1
  124. package/dist/improve-convert-progress.js +7 -3
  125. package/dist/improve-convert-progress.js.map +1 -1
  126. package/dist/improve-convert-resilience.d.ts +60 -13
  127. package/dist/improve-convert-resilience.d.ts.map +1 -1
  128. package/dist/improve-convert-resilience.js +85 -22
  129. package/dist/improve-convert-resilience.js.map +1 -1
  130. package/dist/improve-core/concept-input.d.ts +80 -0
  131. package/dist/improve-core/concept-input.d.ts.map +1 -0
  132. package/dist/improve-core/concept-input.js +92 -0
  133. package/dist/improve-core/concept-input.js.map +1 -0
  134. package/dist/improve-core/improve-added-specs.d.ts +62 -0
  135. package/dist/improve-core/improve-added-specs.d.ts.map +1 -0
  136. package/dist/improve-core/improve-added-specs.js +160 -0
  137. package/dist/improve-core/improve-added-specs.js.map +1 -0
  138. package/dist/improve-core/improve-artifacts.d.ts +18 -0
  139. package/dist/improve-core/improve-artifacts.d.ts.map +1 -0
  140. package/dist/improve-core/improve-artifacts.js +4 -0
  141. package/dist/improve-core/improve-artifacts.js.map +1 -0
  142. package/dist/improve-core/improve-concept.d.ts +11 -0
  143. package/dist/improve-core/improve-concept.d.ts.map +1 -0
  144. package/dist/improve-core/improve-concept.js +190 -0
  145. package/dist/improve-core/improve-concept.js.map +1 -0
  146. package/dist/improve-core/improve-discovery.d.ts +84 -0
  147. package/dist/improve-core/improve-discovery.d.ts.map +1 -0
  148. package/dist/improve-core/improve-discovery.js +154 -0
  149. package/dist/improve-core/improve-discovery.js.map +1 -0
  150. package/dist/improve-core/improve-dom-anchor.d.ts.map +1 -0
  151. package/dist/{improve-dom-anchor.js → improve-core/improve-dom-anchor.js} +2 -0
  152. package/dist/improve-core/improve-dom-anchor.js.map +1 -0
  153. package/dist/improve-core/improve-dom-diff.d.ts +59 -0
  154. package/dist/improve-core/improve-dom-diff.d.ts.map +1 -0
  155. package/dist/improve-core/improve-dom-diff.js +151 -0
  156. package/dist/improve-core/improve-dom-diff.js.map +1 -0
  157. package/dist/improve-core/improve-dom-extract.d.ts.map +1 -0
  158. package/dist/{improve-dom-extract.js → improve-core/improve-dom-extract.js} +2 -0
  159. package/dist/improve-core/improve-dom-extract.js.map +1 -0
  160. package/dist/improve-core/improve-dom-gate.d.ts +49 -0
  161. package/dist/improve-core/improve-dom-gate.d.ts.map +1 -0
  162. package/dist/improve-core/improve-dom-gate.js +99 -0
  163. package/dist/improve-core/improve-dom-gate.js.map +1 -0
  164. package/dist/improve-core/improve-dom-neighbour.d.ts.map +1 -0
  165. package/dist/{improve-dom-neighbour.js → improve-core/improve-dom-neighbour.js} +2 -0
  166. package/dist/improve-core/improve-dom-neighbour.js.map +1 -0
  167. package/dist/improve-core/improve-dom-scale.d.ts.map +1 -0
  168. package/dist/{improve-dom-scale.js → improve-core/improve-dom-scale.js} +2 -0
  169. package/dist/improve-core/improve-dom-scale.js.map +1 -0
  170. package/dist/improve-core/improve-icon-svg.d.ts +29 -0
  171. package/dist/improve-core/improve-icon-svg.d.ts.map +1 -0
  172. package/dist/{improve-icon-svg.js → improve-core/improve-icon-svg.js} +2 -0
  173. package/dist/improve-core/improve-icon-svg.js.map +1 -0
  174. package/dist/improve-core/improve-kit-asset-model.d.ts +177 -0
  175. package/dist/improve-core/improve-kit-asset-model.d.ts.map +1 -0
  176. package/dist/improve-core/improve-kit-asset-model.js +269 -0
  177. package/dist/improve-core/improve-kit-asset-model.js.map +1 -0
  178. package/dist/improve-core/improve-layerdoc-diff.d.ts.map +1 -0
  179. package/dist/{improve-layerdoc-diff.js → improve-core/improve-layerdoc-diff.js} +2 -0
  180. package/dist/improve-core/improve-layerdoc-diff.js.map +1 -0
  181. package/dist/{improve-layerdoc-types.d.ts → improve-core/improve-layerdoc-types.d.ts} +9 -0
  182. package/dist/improve-core/improve-layerdoc-types.d.ts.map +1 -0
  183. package/dist/improve-core/improve-layerdoc-types.js +4 -0
  184. package/dist/improve-core/improve-layerdoc-types.js.map +1 -0
  185. package/dist/improve-core/improve-page-words.d.ts +180 -0
  186. package/dist/improve-core/improve-page-words.d.ts.map +1 -0
  187. package/dist/improve-core/improve-page-words.js +303 -0
  188. package/dist/improve-core/improve-page-words.js.map +1 -0
  189. package/dist/{improve-plan-annotated-render.d.ts → improve-core/improve-plan-annotated-render.d.ts} +6 -1
  190. package/dist/improve-core/improve-plan-annotated-render.d.ts.map +1 -0
  191. package/dist/{improve-plan-annotated-render.js → improve-core/improve-plan-annotated-render.js} +56 -28
  192. package/dist/{improve-plan-annotated-render.js.map → improve-core/improve-plan-annotated-render.js.map} +1 -1
  193. package/dist/improve-core/improve-plan-annotator.d.ts +34 -0
  194. package/dist/improve-core/improve-plan-annotator.d.ts.map +1 -0
  195. package/dist/improve-core/improve-plan-annotator.js +52 -0
  196. package/dist/improve-core/improve-plan-annotator.js.map +1 -0
  197. package/dist/{improve-plan-render.d.ts → improve-core/improve-plan-render.d.ts} +2 -1
  198. package/dist/improve-core/improve-plan-render.d.ts.map +1 -0
  199. package/dist/{improve-plan-render.js → improve-core/improve-plan-render.js} +7 -1
  200. package/dist/improve-core/improve-plan-render.js.map +1 -0
  201. package/dist/improve-core/improve-plan-vector-keep.d.ts +29 -0
  202. package/dist/improve-core/improve-plan-vector-keep.d.ts.map +1 -0
  203. package/dist/improve-core/improve-plan-vector-keep.js +68 -0
  204. package/dist/improve-core/improve-plan-vector-keep.js.map +1 -0
  205. package/dist/{improve-raster-layers-section.d.ts → improve-core/improve-raster-layers-section.d.ts} +9 -1
  206. package/dist/improve-core/improve-raster-layers-section.d.ts.map +1 -0
  207. package/dist/{improve-raster-layers-section.js → improve-core/improve-raster-layers-section.js} +5 -2
  208. package/dist/improve-core/improve-raster-layers-section.js.map +1 -0
  209. package/dist/improve-core/improve-refusal.d.ts +6 -0
  210. package/dist/improve-core/improve-refusal.d.ts.map +1 -0
  211. package/dist/improve-core/improve-refusal.js +27 -0
  212. package/dist/improve-core/improve-refusal.js.map +1 -0
  213. package/dist/improve-core/improve-retain.d.ts +121 -0
  214. package/dist/improve-core/improve-retain.d.ts.map +1 -0
  215. package/dist/improve-core/improve-retain.js +115 -0
  216. package/dist/improve-core/improve-retain.js.map +1 -0
  217. package/dist/improve-core/improve-site-plan.d.ts +75 -0
  218. package/dist/improve-core/improve-site-plan.d.ts.map +1 -0
  219. package/dist/improve-core/improve-site-plan.js +135 -0
  220. package/dist/improve-core/improve-site-plan.js.map +1 -0
  221. package/dist/improve-core/improve-site-shell.d.ts +56 -0
  222. package/dist/improve-core/improve-site-shell.d.ts.map +1 -0
  223. package/dist/improve-core/improve-site-shell.js +152 -0
  224. package/dist/improve-core/improve-site-shell.js.map +1 -0
  225. package/dist/improve-core/improve-site-tokens.d.ts +44 -0
  226. package/dist/improve-core/improve-site-tokens.d.ts.map +1 -0
  227. package/dist/improve-core/improve-site-tokens.js +87 -0
  228. package/dist/improve-core/improve-site-tokens.js.map +1 -0
  229. package/dist/improve-core/improve-source-hints.d.ts +25 -0
  230. package/dist/improve-core/improve-source-hints.d.ts.map +1 -0
  231. package/dist/improve-core/improve-source-hints.js +17 -0
  232. package/dist/improve-core/improve-source-hints.js.map +1 -0
  233. package/dist/improve-core/improve-token-patch.d.ts.map +1 -0
  234. package/dist/{improve-token-patch.js → improve-core/improve-token-patch.js} +2 -0
  235. package/dist/improve-core/improve-token-patch.js.map +1 -0
  236. package/dist/improve-core/index.d.ts +47 -0
  237. package/dist/improve-core/index.d.ts.map +1 -0
  238. package/dist/improve-core/index.js +49 -0
  239. package/dist/improve-core/index.js.map +1 -0
  240. package/dist/improve-delivery-stages.d.ts +6 -0
  241. package/dist/improve-delivery-stages.d.ts.map +1 -1
  242. package/dist/improve-delivery-stages.js +87 -6
  243. package/dist/improve-delivery-stages.js.map +1 -1
  244. package/dist/improve-dom-diff.d.ts +8 -24
  245. package/dist/improve-dom-diff.d.ts.map +1 -1
  246. package/dist/improve-dom-diff.js +23 -123
  247. package/dist/improve-dom-diff.js.map +1 -1
  248. package/dist/improve-dom-gate.d.ts +1 -18
  249. package/dist/improve-dom-gate.d.ts.map +1 -1
  250. package/dist/improve-dom-gate.js +1 -46
  251. package/dist/improve-dom-gate.js.map +1 -1
  252. package/dist/improve-generation-stages.d.ts +0 -2
  253. package/dist/improve-generation-stages.d.ts.map +1 -1
  254. package/dist/improve-generation-stages.js +162 -15
  255. package/dist/improve-generation-stages.js.map +1 -1
  256. package/dist/improve-kit-assets.d.ts +8 -116
  257. package/dist/improve-kit-assets.d.ts.map +1 -1
  258. package/dist/improve-kit-assets.js +9 -229
  259. package/dist/improve-kit-assets.js.map +1 -1
  260. package/dist/improve-kit-readme.d.ts +4 -0
  261. package/dist/improve-kit-readme.d.ts.map +1 -1
  262. package/dist/improve-kit-readme.js +57 -16
  263. package/dist/improve-kit-readme.js.map +1 -1
  264. package/dist/improve-kit-stall.d.ts +3 -1
  265. package/dist/improve-kit-stall.d.ts.map +1 -1
  266. package/dist/improve-kit-stall.js +46 -14
  267. package/dist/improve-kit-stall.js.map +1 -1
  268. package/dist/improve-kit-status.d.ts.map +1 -1
  269. package/dist/improve-kit-status.js +8 -3
  270. package/dist/improve-kit-status.js.map +1 -1
  271. package/dist/improve-options.d.ts +8 -0
  272. package/dist/improve-options.d.ts.map +1 -1
  273. package/dist/improve-options.js +92 -12
  274. package/dist/improve-options.js.map +1 -1
  275. package/dist/improve-passthrough-flags.d.ts +8 -0
  276. package/dist/improve-passthrough-flags.d.ts.map +1 -0
  277. package/dist/improve-passthrough-flags.js +11 -0
  278. package/dist/improve-passthrough-flags.js.map +1 -0
  279. package/dist/improve-plan-annotator.d.ts +8 -2
  280. package/dist/improve-plan-annotator.d.ts.map +1 -1
  281. package/dist/improve-plan-annotator.js +35 -38
  282. package/dist/improve-plan-annotator.js.map +1 -1
  283. package/dist/improve-pricing-plan.d.ts +3 -0
  284. package/dist/improve-pricing-plan.d.ts.map +1 -1
  285. package/dist/improve-pricing-plan.js +33 -5
  286. package/dist/improve-pricing-plan.js.map +1 -1
  287. package/dist/improve-recheck.d.ts +9 -0
  288. package/dist/improve-recheck.d.ts.map +1 -0
  289. package/dist/improve-recheck.js +200 -0
  290. package/dist/improve-recheck.js.map +1 -0
  291. package/dist/improve-reset.d.ts.map +1 -1
  292. package/dist/improve-reset.js +11 -0
  293. package/dist/improve-reset.js.map +1 -1
  294. package/dist/improve-run-summary.d.ts +6 -0
  295. package/dist/improve-run-summary.d.ts.map +1 -1
  296. package/dist/improve-run-summary.js +29 -5
  297. package/dist/improve-run-summary.js.map +1 -1
  298. package/dist/improve-site-plan.d.ts +57 -0
  299. package/dist/improve-site-plan.d.ts.map +1 -0
  300. package/dist/improve-site-plan.js +79 -0
  301. package/dist/improve-site-plan.js.map +1 -0
  302. package/dist/improve-site-shell.d.ts +11 -0
  303. package/dist/improve-site-shell.d.ts.map +1 -0
  304. package/dist/improve-site-shell.js +24 -0
  305. package/dist/improve-site-shell.js.map +1 -0
  306. package/dist/improve-site-stage.d.ts +10 -0
  307. package/dist/improve-site-stage.d.ts.map +1 -0
  308. package/dist/improve-site-stage.js +84 -0
  309. package/dist/improve-site-stage.js.map +1 -0
  310. package/dist/improve-site-tokens.d.ts +9 -0
  311. package/dist/improve-site-tokens.d.ts.map +1 -0
  312. package/dist/improve-site-tokens.js +17 -0
  313. package/dist/improve-site-tokens.js.map +1 -0
  314. package/dist/improve-source-hints.d.ts +3 -12
  315. package/dist/improve-source-hints.d.ts.map +1 -1
  316. package/dist/improve-source-hints.js +4 -5
  317. package/dist/improve-source-hints.js.map +1 -1
  318. package/dist/improve-spend-ledger.d.ts +69 -0
  319. package/dist/improve-spend-ledger.d.ts.map +1 -0
  320. package/dist/improve-spend-ledger.js +118 -0
  321. package/dist/improve-spend-ledger.js.map +1 -0
  322. package/dist/improve-stage-runners.d.ts +5 -2
  323. package/dist/improve-stage-runners.d.ts.map +1 -1
  324. package/dist/improve-stage-runners.js +5 -2
  325. package/dist/improve-stage-runners.js.map +1 -1
  326. package/dist/improve-stage-shared.d.ts +10 -1
  327. package/dist/improve-stage-shared.d.ts.map +1 -1
  328. package/dist/improve-stage-shared.js.map +1 -1
  329. package/dist/improve-stop-handler.d.ts +15 -0
  330. package/dist/improve-stop-handler.d.ts.map +1 -1
  331. package/dist/improve-stop-handler.js +74 -3
  332. package/dist/improve-stop-handler.js.map +1 -1
  333. package/dist/improve-terminal-event.d.ts.map +1 -1
  334. package/dist/improve-terminal-event.js +7 -4
  335. package/dist/improve-terminal-event.js.map +1 -1
  336. package/dist/improve-workspace.d.ts +198 -2
  337. package/dist/improve-workspace.d.ts.map +1 -1
  338. package/dist/improve-workspace.js +249 -92
  339. package/dist/improve-workspace.js.map +1 -1
  340. package/dist/legacy-skill-catalog.d.ts.map +1 -1
  341. package/dist/legacy-skill-catalog.js +79 -0
  342. package/dist/legacy-skill-catalog.js.map +1 -1
  343. package/dist/mcp-convert.js +1 -1
  344. package/dist/mcp-convert.js.map +1 -1
  345. package/dist/mcp-tool-definitions.js +1 -1
  346. package/dist/mcp-tool-definitions.js.map +1 -1
  347. package/dist/mcp-tool-handler.d.ts.map +1 -1
  348. package/dist/mcp-tool-handler.js +0 -3
  349. package/dist/mcp-tool-handler.js.map +1 -1
  350. package/dist/redesign-branch-adoption.d.ts +29 -0
  351. package/dist/redesign-branch-adoption.d.ts.map +1 -0
  352. package/dist/redesign-branch-adoption.js +183 -0
  353. package/dist/redesign-branch-adoption.js.map +1 -0
  354. package/dist/redesign-branch-identity.d.ts +23 -0
  355. package/dist/redesign-branch-identity.d.ts.map +1 -0
  356. package/dist/redesign-branch-identity.js +27 -0
  357. package/dist/redesign-branch-identity.js.map +1 -0
  358. package/dist/redesign-branch-record-verification.d.ts +51 -0
  359. package/dist/redesign-branch-record-verification.d.ts.map +1 -0
  360. package/dist/redesign-branch-record-verification.js +127 -0
  361. package/dist/redesign-branch-record-verification.js.map +1 -0
  362. package/dist/redesign-branch-stage.d.ts +17 -0
  363. package/dist/redesign-branch-stage.d.ts.map +1 -0
  364. package/dist/redesign-branch-stage.js +218 -0
  365. package/dist/redesign-branch-stage.js.map +1 -0
  366. package/dist/redesign-capture.d.ts +145 -15
  367. package/dist/redesign-capture.d.ts.map +1 -1
  368. package/dist/redesign-capture.js +182 -71
  369. package/dist/redesign-capture.js.map +1 -1
  370. package/dist/redesign-page-candidates.d.ts +40 -0
  371. package/dist/redesign-page-candidates.d.ts.map +1 -0
  372. package/dist/redesign-page-candidates.js +131 -0
  373. package/dist/redesign-page-candidates.js.map +1 -0
  374. package/dist/redesign-page-ownership.d.ts +36 -0
  375. package/dist/redesign-page-ownership.d.ts.map +1 -0
  376. package/dist/redesign-page-ownership.js +174 -0
  377. package/dist/redesign-page-ownership.js.map +1 -0
  378. package/dist/redesign-plan-identity.d.ts +3 -1
  379. package/dist/redesign-plan-identity.d.ts.map +1 -1
  380. package/dist/redesign-plan-identity.js +4 -1
  381. package/dist/redesign-plan-identity.js.map +1 -1
  382. package/dist/redesign-plan.d.ts.map +1 -1
  383. package/dist/redesign-plan.js +12 -6
  384. package/dist/redesign-plan.js.map +1 -1
  385. package/dist/redesign-record-validation.d.ts +4 -0
  386. package/dist/redesign-record-validation.d.ts.map +1 -0
  387. package/dist/redesign-record-validation.js +210 -0
  388. package/dist/redesign-record-validation.js.map +1 -0
  389. package/dist/redesign-workspace.d.ts +43 -5
  390. package/dist/redesign-workspace.d.ts.map +1 -1
  391. package/dist/redesign-workspace.js +66 -7
  392. package/dist/redesign-workspace.js.map +1 -1
  393. package/dist/responsive-alternative-materializer.d.ts +8 -3
  394. package/dist/responsive-alternative-materializer.d.ts.map +1 -1
  395. package/dist/responsive-alternative-materializer.js +68 -51
  396. package/dist/responsive-alternative-materializer.js.map +1 -1
  397. package/dist/result-integrity.d.ts +38 -0
  398. package/dist/result-integrity.d.ts.map +1 -0
  399. package/dist/result-integrity.js +46 -0
  400. package/dist/result-integrity.js.map +1 -0
  401. package/dist/review-edit-source.d.ts.map +1 -1
  402. package/dist/review-edit-source.js +6 -2
  403. package/dist/review-edit-source.js.map +1 -1
  404. package/dist/review-edit.js +2 -2
  405. package/dist/review-edit.js.map +1 -1
  406. package/dist/review-prototype-gap.js +1 -1
  407. package/dist/review-prototype-gap.js.map +1 -1
  408. package/dist/run-journal.d.ts +3 -1
  409. package/dist/run-journal.d.ts.map +1 -1
  410. package/dist/run-journal.js +7 -1
  411. package/dist/run-journal.js.map +1 -1
  412. package/dist/spend-run-filter.d.ts +21 -0
  413. package/dist/spend-run-filter.d.ts.map +1 -0
  414. package/dist/spend-run-filter.js +67 -0
  415. package/dist/spend-run-filter.js.map +1 -0
  416. package/dist/spend-scoped-report-lines.d.ts +4 -0
  417. package/dist/spend-scoped-report-lines.d.ts.map +1 -0
  418. package/dist/spend-scoped-report-lines.js +46 -0
  419. package/dist/spend-scoped-report-lines.js.map +1 -0
  420. package/dist/spend-scoped-report.d.ts +28 -0
  421. package/dist/spend-scoped-report.d.ts.map +1 -0
  422. package/dist/spend-scoped-report.js +45 -0
  423. package/dist/spend-scoped-report.js.map +1 -0
  424. package/open-design.json +2 -2
  425. package/package.json +5 -5
  426. package/skills/12ui-design/SKILL.md +8 -4
  427. package/skills/12ui-design/improve.md +50 -3
  428. package/dist/improve-dom-anchor.d.ts.map +0 -1
  429. package/dist/improve-dom-anchor.js.map +0 -1
  430. package/dist/improve-dom-extract.d.ts.map +0 -1
  431. package/dist/improve-dom-extract.js.map +0 -1
  432. package/dist/improve-dom-neighbour.d.ts.map +0 -1
  433. package/dist/improve-dom-neighbour.js.map +0 -1
  434. package/dist/improve-dom-scale.d.ts.map +0 -1
  435. package/dist/improve-dom-scale.js.map +0 -1
  436. package/dist/improve-icon-svg.d.ts +0 -47
  437. package/dist/improve-icon-svg.d.ts.map +0 -1
  438. package/dist/improve-icon-svg.js.map +0 -1
  439. package/dist/improve-layerdoc-diff.d.ts.map +0 -1
  440. package/dist/improve-layerdoc-diff.js.map +0 -1
  441. package/dist/improve-layerdoc-types.d.ts.map +0 -1
  442. package/dist/improve-layerdoc-types.js +0 -2
  443. package/dist/improve-layerdoc-types.js.map +0 -1
  444. package/dist/improve-plan-annotated-render.d.ts.map +0 -1
  445. package/dist/improve-plan-render.d.ts.map +0 -1
  446. package/dist/improve-plan-render.js.map +0 -1
  447. package/dist/improve-raster-layers-section.d.ts.map +0 -1
  448. package/dist/improve-raster-layers-section.js.map +0 -1
  449. package/dist/improve-token-patch.d.ts.map +0 -1
  450. package/dist/improve-token-patch.js.map +0 -1
  451. /package/dist/{improve-dom-anchor.d.ts → improve-core/improve-dom-anchor.d.ts} +0 -0
  452. /package/dist/{improve-dom-extract.d.ts → improve-core/improve-dom-extract.d.ts} +0 -0
  453. /package/dist/{improve-dom-neighbour.d.ts → improve-core/improve-dom-neighbour.d.ts} +0 -0
  454. /package/dist/{improve-dom-scale.d.ts → improve-core/improve-dom-scale.d.ts} +0 -0
  455. /package/dist/{improve-layerdoc-diff.d.ts → improve-core/improve-layerdoc-diff.d.ts} +0 -0
  456. /package/dist/{improve-token-patch.d.ts → improve-core/improve-token-patch.d.ts} +0 -0
@@ -0,0 +1,174 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { readFile, realpath } from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import { draftForPage, pickForPage, redesignPrimaryPage } from './redesign-page-candidates.js';
5
+ import { draftPaths } from './draft-workspace.js';
6
+ /**
7
+ * Durable proof that a branch page owns its selected draft. Parent records
8
+ * name file locations for navigation, but those mutable paths are never the
9
+ * identity: the route, capture digest, hosted run ID, completion run ID, and
10
+ * materialized candidate digest must all agree before branch can claim work.
11
+ */
12
+ export class InvalidRedesignPageOwnershipError extends Error {
13
+ constructor(pageId, detail) {
14
+ super(`Redesign page ${pageId} has invalid draft ownership: ${detail}`);
15
+ this.name = 'InvalidRedesignPageOwnershipError';
16
+ }
17
+ }
18
+ const samePath = (left, right) => path.resolve(left) === path.resolve(right);
19
+ const insideDirectory = (file, directory) => {
20
+ const relative = path.relative(path.resolve(directory), path.resolve(file));
21
+ return relative !== '' && !relative.startsWith(`..${path.sep}`) && relative !== '..' && !path.isAbsolute(relative);
22
+ };
23
+ const isRecord = (value) => (!!value && typeof value === 'object' && !Array.isArray(value));
24
+ const readJson = async (file, pageId, label) => {
25
+ let raw;
26
+ try {
27
+ raw = await readFile(file, 'utf8');
28
+ }
29
+ catch (error) {
30
+ throw new InvalidRedesignPageOwnershipError(pageId, `${label} is unreadable at ${file} (${error.code ?? 'unknown error'})`);
31
+ }
32
+ try {
33
+ return JSON.parse(raw);
34
+ }
35
+ catch {
36
+ throw new InvalidRedesignPageOwnershipError(pageId, `${label} is not JSON at ${file}`);
37
+ }
38
+ };
39
+ const validDraftRecord = (value) => (isRecord(value)
40
+ && typeof value.runDir === 'string'
41
+ && isRecord(value.redesignSource)
42
+ && typeof value.redesignSource.path === 'string'
43
+ && typeof value.redesignSource.sha256 === 'string'
44
+ && isRecord(value.hosted)
45
+ && typeof value.hosted.runId === 'string'
46
+ && Array.isArray(value.hosted.candidates));
47
+ const validDraftCompletion = (value) => (isRecord(value)
48
+ && typeof value.runId === 'string'
49
+ && Array.isArray(value.candidates));
50
+ const materializedCandidateDigest = async (args) => {
51
+ let bytes;
52
+ try {
53
+ bytes = await readFile(args.file);
54
+ }
55
+ catch (error) {
56
+ throw new InvalidRedesignPageOwnershipError(args.pageId, `selected DraftCandidateRecord.outputPath is unreadable at ${args.file}`
57
+ + ` (${error.code ?? 'unknown error'})`);
58
+ }
59
+ return { sha256: createHash('sha256').update(bytes).digest('hex'), bytes: bytes.byteLength };
60
+ };
61
+ const assertOwnedCandidatePath = async (args) => {
62
+ if (!insideDirectory(args.candidatePath, args.candidatesDirectory)) {
63
+ throw new InvalidRedesignPageOwnershipError(args.pageId, 'selected DraftCandidateRecord.outputPath is outside its owning child draft candidates directory');
64
+ }
65
+ let resolvedCandidate;
66
+ let resolvedDirectory;
67
+ try {
68
+ [resolvedCandidate, resolvedDirectory] = await Promise.all([
69
+ realpath(args.candidatePath),
70
+ realpath(args.candidatesDirectory),
71
+ ]);
72
+ }
73
+ catch (error) {
74
+ throw new InvalidRedesignPageOwnershipError(args.pageId, `selected DraftCandidateRecord.outputPath cannot resolve inside its owning child draft directory`
75
+ + ` (${error.code ?? 'unknown error'})`);
76
+ }
77
+ if (!insideDirectory(resolvedCandidate, resolvedDirectory)) {
78
+ throw new InvalidRedesignPageOwnershipError(args.pageId, 'selected DraftCandidateRecord.outputPath resolves outside its owning child draft candidates directory');
79
+ }
80
+ };
81
+ /** Validate one page's draft, completion, and selected materialized candidate. */
82
+ export const verifyRedesignPageBranchInput = async (args) => {
83
+ const primary = redesignPrimaryPage(args.record.capture?.pages ?? []);
84
+ const pageId = args.page.id;
85
+ let draft;
86
+ let pick;
87
+ try {
88
+ draft = draftForPage(args.record, pageId);
89
+ pick = pickForPage(args.record, pageId);
90
+ }
91
+ catch (error) {
92
+ throw new InvalidRedesignPageOwnershipError(pageId, error instanceof Error ? error.message : String(error));
93
+ }
94
+ const paths = draftPaths(draft.runDir);
95
+ const draftRecord = await readJson(paths.draftRecord, pageId, 'draft record');
96
+ if (!validDraftRecord(draftRecord)) {
97
+ throw new InvalidRedesignPageOwnershipError(pageId, 'draft record has no complete hosted/source identity');
98
+ }
99
+ if (!samePath(draftRecord.runDir, draft.runDir)) {
100
+ throw new InvalidRedesignPageOwnershipError(pageId, 'draft record runDir differs from parent draft entry');
101
+ }
102
+ if (draftRecord.hosted.runId !== draft.runId) {
103
+ throw new InvalidRedesignPageOwnershipError(pageId, 'draft record hosted run ID differs from parent draft entry');
104
+ }
105
+ const source = draftRecord.redesignSource;
106
+ if (!source) {
107
+ throw new InvalidRedesignPageOwnershipError(pageId, 'draft record has no redesign source');
108
+ }
109
+ if (source.sha256 !== args.page.sha256) {
110
+ throw new InvalidRedesignPageOwnershipError(pageId, 'draft source digest differs from captured page');
111
+ }
112
+ if (!samePath(source.path, args.page.path)) {
113
+ throw new InvalidRedesignPageOwnershipError(pageId, 'draft source path differs from captured page');
114
+ }
115
+ if (args.page.id !== primary.id && draftRecord.pageRoute !== args.page.url) {
116
+ throw new InvalidRedesignPageOwnershipError(pageId, 'non-primary draft route differs from captured page URL');
117
+ }
118
+ if (args.page.id === primary.id && draftRecord.pageRoute !== undefined
119
+ && draftRecord.pageRoute !== args.page.url) {
120
+ throw new InvalidRedesignPageOwnershipError(pageId, 'primary draft route differs from captured page URL');
121
+ }
122
+ const candidate = draftRecord.hosted.candidates.find((entry) => (isRecord(entry)
123
+ && entry.id === pick.slot
124
+ && typeof entry.slot === 'string'
125
+ && typeof entry.outputPath === 'string'));
126
+ if (!candidate || typeof candidate.slot !== 'string' || typeof candidate.outputPath !== 'string') {
127
+ throw new InvalidRedesignPageOwnershipError(pageId, 'selected slot is absent from the draft run');
128
+ }
129
+ await assertOwnedCandidatePath({
130
+ pageId,
131
+ candidatePath: candidate.outputPath,
132
+ candidatesDirectory: paths.candidatesDir,
133
+ });
134
+ const completion = await readJson(paths.completion, pageId, 'draft completion');
135
+ if (!validDraftCompletion(completion)) {
136
+ throw new InvalidRedesignPageOwnershipError(pageId, 'draft completion has no run ID or candidates');
137
+ }
138
+ if (completion.runId !== draft.runId) {
139
+ throw new InvalidRedesignPageOwnershipError(pageId, 'draft completion run ID differs from parent draft entry');
140
+ }
141
+ const materialized = completion.candidates.find((entry) => (isRecord(entry)
142
+ && entry.slot === candidate.slot
143
+ && typeof entry.path === 'string'
144
+ && typeof entry.sha256 === 'string'
145
+ && typeof entry.bytes === 'number'
146
+ && Number.isInteger(entry.bytes)
147
+ && entry.bytes >= 0));
148
+ if (!materialized) {
149
+ throw new InvalidRedesignPageOwnershipError(pageId, 'selected draft candidate is not materialized');
150
+ }
151
+ if (!samePath(materialized.path, candidate.outputPath)
152
+ || !samePath(pick.imagePath, candidate.outputPath)
153
+ || materialized.sha256 !== pick.sha256) {
154
+ throw new InvalidRedesignPageOwnershipError(pageId, 'parent pick or completion differs from this draft run\'s selected DraftCandidateRecord.outputPath');
155
+ }
156
+ const onDisk = await materializedCandidateDigest({ file: candidate.outputPath, pageId });
157
+ if (onDisk.sha256 !== materialized.sha256 || onDisk.sha256 !== pick.sha256
158
+ || onDisk.bytes !== materialized.bytes) {
159
+ throw new InvalidRedesignPageOwnershipError(pageId, 'selected DraftCandidateRecord.outputPath digest or byte count differs from its completion/pick proof');
160
+ }
161
+ return {
162
+ page: args.page,
163
+ draft,
164
+ pick,
165
+ winner: {
166
+ path: candidate.outputPath,
167
+ sha256: onDisk.sha256,
168
+ bytes: onDisk.bytes,
169
+ },
170
+ };
171
+ };
172
+ /** Validate every pending branch input before any page is allowed to dispatch. */
173
+ export const verifyRedesignPageBranchInputs = async (args) => Promise.all(args.pages.map((page) => verifyRedesignPageBranchInput({ record: args.record, page })));
174
+ //# sourceMappingURL=redesign-page-ownership.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redesign-page-ownership.js","sourceRoot":"","sources":["../src/redesign-page-ownership.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,7 @@ import type { HostedRedesignPlanRequest } from './redesign-plan-client.js';
4
4
  * capture facts it may use, so an interrupted request can replay without
5
5
  * deriving a new direction plan or silently moving to changed page evidence.
6
6
  */
7
- export declare const redesignPlanIdempotencyKey: (request: HostedRedesignPlanRequest) => string;
7
+ export declare const redesignPlanIdempotencyKey: (request: HostedRedesignPlanRequest, options?: {
8
+ redrawGeneration?: number;
9
+ }) => string;
8
10
  //# sourceMappingURL=redesign-plan-identity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"redesign-plan-identity.d.ts","sourceRoot":"","sources":["../src/redesign-plan-identity.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAE3E;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,GAAI,SAAS,yBAAyB,KAAG,MAO/E,CAAC"}
1
+ {"version":3,"file":"redesign-plan-identity.d.ts","sourceRoot":"","sources":["../src/redesign-plan-identity.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAE3E;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,GACrC,SAAS,yBAAyB,EAClC,UAAS;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,KAC1C,MAUF,CAAC"}
@@ -4,11 +4,14 @@ import { createHash } from 'node:crypto';
4
4
  * capture facts it may use, so an interrupted request can replay without
5
5
  * deriving a new direction plan or silently moving to changed page evidence.
6
6
  */
7
- export const redesignPlanIdempotencyKey = (request) => {
7
+ export const redesignPlanIdempotencyKey = (request, options = {}) => {
8
8
  const digest = createHash('sha256').update(JSON.stringify({
9
9
  direction: request.direction,
10
10
  capture: request.capture ?? null,
11
11
  referenceImageAttached: request.referenceImageAttached,
12
+ ...(options.redrawGeneration && options.redrawGeneration > 0
13
+ ? { redrawGeneration: options.redrawGeneration }
14
+ : {}),
12
15
  })).digest('hex');
13
16
  return `redesign-plan:v1:${digest}`;
14
17
  };
@@ -1 +1 @@
1
- {"version":3,"file":"redesign-plan-identity.js","sourceRoot":"","sources":["../src/redesign-plan-identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,OAAkC,EAAU,EAAE;IACvF,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;QACxD,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;QAChC,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;KACvD,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClB,OAAO,oBAAoB,MAAM,EAAE,CAAC;AACtC,CAAC,CAAC"}
1
+ {"version":3,"file":"redesign-plan-identity.js","sourceRoot":"","sources":["../src/redesign-plan-identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,OAAkC,EAClC,UAAyC,EAAE,EACnC,EAAE;IACV,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;QACxD,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;QAChC,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;QACtD,GAAG,CAAC,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,GAAG,CAAC;YAC1D,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE;YAChD,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClB,OAAO,oBAAoB,MAAM,EAAE,CAAC;AACtC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"redesign-plan.d.ts","sourceRoot":"","sources":["../src/redesign-plan.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAgC7D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,eAAe,CAAC;IACjC,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,MAAM;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,eAAe,CAAC;CAClC,KAAG,YAyEH,CAAC"}
1
+ {"version":3,"file":"redesign-plan.d.ts","sourceRoot":"","sources":["../src/redesign-plan.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAgC7D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,eAAe,CAAC;IACjC,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,MAAM;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,eAAe,CAAC;CAClC,KAAG,YA+EH,CAAC"}
@@ -50,16 +50,18 @@ export const buildRedesignPlan = (args) => {
50
50
  {
51
51
  stage: 'draft',
52
52
  paid: true,
53
- wouldBuy: `${args.candidateCount} hosted draft candidate(s), generated from 1 captured reference image`,
54
- typicalSeconds: OPERATION_DURATION_HINTS.hostedDraftCandidate,
55
- plannedCostUsd: usd(CORPUS_SEARCH_CEILING_USD
53
+ wouldBuy: `${args.pageCount} hosted draft draw(s) of ${args.candidateCount} candidate(s) each,`
54
+ + ' one captured reference image per page',
55
+ typicalSeconds: OPERATION_DURATION_HINTS.hostedDraftCandidate
56
+ * Math.ceil(args.pageCount / BRANCH_PAGE_CONCURRENCY_DEFAULT),
57
+ plannedCostUsd: usd(args.pageCount * (CORPUS_SEARCH_CEILING_USD
56
58
  + DRAFT_DIRECTIONS_CEILING_USD
57
- + args.candidateCount * DRAFT_CANDIDATE_PRICE_USD),
59
+ + args.candidateCount * DRAFT_CANDIDATE_PRICE_USD)),
58
60
  },
59
61
  {
60
62
  stage: 'pick',
61
63
  paid: false,
62
- wouldBuy: 'nothing — selects one already-generated candidate by --slot',
64
+ wouldBuy: 'nothing — selects one already-generated candidate by --slot on every page\'s draw',
63
65
  typicalSeconds: 1,
64
66
  plannedCostUsd: 0,
65
67
  },
@@ -68,7 +70,11 @@ export const buildRedesignPlan = (args) => {
68
70
  paid: true,
69
71
  wouldBuy: `${args.pageCount} branch execute run(s) (scope page, --convert html --prototype),`
70
72
  + ` capped at ${args.maxScreens} generated continuation screen(s) per captured page`,
71
- typicalSeconds: branchEstimate.ceiling * args.pageCount,
73
+ // Per-page branch children use the same bounded outer concurrency as
74
+ // draft. Reporting serial wall time here made a three-page dry run look
75
+ // three times slower than the command can actually execute.
76
+ typicalSeconds: branchEstimate.ceiling
77
+ * Math.ceil(args.pageCount / BRANCH_PAGE_CONCURRENCY_DEFAULT),
72
78
  plannedCostUsd: usd(args.pageCount * (BRANCH_PLAN_CEILING_USD
73
79
  + args.maxScreens * BRANCH_IMAGE_CEILING_USD
74
80
  + (args.maxScreens + 1) * CONVERSION_PRICE_USD[args.conversionModel]
@@ -1 +1 @@
1
- {"version":3,"file":"redesign-plan.js","sourceRoot":"","sources":["../src/redesign-plan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"redesign-plan.js","sourceRoot":"","sources":["../src/redesign-plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { RedesignRecord } from './redesign-workspace.js';
2
+ /** Validate every field used to resume or attribute spend before projecting it. */
3
+ export declare const assertValidRedesignRecord: (value: unknown) => asserts value is RedesignRecord;
4
+ //# sourceMappingURL=redesign-record-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redesign-record-validation.d.ts","sourceRoot":"","sources":["../src/redesign-record-validation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAoL9D,mFAAmF;AACnF,eAAO,MAAM,yBAAyB,EAAE,CACtC,KAAK,EAAE,OAAO,KACX,OAAO,CAAC,KAAK,IAAI,cAqCrB,CAAC"}
@@ -0,0 +1,210 @@
1
+ import { isConversionModel } from './conversion-models.js';
2
+ const invalid = (field) => {
3
+ throw new Error(`Invalid redesign record field: ${field}`);
4
+ };
5
+ const objectAt = (value, field) => {
6
+ if (!value || typeof value !== 'object' || Array.isArray(value))
7
+ invalid(field);
8
+ return value;
9
+ };
10
+ const stringAt = (value, field) => {
11
+ if (typeof value !== 'string' || value.length === 0)
12
+ invalid(field);
13
+ return value;
14
+ };
15
+ const numberAt = (value, field, integer = false) => {
16
+ if (typeof value !== 'number' || !Number.isFinite(value) || (integer && !Number.isInteger(value))) {
17
+ invalid(field);
18
+ }
19
+ return value;
20
+ };
21
+ const booleanAt = (value, field) => {
22
+ if (typeof value !== 'boolean')
23
+ invalid(field);
24
+ return value;
25
+ };
26
+ const arrayAt = (value, field) => {
27
+ if (!Array.isArray(value))
28
+ invalid(field);
29
+ return value;
30
+ };
31
+ const stringArrayAt = (value, field) => (arrayAt(value, field).map((entry, index) => stringAt(entry, `${field}[${index}]`)));
32
+ const optionalString = (record, field) => {
33
+ if (record[field] !== undefined)
34
+ stringAt(record[field], field);
35
+ };
36
+ const uniquePageIds = (entries, field, capturedIds) => {
37
+ const seen = new Set();
38
+ for (const [index, entry] of entries.entries()) {
39
+ const pageId = stringAt(entry.pageId, `${field}[${index}].pageId`);
40
+ if (seen.has(pageId))
41
+ invalid(`${field}[${index}].pageId (duplicate ${pageId})`);
42
+ if (!capturedIds.has(pageId))
43
+ invalid(`${field}[${index}].pageId (unknown ${pageId})`);
44
+ seen.add(pageId);
45
+ }
46
+ };
47
+ const validateCapture = (value) => {
48
+ const capture = objectAt(value, 'capture');
49
+ const pages = arrayAt(capture.pages, 'capture.pages').map((entry, index) => {
50
+ const page = objectAt(entry, `capture.pages[${index}]`);
51
+ stringAt(page.id, `capture.pages[${index}].id`);
52
+ stringAt(page.url, `capture.pages[${index}].url`);
53
+ stringAt(page.path, `capture.pages[${index}].path`);
54
+ stringAt(page.sha256, `capture.pages[${index}].sha256`);
55
+ numberAt(page.bytes, `capture.pages[${index}].bytes`, true);
56
+ numberAt(page.width, `capture.pages[${index}].width`, true);
57
+ numberAt(page.height, `capture.pages[${index}].height`, true);
58
+ return page;
59
+ });
60
+ const ids = pages.map((page) => page.id);
61
+ if (new Set(ids).size !== ids.length)
62
+ invalid('capture.pages[].id (duplicate)');
63
+ if (capture.discovery !== undefined) {
64
+ const discovery = objectAt(capture.discovery, 'capture.discovery');
65
+ numberAt(discovery.count, 'capture.discovery.count', true);
66
+ numberAt(discovery.cap, 'capture.discovery.cap', true);
67
+ stringAt(discovery.rootUrl, 'capture.discovery.rootUrl');
68
+ if (discovery.context !== 'public' && discovery.context !== 'authenticated') {
69
+ invalid('capture.discovery.context');
70
+ }
71
+ }
72
+ return pages;
73
+ };
74
+ const validatePlan = (value) => {
75
+ const plan = objectAt(value, 'plan');
76
+ stringAt(plan.concept, 'plan.concept');
77
+ stringAt(plan.corpusQuery, 'plan.corpusQuery');
78
+ stringAt(plan.effectIdentity, 'plan.effectIdentity');
79
+ booleanAt(plan.replayed, 'plan.replayed');
80
+ const retain = objectAt(plan.retain, 'plan.retain');
81
+ stringArrayAt(retain.include, 'plan.retain.include');
82
+ stringArrayAt(retain.exclude, 'plan.retain.exclude');
83
+ optionalString(retain, 'notes');
84
+ if (retain.source !== undefined && retain.source !== 'inspiration' && retain.source !== 'subject') {
85
+ invalid('plan.retain.source');
86
+ }
87
+ if (plan.degradation !== undefined) {
88
+ const degradation = objectAt(plan.degradation, 'plan.degradation');
89
+ stringArrayAt(degradation.reasons, 'plan.degradation.reasons');
90
+ }
91
+ };
92
+ const requireCapturedStage = (record, capturedPages, field) => {
93
+ if (record.capture === undefined || capturedPages.length === 0)
94
+ invalid(`${field} without captured pages`);
95
+ const capturedIds = new Set(capturedPages.map((page) => page.id));
96
+ return { capturedIds, primaryId: capturedPages[0].id };
97
+ };
98
+ const validateDraft = (record, capturedPages) => {
99
+ const draft = objectAt(record.draft, 'draft');
100
+ const runDir = stringAt(draft.runDir, 'draft.runDir');
101
+ const runId = stringAt(draft.runId, 'draft.runId');
102
+ const { capturedIds, primaryId } = requireCapturedStage(record, capturedPages, 'draft');
103
+ if (record.plan === undefined)
104
+ invalid('draft without plan');
105
+ if (draft.pages === undefined)
106
+ return;
107
+ const pages = arrayAt(draft.pages, 'draft.pages').map((entry, index) => {
108
+ const page = objectAt(entry, `draft.pages[${index}]`);
109
+ stringAt(page.runDir, `draft.pages[${index}].runDir`);
110
+ stringAt(page.runId, `draft.pages[${index}].runId`);
111
+ return page;
112
+ });
113
+ if (pages.length === 0)
114
+ invalid('draft.pages');
115
+ uniquePageIds(pages, 'draft.pages', capturedIds);
116
+ const primary = pages.find((page) => page.pageId === primaryId);
117
+ if (!primary || primary.runDir !== runDir || primary.runId !== runId) {
118
+ invalid('draft primary page does not match draft.runDir/runId');
119
+ }
120
+ };
121
+ const validatePick = (record, capturedPages) => {
122
+ const pick = objectAt(record.pick, 'pick');
123
+ const slot = stringAt(pick.slot, 'pick.slot');
124
+ const imagePath = stringAt(pick.imagePath, 'pick.imagePath');
125
+ const sha256 = stringAt(pick.sha256, 'pick.sha256');
126
+ const { capturedIds, primaryId } = requireCapturedStage(record, capturedPages, 'pick');
127
+ if (record.draft === undefined)
128
+ invalid('pick without draft');
129
+ if (pick.pages === undefined)
130
+ return;
131
+ const pages = arrayAt(pick.pages, 'pick.pages').map((entry, index) => {
132
+ const page = objectAt(entry, `pick.pages[${index}]`);
133
+ stringAt(page.slot, `pick.pages[${index}].slot`);
134
+ stringAt(page.imagePath, `pick.pages[${index}].imagePath`);
135
+ stringAt(page.sha256, `pick.pages[${index}].sha256`);
136
+ return page;
137
+ });
138
+ if (pages.length === 0)
139
+ invalid('pick.pages');
140
+ uniquePageIds(pages, 'pick.pages', capturedIds);
141
+ if (pages.some((page) => page.slot !== slot))
142
+ invalid('pick.pages[].slot');
143
+ const primary = pages.find((page) => page.pageId === primaryId);
144
+ if (!primary || primary.imagePath !== imagePath || primary.sha256 !== sha256) {
145
+ invalid('pick primary page does not match pick.imagePath/sha256');
146
+ }
147
+ };
148
+ const validatePageStage = (record, capturedPages, field) => {
149
+ const stage = objectAt(record[field], field);
150
+ const pages = arrayAt(stage.pages, `${field}.pages`).map((entry, index) => {
151
+ const page = objectAt(entry, `${field}.pages[${index}]`);
152
+ stringAt(page.branchDir, `${field}.pages[${index}].branchDir`);
153
+ if (field === 'branch') {
154
+ optionalString(page, 'runId');
155
+ stringAt(page.status, `${field}.pages[${index}].status`);
156
+ stringAt(page.completionPath, `${field}.pages[${index}].completionPath`);
157
+ }
158
+ else {
159
+ booleanAt(page.enabled, `${field}.pages[${index}].enabled`);
160
+ }
161
+ return page;
162
+ });
163
+ const { capturedIds } = requireCapturedStage(record, capturedPages, field);
164
+ uniquePageIds(pages, `${field}.pages`, capturedIds);
165
+ };
166
+ /** Validate every field used to resume or attribute spend before projecting it. */
167
+ export const assertValidRedesignRecord = (value) => {
168
+ const record = objectAt(value, 'root');
169
+ if (record.version !== 1)
170
+ invalid('version');
171
+ stringAt(record.createdAt, 'createdAt');
172
+ if (record.redrawGeneration !== undefined) {
173
+ const redrawGeneration = numberAt(record.redrawGeneration, 'redrawGeneration', true);
174
+ if (redrawGeneration < 1)
175
+ invalid('redrawGeneration');
176
+ }
177
+ stringAt(record.runDir, 'runDir');
178
+ stringAt(record.url, 'url');
179
+ if (typeof record.direction !== 'string')
180
+ invalid('direction');
181
+ const requestedPages = numberAt(record.requestedPages, 'requestedPages', true);
182
+ if (requestedPages < 1)
183
+ invalid('requestedPages');
184
+ if (record.requestedCandidateCount !== undefined) {
185
+ numberAt(record.requestedCandidateCount, 'requestedCandidateCount', true);
186
+ }
187
+ if (record.requestedMaxScreens !== undefined) {
188
+ numberAt(record.requestedMaxScreens, 'requestedMaxScreens', true);
189
+ }
190
+ if (record.requestedConversionModel !== undefined
191
+ && !isConversionModel(record.requestedConversionModel)) {
192
+ invalid('requestedConversionModel');
193
+ }
194
+ const capturedPages = record.capture === undefined ? [] : validateCapture(record.capture);
195
+ if (record.plan !== undefined) {
196
+ requireCapturedStage(record, capturedPages, 'plan');
197
+ validatePlan(record.plan);
198
+ }
199
+ if (record.draft !== undefined)
200
+ validateDraft(record, capturedPages);
201
+ if (record.pick !== undefined)
202
+ validatePick(record, capturedPages);
203
+ if (record.branch !== undefined) {
204
+ validatePageStage(record, capturedPages, 'branch');
205
+ }
206
+ if (record.polish !== undefined) {
207
+ validatePageStage(record, capturedPages, 'polish');
208
+ }
209
+ };
210
+ //# sourceMappingURL=redesign-record-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redesign-record-validation.js","sourceRoot":"","sources":["../src/redesign-record-validation.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type AtomicFileReplaceDependencies } from './atomic-file-replace.js';
1
2
  import type { CreateRetainPolicy } from './branch-client.js';
2
3
  import type { ConversionModel } from './conversion-models.js';
3
4
  /**
@@ -40,10 +41,36 @@ export type RedesignCapturedPageRecord = {
40
41
  width: number;
41
42
  height: number;
42
43
  };
44
+ export type RedesignCaptureDiscoveryRecord = {
45
+ /** Number actually found; `--pages` is an upper bound, never a fill target. */
46
+ count: number;
47
+ cap: number;
48
+ rootUrl: string;
49
+ context: 'public' | 'authenticated';
50
+ };
51
+ export type RedesignDraftPageRecord = {
52
+ pageId: string;
53
+ runDir: string;
54
+ runId: string;
55
+ };
56
+ export type RedesignDraftRecord = {
57
+ runDir: string;
58
+ runId: string;
59
+ /** One hosted draw per captured page, primary first. Absent on pre-per-page records. */
60
+ pages?: RedesignDraftPageRecord[];
61
+ };
62
+ export type RedesignPickPageRecord = {
63
+ pageId: string;
64
+ slot: string;
65
+ imagePath: string;
66
+ sha256: string;
67
+ };
43
68
  export type RedesignPickRecord = {
44
69
  slot: string;
45
70
  imagePath: string;
46
71
  sha256: string;
72
+ /** One materialized candidate per captured page. Absent on pre-per-page records. */
73
+ pages?: RedesignPickPageRecord[];
47
74
  };
48
75
  /**
49
76
  * A metered hosted direction plan. This is intentionally distinct from the
@@ -63,6 +90,8 @@ export type RedesignDirectionPlanRecord = {
63
90
  export type RedesignBranchPageRecord = {
64
91
  pageId: string;
65
92
  branchDir: string;
93
+ /** The hosted branch run, needed to join this local run to the settled ledger. */
94
+ runId?: string;
66
95
  status: string;
67
96
  completionPath: string;
68
97
  };
@@ -79,21 +108,26 @@ export type RedesignPolishPageRecord = {
79
108
  export type RedesignRecord = {
80
109
  version: 1;
81
110
  createdAt: string;
111
+ /**
112
+ * Monotonic namespace for an explicit redraw. Absent is generation zero so
113
+ * records written before redraw namespaces keep their original identities.
114
+ */
115
+ redrawGeneration?: number;
82
116
  runDir: string;
83
117
  url: string;
84
118
  direction: string;
85
119
  requestedPages: number;
120
+ /** Hosted draft candidate count; retained so a later stage does not drift to a new default. */
121
+ requestedCandidateCount?: number;
86
122
  /** Maximum generated continuation screens for each captured page. */
87
123
  requestedMaxScreens?: number;
88
124
  requestedConversionModel?: ConversionModel;
89
125
  capture?: {
90
126
  pages: RedesignCapturedPageRecord[];
127
+ discovery?: RedesignCaptureDiscoveryRecord;
91
128
  };
92
129
  plan?: RedesignDirectionPlanRecord;
93
- draft?: {
94
- runDir: string;
95
- runId: string;
96
- };
130
+ draft?: RedesignDraftRecord;
97
131
  pick?: RedesignPickRecord;
98
132
  branch?: {
99
133
  pages: RedesignBranchPageRecord[];
@@ -102,14 +136,18 @@ export type RedesignRecord = {
102
136
  pages: RedesignPolishPageRecord[];
103
137
  };
104
138
  };
139
+ export declare class InvalidRedesignRecordError extends Error {
140
+ constructor(file: string, cause: unknown);
141
+ }
105
142
  export declare const readRedesignRecord: (file: string) => Promise<RedesignRecord | undefined>;
106
- export declare const writeRedesignRecord: (file: string, record: RedesignRecord) => Promise<void>;
143
+ export declare const writeRedesignRecord: (file: string, record: RedesignRecord, dependencies?: AtomicFileReplaceDependencies) => Promise<void>;
107
144
  /** Read the record, or start a fresh one when this is the first stage to run. */
108
145
  export declare const loadOrStartRedesignRecord: (args: {
109
146
  paths: RedesignPaths;
110
147
  url: string;
111
148
  direction: string;
112
149
  requestedPages: number;
150
+ requestedCandidateCount?: number;
113
151
  requestedMaxScreens?: number;
114
152
  requestedConversionModel?: ConversionModel;
115
153
  }) => Promise<RedesignRecord>;