@12ui/design 0.2.57 → 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 (400) 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 +84 -2
  6. package/dist/branch-client.d.ts.map +1 -1
  7. package/dist/branch-client.js +30 -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 +2 -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 +76 -33
  18. package/dist/cli-convert-command.js.map +1 -1
  19. package/dist/cli-corpus-command.d.ts.map +1 -1
  20. package/dist/cli-corpus-command.js +0 -3
  21. package/dist/cli-corpus-command.js.map +1 -1
  22. package/dist/cli-draft-command.d.ts +9 -0
  23. package/dist/cli-draft-command.d.ts.map +1 -1
  24. package/dist/cli-draft-command.js +26 -1
  25. package/dist/cli-draft-command.js.map +1 -1
  26. package/dist/cli-help/design.d.ts +7 -4
  27. package/dist/cli-help/design.d.ts.map +1 -1
  28. package/dist/cli-help/design.js +18 -5
  29. package/dist/cli-help/design.js.map +1 -1
  30. package/dist/cli-help/index.d.ts +9 -6
  31. package/dist/cli-help/index.d.ts.map +1 -1
  32. package/dist/cli-help/meta.d.ts +2 -2
  33. package/dist/cli-help/meta.d.ts.map +1 -1
  34. package/dist/cli-help/meta.js +4 -1
  35. package/dist/cli-help/meta.js.map +1 -1
  36. package/dist/cli-improve-command.d.ts.map +1 -1
  37. package/dist/cli-improve-command.js +215 -33
  38. package/dist/cli-improve-command.js.map +1 -1
  39. package/dist/cli-redesign-command.d.ts.map +1 -1
  40. package/dist/cli-redesign-command.js +97 -24
  41. package/dist/cli-redesign-command.js.map +1 -1
  42. package/dist/cli-run.d.ts.map +1 -1
  43. package/dist/cli-run.js +13 -3
  44. package/dist/cli-run.js.map +1 -1
  45. package/dist/cli-spend-command.d.ts +12 -1
  46. package/dist/cli-spend-command.d.ts.map +1 -1
  47. package/dist/cli-spend-command.js +94 -2
  48. package/dist/cli-spend-command.js.map +1 -1
  49. package/dist/cli-usage.js +5 -5
  50. package/dist/cli-usage.js.map +1 -1
  51. package/dist/concept-input.d.ts +6 -77
  52. package/dist/concept-input.d.ts.map +1 -1
  53. package/dist/concept-input.js +6 -87
  54. package/dist/concept-input.js.map +1 -1
  55. package/dist/conversion-client.d.ts +68 -17
  56. package/dist/conversion-client.d.ts.map +1 -1
  57. package/dist/conversion-client.js +170 -78
  58. package/dist/conversion-client.js.map +1 -1
  59. package/dist/corpus-client.d.ts.map +1 -1
  60. package/dist/corpus-client.js +0 -3
  61. package/dist/corpus-client.js.map +1 -1
  62. package/dist/draft-run.d.ts +6 -0
  63. package/dist/draft-run.d.ts.map +1 -1
  64. package/dist/draft-run.js +12 -2
  65. package/dist/draft-run.js.map +1 -1
  66. package/dist/hosted-draft-identity.d.ts +8 -0
  67. package/dist/hosted-draft-identity.d.ts.map +1 -1
  68. package/dist/hosted-draft-identity.js +1 -0
  69. package/dist/hosted-draft-identity.js.map +1 -1
  70. package/dist/improve-added-specs.d.ts +12 -40
  71. package/dist/improve-added-specs.d.ts.map +1 -1
  72. package/dist/improve-added-specs.js +63 -172
  73. package/dist/improve-added-specs.js.map +1 -1
  74. package/dist/improve-artifact-writer.d.ts +13 -0
  75. package/dist/improve-artifact-writer.d.ts.map +1 -0
  76. package/dist/improve-artifact-writer.js +27 -0
  77. package/dist/improve-artifact-writer.js.map +1 -0
  78. package/dist/improve-bootstrap-history.d.ts +21 -0
  79. package/dist/improve-bootstrap-history.d.ts.map +1 -0
  80. package/dist/improve-bootstrap-history.js +43 -0
  81. package/dist/improve-bootstrap-history.js.map +1 -0
  82. package/dist/improve-branch-stage.d.ts +10 -0
  83. package/dist/improve-branch-stage.d.ts.map +1 -0
  84. package/dist/improve-branch-stage.js +325 -0
  85. package/dist/improve-branch-stage.js.map +1 -0
  86. package/dist/improve-capture-redirect.d.ts +19 -0
  87. package/dist/improve-capture-redirect.d.ts.map +1 -1
  88. package/dist/improve-capture-redirect.js +18 -1
  89. package/dist/improve-capture-redirect.js.map +1 -1
  90. package/dist/improve-capture-words.d.ts +43 -0
  91. package/dist/improve-capture-words.d.ts.map +1 -0
  92. package/dist/improve-capture-words.js +25 -0
  93. package/dist/improve-capture-words.js.map +1 -0
  94. package/dist/improve-concept.d.ts +6 -20
  95. package/dist/improve-concept.d.ts.map +1 -1
  96. package/dist/improve-concept.js +12 -59
  97. package/dist/improve-concept.js.map +1 -1
  98. package/dist/improve-conversion-attempts.d.ts +12 -4
  99. package/dist/improve-conversion-attempts.d.ts.map +1 -1
  100. package/dist/improve-conversion-attempts.js.map +1 -1
  101. package/dist/improve-conversion-stage.d.ts +13 -2
  102. package/dist/improve-conversion-stage.d.ts.map +1 -1
  103. package/dist/improve-conversion-stage.js +211 -20
  104. package/dist/improve-conversion-stage.js.map +1 -1
  105. package/dist/improve-convert-progress.d.ts +10 -2
  106. package/dist/improve-convert-progress.d.ts.map +1 -1
  107. package/dist/improve-convert-progress.js +7 -3
  108. package/dist/improve-convert-progress.js.map +1 -1
  109. package/dist/improve-convert-resilience.d.ts +60 -13
  110. package/dist/improve-convert-resilience.d.ts.map +1 -1
  111. package/dist/improve-convert-resilience.js +85 -22
  112. package/dist/improve-convert-resilience.js.map +1 -1
  113. package/dist/improve-core/concept-input.d.ts +80 -0
  114. package/dist/improve-core/concept-input.d.ts.map +1 -0
  115. package/dist/improve-core/concept-input.js +92 -0
  116. package/dist/improve-core/concept-input.js.map +1 -0
  117. package/dist/improve-core/improve-added-specs.d.ts +62 -0
  118. package/dist/improve-core/improve-added-specs.d.ts.map +1 -0
  119. package/dist/improve-core/improve-added-specs.js +160 -0
  120. package/dist/improve-core/improve-added-specs.js.map +1 -0
  121. package/dist/improve-core/improve-artifacts.d.ts +18 -0
  122. package/dist/improve-core/improve-artifacts.d.ts.map +1 -0
  123. package/dist/improve-core/improve-artifacts.js +4 -0
  124. package/dist/improve-core/improve-artifacts.js.map +1 -0
  125. package/dist/improve-core/improve-concept.d.ts +7 -0
  126. package/dist/improve-core/improve-concept.d.ts.map +1 -0
  127. package/dist/improve-core/improve-concept.js +185 -0
  128. package/dist/improve-core/improve-concept.js.map +1 -0
  129. package/dist/improve-core/improve-discovery.d.ts +84 -0
  130. package/dist/improve-core/improve-discovery.d.ts.map +1 -0
  131. package/dist/improve-core/improve-discovery.js +154 -0
  132. package/dist/improve-core/improve-discovery.js.map +1 -0
  133. package/dist/improve-core/improve-dom-anchor.d.ts.map +1 -0
  134. package/dist/{improve-dom-anchor.js → improve-core/improve-dom-anchor.js} +2 -0
  135. package/dist/improve-core/improve-dom-anchor.js.map +1 -0
  136. package/dist/improve-core/improve-dom-diff.d.ts +59 -0
  137. package/dist/improve-core/improve-dom-diff.d.ts.map +1 -0
  138. package/dist/improve-core/improve-dom-diff.js +151 -0
  139. package/dist/improve-core/improve-dom-diff.js.map +1 -0
  140. package/dist/improve-core/improve-dom-extract.d.ts.map +1 -0
  141. package/dist/{improve-dom-extract.js → improve-core/improve-dom-extract.js} +2 -0
  142. package/dist/improve-core/improve-dom-extract.js.map +1 -0
  143. package/dist/improve-core/improve-dom-gate.d.ts +49 -0
  144. package/dist/improve-core/improve-dom-gate.d.ts.map +1 -0
  145. package/dist/improve-core/improve-dom-gate.js +99 -0
  146. package/dist/improve-core/improve-dom-gate.js.map +1 -0
  147. package/dist/improve-core/improve-dom-neighbour.d.ts.map +1 -0
  148. package/dist/{improve-dom-neighbour.js → improve-core/improve-dom-neighbour.js} +2 -0
  149. package/dist/improve-core/improve-dom-neighbour.js.map +1 -0
  150. package/dist/improve-core/improve-dom-scale.d.ts.map +1 -0
  151. package/dist/{improve-dom-scale.js → improve-core/improve-dom-scale.js} +2 -0
  152. package/dist/improve-core/improve-dom-scale.js.map +1 -0
  153. package/dist/improve-core/improve-icon-svg.d.ts +29 -0
  154. package/dist/improve-core/improve-icon-svg.d.ts.map +1 -0
  155. package/dist/{improve-icon-svg.js → improve-core/improve-icon-svg.js} +2 -0
  156. package/dist/improve-core/improve-icon-svg.js.map +1 -0
  157. package/dist/improve-core/improve-kit-asset-model.d.ts +177 -0
  158. package/dist/improve-core/improve-kit-asset-model.d.ts.map +1 -0
  159. package/dist/improve-core/improve-kit-asset-model.js +269 -0
  160. package/dist/improve-core/improve-kit-asset-model.js.map +1 -0
  161. package/dist/improve-core/improve-layerdoc-diff.d.ts.map +1 -0
  162. package/dist/{improve-layerdoc-diff.js → improve-core/improve-layerdoc-diff.js} +2 -0
  163. package/dist/improve-core/improve-layerdoc-diff.js.map +1 -0
  164. package/dist/{improve-layerdoc-types.d.ts → improve-core/improve-layerdoc-types.d.ts} +9 -0
  165. package/dist/improve-core/improve-layerdoc-types.d.ts.map +1 -0
  166. package/dist/improve-core/improve-layerdoc-types.js +4 -0
  167. package/dist/improve-core/improve-layerdoc-types.js.map +1 -0
  168. package/dist/improve-core/improve-page-words.d.ts +180 -0
  169. package/dist/improve-core/improve-page-words.d.ts.map +1 -0
  170. package/dist/improve-core/improve-page-words.js +303 -0
  171. package/dist/improve-core/improve-page-words.js.map +1 -0
  172. package/dist/{improve-plan-annotated-render.d.ts → improve-core/improve-plan-annotated-render.d.ts} +6 -1
  173. package/dist/improve-core/improve-plan-annotated-render.d.ts.map +1 -0
  174. package/dist/{improve-plan-annotated-render.js → improve-core/improve-plan-annotated-render.js} +56 -28
  175. package/dist/{improve-plan-annotated-render.js.map → improve-core/improve-plan-annotated-render.js.map} +1 -1
  176. package/dist/improve-core/improve-plan-annotator.d.ts +34 -0
  177. package/dist/improve-core/improve-plan-annotator.d.ts.map +1 -0
  178. package/dist/improve-core/improve-plan-annotator.js +52 -0
  179. package/dist/improve-core/improve-plan-annotator.js.map +1 -0
  180. package/dist/{improve-plan-render.d.ts → improve-core/improve-plan-render.d.ts} +2 -1
  181. package/dist/improve-core/improve-plan-render.d.ts.map +1 -0
  182. package/dist/{improve-plan-render.js → improve-core/improve-plan-render.js} +7 -1
  183. package/dist/improve-core/improve-plan-render.js.map +1 -0
  184. package/dist/improve-core/improve-plan-vector-keep.d.ts +29 -0
  185. package/dist/improve-core/improve-plan-vector-keep.d.ts.map +1 -0
  186. package/dist/improve-core/improve-plan-vector-keep.js +68 -0
  187. package/dist/improve-core/improve-plan-vector-keep.js.map +1 -0
  188. package/dist/{improve-raster-layers-section.d.ts → improve-core/improve-raster-layers-section.d.ts} +9 -1
  189. package/dist/improve-core/improve-raster-layers-section.d.ts.map +1 -0
  190. package/dist/{improve-raster-layers-section.js → improve-core/improve-raster-layers-section.js} +5 -2
  191. package/dist/improve-core/improve-raster-layers-section.js.map +1 -0
  192. package/dist/improve-core/improve-refusal.d.ts +6 -0
  193. package/dist/improve-core/improve-refusal.d.ts.map +1 -0
  194. package/dist/improve-core/improve-refusal.js +27 -0
  195. package/dist/improve-core/improve-refusal.js.map +1 -0
  196. package/dist/improve-core/improve-retain.d.ts +121 -0
  197. package/dist/improve-core/improve-retain.d.ts.map +1 -0
  198. package/dist/improve-core/improve-retain.js +115 -0
  199. package/dist/improve-core/improve-retain.js.map +1 -0
  200. package/dist/improve-core/improve-site-plan.d.ts +75 -0
  201. package/dist/improve-core/improve-site-plan.d.ts.map +1 -0
  202. package/dist/improve-core/improve-site-plan.js +135 -0
  203. package/dist/improve-core/improve-site-plan.js.map +1 -0
  204. package/dist/improve-core/improve-site-shell.d.ts +56 -0
  205. package/dist/improve-core/improve-site-shell.d.ts.map +1 -0
  206. package/dist/improve-core/improve-site-shell.js +152 -0
  207. package/dist/improve-core/improve-site-shell.js.map +1 -0
  208. package/dist/improve-core/improve-site-tokens.d.ts +44 -0
  209. package/dist/improve-core/improve-site-tokens.d.ts.map +1 -0
  210. package/dist/improve-core/improve-site-tokens.js +87 -0
  211. package/dist/improve-core/improve-site-tokens.js.map +1 -0
  212. package/dist/improve-core/improve-source-hints.d.ts +25 -0
  213. package/dist/improve-core/improve-source-hints.d.ts.map +1 -0
  214. package/dist/improve-core/improve-source-hints.js +17 -0
  215. package/dist/improve-core/improve-source-hints.js.map +1 -0
  216. package/dist/improve-core/improve-token-patch.d.ts.map +1 -0
  217. package/dist/{improve-token-patch.js → improve-core/improve-token-patch.js} +2 -0
  218. package/dist/improve-core/improve-token-patch.js.map +1 -0
  219. package/dist/improve-core/index.d.ts +47 -0
  220. package/dist/improve-core/index.d.ts.map +1 -0
  221. package/dist/improve-core/index.js +49 -0
  222. package/dist/improve-core/index.js.map +1 -0
  223. package/dist/improve-delivery-stages.d.ts +6 -0
  224. package/dist/improve-delivery-stages.d.ts.map +1 -1
  225. package/dist/improve-delivery-stages.js +87 -6
  226. package/dist/improve-delivery-stages.js.map +1 -1
  227. package/dist/improve-dom-diff.d.ts +8 -24
  228. package/dist/improve-dom-diff.d.ts.map +1 -1
  229. package/dist/improve-dom-diff.js +23 -123
  230. package/dist/improve-dom-diff.js.map +1 -1
  231. package/dist/improve-dom-gate.d.ts +1 -18
  232. package/dist/improve-dom-gate.d.ts.map +1 -1
  233. package/dist/improve-dom-gate.js +1 -46
  234. package/dist/improve-dom-gate.js.map +1 -1
  235. package/dist/improve-generation-stages.d.ts +0 -2
  236. package/dist/improve-generation-stages.d.ts.map +1 -1
  237. package/dist/improve-generation-stages.js +162 -15
  238. package/dist/improve-generation-stages.js.map +1 -1
  239. package/dist/improve-kit-assets.d.ts +8 -116
  240. package/dist/improve-kit-assets.d.ts.map +1 -1
  241. package/dist/improve-kit-assets.js +9 -229
  242. package/dist/improve-kit-assets.js.map +1 -1
  243. package/dist/improve-kit-readme.d.ts +4 -0
  244. package/dist/improve-kit-readme.d.ts.map +1 -1
  245. package/dist/improve-kit-readme.js +57 -16
  246. package/dist/improve-kit-readme.js.map +1 -1
  247. package/dist/improve-kit-stall.d.ts +3 -1
  248. package/dist/improve-kit-stall.d.ts.map +1 -1
  249. package/dist/improve-kit-stall.js +46 -14
  250. package/dist/improve-kit-stall.js.map +1 -1
  251. package/dist/improve-kit-status.d.ts.map +1 -1
  252. package/dist/improve-kit-status.js +8 -3
  253. package/dist/improve-kit-status.js.map +1 -1
  254. package/dist/improve-options.d.ts +8 -0
  255. package/dist/improve-options.d.ts.map +1 -1
  256. package/dist/improve-options.js +92 -12
  257. package/dist/improve-options.js.map +1 -1
  258. package/dist/improve-passthrough-flags.d.ts +8 -0
  259. package/dist/improve-passthrough-flags.d.ts.map +1 -0
  260. package/dist/improve-passthrough-flags.js +11 -0
  261. package/dist/improve-passthrough-flags.js.map +1 -0
  262. package/dist/improve-plan-annotator.d.ts +8 -2
  263. package/dist/improve-plan-annotator.d.ts.map +1 -1
  264. package/dist/improve-plan-annotator.js +35 -38
  265. package/dist/improve-plan-annotator.js.map +1 -1
  266. package/dist/improve-pricing-plan.d.ts +3 -0
  267. package/dist/improve-pricing-plan.d.ts.map +1 -1
  268. package/dist/improve-pricing-plan.js +33 -5
  269. package/dist/improve-pricing-plan.js.map +1 -1
  270. package/dist/improve-recheck.d.ts +9 -0
  271. package/dist/improve-recheck.d.ts.map +1 -0
  272. package/dist/improve-recheck.js +200 -0
  273. package/dist/improve-recheck.js.map +1 -0
  274. package/dist/improve-reset.d.ts.map +1 -1
  275. package/dist/improve-reset.js +11 -0
  276. package/dist/improve-reset.js.map +1 -1
  277. package/dist/improve-run-summary.d.ts +6 -0
  278. package/dist/improve-run-summary.d.ts.map +1 -1
  279. package/dist/improve-run-summary.js +29 -5
  280. package/dist/improve-run-summary.js.map +1 -1
  281. package/dist/improve-site-plan.d.ts +57 -0
  282. package/dist/improve-site-plan.d.ts.map +1 -0
  283. package/dist/improve-site-plan.js +79 -0
  284. package/dist/improve-site-plan.js.map +1 -0
  285. package/dist/improve-site-shell.d.ts +11 -0
  286. package/dist/improve-site-shell.d.ts.map +1 -0
  287. package/dist/improve-site-shell.js +24 -0
  288. package/dist/improve-site-shell.js.map +1 -0
  289. package/dist/improve-site-stage.d.ts +10 -0
  290. package/dist/improve-site-stage.d.ts.map +1 -0
  291. package/dist/improve-site-stage.js +84 -0
  292. package/dist/improve-site-stage.js.map +1 -0
  293. package/dist/improve-site-tokens.d.ts +9 -0
  294. package/dist/improve-site-tokens.d.ts.map +1 -0
  295. package/dist/improve-site-tokens.js +17 -0
  296. package/dist/improve-site-tokens.js.map +1 -0
  297. package/dist/improve-source-hints.d.ts +3 -12
  298. package/dist/improve-source-hints.d.ts.map +1 -1
  299. package/dist/improve-source-hints.js +4 -5
  300. package/dist/improve-source-hints.js.map +1 -1
  301. package/dist/improve-spend-ledger.d.ts +69 -0
  302. package/dist/improve-spend-ledger.d.ts.map +1 -0
  303. package/dist/improve-spend-ledger.js +118 -0
  304. package/dist/improve-spend-ledger.js.map +1 -0
  305. package/dist/improve-stage-runners.d.ts +5 -2
  306. package/dist/improve-stage-runners.d.ts.map +1 -1
  307. package/dist/improve-stage-runners.js +5 -2
  308. package/dist/improve-stage-runners.js.map +1 -1
  309. package/dist/improve-stage-shared.d.ts +10 -1
  310. package/dist/improve-stage-shared.d.ts.map +1 -1
  311. package/dist/improve-stage-shared.js.map +1 -1
  312. package/dist/improve-stop-handler.d.ts +15 -0
  313. package/dist/improve-stop-handler.d.ts.map +1 -1
  314. package/dist/improve-stop-handler.js +74 -3
  315. package/dist/improve-stop-handler.js.map +1 -1
  316. package/dist/improve-terminal-event.d.ts.map +1 -1
  317. package/dist/improve-terminal-event.js +7 -4
  318. package/dist/improve-terminal-event.js.map +1 -1
  319. package/dist/improve-workspace.d.ts +198 -2
  320. package/dist/improve-workspace.d.ts.map +1 -1
  321. package/dist/improve-workspace.js +249 -92
  322. package/dist/improve-workspace.js.map +1 -1
  323. package/dist/legacy-skill-catalog.d.ts.map +1 -1
  324. package/dist/legacy-skill-catalog.js +79 -0
  325. package/dist/legacy-skill-catalog.js.map +1 -1
  326. package/dist/mcp-convert.js +1 -1
  327. package/dist/mcp-convert.js.map +1 -1
  328. package/dist/mcp-tool-definitions.js +1 -1
  329. package/dist/mcp-tool-definitions.js.map +1 -1
  330. package/dist/mcp-tool-handler.d.ts.map +1 -1
  331. package/dist/mcp-tool-handler.js +0 -3
  332. package/dist/mcp-tool-handler.js.map +1 -1
  333. package/dist/redesign-capture.d.ts +145 -15
  334. package/dist/redesign-capture.d.ts.map +1 -1
  335. package/dist/redesign-capture.js +182 -71
  336. package/dist/redesign-capture.js.map +1 -1
  337. package/dist/redesign-workspace.d.ts +13 -0
  338. package/dist/redesign-workspace.d.ts.map +1 -1
  339. package/dist/redesign-workspace.js +14 -0
  340. package/dist/redesign-workspace.js.map +1 -1
  341. package/dist/responsive-alternative-materializer.d.ts +8 -3
  342. package/dist/responsive-alternative-materializer.d.ts.map +1 -1
  343. package/dist/responsive-alternative-materializer.js +68 -51
  344. package/dist/responsive-alternative-materializer.js.map +1 -1
  345. package/dist/result-integrity.d.ts +38 -0
  346. package/dist/result-integrity.d.ts.map +1 -0
  347. package/dist/result-integrity.js +46 -0
  348. package/dist/result-integrity.js.map +1 -0
  349. package/dist/review-edit-source.d.ts.map +1 -1
  350. package/dist/review-edit-source.js +6 -2
  351. package/dist/review-edit-source.js.map +1 -1
  352. package/dist/review-edit.js +2 -2
  353. package/dist/review-edit.js.map +1 -1
  354. package/dist/review-prototype-gap.js +1 -1
  355. package/dist/review-prototype-gap.js.map +1 -1
  356. package/dist/spend-run-filter.d.ts +21 -0
  357. package/dist/spend-run-filter.d.ts.map +1 -0
  358. package/dist/spend-run-filter.js +65 -0
  359. package/dist/spend-run-filter.js.map +1 -0
  360. package/dist/spend-scoped-report-lines.d.ts +4 -0
  361. package/dist/spend-scoped-report-lines.d.ts.map +1 -0
  362. package/dist/spend-scoped-report-lines.js +46 -0
  363. package/dist/spend-scoped-report-lines.js.map +1 -0
  364. package/dist/spend-scoped-report.d.ts +28 -0
  365. package/dist/spend-scoped-report.d.ts.map +1 -0
  366. package/dist/spend-scoped-report.js +45 -0
  367. package/dist/spend-scoped-report.js.map +1 -0
  368. package/open-design.json +2 -2
  369. package/package.json +5 -5
  370. package/skills/12ui-design/SKILL.md +8 -4
  371. package/skills/12ui-design/improve.md +50 -3
  372. package/dist/improve-dom-anchor.d.ts.map +0 -1
  373. package/dist/improve-dom-anchor.js.map +0 -1
  374. package/dist/improve-dom-extract.d.ts.map +0 -1
  375. package/dist/improve-dom-extract.js.map +0 -1
  376. package/dist/improve-dom-neighbour.d.ts.map +0 -1
  377. package/dist/improve-dom-neighbour.js.map +0 -1
  378. package/dist/improve-dom-scale.d.ts.map +0 -1
  379. package/dist/improve-dom-scale.js.map +0 -1
  380. package/dist/improve-icon-svg.d.ts +0 -47
  381. package/dist/improve-icon-svg.d.ts.map +0 -1
  382. package/dist/improve-icon-svg.js.map +0 -1
  383. package/dist/improve-layerdoc-diff.d.ts.map +0 -1
  384. package/dist/improve-layerdoc-diff.js.map +0 -1
  385. package/dist/improve-layerdoc-types.d.ts.map +0 -1
  386. package/dist/improve-layerdoc-types.js +0 -2
  387. package/dist/improve-layerdoc-types.js.map +0 -1
  388. package/dist/improve-plan-annotated-render.d.ts.map +0 -1
  389. package/dist/improve-plan-render.d.ts.map +0 -1
  390. package/dist/improve-plan-render.js.map +0 -1
  391. package/dist/improve-raster-layers-section.d.ts.map +0 -1
  392. package/dist/improve-raster-layers-section.js.map +0 -1
  393. package/dist/improve-token-patch.d.ts.map +0 -1
  394. package/dist/improve-token-patch.js.map +0 -1
  395. /package/dist/{improve-dom-anchor.d.ts → improve-core/improve-dom-anchor.d.ts} +0 -0
  396. /package/dist/{improve-dom-extract.d.ts → improve-core/improve-dom-extract.d.ts} +0 -0
  397. /package/dist/{improve-dom-neighbour.d.ts → improve-core/improve-dom-neighbour.d.ts} +0 -0
  398. /package/dist/{improve-dom-scale.d.ts → improve-core/improve-dom-scale.d.ts} +0 -0
  399. /package/dist/{improve-layerdoc-diff.d.ts → improve-core/improve-layerdoc-diff.d.ts} +0 -0
  400. /package/dist/{improve-token-patch.d.ts → improve-core/improve-token-patch.d.ts} +0 -0
@@ -1,5 +1,5 @@
1
1
  import type { ConversionModel } from './conversion-models.js';
2
- import type { ImproveRecord } from './improve-workspace.js';
2
+ import type { ImproveRecord, ImproveResponsiveFallbackOutcome } from './improve-workspace.js';
3
3
  /**
4
4
  * The fused median. It is what the wait was before a retry existed, and it is
5
5
  * still the lower end of the default below.
@@ -21,17 +21,15 @@ export declare const IMPROVE_TEMPORARY_UNAVAILABLE_RETRY_DELAY_MS = 30000;
21
21
  */
22
22
  export declare const improveConvertStallFloorSeconds: (model: ConversionModel) => number;
23
23
  /**
24
- * The DEFAULT bound, which used to be the fused median alone — 300s against a
25
- * standard conversion's own 240s typical wall, a ratio of 1.25. That is inside
26
- * the healthy population by any reading, and a bound that tight was dangerous
27
- * while a stall still bought a second conversion.
24
+ * The DEFAULT no-progress bound. The old 480s standard/pro wall was below all
25
+ * three measured tall landings (655s, 642s, 796s). The 240s standard typical
26
+ * wall gives the same 960s result as the measured maximum with 20% headroom:
27
+ * `ceil(796 * 1.2 / 60) * 60 = 960`, or four typical walls.
28
28
  *
29
- * The bound is twice the model's typical wall, or the fused median, whichever
30
- * is larger. Standard 480s, fast 300s. An explicit `--convert-stall-seconds` is
31
- * still allowed down to the floor — a caller who wants the tighter bound can
32
- * ask for it and owns the consequence. Nothing is re-bought when it passes
33
- * (`improveConvertStallHalted`), so the bound now only decides how long improve
34
- * waits before handing the conversion back to the operator.
29
+ * This is not an absolute completion deadline. The conversion client resets it
30
+ * whenever polling reports a live stage or active lane, so it only halts a
31
+ * conversion that shows no progress. Fast keeps its measured-table envelope
32
+ * (300s); pro shares standard because it has no model-specific wall.
35
33
  */
36
34
  export declare const improveConvertStallDefaultSeconds: (model: ConversionModel) => number;
37
35
  /** The reason a pre-F19 stall abandonment carries, and the prefix that counts them. */
@@ -87,8 +85,20 @@ export type ImproveResumeConversion = {
87
85
  * `fresh-rotated-away` is the only reading that leaves a conversion nothing can
88
86
  * reach, and it now belongs to pre-ledger kits alone. The ledger is what ended
89
87
  * it: the nonce is on the record before the conversion is dispatched.
88
+ *
89
+ * `inFlight` disqualifies the FIRST reading, and only a caller still inside the
90
+ * convert stage may set it. Such a caller knows something the record cannot:
91
+ * whatever `convert` block it holds settled an EARLIER conversion, because this
92
+ * one has not returned. `--fresh` clears that block durably inside the stage, so
93
+ * the only way to still be reading it is a copy that predates the clear — and
94
+ * answering "settled" off it promises a stopped lane a free replay of a
95
+ * conversion it walked away from, while the one it is still paying for goes
96
+ * unnamed. Silence there is not a loss: `plan/STALL.md` names the hosted run and
97
+ * prints the `resume` that collects it either way.
90
98
  */
91
- export declare const improveResumeConversion: (record: ImproveRecord) => ImproveResumeConversion | undefined;
99
+ export declare const improveResumeConversion: (record: ImproveRecord, context?: {
100
+ inFlight?: boolean;
101
+ }) => ImproveResumeConversion | undefined;
92
102
  /**
93
103
  * The wait ended and improve stopped. It bought nothing (F19).
94
104
  *
@@ -121,7 +131,44 @@ export declare const retryImproveTemporarilyUnavailable: <T>(args: {
121
131
  export declare const improveStalled: (error: unknown) => boolean;
122
132
  export declare const improveConversionIdFromText: (value: string) => string | undefined;
123
133
  export declare const recordedImproveConversionId: (record: ImproveRecord) => Promise<string | undefined>;
124
- export declare const responsiveFallbackReason: (error: unknown) => string | undefined;
134
+ /**
135
+ * How the responsive export ended. Three different events, three different
136
+ * sentences, and the kit has to name the right one (F34).
137
+ *
138
+ * - `server-failed` — the service reported the conversion `failed`. There is
139
+ * nothing running and nothing to wait for; the reason is the service's own.
140
+ * - `incomplete-viewports` — it produced some viewports and not all of them.
141
+ * - `deadline` — it was STILL RUNNING when the bound expired. Only this one
142
+ * may say "did not settle before the deadline", and only this one leaves a
143
+ * conversion worth resuming later.
144
+ */
145
+ export type ImproveResponsiveFallback = {
146
+ outcome: ImproveResponsiveFallbackOutcome;
147
+ /** The sentence improve.json, the README, STALL.md and the summary all carry. */
148
+ warning: string;
149
+ };
150
+ /**
151
+ * Why the run derived fixed-layout HTML instead — or `undefined` when the error
152
+ * is not about the responsive export at all, in which case it must keep
153
+ * throwing rather than be absorbed into a fallback.
154
+ *
155
+ * `serviceStage` is the newest stage the service reported over the wait. The
156
+ * mailchimp app kit is why it is a parameter: its journal records `failed` at
157
+ * 269s under a 480s bound, and the CLI — classifying on the error TEXT alone,
158
+ * which matched a "responsive html export … failed" phrase against a branch
159
+ * that wrote deadline wording — told the reader the export had overrun a
160
+ * deadline it never reached. A stage the service declares outranks any reading
161
+ * of prose.
162
+ */
163
+ export declare const responsiveFallbackReason: (error: unknown, context?: {
164
+ serviceStage?: string;
165
+ }) => ImproveResponsiveFallback | undefined;
166
+ /**
167
+ * One word for what happened to the responsive export, so the summary headline,
168
+ * the run summary's detail line and `plan/STALL.md` cannot disagree with the
169
+ * sentence stored beside them.
170
+ */
171
+ export declare const improveResponsiveOutcomeWord: (outcome: ImproveResponsiveFallbackOutcome | undefined) => string;
125
172
  export declare const fixedImproveHtml: (targetDir: string) => Promise<{
126
173
  html: string;
127
174
  assets: string;
@@ -1 +1 @@
1
- {"version":3,"file":"improve-convert-resilience.d.ts","sourceRoot":"","sources":["../src/improve-convert-resilience.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"improve-convert-resilience.d.ts","sourceRoot":"","sources":["../src/improve-convert-resilience.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,16 @@ const UUID = /[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}/iu;
19
19
  */
20
20
  export const IMPROVE_RESPONSIVE_TIMEOUT_MS = CONVERSION_DURATION_HINTS.fused * 1_000;
21
21
  export const IMPROVE_TEMPORARY_UNAVAILABLE_RETRY_DELAY_MS = 30_000;
22
+ /**
23
+ * Standard `convert --output html` walls from the 2026-09-03 tall-landing
24
+ * round: Crisp 655s, Airtable 642s, Calendly 796s. These are a compact
25
+ * population check beside the model table, not a promise that a live run must
26
+ * complete inside the result.
27
+ */
28
+ const IMPROVE_TALL_STANDARD_WALLS_SECONDS = [655, 642, 796];
29
+ const IMPROVE_TALL_WALL_MARGIN = 1.2;
30
+ const roundUpToMinute = (seconds) => Math.ceil(seconds / 60) * 60;
31
+ const improveTallStandardNoProgressBoundSeconds = () => roundUpToMinute(Math.max(...IMPROVE_TALL_STANDARD_WALLS_SECONDS) * IMPROVE_TALL_WALL_MARGIN);
22
32
  /**
23
33
  * The floor `--convert-stall-seconds` refuses below: the conversion's own
24
34
  * typical wall for the model in play. A bound inside the typical window would
@@ -28,19 +38,19 @@ export const IMPROVE_TEMPORARY_UNAVAILABLE_RETRY_DELAY_MS = 30_000;
28
38
  */
29
39
  export const improveConvertStallFloorSeconds = (model) => (model === 'fast' ? CONVERSION_DURATION_HINTS.convertFast : CONVERSION_DURATION_HINTS.convert);
30
40
  /**
31
- * The DEFAULT bound, which used to be the fused median alone — 300s against a
32
- * standard conversion's own 240s typical wall, a ratio of 1.25. That is inside
33
- * the healthy population by any reading, and a bound that tight was dangerous
34
- * while a stall still bought a second conversion.
41
+ * The DEFAULT no-progress bound. The old 480s standard/pro wall was below all
42
+ * three measured tall landings (655s, 642s, 796s). The 240s standard typical
43
+ * wall gives the same 960s result as the measured maximum with 20% headroom:
44
+ * `ceil(796 * 1.2 / 60) * 60 = 960`, or four typical walls.
35
45
  *
36
- * The bound is twice the model's typical wall, or the fused median, whichever
37
- * is larger. Standard 480s, fast 300s. An explicit `--convert-stall-seconds` is
38
- * still allowed down to the floor — a caller who wants the tighter bound can
39
- * ask for it and owns the consequence. Nothing is re-bought when it passes
40
- * (`improveConvertStallHalted`), so the bound now only decides how long improve
41
- * waits before handing the conversion back to the operator.
46
+ * This is not an absolute completion deadline. The conversion client resets it
47
+ * whenever polling reports a live stage or active lane, so it only halts a
48
+ * conversion that shows no progress. Fast keeps its measured-table envelope
49
+ * (300s); pro shares standard because it has no model-specific wall.
42
50
  */
43
- export const improveConvertStallDefaultSeconds = (model) => Math.max(IMPROVE_RESPONSIVE_TIMEOUT_MS / 1_000, 2 * improveConvertStallFloorSeconds(model));
51
+ export const improveConvertStallDefaultSeconds = (model) => (model === 'fast'
52
+ ? Math.max(IMPROVE_RESPONSIVE_TIMEOUT_MS / 1_000, 2 * improveConvertStallFloorSeconds(model))
53
+ : Math.max(improveTallStandardNoProgressBoundSeconds(), 4 * improveConvertStallFloorSeconds(model)));
44
54
  /** The reason a pre-F19 stall abandonment carries, and the prefix that counts them. */
45
55
  export const IMPROVE_CONVERT_STALL_REASON = 'convert stalled';
46
56
  /** The reason `--fresh` writes when it rotates the base key away from a conversion. */
@@ -89,10 +99,20 @@ export const improveConvertRetryKey = (key, index) => (`${key}:stall:${index - 1
89
99
  * `fresh-rotated-away` is the only reading that leaves a conversion nothing can
90
100
  * reach, and it now belongs to pre-ledger kits alone. The ledger is what ended
91
101
  * it: the nonce is on the record before the conversion is dispatched.
102
+ *
103
+ * `inFlight` disqualifies the FIRST reading, and only a caller still inside the
104
+ * convert stage may set it. Such a caller knows something the record cannot:
105
+ * whatever `convert` block it holds settled an EARLIER conversion, because this
106
+ * one has not returned. `--fresh` clears that block durably inside the stage, so
107
+ * the only way to still be reading it is a copy that predates the clear — and
108
+ * answering "settled" off it promises a stopped lane a free replay of a
109
+ * conversion it walked away from, while the one it is still paying for goes
110
+ * unnamed. Silence there is not a loss: `plan/STALL.md` names the hosted run and
111
+ * prints the `resume` that collects it either way.
92
112
  */
93
- export const improveResumeConversion = (record) => {
113
+ export const improveResumeConversion = (record, context = {}) => {
94
114
  const settled = record.convert?.sourceConversionId;
95
- if (settled && UUID.test(settled))
115
+ if (!context.inFlight && settled && UUID.test(settled))
96
116
  return { id: settled, reason: 'settled' };
97
117
  const open = openImproveConversionAttempt(record);
98
118
  if (open) {
@@ -136,7 +156,9 @@ export const improveConvertStallHalted = (args) => new Error(
136
156
  + ` --out-dir ${shellArg(path.join(args.runDir, 'target'))}\n\n`
137
157
  + 'plan/STALL.md names the same conversion and the same commands.'
138
158
  + ' Pass --fresh only to buy another one deliberately.', { cause: args.cause });
139
- const RESPONSIVE_PARTIAL_FAILURE = 'could not be completed for every required viewport size';
159
+ // The one responsive shortfall that still fails: NO layout landed. A run that
160
+ // landed at least one ships degraded, so improve never sees it as an error.
161
+ const RESPONSIVE_NO_LAYOUT_FAILURE = 'no responsive layout could be produced';
140
162
  export const improveErrorText = (error) => {
141
163
  const detail = error;
142
164
  return [
@@ -169,7 +191,7 @@ export const retryImproveTemporarilyUnavailable = async (args) => {
169
191
  * has to be able to say which, and a stall must not overwrite a class the
170
192
  * journal could already read off the error — an HTTP status, a refusal code.
171
193
  */
172
- const STALL_TEXT = /timed out|timeout|deadline|did not settle|has not settled|not settled yet/iu;
194
+ const STALL_TEXT = /timed out|timeout|deadline|did not settle|has not settled|not settled yet|stalled and recoverable/iu;
173
195
  export const improveStalled = (error) => {
174
196
  if (isCliRefusal(error) || isImproveTemporarilyUnavailable(error))
175
197
  return false;
@@ -200,20 +222,61 @@ export const recordedImproveConversionId = async (record) => {
200
222
  }
201
223
  return undefined;
202
224
  };
203
- export const responsiveFallbackReason = (error) => {
225
+ /** The service's own words, reduced to one line the kit can print. */
226
+ const serviceFailureDetail = (error) => {
227
+ const line = improveErrorText(error).split('\n').map((part) => part.trim()).find(Boolean);
228
+ if (!line)
229
+ return 'the service reported no reason';
230
+ return line.replace(/\.$/u, '');
231
+ };
232
+ /**
233
+ * Why the run derived fixed-layout HTML instead — or `undefined` when the error
234
+ * is not about the responsive export at all, in which case it must keep
235
+ * throwing rather than be absorbed into a fallback.
236
+ *
237
+ * `serviceStage` is the newest stage the service reported over the wait. The
238
+ * mailchimp app kit is why it is a parameter: its journal records `failed` at
239
+ * 269s under a 480s bound, and the CLI — classifying on the error TEXT alone,
240
+ * which matched a "responsive html export … failed" phrase against a branch
241
+ * that wrote deadline wording — told the reader the export had overrun a
242
+ * deadline it never reached. A stage the service declares outranks any reading
243
+ * of prose.
244
+ */
245
+ export const responsiveFallbackReason = (error, context = {}) => {
204
246
  if (isImproveTemporarilyUnavailable(error))
205
247
  return undefined;
206
248
  const text = improveErrorText(error);
207
249
  const normalized = text.toLowerCase();
208
- if (normalized.includes(RESPONSIVE_PARTIAL_FAILURE)
250
+ const failedServerSide = context.serviceStage === 'failed';
251
+ const noResponsiveLayout = normalized.includes(RESPONSIVE_NO_LAYOUT_FAILURE);
252
+ const aboutResponsive = noResponsiveLayout
209
253
  || /responsive html export[\s\S]*(?:did not|failed|running|timed out|deadline)/iu.test(text)
210
- || /responsive[\s\S]*(?:timeout|timed out|deadline exceeded)/iu.test(text)) {
211
- return normalized.includes(RESPONSIVE_PARTIAL_FAILURE)
212
- ? 'Responsive HTML could not be completed for every required viewport size.'
213
- : 'Responsive HTML did not settle before the improve stage deadline.';
254
+ || /responsive[\s\S]*(?:timeout|timed out|deadline exceeded)/iu.test(text);
255
+ if (!aboutResponsive && !failedServerSide)
256
+ return undefined;
257
+ if (noResponsiveLayout) {
258
+ return {
259
+ outcome: 'server-failed',
260
+ warning: 'No responsive layout could be produced for this design.',
261
+ };
214
262
  }
215
- return undefined;
263
+ if (failedServerSide) {
264
+ return {
265
+ outcome: 'server-failed',
266
+ warning: `Responsive export failed server-side: ${serviceFailureDetail(error)}.`,
267
+ };
268
+ }
269
+ return {
270
+ outcome: 'deadline',
271
+ warning: 'Responsive HTML did not settle before the improve stage deadline.',
272
+ };
216
273
  };
274
+ /**
275
+ * One word for what happened to the responsive export, so the summary headline,
276
+ * the run summary's detail line and `plan/STALL.md` cannot disagree with the
277
+ * sentence stored beside them.
278
+ */
279
+ export const improveResponsiveOutcomeWord = (outcome) => (outcome === 'server-failed' ? 'failed server-side' : 'stalled');
217
280
  export const fixedImproveHtml = async (targetDir) => {
218
281
  const html = derivedOutputFilePath(targetDir, 'html_fixed');
219
282
  const assets = `${html}.assets`;
@@ -1 +1 @@
1
- {"version":3,"file":"improve-convert-resilience.js","sourceRoot":"","sources":["../src/improve-convert-resilience.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"improve-convert-resilience.js","sourceRoot":"","sources":["../src/improve-convert-resilience.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * One place decides what a concept may be, because the service decides it once.
3
+ *
4
+ * `cleanText` in `workers/api/src/create/validation.ts` collapses every run of
5
+ * whitespace to a single space, trims, and then counts CODE POINTS. Over the
6
+ * limit is rejected with a 400; it is never truncated. Both `POST /api/v1/create`
7
+ * and the same route's `source: "build"` claim (what `12ui branch execute`
8
+ * calls) measure it that way, and the build claim spends a metered plan call
9
+ * the moment it is accepted.
10
+ *
11
+ * The CLI has to measure it identically in both directions. Counting the raw
12
+ * text would refuse a wrapped `--concept-file` the service would have taken,
13
+ * and not counting it at all is how `12ui create claim` used to put an
14
+ * over-length brief on the wire and learn the limit from a 400 (2026-08-12).
15
+ *
16
+ * A CAP NOBODY IS TOLD ABOUT REFUSES EVERY RUN. At 600 this one refused 21 of 21
17
+ * unprompted branch briefs across two trials (2026-08-13 and 2026-08-16) while
18
+ * appearing in no `--help` line and in no skill. Both halves of that were fixed,
19
+ * separately: the limit is now stated everywhere a caller reads before writing a
20
+ * brief — the `create claim` and `branch execute` usage lines, which `--help` and
21
+ * their usage refusals print; `12ui capabilities`; the command templates the
22
+ * skills and the CLI's own next-step hints hand over; and the refusal below —
23
+ * and the number first moved to 1200 on 2026-08-16 after a pre-registered blind
24
+ * A/B measured no quality difference between a skilful <=600 trim and the full
25
+ * brief (`labs/concept-cap-2026-08-16`; the owner raised it because forcing a
26
+ * trim costs agent tokens for nothing). The reasoning, the null result, and the
27
+ * open watch item live at `MAX_CREATE_CONCEPT_CHARACTERS` in
28
+ * workers/api/src/create/contract.ts.
29
+ *
30
+ * NOTHING HERE CLAIMS SHORT BRIEFS DESIGN BETTER. That claim used to ride in the
31
+ * refusal and the data refused to support it, so the refusal states the count,
32
+ * the limit, the trim, and where cut detail belongs — and stops there.
33
+ */
34
+ /**
35
+ * Mirrors `MAX_CREATE_CONCEPT_CHARACTERS` (workers/api/src/create/contract.ts),
36
+ * which is the constant the service actually enforces. `concept-input.test.ts`
37
+ * reads that file and fails if the two drift, because a CLI that measures a
38
+ * DIFFERENT number either refuses work the service would take or puts an
39
+ * over-length brief on the wire. If it is ever raised, the worker deploys first.
40
+ */
41
+ export declare const MAX_CONCEPT_CHARACTERS = 1485;
42
+ /** Exactly the service's normalization, so client and server count one string. */
43
+ export declare const normalizeConceptText: (value: string) => string;
44
+ /** Code points, not UTF-16 units: one emoji is one character to the service. */
45
+ export declare const conceptCharacterCount: (value: string) => number;
46
+ export type ConceptInput = {
47
+ /** Raw text, straight from `--concept` or a `--concept-file` read. */
48
+ value: string;
49
+ /** How to name the flag pair in a refusal, e.g. `--concept`. */
50
+ flag: string;
51
+ /** One clause naming where the cut detail belongs instead. */
52
+ trimHint: string;
53
+ };
54
+ /**
55
+ * The one shape every over-length text refusal takes.
56
+ *
57
+ * A refusal that names only the cap is half a message: the writer knows the
58
+ * text is too long and still has to count it themselves. F7 (wave-2, 2026-09-03)
59
+ * cost two lanes their first command each on `--direction` for exactly that —
60
+ * the refusal named 693 and 1200 and neither of them was the length of what
61
+ * they had written. Every limited text flag now names the count, the limit, the
62
+ * trim, and that nothing was spent.
63
+ */
64
+ export declare const conceptOverLimitMessage: (args: {
65
+ flag: string;
66
+ /** As the caller typed it, so a whitespace-collapse difference can be named. */
67
+ raw: string;
68
+ /** After {@link normalizeConceptText}: the string that would go on the wire. */
69
+ normalized: string;
70
+ limit: number;
71
+ trimHint: string;
72
+ /** Why this flag's limit is not the concept cap, when it is not. */
73
+ because?: string;
74
+ }) => string;
75
+ /**
76
+ * Normalize and measure before anything is sent. Returns the exact text the
77
+ * caller should submit, so what was measured is what goes on the wire.
78
+ */
79
+ export declare const readConceptValue: (input: ConceptInput) => string;
80
+ //# sourceMappingURL=concept-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concept-input.d.ts","sourceRoot":"","sources":["../../src/improve-core/concept-input.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C,kFAAkF;AAClF,eAAO,MAAM,oBAAoB,GAAI,OAAO,MAAM,KAAG,MAA4C,CAAC;AAElG,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,GAAI,OAAO,MAAM,KAAG,MAA2B,CAAC;AAElF,MAAM,MAAM,YAAY,GAAG;IACzB,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,GAAI,MAAM;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,GAAG,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,KAAG,MAcH,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,YAAY,KAAG,MAYtD,CAAC"}
@@ -0,0 +1,92 @@
1
+ // GENERATED — do not edit. Copied verbatim from
2
+ // packages/layerdoc/src/improve-core by scripts/sync-improve-core.mjs.
3
+ /**
4
+ * One place decides what a concept may be, because the service decides it once.
5
+ *
6
+ * `cleanText` in `workers/api/src/create/validation.ts` collapses every run of
7
+ * whitespace to a single space, trims, and then counts CODE POINTS. Over the
8
+ * limit is rejected with a 400; it is never truncated. Both `POST /api/v1/create`
9
+ * and the same route's `source: "build"` claim (what `12ui branch execute`
10
+ * calls) measure it that way, and the build claim spends a metered plan call
11
+ * the moment it is accepted.
12
+ *
13
+ * The CLI has to measure it identically in both directions. Counting the raw
14
+ * text would refuse a wrapped `--concept-file` the service would have taken,
15
+ * and not counting it at all is how `12ui create claim` used to put an
16
+ * over-length brief on the wire and learn the limit from a 400 (2026-08-12).
17
+ *
18
+ * A CAP NOBODY IS TOLD ABOUT REFUSES EVERY RUN. At 600 this one refused 21 of 21
19
+ * unprompted branch briefs across two trials (2026-08-13 and 2026-08-16) while
20
+ * appearing in no `--help` line and in no skill. Both halves of that were fixed,
21
+ * separately: the limit is now stated everywhere a caller reads before writing a
22
+ * brief — the `create claim` and `branch execute` usage lines, which `--help` and
23
+ * their usage refusals print; `12ui capabilities`; the command templates the
24
+ * skills and the CLI's own next-step hints hand over; and the refusal below —
25
+ * and the number first moved to 1200 on 2026-08-16 after a pre-registered blind
26
+ * A/B measured no quality difference between a skilful <=600 trim and the full
27
+ * brief (`labs/concept-cap-2026-08-16`; the owner raised it because forcing a
28
+ * trim costs agent tokens for nothing). The reasoning, the null result, and the
29
+ * open watch item live at `MAX_CREATE_CONCEPT_CHARACTERS` in
30
+ * workers/api/src/create/contract.ts.
31
+ *
32
+ * NOTHING HERE CLAIMS SHORT BRIEFS DESIGN BETTER. That claim used to ride in the
33
+ * refusal and the data refused to support it, so the refusal states the count,
34
+ * the limit, the trim, and where cut detail belongs — and stops there.
35
+ */
36
+ /**
37
+ * Mirrors `MAX_CREATE_CONCEPT_CHARACTERS` (workers/api/src/create/contract.ts),
38
+ * which is the constant the service actually enforces. `concept-input.test.ts`
39
+ * reads that file and fails if the two drift, because a CLI that measures a
40
+ * DIFFERENT number either refuses work the service would take or puts an
41
+ * over-length brief on the wire. If it is ever raised, the worker deploys first.
42
+ */
43
+ export const MAX_CONCEPT_CHARACTERS = 1485;
44
+ /** Exactly the service's normalization, so client and server count one string. */
45
+ export const normalizeConceptText = (value) => value.replace(/\s+/gu, ' ').trim();
46
+ /** Code points, not UTF-16 units: one emoji is one character to the service. */
47
+ export const conceptCharacterCount = (value) => [...value].length;
48
+ /**
49
+ * The one shape every over-length text refusal takes.
50
+ *
51
+ * A refusal that names only the cap is half a message: the writer knows the
52
+ * text is too long and still has to count it themselves. F7 (wave-2, 2026-09-03)
53
+ * cost two lanes their first command each on `--direction` for exactly that —
54
+ * the refusal named 693 and 1200 and neither of them was the length of what
55
+ * they had written. Every limited text flag now names the count, the limit, the
56
+ * trim, and that nothing was spent.
57
+ */
58
+ export const conceptOverLimitMessage = (args) => {
59
+ const length = conceptCharacterCount(args.normalized);
60
+ // The raw count is what the caller can see in their editor. Name the counted
61
+ // one when they differ, or the refusal looks like it is off by the newlines.
62
+ const measured = length === conceptCharacterCount(args.raw)
63
+ ? `${length} characters`
64
+ : `${length} characters once its whitespace collapses`;
65
+ return `${args.flag} is ${measured}; the limit is ${args.limit}.`
66
+ + ` Trim ${length - args.limit}.`
67
+ + (args.because ? ` ${args.because}` : '')
68
+ + ` ${args.trimHint}`
69
+ // No quality claim here. The blind A/B behind the 1200 raise found none, so
70
+ // the refusal says what to do and what it cost, which is nothing.
71
+ + ' Nothing was sent and nothing was bought.';
72
+ };
73
+ /**
74
+ * Normalize and measure before anything is sent. Returns the exact text the
75
+ * caller should submit, so what was measured is what goes on the wire.
76
+ */
77
+ export const readConceptValue = (input) => {
78
+ const concept = normalizeConceptText(input.value);
79
+ if (!concept)
80
+ throw new Error(`${input.flag} must not be empty`);
81
+ const length = conceptCharacterCount(concept);
82
+ if (length <= MAX_CONCEPT_CHARACTERS)
83
+ return concept;
84
+ throw new Error(conceptOverLimitMessage({
85
+ flag: input.flag,
86
+ raw: input.value,
87
+ normalized: concept,
88
+ limit: MAX_CONCEPT_CHARACTERS,
89
+ trimHint: input.trimHint,
90
+ }));
91
+ };
92
+ //# sourceMappingURL=concept-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concept-input.js","sourceRoot":"","sources":["../../src/improve-core/concept-input.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,uEAAuE;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAE3C,kFAAkF;AAClF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAElG,gFAAgF;AAChF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC;AAWlF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,IAUvC,EAAU,EAAE;IACX,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACtD,6EAA6E;IAC7E,6EAA6E;IAC7E,MAAM,QAAQ,GAAG,MAAM,KAAK,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC;QACzD,CAAC,CAAC,GAAG,MAAM,aAAa;QACxB,CAAC,CAAC,GAAG,MAAM,2CAA2C,CAAC;IACzD,OAAO,GAAG,IAAI,CAAC,IAAI,OAAO,QAAQ,kBAAkB,IAAI,CAAC,KAAK,GAAG;UAC7D,SAAS,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG;UAC/B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;UACxC,IAAI,IAAI,CAAC,QAAQ,EAAE;QACrB,4EAA4E;QAC5E,kEAAkE;UAChE,2CAA2C,CAAC;AAClD,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAmB,EAAU,EAAE;IAC9D,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,oBAAoB,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,MAAM,IAAI,sBAAsB;QAAE,OAAO,OAAO,CAAC;IACrD,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC;QACtC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,GAAG,EAAE,KAAK,CAAC,KAAK;QAChB,UAAU,EAAE,OAAO;QACnB,KAAK,EAAE,sBAAsB;QAC7B,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC,CAAC,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,62 @@
1
+ import type { ImproveDescribePath } from './improve-artifacts.js';
2
+ import type { LayerDiffResult, LayerLeaf } from './improve-layerdoc-types.js';
3
+ type HierarchyLeaf = {
4
+ leaf: LayerLeaf;
5
+ parentPath: string[];
6
+ };
7
+ export type AddedElementSpec = {
8
+ designIndex: number;
9
+ insertion: string;
10
+ markdown: string;
11
+ asset?: {
12
+ kind: string;
13
+ path?: string;
14
+ destination?: string;
15
+ resolvable: boolean;
16
+ /** How the named file may be used: an external file, or inline only (F30). */
17
+ usage?: 'img' | 'inline';
18
+ /** The `currentColor` sibling, when the icon has both variants. */
19
+ inline?: {
20
+ path: string;
21
+ destination: string;
22
+ };
23
+ /** One sentence naming which file goes where. */
24
+ colorNote?: string;
25
+ };
26
+ };
27
+ /**
28
+ * Resolving an extracted raster means looking at whatever the conversion left
29
+ * beside the target design — a manifest and a directory in the CLI, an asset
30
+ * index in the browser — so the lookup is injected and the core only decides
31
+ * which artifact ids to ask for, in which order, and what an unresolved one
32
+ * says in the plan.
33
+ */
34
+ export type ImproveAssetResolver = (artifactIds: readonly string[]) => AddedElementSpec['asset'] | undefined;
35
+ /** Flatten target leaves while retaining group ancestry for sibling placement. */
36
+ export declare const flattenImproveHierarchy: (document: unknown) => HierarchyLeaf[];
37
+ /** Preference order for the extracted artifact a plan should hand a coder. */
38
+ export declare const improveArtifactIds: (leaf: LayerLeaf) => string[];
39
+ /**
40
+ * Every target leaf the diff never matched, with the full specification a coder
41
+ * needs to build it: where it goes relative to a real selector, its complete
42
+ * typography and style map, and the asset it references. Inline `iconSvg` is
43
+ * materialized into the returned `files` map rather than written here, so the
44
+ * CLI and the browser produce the same bytes at the same relative path.
45
+ */
46
+ export declare const buildImproveAddedElementSpecs: (args: {
47
+ targetDoc: unknown;
48
+ normalizedTarget: readonly LayerLeaf[];
49
+ before: readonly LayerLeaf[];
50
+ canvas: {
51
+ width: number;
52
+ height: number;
53
+ };
54
+ diff: LayerDiffResult;
55
+ describePath: ImproveDescribePath;
56
+ resolveAsset?: ImproveAssetResolver;
57
+ }) => {
58
+ specs: AddedElementSpec[];
59
+ files: Record<string, string>;
60
+ };
61
+ export {};
62
+ //# sourceMappingURL=improve-added-specs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improve-added-specs.d.ts","sourceRoot":"","sources":["../../src/improve-core/improve-added-specs.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE9E,KAAK,aAAa,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAE/D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,OAAO,CAAC;QACpB,8EAA8E;QAC9E,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;QACzB,mEAAmE;QACnE,MAAM,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/C,iDAAiD;QACjD,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,CACjC,WAAW,EAAE,SAAS,MAAM,EAAE,KAC3B,gBAAgB,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;AAE3C,kFAAkF;AAClF,eAAO,MAAM,uBAAuB,GAAI,UAAU,OAAO,KAAG,aAAa,EAexE,CAAC;AAmDF,8EAA8E;AAC9E,eAAO,MAAM,kBAAkB,GAAI,MAAM,SAAS,KAAG,MAAM,EAe1D,CAAC;AAOF;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B,GAAI,MAAM;IAClD,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IAC7B,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,IAAI,EAAE,eAAe,CAAC;IACtB,YAAY,EAAE,mBAAmB,CAAC;IAClC,YAAY,CAAC,EAAE,oBAAoB,CAAC;CACrC,KAAG;IAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAuE7D,CAAC"}