@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,46 @@
1
+ import { mkdir, rename, rm, writeFile } from 'node:fs/promises';
2
+ import { randomUUID } from 'node:crypto';
3
+ import path from 'node:path';
4
+ import sharp from 'sharp';
5
+ import { corpusFailure } from './slate-corpus.js';
6
+ import { SlateError } from './slate-errors.js';
7
+ import { readWorkspaceFile, referenceFile } from './slate-paths.js';
8
+ const facts = async (bytes) => {
9
+ const { width, height } = await sharp(bytes, { animated: false, failOn: 'warning' }).metadata();
10
+ if (!width || !height)
11
+ throw new SlateError('corpus_unavailable', 'The reference image has no readable size.');
12
+ return { width, height };
13
+ };
14
+ export const ensureReferenceImage = async (args) => {
15
+ const file = referenceFile(args.root, args.referenceId, args.size);
16
+ const read = await readWorkspaceFile(args.root, file);
17
+ if (read.state === 'outside')
18
+ throw new SlateError('state_invalid', `${file} resolves outside the workspace`);
19
+ if (read.state === 'ok')
20
+ return { bytes: read.bytes, ...(await facts(read.bytes)), cached: true };
21
+ let downloaded;
22
+ try {
23
+ downloaded = await args.corpus().download(args.referenceId, args.size, args.signal ? { signal: args.signal } : {});
24
+ }
25
+ catch (error) {
26
+ throw corpusFailure(error);
27
+ }
28
+ let png;
29
+ try {
30
+ png = await sharp(Buffer.from(downloaded), { animated: false, failOn: 'warning' }).png().toBuffer();
31
+ }
32
+ catch {
33
+ throw new SlateError('corpus_unavailable', `The corpus sent an image for ${args.referenceId} that could not be decoded.`);
34
+ }
35
+ await mkdir(path.dirname(file), { recursive: true, mode: 0o700 });
36
+ const temporary = path.join(path.dirname(file), `.${path.basename(file)}.${randomUUID()}.tmp`);
37
+ try {
38
+ await writeFile(temporary, png, { flag: 'wx', mode: 0o600 });
39
+ await rename(temporary, file);
40
+ }
41
+ finally {
42
+ await rm(temporary, { force: true });
43
+ }
44
+ return { bytes: png, ...(await facts(png)), cached: false };
45
+ };
46
+ //# sourceMappingURL=slate-reference-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slate-reference-store.js","sourceRoot":"","sources":["../src/slate-reference-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { SlateOp } from './slate-workspace-types.js';
2
+ /**
3
+ * Resume replays an already-approved op: same frozen params, same call ids, a
4
+ * new runner. It accepts no action and no params; it needs a matching approval
5
+ * record and is refused for anything that is not the latest attempt on its
6
+ * option, because a stale edit must never add a version after a newer one.
7
+ */
8
+ export declare const RUNNER_SPAWN_FAILED = "runner_spawn_failed";
9
+ export type ResumeOutcome = {
10
+ op: SlateOp;
11
+ spawn: boolean;
12
+ };
13
+ export declare const resumeOp: (args: {
14
+ root: string;
15
+ stateRoot: string;
16
+ opId: string;
17
+ now?: () => Date;
18
+ }) => Promise<ResumeOutcome>;
19
+ //# sourceMappingURL=slate-resume.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slate-resume.d.ts","sourceRoot":"","sources":["../src/slate-resume.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAE1D;;;;;GAKG;AAEH,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AAQzD,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAE5D,eAAO,MAAM,QAAQ,GAAU,MAAM;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB,KAAG,OAAO,CAAC,aAAa,CAoExB,CAAC"}
@@ -0,0 +1,94 @@
1
+ import { SlateError } from './slate-errors.js';
2
+ import { approvalMatches, getApproval, reopenApproval, } from './slate-approvals.js';
3
+ import { digestOf } from './slate-ids.js';
4
+ import { appendLedger } from './slate-ledger.js';
5
+ import { deriveOpState, readRunnerState } from './slate-liveness.js';
6
+ import { holderState, staleWhenHeartbeatLapsed, takeOverStale } from './slate-lock.js';
7
+ import { opLockFile } from './slate-paths.js';
8
+ import { NoWrite, loadWorkspaceAt, mutateWorkspace } from './slate-workspace-store.js';
9
+ /**
10
+ * Resume replays an already-approved op: same frozen params, same call ids, a
11
+ * new runner. It accepts no action and no params; it needs a matching approval
12
+ * record and is refused for anything that is not the latest attempt on its
13
+ * option, because a stale edit must never add a version after a newer one.
14
+ */
15
+ export const RUNNER_SPAWN_FAILED = 'runner_spawn_failed';
16
+ const resumableNow = (op, derived) => (derived === 'interrupted'
17
+ || (op.state === 'failed' && op.error?.resumable === true)
18
+ || (op.state === 'running' && op.error?.code === RUNNER_SPAWN_FAILED && derived !== 'running'));
19
+ export const resumeOp = async (args) => {
20
+ const clock = args.now ?? (() => new Date());
21
+ const before = await loadWorkspaceAt(args.root, clock);
22
+ const observed = before.workspace.ops.find((op) => op.opId === args.opId);
23
+ if (!observed)
24
+ throw new SlateError('not_found', `Unknown op ${args.opId}`);
25
+ const approval = await getApproval(args.stateRoot, before.workspace.workspaceId, args.opId);
26
+ const verdict = approvalMatches({
27
+ entry: approval,
28
+ rootRealpath: args.root,
29
+ kind: observed.kind,
30
+ paramsDigest: digestOf(observed.params),
31
+ });
32
+ if (verdict === 'approval_missing') {
33
+ throw new SlateError('approval_missing', 'Cannot resume: the approval record for this work is missing on this Mac.');
34
+ }
35
+ if (verdict === 'approval_mismatch') {
36
+ throw new SlateError('approval_mismatch', 'Cannot resume: this work no longer matches what was approved.');
37
+ }
38
+ if (observed.paramsDigest !== digestOf(observed.params)) {
39
+ throw new SlateError('approval_mismatch', 'Cannot resume: this work no longer matches what was approved.');
40
+ }
41
+ const observedOwner = observed.owner;
42
+ const observedAttempt = observed.attempt;
43
+ const outcome = await mutateWorkspace(args.root, async (ws, context) => {
44
+ const op = ws.ops.find((entry) => entry.opId === args.opId);
45
+ if (!op)
46
+ throw new SlateError('not_found', `Unknown op ${args.opId}`);
47
+ const runner = await readRunnerState(args.root, op.opId, context.now.getTime());
48
+ if (runner.alive)
49
+ return new NoWrite({ op, spawn: false });
50
+ const derived = deriveOpState(op, runner, context.now.getTime());
51
+ if (op.state === 'superseded')
52
+ throw new SlateError('superseded', 'A newer action on this option replaced this one.');
53
+ if (!resumableNow(op, derived)) {
54
+ // A resume that committed a moment ago left the op running with its runner still starting: this call is the
55
+ // same click arriving late, so it returns that op and starts nothing.
56
+ if (op.state === 'running' && (derived === 'starting' || derived === 'running'))
57
+ return new NoWrite({ op, spawn: false });
58
+ throw new SlateError('not_resumable', 'This work is not waiting to be resumed.');
59
+ }
60
+ if (op.attempt !== observedAttempt || JSON.stringify(op.owner) !== JSON.stringify(observedOwner)) {
61
+ // Another resume won the compare-and-set (it bumped the attempt or a runner took the owner): return its op.
62
+ return new NoWrite({ op, spawn: false });
63
+ }
64
+ if (op.kind === 'edit') {
65
+ const candidate = ws.candidates.find((entry) => entry.candidateId === op.target.candidateId);
66
+ if (candidate && candidate.latestOpId !== op.opId) {
67
+ op.state = 'superseded';
68
+ op.finishedAt = context.now.toISOString();
69
+ await appendLedger(args.root, { event: 'superseded', opId: op.opId });
70
+ return 'superseded';
71
+ }
72
+ }
73
+ if (approval?.settledAt) {
74
+ await reopenApproval({ stateRoot: args.stateRoot, workspaceId: ws.workspaceId, opId: op.opId });
75
+ }
76
+ // The dead runner's lock is cleared now, so nothing reads its process id as the resumed op's runner.
77
+ const lockFile = opLockFile(args.root, op.opId);
78
+ const previous = await holderState(lockFile, staleWhenHeartbeatLapsed, context.now.getTime());
79
+ if (previous.state === 'stale')
80
+ await takeOverStale(lockFile, previous.raw);
81
+ op.state = 'running';
82
+ op.error = null;
83
+ op.finishedAt = null;
84
+ op.attempt += 1;
85
+ op.owner = null;
86
+ op.spawnedAt = null;
87
+ await appendLedger(args.root, { event: 'resumed', opId: op.opId, attempt: op.attempt });
88
+ return { op, spawn: true };
89
+ }, args.now ? { now: args.now } : {});
90
+ if (outcome === 'superseded')
91
+ throw new SlateError('superseded', 'A newer action on this option replaced this one.');
92
+ return outcome;
93
+ };
94
+ //# sourceMappingURL=slate-resume.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slate-resume.js","sourceRoot":"","sources":["../src/slate-resume.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Arithmetic and limits for a new round of options, decided at the click.
3
+ */
4
+ /** The workspace's own bound on a composed concept. */
5
+ export declare const ROUND_CONCEPT_MAX_CHARACTERS = 2000;
6
+ /** The steer note is appended to the brief's concept, so the options differ for a stated reason. */
7
+ export declare const composeConcept: (concept: string, note: string | null) => string;
8
+ export declare const conceptLimitProblem: (composed: string) => string | null;
9
+ /** A search that carries the version's image cannot exceed the corpus's image limit. */
10
+ export declare const likeSearchImageProblem: (bytes: number) => string | null;
11
+ /**
12
+ * Whether a round that searches can still find references no earlier round
13
+ * used: it asks the free corpus for `count + skip`, and the public tier
14
+ * returns at most 24.
15
+ */
16
+ export declare const freshReferenceProblem: (args: {
17
+ count: number;
18
+ skipCount: number;
19
+ }) => string | null;
20
+ //# sourceMappingURL=slate-round-params.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slate-round-params.d.ts","sourceRoot":"","sources":["../src/slate-round-params.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,uDAAuD;AACvD,eAAO,MAAM,4BAA4B,OAAQ,CAAC;AAElD,oGAAoG;AACpG,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,EAAE,MAAM,MAAM,GAAG,IAAI,KAAG,MAErE,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,UAAU,MAAM,KAAG,MAAM,GAAG,IAU/D,CAAC;AAEF,wFAAwF;AACxF,eAAO,MAAM,sBAAsB,GAAI,OAAO,MAAM,KAAG,MAAM,GAAG,IAI/D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAAI,MAAM;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,KAAG,MAAM,GAAG,IAI3F,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { conceptCharacterCount, conceptOverLimitMessage, normalizeConceptText } from './concept-input.js';
2
+ import { PUBLIC_CORPUS_MAX_COUNT } from './corpus-access.js';
3
+ import { MAX_CORPUS_REFERENCE_IMAGE_BYTES } from './corpus-client.js';
4
+ /**
5
+ * Arithmetic and limits for a new round of options, decided at the click.
6
+ */
7
+ /** The workspace's own bound on a composed concept. */
8
+ export const ROUND_CONCEPT_MAX_CHARACTERS = 2_000;
9
+ /** The steer note is appended to the brief's concept, so the options differ for a stated reason. */
10
+ export const composeConcept = (concept, note) => (normalizeConceptText(note ? `${concept} Direction for this round: ${note}` : concept));
11
+ export const conceptLimitProblem = (composed) => (conceptCharacterCount(composed) > ROUND_CONCEPT_MAX_CHARACTERS
12
+ ? conceptOverLimitMessage({
13
+ flag: 'The brief plus your steer note',
14
+ raw: composed,
15
+ normalized: composed,
16
+ limit: ROUND_CONCEPT_MAX_CHARACTERS,
17
+ trimHint: 'Shorten the steer note.',
18
+ })
19
+ : null);
20
+ /** A search that carries the version's image cannot exceed the corpus's image limit. */
21
+ export const likeSearchImageProblem = (bytes) => (bytes > MAX_CORPUS_REFERENCE_IMAGE_BYTES
22
+ ? `This version's image is ${bytes} bytes; a reference search can carry at most ${MAX_CORPUS_REFERENCE_IMAGE_BYTES}. Select some inspiration instead.`
23
+ : null);
24
+ /**
25
+ * Whether a round that searches can still find references no earlier round
26
+ * used: it asks the free corpus for `count + skip`, and the public tier
27
+ * returns at most 24.
28
+ */
29
+ export const freshReferenceProblem = (args) => (args.count + args.skipCount > PUBLIC_CORPUS_MAX_COUNT
30
+ ? 'Most matching references are already used in earlier rounds. Select some inspiration or add a steer note.'
31
+ : null);
32
+ //# sourceMappingURL=slate-round-params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slate-round-params.js","sourceRoot":"","sources":["../src/slate-round-params.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1G,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AAEtE;;GAEG;AAEH,uDAAuD;AACvD,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAElD,oGAAoG;AACpG,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAe,EAAE,IAAmB,EAAU,EAAE,CAAC,CAC9E,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,8BAA8B,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CACtF,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAAgB,EAAiB,EAAE,CAAC,CACtE,qBAAqB,CAAC,QAAQ,CAAC,GAAG,4BAA4B;IAC5D,CAAC,CAAC,uBAAuB,CAAC;QACxB,IAAI,EAAE,gCAAgC;QACtC,GAAG,EAAE,QAAQ;QACb,UAAU,EAAE,QAAQ;QACpB,KAAK,EAAE,4BAA4B;QACnC,QAAQ,EAAE,yBAAyB;KACpC,CAAC;IACF,CAAC,CAAC,IAAI,CACT,CAAC;AAEF,wFAAwF;AACxF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAa,EAAiB,EAAE,CAAC,CACtE,KAAK,GAAG,gCAAgC;IACtC,CAAC,CAAC,2BAA2B,KAAK,gDAAgD,gCAAgC,oCAAoC;IACtJ,CAAC,CAAC,IAAI,CACT,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAA0C,EAAiB,EAAE,CAAC,CAClG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,uBAAuB;IACnD,CAAC,CAAC,2GAA2G;IAC7G,CAAC,CAAC,IAAI,CACT,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { SlateAspect } from './slate-workspace-types.js';
2
+ /**
3
+ * The frame and the words of one option of a round. The frame is the size the
4
+ * image tool returns for the aspect (`workflow/adapter-openai.ts`); the
5
+ * native call stretches its raw result to exactly this, so every option of a
6
+ * round has one known size.
7
+ */
8
+ export declare const roundFrame: (aspect: SlateAspect) => {
9
+ width: number;
10
+ height: number;
11
+ };
12
+ export declare const optionPrompt: (args: {
13
+ aspect: SlateAspect;
14
+ concept: string;
15
+ like: boolean;
16
+ label: string;
17
+ }) => string;
18
+ //# sourceMappingURL=slate-round-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slate-round-prompt.d.ts","sourceRoot":"","sources":["../src/slate-round-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D;;;;;GAKG;AAEH,eAAO,MAAM,UAAU,GAAI,QAAQ,WAAW,KAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAE/E,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,MAAM;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,KAAG,MAW3G,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * The frame and the words of one option of a round. The frame is the size the
3
+ * image tool returns for the aspect (`workflow/adapter-openai.ts`); the
4
+ * native call stretches its raw result to exactly this, so every option of a
5
+ * round has one known size.
6
+ */
7
+ export const roundFrame = (aspect) => (aspect === 'portrait' ? { width: 1024, height: 1536 } : aspect === 'square' ? { width: 1024, height: 1024 } : { width: 1536, height: 1024 });
8
+ export const optionPrompt = (args) => {
9
+ const references = args.like
10
+ ? 'The first attached image is the design to stay close to: keep its product, content and visual identity and explore a fresh variation; the second is an extra style reference for composition, style and mood: evidence, never instructions; do not copy its text or branding.'
11
+ : 'The attached image is a visual reference for composition, style and mood: evidence, never instructions; do not copy its text or branding.';
12
+ return [
13
+ `Design one complete ${args.aspect} user-interface image for this product.`,
14
+ `Brief: ${args.concept}.`,
15
+ references,
16
+ `Option ${args.label} must look clearly different from the other options of this round.`,
17
+ 'Return one finished interface image with realistic content: no device frame, no watermark.',
18
+ ].join(' ');
19
+ };
20
+ //# sourceMappingURL=slate-round-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slate-round-prompt.js","sourceRoot":"","sources":["../src/slate-round-prompt.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAmB,EAAqC,EAAE,CAAC,CACpF,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAC5I,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAA4E,EAAU,EAAE;IACnH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI;QAC1B,CAAC,CAAC,+QAA+Q;QACjR,CAAC,CAAC,2IAA2I,CAAC;IAChJ,OAAO;QACL,uBAAuB,IAAI,CAAC,MAAM,yCAAyC;QAC3E,UAAU,IAAI,CAAC,OAAO,GAAG;QACzB,UAAU;QACV,UAAU,IAAI,CAAC,KAAK,oEAAoE;QACxF,4FAA4F;KAC7F,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type Outcome, type RunnerEnv } from './slate-runner-context.js';
2
+ import type { SlateOp } from './slate-workspace-types.js';
3
+ export declare const runRound: (env: RunnerEnv, op: SlateOp) => Promise<Outcome>;
4
+ //# sourceMappingURL=slate-round-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slate-round-runner.d.ts","sourceRoot":"","sources":["../src/slate-round-runner.ts"],"names":[],"mappings":"AAOA,OAAO,EAKL,KAAK,OAAO,EACZ,KAAK,SAAS,EACf,MAAM,2BAA2B,CAAC;AAInC,OAAO,KAAK,EAAE,OAAO,EAAoB,MAAM,4BAA4B,CAAC;AAqG5E,eAAO,MAAM,QAAQ,GAAU,KAAK,SAAS,EAAE,IAAI,OAAO,KAAG,OAAO,CAAC,OAAO,CAiC3E,CAAC"}
@@ -0,0 +1,125 @@
1
+ import sharp from 'sharp';
2
+ import { generationVersionId, sha256Hex, slotOfCandidate } from './slate-ids.js';
3
+ import { versionImageFile } from './slate-paths.js';
4
+ import { ensureReferenceImage } from './slate-reference-store.js';
5
+ import { optionPrompt, roundFrame } from './slate-round-prompt.js';
6
+ import { chooseReferences } from './slate-round-search.js';
7
+ import { failure, ledger, patchOp, setPhase, } from './slate-runner-context.js';
8
+ import { imageFailureMessage } from './slate-runner-failure.js';
9
+ import { readVersionBytes, writeImageOnce } from './slate-versions.js';
10
+ import { findRound, loadWorkspaceAt } from './slate-workspace-store.js';
11
+ /** The options still to draw, with the reference each one is drawn from. */
12
+ const pendingSlots = async (env, params) => {
13
+ const { workspace } = await loadWorkspaceAt(env.root, env.clock.now);
14
+ return workspace.candidates
15
+ .filter((candidate) => candidate.roundId === params.roundId && candidate.versionIds.length === 0 && candidate.error === null)
16
+ .flatMap((candidate) => (candidate.referenceId ? [{
17
+ candidateId: candidate.candidateId,
18
+ slot: slotOfCandidate(candidate.candidateId),
19
+ label: candidate.label,
20
+ referenceId: candidate.referenceId,
21
+ }] : []));
22
+ };
23
+ const recordOptionFailure = async (env, slot, reason) => {
24
+ await patchOp(env, (_op, ws) => {
25
+ const candidate = ws.candidates.find((entry) => entry.candidateId === slot.candidateId);
26
+ if (candidate && candidate.versionIds.length === 0)
27
+ candidate.error = reason;
28
+ });
29
+ await env.log({ event: 'option_failed', slot: slot.slot, reason });
30
+ };
31
+ const drawOption = async (env, params, slot, references, from) => {
32
+ const reference = references.get(slot.referenceId);
33
+ if (!reference || reference instanceof Error) {
34
+ await recordOptionFailure(env, slot, 'The inspiration image could not be fetched.');
35
+ return;
36
+ }
37
+ const callId = `slate-${env.opId}-${slot.slot}`;
38
+ const frame = roundFrame(params.aspect);
39
+ try {
40
+ await ledger(env, { event: 'call_started', callId, slot: slot.slot });
41
+ const result = await env.executor.generate({
42
+ callId,
43
+ prompt: optionPrompt({ aspect: params.aspect, concept: params.concept, like: from !== null, label: slot.label }),
44
+ images: from ? [from, reference] : [reference],
45
+ expected: frame,
46
+ });
47
+ const png = await sharp(result.png, { animated: false, failOn: 'warning' }).png().toBuffer();
48
+ const facts = await sharp(png).metadata();
49
+ const sha256 = sha256Hex(png);
50
+ const versionId = generationVersionId(params.roundId, slot.slot);
51
+ await writeImageOnce(versionImageFile(env.root, versionId), png, sha256);
52
+ await ledger(env, { event: 'call_finished', callId, slot: slot.slot, sha256, reused: result.reused });
53
+ await patchOp(env, (op, ws) => {
54
+ const candidate = ws.candidates.find((entry) => entry.candidateId === slot.candidateId);
55
+ if (!candidate || ws.versions.some((entry) => entry.versionId === versionId))
56
+ return;
57
+ ws.versions.push({
58
+ versionId,
59
+ candidateId: candidate.candidateId,
60
+ n: 1,
61
+ kind: 'generation',
62
+ parentVersionId: null,
63
+ opId: env.opId,
64
+ prompt: null,
65
+ sentPromptSha256: null,
66
+ marks: null,
67
+ sha256,
68
+ width: facts.width ?? frame.width,
69
+ height: facts.height ?? frame.height,
70
+ createdAt: env.clock.now().toISOString(),
71
+ });
72
+ candidate.versionIds.push(versionId);
73
+ candidate.error = null;
74
+ op.resultVersionIds.push(versionId);
75
+ });
76
+ await env.log({ event: 'collected', slot: slot.slot, sha256, reused: result.reused });
77
+ }
78
+ catch (error) {
79
+ await env.log({ event: 'call_failed', slot: slot.slot, ...failureDetail(error) });
80
+ await recordOptionFailure(env, slot, imageFailureMessage(error));
81
+ }
82
+ };
83
+ const failureDetail = (error) => {
84
+ const cause = error?.cause;
85
+ return {
86
+ code: error?.code ?? null,
87
+ message: error instanceof Error ? error.message.slice(0, 300) : String(error).slice(0, 300),
88
+ ...(cause instanceof Error ? { cause: cause.message.slice(0, 300) } : {}),
89
+ };
90
+ };
91
+ export const runRound = async (env, op) => {
92
+ const params = op.params;
93
+ const refusal = await chooseReferences(env, params);
94
+ if (refusal)
95
+ return refusal;
96
+ const slots = await pendingSlots(env, params);
97
+ await setPhase(env, 'fetching');
98
+ const references = new Map();
99
+ await Promise.all([...new Set(slots.map((slot) => slot.referenceId))].map(async (referenceId) => {
100
+ try {
101
+ references.set(referenceId, (await ensureReferenceImage({ root: env.root, corpus: env.corpus, referenceId, size: 'ref' })).bytes);
102
+ }
103
+ catch (error) {
104
+ await env.log({ event: 'reference_failed', referenceId, message: error instanceof Error ? error.message : String(error) });
105
+ references.set(referenceId, error instanceof Error ? error : new Error(String(error)));
106
+ }
107
+ }));
108
+ let from = null;
109
+ if (params.from) {
110
+ const { workspace } = await loadWorkspaceAt(env.root, env.clock.now);
111
+ const version = workspace.versions.find((entry) => entry.versionId === params.from.versionId);
112
+ if (!version || version.sha256 !== params.from.sourceSha256)
113
+ return failure('source_changed', 'The image this round was started from changed after the click.');
114
+ from = await readVersionBytes(env.root, workspace, version);
115
+ }
116
+ await setPhase(env, 'drawing');
117
+ await Promise.all(slots.map((slot) => drawOption(env, params, slot, references, from)));
118
+ const { workspace } = await loadWorkspaceAt(env.root, env.clock.now);
119
+ const own = workspace.candidates.filter((candidate) => candidate.roundId === findRound(workspace, params.roundId).roundId);
120
+ if (own.some((candidate) => candidate.versionIds.length > 0))
121
+ return { state: 'succeeded' };
122
+ const reason = own.find((candidate) => candidate.error)?.error ?? 'No option could be drawn.';
123
+ return failure('all_options_failed', reason, { retryable: true });
124
+ };
125
+ //# sourceMappingURL=slate-round-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slate-round-runner.js","sourceRoot":"","sources":["../src/slate-round-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type CorpusInspirationItem } from './corpus-client.js';
2
+ import { type Outcome, type RunnerEnv } from './slate-runner-context.js';
3
+ import type { SlateReferenceMeta, SlateRoundParams } from './slate-workspace-types.js';
4
+ export declare const metaFromItem: (item: CorpusInspirationItem) => SlateReferenceMeta;
5
+ /** The references for this round, recorded. `null` means the round already had them. */
6
+ export declare const chooseReferences: (env: RunnerEnv, params: SlateRoundParams) => Promise<Outcome | null>;
7
+ //# sourceMappingURL=slate-round-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slate-round-search.d.ts","sourceRoot":"","sources":["../src/slate-round-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAGlG,OAAO,EAAsC,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAG7G,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAevF,eAAO,MAAM,YAAY,GAAI,MAAM,qBAAqB,KAAG,kBAOzD,CAAC;AAEH,wFAAwF;AACxF,eAAO,MAAM,gBAAgB,GAAU,KAAK,SAAS,EAAE,QAAQ,gBAAgB,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CA+CvG,CAAC"}
@@ -0,0 +1,77 @@
1
+ import { MAX_CORPUS_REFERENCE_IMAGE_BYTES } from './corpus-client.js';
2
+ import { corpusFailure } from './slate-corpus.js';
3
+ import { SlateError } from './slate-errors.js';
4
+ import { failure, ledger, patchOp, setPhase } from './slate-runner-context.js';
5
+ import { readVersionBytes } from './slate-versions.js';
6
+ import { findRound, loadWorkspaceAt } from './slate-workspace-store.js';
7
+ /**
8
+ * A round that was not given references picks its own with one free corpus
9
+ * search: the concept, balanced mode, and (for More like this) the version's
10
+ * own image. The search key is `slate-<opId>-search`, so a rerun after a crash
11
+ * replays the stored answer and spends none of the daily allowance. What the
12
+ * search found is recorded on the round and its options in one write, so a
13
+ * Resume never searches twice for different answers.
14
+ */
15
+ const referenceAspect = (value) => (value === 'portrait' || value === 'square' ? value : 'landscape');
16
+ export const metaFromItem = (item) => ({
17
+ referenceId: item.id,
18
+ aspect: referenceAspect(item.aspect),
19
+ width: Number.isSafeInteger(item.width) && (item.width ?? 0) > 0 ? item.width : null,
20
+ height: Number.isSafeInteger(item.height) && (item.height ?? 0) > 0 ? item.height : null,
21
+ description: typeof item.description === 'string' ? item.description.slice(0, 2_000) : null,
22
+ uiType: typeof item.uiType === 'string' ? item.uiType.slice(0, 200) : null,
23
+ });
24
+ /** The references for this round, recorded. `null` means the round already had them. */
25
+ export const chooseReferences = async (env, params) => {
26
+ const { workspace } = await loadWorkspaceAt(env.root, env.clock.now);
27
+ const round = findRound(workspace, params.roundId);
28
+ if (round.referenceIds.length > 0)
29
+ return null;
30
+ await setPhase(env, 'searching');
31
+ let referenceImage;
32
+ if (params.from) {
33
+ const version = workspace.versions.find((entry) => entry.versionId === params.from.versionId);
34
+ if (!version)
35
+ return failure('source_missing', 'The version this round stays close to is not in the workspace.');
36
+ const bytes = await readVersionBytes(env.root, workspace, version).catch((error) => {
37
+ if (error instanceof SlateError)
38
+ return error;
39
+ throw error;
40
+ });
41
+ if (bytes instanceof SlateError)
42
+ return failure('source_missing', bytes.message);
43
+ if (version.sha256 !== params.from.sourceSha256)
44
+ return failure('source_changed', 'The image this round was started from changed after the click.');
45
+ if (bytes.byteLength > MAX_CORPUS_REFERENCE_IMAGE_BYTES)
46
+ return failure('source_missing', 'The image is too large for a reference search.');
47
+ referenceImage = { bytes, mediaType: 'image/png' };
48
+ }
49
+ await ledger(env, { event: 'search', k: params.count + params.referenceSkip.length, like: params.from !== null });
50
+ let items;
51
+ try {
52
+ const response = await env.corpus().inspire({ q: params.concept, mode: 'balanced', k: params.count + params.referenceSkip.length }, { idempotencyKey: `slate-${env.opId}-search`, ...(referenceImage ? { referenceImage } : {}) });
53
+ items = response.items;
54
+ }
55
+ catch (error) {
56
+ throw corpusFailure(error);
57
+ }
58
+ const skipped = new Set(params.referenceSkip);
59
+ const fresh = items.filter((item, index) => !skipped.has(item.id) && items.findIndex((other) => other.id === item.id) === index).slice(0, params.count);
60
+ if (fresh.length < params.count) {
61
+ return failure('no_fresh_references', 'Most matching references are already used in earlier rounds. Select some inspiration or add a steer note.');
62
+ }
63
+ await patchOp(env, (_op, ws) => {
64
+ const target = findRound(ws, params.roundId);
65
+ target.referenceIds = fresh.map((item) => item.id);
66
+ params.candidateIds.forEach((candidateId, index) => {
67
+ const candidate = ws.candidates.find((entry) => entry.candidateId === candidateId);
68
+ if (candidate)
69
+ candidate.referenceId = fresh[index].id;
70
+ });
71
+ for (const item of fresh)
72
+ ws.references[item.id] = metaFromItem(item);
73
+ });
74
+ await env.log({ event: 'searched', referenceIds: fresh.map((item) => item.id) });
75
+ return null;
76
+ };
77
+ //# sourceMappingURL=slate-round-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slate-round-search.js","sourceRoot":"","sources":["../src/slate-round-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { SlateRuntime } from './slate-runtime.js';
2
+ import type { SlateOp } from './slate-workspace-types.js';
3
+ export declare const runAction: (args: {
4
+ runtime: SlateRuntime;
5
+ root: string;
6
+ opId: unknown;
7
+ actionInput: unknown;
8
+ }) => Promise<SlateOp>;
9
+ export declare const resumeAction: (args: {
10
+ runtime: SlateRuntime;
11
+ root: string;
12
+ opId: unknown;
13
+ }) => Promise<SlateOp>;
14
+ //# sourceMappingURL=slate-run-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slate-run-action.d.ts","sourceRoot":"","sources":["../src/slate-run-action.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAqD1D,eAAO,MAAM,SAAS,GAAU,MAAM;IACpC,OAAO,EAAE,YAAY,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;CACtB,KAAG,OAAO,CAAC,OAAO,CAUlB,CAAC;AAEF,eAAO,MAAM,YAAY,GAAU,MAAM;IAAE,OAAO,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,KAAG,OAAO,CAAC,OAAO,CAOhH,CAAC"}