@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,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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"}
@@ -23,6 +23,8 @@ export type ImproveCaptureRedirect = {
23
23
  /** The two URLs when they name different pages, and nothing when they agree. */
24
24
  export declare const improveCaptureRedirect: (record: ImproveRecord) => ImproveCaptureRedirect | undefined;
25
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;
26
28
  /**
27
29
  * The `Captured:` line, in one place, so the kit README and the end-of-run
28
30
  * summary cannot describe the same redirect in two different ways. Absent when
@@ -43,4 +45,21 @@ export declare const assertImproveCaptureNotRedirected: (args: {
43
45
  allowRedirect: boolean;
44
46
  runDir: string;
45
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;
46
65
  //# sourceMappingURL=improve-capture-redirect.d.ts.map
@@ -1 +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;;;;;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,IAaH,CAAC"}
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"}
@@ -32,6 +32,10 @@ export const improveCaptureRedirect = (record) => {
32
32
  };
33
33
  export const IMPROVE_REDIRECT_CAUSE = 'The page redirected, usually an auth gate:'
34
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.';
35
39
  /**
36
40
  * The `Captured:` line, in one place, so the kit README and the end-of-run
37
41
  * summary cannot describe the same redirect in two different ways. Absent when
@@ -63,6 +67,19 @@ export const assertImproveCaptureNotRedirected = (args) => {
63
67
  + ' a page you did not ask for — a coverage gate cannot catch it, because it'
64
68
  + ' scores the target against the capture and both would be the wrong page.'
65
69
  + ` The capture is kept in ${args.runDir} and replays on the next run.`
66
- + ' Pass --allow-redirect to improve the page the redirect landed on.', 'improve_capture_redirected');
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';
67
84
  };
68
85
  //# sourceMappingURL=improve-capture-redirect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"improve-capture-redirect.js","sourceRoot":"","sources":["../src/improve-capture-redirect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAuB9C;;;;;;GAMG;AACH,MAAM,WAAW,GAAG,CAAC,KAAa,EAAsB,EAAE;IACxD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAEF,gFAAgF;AAChF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,MAAqB,EACe,EAAE;IACtC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC;IAC7C,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,gBAAgB,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,CAAC,iBAAiB,IAAI,CAAC,gBAAgB;QAAE,OAAO,SAAS,CAAC;IAC9D,IAAI,iBAAiB,KAAK,gBAAgB;QAAE,OAAO,SAAS,CAAC;IAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,4CAA4C;MAC9E,gFAAgF,CAAC;AAErF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,MAAqB,EAAsB,EAAE;IAClF,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,QAAQ;QACb,CAAC,CAAC,aAAa,QAAQ,CAAC,QAAQ,wBAAwB,QAAQ,CAAC,SAAS,GAAG;cACzE,IAAI,sBAAsB,EAAE;QAChC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,IAIjD,EAAQ,EAAE;IACT,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa;QAAE,OAAO;IAC5C,MAAM,IAAI,UAAU,CAClB,qBAAqB,QAAQ,CAAC,QAAQ,uBAAuB,QAAQ,CAAC,SAAS,GAAG;UAChF,IAAI,sBAAsB,EAAE;UAC5B,6EAA6E;UAC7E,2EAA2E;UAC3E,0EAA0E;UAC1E,2BAA2B,IAAI,CAAC,MAAM,+BAA+B;UACrE,oEAAoE,EACtE,4BAA4B,CAC7B,CAAC;AACJ,CAAC,CAAC"}
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,23 +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
- /**
8
- * The real steering limit after reserving room for the mandatory harness.
9
- *
10
- * The SERVICE bound is `MAX_CREATE_CONCEPT_CHARACTERS` — 1200, on the whole
11
- * concept — and improve does not get to spend all of it: the style preamble,
12
- * the `Direction: ` prefix and the no-invention clause are part of the concept
13
- * it sends, so what is left is the flag's budget. Nothing here can be raised to
14
- * 1200 without dropping the guardrails that keep the draw from inventing UI.
15
- * The number is therefore stated wherever a caller writes a direction — the
16
- * usage line, `improve.md`, and the refusal below, which also names the length
17
- * of what was written (F7).
18
- */
19
- export declare const IMPROVE_DIRECTION_MAX_CHARACTERS: number;
20
- /** Where cut detail belongs, stated once for the refusal and the skill. */
21
- export declare const IMPROVE_DIRECTION_TRIM_HINT: string;
22
- export declare const buildImproveConcept: (direction?: string) => string;
8
+ export declare const buildImproveConcept: (direction?: string, retain?: ImproveRetainPolicy) => string;
23
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":"AASA;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,+DAA+D,CAAC;AAexG;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gCAAgC,QAAuD,CAAC;AAErG,2EAA2E;AAC3E,eAAO,MAAM,2BAA2B,QACG,CAAC;AAI5C,eAAO,MAAM,mBAAmB,GAAI,YAAY,MAAM,KAAG,MAkCxD,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"}
@@ -1,66 +1,19 @@
1
1
  import { CliRefusal } from './cli-refusal.js';
2
- import { conceptCharacterCount, conceptOverLimitMessage, MAX_CONCEPT_CHARACTERS, normalizeConceptText, readConceptValue, } from './concept-input.js';
2
+ import { buildImproveConcept as buildConcept, isImproveRefusal, } from './improve-core/index.js';
3
+ 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, } from './improve-core/index.js';
3
4
  /**
4
- * F9 found that detailed, style-anchored direction reliably beats a vague
5
- * "make it better" instruction. Naming an empty or thin region as the defect
6
- * did the opposite: the image model filled it with invented product content.
5
+ * The core refuses with its own error because it also runs in the browser; the
6
+ * CLI restates that refusal as a `CliRefusal` so the run journal keeps
7
+ * classifying "refused, nothing bought" by `error_class` rather than by prose.
7
8
  */
8
- export const IMPROVE_NO_INVENTION_CLAUSE = 'Keep all real content, data, and controls; invent nothing.';
9
- const IMPROVE_BASE_DIRECTION = [
10
- 'Improve this existing product interface into a polished, production-ready version while preserving its product identity and working structure.',
11
- 'Strengthen visual hierarchy, section rhythm, spacing, alignment, typography, control affordances, surface treatment, and restrained color.',
12
- 'Use a coherent, style-anchored system with precise rhythm, legible type, purposeful states, subtle borders, and depth only where it clarifies hierarchy.',
13
- ].join(' ');
14
- const DIRECTION_PREFIX = 'Direction: ';
15
- const RESERVED_CONCEPT_CHARACTERS = [
16
- IMPROVE_BASE_DIRECTION,
17
- DIRECTION_PREFIX,
18
- IMPROVE_NO_INVENTION_CLAUSE,
19
- ].join('\n\n').length;
20
- /**
21
- * The real steering limit after reserving room for the mandatory harness.
22
- *
23
- * The SERVICE bound is `MAX_CREATE_CONCEPT_CHARACTERS` — 1200, on the whole
24
- * concept — and improve does not get to spend all of it: the style preamble,
25
- * the `Direction: ` prefix and the no-invention clause are part of the concept
26
- * it sends, so what is left is the flag's budget. Nothing here can be raised to
27
- * 1200 without dropping the guardrails that keep the draw from inventing UI.
28
- * The number is therefore stated wherever a caller writes a direction — the
29
- * usage line, `improve.md`, and the refusal below, which also names the length
30
- * of what was written (F7).
31
- */
32
- export const IMPROVE_DIRECTION_MAX_CHARACTERS = MAX_CONCEPT_CHARACTERS - RESERVED_CONCEPT_CHARACTERS;
33
- /** Where cut detail belongs, stated once for the refusal and the skill. */
34
- export const IMPROVE_DIRECTION_TRIM_HINT = 'Keep the intended hierarchy, rhythm, typography,'
35
- + ' surfaces, color, controls, and mood.';
36
- const FABRICATION_TRIGGER = /\b(?:empty|emptiness|underfilled|under-filled|thin[ -]content|lack of content|missing content|dead space|blank (?:area|region|half|section))\b/iu;
37
- export const buildImproveConcept = (direction) => {
38
- const steering = normalizeConceptText(direction ?? '');
39
- if (conceptCharacterCount(steering) > IMPROVE_DIRECTION_MAX_CHARACTERS) {
40
- throw new CliRefusal(conceptOverLimitMessage({
41
- flag: '--direction',
42
- raw: direction ?? '',
43
- normalized: steering,
44
- limit: IMPROVE_DIRECTION_MAX_CHARACTERS,
45
- because: `improve reserves the other ${RESERVED_CONCEPT_CHARACTERS} of the`
46
- + ` ${MAX_CONCEPT_CHARACTERS}-character concept for its style and no-invention`
47
- + ' guardrails, so --direction is what is left.',
48
- trimHint: IMPROVE_DIRECTION_TRIM_HINT,
49
- }), 'improve_direction_too_long');
9
+ export const buildImproveConcept = (direction, retain) => {
10
+ try {
11
+ return buildConcept(direction, retain);
50
12
  }
51
- if (FABRICATION_TRIGGER.test(steering)) {
52
- throw new CliRefusal('--direction must describe the intended style and hierarchy, not emptiness or thin content;'
53
- + ' naming a content void invites fabricated UI.', 'improve_direction_emptiness');
13
+ catch (error) {
14
+ if (isImproveRefusal(error))
15
+ throw new CliRefusal(error.message, error.code, { cause: error });
16
+ throw error;
54
17
  }
55
- const concept = [
56
- IMPROVE_BASE_DIRECTION,
57
- ...(steering ? [`${DIRECTION_PREFIX}${steering}`] : []),
58
- IMPROVE_NO_INVENTION_CLAUSE,
59
- ].join('\n\n');
60
- return readConceptValue({
61
- value: concept,
62
- flag: '--direction',
63
- trimHint: IMPROVE_DIRECTION_TRIM_HINT,
64
- });
65
18
  };
66
19
  //# sourceMappingURL=improve-concept.js.map