@12ui/design 0.2.71 → 0.2.73

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 (680) hide show
  1. package/README.md +248 -55
  2. package/SKILL.md +28 -33
  3. package/dist/cli-arguments.d.ts.map +1 -1
  4. package/dist/cli-arguments.js +3 -0
  5. package/dist/cli-arguments.js.map +1 -1
  6. package/dist/cli-branch-command.d.ts.map +1 -1
  7. package/dist/cli-branch-command.js +4 -0
  8. package/dist/cli-branch-command.js.map +1 -1
  9. package/dist/cli-capabilities.d.ts +35 -1
  10. package/dist/cli-capabilities.d.ts.map +1 -1
  11. package/dist/cli-capabilities.js +36 -1
  12. package/dist/cli-capabilities.js.map +1 -1
  13. package/dist/cli-corpus-command.d.ts +5 -4
  14. package/dist/cli-corpus-command.d.ts.map +1 -1
  15. package/dist/cli-corpus-command.js +17 -26
  16. package/dist/cli-corpus-command.js.map +1 -1
  17. package/dist/cli-corpus-run.js +1 -1
  18. package/dist/cli-corpus-run.js.map +1 -1
  19. package/dist/cli-draft-command.js +1 -1
  20. package/dist/cli-draft-command.js.map +1 -1
  21. package/dist/cli-help/design.d.ts +26 -6
  22. package/dist/cli-help/design.d.ts.map +1 -1
  23. package/dist/cli-help/design.js +39 -7
  24. package/dist/cli-help/design.js.map +1 -1
  25. package/dist/cli-help/index.d.ts +206 -7
  26. package/dist/cli-help/index.d.ts.map +1 -1
  27. package/dist/cli-help/index.js +4 -0
  28. package/dist/cli-help/index.js.map +1 -1
  29. package/dist/cli-help/meta.d.ts +1 -1
  30. package/dist/cli-help/meta.d.ts.map +1 -1
  31. package/dist/cli-help/meta.js +2 -1
  32. package/dist/cli-help/meta.js.map +1 -1
  33. package/dist/cli-help/scene.d.ts +96 -0
  34. package/dist/cli-help/scene.d.ts.map +1 -0
  35. package/dist/cli-help/scene.js +162 -0
  36. package/dist/cli-help/scene.js.map +1 -0
  37. package/dist/cli-help/workflow.d.ts +90 -0
  38. package/dist/cli-help/workflow.d.ts.map +1 -0
  39. package/dist/cli-help/workflow.js +89 -0
  40. package/dist/cli-help/workflow.js.map +1 -0
  41. package/dist/cli-open-browser.d.ts +7 -0
  42. package/dist/cli-open-browser.d.ts.map +1 -0
  43. package/dist/cli-open-browser.js +25 -0
  44. package/dist/cli-open-browser.js.map +1 -0
  45. package/dist/cli-prototype-command.d.ts +3 -1
  46. package/dist/cli-prototype-command.d.ts.map +1 -1
  47. package/dist/cli-prototype-command.js +33 -7
  48. package/dist/cli-prototype-command.js.map +1 -1
  49. package/dist/cli-review-command.d.ts.map +1 -1
  50. package/dist/cli-review-command.js +1 -16
  51. package/dist/cli-review-command.js.map +1 -1
  52. package/dist/cli-run.d.ts.map +1 -1
  53. package/dist/cli-run.js +41 -3
  54. package/dist/cli-run.js.map +1 -1
  55. package/dist/cli-scene-command.d.ts +3 -0
  56. package/dist/cli-scene-command.d.ts.map +1 -0
  57. package/dist/cli-scene-command.js +292 -0
  58. package/dist/cli-scene-command.js.map +1 -0
  59. package/dist/cli-usage.d.ts +8 -0
  60. package/dist/cli-usage.d.ts.map +1 -1
  61. package/dist/cli-usage.js +65 -6
  62. package/dist/cli-usage.js.map +1 -1
  63. package/dist/cli-workflow-command.d.ts +8 -0
  64. package/dist/cli-workflow-command.d.ts.map +1 -0
  65. package/dist/cli-workflow-command.js +97 -0
  66. package/dist/cli-workflow-command.js.map +1 -0
  67. package/dist/cli-workspace-command.d.ts +25 -0
  68. package/dist/cli-workspace-command.d.ts.map +1 -0
  69. package/dist/cli-workspace-command.js +95 -0
  70. package/dist/cli-workspace-command.js.map +1 -0
  71. package/dist/config.d.ts +6 -0
  72. package/dist/config.d.ts.map +1 -1
  73. package/dist/config.js +12 -4
  74. package/dist/config.js.map +1 -1
  75. package/dist/corpus-access.d.ts +11 -0
  76. package/dist/corpus-access.d.ts.map +1 -0
  77. package/dist/corpus-access.js +18 -0
  78. package/dist/corpus-access.js.map +1 -0
  79. package/dist/corpus-client.d.ts +11 -11
  80. package/dist/corpus-client.d.ts.map +1 -1
  81. package/dist/corpus-client.js +17 -6
  82. package/dist/corpus-client.js.map +1 -1
  83. package/dist/corpus-inspiration-failure.d.ts +1 -1
  84. package/dist/corpus-inspiration-failure.js +2 -2
  85. package/dist/corpus-inspiration-failure.js.map +1 -1
  86. package/dist/corpus-reference-download-retry.d.ts.map +1 -1
  87. package/dist/corpus-reference-download-retry.js +11 -1
  88. package/dist/corpus-reference-download-retry.js.map +1 -1
  89. package/dist/corpus-request-error.d.ts +2 -0
  90. package/dist/corpus-request-error.d.ts.map +1 -1
  91. package/dist/corpus-request-error.js +2 -0
  92. package/dist/corpus-request-error.js.map +1 -1
  93. package/dist/corpus-retry-guidance.d.ts +5 -0
  94. package/dist/corpus-retry-guidance.d.ts.map +1 -0
  95. package/dist/corpus-retry-guidance.js +18 -0
  96. package/dist/corpus-retry-guidance.js.map +1 -0
  97. package/dist/improve-pricing-plan.d.ts.map +1 -1
  98. package/dist/improve-pricing-plan.js +2 -4
  99. package/dist/improve-pricing-plan.js.map +1 -1
  100. package/dist/index.d.ts +10 -1
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js +10 -1
  103. package/dist/index.js.map +1 -1
  104. package/dist/legacy-skill-catalog.d.ts.map +1 -1
  105. package/dist/legacy-skill-catalog.js +52 -0
  106. package/dist/legacy-skill-catalog.js.map +1 -1
  107. package/dist/mcp-slate-command.d.ts +31 -0
  108. package/dist/mcp-slate-command.d.ts.map +1 -0
  109. package/dist/mcp-slate-command.js +118 -0
  110. package/dist/mcp-slate-command.js.map +1 -0
  111. package/dist/mcp-slate-image.d.ts +22 -0
  112. package/dist/mcp-slate-image.d.ts.map +1 -0
  113. package/dist/mcp-slate-image.js +28 -0
  114. package/dist/mcp-slate-image.js.map +1 -0
  115. package/dist/mcp-slate-latest.d.ts +13 -0
  116. package/dist/mcp-slate-latest.d.ts.map +1 -0
  117. package/dist/mcp-slate-latest.js +34 -0
  118. package/dist/mcp-slate-latest.js.map +1 -0
  119. package/dist/mcp-slate-names.d.ts +25 -0
  120. package/dist/mcp-slate-names.d.ts.map +1 -0
  121. package/dist/mcp-slate-names.js +49 -0
  122. package/dist/mcp-slate-names.js.map +1 -0
  123. package/dist/mcp-slate-resource.d.ts +5 -0
  124. package/dist/mcp-slate-resource.d.ts.map +1 -0
  125. package/dist/mcp-slate-resource.js +37 -0
  126. package/dist/mcp-slate-resource.js.map +1 -0
  127. package/dist/mcp-slate-run.d.ts +41 -0
  128. package/dist/mcp-slate-run.d.ts.map +1 -0
  129. package/dist/mcp-slate-run.js +88 -0
  130. package/dist/mcp-slate-run.js.map +1 -0
  131. package/dist/mcp-slate-tool-defs.d.ts +61 -0
  132. package/dist/mcp-slate-tool-defs.d.ts.map +1 -0
  133. package/dist/mcp-slate-tool-defs.js +247 -0
  134. package/dist/mcp-slate-tool-defs.js.map +1 -0
  135. package/dist/mcp-slate-tools.d.ts +8 -0
  136. package/dist/mcp-slate-tools.d.ts.map +1 -0
  137. package/dist/mcp-slate-tools.js +45 -0
  138. package/dist/mcp-slate-tools.js.map +1 -0
  139. package/dist/mcp-slate-ui-copy.d.ts +134 -0
  140. package/dist/mcp-slate-ui-copy.d.ts.map +1 -0
  141. package/dist/mcp-slate-ui-copy.js +136 -0
  142. package/dist/mcp-slate-ui-copy.js.map +1 -0
  143. package/dist/mcp-slate-ui-script-bridge.d.ts +18 -0
  144. package/dist/mcp-slate-ui-script-bridge.d.ts.map +1 -0
  145. package/dist/mcp-slate-ui-script-bridge.js +137 -0
  146. package/dist/mcp-slate-ui-script-bridge.js.map +1 -0
  147. package/dist/mcp-slate-ui-script-browser.d.ts +12 -0
  148. package/dist/mcp-slate-ui-script-browser.d.ts.map +1 -0
  149. package/dist/mcp-slate-ui-script-browser.js +19 -0
  150. package/dist/mcp-slate-ui-script-browser.js.map +1 -0
  151. package/dist/mcp-slate-ui-script-dialog.d.ts +20 -0
  152. package/dist/mcp-slate-ui-script-dialog.d.ts.map +1 -0
  153. package/dist/mcp-slate-ui-script-dialog.js +332 -0
  154. package/dist/mcp-slate-ui-script-dialog.js.map +1 -0
  155. package/dist/mcp-slate-ui-script-inline.d.ts +10 -0
  156. package/dist/mcp-slate-ui-script-inline.d.ts.map +1 -0
  157. package/dist/mcp-slate-ui-script-inline.js +221 -0
  158. package/dist/mcp-slate-ui-script-inline.js.map +1 -0
  159. package/dist/mcp-slate-ui-script-inspiration.d.ts +12 -0
  160. package/dist/mcp-slate-ui-script-inspiration.d.ts.map +1 -0
  161. package/dist/mcp-slate-ui-script-inspiration.js +216 -0
  162. package/dist/mcp-slate-ui-script-inspiration.js.map +1 -0
  163. package/dist/mcp-slate-ui-script-more.d.ts +30 -0
  164. package/dist/mcp-slate-ui-script-more.d.ts.map +1 -0
  165. package/dist/mcp-slate-ui-script-more.js +225 -0
  166. package/dist/mcp-slate-ui-script-more.js.map +1 -0
  167. package/dist/mcp-slate-ui-script-progress.d.ts +7 -0
  168. package/dist/mcp-slate-ui-script-progress.d.ts.map +1 -0
  169. package/dist/mcp-slate-ui-script-progress.js +9 -0
  170. package/dist/mcp-slate-ui-script-progress.js.map +1 -0
  171. package/dist/mcp-slate-ui-script-remote.d.ts +28 -0
  172. package/dist/mcp-slate-ui-script-remote.d.ts.map +1 -0
  173. package/dist/mcp-slate-ui-script-remote.js +147 -0
  174. package/dist/mcp-slate-ui-script-remote.js.map +1 -0
  175. package/dist/mcp-slate-ui-script-scribble.d.ts +19 -0
  176. package/dist/mcp-slate-ui-script-scribble.d.ts.map +1 -0
  177. package/dist/mcp-slate-ui-script-scribble.js +114 -0
  178. package/dist/mcp-slate-ui-script-scribble.js.map +1 -0
  179. package/dist/mcp-slate-ui-script-select.d.ts +16 -0
  180. package/dist/mcp-slate-ui-script-select.d.ts.map +1 -0
  181. package/dist/mcp-slate-ui-script-select.js +73 -0
  182. package/dist/mcp-slate-ui-script-select.js.map +1 -0
  183. package/dist/mcp-slate-ui-script-stage.d.ts +11 -0
  184. package/dist/mcp-slate-ui-script-stage.d.ts.map +1 -0
  185. package/dist/mcp-slate-ui-script-stage.js +181 -0
  186. package/dist/mcp-slate-ui-script-stage.js.map +1 -0
  187. package/dist/mcp-slate-ui-script-state.d.ts +13 -0
  188. package/dist/mcp-slate-ui-script-state.d.ts.map +1 -0
  189. package/dist/mcp-slate-ui-script-state.js +306 -0
  190. package/dist/mcp-slate-ui-script-state.js.map +1 -0
  191. package/dist/mcp-slate-ui-script-thumbtools.d.ts +23 -0
  192. package/dist/mcp-slate-ui-script-thumbtools.d.ts.map +1 -0
  193. package/dist/mcp-slate-ui-script-thumbtools.js +103 -0
  194. package/dist/mcp-slate-ui-script-thumbtools.js.map +1 -0
  195. package/dist/mcp-slate-ui-script.d.ts +28 -0
  196. package/dist/mcp-slate-ui-script.d.ts.map +1 -0
  197. package/dist/mcp-slate-ui-script.js +58 -0
  198. package/dist/mcp-slate-ui-script.js.map +1 -0
  199. package/dist/mcp-slate-ui-styles-dialog.d.ts +17 -0
  200. package/dist/mcp-slate-ui-styles-dialog.d.ts.map +1 -0
  201. package/dist/mcp-slate-ui-styles-dialog.js +73 -0
  202. package/dist/mcp-slate-ui-styles-dialog.js.map +1 -0
  203. package/dist/mcp-slate-ui-styles-stage.d.ts +12 -0
  204. package/dist/mcp-slate-ui-styles-stage.d.ts.map +1 -0
  205. package/dist/mcp-slate-ui-styles-stage.js +53 -0
  206. package/dist/mcp-slate-ui-styles-stage.js.map +1 -0
  207. package/dist/mcp-slate-ui-styles-thumbtools.d.ts +10 -0
  208. package/dist/mcp-slate-ui-styles-thumbtools.d.ts.map +1 -0
  209. package/dist/mcp-slate-ui-styles-thumbtools.js +25 -0
  210. package/dist/mcp-slate-ui-styles-thumbtools.js.map +1 -0
  211. package/dist/mcp-slate-ui-styles.d.ts +13 -0
  212. package/dist/mcp-slate-ui-styles.d.ts.map +1 -0
  213. package/dist/mcp-slate-ui-styles.js +117 -0
  214. package/dist/mcp-slate-ui-styles.js.map +1 -0
  215. package/dist/mcp-slate-ui.d.ts +16 -0
  216. package/dist/mcp-slate-ui.d.ts.map +1 -0
  217. package/dist/mcp-slate-ui.js +58 -0
  218. package/dist/mcp-slate-ui.js.map +1 -0
  219. package/dist/mcp-slate-workspace-tools.d.ts +15 -0
  220. package/dist/mcp-slate-workspace-tools.d.ts.map +1 -0
  221. package/dist/mcp-slate-workspace-tools.js +155 -0
  222. package/dist/mcp-slate-workspace-tools.js.map +1 -0
  223. package/dist/mcp-tool-definitions.d.ts.map +1 -1
  224. package/dist/mcp-tool-definitions.js +9 -7
  225. package/dist/mcp-tool-definitions.js.map +1 -1
  226. package/dist/mcp-tool-handler.d.ts +8 -2
  227. package/dist/mcp-tool-handler.d.ts.map +1 -1
  228. package/dist/mcp-tool-handler.js +34 -13
  229. package/dist/mcp-tool-handler.js.map +1 -1
  230. package/dist/mcp-workflow-tools.d.ts +6 -0
  231. package/dist/mcp-workflow-tools.d.ts.map +1 -0
  232. package/dist/mcp-workflow-tools.js +108 -0
  233. package/dist/mcp-workflow-tools.js.map +1 -0
  234. package/dist/prototype-browsers.d.ts +8 -2
  235. package/dist/prototype-browsers.d.ts.map +1 -1
  236. package/dist/prototype-browsers.js +8 -3
  237. package/dist/prototype-browsers.js.map +1 -1
  238. package/dist/prototype-label-client.d.ts +5 -0
  239. package/dist/prototype-label-client.d.ts.map +1 -1
  240. package/dist/prototype-label-client.js.map +1 -1
  241. package/dist/prototype-poststep.d.ts +2 -2
  242. package/dist/prototype-poststep.d.ts.map +1 -1
  243. package/dist/prototype-poststep.js +3 -0
  244. package/dist/prototype-poststep.js.map +1 -1
  245. package/dist/prototype-process.js +1 -1
  246. package/dist/prototype-process.js.map +1 -1
  247. package/dist/prototype-run-record.d.ts +6 -2
  248. package/dist/prototype-run-record.d.ts.map +1 -1
  249. package/dist/prototype-run-record.js +6 -0
  250. package/dist/prototype-run-record.js.map +1 -1
  251. package/dist/prototype-runner.d.ts +2 -2
  252. package/dist/prototype-runner.d.ts.map +1 -1
  253. package/dist/prototype-runner.js +5 -2
  254. package/dist/prototype-runner.js.map +1 -1
  255. package/dist/prototype-workflow-contract.d.ts +13 -0
  256. package/dist/prototype-workflow-contract.d.ts.map +1 -0
  257. package/dist/prototype-workflow-contract.js +82 -0
  258. package/dist/prototype-workflow-contract.js.map +1 -0
  259. package/dist/prototype-workflow-labels.d.ts +29 -0
  260. package/dist/prototype-workflow-labels.d.ts.map +1 -0
  261. package/dist/prototype-workflow-labels.js +93 -0
  262. package/dist/prototype-workflow-labels.js.map +1 -0
  263. package/dist/run-journal-commands.d.ts.map +1 -1
  264. package/dist/run-journal-commands.js +24 -5
  265. package/dist/run-journal-commands.js.map +1 -1
  266. package/dist/scene/camera-model.d.ts +48 -0
  267. package/dist/scene/camera-model.d.ts.map +1 -0
  268. package/dist/scene/camera-model.js +89 -0
  269. package/dist/scene/camera-model.js.map +1 -0
  270. package/dist/scene/camera-solve.d.ts +58 -0
  271. package/dist/scene/camera-solve.d.ts.map +1 -0
  272. package/dist/scene/camera-solve.js +288 -0
  273. package/dist/scene/camera-solve.js.map +1 -0
  274. package/dist/scene/capture-plan.d.ts +28 -0
  275. package/dist/scene/capture-plan.d.ts.map +1 -0
  276. package/dist/scene/capture-plan.js +79 -0
  277. package/dist/scene/capture-plan.js.map +1 -0
  278. package/dist/scene/capture.d.ts +21 -0
  279. package/dist/scene/capture.d.ts.map +1 -0
  280. package/dist/scene/capture.js +118 -0
  281. package/dist/scene/capture.js.map +1 -0
  282. package/dist/scene/image-colors.d.ts +25 -0
  283. package/dist/scene/image-colors.d.ts.map +1 -0
  284. package/dist/scene/image-colors.js +110 -0
  285. package/dist/scene/image-colors.js.map +1 -0
  286. package/dist/scene/image-rectify.d.ts +25 -0
  287. package/dist/scene/image-rectify.d.ts.map +1 -0
  288. package/dist/scene/image-rectify.js +82 -0
  289. package/dist/scene/image-rectify.js.map +1 -0
  290. package/dist/scene/image-sheet.d.ts +19 -0
  291. package/dist/scene/image-sheet.d.ts.map +1 -0
  292. package/dist/scene/image-sheet.js +118 -0
  293. package/dist/scene/image-sheet.js.map +1 -0
  294. package/dist/scene/least-squares.d.ts +31 -0
  295. package/dist/scene/least-squares.d.ts.map +1 -0
  296. package/dist/scene/least-squares.js +173 -0
  297. package/dist/scene/least-squares.js.map +1 -0
  298. package/dist/scene/numbers.d.ts +17 -0
  299. package/dist/scene/numbers.d.ts.map +1 -0
  300. package/dist/scene/numbers.js +39 -0
  301. package/dist/scene/numbers.js.map +1 -0
  302. package/dist/scene/placement.d.ts +43 -0
  303. package/dist/scene/placement.d.ts.map +1 -0
  304. package/dist/scene/placement.js +107 -0
  305. package/dist/scene/placement.js.map +1 -0
  306. package/dist/scene/raster.d.ts +18 -0
  307. package/dist/scene/raster.d.ts.map +1 -0
  308. package/dist/scene/raster.js +31 -0
  309. package/dist/scene/raster.js.map +1 -0
  310. package/dist/scene/scene-kit.d.ts +20 -0
  311. package/dist/scene/scene-kit.d.ts.map +1 -0
  312. package/dist/scene/scene-kit.js +74 -0
  313. package/dist/scene/scene-kit.js.map +1 -0
  314. package/dist/scene/scene-verbs.d.ts +4 -0
  315. package/dist/scene/scene-verbs.d.ts.map +1 -0
  316. package/dist/scene/scene-verbs.js +5 -0
  317. package/dist/scene/scene-verbs.js.map +1 -0
  318. package/dist/scene/seeded-random.d.ts +20 -0
  319. package/dist/scene/seeded-random.d.ts.map +1 -0
  320. package/dist/scene/seeded-random.js +42 -0
  321. package/dist/scene/seeded-random.js.map +1 -0
  322. package/dist/scene/spec-expression.d.ts +25 -0
  323. package/dist/scene/spec-expression.d.ts.map +1 -0
  324. package/dist/scene/spec-expression.js +234 -0
  325. package/dist/scene/spec-expression.js.map +1 -0
  326. package/dist/scene/static-server.d.ts +13 -0
  327. package/dist/scene/static-server.d.ts.map +1 -0
  328. package/dist/scene/static-server.js +99 -0
  329. package/dist/scene/static-server.js.map +1 -0
  330. package/dist/server.d.ts +22 -2
  331. package/dist/server.d.ts.map +1 -1
  332. package/dist/server.js +44 -8
  333. package/dist/server.js.map +1 -1
  334. package/dist/slate-actions.d.ts +38 -0
  335. package/dist/slate-actions.d.ts.map +1 -0
  336. package/dist/slate-actions.js +102 -0
  337. package/dist/slate-actions.js.map +1 -0
  338. package/dist/slate-annotate.d.ts +36 -0
  339. package/dist/slate-annotate.d.ts.map +1 -0
  340. package/dist/slate-annotate.js +71 -0
  341. package/dist/slate-annotate.js.map +1 -0
  342. package/dist/slate-approvals.d.ts +61 -0
  343. package/dist/slate-approvals.d.ts.map +1 -0
  344. package/dist/slate-approvals.js +153 -0
  345. package/dist/slate-approvals.js.map +1 -0
  346. package/dist/slate-browser-decision.d.ts +30 -0
  347. package/dist/slate-browser-decision.d.ts.map +1 -0
  348. package/dist/slate-browser-decision.js +24 -0
  349. package/dist/slate-browser-decision.js.map +1 -0
  350. package/dist/slate-browser-host-script.d.ts +14 -0
  351. package/dist/slate-browser-host-script.d.ts.map +1 -0
  352. package/dist/slate-browser-host-script.js +125 -0
  353. package/dist/slate-browser-host-script.js.map +1 -0
  354. package/dist/slate-browser-host.d.ts +9 -0
  355. package/dist/slate-browser-host.d.ts.map +1 -0
  356. package/dist/slate-browser-host.js +37 -0
  357. package/dist/slate-browser-host.js.map +1 -0
  358. package/dist/slate-browser-server.d.ts +37 -0
  359. package/dist/slate-browser-server.d.ts.map +1 -0
  360. package/dist/slate-browser-server.js +186 -0
  361. package/dist/slate-browser-server.js.map +1 -0
  362. package/dist/slate-commit.d.ts +28 -0
  363. package/dist/slate-commit.d.ts.map +1 -0
  364. package/dist/slate-commit.js +218 -0
  365. package/dist/slate-commit.js.map +1 -0
  366. package/dist/slate-corpus.d.ts +14 -0
  367. package/dist/slate-corpus.d.ts.map +1 -0
  368. package/dist/slate-corpus.js +32 -0
  369. package/dist/slate-corpus.js.map +1 -0
  370. package/dist/slate-edit-prompt.d.ts +18 -0
  371. package/dist/slate-edit-prompt.d.ts.map +1 -0
  372. package/dist/slate-edit-prompt.js +41 -0
  373. package/dist/slate-edit-prompt.js.map +1 -0
  374. package/dist/slate-edit-runner.d.ts +4 -0
  375. package/dist/slate-edit-runner.d.ts.map +1 -0
  376. package/dist/slate-edit-runner.js +90 -0
  377. package/dist/slate-edit-runner.js.map +1 -0
  378. package/dist/slate-editability.d.ts +20 -0
  379. package/dist/slate-editability.d.ts.map +1 -0
  380. package/dist/slate-editability.js +19 -0
  381. package/dist/slate-editability.js.map +1 -0
  382. package/dist/slate-errors.d.ts +15 -0
  383. package/dist/slate-errors.d.ts.map +1 -0
  384. package/dist/slate-errors.js +21 -0
  385. package/dist/slate-errors.js.map +1 -0
  386. package/dist/slate-handoff-options.d.ts +40 -0
  387. package/dist/slate-handoff-options.d.ts.map +1 -0
  388. package/dist/slate-handoff-options.js +127 -0
  389. package/dist/slate-handoff-options.js.map +1 -0
  390. package/dist/slate-handoff.d.ts +11 -0
  391. package/dist/slate-handoff.d.ts.map +1 -0
  392. package/dist/slate-handoff.js +56 -0
  393. package/dist/slate-handoff.js.map +1 -0
  394. package/dist/slate-ids.d.ts +33 -0
  395. package/dist/slate-ids.d.ts.map +1 -0
  396. package/dist/slate-ids.js +47 -0
  397. package/dist/slate-ids.js.map +1 -0
  398. package/dist/slate-image-executor.d.ts +39 -0
  399. package/dist/slate-image-executor.d.ts.map +1 -0
  400. package/dist/slate-image-executor.js +52 -0
  401. package/dist/slate-image-executor.js.map +1 -0
  402. package/dist/slate-inspiration.d.ts +22 -0
  403. package/dist/slate-inspiration.d.ts.map +1 -0
  404. package/dist/slate-inspiration.js +112 -0
  405. package/dist/slate-inspiration.js.map +1 -0
  406. package/dist/slate-labels.d.ts +11 -0
  407. package/dist/slate-labels.d.ts.map +1 -0
  408. package/dist/slate-labels.js +32 -0
  409. package/dist/slate-labels.js.map +1 -0
  410. package/dist/slate-ledger.d.ts +29 -0
  411. package/dist/slate-ledger.d.ts.map +1 -0
  412. package/dist/slate-ledger.js +65 -0
  413. package/dist/slate-ledger.js.map +1 -0
  414. package/dist/slate-liveness.d.ts +26 -0
  415. package/dist/slate-liveness.d.ts.map +1 -0
  416. package/dist/slate-liveness.js +49 -0
  417. package/dist/slate-liveness.js.map +1 -0
  418. package/dist/slate-local-image.d.ts +19 -0
  419. package/dist/slate-local-image.d.ts.map +1 -0
  420. package/dist/slate-local-image.js +36 -0
  421. package/dist/slate-local-image.js.map +1 -0
  422. package/dist/slate-lock.d.ts +64 -0
  423. package/dist/slate-lock.d.ts.map +1 -0
  424. package/dist/slate-lock.js +178 -0
  425. package/dist/slate-lock.js.map +1 -0
  426. package/dist/slate-paths.d.ts +45 -0
  427. package/dist/slate-paths.d.ts.map +1 -0
  428. package/dist/slate-paths.js +132 -0
  429. package/dist/slate-paths.js.map +1 -0
  430. package/dist/slate-pick.d.ts +29 -0
  431. package/dist/slate-pick.d.ts.map +1 -0
  432. package/dist/slate-pick.js +55 -0
  433. package/dist/slate-pick.js.map +1 -0
  434. package/dist/slate-reference-ids.d.ts +6 -0
  435. package/dist/slate-reference-ids.d.ts.map +1 -0
  436. package/dist/slate-reference-ids.js +17 -0
  437. package/dist/slate-reference-ids.js.map +1 -0
  438. package/dist/slate-reference-store.d.ts +23 -0
  439. package/dist/slate-reference-store.d.ts.map +1 -0
  440. package/dist/slate-reference-store.js +46 -0
  441. package/dist/slate-reference-store.js.map +1 -0
  442. package/dist/slate-resume.d.ts +19 -0
  443. package/dist/slate-resume.d.ts.map +1 -0
  444. package/dist/slate-resume.js +94 -0
  445. package/dist/slate-resume.js.map +1 -0
  446. package/dist/slate-round-params.d.ts +20 -0
  447. package/dist/slate-round-params.d.ts.map +1 -0
  448. package/dist/slate-round-params.js +32 -0
  449. package/dist/slate-round-params.js.map +1 -0
  450. package/dist/slate-round-prompt.d.ts +18 -0
  451. package/dist/slate-round-prompt.d.ts.map +1 -0
  452. package/dist/slate-round-prompt.js +20 -0
  453. package/dist/slate-round-prompt.js.map +1 -0
  454. package/dist/slate-round-runner.d.ts +4 -0
  455. package/dist/slate-round-runner.d.ts.map +1 -0
  456. package/dist/slate-round-runner.js +125 -0
  457. package/dist/slate-round-runner.js.map +1 -0
  458. package/dist/slate-round-search.d.ts +7 -0
  459. package/dist/slate-round-search.d.ts.map +1 -0
  460. package/dist/slate-round-search.js +77 -0
  461. package/dist/slate-round-search.js.map +1 -0
  462. package/dist/slate-run-action.d.ts +14 -0
  463. package/dist/slate-run-action.d.ts.map +1 -0
  464. package/dist/slate-run-action.js +81 -0
  465. package/dist/slate-run-action.js.map +1 -0
  466. package/dist/slate-runner-context.d.ts +57 -0
  467. package/dist/slate-runner-context.d.ts.map +1 -0
  468. package/dist/slate-runner-context.js +79 -0
  469. package/dist/slate-runner-context.js.map +1 -0
  470. package/dist/slate-runner-failure.d.ts +8 -0
  471. package/dist/slate-runner-failure.d.ts.map +1 -0
  472. package/dist/slate-runner-failure.js +17 -0
  473. package/dist/slate-runner-failure.js.map +1 -0
  474. package/dist/slate-runner-flag.d.ts +3 -0
  475. package/dist/slate-runner-flag.d.ts.map +1 -0
  476. package/dist/slate-runner-flag.js +3 -0
  477. package/dist/slate-runner-flag.js.map +1 -0
  478. package/dist/slate-runner-main.d.ts +31 -0
  479. package/dist/slate-runner-main.d.ts.map +1 -0
  480. package/dist/slate-runner-main.js +132 -0
  481. package/dist/slate-runner-main.js.map +1 -0
  482. package/dist/slate-runner-spawn.d.ts +23 -0
  483. package/dist/slate-runner-spawn.d.ts.map +1 -0
  484. package/dist/slate-runner-spawn.js +27 -0
  485. package/dist/slate-runner-spawn.js.map +1 -0
  486. package/dist/slate-runtime.d.ts +38 -0
  487. package/dist/slate-runtime.d.ts.map +1 -0
  488. package/dist/slate-runtime.js +48 -0
  489. package/dist/slate-runtime.js.map +1 -0
  490. package/dist/slate-versions.d.ts +26 -0
  491. package/dist/slate-versions.d.ts.map +1 -0
  492. package/dist/slate-versions.js +110 -0
  493. package/dist/slate-versions.js.map +1 -0
  494. package/dist/slate-view-contract.d.ts +233 -0
  495. package/dist/slate-view-contract.d.ts.map +1 -0
  496. package/dist/slate-view-contract.js +17 -0
  497. package/dist/slate-view-contract.js.map +1 -0
  498. package/dist/slate-view-types.d.ts +2 -0
  499. package/dist/slate-view-types.d.ts.map +1 -0
  500. package/dist/slate-view-types.js +2 -0
  501. package/dist/slate-view-types.js.map +1 -0
  502. package/dist/slate-view.d.ts +19 -0
  503. package/dist/slate-view.d.ts.map +1 -0
  504. package/dist/slate-view.js +184 -0
  505. package/dist/slate-view.js.map +1 -0
  506. package/dist/slate-workspace-parse.d.ts +20 -0
  507. package/dist/slate-workspace-parse.d.ts.map +1 -0
  508. package/dist/slate-workspace-parse.js +437 -0
  509. package/dist/slate-workspace-parse.js.map +1 -0
  510. package/dist/slate-workspace-store.d.ts +44 -0
  511. package/dist/slate-workspace-store.d.ts.map +1 -0
  512. package/dist/slate-workspace-store.js +270 -0
  513. package/dist/slate-workspace-store.js.map +1 -0
  514. package/dist/slate-workspace-types.d.ts +176 -0
  515. package/dist/slate-workspace-types.d.ts.map +1 -0
  516. package/dist/slate-workspace-types.js +13 -0
  517. package/dist/slate-workspace-types.js.map +1 -0
  518. package/dist/workflow/adapter-12ui.d.ts +4 -0
  519. package/dist/workflow/adapter-12ui.d.ts.map +1 -0
  520. package/dist/workflow/adapter-12ui.js +147 -0
  521. package/dist/workflow/adapter-12ui.js.map +1 -0
  522. package/dist/workflow/adapter-layerdoc.d.ts +16 -0
  523. package/dist/workflow/adapter-layerdoc.d.ts.map +1 -0
  524. package/dist/workflow/adapter-layerdoc.js +116 -0
  525. package/dist/workflow/adapter-layerdoc.js.map +1 -0
  526. package/dist/workflow/adapter-openai.d.ts +4 -0
  527. package/dist/workflow/adapter-openai.d.ts.map +1 -0
  528. package/dist/workflow/adapter-openai.js +166 -0
  529. package/dist/workflow/adapter-openai.js.map +1 -0
  530. package/dist/workflow/adapter-process.d.ts +7 -0
  531. package/dist/workflow/adapter-process.d.ts.map +1 -0
  532. package/dist/workflow/adapter-process.js +174 -0
  533. package/dist/workflow/adapter-process.js.map +1 -0
  534. package/dist/workflow/adapter-prototype-labels.d.ts +15 -0
  535. package/dist/workflow/adapter-prototype-labels.d.ts.map +1 -0
  536. package/dist/workflow/adapter-prototype-labels.js +71 -0
  537. package/dist/workflow/adapter-prototype-labels.js.map +1 -0
  538. package/dist/workflow/adapter-types.d.ts +40 -0
  539. package/dist/workflow/adapter-types.d.ts.map +1 -0
  540. package/dist/workflow/adapter-types.js +2 -0
  541. package/dist/workflow/adapter-types.js.map +1 -0
  542. package/dist/workflow/adapter-utils.d.ts +11 -0
  543. package/dist/workflow/adapter-utils.d.ts.map +1 -0
  544. package/dist/workflow/adapter-utils.js +72 -0
  545. package/dist/workflow/adapter-utils.js.map +1 -0
  546. package/dist/workflow/adapters.d.ts +6 -0
  547. package/dist/workflow/adapters.d.ts.map +1 -0
  548. package/dist/workflow/adapters.js +25 -0
  549. package/dist/workflow/adapters.js.map +1 -0
  550. package/dist/workflow/artifact.d.ts +11 -0
  551. package/dist/workflow/artifact.d.ts.map +1 -0
  552. package/dist/workflow/artifact.js +94 -0
  553. package/dist/workflow/artifact.js.map +1 -0
  554. package/dist/workflow/bundle-collect.d.ts +8 -0
  555. package/dist/workflow/bundle-collect.d.ts.map +1 -0
  556. package/dist/workflow/bundle-collect.js +56 -0
  557. package/dist/workflow/bundle-collect.js.map +1 -0
  558. package/dist/workflow/bundle-export.d.ts +16 -0
  559. package/dist/workflow/bundle-export.d.ts.map +1 -0
  560. package/dist/workflow/bundle-export.js +174 -0
  561. package/dist/workflow/bundle-export.js.map +1 -0
  562. package/dist/workflow/bundle-paths.d.ts +7 -0
  563. package/dist/workflow/bundle-paths.d.ts.map +1 -0
  564. package/dist/workflow/bundle-paths.js +35 -0
  565. package/dist/workflow/bundle-paths.js.map +1 -0
  566. package/dist/workflow/bundle.d.ts +4 -0
  567. package/dist/workflow/bundle.d.ts.map +1 -0
  568. package/dist/workflow/bundle.js +4 -0
  569. package/dist/workflow/bundle.js.map +1 -0
  570. package/dist/workflow/capture.d.ts +36 -0
  571. package/dist/workflow/capture.d.ts.map +1 -0
  572. package/dist/workflow/capture.js +81 -0
  573. package/dist/workflow/capture.js.map +1 -0
  574. package/dist/workflow/continuation-branch.d.ts +15 -0
  575. package/dist/workflow/continuation-branch.d.ts.map +1 -0
  576. package/dist/workflow/continuation-branch.js +103 -0
  577. package/dist/workflow/continuation-branch.js.map +1 -0
  578. package/dist/workflow/continuation-plans.d.ts +38 -0
  579. package/dist/workflow/continuation-plans.d.ts.map +1 -0
  580. package/dist/workflow/continuation-plans.js +78 -0
  581. package/dist/workflow/continuation-plans.js.map +1 -0
  582. package/dist/workflow/continuation.d.ts +25 -0
  583. package/dist/workflow/continuation.d.ts.map +1 -0
  584. package/dist/workflow/continuation.js +89 -0
  585. package/dist/workflow/continuation.js.map +1 -0
  586. package/dist/workflow/layerdoc-reader.d.ts +27 -0
  587. package/dist/workflow/layerdoc-reader.d.ts.map +1 -0
  588. package/dist/workflow/layerdoc-reader.js +81 -0
  589. package/dist/workflow/layerdoc-reader.js.map +1 -0
  590. package/dist/workflow/project-evidence.d.ts +48 -0
  591. package/dist/workflow/project-evidence.d.ts.map +1 -0
  592. package/dist/workflow/project-evidence.js +200 -0
  593. package/dist/workflow/project-evidence.js.map +1 -0
  594. package/dist/workflow/providers.d.ts +35 -0
  595. package/dist/workflow/providers.d.ts.map +1 -0
  596. package/dist/workflow/providers.js +110 -0
  597. package/dist/workflow/providers.js.map +1 -0
  598. package/dist/workflow/recipes-layerdoc-validation.d.ts +4 -0
  599. package/dist/workflow/recipes-layerdoc-validation.d.ts.map +1 -0
  600. package/dist/workflow/recipes-layerdoc-validation.js +98 -0
  601. package/dist/workflow/recipes-layerdoc-validation.js.map +1 -0
  602. package/dist/workflow/recipes-result-validation.d.ts +6 -0
  603. package/dist/workflow/recipes-result-validation.d.ts.map +1 -0
  604. package/dist/workflow/recipes-result-validation.js +38 -0
  605. package/dist/workflow/recipes-result-validation.js.map +1 -0
  606. package/dist/workflow/recipes-schemas.d.ts +7 -0
  607. package/dist/workflow/recipes-schemas.d.ts.map +1 -0
  608. package/dist/workflow/recipes-schemas.js +67 -0
  609. package/dist/workflow/recipes-schemas.js.map +1 -0
  610. package/dist/workflow/recipes-validation.d.ts +14 -0
  611. package/dist/workflow/recipes-validation.d.ts.map +1 -0
  612. package/dist/workflow/recipes-validation.js +68 -0
  613. package/dist/workflow/recipes-validation.js.map +1 -0
  614. package/dist/workflow/recipes.d.ts +20 -0
  615. package/dist/workflow/recipes.d.ts.map +1 -0
  616. package/dist/workflow/recipes.js +167 -0
  617. package/dist/workflow/recipes.js.map +1 -0
  618. package/dist/workflow/routing.d.ts +4 -0
  619. package/dist/workflow/routing.d.ts.map +1 -0
  620. package/dist/workflow/routing.js +28 -0
  621. package/dist/workflow/routing.js.map +1 -0
  622. package/dist/workflow/schema.d.ts +5 -0
  623. package/dist/workflow/schema.d.ts.map +1 -0
  624. package/dist/workflow/schema.js +29 -0
  625. package/dist/workflow/schema.js.map +1 -0
  626. package/dist/workflow/service.d.ts +59 -0
  627. package/dist/workflow/service.d.ts.map +1 -0
  628. package/dist/workflow/service.js +170 -0
  629. package/dist/workflow/service.js.map +1 -0
  630. package/dist/workflow/store-json.d.ts +5 -0
  631. package/dist/workflow/store-json.d.ts.map +1 -0
  632. package/dist/workflow/store-json.js +35 -0
  633. package/dist/workflow/store-json.js.map +1 -0
  634. package/dist/workflow/store-lock.d.ts +3 -0
  635. package/dist/workflow/store-lock.d.ts.map +1 -0
  636. package/dist/workflow/store-lock.js +85 -0
  637. package/dist/workflow/store-lock.js.map +1 -0
  638. package/dist/workflow/store-paths.d.ts +17 -0
  639. package/dist/workflow/store-paths.d.ts.map +1 -0
  640. package/dist/workflow/store-paths.js +67 -0
  641. package/dist/workflow/store-paths.js.map +1 -0
  642. package/dist/workflow/store-validation.d.ts +7 -0
  643. package/dist/workflow/store-validation.d.ts.map +1 -0
  644. package/dist/workflow/store-validation.js +119 -0
  645. package/dist/workflow/store-validation.js.map +1 -0
  646. package/dist/workflow/store.d.ts +10 -0
  647. package/dist/workflow/store.d.ts.map +1 -0
  648. package/dist/workflow/store.js +193 -0
  649. package/dist/workflow/store.js.map +1 -0
  650. package/dist/workflow/types.d.ts +120 -0
  651. package/dist/workflow/types.d.ts.map +1 -0
  652. package/dist/workflow/types.js +15 -0
  653. package/dist/workflow/types.js.map +1 -0
  654. package/dist/workflow-transport.d.ts +28 -0
  655. package/dist/workflow-transport.d.ts.map +1 -0
  656. package/dist/workflow-transport.js +184 -0
  657. package/dist/workflow-transport.js.map +1 -0
  658. package/open-design.json +2 -2
  659. package/package.json +4 -1
  660. package/prototype-kit/tests/rules-check.mjs +9 -0
  661. package/runtime/codex-conversion/src/images/native-invoke.mjs +1 -1
  662. package/runtime/codex-conversion/src/images/native.mjs +8 -4
  663. package/runtime/layerdoc-validator.mjs +1860 -0
  664. package/scene-kit/starter/camera.js +10 -0
  665. package/scene-kit/starter/gobo.js +60 -0
  666. package/scene-kit/starter/index.html +23 -0
  667. package/scene-kit/starter/lib.js +84 -0
  668. package/scene-kit/starter/main.js +78 -0
  669. package/scene-kit/starter/scene.js +33 -0
  670. package/scene-kit/vendor/LICENSE +21 -0
  671. package/scene-kit/vendor/addons/geometries/RoundedBoxGeometry.js +216 -0
  672. package/scene-kit/vendor/addons/renderers/CSS3DRenderer.js +454 -0
  673. package/scene-kit/vendor/three.core.js +60586 -0
  674. package/scene-kit/vendor/three.module.js +19719 -0
  675. package/skills/12ui-design/SKILL.md +21 -61
  676. package/skills/12ui-design/improve.md +5 -1
  677. package/skills/12ui-design/inspire.md +8 -5
  678. package/skills/12ui-design/outputs.md +23 -2
  679. package/skills/12ui-design/scene.md +172 -0
  680. package/skills/12ui-design/session.md +161 -0
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Generate more: the last tile of the thumbnails (the card's strip, the
3
+ * workspace's selection) and the panel it opens directly below them. The tile
4
+ * is an empty, very light thumbnail-sized box with a plus and no words; the
5
+ * panel is the heading, an optional note, how many (a segmented control) and
6
+ * Generate or Cancel. Clicking the tile again, Cancel or Escape collapses it.
7
+ *
8
+ * Generate starts a round through startRound, the very function the Design
9
+ * dialog uses for New options, so the run tool, the mode, the note and the
10
+ * selected inspiration are the same; the panel only adds the count.
11
+ *
12
+ * The same panel serves a thumbnail's plus (mcp-slate-ui-script-thumbtools.ts):
13
+ * "More like E2", with a tiny picture of that design, starts a round in mode
14
+ * "like" from that design's latest version. The tile opens the plain panel
15
+ * (mode "new"); opening either replaces the other, so neither carries the
16
+ * other's reference. While a
17
+ * round runs (or the request is in flight) the tile is off; the new round's
18
+ * pending options are already in the thumbnails, because the returned view
19
+ * carries them.
20
+ *
21
+ * In the card the panel takes its room from the large image rather than
22
+ * growing the frame. The host grows the frame downward and does not scroll
23
+ * the thread, so a panel added below the thumbnails lands under the host's
24
+ * composer, out of sight (the frame's own document has nothing to scroll).
25
+ * While the panel is open the image is shortened by the panel's height, and
26
+ * folded away when what would be left is too small to read, so the card keeps
27
+ * its height and the panel sits where the bottom of the card already was.
28
+ */
29
+ export const SLATE_UI_MORE = String.raw `
30
+ var MORE = __MORE__;
31
+ var ICON_PLUS = "M12 5v14M5 12h14";
32
+
33
+ // A round that is running, or the panel's own request still in flight, keeps the tile off until it settles.
34
+ function moreBusy() {
35
+ return (!!state.view && runningOps().some(function (o) { return o.kind === "round"; })) || !!(state.more && state.more.committing);
36
+ }
37
+
38
+ // One tile per row of thumbnails; the strip and the selection each build their own.
39
+ function moreTile() {
40
+ var b = button("", "moretile", toggleMore);
41
+ b.setAttribute("aria-label", COPY.generateMore);
42
+ b.setAttribute("aria-expanded", "false");
43
+ b.setAttribute("aria-controls", "morepanel");
44
+ b.title = COPY.generateMore;
45
+ b.innerHTML = '<svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" aria-hidden="true"><path d="' + ICON_PLUS + '"/></svg>';
46
+ return b;
47
+ }
48
+ function moreTiles() { return Array.prototype.slice.call(document.querySelectorAll(".moretile")); }
49
+ function moreHosts() { return [$("more"), stageEls && stageEls.more].filter(Boolean); }
50
+
51
+ // The dashed tile opens the plain panel (new options). It closes that panel again; when a thumbnail's plus had the panel
52
+ // open for one design, the tile replaces it with the plain one, so neither carries the other's reference.
53
+ function toggleMore() {
54
+ if (state.more && state.more.mode === "new") { closeMore(true); return; }
55
+ openMore({ mode: "new" });
56
+ }
57
+ // A thumbnail's plus: the same panel, for variations of that design's latest version.
58
+ function openMoreLike(candidateId) {
59
+ var c = cand(candidateId);
60
+ var v = latestVersion(c);
61
+ if (!c || !v || !pickable(v)) return;
62
+ var m = state.more;
63
+ if (m && m.mode === "like" && m.fromVersionId === v.versionId && !m.committing) { m.els.note.focus(); return; }
64
+ openMore({ mode: "like", fromVersionId: v.versionId, fromCandidateId: c.candidateId, fromLabel: v.label });
65
+ }
66
+ function openMore(reference) {
67
+ if (!state.view || state.view.candidates.length === 0 || moreBusy()) return;
68
+ if (state.more) resetMore();
69
+ state.more = { id: uuid4(), mode: reference.mode, fromVersionId: reference.fromVersionId, fromCandidateId: reference.fromCandidateId, fromLabel: reference.fromLabel, note: "", count: MORE.initial, committing: false, error: "", els: {} };
70
+ buildMore();
71
+ syncMore();
72
+ state.more.els.note.focus();
73
+ }
74
+ // The shortest the card's image gets while the panel is open; below this it folds away, and the thumbnails stay.
75
+ var HERO_FLOOR_PX = 120;
76
+ function fitMore() {
77
+ var hero = $("hero");
78
+ if (!hero) return;
79
+ hero.style.removeProperty("--cap");
80
+ hero.classList.remove("folded");
81
+ var m = state.more;
82
+ if (!m || isFullscreen() || m.els.box.parentNode !== $("more")) return;
83
+ // The panel's host holds the panel and the gap above it, so its height is all the room the panel takes.
84
+ var natural = hero.getBoundingClientRect().height;
85
+ var need = $("more").getBoundingClientRect().height;
86
+ if (!(natural > 0) || !(need > 0)) return;
87
+ var left = Math.floor(natural - need);
88
+ if (left >= HERO_FLOOR_PX) hero.style.setProperty("--cap", left + "px");
89
+ else hero.classList.add("folded");
90
+ }
91
+ function closeMore(refocus) {
92
+ var m = state.more;
93
+ if (!m || m.committing) return;
94
+ state.more = null;
95
+ moreHosts().forEach(function (host) { host.textContent = ""; });
96
+ syncMore();
97
+ fitMore();
98
+ if (refocus) {
99
+ var back = (m.mode === "like" && thumbToolFor("more", m.fromCandidateId)) || moreTiles().filter(function (t) { return !t.disabled && !isHiddenNode(t); })[0];
100
+ if (back) back.focus();
101
+ }
102
+ reportSize();
103
+ }
104
+ // A different run replaces the workspace: whatever was typed belongs to the old one.
105
+ function resetMore() {
106
+ state.more = null;
107
+ moreHosts().forEach(function (host) { host.textContent = ""; });
108
+ fitMore();
109
+ }
110
+ function isHiddenNode(node) {
111
+ for (var n = node; n && n.classList; n = n.parentElement) if (n.classList.contains("hidden")) return true;
112
+ return false;
113
+ }
114
+
115
+ function buildMore() {
116
+ var m = state.more;
117
+ var box = el("div", "morepanel");
118
+ box.id = "morepanel";
119
+ box.setAttribute("role", "group");
120
+ var like = m.mode === "like";
121
+ var title = el("h2", "morehead", like ? tpl(COPY.moreLike, { label: m.fromLabel }) : COPY.generateMore);
122
+ title.id = "morehead";
123
+ box.setAttribute("aria-labelledby", "morehead");
124
+ if (like) {
125
+ // The reference: a tiny picture of the design the variations are made from.
126
+ var head = el("div", "moreheadrow");
127
+ var ref = ver(m.fromVersionId);
128
+ var mini = el("img", "morethumb empty");
129
+ mini.alt = "";
130
+ var cached = ref && state.thumbs[imageKey(ref, "thumb")];
131
+ if (cached) { mini.src = cached; mini.classList.remove("empty"); }
132
+ else bindImage(mini, ref, "thumb", false);
133
+ head.appendChild(mini);
134
+ head.appendChild(title);
135
+ box.appendChild(head);
136
+ } else box.appendChild(title);
137
+ var note = el("textarea");
138
+ note.setAttribute("rows", "2");
139
+ note.setAttribute("maxlength", "600");
140
+ note.setAttribute("placeholder", COPY.moreNotePlaceholder);
141
+ note.setAttribute("aria-label", COPY.moreNotePlaceholder);
142
+ note.addEventListener("input", function () { m.note = note.value; });
143
+ box.appendChild(note);
144
+ var row = el("div", "morerow");
145
+ var seg = el("div", "seg");
146
+ seg.setAttribute("role", "radiogroup");
147
+ seg.setAttribute("aria-label", COPY.moreCountLabel);
148
+ MORE.choices.forEach(function (n) {
149
+ var label = el("label", "segopt");
150
+ var input = el("input");
151
+ input.type = "radio";
152
+ input.name = "morecount";
153
+ input.value = String(n);
154
+ input.checked = n === m.count;
155
+ input.addEventListener("change", function () { m.count = n; });
156
+ label.appendChild(input);
157
+ label.appendChild(el("span", "", String(n)));
158
+ seg.appendChild(label);
159
+ });
160
+ row.appendChild(seg);
161
+ // Cancel and Generate stay together: on a narrow card they drop to the next line as a pair, at the right.
162
+ var buttons = el("span", "morebtns");
163
+ buttons.appendChild(button(COPY.cancel, "", function () { closeMore(true); }));
164
+ m.els.primary = button(COPY.generate, "primary", commitMore);
165
+ buttons.appendChild(m.els.primary);
166
+ row.appendChild(buttons);
167
+ box.appendChild(row);
168
+ m.els.alert = el("p", "alert hidden");
169
+ m.els.alert.setAttribute("role", "alert");
170
+ box.appendChild(m.els.alert);
171
+ m.els.box = box;
172
+ m.els.note = note;
173
+ }
174
+
175
+ function commitMore() {
176
+ var m = state.more;
177
+ if (!m || m.committing || moreBusy() || !localImage().ready || (m.mode === "like" && !pickable(ver(m.fromVersionId)))) return;
178
+ m.committing = true;
179
+ m.error = "";
180
+ syncMore();
181
+ startRound(m.id, { mode: m.mode, note: m.note, count: m.count, fromVersionId: m.fromVersionId }).then(function () {
182
+ m.committing = false;
183
+ if (state.more === m) closeMore(false);
184
+ syncMore();
185
+ }, function (err) {
186
+ m.committing = false;
187
+ if (state.more !== m) return;
188
+ m.error = errText(err);
189
+ syncMore();
190
+ });
191
+ }
192
+
193
+ // The tiles follow the view; the panel sits in the host of the current mode, and keeps what was typed across modes and polls.
194
+ function syncMore() {
195
+ if (!state.view) return;
196
+ var m = state.more;
197
+ if (m && state.view.candidates.length === 0) { m.committing = false; closeMore(false); m = state.more; }
198
+ var busy = moreBusy();
199
+ moreTiles().forEach(function (t) {
200
+ t.disabled = busy;
201
+ t.setAttribute("aria-expanded", m && m.mode === "new" ? "true" : "false");
202
+ });
203
+ syncThumbTools();
204
+ if (!m) return;
205
+ var host = isFullscreen() ? stageEls.more : $("more");
206
+ if (host && m.els.box.parentNode !== host) {
207
+ moreHosts().forEach(function (h) { if (h !== host) h.textContent = ""; });
208
+ host.appendChild(m.els.box);
209
+ }
210
+ var local = localImage();
211
+ m.els.primary.disabled = m.committing || busy || !local.ready || (m.mode === "like" && !pickable(ver(m.fromVersionId)));
212
+ m.els.alert.textContent = m.error || (!local.ready && local.reason ? local.reason : "");
213
+ m.els.alert.classList.toggle("hidden", !m.els.alert.textContent);
214
+ // Fitted before the size report, so the host never sees the taller card.
215
+ fitMore();
216
+ reportSize();
217
+ }
218
+ window.addEventListener("resize", function () { if (state.more) { fitMore(); reportSize(); } });
219
+
220
+ document.addEventListener("keydown", function (e) {
221
+ if (e.key !== "Escape" || !state.more || state.dialog || state.more.committing) return;
222
+ closeMore(true);
223
+ });
224
+ `;
225
+ //# sourceMappingURL=mcp-slate-ui-script-more.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-slate-ui-script-more.js","sourceRoot":"","sources":["../src/mcp-slate-ui-script-more.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmMtC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The hairline that sits under the large image while work runs on its option.
3
+ * There is no measured duration, so it never estimates: it is indeterminate,
4
+ * and the words (the band, the status line) carry what is happening.
5
+ */
6
+ export declare const SLATE_UI_PROGRESS: string;
7
+ //# sourceMappingURL=mcp-slate-ui-script-progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-slate-ui-script-progress.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-script-progress.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,QAE7B,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The hairline that sits under the large image while work runs on its option.
3
+ * There is no measured duration, so it never estimates: it is indeterminate,
4
+ * and the words (the band, the status line) carry what is happening.
5
+ */
6
+ export const SLATE_UI_PROGRESS = String.raw `
7
+ function progressBar() { return el("span", "hair indeterminate"); }
8
+ `;
9
+ //# sourceMappingURL=mcp-slate-ui-script-progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-slate-ui-script-progress.js","sourceRoot":"","sources":["../src/mcp-slate-ui-script-progress.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAA;;CAE1C,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * What only the hosted target does (TARGET is "remote"): the words it says to the
3
+ * agent, and the marked image an edit carries.
4
+ *
5
+ * The messages. The host wraps every app message as untrusted input, so each one
6
+ * names what happened and carries no command, flag, path, price or credit word;
7
+ * the agent confirms through the model-visible data tool, which returns the
8
+ * server's own trusted text. Six messages exist, one per click (spec v2 9.2):
9
+ * New options and Generate more, More like this, Edit, Select, Branch and
10
+ * Convert. The user's own words (a steer note, an edit instruction, the Branch
11
+ * explanation) are never put in a message; the agent reads them from the data
12
+ * tool, quoted. `runDir` is named in each because the tools take it and a
13
+ * thread may hold several workspaces.
14
+ *
15
+ * The marked image. The hosted server does no image work, so the screen
16
+ * composites the strokes onto the parent itself and sends the result with the
17
+ * edit: the parent as shown (the display rendition), scaled so its long edge is
18
+ * at most 1280 px, the strokes in whichever of four colours is farthest from
19
+ * the image's mean colour (as the local server chooses), round caps, a width of
20
+ * 0.8 percent of the shorter side (at least 3 px), exported as a JPEG whose
21
+ * quality steps down until it fits in 300 KiB, and whose size steps down if no
22
+ * quality does. A canvas that cannot be read or exported is an error the dialog
23
+ * shows; the edit is not sent without the picture it asked for.
24
+ *
25
+ * Fragment of the view's script; String.raw, no backtick, no dollar-brace.
26
+ */
27
+ export declare const SLATE_UI_REMOTE: string;
28
+ //# sourceMappingURL=mcp-slate-ui-script-remote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-slate-ui-script-remote.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-script-remote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,eAAe,QAuH3B,CAAC"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * What only the hosted target does (TARGET is "remote"): the words it says to the
3
+ * agent, and the marked image an edit carries.
4
+ *
5
+ * The messages. The host wraps every app message as untrusted input, so each one
6
+ * names what happened and carries no command, flag, path, price or credit word;
7
+ * the agent confirms through the model-visible data tool, which returns the
8
+ * server's own trusted text. Six messages exist, one per click (spec v2 9.2):
9
+ * New options and Generate more, More like this, Edit, Select, Branch and
10
+ * Convert. The user's own words (a steer note, an edit instruction, the Branch
11
+ * explanation) are never put in a message; the agent reads them from the data
12
+ * tool, quoted. `runDir` is named in each because the tools take it and a
13
+ * thread may hold several workspaces.
14
+ *
15
+ * The marked image. The hosted server does no image work, so the screen
16
+ * composites the strokes onto the parent itself and sends the result with the
17
+ * edit: the parent as shown (the display rendition), scaled so its long edge is
18
+ * at most 1280 px, the strokes in whichever of four colours is farthest from
19
+ * the image's mean colour (as the local server chooses), round caps, a width of
20
+ * 0.8 percent of the shorter side (at least 3 px), exported as a JPEG whose
21
+ * quality steps down until it fits in 300 KiB, and whose size steps down if no
22
+ * quality does. A canvas that cannot be read or exported is an error the dialog
23
+ * shows; the edit is not sent without the picture it asked for.
24
+ *
25
+ * Fragment of the view's script; String.raw, no backtick, no dollar-brace.
26
+ */
27
+ export const SLATE_UI_REMOTE = String.raw `
28
+ // ---- the six messages ----
29
+ function remoteRunMessage(action, opId) {
30
+ var head;
31
+ if (action.kind === "edit") {
32
+ var parent = ver(action.versionId);
33
+ head = "I asked to edit " + (parent ? parent.label : "an option");
34
+ } else if (action.mode === "like") {
35
+ var from = ver(action.fromVersionId);
36
+ head = "I asked for more like " + (from ? from.label : "an option");
37
+ } else head = "I asked for new options";
38
+ return head + " in the Design workspace (request " + opId + ", runDir " + state.view.runDir + "). Please confirm it with " + TOOLS.data + ", then carry it out.";
39
+ }
40
+ function remoteSelectMessage(label) {
41
+ return "I selected " + label + " in the Design workspace (runDir " + state.view.runDir + "). Please confirm it with " + TOOLS.data + " and tell me its version id.";
42
+ }
43
+ function remoteHandoffMessage(kind, label, handoffId) {
44
+ return "I asked to " + (kind === "branch" ? "build from" : "convert") + " " + label + " in the Design workspace (request " + handoffId + ", runDir " + state.view.runDir + "). Please confirm it with " + TOOLS.data + ", then carry it out.";
45
+ }
46
+ // The run is recorded before the agent is told, and a host that refuses the message is shown, not thrown: the request
47
+ // is on the server and the person can ask their agent for it.
48
+ function remoteTellRun(action, opId) {
49
+ messageAgent(remoteRunMessage(action, opId)).then(function () {}, function (err) {
50
+ setStatus(tpl(COPY.sentRefused, { detail: errText(err) }), "err");
51
+ });
52
+ }
53
+
54
+ // ---- the marked image ----
55
+ var MARK_COLORS = [
56
+ { name: "magenta", hex: "#ff00ff", rgb: [255, 0, 255] },
57
+ { name: "cyan", hex: "#00e5ff", rgb: [0, 229, 255] },
58
+ { name: "red", hex: "#ff3b30", rgb: [255, 59, 48] },
59
+ { name: "yellow", hex: "#ffee00", rgb: [255, 238, 0] }
60
+ ];
61
+ var MARK_LONG_EDGE = 1280;
62
+ var MARK_MAX_BYTES = 300 * 1024;
63
+ var MARK_QUALITIES = [0.9, 0.82, 0.74, 0.66, 0.58, 0.5, 0.42, 0.34];
64
+ var MARK_SHRINK = 0.85;
65
+ var MARK_MIN_LONG_EDGE = 320;
66
+
67
+ function markPicture(src) {
68
+ return new Promise(function (resolve, reject) {
69
+ var img = document.createElement("img");
70
+ img.onload = function () { resolve(img); };
71
+ img.onerror = function () { reject(new Error("the image could not be read")); };
72
+ img.src = src;
73
+ });
74
+ }
75
+ function markCanvas(w, h) {
76
+ var canvas = document.createElement("canvas");
77
+ canvas.width = w;
78
+ canvas.height = h;
79
+ var ctx = canvas.getContext && canvas.getContext("2d");
80
+ if (!ctx) throw new Error("no canvas is available");
81
+ return { canvas: canvas, ctx: ctx };
82
+ }
83
+ // The colour farthest (in RGB) from the image's mean; the first listed wins a tie.
84
+ function markColorFor(img) {
85
+ var side = 16;
86
+ var small = markCanvas(side, side);
87
+ small.ctx.drawImage(img, 0, 0, side, side);
88
+ var data = small.ctx.getImageData(0, 0, side, side).data;
89
+ var sum = [0, 0, 0];
90
+ var n = data.length / 4;
91
+ for (var i = 0; i < data.length; i += 4) { sum[0] += data[i]; sum[1] += data[i + 1]; sum[2] += data[i + 2]; }
92
+ var mean = [sum[0] / n, sum[1] / n, sum[2] / n];
93
+ function far(c) { return Math.sqrt(Math.pow(c.rgb[0] - mean[0], 2) + Math.pow(c.rgb[1] - mean[1], 2) + Math.pow(c.rgb[2] - mean[2], 2)); }
94
+ return MARK_COLORS.reduce(function (best, c) { return far(c) > far(best) ? c : best; });
95
+ }
96
+ function markPaint(ctx, w, h, strokes, hex) {
97
+ var width = Math.max(3, Math.min(w, h) * 0.008);
98
+ ctx.lineCap = "round";
99
+ ctx.lineJoin = "round";
100
+ ctx.strokeStyle = hex;
101
+ ctx.fillStyle = hex;
102
+ ctx.lineWidth = width;
103
+ strokes.forEach(function (stroke) {
104
+ ctx.beginPath();
105
+ if (stroke.length === 1) {
106
+ ctx.arc(stroke[0][0] / 1000 * w, stroke[0][1] / 1000 * h, width / 2, 0, Math.PI * 2);
107
+ ctx.fill();
108
+ return;
109
+ }
110
+ ctx.moveTo(stroke[0][0] / 1000 * w, stroke[0][1] / 1000 * h);
111
+ for (var i = 1; i < stroke.length; i++) ctx.lineTo(stroke[i][0] / 1000 * w, stroke[i][1] / 1000 * h);
112
+ ctx.stroke();
113
+ });
114
+ }
115
+ // Bytes of a base64 string.
116
+ function base64Bytes(text) {
117
+ var pad = text.charAt(text.length - 1) === "=" ? (text.charAt(text.length - 2) === "=" ? 2 : 1) : 0;
118
+ return text.length * 3 / 4 - pad;
119
+ }
120
+ // The picture with the strokes on it, as a JPEG within the caps: the first quality that fits, then a smaller picture.
121
+ function compositeMarked(version, strokes) {
122
+ return wantImage(version, "full", true).then(markPicture).then(function (img) {
123
+ var sw = img.naturalWidth || img.width;
124
+ var sh = img.naturalHeight || img.height;
125
+ if (!(sw > 0) || !(sh > 0)) throw new Error("the image has no size");
126
+ var color = markColorFor(img);
127
+ var scale = Math.min(1, MARK_LONG_EDGE / Math.max(sw, sh));
128
+ for (;;) {
129
+ var w = Math.max(1, Math.round(sw * scale));
130
+ var h = Math.max(1, Math.round(sh * scale));
131
+ var target = markCanvas(w, h);
132
+ target.ctx.drawImage(img, 0, 0, w, h);
133
+ markPaint(target.ctx, w, h, strokes, color.hex);
134
+ for (var q = 0; q < MARK_QUALITIES.length; q++) {
135
+ var url = target.canvas.toDataURL("image/jpeg", MARK_QUALITIES[q]);
136
+ var comma = url.indexOf(",");
137
+ if (url.indexOf("data:image/jpeg") !== 0 || comma < 0) throw new Error("the canvas could not export a JPEG");
138
+ var data = url.slice(comma + 1);
139
+ if (base64Bytes(data) <= MARK_MAX_BYTES) return { mimeType: "image/jpeg", data: data, color: color.name };
140
+ }
141
+ scale *= MARK_SHRINK;
142
+ if (Math.max(sw, sh) * scale < MARK_MIN_LONG_EDGE) throw new Error("the marked image would be too large");
143
+ }
144
+ });
145
+ }
146
+ `;
147
+ //# sourceMappingURL=mcp-slate-ui-script-remote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-slate-ui-script-remote.js","sourceRoot":"","sources":["../src/mcp-slate-ui-script-remote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuHxC,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * The scribble layer of the Edit dialog: a canvas exactly over the image where
3
+ * a pointer draws freehand strokes, with Undo and Clear. A stroke is a
4
+ * polyline of integer permille points [x, y] (0 to 1000 of the displayed
5
+ * image's width and height), so it does not depend on the size it was drawn
6
+ * at; that is also what the edit run carries. The local server draws the
7
+ * annotated image itself, so nothing is exported here; the hosted target
8
+ * composites and exports its own (mcp-slate-ui-script-remote.ts).
9
+ *
10
+ * Limits (spec v3, section 2): at most 24 strokes, 400 points in a stroke and
11
+ * 3,000 points in all; points closer than 2 permille to the last one add
12
+ * nothing and are dropped. Past a limit the input is ignored, never truncated
13
+ * after the fact. A single click is a one-point stroke (a dot).
14
+ *
15
+ * Pointer only by design: the scribble is optional, and every other control
16
+ * of the dialog works by keyboard.
17
+ */
18
+ export declare const SLATE_UI_SCRIBBLE: string;
19
+ //# sourceMappingURL=mcp-slate-ui-script-scribble.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-slate-ui-script-scribble.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-script-scribble.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,iBAAiB,QA+F7B,CAAC"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * The scribble layer of the Edit dialog: a canvas exactly over the image where
3
+ * a pointer draws freehand strokes, with Undo and Clear. A stroke is a
4
+ * polyline of integer permille points [x, y] (0 to 1000 of the displayed
5
+ * image's width and height), so it does not depend on the size it was drawn
6
+ * at; that is also what the edit run carries. The local server draws the
7
+ * annotated image itself, so nothing is exported here; the hosted target
8
+ * composites and exports its own (mcp-slate-ui-script-remote.ts).
9
+ *
10
+ * Limits (spec v3, section 2): at most 24 strokes, 400 points in a stroke and
11
+ * 3,000 points in all; points closer than 2 permille to the last one add
12
+ * nothing and are dropped. Past a limit the input is ignored, never truncated
13
+ * after the fact. A single click is a one-point stroke (a dot).
14
+ *
15
+ * Pointer only by design: the scribble is optional, and every other control
16
+ * of the dialog works by keyboard.
17
+ */
18
+ export const SLATE_UI_SCRIBBLE = String.raw `
19
+ var SCRIBBLE_COLOR = "#ff2bd6";
20
+ var SCRIBBLE_MAX_STROKES = 24;
21
+ var SCRIBBLE_MAX_POINTS = 400;
22
+ var SCRIBBLE_MAX_TOTAL = 3000;
23
+ var SCRIBBLE_MIN_GAP = 2;
24
+
25
+ function scribbleTotal(d) { return d.strokes.reduce(function (n, s) { return n + s.length; }, 0); }
26
+
27
+ // Paint the strokes on the canvas: round caps, a width of 0.8 percent of the shorter side.
28
+ function scribblePaint(d) {
29
+ var canvas = d.canvas;
30
+ var ctx = canvas && canvas.getContext && canvas.getContext("2d");
31
+ if (!ctx) return;
32
+ var w = canvas.width;
33
+ var h = canvas.height;
34
+ ctx.clearRect(0, 0, w, h);
35
+ var width = Math.max(2, Math.min(w, h) * 0.008);
36
+ ctx.lineCap = "round";
37
+ ctx.lineJoin = "round";
38
+ ctx.strokeStyle = SCRIBBLE_COLOR;
39
+ ctx.fillStyle = SCRIBBLE_COLOR;
40
+ ctx.lineWidth = width;
41
+ d.strokes.forEach(function (stroke) {
42
+ ctx.beginPath();
43
+ if (stroke.length === 1) {
44
+ ctx.arc(stroke[0][0] / 1000 * w, stroke[0][1] / 1000 * h, width / 2, 0, Math.PI * 2);
45
+ ctx.fill();
46
+ return;
47
+ }
48
+ ctx.moveTo(stroke[0][0] / 1000 * w, stroke[0][1] / 1000 * h);
49
+ for (var i = 1; i < stroke.length; i++) ctx.lineTo(stroke[i][0] / 1000 * w, stroke[i][1] / 1000 * h);
50
+ ctx.stroke();
51
+ });
52
+ }
53
+
54
+ function scribbleUndo(d) {
55
+ if (d.committing || d.strokes.length === 0) return;
56
+ d.strokes.pop();
57
+ d.current = null;
58
+ scribblePaint(d);
59
+ updateDialogUi();
60
+ }
61
+ function scribbleClear(d) {
62
+ if (d.committing) return;
63
+ d.strokes = [];
64
+ d.current = null;
65
+ scribblePaint(d);
66
+ updateDialogUi();
67
+ }
68
+
69
+ function scribbleAttach(wrap, d) {
70
+ var canvas = document.createElement("canvas");
71
+ canvas.className = "scribble";
72
+ canvas.setAttribute("aria-label", COPY.scribbleLabel);
73
+ d.canvas = canvas;
74
+ wrap.appendChild(canvas);
75
+ // The bitmap follows the size the image is shown at; the strokes repaint from their permille points.
76
+ function fit() {
77
+ var r = canvas.getBoundingClientRect();
78
+ var scale = window.devicePixelRatio || 1;
79
+ var w = Math.max(1, Math.round(r.width * scale));
80
+ var h = Math.max(1, Math.round(r.height * scale));
81
+ if (canvas.width !== w || canvas.height !== h) { canvas.width = w; canvas.height = h; }
82
+ scribblePaint(d);
83
+ }
84
+ new ResizeObserver(fit).observe(wrap);
85
+ function point(e) {
86
+ var r = canvas.getBoundingClientRect();
87
+ var x = Math.round((e.clientX - r.left) / (r.width || 1) * 1000);
88
+ var y = Math.round((e.clientY - r.top) / (r.height || 1) * 1000);
89
+ return [Math.max(0, Math.min(1000, x)), Math.max(0, Math.min(1000, y))];
90
+ }
91
+ canvas.addEventListener("pointerdown", function (e) {
92
+ if (d.committing || d.strokes.length >= SCRIBBLE_MAX_STROKES || scribbleTotal(d) >= SCRIBBLE_MAX_TOTAL) return;
93
+ d.current = [point(e)];
94
+ d.strokes.push(d.current);
95
+ if (canvas.setPointerCapture) { try { canvas.setPointerCapture(e.pointerId); } catch (err) { /* capture is best effort */ } }
96
+ if (e.preventDefault) e.preventDefault();
97
+ scribblePaint(d);
98
+ updateDialogUi();
99
+ });
100
+ canvas.addEventListener("pointermove", function (e) {
101
+ if (!d.current) return;
102
+ if (d.current.length >= SCRIBBLE_MAX_POINTS || scribbleTotal(d) >= SCRIBBLE_MAX_TOTAL) return;
103
+ var p = point(e);
104
+ var last = d.current[d.current.length - 1];
105
+ if (Math.sqrt((p[0] - last[0]) * (p[0] - last[0]) + (p[1] - last[1]) * (p[1] - last[1])) < SCRIBBLE_MIN_GAP) return;
106
+ d.current.push(p);
107
+ scribblePaint(d);
108
+ });
109
+ function finish() { d.current = null; updateDialogUi(); }
110
+ canvas.addEventListener("pointerup", finish);
111
+ canvas.addEventListener("pointercancel", finish);
112
+ }
113
+ `;
114
+ //# sourceMappingURL=mcp-slate-ui-script-scribble.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-slate-ui-script-scribble.js","sourceRoot":"","sources":["../src/mcp-slate-ui-script-scribble.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+F1C,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Select and the two hand-offs. Select acts at once: no dialog, and no reason
3
+ * (the pick tool takes none from here). It records the pick and then tells the
4
+ * agent, best effort. Branch and Convert (dialogs, in
5
+ * mcp-slate-ui-script-dialog.ts) end here: they record the request with the
6
+ * hand-off tool, under an id minted when the dialog opened, and then tell the
7
+ * agent to read it.
8
+ *
9
+ * What the agent is told names what happened and carries no command, no flag
10
+ * and no backtick: the host wraps app messages as untrusted input, so the
11
+ * agent confirms with the model-visible data tool. The user's own words (the
12
+ * Branch explanation) are never put in a message; the agent reads them from
13
+ * the record.
14
+ */
15
+ export declare const SLATE_UI_SELECT: string;
16
+ //# sourceMappingURL=mcp-slate-ui-script-select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-slate-ui-script-select.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-script-select.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,eAAe,QAyD3B,CAAC"}