@12ui/design 0.2.56 → 0.2.58

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 (429) 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/branch-client.d.ts +86 -2
  6. package/dist/branch-client.d.ts.map +1 -1
  7. package/dist/branch-client.js +31 -0
  8. package/dist/branch-client.js.map +1 -1
  9. package/dist/cli-arguments.d.ts.map +1 -1
  10. package/dist/cli-arguments.js +3 -1
  11. package/dist/cli-arguments.js.map +1 -1
  12. package/dist/cli-capabilities.d.ts +1 -1
  13. package/dist/cli-conversion-derivation.js +2 -2
  14. package/dist/cli-conversion-derivation.js.map +1 -1
  15. package/dist/cli-convert-command.d.ts +2 -0
  16. package/dist/cli-convert-command.d.ts.map +1 -1
  17. package/dist/cli-convert-command.js +176 -38
  18. package/dist/cli-convert-command.js.map +1 -1
  19. package/dist/cli-corpus-command.js +2 -2
  20. package/dist/cli-corpus-command.js.map +1 -1
  21. package/dist/cli-corpus-evidence.d.ts.map +1 -1
  22. package/dist/cli-corpus-evidence.js +2 -1
  23. package/dist/cli-corpus-evidence.js.map +1 -1
  24. package/dist/cli-corpus-reference-downloads.d.ts +1 -0
  25. package/dist/cli-corpus-reference-downloads.d.ts.map +1 -1
  26. package/dist/cli-corpus-reference-downloads.js +13 -3
  27. package/dist/cli-corpus-reference-downloads.js.map +1 -1
  28. package/dist/cli-corpus-types.d.ts +2 -0
  29. package/dist/cli-corpus-types.d.ts.map +1 -1
  30. package/dist/cli-draft-command.d.ts +9 -0
  31. package/dist/cli-draft-command.d.ts.map +1 -1
  32. package/dist/cli-draft-command.js +26 -1
  33. package/dist/cli-draft-command.js.map +1 -1
  34. package/dist/cli-help/design.d.ts +7 -4
  35. package/dist/cli-help/design.d.ts.map +1 -1
  36. package/dist/cli-help/design.js +23 -6
  37. package/dist/cli-help/design.js.map +1 -1
  38. package/dist/cli-help/index.d.ts +9 -6
  39. package/dist/cli-help/index.d.ts.map +1 -1
  40. package/dist/cli-help/meta.d.ts +2 -2
  41. package/dist/cli-help/meta.d.ts.map +1 -1
  42. package/dist/cli-help/meta.js +4 -1
  43. package/dist/cli-help/meta.js.map +1 -1
  44. package/dist/cli-improve-command.d.ts.map +1 -1
  45. package/dist/cli-improve-command.js +273 -28
  46. package/dist/cli-improve-command.js.map +1 -1
  47. package/dist/cli-redesign-command.d.ts.map +1 -1
  48. package/dist/cli-redesign-command.js +97 -24
  49. package/dist/cli-redesign-command.js.map +1 -1
  50. package/dist/cli-run.d.ts.map +1 -1
  51. package/dist/cli-run.js +13 -3
  52. package/dist/cli-run.js.map +1 -1
  53. package/dist/cli-spend-command.d.ts +12 -1
  54. package/dist/cli-spend-command.d.ts.map +1 -1
  55. package/dist/cli-spend-command.js +94 -2
  56. package/dist/cli-spend-command.js.map +1 -1
  57. package/dist/cli-usage.js +5 -5
  58. package/dist/cli-usage.js.map +1 -1
  59. package/dist/concept-input.d.ts +6 -56
  60. package/dist/concept-input.d.ts.map +1 -1
  61. package/dist/concept-input.js +6 -65
  62. package/dist/concept-input.js.map +1 -1
  63. package/dist/conversion-client.d.ts +92 -3
  64. package/dist/conversion-client.d.ts.map +1 -1
  65. package/dist/conversion-client.js +317 -23
  66. package/dist/conversion-client.js.map +1 -1
  67. package/dist/corpus-client.d.ts +7 -1
  68. package/dist/corpus-client.d.ts.map +1 -1
  69. package/dist/corpus-client.js +3 -2
  70. package/dist/corpus-client.js.map +1 -1
  71. package/dist/corpus-reference-download-retry.d.ts +68 -0
  72. package/dist/corpus-reference-download-retry.d.ts.map +1 -0
  73. package/dist/corpus-reference-download-retry.js +123 -0
  74. package/dist/corpus-reference-download-retry.js.map +1 -0
  75. package/dist/corpus-request-error.d.ts +17 -0
  76. package/dist/corpus-request-error.d.ts.map +1 -0
  77. package/dist/corpus-request-error.js +21 -0
  78. package/dist/corpus-request-error.js.map +1 -0
  79. package/dist/draft-run.d.ts +15 -0
  80. package/dist/draft-run.d.ts.map +1 -1
  81. package/dist/draft-run.js +32 -5
  82. package/dist/draft-run.js.map +1 -1
  83. package/dist/draft-workspace.d.ts +2 -1
  84. package/dist/draft-workspace.d.ts.map +1 -1
  85. package/dist/draft-workspace.js.map +1 -1
  86. package/dist/hosted-draft-identity.d.ts +9 -0
  87. package/dist/hosted-draft-identity.d.ts.map +1 -1
  88. package/dist/hosted-draft-identity.js +2 -0
  89. package/dist/hosted-draft-identity.js.map +1 -1
  90. package/dist/improve-added-specs.d.ts +12 -31
  91. package/dist/improve-added-specs.d.ts.map +1 -1
  92. package/dist/improve-added-specs.js +64 -152
  93. package/dist/improve-added-specs.js.map +1 -1
  94. package/dist/improve-artifact-writer.d.ts +13 -0
  95. package/dist/improve-artifact-writer.d.ts.map +1 -0
  96. package/dist/improve-artifact-writer.js +27 -0
  97. package/dist/improve-artifact-writer.js.map +1 -0
  98. package/dist/improve-bootstrap-history.d.ts +21 -0
  99. package/dist/improve-bootstrap-history.d.ts.map +1 -0
  100. package/dist/improve-bootstrap-history.js +43 -0
  101. package/dist/improve-bootstrap-history.js.map +1 -0
  102. package/dist/improve-bootstrap-secret.d.ts +35 -0
  103. package/dist/improve-bootstrap-secret.d.ts.map +1 -0
  104. package/dist/improve-bootstrap-secret.js +61 -0
  105. package/dist/improve-bootstrap-secret.js.map +1 -0
  106. package/dist/improve-branch-stage.d.ts +10 -0
  107. package/dist/improve-branch-stage.d.ts.map +1 -0
  108. package/dist/improve-branch-stage.js +325 -0
  109. package/dist/improve-branch-stage.js.map +1 -0
  110. package/dist/improve-capture-redirect.d.ts +65 -0
  111. package/dist/improve-capture-redirect.d.ts.map +1 -0
  112. package/dist/improve-capture-redirect.js +85 -0
  113. package/dist/improve-capture-redirect.js.map +1 -0
  114. package/dist/improve-capture-words.d.ts +43 -0
  115. package/dist/improve-capture-words.d.ts.map +1 -0
  116. package/dist/improve-capture-words.js +25 -0
  117. package/dist/improve-capture-words.js.map +1 -0
  118. package/dist/improve-concept.d.ts +6 -7
  119. package/dist/improve-concept.d.ts.map +1 -1
  120. package/dist/improve-concept.js +12 -38
  121. package/dist/improve-concept.js.map +1 -1
  122. package/dist/improve-conversion-attempts.d.ts +21 -9
  123. package/dist/improve-conversion-attempts.d.ts.map +1 -1
  124. package/dist/improve-conversion-attempts.js +6 -1
  125. package/dist/improve-conversion-attempts.js.map +1 -1
  126. package/dist/improve-conversion-stage.d.ts +20 -2
  127. package/dist/improve-conversion-stage.d.ts.map +1 -1
  128. package/dist/improve-conversion-stage.js +386 -178
  129. package/dist/improve-conversion-stage.js.map +1 -1
  130. package/dist/improve-convert-progress.d.ts +44 -0
  131. package/dist/improve-convert-progress.d.ts.map +1 -0
  132. package/dist/improve-convert-progress.js +47 -0
  133. package/dist/improve-convert-progress.js.map +1 -0
  134. package/dist/improve-convert-resilience.d.ts +96 -58
  135. package/dist/improve-convert-resilience.d.ts.map +1 -1
  136. package/dist/improve-convert-resilience.js +128 -72
  137. package/dist/improve-convert-resilience.js.map +1 -1
  138. package/dist/improve-core/concept-input.d.ts +80 -0
  139. package/dist/improve-core/concept-input.d.ts.map +1 -0
  140. package/dist/improve-core/concept-input.js +92 -0
  141. package/dist/improve-core/concept-input.js.map +1 -0
  142. package/dist/improve-core/improve-added-specs.d.ts +62 -0
  143. package/dist/improve-core/improve-added-specs.d.ts.map +1 -0
  144. package/dist/improve-core/improve-added-specs.js +160 -0
  145. package/dist/improve-core/improve-added-specs.js.map +1 -0
  146. package/dist/improve-core/improve-artifacts.d.ts +18 -0
  147. package/dist/improve-core/improve-artifacts.d.ts.map +1 -0
  148. package/dist/improve-core/improve-artifacts.js +4 -0
  149. package/dist/improve-core/improve-artifacts.js.map +1 -0
  150. package/dist/improve-core/improve-concept.d.ts +7 -0
  151. package/dist/improve-core/improve-concept.d.ts.map +1 -0
  152. package/dist/improve-core/improve-concept.js +185 -0
  153. package/dist/improve-core/improve-concept.js.map +1 -0
  154. package/dist/improve-core/improve-discovery.d.ts +84 -0
  155. package/dist/improve-core/improve-discovery.d.ts.map +1 -0
  156. package/dist/improve-core/improve-discovery.js +154 -0
  157. package/dist/improve-core/improve-discovery.js.map +1 -0
  158. package/dist/improve-core/improve-dom-anchor.d.ts.map +1 -0
  159. package/dist/{improve-dom-anchor.js → improve-core/improve-dom-anchor.js} +2 -0
  160. package/dist/improve-core/improve-dom-anchor.js.map +1 -0
  161. package/dist/improve-core/improve-dom-diff.d.ts +59 -0
  162. package/dist/improve-core/improve-dom-diff.d.ts.map +1 -0
  163. package/dist/improve-core/improve-dom-diff.js +151 -0
  164. package/dist/improve-core/improve-dom-diff.js.map +1 -0
  165. package/dist/improve-core/improve-dom-extract.d.ts.map +1 -0
  166. package/dist/{improve-dom-extract.js → improve-core/improve-dom-extract.js} +2 -0
  167. package/dist/improve-core/improve-dom-extract.js.map +1 -0
  168. package/dist/improve-core/improve-dom-gate.d.ts +49 -0
  169. package/dist/improve-core/improve-dom-gate.d.ts.map +1 -0
  170. package/dist/improve-core/improve-dom-gate.js +99 -0
  171. package/dist/improve-core/improve-dom-gate.js.map +1 -0
  172. package/dist/improve-core/improve-dom-neighbour.d.ts.map +1 -0
  173. package/dist/{improve-dom-neighbour.js → improve-core/improve-dom-neighbour.js} +2 -0
  174. package/dist/improve-core/improve-dom-neighbour.js.map +1 -0
  175. package/dist/improve-core/improve-dom-scale.d.ts.map +1 -0
  176. package/dist/{improve-dom-scale.js → improve-core/improve-dom-scale.js} +2 -0
  177. package/dist/improve-core/improve-dom-scale.js.map +1 -0
  178. package/dist/improve-core/improve-icon-svg.d.ts +29 -0
  179. package/dist/improve-core/improve-icon-svg.d.ts.map +1 -0
  180. package/dist/improve-core/improve-icon-svg.js +85 -0
  181. package/dist/improve-core/improve-icon-svg.js.map +1 -0
  182. package/dist/improve-core/improve-kit-asset-model.d.ts +177 -0
  183. package/dist/improve-core/improve-kit-asset-model.d.ts.map +1 -0
  184. package/dist/improve-core/improve-kit-asset-model.js +269 -0
  185. package/dist/improve-core/improve-kit-asset-model.js.map +1 -0
  186. package/dist/improve-core/improve-layerdoc-diff.d.ts.map +1 -0
  187. package/dist/{improve-layerdoc-diff.js → improve-core/improve-layerdoc-diff.js} +2 -0
  188. package/dist/improve-core/improve-layerdoc-diff.js.map +1 -0
  189. package/dist/{improve-layerdoc-types.d.ts → improve-core/improve-layerdoc-types.d.ts} +9 -0
  190. package/dist/improve-core/improve-layerdoc-types.d.ts.map +1 -0
  191. package/dist/improve-core/improve-layerdoc-types.js +4 -0
  192. package/dist/improve-core/improve-layerdoc-types.js.map +1 -0
  193. package/dist/improve-core/improve-page-words.d.ts +180 -0
  194. package/dist/improve-core/improve-page-words.d.ts.map +1 -0
  195. package/dist/improve-core/improve-page-words.js +303 -0
  196. package/dist/improve-core/improve-page-words.js.map +1 -0
  197. package/dist/{improve-plan-annotated-render.d.ts → improve-core/improve-plan-annotated-render.d.ts} +19 -2
  198. package/dist/improve-core/improve-plan-annotated-render.d.ts.map +1 -0
  199. package/dist/{improve-plan-annotated-render.js → improve-core/improve-plan-annotated-render.js} +77 -28
  200. package/dist/improve-core/improve-plan-annotated-render.js.map +1 -0
  201. package/dist/improve-core/improve-plan-annotator.d.ts +34 -0
  202. package/dist/improve-core/improve-plan-annotator.d.ts.map +1 -0
  203. package/dist/improve-core/improve-plan-annotator.js +52 -0
  204. package/dist/improve-core/improve-plan-annotator.js.map +1 -0
  205. package/dist/{improve-plan-render.d.ts → improve-core/improve-plan-render.d.ts} +2 -1
  206. package/dist/improve-core/improve-plan-render.d.ts.map +1 -0
  207. package/dist/{improve-plan-render.js → improve-core/improve-plan-render.js} +7 -1
  208. package/dist/improve-core/improve-plan-render.js.map +1 -0
  209. package/dist/improve-core/improve-plan-vector-keep.d.ts +29 -0
  210. package/dist/improve-core/improve-plan-vector-keep.d.ts.map +1 -0
  211. package/dist/improve-core/improve-plan-vector-keep.js +68 -0
  212. package/dist/improve-core/improve-plan-vector-keep.js.map +1 -0
  213. package/dist/{improve-raster-layers-section.d.ts → improve-core/improve-raster-layers-section.d.ts} +9 -1
  214. package/dist/improve-core/improve-raster-layers-section.d.ts.map +1 -0
  215. package/dist/{improve-raster-layers-section.js → improve-core/improve-raster-layers-section.js} +5 -2
  216. package/dist/improve-core/improve-raster-layers-section.js.map +1 -0
  217. package/dist/improve-core/improve-refusal.d.ts +6 -0
  218. package/dist/improve-core/improve-refusal.d.ts.map +1 -0
  219. package/dist/improve-core/improve-refusal.js +27 -0
  220. package/dist/improve-core/improve-refusal.js.map +1 -0
  221. package/dist/improve-core/improve-retain.d.ts +121 -0
  222. package/dist/improve-core/improve-retain.d.ts.map +1 -0
  223. package/dist/improve-core/improve-retain.js +115 -0
  224. package/dist/improve-core/improve-retain.js.map +1 -0
  225. package/dist/improve-core/improve-site-plan.d.ts +75 -0
  226. package/dist/improve-core/improve-site-plan.d.ts.map +1 -0
  227. package/dist/improve-core/improve-site-plan.js +135 -0
  228. package/dist/improve-core/improve-site-plan.js.map +1 -0
  229. package/dist/improve-core/improve-site-shell.d.ts +56 -0
  230. package/dist/improve-core/improve-site-shell.d.ts.map +1 -0
  231. package/dist/improve-core/improve-site-shell.js +152 -0
  232. package/dist/improve-core/improve-site-shell.js.map +1 -0
  233. package/dist/improve-core/improve-site-tokens.d.ts +44 -0
  234. package/dist/improve-core/improve-site-tokens.d.ts.map +1 -0
  235. package/dist/improve-core/improve-site-tokens.js +87 -0
  236. package/dist/improve-core/improve-site-tokens.js.map +1 -0
  237. package/dist/improve-core/improve-source-hints.d.ts +25 -0
  238. package/dist/improve-core/improve-source-hints.d.ts.map +1 -0
  239. package/dist/improve-core/improve-source-hints.js +17 -0
  240. package/dist/improve-core/improve-source-hints.js.map +1 -0
  241. package/dist/{improve-token-patch.d.ts → improve-core/improve-token-patch.d.ts} +2 -0
  242. package/dist/improve-core/improve-token-patch.d.ts.map +1 -0
  243. package/dist/{improve-token-patch.js → improve-core/improve-token-patch.js} +25 -5
  244. package/dist/improve-core/improve-token-patch.js.map +1 -0
  245. package/dist/improve-core/index.d.ts +47 -0
  246. package/dist/improve-core/index.d.ts.map +1 -0
  247. package/dist/improve-core/index.js +49 -0
  248. package/dist/improve-core/index.js.map +1 -0
  249. package/dist/improve-delivery-stages.d.ts +6 -0
  250. package/dist/improve-delivery-stages.d.ts.map +1 -1
  251. package/dist/improve-delivery-stages.js +91 -6
  252. package/dist/improve-delivery-stages.js.map +1 -1
  253. package/dist/improve-dom-diff.d.ts +8 -24
  254. package/dist/improve-dom-diff.d.ts.map +1 -1
  255. package/dist/improve-dom-diff.js +23 -123
  256. package/dist/improve-dom-diff.js.map +1 -1
  257. package/dist/improve-dom-gate.d.ts +1 -18
  258. package/dist/improve-dom-gate.d.ts.map +1 -1
  259. package/dist/improve-dom-gate.js +1 -46
  260. package/dist/improve-dom-gate.js.map +1 -1
  261. package/dist/improve-generation-stages.d.ts +0 -2
  262. package/dist/improve-generation-stages.d.ts.map +1 -1
  263. package/dist/improve-generation-stages.js +191 -15
  264. package/dist/improve-generation-stages.js.map +1 -1
  265. package/dist/improve-kit-assets.d.ts +8 -116
  266. package/dist/improve-kit-assets.d.ts.map +1 -1
  267. package/dist/improve-kit-assets.js +9 -229
  268. package/dist/improve-kit-assets.js.map +1 -1
  269. package/dist/improve-kit-ignore.d.ts +32 -0
  270. package/dist/improve-kit-ignore.d.ts.map +1 -0
  271. package/dist/improve-kit-ignore.js +111 -0
  272. package/dist/improve-kit-ignore.js.map +1 -0
  273. package/dist/improve-kit-readme.d.ts +4 -0
  274. package/dist/improve-kit-readme.d.ts.map +1 -1
  275. package/dist/improve-kit-readme.js +155 -24
  276. package/dist/improve-kit-readme.js.map +1 -1
  277. package/dist/improve-kit-stall.d.ts +51 -3
  278. package/dist/improve-kit-stall.d.ts.map +1 -1
  279. package/dist/improve-kit-stall.js +205 -21
  280. package/dist/improve-kit-stall.js.map +1 -1
  281. package/dist/improve-kit-status.d.ts +36 -0
  282. package/dist/improve-kit-status.d.ts.map +1 -1
  283. package/dist/improve-kit-status.js +82 -7
  284. package/dist/improve-kit-status.js.map +1 -1
  285. package/dist/improve-options.d.ts +14 -0
  286. package/dist/improve-options.d.ts.map +1 -1
  287. package/dist/improve-options.js +95 -12
  288. package/dist/improve-options.js.map +1 -1
  289. package/dist/improve-passthrough-flags.d.ts +8 -0
  290. package/dist/improve-passthrough-flags.d.ts.map +1 -0
  291. package/dist/improve-passthrough-flags.js +11 -0
  292. package/dist/improve-passthrough-flags.js.map +1 -0
  293. package/dist/improve-plan-annotator.d.ts +13 -2
  294. package/dist/improve-plan-annotator.d.ts.map +1 -1
  295. package/dist/improve-plan-annotator.js +35 -37
  296. package/dist/improve-plan-annotator.js.map +1 -1
  297. package/dist/improve-pricing-plan.d.ts +3 -0
  298. package/dist/improve-pricing-plan.d.ts.map +1 -1
  299. package/dist/improve-pricing-plan.js +33 -5
  300. package/dist/improve-pricing-plan.js.map +1 -1
  301. package/dist/improve-recheck.d.ts +9 -0
  302. package/dist/improve-recheck.d.ts.map +1 -0
  303. package/dist/improve-recheck.js +200 -0
  304. package/dist/improve-recheck.js.map +1 -0
  305. package/dist/improve-reset.d.ts.map +1 -1
  306. package/dist/improve-reset.js +11 -0
  307. package/dist/improve-reset.js.map +1 -1
  308. package/dist/improve-run-summary.d.ts +6 -0
  309. package/dist/improve-run-summary.d.ts.map +1 -1
  310. package/dist/improve-run-summary.js +77 -7
  311. package/dist/improve-run-summary.js.map +1 -1
  312. package/dist/improve-site-plan.d.ts +57 -0
  313. package/dist/improve-site-plan.d.ts.map +1 -0
  314. package/dist/improve-site-plan.js +79 -0
  315. package/dist/improve-site-plan.js.map +1 -0
  316. package/dist/improve-site-shell.d.ts +11 -0
  317. package/dist/improve-site-shell.d.ts.map +1 -0
  318. package/dist/improve-site-shell.js +24 -0
  319. package/dist/improve-site-shell.js.map +1 -0
  320. package/dist/improve-site-stage.d.ts +10 -0
  321. package/dist/improve-site-stage.d.ts.map +1 -0
  322. package/dist/improve-site-stage.js +84 -0
  323. package/dist/improve-site-stage.js.map +1 -0
  324. package/dist/improve-site-tokens.d.ts +9 -0
  325. package/dist/improve-site-tokens.d.ts.map +1 -0
  326. package/dist/improve-site-tokens.js +17 -0
  327. package/dist/improve-site-tokens.js.map +1 -0
  328. package/dist/improve-source-hints.d.ts +3 -12
  329. package/dist/improve-source-hints.d.ts.map +1 -1
  330. package/dist/improve-source-hints.js +4 -5
  331. package/dist/improve-source-hints.js.map +1 -1
  332. package/dist/improve-spend-ledger.d.ts +69 -0
  333. package/dist/improve-spend-ledger.d.ts.map +1 -0
  334. package/dist/improve-spend-ledger.js +118 -0
  335. package/dist/improve-spend-ledger.js.map +1 -0
  336. package/dist/improve-stage-runners.d.ts +5 -2
  337. package/dist/improve-stage-runners.d.ts.map +1 -1
  338. package/dist/improve-stage-runners.js +5 -2
  339. package/dist/improve-stage-runners.js.map +1 -1
  340. package/dist/improve-stage-shared.d.ts +49 -2
  341. package/dist/improve-stage-shared.d.ts.map +1 -1
  342. package/dist/improve-stage-shared.js +80 -3
  343. package/dist/improve-stage-shared.js.map +1 -1
  344. package/dist/improve-stop-handler.d.ts +15 -0
  345. package/dist/improve-stop-handler.d.ts.map +1 -1
  346. package/dist/improve-stop-handler.js +74 -3
  347. package/dist/improve-stop-handler.js.map +1 -1
  348. package/dist/improve-terminal-event.d.ts.map +1 -1
  349. package/dist/improve-terminal-event.js +13 -4
  350. package/dist/improve-terminal-event.js.map +1 -1
  351. package/dist/improve-workspace.d.ts +282 -9
  352. package/dist/improve-workspace.d.ts.map +1 -1
  353. package/dist/improve-workspace.js +250 -78
  354. package/dist/improve-workspace.js.map +1 -1
  355. package/dist/index.d.ts +2 -1
  356. package/dist/index.d.ts.map +1 -1
  357. package/dist/index.js +1 -0
  358. package/dist/index.js.map +1 -1
  359. package/dist/legacy-skill-catalog.d.ts.map +1 -1
  360. package/dist/legacy-skill-catalog.js +202 -0
  361. package/dist/legacy-skill-catalog.js.map +1 -1
  362. package/dist/mcp-convert.js +1 -1
  363. package/dist/mcp-convert.js.map +1 -1
  364. package/dist/redesign-capture.d.ts +146 -15
  365. package/dist/redesign-capture.d.ts.map +1 -1
  366. package/dist/redesign-capture.js +182 -65
  367. package/dist/redesign-capture.js.map +1 -1
  368. package/dist/redesign-workspace.d.ts +13 -0
  369. package/dist/redesign-workspace.d.ts.map +1 -1
  370. package/dist/redesign-workspace.js +14 -0
  371. package/dist/redesign-workspace.js.map +1 -1
  372. package/dist/responsive-alternative-materializer.d.ts +24 -0
  373. package/dist/responsive-alternative-materializer.d.ts.map +1 -0
  374. package/dist/responsive-alternative-materializer.js +93 -0
  375. package/dist/responsive-alternative-materializer.js.map +1 -0
  376. package/dist/result-integrity.d.ts +38 -0
  377. package/dist/result-integrity.d.ts.map +1 -0
  378. package/dist/result-integrity.js +46 -0
  379. package/dist/result-integrity.js.map +1 -0
  380. package/dist/review-edit-source.d.ts.map +1 -1
  381. package/dist/review-edit-source.js +6 -2
  382. package/dist/review-edit-source.js.map +1 -1
  383. package/dist/review-edit.js +2 -2
  384. package/dist/review-edit.js.map +1 -1
  385. package/dist/review-prototype-gap.js +1 -1
  386. package/dist/review-prototype-gap.js.map +1 -1
  387. package/dist/spend-run-filter.d.ts +21 -0
  388. package/dist/spend-run-filter.d.ts.map +1 -0
  389. package/dist/spend-run-filter.js +65 -0
  390. package/dist/spend-run-filter.js.map +1 -0
  391. package/dist/spend-scoped-report-lines.d.ts +4 -0
  392. package/dist/spend-scoped-report-lines.d.ts.map +1 -0
  393. package/dist/spend-scoped-report-lines.js +46 -0
  394. package/dist/spend-scoped-report-lines.js.map +1 -0
  395. package/dist/spend-scoped-report.d.ts +28 -0
  396. package/dist/spend-scoped-report.d.ts.map +1 -0
  397. package/dist/spend-scoped-report.js +45 -0
  398. package/dist/spend-scoped-report.js.map +1 -0
  399. package/open-design.json +2 -2
  400. package/package.json +5 -5
  401. package/skills/12ui-design/SKILL.md +14 -4
  402. package/skills/12ui-design/improve.md +67 -5
  403. package/skills/12ui-design/inspire.md +1 -1
  404. package/dist/improve-dom-anchor.d.ts.map +0 -1
  405. package/dist/improve-dom-anchor.js.map +0 -1
  406. package/dist/improve-dom-extract.d.ts.map +0 -1
  407. package/dist/improve-dom-extract.js.map +0 -1
  408. package/dist/improve-dom-neighbour.d.ts.map +0 -1
  409. package/dist/improve-dom-neighbour.js.map +0 -1
  410. package/dist/improve-dom-scale.d.ts.map +0 -1
  411. package/dist/improve-dom-scale.js.map +0 -1
  412. package/dist/improve-layerdoc-diff.d.ts.map +0 -1
  413. package/dist/improve-layerdoc-diff.js.map +0 -1
  414. package/dist/improve-layerdoc-types.d.ts.map +0 -1
  415. package/dist/improve-layerdoc-types.js +0 -2
  416. package/dist/improve-layerdoc-types.js.map +0 -1
  417. package/dist/improve-plan-annotated-render.d.ts.map +0 -1
  418. package/dist/improve-plan-annotated-render.js.map +0 -1
  419. package/dist/improve-plan-render.d.ts.map +0 -1
  420. package/dist/improve-plan-render.js.map +0 -1
  421. package/dist/improve-raster-layers-section.d.ts.map +0 -1
  422. package/dist/improve-raster-layers-section.js.map +0 -1
  423. package/dist/improve-token-patch.d.ts.map +0 -1
  424. package/dist/improve-token-patch.js.map +0 -1
  425. /package/dist/{improve-dom-anchor.d.ts → improve-core/improve-dom-anchor.d.ts} +0 -0
  426. /package/dist/{improve-dom-extract.d.ts → improve-core/improve-dom-extract.d.ts} +0 -0
  427. /package/dist/{improve-dom-neighbour.d.ts → improve-core/improve-dom-neighbour.d.ts} +0 -0
  428. /package/dist/{improve-dom-scale.d.ts → improve-core/improve-dom-scale.d.ts} +0 -0
  429. /package/dist/{improve-layerdoc-diff.d.ts → improve-core/improve-layerdoc-diff.d.ts} +0 -0
@@ -0,0 +1,325 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { copyFile, mkdir, readFile, stat, writeFile } from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import { BranchApiError, TwelveUiBranchClient, } from './branch-client.js';
5
+ import { CliRefusal } from './cli-refusal.js';
6
+ import { runConversionCommand } from './cli-convert-command.js';
7
+ import { readConversionConfig } from './config.js';
8
+ import { runImproveConversion } from './improve-conversion-stage.js';
9
+ import { improvePageWordsFor } from './improve-core/index.js';
10
+ import { improveSha256, noteImproveStage } from './improve-stage-shared.js';
11
+ import { improvePagePaths, writeImproveRecord } from './improve-workspace.js';
12
+ const POLL_INTERVAL_MS = 4_000;
13
+ const IMPROVE_RUN_DEADLINE_MS = 15 * 60 * 1_000;
14
+ const TERMINAL_CODES = new Set([
15
+ 'quota_exhausted', 'insufficient_funds', 'expired', 'rate_limited', 'not_found',
16
+ 'unauthorized', 'forbidden', 'idempotency_key_required',
17
+ ]);
18
+ const defaultSleep = async (milliseconds) => (new Promise((resolve) => { setTimeout(resolve, milliseconds); }));
19
+ const referenceImage = async (file) => {
20
+ const bytes = await readFile(file);
21
+ const extension = path.extname(file).toLowerCase();
22
+ const mediaType = extension === '.jpg' || extension === '.jpeg'
23
+ ? 'image/jpeg'
24
+ : extension === '.webp'
25
+ ? 'image/webp'
26
+ : 'image/png';
27
+ return {
28
+ data: bytes.toString('base64'),
29
+ mediaType,
30
+ sha256: improveSha256(bytes),
31
+ };
32
+ };
33
+ /**
34
+ * THE PAGE'S OWN WORDS, WHICH THE CAPTURE ALREADY WROTE.
35
+ *
36
+ * Every site capture leaves `pages/<id>/current.domdoc.json` beside the
37
+ * screenshot. Measured (`.tmp/site-improve/degree-study`, finding 7): handing
38
+ * the model that page's text alongside the edit keeps the real copy verbatim
39
+ * across genuinely different compositions, while the edit alone paraphrases.
40
+ *
41
+ * A document that will not read or parse yields no words rather than failing
42
+ * the branch (CLAUDE.md item 5): the run then asks for exactly what it asked
43
+ * for before this existed, on a stage that is about to spend money.
44
+ */
45
+ const pageWords = async (file, retain) => {
46
+ if (!file)
47
+ return '';
48
+ try {
49
+ return improvePageWordsFor(JSON.parse(await readFile(file, 'utf8')), retain);
50
+ }
51
+ catch {
52
+ return '';
53
+ }
54
+ };
55
+ /**
56
+ * The words are part of what was bought, so they are part of the key: a rerun
57
+ * whose capture now yields different copy is a different request, and a rerun
58
+ * whose capture is unchanged replays without spending again (CLAUDE.md item 3).
59
+ *
60
+ * They are APPENDED ONLY WHEN AT LEAST ONE SCREEN HAS ANY, so a kit captured
61
+ * before this existed — or one whose visitor freed the copy — still hashes to
62
+ * the key it would have hashed to and replays rather than re-buying.
63
+ */
64
+ const branchKey = (record, order, words) => {
65
+ const rootSha = record.pick?.sha256 ?? record.target?.sha256 ?? '';
66
+ const screenShas = record.pages.map((page) => page.capture?.sha256 ?? '');
67
+ const digest = createHash('sha256').update([
68
+ rootSha,
69
+ ...screenShas,
70
+ record.concept,
71
+ JSON.stringify(record.retain),
72
+ order,
73
+ ...(words.some((entry) => entry) ? words : []),
74
+ ].join('\0')).digest('hex');
75
+ return `improve-branch:v1:${digest}`;
76
+ };
77
+ const candidateError = (candidate) => (candidate.error ?? {
78
+ code: 'improve_branch_failed',
79
+ message: `Site page ${candidate.slot} could not be polished.`,
80
+ });
81
+ const branchForCandidate = (args) => {
82
+ if (args.candidate.status === 'failed') {
83
+ return {
84
+ slot: args.candidate.slot,
85
+ status: 'failed',
86
+ error: candidateError(args.candidate),
87
+ };
88
+ }
89
+ return {
90
+ slot: args.candidate.slot,
91
+ status: args.candidate.status,
92
+ ...(args.page.branch?.imagePath ? { imagePath: args.page.branch.imagePath } : {}),
93
+ ...(args.page.branch?.sha256 ? { sha256: args.page.branch.sha256 } : {}),
94
+ ...(args.candidate.status === 'succeeded' && !args.page.branch?.imagePath
95
+ ? { imagePath: improvePagePaths(args.runDir, args.page.id).polishedImage }
96
+ : {}),
97
+ };
98
+ };
99
+ const activeCandidates = (envelope) => (envelope.candidates.filter((candidate) => candidate.status === 'pending' || candidate.status === 'dispatched'));
100
+ const deadlineRefusal = (envelope) => {
101
+ const slots = activeCandidates(envelope).map((candidate) => `${candidate.slot} (${candidate.status})`);
102
+ return new CliRefusal(`Improve run ${envelope.id} did not settle within 15 minutes; still pending/dispatched slots: ${slots.join(', ')}.`, 'improve_branch_timeout');
103
+ };
104
+ const allFailedRefusal = (envelope) => {
105
+ const failedSlots = envelope.candidates.filter((candidate) => candidate.status === 'failed')
106
+ .map((candidate) => `${candidate.slot} (${candidateError(candidate).code})`);
107
+ return new CliRefusal(`Improve run ${envelope.id} finished with no succeeded pages; failed slots: ${failedSlots.join(', ')}.`, 'improve_branch_all_failed');
108
+ };
109
+ const clientFor = (args) => {
110
+ if (args.dependencies.branchClient)
111
+ return args.dependencies.branchClient;
112
+ const config = (args.dependencies.readConfig ?? readConversionConfig)({
113
+ origin: args.passthrough.origin,
114
+ apiKey: args.passthrough['api-key'],
115
+ });
116
+ return (args.dependencies.createBranchClient ?? ((value) => new TwelveUiBranchClient(value)))(config);
117
+ };
118
+ const renderLayerDocRoot = async (args) => {
119
+ const renderDir = path.join(args.options.paths.stateDir, 'site-root');
120
+ await mkdir(renderDir, { recursive: true });
121
+ const stem = path.basename(args.record.target.value).replace(/\.layerdoc\.json$/iu, '');
122
+ const rendered = path.join(renderDir, `${stem}.png`);
123
+ if (!(await stat(rendered).catch(() => undefined))?.isFile()) {
124
+ await runImproveConversion({
125
+ input: args.record.target.value,
126
+ outDir: renderDir,
127
+ output: 'png',
128
+ key: `improve-site-root:v1:${args.sha256}`,
129
+ passthrough: args.options.passthrough,
130
+ runner: args.dependencies.runConvert ?? runConversionCommand,
131
+ journal: args.dependencies.journal,
132
+ });
133
+ }
134
+ if (!(await stat(rendered).catch(() => undefined))?.isFile()) {
135
+ throw new Error(`LayerDoc root rendering completed without ${rendered}`);
136
+ }
137
+ await copyFile(rendered, args.options.paths.winnerImage);
138
+ return args.options.paths.winnerImage;
139
+ };
140
+ export const runImproveBranchStage = async (args) => {
141
+ if (args.record.scope === 'page')
142
+ return noteImproveStage({
143
+ record: args.record,
144
+ stage: 'branch',
145
+ priceCeilingUsd: 0,
146
+ replayed: args.record.stages.branch?.outcome === 'skipped',
147
+ outcome: 'skipped',
148
+ write: true,
149
+ });
150
+ const pagesToBranch = args.record.pages;
151
+ const complete = Boolean(args.record.branch)
152
+ && pagesToBranch.length > 0
153
+ && pagesToBranch.every((page) => (page.branch?.status === 'succeeded' && page.branch.sha256)
154
+ || page.branch?.status === 'failed');
155
+ if (complete) {
156
+ if (!pagesToBranch.some((page) => page.branch?.status === 'succeeded')) {
157
+ const failedSlots = pagesToBranch.map((page) => `${page.branch.slot} (${page.branch.error?.code ?? 'improve_branch_failed'})`);
158
+ throw new CliRefusal(`Improve run ${args.record.branch.runId} finished with no succeeded pages; failed slots: ${failedSlots.join(', ')}.`, 'improve_branch_all_failed');
159
+ }
160
+ return noteImproveStage({
161
+ record: args.record, stage: 'branch', priceCeilingUsd: args.price, replayed: true, write: true,
162
+ });
163
+ }
164
+ if (!args.record.capture || pagesToBranch.some((page) => !page.capture)) {
165
+ throw new Error('Cannot branch before every site page is captured');
166
+ }
167
+ if (!args.record.pick && !args.record.target)
168
+ throw new Error('Cannot branch before pick');
169
+ const rootSha = args.record.pick?.sha256
170
+ ?? (args.record.target ? improveSha256(await readFile(args.record.target.value)) : undefined);
171
+ if (!rootSha)
172
+ throw new Error('Site improve has no accepted root design');
173
+ let root;
174
+ if (args.record.draft && args.record.pick) {
175
+ root = { winner: { createRunId: args.record.draft.runId, slot: args.record.pick.slot.toLowerCase() } };
176
+ }
177
+ else if (args.record.target?.kind === 'image') {
178
+ root = { referenceImage: await referenceImage(args.record.target.value) };
179
+ }
180
+ else {
181
+ root = { referenceImage: await referenceImage(await renderLayerDocRoot({
182
+ record: args.record,
183
+ options: args.options,
184
+ dependencies: args.dependencies,
185
+ sha256: rootSha,
186
+ })) };
187
+ }
188
+ const screens = await Promise.all(pagesToBranch.map(async (page) => {
189
+ const [image, words] = await Promise.all([
190
+ referenceImage(page.capture.sourceImage),
191
+ pageWords(page.capture.domDoc, args.record.retain),
192
+ ]);
193
+ return {
194
+ id: page.id,
195
+ title: page.title,
196
+ route: page.route,
197
+ surfaceType: 'web_page',
198
+ image,
199
+ ...(words ? { words } : {}),
200
+ };
201
+ }));
202
+ const client = clientFor({ passthrough: args.options.passthrough, dependencies: args.dependencies });
203
+ const now = args.dependencies.now ?? Date.now;
204
+ const deadline = now() + IMPROVE_RUN_DEADLINE_MS;
205
+ let envelope;
206
+ let record = args.record;
207
+ if (record.branch) {
208
+ envelope = await client.getRun(record.branch.runId);
209
+ }
210
+ else {
211
+ envelope = await client.startImproveRun({
212
+ concept: record.concept,
213
+ retain: record.retain,
214
+ root,
215
+ screens,
216
+ referenceOrder: args.options.referenceOrder,
217
+ }, branchKey({ ...record, target: record.target ? { ...record.target, sha256: rootSha } : undefined }, args.options.referenceOrder, screens.map((screen) => screen.words ?? '')));
218
+ record = {
219
+ ...record,
220
+ ...(record.target ? { target: { ...record.target, sha256: rootSha } } : {}),
221
+ branch: { runId: envelope.id, referenceOrder: args.options.referenceOrder },
222
+ pages: record.pages.map((page) => {
223
+ const candidate = envelope.candidates[pagesToBranch.findIndex(({ id }) => id === page.id)];
224
+ if (!candidate)
225
+ throw new Error(`Improve run omitted page ${page.id}`);
226
+ return {
227
+ ...page,
228
+ branch: branchForCandidate({ page, candidate, runDir: record.runDir }),
229
+ };
230
+ }),
231
+ };
232
+ await writeImproveRecord(args.options.paths.record, record);
233
+ }
234
+ const dispatches = envelope.candidates
235
+ .filter((candidate) => candidate.status === 'pending')
236
+ .map(async (candidate) => {
237
+ try {
238
+ await client.dispatchScreen(envelope.id, candidate.slot);
239
+ }
240
+ catch (error) {
241
+ const code = error instanceof BranchApiError ? error.code : 'error';
242
+ if (code === 'candidate_in_flight')
243
+ return;
244
+ if (TERMINAL_CODES.has(code) || (error instanceof BranchApiError && error.status >= 500))
245
+ throw error;
246
+ throw error;
247
+ }
248
+ });
249
+ await Promise.all(dispatches).catch((error) => {
250
+ throw new CliRefusal(error instanceof Error ? error.message : String(error), error instanceof BranchApiError ? error.code : 'improve_branch_failed');
251
+ });
252
+ const sleep = args.dependencies.sleep ?? defaultSleep;
253
+ while (true) {
254
+ envelope = await client.getRun(envelope.id);
255
+ record = {
256
+ ...record,
257
+ pages: record.pages.map((page) => {
258
+ const candidate = envelope.candidates[pagesToBranch.findIndex(({ id }) => id === page.id)];
259
+ return candidate && page.branch ? {
260
+ ...page,
261
+ branch: branchForCandidate({ page, candidate, runDir: record.runDir }),
262
+ } : page;
263
+ }),
264
+ };
265
+ await writeImproveRecord(args.options.paths.record, record);
266
+ if (activeCandidates(envelope).length === 0)
267
+ break;
268
+ const remaining = deadline - now();
269
+ if (remaining <= 0)
270
+ throw deadlineRefusal(envelope);
271
+ await sleep(Math.min(POLL_INTERVAL_MS, remaining));
272
+ }
273
+ const pages = await Promise.all(record.pages.map(async (page) => {
274
+ const candidate = envelope.candidates[pagesToBranch.findIndex(({ id }) => id === page.id)];
275
+ if (!candidate)
276
+ throw new Error(`Improve run omitted page ${page.id}`);
277
+ if (candidate.status === 'failed') {
278
+ return {
279
+ ...page,
280
+ branch: branchForCandidate({ page, candidate, runDir: record.runDir }),
281
+ };
282
+ }
283
+ if (candidate.status !== 'succeeded')
284
+ throw new Error(`Improve run did not settle page ${page.id}`);
285
+ const imagePath = improvePagePaths(record.runDir, page.id).polishedImage;
286
+ const existing = await stat(imagePath).catch(() => undefined);
287
+ let sha256 = page.branch?.sha256;
288
+ if (!existing?.isFile()) {
289
+ const downloaded = await client.downloadScreen(envelope.id, candidate.slot);
290
+ await mkdir(path.dirname(imagePath), { recursive: true });
291
+ await writeFile(imagePath, downloaded.bytes);
292
+ sha256 = downloaded.sha256;
293
+ }
294
+ else if (!sha256) {
295
+ sha256 = improveSha256(await readFile(imagePath));
296
+ }
297
+ return {
298
+ ...page,
299
+ branch: {
300
+ slot: candidate.slot,
301
+ imagePath,
302
+ sha256,
303
+ status: 'succeeded',
304
+ },
305
+ };
306
+ }));
307
+ record = { ...record, pages };
308
+ await writeImproveRecord(args.options.paths.record, record);
309
+ if (!pagesToBranch.some((page) => record.pages.find(({ id }) => id === page.id)?.branch?.status === 'succeeded')) {
310
+ throw allFailedRefusal(envelope);
311
+ }
312
+ record = await noteImproveStage({
313
+ record, stage: 'branch', priceCeilingUsd: args.price, replayed: false, write: false,
314
+ });
315
+ await writeImproveRecord(args.options.paths.record, record);
316
+ args.dependencies.journal?.note({
317
+ runId: envelope.id,
318
+ artifacts: pages.flatMap((page) => page.branch?.status === 'succeeded' && page.branch.imagePath
319
+ ? [page.branch.imagePath]
320
+ : []),
321
+ purchased: [envelope.id],
322
+ });
323
+ return record;
324
+ };
325
+ //# sourceMappingURL=improve-branch-stage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improve-branch-stage.js","sourceRoot":"","sources":["../src/improve-branch-stage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import type { ImproveRecord } from './improve-workspace.js';
2
+ /**
3
+ * Did this run photograph the page it was asked for?
4
+ *
5
+ * Notion's app kit is the whole argument for this module. The lane seated a
6
+ * real session, ran `12ui improve http://127.0.0.1:4300/app`, and capture
7
+ * followed the app's auth redirect to `/signin?next=%2Fapp`. Both URLs were
8
+ * recorded — the requested one in `improve.json`, the captured one in
9
+ * `current.domdoc.json` — and nothing compared them, so the run drafted four
10
+ * redesigns of a sign-in dialog, converted one, anchored a plan to it, passed
11
+ * the coverage gate at 100.0% DOM, and printed "Kit ready". $0.792 against a
12
+ * page nobody asked for, with every signal green.
13
+ *
14
+ * The gate cannot catch this: coverage scores target-vs-capture agreement, and
15
+ * both halves were the sign-in page. Only the two URLs disagree, and the check
16
+ * that reads them is free and deterministic — so it runs before any paid
17
+ * stage, not after.
18
+ */
19
+ export type ImproveCaptureRedirect = {
20
+ requested: string;
21
+ captured: string;
22
+ };
23
+ /** The two URLs when they name different pages, and nothing when they agree. */
24
+ export declare const improveCaptureRedirect: (record: ImproveRecord) => ImproveCaptureRedirect | undefined;
25
+ export declare const IMPROVE_REDIRECT_CAUSE: string;
26
+ /** Recovery is valid here because this guard runs before the paid draft stage. */
27
+ export declare const IMPROVE_REBOOTSTRAP_RECOVERY: string;
28
+ /**
29
+ * The `Captured:` line, in one place, so the kit README and the end-of-run
30
+ * summary cannot describe the same redirect in two different ways. Absent when
31
+ * the captured page is the requested one — which is every healthy run, and the
32
+ * reason this line is not printed unconditionally.
33
+ */
34
+ export declare const improveCapturedUrlLine: (record: ImproveRecord) => string | undefined;
35
+ /**
36
+ * Refuse to spend against a page nobody asked for.
37
+ *
38
+ * The capture is already written when this throws, so nothing is lost and the
39
+ * next run replays it; what does not happen is the draft purchase and every
40
+ * paid stage after it. `--allow-redirect` is the opt-in for a redirect that
41
+ * was the point — a bootstrap that deliberately ends somewhere else.
42
+ */
43
+ export declare const assertImproveCaptureNotRedirected: (args: {
44
+ record: ImproveRecord;
45
+ allowRedirect: boolean;
46
+ runDir: string;
47
+ }) => void;
48
+ /**
49
+ * Whether this run can PROVE the capture is the page that was asked for.
50
+ *
51
+ * The coverage gate used to guess this from DOM overlap and got it backwards.
52
+ * Over the 28 wave-2 kits that reached it (F42), the gate blocked 6 runs — all
53
+ * 6 on captures whose URL identity matched the request — and passed all 5 runs
54
+ * whose capture had landed somewhere else, three of them sign-in pages scored
55
+ * at 69.2%, 90.5% and 100.0%. Overlap cannot separate "wrong page" from "large
56
+ * redesign", because a redesign of the wrong page agrees with its own capture.
57
+ *
58
+ * The two URLs are a fact the kit already writes down, so the gate reads the
59
+ * fact instead of inferring it (CLAUDE.md item 8). `redirected` is only
60
+ * reachable under `--allow-redirect`; without it the run is refused before any
61
+ * paid stage by `assertImproveCaptureNotRedirected` above.
62
+ */
63
+ export type ImproveCaptureIdentity = 'matched' | 'redirected' | 'unrecorded' | 'image';
64
+ export declare const improveCaptureIdentity: (record: ImproveRecord) => ImproveCaptureIdentity;
65
+ //# sourceMappingURL=improve-capture-redirect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improve-capture-redirect.d.ts","sourceRoot":"","sources":["../src/improve-capture-redirect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,MAAM,sBAAsB,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAkB7E,gFAAgF;AAChF,eAAO,MAAM,sBAAsB,GACjC,QAAQ,aAAa,KACpB,sBAAsB,GAAG,SAS3B,CAAC;AAEF,eAAO,MAAM,sBAAsB,QACiD,CAAC;AAErF,kFAAkF;AAClF,eAAO,MAAM,4BAA4B,QAEoB,CAAC;AAE9D;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GAAI,QAAQ,aAAa,KAAG,MAAM,GAAG,SAMvE,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,iCAAiC,GAAI,MAAM;IACtD,MAAM,EAAE,aAAa,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB,KAAG,IAcH,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,YAAY,GAAG,YAAY,GAAG,OAAO,CAAC;AAEvF,eAAO,MAAM,sBAAsB,GAAI,QAAQ,aAAa,KAAG,sBAQ9D,CAAC"}
@@ -0,0 +1,85 @@
1
+ import { CliRefusal } from './cli-refusal.js';
2
+ /**
3
+ * Origin plus path, with the hash and a trailing slash dropped.
4
+ *
5
+ * A redirect that only adds a query (`?next=…`, a tracking parameter, a
6
+ * session id) is still the requested page; a redirect that lands on a
7
+ * different path is a different page. `/app` and `/app/` are the same page.
8
+ */
9
+ const urlIdentity = (value) => {
10
+ try {
11
+ const url = new URL(value);
12
+ return `${url.origin}${url.pathname.replace(/\/+$/u, '') || '/'}`;
13
+ }
14
+ catch {
15
+ return undefined;
16
+ }
17
+ };
18
+ /** The two URLs when they name different pages, and nothing when they agree. */
19
+ export const improveCaptureRedirect = (record) => {
20
+ if (record.input.kind !== 'url')
21
+ return undefined;
22
+ const captured = record.capture?.capturedUrl;
23
+ if (!captured)
24
+ return undefined;
25
+ const requestedIdentity = urlIdentity(record.input.value);
26
+ const capturedIdentity = urlIdentity(captured);
27
+ if (!requestedIdentity || !capturedIdentity)
28
+ return undefined;
29
+ if (requestedIdentity === capturedIdentity)
30
+ return undefined;
31
+ return { requested: record.input.value, captured };
32
+ };
33
+ export const IMPROVE_REDIRECT_CAUSE = 'The page redirected, usually an auth gate:'
34
+ + ' seat the session first (--bootstrap), or pass the page that actually renders.';
35
+ /** Recovery is valid here because this guard runs before the paid draft stage. */
36
+ export const IMPROVE_REBOOTSTRAP_RECOVERY = ' Correct --bootstrap and rerun the same command with'
37
+ + ' this --out-dir: capture is free, so improve will re-capture in place and retain the prior'
38
+ + ' redacted bootstrap and sha256 in improve.json history.';
39
+ /**
40
+ * The `Captured:` line, in one place, so the kit README and the end-of-run
41
+ * summary cannot describe the same redirect in two different ways. Absent when
42
+ * the captured page is the requested one — which is every healthy run, and the
43
+ * reason this line is not printed unconditionally.
44
+ */
45
+ export const improveCapturedUrlLine = (record) => {
46
+ const redirect = improveCaptureRedirect(record);
47
+ return redirect
48
+ ? `Captured: ${redirect.captured} — NOT the requested ${redirect.requested}.`
49
+ + ` ${IMPROVE_REDIRECT_CAUSE}`
50
+ : undefined;
51
+ };
52
+ /**
53
+ * Refuse to spend against a page nobody asked for.
54
+ *
55
+ * The capture is already written when this throws, so nothing is lost and the
56
+ * next run replays it; what does not happen is the draft purchase and every
57
+ * paid stage after it. `--allow-redirect` is the opt-in for a redirect that
58
+ * was the point — a bootstrap that deliberately ends somewhere else.
59
+ */
60
+ export const assertImproveCaptureNotRedirected = (args) => {
61
+ const redirect = improveCaptureRedirect(args.record);
62
+ if (!redirect || args.allowRedirect)
63
+ return;
64
+ throw new CliRefusal(`Capture landed on ${redirect.captured}, not the requested ${redirect.requested}.`
65
+ + ` ${IMPROVE_REDIRECT_CAUSE}`
66
+ + ' Nothing was bought: improve stops here rather than draft, convert and plan'
67
+ + ' a page you did not ask for — a coverage gate cannot catch it, because it'
68
+ + ' scores the target against the capture and both would be the wrong page.'
69
+ + ` The capture is kept in ${args.runDir} and replays on the next run.`
70
+ + ' Pass --allow-redirect to improve the page the redirect landed on.'
71
+ + IMPROVE_REBOOTSTRAP_RECOVERY, 'improve_capture_redirected');
72
+ };
73
+ export const improveCaptureIdentity = (record) => {
74
+ if (record.input.kind !== 'url')
75
+ return 'image';
76
+ const captured = record.capture?.capturedUrl;
77
+ if (!captured)
78
+ return 'unrecorded';
79
+ const requested = urlIdentity(record.input.value);
80
+ const landed = urlIdentity(captured);
81
+ if (!requested || !landed)
82
+ return 'unrecorded';
83
+ return requested === landed ? 'matched' : 'redirected';
84
+ };
85
+ //# sourceMappingURL=improve-capture-redirect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improve-capture-redirect.js","sourceRoot":"","sources":["../src/improve-capture-redirect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { extractImproveDomInPage } from './improve-core/index.js';
2
+ /**
3
+ * THE WHOLE PAGE'S WORDS, BESIDE A VIEWPORT DOCUMENT THAT DOES NOT MOVE.
4
+ *
5
+ * A kit's `current.domdoc.json` is the plan core's DOM-anchored geometry
6
+ * input: its `canvas` is one viewport, its `layers` are the leaves painted
7
+ * inside it, and the gate, the anchors and the selector map all read them. So
8
+ * it stays a viewport extraction, and the screenshot stays a viewport
9
+ * screenshot — a taller reference image buys the model no extra pixels
10
+ * (measured, `.tmp/site-improve/context-study` finding 6).
11
+ *
12
+ * Only the WORDS gain from the rest of the page, and they gain a lot: measured
13
+ * on 2026-09-02 with the shipped extractor, chargedesk carries 40 characters
14
+ * at the viewport against 1621 for the whole page, 12ui 145 against 1005,
15
+ * hubspot 666 against 6275. So the same extractor runs a SECOND time at
16
+ * `fullPage: true` and its leaves ride along under `words`, projected to the
17
+ * fields the words policy reads (`improvePageWordLeaves`). `canvas` and
18
+ * `layers` are untouched, byte for byte.
19
+ *
20
+ * The hosted capture service writes the identical field
21
+ * (`services/site-capture/render.mjs`), so a kit built on a laptop and one
22
+ * built in the browser ask the model for the same thing.
23
+ */
24
+ export type ImproveFullPageWordsPage = {
25
+ evaluate: (pageFunction: typeof extractImproveDomInPage, arg: {
26
+ fullPage: boolean;
27
+ }) => Promise<unknown>;
28
+ };
29
+ /**
30
+ * @param fullPage Whether the caller already extracted the whole document
31
+ * (`--full-page`). Its `layers` ARE the page, so a second pass would store
32
+ * the same leaves twice.
33
+ *
34
+ * A second pass that throws returns the document exactly as it was: improve
35
+ * ran without this field until today and can still run without it, and a
36
+ * capture is not worth failing over it (CLAUDE.md item 5).
37
+ */
38
+ export declare const withImproveFullPageWords: (args: {
39
+ page: ImproveFullPageWordsPage;
40
+ domDoc: unknown;
41
+ fullPage: boolean;
42
+ }) => Promise<unknown>;
43
+ //# sourceMappingURL=improve-capture-words.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improve-capture-words.d.ts","sourceRoot":"","sources":["../src/improve-capture-words.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAyB,MAAM,yBAAyB,CAAC;AAEzF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,CAAC,YAAY,EAAE,OAAO,uBAAuB,EAAE,GAAG,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1G,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,GAAU,MAAM;IACnD,IAAI,EAAE,wBAAwB,CAAC;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB,KAAG,OAAO,CAAC,OAAO,CAYlB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { extractImproveDomInPage, improvePageWordLeaves } from './improve-core/index.js';
2
+ /**
3
+ * @param fullPage Whether the caller already extracted the whole document
4
+ * (`--full-page`). Its `layers` ARE the page, so a second pass would store
5
+ * the same leaves twice.
6
+ *
7
+ * A second pass that throws returns the document exactly as it was: improve
8
+ * ran without this field until today and can still run without it, and a
9
+ * capture is not worth failing over it (CLAUDE.md item 5).
10
+ */
11
+ export const withImproveFullPageWords = async (args) => {
12
+ const { domDoc } = args;
13
+ if (args.fullPage)
14
+ return domDoc;
15
+ if (!domDoc || typeof domDoc !== 'object' || Array.isArray(domDoc))
16
+ return domDoc;
17
+ try {
18
+ const words = improvePageWordLeaves(await args.page.evaluate(extractImproveDomInPage, { fullPage: true }));
19
+ return words.length > 0 ? { ...domDoc, words } : domDoc;
20
+ }
21
+ catch {
22
+ return domDoc;
23
+ }
24
+ };
25
+ //# sourceMappingURL=improve-capture-words.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improve-capture-words.js","sourceRoot":"","sources":["../src/improve-capture-words.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AA4BzF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAAE,IAI9C,EAAoB,EAAE;IACrB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,MAAM,CAAC;IACjC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAClF,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,qBAAqB,CACjC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CACtE,CAAC;QACF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC,CAAC"}
@@ -1,10 +1,9 @@
1
+ import { type ImproveRetainPolicy } from './improve-core/index.js';
2
+ export { DEFAULT_IMPROVE_RETAIN, IMPROVE_DIRECTION_MAX_CHARACTERS, IMPROVE_DIRECTION_TRIM_HINT, IMPROVE_RETAIN_ALL_KEPT_REFUSAL, IMPROVE_RETAIN_FACETS, improveRetainFacetLabel, improveRetainFlag, improveRetainKeeps, improveRetainKeepsEverything, improveRetainMode, type ImproveRetainFacet, type ImproveRetainPolicy, } from './improve-core/index.js';
1
3
  /**
2
- * F9 found that detailed, style-anchored direction reliably beats a vague
3
- * "make it better" instruction. Naming an empty or thin region as the defect
4
- * did the opposite: the image model filled it with invented product content.
4
+ * The core refuses with its own error because it also runs in the browser; the
5
+ * CLI restates that refusal as a `CliRefusal` so the run journal keeps
6
+ * classifying "refused, nothing bought" by `error_class` rather than by prose.
5
7
  */
6
- export declare const IMPROVE_NO_INVENTION_CLAUSE = "Keep all real content, data, and controls; invent nothing.";
7
- /** The real steering limit after reserving room for the mandatory harness. */
8
- export declare const IMPROVE_DIRECTION_MAX_CHARACTERS: number;
9
- export declare const buildImproveConcept: (direction?: string) => string;
8
+ export declare const buildImproveConcept: (direction?: string, retain?: ImproveRetainPolicy) => string;
10
9
  //# sourceMappingURL=improve-concept.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"improve-concept.d.ts","sourceRoot":"","sources":["../src/improve-concept.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,+DAA+D,CAAC;AAexG,8EAA8E;AAC9E,eAAO,MAAM,gCAAgC,QAAuD,CAAC;AAIrG,eAAO,MAAM,mBAAmB,GAAI,YAAY,MAAM,KAAG,MA2BxD,CAAC"}
1
+ {"version":3,"file":"improve-concept.d.ts","sourceRoot":"","sources":["../src/improve-concept.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,sBAAsB,EACtB,gCAAgC,EAChC,2BAA2B,EAC3B,+BAA+B,EAC/B,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,4BAA4B,EAC5B,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAC;AAEjC;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,YAAY,MAAM,EAClB,SAAS,mBAAmB,KAC3B,MAOF,CAAC"}