@12ui/design 0.2.72 → 0.2.74

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 (581) hide show
  1. package/README.md +242 -54
  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 +26 -1
  10. package/dist/cli-capabilities.d.ts.map +1 -1
  11. package/dist/cli-capabilities.js +26 -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 +113 -7
  26. package/dist/cli-help/index.d.ts.map +1 -1
  27. package/dist/cli-help/index.js +2 -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/workflow.d.ts +90 -0
  34. package/dist/cli-help/workflow.d.ts.map +1 -0
  35. package/dist/cli-help/workflow.js +89 -0
  36. package/dist/cli-help/workflow.js.map +1 -0
  37. package/dist/cli-open-browser.d.ts +7 -0
  38. package/dist/cli-open-browser.d.ts.map +1 -0
  39. package/dist/cli-open-browser.js +25 -0
  40. package/dist/cli-open-browser.js.map +1 -0
  41. package/dist/cli-prototype-command.d.ts +3 -1
  42. package/dist/cli-prototype-command.d.ts.map +1 -1
  43. package/dist/cli-prototype-command.js +33 -7
  44. package/dist/cli-prototype-command.js.map +1 -1
  45. package/dist/cli-review-command.d.ts.map +1 -1
  46. package/dist/cli-review-command.js +1 -16
  47. package/dist/cli-review-command.js.map +1 -1
  48. package/dist/cli-run.d.ts.map +1 -1
  49. package/dist/cli-run.js +35 -3
  50. package/dist/cli-run.js.map +1 -1
  51. package/dist/cli-usage.d.ts.map +1 -1
  52. package/dist/cli-usage.js +39 -5
  53. package/dist/cli-usage.js.map +1 -1
  54. package/dist/cli-workflow-command.d.ts +8 -0
  55. package/dist/cli-workflow-command.d.ts.map +1 -0
  56. package/dist/cli-workflow-command.js +97 -0
  57. package/dist/cli-workflow-command.js.map +1 -0
  58. package/dist/cli-workspace-command.d.ts +25 -0
  59. package/dist/cli-workspace-command.d.ts.map +1 -0
  60. package/dist/cli-workspace-command.js +95 -0
  61. package/dist/cli-workspace-command.js.map +1 -0
  62. package/dist/config.d.ts +6 -0
  63. package/dist/config.d.ts.map +1 -1
  64. package/dist/config.js +12 -4
  65. package/dist/config.js.map +1 -1
  66. package/dist/corpus-access.d.ts +11 -0
  67. package/dist/corpus-access.d.ts.map +1 -0
  68. package/dist/corpus-access.js +18 -0
  69. package/dist/corpus-access.js.map +1 -0
  70. package/dist/corpus-client.d.ts +11 -11
  71. package/dist/corpus-client.d.ts.map +1 -1
  72. package/dist/corpus-client.js +17 -6
  73. package/dist/corpus-client.js.map +1 -1
  74. package/dist/corpus-inspiration-failure.d.ts +1 -1
  75. package/dist/corpus-inspiration-failure.js +2 -2
  76. package/dist/corpus-inspiration-failure.js.map +1 -1
  77. package/dist/corpus-reference-download-retry.d.ts.map +1 -1
  78. package/dist/corpus-reference-download-retry.js +11 -1
  79. package/dist/corpus-reference-download-retry.js.map +1 -1
  80. package/dist/corpus-request-error.d.ts +2 -0
  81. package/dist/corpus-request-error.d.ts.map +1 -1
  82. package/dist/corpus-request-error.js +2 -0
  83. package/dist/corpus-request-error.js.map +1 -1
  84. package/dist/corpus-retry-guidance.d.ts +5 -0
  85. package/dist/corpus-retry-guidance.d.ts.map +1 -0
  86. package/dist/corpus-retry-guidance.js +18 -0
  87. package/dist/corpus-retry-guidance.js.map +1 -0
  88. package/dist/improve-pricing-plan.d.ts.map +1 -1
  89. package/dist/improve-pricing-plan.js +2 -4
  90. package/dist/improve-pricing-plan.js.map +1 -1
  91. package/dist/index.d.ts +10 -1
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +10 -1
  94. package/dist/index.js.map +1 -1
  95. package/dist/legacy-skill-catalog.d.ts.map +1 -1
  96. package/dist/legacy-skill-catalog.js +41 -0
  97. package/dist/legacy-skill-catalog.js.map +1 -1
  98. package/dist/mcp-slate-command.d.ts +31 -0
  99. package/dist/mcp-slate-command.d.ts.map +1 -0
  100. package/dist/mcp-slate-command.js +123 -0
  101. package/dist/mcp-slate-command.js.map +1 -0
  102. package/dist/mcp-slate-image.d.ts +22 -0
  103. package/dist/mcp-slate-image.d.ts.map +1 -0
  104. package/dist/mcp-slate-image.js +28 -0
  105. package/dist/mcp-slate-image.js.map +1 -0
  106. package/dist/mcp-slate-latest.d.ts +13 -0
  107. package/dist/mcp-slate-latest.d.ts.map +1 -0
  108. package/dist/mcp-slate-latest.js +34 -0
  109. package/dist/mcp-slate-latest.js.map +1 -0
  110. package/dist/mcp-slate-names.d.ts +25 -0
  111. package/dist/mcp-slate-names.d.ts.map +1 -0
  112. package/dist/mcp-slate-names.js +49 -0
  113. package/dist/mcp-slate-names.js.map +1 -0
  114. package/dist/mcp-slate-resource.d.ts +5 -0
  115. package/dist/mcp-slate-resource.d.ts.map +1 -0
  116. package/dist/mcp-slate-resource.js +37 -0
  117. package/dist/mcp-slate-resource.js.map +1 -0
  118. package/dist/mcp-slate-run.d.ts +41 -0
  119. package/dist/mcp-slate-run.d.ts.map +1 -0
  120. package/dist/mcp-slate-run.js +88 -0
  121. package/dist/mcp-slate-run.js.map +1 -0
  122. package/dist/mcp-slate-tool-defs.d.ts +61 -0
  123. package/dist/mcp-slate-tool-defs.d.ts.map +1 -0
  124. package/dist/mcp-slate-tool-defs.js +247 -0
  125. package/dist/mcp-slate-tool-defs.js.map +1 -0
  126. package/dist/mcp-slate-tools.d.ts +8 -0
  127. package/dist/mcp-slate-tools.d.ts.map +1 -0
  128. package/dist/mcp-slate-tools.js +45 -0
  129. package/dist/mcp-slate-tools.js.map +1 -0
  130. package/dist/mcp-slate-ui-copy.d.ts +145 -0
  131. package/dist/mcp-slate-ui-copy.d.ts.map +1 -0
  132. package/dist/mcp-slate-ui-copy.js +164 -0
  133. package/dist/mcp-slate-ui-copy.js.map +1 -0
  134. package/dist/mcp-slate-ui-script-bridge.d.ts +18 -0
  135. package/dist/mcp-slate-ui-script-bridge.d.ts.map +1 -0
  136. package/dist/mcp-slate-ui-script-bridge.js +137 -0
  137. package/dist/mcp-slate-ui-script-bridge.js.map +1 -0
  138. package/dist/mcp-slate-ui-script-browser.d.ts +12 -0
  139. package/dist/mcp-slate-ui-script-browser.d.ts.map +1 -0
  140. package/dist/mcp-slate-ui-script-browser.js +19 -0
  141. package/dist/mcp-slate-ui-script-browser.js.map +1 -0
  142. package/dist/mcp-slate-ui-script-dialog.d.ts +21 -0
  143. package/dist/mcp-slate-ui-script-dialog.d.ts.map +1 -0
  144. package/dist/mcp-slate-ui-script-dialog.js +321 -0
  145. package/dist/mcp-slate-ui-script-dialog.js.map +1 -0
  146. package/dist/mcp-slate-ui-script-inline.d.ts +10 -0
  147. package/dist/mcp-slate-ui-script-inline.d.ts.map +1 -0
  148. package/dist/mcp-slate-ui-script-inline.js +224 -0
  149. package/dist/mcp-slate-ui-script-inline.js.map +1 -0
  150. package/dist/mcp-slate-ui-script-inspiration.d.ts +13 -0
  151. package/dist/mcp-slate-ui-script-inspiration.d.ts.map +1 -0
  152. package/dist/mcp-slate-ui-script-inspiration.js +236 -0
  153. package/dist/mcp-slate-ui-script-inspiration.js.map +1 -0
  154. package/dist/mcp-slate-ui-script-more.d.ts +32 -0
  155. package/dist/mcp-slate-ui-script-more.d.ts.map +1 -0
  156. package/dist/mcp-slate-ui-script-more.js +289 -0
  157. package/dist/mcp-slate-ui-script-more.js.map +1 -0
  158. package/dist/mcp-slate-ui-script-progress.d.ts +7 -0
  159. package/dist/mcp-slate-ui-script-progress.d.ts.map +1 -0
  160. package/dist/mcp-slate-ui-script-progress.js +9 -0
  161. package/dist/mcp-slate-ui-script-progress.js.map +1 -0
  162. package/dist/mcp-slate-ui-script-remote.d.ts +28 -0
  163. package/dist/mcp-slate-ui-script-remote.d.ts.map +1 -0
  164. package/dist/mcp-slate-ui-script-remote.js +147 -0
  165. package/dist/mcp-slate-ui-script-remote.js.map +1 -0
  166. package/dist/mcp-slate-ui-script-scribble.d.ts +19 -0
  167. package/dist/mcp-slate-ui-script-scribble.d.ts.map +1 -0
  168. package/dist/mcp-slate-ui-script-scribble.js +114 -0
  169. package/dist/mcp-slate-ui-script-scribble.js.map +1 -0
  170. package/dist/mcp-slate-ui-script-select.d.ts +16 -0
  171. package/dist/mcp-slate-ui-script-select.d.ts.map +1 -0
  172. package/dist/mcp-slate-ui-script-select.js +73 -0
  173. package/dist/mcp-slate-ui-script-select.js.map +1 -0
  174. package/dist/mcp-slate-ui-script-stage.d.ts +12 -0
  175. package/dist/mcp-slate-ui-script-stage.d.ts.map +1 -0
  176. package/dist/mcp-slate-ui-script-stage.js +180 -0
  177. package/dist/mcp-slate-ui-script-stage.js.map +1 -0
  178. package/dist/mcp-slate-ui-script-state.d.ts +13 -0
  179. package/dist/mcp-slate-ui-script-state.d.ts.map +1 -0
  180. package/dist/mcp-slate-ui-script-state.js +306 -0
  181. package/dist/mcp-slate-ui-script-state.js.map +1 -0
  182. package/dist/mcp-slate-ui-script.d.ts +27 -0
  183. package/dist/mcp-slate-ui-script.d.ts.map +1 -0
  184. package/dist/mcp-slate-ui-script.js +60 -0
  185. package/dist/mcp-slate-ui-script.js.map +1 -0
  186. package/dist/mcp-slate-ui-styles-dialog.d.ts +20 -0
  187. package/dist/mcp-slate-ui-styles-dialog.d.ts.map +1 -0
  188. package/dist/mcp-slate-ui-styles-dialog.js +95 -0
  189. package/dist/mcp-slate-ui-styles-dialog.js.map +1 -0
  190. package/dist/mcp-slate-ui-styles-stage.d.ts +19 -0
  191. package/dist/mcp-slate-ui-styles-stage.d.ts.map +1 -0
  192. package/dist/mcp-slate-ui-styles-stage.js +67 -0
  193. package/dist/mcp-slate-ui-styles-stage.js.map +1 -0
  194. package/dist/mcp-slate-ui-styles.d.ts +18 -0
  195. package/dist/mcp-slate-ui-styles.d.ts.map +1 -0
  196. package/dist/mcp-slate-ui-styles.js +132 -0
  197. package/dist/mcp-slate-ui-styles.js.map +1 -0
  198. package/dist/mcp-slate-ui.d.ts +16 -0
  199. package/dist/mcp-slate-ui.d.ts.map +1 -0
  200. package/dist/mcp-slate-ui.js +59 -0
  201. package/dist/mcp-slate-ui.js.map +1 -0
  202. package/dist/mcp-slate-workspace-tools.d.ts +15 -0
  203. package/dist/mcp-slate-workspace-tools.d.ts.map +1 -0
  204. package/dist/mcp-slate-workspace-tools.js +155 -0
  205. package/dist/mcp-slate-workspace-tools.js.map +1 -0
  206. package/dist/mcp-tool-definitions.d.ts.map +1 -1
  207. package/dist/mcp-tool-definitions.js +9 -7
  208. package/dist/mcp-tool-definitions.js.map +1 -1
  209. package/dist/mcp-tool-handler.d.ts +8 -2
  210. package/dist/mcp-tool-handler.d.ts.map +1 -1
  211. package/dist/mcp-tool-handler.js +34 -13
  212. package/dist/mcp-tool-handler.js.map +1 -1
  213. package/dist/mcp-workflow-tools.d.ts +6 -0
  214. package/dist/mcp-workflow-tools.d.ts.map +1 -0
  215. package/dist/mcp-workflow-tools.js +108 -0
  216. package/dist/mcp-workflow-tools.js.map +1 -0
  217. package/dist/prototype-label-client.d.ts +5 -0
  218. package/dist/prototype-label-client.d.ts.map +1 -1
  219. package/dist/prototype-label-client.js.map +1 -1
  220. package/dist/prototype-poststep.d.ts +2 -2
  221. package/dist/prototype-poststep.d.ts.map +1 -1
  222. package/dist/prototype-poststep.js +3 -0
  223. package/dist/prototype-poststep.js.map +1 -1
  224. package/dist/prototype-run-record.d.ts +6 -2
  225. package/dist/prototype-run-record.d.ts.map +1 -1
  226. package/dist/prototype-run-record.js +6 -0
  227. package/dist/prototype-run-record.js.map +1 -1
  228. package/dist/prototype-runner.d.ts +2 -2
  229. package/dist/prototype-runner.d.ts.map +1 -1
  230. package/dist/prototype-runner.js +5 -2
  231. package/dist/prototype-runner.js.map +1 -1
  232. package/dist/prototype-workflow-contract.d.ts +13 -0
  233. package/dist/prototype-workflow-contract.d.ts.map +1 -0
  234. package/dist/prototype-workflow-contract.js +82 -0
  235. package/dist/prototype-workflow-contract.js.map +1 -0
  236. package/dist/prototype-workflow-labels.d.ts +29 -0
  237. package/dist/prototype-workflow-labels.d.ts.map +1 -0
  238. package/dist/prototype-workflow-labels.js +93 -0
  239. package/dist/prototype-workflow-labels.js.map +1 -0
  240. package/dist/run-journal-commands.d.ts.map +1 -1
  241. package/dist/run-journal-commands.js +18 -5
  242. package/dist/run-journal-commands.js.map +1 -1
  243. package/dist/server.d.ts +22 -2
  244. package/dist/server.d.ts.map +1 -1
  245. package/dist/server.js +44 -8
  246. package/dist/server.js.map +1 -1
  247. package/dist/slate-actions.d.ts +43 -0
  248. package/dist/slate-actions.d.ts.map +1 -0
  249. package/dist/slate-actions.js +108 -0
  250. package/dist/slate-actions.js.map +1 -0
  251. package/dist/slate-annotate.d.ts +36 -0
  252. package/dist/slate-annotate.d.ts.map +1 -0
  253. package/dist/slate-annotate.js +71 -0
  254. package/dist/slate-annotate.js.map +1 -0
  255. package/dist/slate-approvals.d.ts +61 -0
  256. package/dist/slate-approvals.d.ts.map +1 -0
  257. package/dist/slate-approvals.js +153 -0
  258. package/dist/slate-approvals.js.map +1 -0
  259. package/dist/slate-browser-decision.d.ts +30 -0
  260. package/dist/slate-browser-decision.d.ts.map +1 -0
  261. package/dist/slate-browser-decision.js +24 -0
  262. package/dist/slate-browser-decision.js.map +1 -0
  263. package/dist/slate-browser-host-script.d.ts +14 -0
  264. package/dist/slate-browser-host-script.d.ts.map +1 -0
  265. package/dist/slate-browser-host-script.js +125 -0
  266. package/dist/slate-browser-host-script.js.map +1 -0
  267. package/dist/slate-browser-host.d.ts +9 -0
  268. package/dist/slate-browser-host.d.ts.map +1 -0
  269. package/dist/slate-browser-host.js +37 -0
  270. package/dist/slate-browser-host.js.map +1 -0
  271. package/dist/slate-browser-server.d.ts +37 -0
  272. package/dist/slate-browser-server.d.ts.map +1 -0
  273. package/dist/slate-browser-server.js +186 -0
  274. package/dist/slate-browser-server.js.map +1 -0
  275. package/dist/slate-commit.d.ts +28 -0
  276. package/dist/slate-commit.d.ts.map +1 -0
  277. package/dist/slate-commit.js +218 -0
  278. package/dist/slate-commit.js.map +1 -0
  279. package/dist/slate-corpus.d.ts +14 -0
  280. package/dist/slate-corpus.d.ts.map +1 -0
  281. package/dist/slate-corpus.js +32 -0
  282. package/dist/slate-corpus.js.map +1 -0
  283. package/dist/slate-edit-prompt.d.ts +18 -0
  284. package/dist/slate-edit-prompt.d.ts.map +1 -0
  285. package/dist/slate-edit-prompt.js +41 -0
  286. package/dist/slate-edit-prompt.js.map +1 -0
  287. package/dist/slate-edit-runner.d.ts +4 -0
  288. package/dist/slate-edit-runner.d.ts.map +1 -0
  289. package/dist/slate-edit-runner.js +90 -0
  290. package/dist/slate-edit-runner.js.map +1 -0
  291. package/dist/slate-editability.d.ts +20 -0
  292. package/dist/slate-editability.d.ts.map +1 -0
  293. package/dist/slate-editability.js +19 -0
  294. package/dist/slate-editability.js.map +1 -0
  295. package/dist/slate-errors.d.ts +15 -0
  296. package/dist/slate-errors.d.ts.map +1 -0
  297. package/dist/slate-errors.js +21 -0
  298. package/dist/slate-errors.js.map +1 -0
  299. package/dist/slate-handoff-options.d.ts +40 -0
  300. package/dist/slate-handoff-options.d.ts.map +1 -0
  301. package/dist/slate-handoff-options.js +117 -0
  302. package/dist/slate-handoff-options.js.map +1 -0
  303. package/dist/slate-handoff.d.ts +11 -0
  304. package/dist/slate-handoff.d.ts.map +1 -0
  305. package/dist/slate-handoff.js +56 -0
  306. package/dist/slate-handoff.js.map +1 -0
  307. package/dist/slate-ids.d.ts +33 -0
  308. package/dist/slate-ids.d.ts.map +1 -0
  309. package/dist/slate-ids.js +47 -0
  310. package/dist/slate-ids.js.map +1 -0
  311. package/dist/slate-image-executor.d.ts +39 -0
  312. package/dist/slate-image-executor.d.ts.map +1 -0
  313. package/dist/slate-image-executor.js +52 -0
  314. package/dist/slate-image-executor.js.map +1 -0
  315. package/dist/slate-inspiration.d.ts +22 -0
  316. package/dist/slate-inspiration.d.ts.map +1 -0
  317. package/dist/slate-inspiration.js +112 -0
  318. package/dist/slate-inspiration.js.map +1 -0
  319. package/dist/slate-labels.d.ts +11 -0
  320. package/dist/slate-labels.d.ts.map +1 -0
  321. package/dist/slate-labels.js +32 -0
  322. package/dist/slate-labels.js.map +1 -0
  323. package/dist/slate-ledger.d.ts +29 -0
  324. package/dist/slate-ledger.d.ts.map +1 -0
  325. package/dist/slate-ledger.js +65 -0
  326. package/dist/slate-ledger.js.map +1 -0
  327. package/dist/slate-liveness.d.ts +26 -0
  328. package/dist/slate-liveness.d.ts.map +1 -0
  329. package/dist/slate-liveness.js +49 -0
  330. package/dist/slate-liveness.js.map +1 -0
  331. package/dist/slate-local-image.d.ts +19 -0
  332. package/dist/slate-local-image.d.ts.map +1 -0
  333. package/dist/slate-local-image.js +36 -0
  334. package/dist/slate-local-image.js.map +1 -0
  335. package/dist/slate-lock.d.ts +64 -0
  336. package/dist/slate-lock.d.ts.map +1 -0
  337. package/dist/slate-lock.js +178 -0
  338. package/dist/slate-lock.js.map +1 -0
  339. package/dist/slate-paths.d.ts +45 -0
  340. package/dist/slate-paths.d.ts.map +1 -0
  341. package/dist/slate-paths.js +132 -0
  342. package/dist/slate-paths.js.map +1 -0
  343. package/dist/slate-pick.d.ts +29 -0
  344. package/dist/slate-pick.d.ts.map +1 -0
  345. package/dist/slate-pick.js +55 -0
  346. package/dist/slate-pick.js.map +1 -0
  347. package/dist/slate-reference-ids.d.ts +6 -0
  348. package/dist/slate-reference-ids.d.ts.map +1 -0
  349. package/dist/slate-reference-ids.js +17 -0
  350. package/dist/slate-reference-ids.js.map +1 -0
  351. package/dist/slate-reference-store.d.ts +23 -0
  352. package/dist/slate-reference-store.d.ts.map +1 -0
  353. package/dist/slate-reference-store.js +46 -0
  354. package/dist/slate-reference-store.js.map +1 -0
  355. package/dist/slate-resume.d.ts +19 -0
  356. package/dist/slate-resume.d.ts.map +1 -0
  357. package/dist/slate-resume.js +94 -0
  358. package/dist/slate-resume.js.map +1 -0
  359. package/dist/slate-round-params.d.ts +20 -0
  360. package/dist/slate-round-params.d.ts.map +1 -0
  361. package/dist/slate-round-params.js +32 -0
  362. package/dist/slate-round-params.js.map +1 -0
  363. package/dist/slate-round-prompt.d.ts +18 -0
  364. package/dist/slate-round-prompt.d.ts.map +1 -0
  365. package/dist/slate-round-prompt.js +20 -0
  366. package/dist/slate-round-prompt.js.map +1 -0
  367. package/dist/slate-round-runner.d.ts +4 -0
  368. package/dist/slate-round-runner.d.ts.map +1 -0
  369. package/dist/slate-round-runner.js +125 -0
  370. package/dist/slate-round-runner.js.map +1 -0
  371. package/dist/slate-round-search.d.ts +7 -0
  372. package/dist/slate-round-search.d.ts.map +1 -0
  373. package/dist/slate-round-search.js +77 -0
  374. package/dist/slate-round-search.js.map +1 -0
  375. package/dist/slate-run-action.d.ts +14 -0
  376. package/dist/slate-run-action.d.ts.map +1 -0
  377. package/dist/slate-run-action.js +81 -0
  378. package/dist/slate-run-action.js.map +1 -0
  379. package/dist/slate-runner-context.d.ts +57 -0
  380. package/dist/slate-runner-context.d.ts.map +1 -0
  381. package/dist/slate-runner-context.js +79 -0
  382. package/dist/slate-runner-context.js.map +1 -0
  383. package/dist/slate-runner-failure.d.ts +8 -0
  384. package/dist/slate-runner-failure.d.ts.map +1 -0
  385. package/dist/slate-runner-failure.js +17 -0
  386. package/dist/slate-runner-failure.js.map +1 -0
  387. package/dist/slate-runner-flag.d.ts +3 -0
  388. package/dist/slate-runner-flag.d.ts.map +1 -0
  389. package/dist/slate-runner-flag.js +3 -0
  390. package/dist/slate-runner-flag.js.map +1 -0
  391. package/dist/slate-runner-main.d.ts +31 -0
  392. package/dist/slate-runner-main.d.ts.map +1 -0
  393. package/dist/slate-runner-main.js +132 -0
  394. package/dist/slate-runner-main.js.map +1 -0
  395. package/dist/slate-runner-spawn.d.ts +23 -0
  396. package/dist/slate-runner-spawn.d.ts.map +1 -0
  397. package/dist/slate-runner-spawn.js +27 -0
  398. package/dist/slate-runner-spawn.js.map +1 -0
  399. package/dist/slate-runtime.d.ts +38 -0
  400. package/dist/slate-runtime.d.ts.map +1 -0
  401. package/dist/slate-runtime.js +48 -0
  402. package/dist/slate-runtime.js.map +1 -0
  403. package/dist/slate-versions.d.ts +26 -0
  404. package/dist/slate-versions.d.ts.map +1 -0
  405. package/dist/slate-versions.js +110 -0
  406. package/dist/slate-versions.js.map +1 -0
  407. package/dist/slate-view-contract.d.ts +232 -0
  408. package/dist/slate-view-contract.d.ts.map +1 -0
  409. package/dist/slate-view-contract.js +17 -0
  410. package/dist/slate-view-contract.js.map +1 -0
  411. package/dist/slate-view-types.d.ts +2 -0
  412. package/dist/slate-view-types.d.ts.map +1 -0
  413. package/dist/slate-view-types.js +2 -0
  414. package/dist/slate-view-types.js.map +1 -0
  415. package/dist/slate-view.d.ts +19 -0
  416. package/dist/slate-view.d.ts.map +1 -0
  417. package/dist/slate-view.js +184 -0
  418. package/dist/slate-view.js.map +1 -0
  419. package/dist/slate-workspace-parse.d.ts +20 -0
  420. package/dist/slate-workspace-parse.d.ts.map +1 -0
  421. package/dist/slate-workspace-parse.js +442 -0
  422. package/dist/slate-workspace-parse.js.map +1 -0
  423. package/dist/slate-workspace-store.d.ts +44 -0
  424. package/dist/slate-workspace-store.d.ts.map +1 -0
  425. package/dist/slate-workspace-store.js +270 -0
  426. package/dist/slate-workspace-store.js.map +1 -0
  427. package/dist/slate-workspace-types.d.ts +176 -0
  428. package/dist/slate-workspace-types.d.ts.map +1 -0
  429. package/dist/slate-workspace-types.js +13 -0
  430. package/dist/slate-workspace-types.js.map +1 -0
  431. package/dist/workflow/adapter-12ui.d.ts +4 -0
  432. package/dist/workflow/adapter-12ui.d.ts.map +1 -0
  433. package/dist/workflow/adapter-12ui.js +147 -0
  434. package/dist/workflow/adapter-12ui.js.map +1 -0
  435. package/dist/workflow/adapter-layerdoc.d.ts +16 -0
  436. package/dist/workflow/adapter-layerdoc.d.ts.map +1 -0
  437. package/dist/workflow/adapter-layerdoc.js +116 -0
  438. package/dist/workflow/adapter-layerdoc.js.map +1 -0
  439. package/dist/workflow/adapter-openai.d.ts +4 -0
  440. package/dist/workflow/adapter-openai.d.ts.map +1 -0
  441. package/dist/workflow/adapter-openai.js +166 -0
  442. package/dist/workflow/adapter-openai.js.map +1 -0
  443. package/dist/workflow/adapter-process.d.ts +7 -0
  444. package/dist/workflow/adapter-process.d.ts.map +1 -0
  445. package/dist/workflow/adapter-process.js +174 -0
  446. package/dist/workflow/adapter-process.js.map +1 -0
  447. package/dist/workflow/adapter-prototype-labels.d.ts +15 -0
  448. package/dist/workflow/adapter-prototype-labels.d.ts.map +1 -0
  449. package/dist/workflow/adapter-prototype-labels.js +71 -0
  450. package/dist/workflow/adapter-prototype-labels.js.map +1 -0
  451. package/dist/workflow/adapter-types.d.ts +40 -0
  452. package/dist/workflow/adapter-types.d.ts.map +1 -0
  453. package/dist/workflow/adapter-types.js +2 -0
  454. package/dist/workflow/adapter-types.js.map +1 -0
  455. package/dist/workflow/adapter-utils.d.ts +11 -0
  456. package/dist/workflow/adapter-utils.d.ts.map +1 -0
  457. package/dist/workflow/adapter-utils.js +72 -0
  458. package/dist/workflow/adapter-utils.js.map +1 -0
  459. package/dist/workflow/adapters.d.ts +6 -0
  460. package/dist/workflow/adapters.d.ts.map +1 -0
  461. package/dist/workflow/adapters.js +25 -0
  462. package/dist/workflow/adapters.js.map +1 -0
  463. package/dist/workflow/artifact.d.ts +11 -0
  464. package/dist/workflow/artifact.d.ts.map +1 -0
  465. package/dist/workflow/artifact.js +94 -0
  466. package/dist/workflow/artifact.js.map +1 -0
  467. package/dist/workflow/bundle-collect.d.ts +8 -0
  468. package/dist/workflow/bundle-collect.d.ts.map +1 -0
  469. package/dist/workflow/bundle-collect.js +56 -0
  470. package/dist/workflow/bundle-collect.js.map +1 -0
  471. package/dist/workflow/bundle-export.d.ts +16 -0
  472. package/dist/workflow/bundle-export.d.ts.map +1 -0
  473. package/dist/workflow/bundle-export.js +174 -0
  474. package/dist/workflow/bundle-export.js.map +1 -0
  475. package/dist/workflow/bundle-paths.d.ts +7 -0
  476. package/dist/workflow/bundle-paths.d.ts.map +1 -0
  477. package/dist/workflow/bundle-paths.js +35 -0
  478. package/dist/workflow/bundle-paths.js.map +1 -0
  479. package/dist/workflow/bundle.d.ts +4 -0
  480. package/dist/workflow/bundle.d.ts.map +1 -0
  481. package/dist/workflow/bundle.js +4 -0
  482. package/dist/workflow/bundle.js.map +1 -0
  483. package/dist/workflow/capture.d.ts +36 -0
  484. package/dist/workflow/capture.d.ts.map +1 -0
  485. package/dist/workflow/capture.js +81 -0
  486. package/dist/workflow/capture.js.map +1 -0
  487. package/dist/workflow/continuation-branch.d.ts +15 -0
  488. package/dist/workflow/continuation-branch.d.ts.map +1 -0
  489. package/dist/workflow/continuation-branch.js +103 -0
  490. package/dist/workflow/continuation-branch.js.map +1 -0
  491. package/dist/workflow/continuation-plans.d.ts +38 -0
  492. package/dist/workflow/continuation-plans.d.ts.map +1 -0
  493. package/dist/workflow/continuation-plans.js +78 -0
  494. package/dist/workflow/continuation-plans.js.map +1 -0
  495. package/dist/workflow/continuation.d.ts +25 -0
  496. package/dist/workflow/continuation.d.ts.map +1 -0
  497. package/dist/workflow/continuation.js +89 -0
  498. package/dist/workflow/continuation.js.map +1 -0
  499. package/dist/workflow/layerdoc-reader.d.ts +27 -0
  500. package/dist/workflow/layerdoc-reader.d.ts.map +1 -0
  501. package/dist/workflow/layerdoc-reader.js +81 -0
  502. package/dist/workflow/layerdoc-reader.js.map +1 -0
  503. package/dist/workflow/project-evidence.d.ts +48 -0
  504. package/dist/workflow/project-evidence.d.ts.map +1 -0
  505. package/dist/workflow/project-evidence.js +200 -0
  506. package/dist/workflow/project-evidence.js.map +1 -0
  507. package/dist/workflow/providers.d.ts +35 -0
  508. package/dist/workflow/providers.d.ts.map +1 -0
  509. package/dist/workflow/providers.js +110 -0
  510. package/dist/workflow/providers.js.map +1 -0
  511. package/dist/workflow/recipes-layerdoc-validation.d.ts +4 -0
  512. package/dist/workflow/recipes-layerdoc-validation.d.ts.map +1 -0
  513. package/dist/workflow/recipes-layerdoc-validation.js +98 -0
  514. package/dist/workflow/recipes-layerdoc-validation.js.map +1 -0
  515. package/dist/workflow/recipes-result-validation.d.ts +6 -0
  516. package/dist/workflow/recipes-result-validation.d.ts.map +1 -0
  517. package/dist/workflow/recipes-result-validation.js +38 -0
  518. package/dist/workflow/recipes-result-validation.js.map +1 -0
  519. package/dist/workflow/recipes-schemas.d.ts +7 -0
  520. package/dist/workflow/recipes-schemas.d.ts.map +1 -0
  521. package/dist/workflow/recipes-schemas.js +67 -0
  522. package/dist/workflow/recipes-schemas.js.map +1 -0
  523. package/dist/workflow/recipes-validation.d.ts +14 -0
  524. package/dist/workflow/recipes-validation.d.ts.map +1 -0
  525. package/dist/workflow/recipes-validation.js +68 -0
  526. package/dist/workflow/recipes-validation.js.map +1 -0
  527. package/dist/workflow/recipes.d.ts +20 -0
  528. package/dist/workflow/recipes.d.ts.map +1 -0
  529. package/dist/workflow/recipes.js +167 -0
  530. package/dist/workflow/recipes.js.map +1 -0
  531. package/dist/workflow/routing.d.ts +4 -0
  532. package/dist/workflow/routing.d.ts.map +1 -0
  533. package/dist/workflow/routing.js +28 -0
  534. package/dist/workflow/routing.js.map +1 -0
  535. package/dist/workflow/schema.d.ts +5 -0
  536. package/dist/workflow/schema.d.ts.map +1 -0
  537. package/dist/workflow/schema.js +29 -0
  538. package/dist/workflow/schema.js.map +1 -0
  539. package/dist/workflow/service.d.ts +59 -0
  540. package/dist/workflow/service.d.ts.map +1 -0
  541. package/dist/workflow/service.js +170 -0
  542. package/dist/workflow/service.js.map +1 -0
  543. package/dist/workflow/store-json.d.ts +5 -0
  544. package/dist/workflow/store-json.d.ts.map +1 -0
  545. package/dist/workflow/store-json.js +35 -0
  546. package/dist/workflow/store-json.js.map +1 -0
  547. package/dist/workflow/store-lock.d.ts +3 -0
  548. package/dist/workflow/store-lock.d.ts.map +1 -0
  549. package/dist/workflow/store-lock.js +85 -0
  550. package/dist/workflow/store-lock.js.map +1 -0
  551. package/dist/workflow/store-paths.d.ts +17 -0
  552. package/dist/workflow/store-paths.d.ts.map +1 -0
  553. package/dist/workflow/store-paths.js +67 -0
  554. package/dist/workflow/store-paths.js.map +1 -0
  555. package/dist/workflow/store-validation.d.ts +7 -0
  556. package/dist/workflow/store-validation.d.ts.map +1 -0
  557. package/dist/workflow/store-validation.js +119 -0
  558. package/dist/workflow/store-validation.js.map +1 -0
  559. package/dist/workflow/store.d.ts +10 -0
  560. package/dist/workflow/store.d.ts.map +1 -0
  561. package/dist/workflow/store.js +193 -0
  562. package/dist/workflow/store.js.map +1 -0
  563. package/dist/workflow/types.d.ts +120 -0
  564. package/dist/workflow/types.d.ts.map +1 -0
  565. package/dist/workflow/types.js +15 -0
  566. package/dist/workflow/types.js.map +1 -0
  567. package/dist/workflow-transport.d.ts +28 -0
  568. package/dist/workflow-transport.d.ts.map +1 -0
  569. package/dist/workflow-transport.js +184 -0
  570. package/dist/workflow-transport.js.map +1 -0
  571. package/open-design.json +2 -2
  572. package/package.json +2 -1
  573. package/prototype-kit/tests/rules-check.mjs +9 -0
  574. package/runtime/codex-conversion/src/images/native-invoke.mjs +1 -1
  575. package/runtime/codex-conversion/src/images/native.mjs +8 -4
  576. package/runtime/layerdoc-validator.mjs +1860 -0
  577. package/skills/12ui-design/SKILL.md +17 -63
  578. package/skills/12ui-design/improve.md +5 -1
  579. package/skills/12ui-design/inspire.md +8 -5
  580. package/skills/12ui-design/outputs.md +23 -2
  581. package/skills/12ui-design/session.md +161 -0
@@ -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"}
@@ -0,0 +1,81 @@
1
+ import { normalizeAction } from './slate-actions.js';
2
+ import { commitAction } from './slate-commit.js';
3
+ import { SlateError } from './slate-errors.js';
4
+ import { OP_ID_PATTERN } from './slate-ids.js';
5
+ import { readRunnerState } from './slate-liveness.js';
6
+ import { resumeOp, RUNNER_SPAWN_FAILED } from './slate-resume.js';
7
+ import { NoWrite, loadWorkspaceAt, mutateWorkspace } from './slate-workspace-store.js';
8
+ /**
9
+ * `design.slate.run` and `design.slate.resume`: the only two tools that can
10
+ * start work, both only from a click. Each returns after a file commit and a
11
+ * process spawn; neither awaits a search, an image call or a download.
12
+ */
13
+ const requireOpId = (value) => {
14
+ if (typeof value !== 'string' || !OP_ID_PATTERN.test(value)) {
15
+ throw new SlateError('invalid_input', 'opId must be a UUID v4 minted when the dialog opened.');
16
+ }
17
+ return value;
18
+ };
19
+ /** Nothing is written or spawned when this Mac cannot draw; the reason is the one the dialog already shows. */
20
+ const requireLocalImage = async (runtime) => {
21
+ const state = await runtime.localImage();
22
+ if (!state.ready)
23
+ throw new SlateError('local_unavailable', state.reason ?? 'Codex is not ready on this Mac.');
24
+ };
25
+ /**
26
+ * Spawn the runner at most once per commit or resume: the claim is a
27
+ * compare-and-set on `spawnedAt` inside the workspace lock, so ten concurrent
28
+ * calls across two server processes produce one runner.
29
+ */
30
+ const spawnRunnerOnce = async (runtime, root, opId) => {
31
+ const claimed = await mutateWorkspace(root, async (ws, context) => {
32
+ const op = ws.ops.find((entry) => entry.opId === opId);
33
+ if (!op || op.state !== 'running' || op.spawnedAt !== null)
34
+ return new NoWrite(false);
35
+ if ((await readRunnerState(root, opId, context.now.getTime())).alive)
36
+ return new NoWrite(false);
37
+ op.spawnedAt = context.now.toISOString();
38
+ return true;
39
+ }, { now: runtime.now });
40
+ if (!claimed)
41
+ return;
42
+ try {
43
+ await runtime.launchRunner({ root, opId, stateRoot: runtime.stateRoot });
44
+ }
45
+ catch (error) {
46
+ // Recorded on the op: it derives `interrupted` and the screen offers Resume.
47
+ await mutateWorkspace(root, (ws) => {
48
+ const op = ws.ops.find((entry) => entry.opId === opId);
49
+ if (op) {
50
+ op.error = {
51
+ code: RUNNER_SPAWN_FAILED,
52
+ message: `The background worker did not start: ${error instanceof Error ? error.message : String(error)}`,
53
+ retryable: false,
54
+ resumable: true,
55
+ };
56
+ }
57
+ }, { now: runtime.now });
58
+ }
59
+ };
60
+ export const runAction = async (args) => {
61
+ const { runtime, root } = args;
62
+ const opId = requireOpId(args.opId);
63
+ const action = normalizeAction(args.actionInput);
64
+ const { workspace } = await loadWorkspaceAt(root, runtime.now);
65
+ // A repeated click on an op that already exists must answer with that op, whatever the probe says now.
66
+ if (!workspace.ops.some((op) => op.opId === opId))
67
+ await requireLocalImage(runtime);
68
+ const committed = await commitAction({ root, stateRoot: runtime.stateRoot, opId, action, now: runtime.now });
69
+ await spawnRunnerOnce(runtime, root, committed.op.opId);
70
+ return (await loadWorkspaceAt(root, runtime.now)).workspace.ops.find((op) => op.opId === committed.op.opId) ?? committed.op;
71
+ };
72
+ export const resumeAction = async (args) => {
73
+ const { runtime, root } = args;
74
+ const opId = requireOpId(args.opId);
75
+ await requireLocalImage(runtime);
76
+ const outcome = await resumeOp({ root, stateRoot: runtime.stateRoot, opId, now: runtime.now });
77
+ if (outcome.spawn)
78
+ await spawnRunnerOnce(runtime, root, opId);
79
+ return (await loadWorkspaceAt(root, runtime.now)).workspace.ops.find((op) => op.opId === opId) ?? outcome.op;
80
+ };
81
+ //# sourceMappingURL=slate-run-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slate-run-action.js","sourceRoot":"","sources":["../src/slate-run-action.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import type { SlateCorpus } from './slate-corpus.js';
2
+ import type { SlateImageExecutor } from './slate-image-executor.js';
3
+ import { type LedgerInput } from './slate-ledger.js';
4
+ import type { SlateOp, SlateOpError, SlateWorkspace } from './slate-workspace-types.js';
5
+ /**
6
+ * What every runner shares: the frozen op, the clock, and the helpers that
7
+ * write progress into `workspace.json` under the workspace lock. A runner
8
+ * never reads a workspace field as an instruction except `op.params`, and only
9
+ * after the approval digest matched.
10
+ */
11
+ export type RunnerClock = {
12
+ now: () => Date;
13
+ /** Resolves after the delay, or at once when `signal` aborts (the timer is then released). */
14
+ sleep: (milliseconds: number, signal?: AbortSignal) => Promise<void>;
15
+ };
16
+ export type RunnerEnv = {
17
+ root: string;
18
+ stateRoot: string;
19
+ opId: string;
20
+ workspaceId: string;
21
+ corpus: () => SlateCorpus;
22
+ executor: SlateImageExecutor;
23
+ clock: RunnerClock;
24
+ log: (entry: Record<string, unknown>) => Promise<void>;
25
+ };
26
+ /** `ops/<opId>.log`: JSON lines, 1 MiB, rotating once, because the runner's stdio is ignored. */
27
+ export declare const createRunLog: (root: string, opId: string) => RunnerEnv["log"];
28
+ export declare const opIn: (workspace: SlateWorkspace, opId: string) => SlateOp;
29
+ /** A ledger line, written BEFORE the step it names. */
30
+ export declare const ledger: (env: RunnerEnv, entry: LedgerInput) => Promise<void>;
31
+ export declare const patchOp: (env: RunnerEnv, apply: (op: SlateOp, workspace: SlateWorkspace) => void) => Promise<void>;
32
+ export declare const setPhase: (env: RunnerEnv, phase: string) => Promise<void>;
33
+ export type Outcome = {
34
+ state: 'succeeded';
35
+ } | {
36
+ state: 'failed';
37
+ error: SlateOpError;
38
+ } | {
39
+ state: 'superseded';
40
+ };
41
+ export declare const failure: (code: string, message: string, flags?: {
42
+ retryable?: boolean;
43
+ resumable?: boolean;
44
+ }) => Outcome;
45
+ /** Write the terminal state, settle the approval, close the ledger. */
46
+ export declare const finishOp: (env: RunnerEnv, outcome: Outcome) => Promise<void>;
47
+ /**
48
+ * The error a thrown failure becomes. Nothing here costs money and every call
49
+ * id is stable, so an unclassified runner error is resumable: a Resume replays
50
+ * the same ids and the call store never repeats a finished call. A refusal the
51
+ * workspace itself made (a changed source file, a bad reference) is not; a
52
+ * corpus outage or rate limit (a retryable `SlateError`) is, because the search
53
+ * replays on its own key.
54
+ */
55
+ export declare const errorFromRunner: (error: unknown) => SlateOpError;
56
+ export declare const sleepFor: (milliseconds: number, signal?: AbortSignal) => Promise<void>;
57
+ //# sourceMappingURL=slate-runner-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slate-runner-context.d.ts","sourceRoot":"","sources":["../src/slate-runner-context.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGnE,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAExF;;;;;GAKG;AAEH,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,IAAI,CAAC;IAChB,8FAA8F;IAC9F,KAAK,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,WAAW,CAAC;IAC1B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD,CAAC;AAIF,iGAAiG;AACjG,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,SAAS,CAAC,KAAK,CAYxE,CAAC;AAEF,eAAO,MAAM,IAAI,GAAI,WAAW,cAAc,EAAE,MAAM,MAAM,KAAG,OAI9D,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,MAAM,GAAI,KAAK,SAAS,EAAE,OAAO,WAAW,KAAG,OAAO,CAAC,IAAI,CAEvE,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,KAAK,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,KAAK,IAAI,KAAG,OAAO,CAAC,IAAI,CAE7G,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAU,KAAK,SAAS,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,IAAI,CAG1E,CAAC;AAEF,MAAM,MAAM,OAAO,GACf;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,GACtB;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,GACxC;IAAE,KAAK,EAAE,YAAY,CAAA;CAAE,CAAC;AAE5B,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,EAAE,QAAO;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,KAAG,OAGhH,CAAC;AAEH,uEAAuE;AACvE,eAAO,MAAM,QAAQ,GAAU,KAAK,SAAS,EAAE,SAAS,OAAO,KAAG,OAAO,CAAC,IAAI,CAa7E,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,OAAO,KAAG,YAMhD,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,cAAc,MAAM,EAAE,SAAS,WAAW,KAAG,OAAO,CAAC,IAAI,CAKhF,CAAC"}
@@ -0,0 +1,79 @@
1
+ import { appendFile, rename, rm, stat } from 'node:fs/promises';
2
+ import { settleApproval } from './slate-approvals.js';
3
+ import { SlateError } from './slate-errors.js';
4
+ import { appendLedger } from './slate-ledger.js';
5
+ import { opLogFile } from './slate-paths.js';
6
+ import { mutateWorkspace } from './slate-workspace-store.js';
7
+ const LOG_LIMIT_BYTES = 1024 * 1024;
8
+ /** `ops/<opId>.log`: JSON lines, 1 MiB, rotating once, because the runner's stdio is ignored. */
9
+ export const createRunLog = (root, opId) => {
10
+ const file = opLogFile(root, opId);
11
+ return async (entry) => {
12
+ try {
13
+ const size = await stat(file).then((info) => info.size, () => 0);
14
+ if (size > LOG_LIMIT_BYTES) {
15
+ await rm(`${file}.1`, { force: true });
16
+ await rename(file, `${file}.1`);
17
+ }
18
+ await appendFile(file, `${JSON.stringify({ at: new Date().toISOString(), pid: process.pid, ...entry })}\n`, { mode: 0o600 });
19
+ }
20
+ catch { /* the log is diagnostics only; it never fails an op */ }
21
+ };
22
+ };
23
+ export const opIn = (workspace, opId) => {
24
+ const op = workspace.ops.find((entry) => entry.opId === opId);
25
+ if (!op)
26
+ throw new Error(`op ${opId} is not in the workspace record`);
27
+ return op;
28
+ };
29
+ /** A ledger line, written BEFORE the step it names. */
30
+ export const ledger = (env, entry) => (appendLedger(env.root, { ...entry, opId: env.opId, at: env.clock.now().toISOString() }));
31
+ export const patchOp = (env, apply) => (mutateWorkspace(env.root, (workspace) => { apply(opIn(workspace, env.opId), workspace); }, { now: env.clock.now }));
32
+ export const setPhase = async (env, phase) => {
33
+ await patchOp(env, (op) => { op.phase = phase; });
34
+ await env.log({ event: 'phase', phase });
35
+ };
36
+ export const failure = (code, message, flags = {}) => ({
37
+ state: 'failed',
38
+ error: { code, message, retryable: flags.retryable ?? false, resumable: flags.resumable ?? false },
39
+ });
40
+ /** Write the terminal state, settle the approval, close the ledger. */
41
+ export const finishOp = async (env, outcome) => {
42
+ const at = env.clock.now().toISOString();
43
+ await patchOp(env, (op) => {
44
+ op.state = outcome.state;
45
+ op.error = outcome.state === 'failed' ? outcome.error : null;
46
+ op.finishedAt = at;
47
+ op.phase = 'settled';
48
+ });
49
+ await settleApproval({ stateRoot: env.stateRoot, workspaceId: env.workspaceId, opId: env.opId, at });
50
+ await ledger(env, outcome.state === 'failed'
51
+ ? { event: 'failed', code: outcome.error.code, message: outcome.error.message }
52
+ : { event: outcome.state === 'superseded' ? 'superseded' : 'settled' });
53
+ await env.log({ event: 'finished', outcome: outcome.state });
54
+ };
55
+ /**
56
+ * The error a thrown failure becomes. Nothing here costs money and every call
57
+ * id is stable, so an unclassified runner error is resumable: a Resume replays
58
+ * the same ids and the call store never repeats a finished call. A refusal the
59
+ * workspace itself made (a changed source file, a bad reference) is not; a
60
+ * corpus outage or rate limit (a retryable `SlateError`) is, because the search
61
+ * replays on its own key.
62
+ */
63
+ export const errorFromRunner = (error) => {
64
+ if (error instanceof SlateError) {
65
+ const resumable = error.retryable;
66
+ return { code: error.code, message: error.message, retryable: error.retryable, resumable };
67
+ }
68
+ return { code: 'runner_error', message: error instanceof Error ? error.message : String(error), retryable: false, resumable: true };
69
+ };
70
+ export const sleepFor = (milliseconds, signal) => new Promise((resolve) => {
71
+ if (signal?.aborted) {
72
+ resolve();
73
+ return;
74
+ }
75
+ const finish = () => { clearTimeout(timer); signal?.removeEventListener('abort', finish); resolve(); };
76
+ const timer = setTimeout(finish, milliseconds);
77
+ signal?.addEventListener('abort', finish, { once: true });
78
+ });
79
+ //# sourceMappingURL=slate-runner-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slate-runner-context.js","sourceRoot":"","sources":["../src/slate-runner-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEhE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAoB,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AA2B7D,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,CAAC;AAEpC,iGAAiG;AACjG,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,IAAY,EAAoB,EAAE;IAC3E,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACjE,IAAI,IAAI,GAAG,eAAe,EAAE,CAAC;gBAC3B,MAAM,EAAE,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvC,MAAM,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;YAClC,CAAC;YACD,MAAM,UAAU,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/H,CAAC;QAAC,MAAM,CAAC,CAAC,uDAAuD,CAAC,CAAC;IACrE,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,SAAyB,EAAE,IAAY,EAAW,EAAE;IACvE,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC9D,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,iCAAiC,CAAC,CAAC;IACtE,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,uDAAuD;AACvD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAc,EAAE,KAAkB,EAAiB,EAAE,CAAC,CAC3E,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CACxF,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAc,EAAE,KAAuD,EAAiB,EAAE,CAAC,CACjH,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CACnH,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,GAAc,EAAE,KAAa,EAAiB,EAAE;IAC7E,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3C,CAAC,CAAC;AAOF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,QAAsD,EAAE,EAAW,EAAE,CAAC,CAAC;IAC5H,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,EAAE;CACnG,CAAC,CAAC;AAEH,uEAAuE;AACvE,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,GAAc,EAAE,OAAgB,EAAiB,EAAE;IAChF,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;IACzC,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE;QACxB,EAAE,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACzB,EAAE,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC;QACnB,EAAE,CAAC,KAAK,GAAG,SAAS,CAAC;IACvB,CAAC,CAAC,CAAC;IACH,MAAM,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACrG,MAAM,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,KAAK,QAAQ;QAC1C,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE;QAC/E,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IAC1E,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAc,EAAgB,EAAE;IAC9D,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QAClC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC;IAC7F,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACtI,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,YAAoB,EAAE,MAAoB,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;IAC7G,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QAAC,OAAO,EAAE,CAAC;QAAC,OAAO;IAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,GAAS,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7G,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC/C,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5D,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The sentence a person sees when one image call failed. The store's own
3
+ * messages are fixed text (it never copies a provider body into them), but the
4
+ * detail still goes only to the operator's log, so this maps by code and never
5
+ * echoes what the process printed.
6
+ */
7
+ export declare const imageFailureMessage: (error: unknown) => string;
8
+ //# sourceMappingURL=slate-runner-failure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slate-runner-failure.d.ts","sourceRoot":"","sources":["../src/slate-runner-failure.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,mBAAmB,GAAI,OAAO,OAAO,KAAG,MAMpD,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * The sentence a person sees when one image call failed. The store's own
3
+ * messages are fixed text (it never copies a provider body into them), but the
4
+ * detail still goes only to the operator's log, so this maps by code and never
5
+ * echoes what the process printed.
6
+ */
7
+ export const imageFailureMessage = (error) => {
8
+ const code = error?.code;
9
+ if (code === 'NEEDS_RECONCILIATION')
10
+ return 'The image call did not return an image.';
11
+ if (code === 'CALL_LOCKED')
12
+ return 'This image call is already running.';
13
+ if (code === 'REQUEST_CHANGED')
14
+ return 'This image call was started with different inputs.';
15
+ return 'This option could not be drawn.';
16
+ };
17
+ //# sourceMappingURL=slate-runner-failure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slate-runner-failure.js","sourceRoot":"","sources":["../src/slate-runner-failure.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAAU,EAAE;IAC5D,MAAM,IAAI,GAAI,KAAmC,EAAE,IAAI,CAAC;IACxD,IAAI,IAAI,KAAK,sBAAsB;QAAE,OAAO,yCAAyC,CAAC;IACtF,IAAI,IAAI,KAAK,aAAa;QAAE,OAAO,qCAAqC,CAAC;IACzE,IAAI,IAAI,KAAK,iBAAiB;QAAE,OAAO,oDAAoD,CAAC;IAC5F,OAAO,iCAAiC,CAAC;AAC3C,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** The environment marker only the workspace's own spawn sets; a hand-typed `12ui slate-runner` is refused. */
2
+ export declare const RUNNER_ENV_FLAG = "TWELVE_UI_SLATE_RUNNER";
3
+ //# sourceMappingURL=slate-runner-flag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slate-runner-flag.d.ts","sourceRoot":"","sources":["../src/slate-runner-flag.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAC/G,eAAO,MAAM,eAAe,2BAA2B,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** The environment marker only the workspace's own spawn sets; a hand-typed `12ui slate-runner` is refused. */
2
+ export const RUNNER_ENV_FLAG = 'TWELVE_UI_SLATE_RUNNER';
3
+ //# sourceMappingURL=slate-runner-flag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slate-runner-flag.js","sourceRoot":"","sources":["../src/slate-runner-flag.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAC/G,MAAM,CAAC,MAAM,eAAe,GAAG,wBAAwB,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { type SlateCorpus } from './slate-corpus.js';
2
+ import { type SlateImageExecutor } from './slate-image-executor.js';
3
+ import { type RunnerClock } from './slate-runner-context.js';
4
+ /**
5
+ * The detached process that owns one op to a terminal state (D1).
6
+ *
7
+ * Image work never runs inside the MCP server: a committed click spawns
8
+ * `12ui slate-runner <root> <opId>` and returns. The runner refuses (exit 2,
9
+ * nothing started) unless it was started by the server, the op is in the
10
+ * workspace, and the approval record written outside the run directory matches
11
+ * the frozen params: it runs `codex exec` with full access to its own scratch
12
+ * folder, so a planted `workspace.json` must never make it execute. It then
13
+ * takes the per-op lock, keeps a heartbeat in the lock's mtime, sets itself as
14
+ * the op's owner (compare-and-set), executes, and writes the terminal state.
15
+ * It reads no 12ui credentials: the workspace costs nothing.
16
+ */
17
+ export type RunnerDependencies = {
18
+ /** The free corpus client; the default reads the optional-auth corpus configuration. */
19
+ corpus?: () => SlateCorpus;
20
+ /** The image executor; the default is the local Codex CLI's native image call. */
21
+ executor?: (root: string) => SlateImageExecutor;
22
+ clock?: Partial<RunnerClock>;
23
+ heartbeatIntervalMs?: number;
24
+ };
25
+ export declare const runSlateRunner: (args: {
26
+ root: string;
27
+ opId: string;
28
+ env?: NodeJS.ProcessEnv;
29
+ deps?: RunnerDependencies;
30
+ }) => Promise<number>;
31
+ //# sourceMappingURL=slate-runner-main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slate-runner-main.d.ts","sourceRoot":"","sources":["../src/slate-runner-main.ts"],"names":[],"mappings":"AAKA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGjE,OAAO,EAA6B,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAU/F,OAAO,EAQL,KAAK,WAAW,EAEjB,MAAM,2BAA2B,CAAC;AAKnC;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,WAAW,CAAC;IAC3B,kFAAkF;IAClF,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,kBAAkB,CAAC;IAChD,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,cAAc,GAAU,MAAM;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,IAAI,CAAC,EAAE,kBAAkB,CAAC;CAC3B,KAAG,OAAO,CAAC,MAAM,CAoEjB,CAAC"}