@12ui/design 0.2.27 → 0.2.29

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 (405) hide show
  1. package/README.md +141 -87
  2. package/SKILL.md +5 -5
  3. package/dist/branch-completion.d.ts.map +1 -1
  4. package/dist/branch-completion.js +37 -14
  5. package/dist/branch-completion.js.map +1 -1
  6. package/dist/branch-execution.d.ts.map +1 -1
  7. package/dist/branch-execution.js +28 -8
  8. package/dist/branch-execution.js.map +1 -1
  9. package/dist/branch-identity.d.ts +10 -4
  10. package/dist/branch-identity.d.ts.map +1 -1
  11. package/dist/branch-identity.js +9 -6
  12. package/dist/branch-identity.js.map +1 -1
  13. package/dist/branch-page-conversion.d.ts +9 -8
  14. package/dist/branch-page-conversion.d.ts.map +1 -1
  15. package/dist/branch-page-conversion.js +8 -2
  16. package/dist/branch-page-conversion.js.map +1 -1
  17. package/dist/branch-page-packaging.d.ts +31 -0
  18. package/dist/branch-page-packaging.d.ts.map +1 -0
  19. package/dist/branch-page-packaging.js +86 -0
  20. package/dist/branch-page-packaging.js.map +1 -0
  21. package/dist/branch-plan.d.ts +6 -0
  22. package/dist/branch-plan.d.ts.map +1 -1
  23. package/dist/branch-plan.js +6 -1
  24. package/dist/branch-plan.js.map +1 -1
  25. package/dist/branch-progress.d.ts +22 -0
  26. package/dist/branch-progress.d.ts.map +1 -1
  27. package/dist/branch-progress.js +33 -8
  28. package/dist/branch-progress.js.map +1 -1
  29. package/dist/branch-run-record.d.ts +9 -0
  30. package/dist/branch-run-record.d.ts.map +1 -1
  31. package/dist/branch-run-record.js.map +1 -1
  32. package/dist/branch-status.d.ts +2 -0
  33. package/dist/branch-status.d.ts.map +1 -1
  34. package/dist/branch-status.js +60 -15
  35. package/dist/branch-status.js.map +1 -1
  36. package/dist/branch-winner.d.ts +13 -15
  37. package/dist/branch-winner.d.ts.map +1 -1
  38. package/dist/branch-winner.js +25 -77
  39. package/dist/branch-winner.js.map +1 -1
  40. package/dist/cli-arguments.d.ts.map +1 -1
  41. package/dist/cli-arguments.js +1 -0
  42. package/dist/cli-arguments.js.map +1 -1
  43. package/dist/cli-auth-command.d.ts.map +1 -1
  44. package/dist/cli-auth-command.js +5 -0
  45. package/dist/cli-auth-command.js.map +1 -1
  46. package/dist/cli-auth-onboarding.d.ts +12 -0
  47. package/dist/cli-auth-onboarding.d.ts.map +1 -0
  48. package/dist/cli-auth-onboarding.js +21 -0
  49. package/dist/cli-auth-onboarding.js.map +1 -0
  50. package/dist/cli-branch-command.d.ts +14 -19
  51. package/dist/cli-branch-command.d.ts.map +1 -1
  52. package/dist/cli-branch-command.js +207 -137
  53. package/dist/cli-branch-command.js.map +1 -1
  54. package/dist/cli-capabilities.d.ts +16 -51
  55. package/dist/cli-capabilities.d.ts.map +1 -1
  56. package/dist/cli-capabilities.js +23 -26
  57. package/dist/cli-capabilities.js.map +1 -1
  58. package/dist/cli-cli-command.d.ts +3 -0
  59. package/dist/cli-cli-command.d.ts.map +1 -1
  60. package/dist/cli-cli-command.js +15 -3
  61. package/dist/cli-cli-command.js.map +1 -1
  62. package/dist/cli-conversion-derivation.d.ts +30 -0
  63. package/dist/cli-conversion-derivation.d.ts.map +1 -0
  64. package/dist/{cli-export-command.js → cli-conversion-derivation.js} +178 -110
  65. package/dist/cli-conversion-derivation.js.map +1 -0
  66. package/dist/cli-conversion-output-directory.d.ts +5 -0
  67. package/dist/cli-conversion-output-directory.d.ts.map +1 -0
  68. package/dist/{cli-export-output-directory.js → cli-conversion-output-directory.js} +10 -10
  69. package/dist/cli-conversion-output-directory.js.map +1 -0
  70. package/dist/cli-convert-command.d.ts +9 -0
  71. package/dist/cli-convert-command.d.ts.map +1 -1
  72. package/dist/cli-convert-command.js +528 -158
  73. package/dist/cli-convert-command.js.map +1 -1
  74. package/dist/cli-corpus-command.d.ts.map +1 -1
  75. package/dist/cli-corpus-command.js +77 -10
  76. package/dist/cli-corpus-command.js.map +1 -1
  77. package/dist/cli-corpus-reference-downloads.d.ts +5 -0
  78. package/dist/cli-corpus-reference-downloads.d.ts.map +1 -1
  79. package/dist/cli-corpus-reference-downloads.js +18 -7
  80. package/dist/cli-corpus-reference-downloads.js.map +1 -1
  81. package/dist/cli-corpus-run.d.ts +9 -0
  82. package/dist/cli-corpus-run.d.ts.map +1 -1
  83. package/dist/cli-corpus-run.js +18 -0
  84. package/dist/cli-corpus-run.js.map +1 -1
  85. package/dist/cli-detach.d.ts +12 -4
  86. package/dist/cli-detach.d.ts.map +1 -1
  87. package/dist/cli-detach.js +49 -17
  88. package/dist/cli-detach.js.map +1 -1
  89. package/dist/cli-draft-command.d.ts +44 -61
  90. package/dist/cli-draft-command.d.ts.map +1 -1
  91. package/dist/cli-draft-command.js +307 -180
  92. package/dist/cli-draft-command.js.map +1 -1
  93. package/dist/cli-help/conversion.d.ts +30 -0
  94. package/dist/cli-help/conversion.d.ts.map +1 -0
  95. package/dist/cli-help/conversion.js +55 -0
  96. package/dist/cli-help/conversion.js.map +1 -0
  97. package/dist/cli-help/design.d.ts +84 -0
  98. package/dist/cli-help/design.d.ts.map +1 -0
  99. package/dist/cli-help/design.js +152 -0
  100. package/dist/cli-help/design.js.map +1 -0
  101. package/dist/cli-help/index.d.ts +234 -0
  102. package/dist/cli-help/index.d.ts.map +1 -0
  103. package/dist/cli-help/index.js +32 -0
  104. package/dist/cli-help/index.js.map +1 -0
  105. package/dist/cli-help/meta.d.ts +24 -0
  106. package/dist/cli-help/meta.d.ts.map +1 -0
  107. package/dist/cli-help/meta.js +30 -0
  108. package/dist/cli-help/meta.js.map +1 -0
  109. package/dist/cli-help/render.d.ts +4 -0
  110. package/dist/cli-help/render.d.ts.map +1 -0
  111. package/dist/cli-help/render.js +28 -0
  112. package/dist/cli-help/render.js.map +1 -0
  113. package/dist/cli-help/setup.d.ts +93 -0
  114. package/dist/cli-help/setup.d.ts.map +1 -0
  115. package/dist/cli-help/setup.js +142 -0
  116. package/dist/cli-help/setup.js.map +1 -0
  117. package/dist/cli-help/types.d.ts +10 -0
  118. package/dist/cli-help/types.d.ts.map +1 -0
  119. package/dist/cli-help/types.js +2 -0
  120. package/dist/cli-help/types.js.map +1 -0
  121. package/dist/cli-next-command.d.ts +11 -8
  122. package/dist/cli-next-command.d.ts.map +1 -1
  123. package/dist/cli-next-command.js +288 -88
  124. package/dist/cli-next-command.js.map +1 -1
  125. package/dist/cli-output-paths.d.ts +2 -23
  126. package/dist/cli-output-paths.d.ts.map +1 -1
  127. package/dist/cli-output-paths.js +2 -36
  128. package/dist/cli-output-paths.js.map +1 -1
  129. package/dist/cli-package-command.d.ts +1 -0
  130. package/dist/cli-package-command.d.ts.map +1 -1
  131. package/dist/cli-package-command.js +107 -34
  132. package/dist/cli-package-command.js.map +1 -1
  133. package/dist/cli-pending-auth.d.ts +20 -0
  134. package/dist/cli-pending-auth.d.ts.map +1 -0
  135. package/dist/cli-pending-auth.js +160 -0
  136. package/dist/cli-pending-auth.js.map +1 -0
  137. package/dist/cli-progress.d.ts +256 -75
  138. package/dist/cli-progress.d.ts.map +1 -1
  139. package/dist/cli-progress.js +425 -98
  140. package/dist/cli-progress.js.map +1 -1
  141. package/dist/cli-review-command.d.ts +8 -0
  142. package/dist/cli-review-command.d.ts.map +1 -0
  143. package/dist/cli-review-command.js +71 -0
  144. package/dist/cli-review-command.js.map +1 -0
  145. package/dist/cli-run.d.ts +2 -0
  146. package/dist/cli-run.d.ts.map +1 -1
  147. package/dist/cli-run.js +62 -73
  148. package/dist/cli-run.js.map +1 -1
  149. package/dist/cli-skill-command.d.ts +3 -0
  150. package/dist/cli-skill-command.d.ts.map +1 -1
  151. package/dist/cli-skill-command.js +26 -3
  152. package/dist/cli-skill-command.js.map +1 -1
  153. package/dist/cli-usage.d.ts +17 -8
  154. package/dist/cli-usage.d.ts.map +1 -1
  155. package/dist/cli-usage.js +57 -40
  156. package/dist/cli-usage.js.map +1 -1
  157. package/dist/config.d.ts +1 -0
  158. package/dist/config.d.ts.map +1 -1
  159. package/dist/config.js +8 -2
  160. package/dist/config.js.map +1 -1
  161. package/dist/conversion-client.d.ts +4 -0
  162. package/dist/conversion-client.d.ts.map +1 -1
  163. package/dist/conversion-client.js +8 -1
  164. package/dist/conversion-client.js.map +1 -1
  165. package/dist/conversion-outputs.d.ts +11 -0
  166. package/dist/conversion-outputs.d.ts.map +1 -1
  167. package/dist/conversion-outputs.js +13 -1
  168. package/dist/conversion-outputs.js.map +1 -1
  169. package/dist/conversion-receipt.d.ts +1 -1
  170. package/dist/conversion-receipt.js +1 -1
  171. package/dist/conversion-recovery.d.ts +20 -0
  172. package/dist/conversion-recovery.d.ts.map +1 -0
  173. package/dist/conversion-recovery.js +61 -0
  174. package/dist/conversion-recovery.js.map +1 -0
  175. package/dist/conversion-status-contract.js +1 -1
  176. package/dist/conversion-status-contract.js.map +1 -1
  177. package/dist/credential-setup.d.ts +9 -1
  178. package/dist/credential-setup.d.ts.map +1 -1
  179. package/dist/credential-setup.js +13 -1
  180. package/dist/credential-setup.js.map +1 -1
  181. package/dist/draft-adoption.d.ts +9 -3
  182. package/dist/draft-adoption.d.ts.map +1 -1
  183. package/dist/draft-adoption.js +26 -41
  184. package/dist/draft-adoption.js.map +1 -1
  185. package/dist/draft-identity.d.ts +9 -12
  186. package/dist/draft-identity.d.ts.map +1 -1
  187. package/dist/draft-identity.js +0 -0
  188. package/dist/draft-identity.js.map +1 -1
  189. package/dist/draft-run.d.ts +9 -19
  190. package/dist/draft-run.d.ts.map +1 -1
  191. package/dist/draft-run.js +67 -95
  192. package/dist/draft-run.js.map +1 -1
  193. package/dist/draft-workspace.d.ts +26 -18
  194. package/dist/draft-workspace.d.ts.map +1 -1
  195. package/dist/draft-workspace.js +16 -5
  196. package/dist/draft-workspace.js.map +1 -1
  197. package/dist/hosted-draft-identity.d.ts +20 -0
  198. package/dist/hosted-draft-identity.d.ts.map +1 -0
  199. package/dist/hosted-draft-identity.js +30 -0
  200. package/dist/hosted-draft-identity.js.map +1 -0
  201. package/dist/hosted-draft-run.d.ts +60 -0
  202. package/dist/hosted-draft-run.d.ts.map +1 -0
  203. package/dist/hosted-draft-run.js +97 -0
  204. package/dist/hosted-draft-run.js.map +1 -0
  205. package/dist/legacy-codex-cleanup.d.ts +13 -0
  206. package/dist/legacy-codex-cleanup.d.ts.map +1 -1
  207. package/dist/legacy-codex-cleanup.js +83 -0
  208. package/dist/legacy-codex-cleanup.js.map +1 -1
  209. package/dist/legacy-skill-catalog.d.ts +2 -2
  210. package/dist/legacy-skill-catalog.d.ts.map +1 -1
  211. package/dist/legacy-skill-catalog.js +76 -5
  212. package/dist/legacy-skill-catalog.js.map +1 -1
  213. package/dist/login-auth.d.ts +38 -0
  214. package/dist/login-auth.d.ts.map +1 -1
  215. package/dist/login-auth.js +67 -16
  216. package/dist/login-auth.js.map +1 -1
  217. package/dist/mcp-tool-definitions.js +1 -1
  218. package/dist/mcp-tool-definitions.js.map +1 -1
  219. package/dist/next-target.d.ts +1 -4
  220. package/dist/next-target.d.ts.map +1 -1
  221. package/dist/next-target.js +5 -9
  222. package/dist/next-target.js.map +1 -1
  223. package/dist/next-wait-lease.d.ts +18 -0
  224. package/dist/next-wait-lease.d.ts.map +1 -0
  225. package/dist/next-wait-lease.js +143 -0
  226. package/dist/next-wait-lease.js.map +1 -0
  227. package/dist/next-wait-process.d.ts +17 -0
  228. package/dist/next-wait-process.d.ts.map +1 -0
  229. package/dist/next-wait-process.js +40 -0
  230. package/dist/next-wait-process.js.map +1 -0
  231. package/dist/package-client.d.ts +30 -0
  232. package/dist/package-client.d.ts.map +1 -1
  233. package/dist/package-client.js.map +1 -1
  234. package/dist/package-submission.d.ts +17 -0
  235. package/dist/package-submission.d.ts.map +1 -1
  236. package/dist/package-submission.js +13 -0
  237. package/dist/package-submission.js.map +1 -1
  238. package/dist/pending-auth-store.d.ts +15 -0
  239. package/dist/pending-auth-store.d.ts.map +1 -0
  240. package/dist/pending-auth-store.js +90 -0
  241. package/dist/pending-auth-store.js.map +1 -0
  242. package/dist/responsive-quality.d.ts +2 -2
  243. package/dist/responsive-quality.js +2 -2
  244. package/dist/review-discovery.d.ts +10 -0
  245. package/dist/review-discovery.d.ts.map +1 -0
  246. package/dist/review-discovery.js +381 -0
  247. package/dist/review-discovery.js.map +1 -0
  248. package/dist/review-edit-html.d.ts +6 -0
  249. package/dist/review-edit-html.d.ts.map +1 -0
  250. package/dist/review-edit-html.js +11 -0
  251. package/dist/review-edit-html.js.map +1 -0
  252. package/dist/review-edit-source.d.ts +22 -0
  253. package/dist/review-edit-source.d.ts.map +1 -0
  254. package/dist/review-edit-source.js +103 -0
  255. package/dist/review-edit-source.js.map +1 -0
  256. package/dist/review-edit.d.ts +15 -0
  257. package/dist/review-edit.d.ts.map +1 -0
  258. package/dist/review-edit.js +192 -0
  259. package/dist/review-edit.js.map +1 -0
  260. package/dist/review-layerdoc-diff.d.ts +7 -0
  261. package/dist/review-layerdoc-diff.d.ts.map +1 -0
  262. package/dist/review-layerdoc-diff.js +92 -0
  263. package/dist/review-layerdoc-diff.js.map +1 -0
  264. package/dist/review-page-assets.d.ts +3 -0
  265. package/dist/review-page-assets.d.ts.map +1 -0
  266. package/dist/review-page-assets.js +43 -0
  267. package/dist/review-page-assets.js.map +1 -0
  268. package/dist/review-page.d.ts +3 -0
  269. package/dist/review-page.d.ts.map +1 -0
  270. package/dist/review-page.js +237 -0
  271. package/dist/review-page.js.map +1 -0
  272. package/dist/review-pricing.d.ts +14 -0
  273. package/dist/review-pricing.d.ts.map +1 -0
  274. package/dist/review-pricing.js +23 -0
  275. package/dist/review-pricing.js.map +1 -0
  276. package/dist/review-server.d.ts +15 -0
  277. package/dist/review-server.d.ts.map +1 -0
  278. package/dist/review-server.js +204 -0
  279. package/dist/review-server.js.map +1 -0
  280. package/dist/review-store.d.ts +11 -0
  281. package/dist/review-store.d.ts.map +1 -0
  282. package/dist/review-store.js +96 -0
  283. package/dist/review-store.js.map +1 -0
  284. package/dist/review-types.d.ts +128 -0
  285. package/dist/review-types.d.ts.map +1 -0
  286. package/dist/review-types.js +2 -0
  287. package/dist/review-types.js.map +1 -0
  288. package/dist/run-journal-commands.d.ts.map +1 -1
  289. package/dist/run-journal-commands.js +34 -76
  290. package/dist/run-journal-commands.js.map +1 -1
  291. package/dist/run-journal-in-flight.d.ts +2 -2
  292. package/dist/run-journal-in-flight.d.ts.map +1 -1
  293. package/dist/run-journal-in-flight.js +0 -0
  294. package/dist/run-journal-in-flight.js.map +1 -1
  295. package/dist/skill-installer.d.ts +2 -2
  296. package/dist/skill-installer.d.ts.map +1 -1
  297. package/dist/skill-installer.js +2 -2
  298. package/dist/skill-installer.js.map +1 -1
  299. package/open-design.json +3 -3
  300. package/package.json +1 -1
  301. package/skills/12ui-design/SKILL.md +62 -0
  302. package/skills/12ui-design/agents/openai.yaml +6 -0
  303. package/skills/12ui-design/inspire.md +11 -0
  304. package/dist/cli-create-command.d.ts +0 -59
  305. package/dist/cli-create-command.d.ts.map +0 -1
  306. package/dist/cli-create-command.js +0 -354
  307. package/dist/cli-create-command.js.map +0 -1
  308. package/dist/cli-export-command.d.ts +0 -26
  309. package/dist/cli-export-command.d.ts.map +0 -1
  310. package/dist/cli-export-command.js.map +0 -1
  311. package/dist/cli-export-output-directory.d.ts +0 -5
  312. package/dist/cli-export-output-directory.d.ts.map +0 -1
  313. package/dist/cli-export-output-directory.js.map +0 -1
  314. package/dist/cli-image-batch-command.d.ts +0 -29
  315. package/dist/cli-image-batch-command.d.ts.map +0 -1
  316. package/dist/cli-image-batch-command.js +0 -236
  317. package/dist/cli-image-batch-command.js.map +0 -1
  318. package/dist/cli-image-batch-materialize.d.ts +0 -27
  319. package/dist/cli-image-batch-materialize.d.ts.map +0 -1
  320. package/dist/cli-image-batch-materialize.js +0 -41
  321. package/dist/cli-image-batch-materialize.js.map +0 -1
  322. package/dist/cli-image-batch-resume.d.ts +0 -36
  323. package/dist/cli-image-batch-resume.d.ts.map +0 -1
  324. package/dist/cli-image-batch-resume.js +0 -176
  325. package/dist/cli-image-batch-resume.js.map +0 -1
  326. package/dist/cli-image-command.d.ts +0 -10
  327. package/dist/cli-image-command.d.ts.map +0 -1
  328. package/dist/cli-image-command.js +0 -106
  329. package/dist/cli-image-command.js.map +0 -1
  330. package/dist/cli-select-command.d.ts +0 -16
  331. package/dist/cli-select-command.d.ts.map +0 -1
  332. package/dist/cli-select-command.js +0 -60
  333. package/dist/cli-select-command.js.map +0 -1
  334. package/dist/create-identity.d.ts +0 -25
  335. package/dist/create-identity.d.ts.map +0 -1
  336. package/dist/create-identity.js +0 -0
  337. package/dist/create-identity.js.map +0 -1
  338. package/dist/draft-prompts.d.ts +0 -35
  339. package/dist/draft-prompts.d.ts.map +0 -1
  340. package/dist/draft-prompts.js +0 -51
  341. package/dist/draft-prompts.js.map +0 -1
  342. package/dist/image-batch-status.d.ts +0 -42
  343. package/dist/image-batch-status.d.ts.map +0 -1
  344. package/dist/image-batch-status.js +0 -143
  345. package/dist/image-batch-status.js.map +0 -1
  346. package/dist/image-generation-batch-attempt.d.ts +0 -28
  347. package/dist/image-generation-batch-attempt.d.ts.map +0 -1
  348. package/dist/image-generation-batch-attempt.js +0 -48
  349. package/dist/image-generation-batch-attempt.js.map +0 -1
  350. package/dist/image-generation-batch-manifest.d.ts +0 -25
  351. package/dist/image-generation-batch-manifest.d.ts.map +0 -1
  352. package/dist/image-generation-batch-manifest.js +0 -97
  353. package/dist/image-generation-batch-manifest.js.map +0 -1
  354. package/dist/image-generation-completion.d.ts +0 -43
  355. package/dist/image-generation-completion.d.ts.map +0 -1
  356. package/dist/image-generation-completion.js +0 -54
  357. package/dist/image-generation-completion.js.map +0 -1
  358. package/dist/image-generation-error.d.ts +0 -3
  359. package/dist/image-generation-error.d.ts.map +0 -1
  360. package/dist/image-generation-error.js +0 -30
  361. package/dist/image-generation-error.js.map +0 -1
  362. package/dist/image-generation-evidence.d.ts +0 -43
  363. package/dist/image-generation-evidence.d.ts.map +0 -1
  364. package/dist/image-generation-evidence.js +0 -28
  365. package/dist/image-generation-evidence.js.map +0 -1
  366. package/dist/image-generation-fs.d.ts +0 -3
  367. package/dist/image-generation-fs.d.ts.map +0 -1
  368. package/dist/image-generation-fs.js +0 -23
  369. package/dist/image-generation-fs.js.map +0 -1
  370. package/dist/image-generation-output.d.ts +0 -3
  371. package/dist/image-generation-output.d.ts.map +0 -1
  372. package/dist/image-generation-output.js +0 -51
  373. package/dist/image-generation-output.js.map +0 -1
  374. package/dist/image-generation-request.d.ts +0 -43
  375. package/dist/image-generation-request.d.ts.map +0 -1
  376. package/dist/image-generation-request.js +0 -52
  377. package/dist/image-generation-request.js.map +0 -1
  378. package/dist/image-generation-resume.d.ts +0 -49
  379. package/dist/image-generation-resume.d.ts.map +0 -1
  380. package/dist/image-generation-resume.js +0 -96
  381. package/dist/image-generation-resume.js.map +0 -1
  382. package/dist/image-generation-run.d.ts +0 -46
  383. package/dist/image-generation-run.d.ts.map +0 -1
  384. package/dist/image-generation-run.js +0 -158
  385. package/dist/image-generation-run.js.map +0 -1
  386. package/dist/image-generation-staging.d.ts +0 -25
  387. package/dist/image-generation-staging.d.ts.map +0 -1
  388. package/dist/image-generation-staging.js +0 -80
  389. package/dist/image-generation-staging.js.map +0 -1
  390. package/dist/image-generation-usage.d.ts +0 -75
  391. package/dist/image-generation-usage.d.ts.map +0 -1
  392. package/dist/image-generation-usage.js +0 -219
  393. package/dist/image-generation-usage.js.map +0 -1
  394. package/dist/image-provider-preflight.d.ts +0 -21
  395. package/dist/image-provider-preflight.d.ts.map +0 -1
  396. package/dist/image-provider-preflight.js +0 -184
  397. package/dist/image-provider-preflight.js.map +0 -1
  398. package/dist/selection-record.d.ts +0 -97
  399. package/dist/selection-record.d.ts.map +0 -1
  400. package/dist/selection-record.js +0 -138
  401. package/dist/selection-record.js.map +0 -1
  402. package/skills/design/SKILL.md +0 -116
  403. package/skills/design/agents/openai.yaml +0 -8
  404. package/skills/design/assets/large-logo.svg +0 -3
  405. package/skills/design/assets/small-400px.png +0 -0
@@ -1,25 +0,0 @@
1
- import { type ImageGenerationAspect, type ImageGenerationReferenceMode, type ImageGenerationRequest } from './image-generation-request.js';
2
- import { type ImageGenerationProvider } from './image-provider-preflight.js';
3
- export type ImageGenerationBatchManifest = {
4
- version: 1;
5
- projectRoot: string;
6
- provider: ImageGenerationProvider;
7
- aspect: ImageGenerationAspect;
8
- referenceMode: ImageGenerationReferenceMode;
9
- candidates: Array<{
10
- id: string;
11
- prompt: string;
12
- reference: string;
13
- out: string;
14
- idempotencyKey: string;
15
- }>;
16
- };
17
- export declare const readImageGenerationBatchManifest: (manifestPath: string) => Promise<{
18
- manifest: ImageGenerationBatchManifest;
19
- source: Uint8Array;
20
- }>;
21
- export declare const resolveImageGenerationBatchRequests: (args: {
22
- manifest: ImageGenerationBatchManifest;
23
- manifestPath: string;
24
- }) => ImageGenerationRequest[];
25
- //# sourceMappingURL=image-generation-batch-manifest.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-generation-batch-manifest.d.ts","sourceRoot":"","sources":["../src/image-generation-batch-manifest.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EACjC,KAAK,sBAAsB,EAC5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,+BAA+B,CAAC;AAGvC,MAAM,MAAM,4BAA4B,GAAG;IACzC,OAAO,EAAE,CAAC,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,uBAAuB,CAAC;IAClC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,aAAa,EAAE,4BAA4B,CAAC;IAC5C,UAAU,EAAE,KAAK,CAAC;QAChB,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;CACJ,CAAC;AAoBF,eAAO,MAAM,gCAAgC,GAC3C,cAAc,MAAM,KACnB,OAAO,CAAC;IAAE,QAAQ,EAAE,4BAA4B,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CA6DxE,CAAC;AAEF,eAAO,MAAM,mCAAmC,GAAI,MAAM;IACxD,QAAQ,EAAE,4BAA4B,CAAC;IACvC,YAAY,EAAE,MAAM,CAAC;CACtB,KAAG,sBAAsB,EAiBzB,CAAC"}
@@ -1,97 +0,0 @@
1
- import { readFile } from 'node:fs/promises';
2
- import path from 'node:path';
3
- import { isImageGenerationAspect, isImageGenerationReferenceMode, } from './image-generation-request.js';
4
- import { isImageGenerationProvider, } from './image-provider-preflight.js';
5
- import { normalizeOptionalIdempotencyKey } from './idempotency-key.js';
6
- const isRecord = (value) => (typeof value === 'object' && value !== null && !Array.isArray(value));
7
- const requiredString = (record, key, context) => {
8
- const value = record[key];
9
- if (typeof value !== 'string' || !value.trim()) {
10
- throw new Error(`${context}.${key} must be a non-empty string`);
11
- }
12
- return value.trim();
13
- };
14
- const unique = (values, name) => {
15
- if (new Set(values).size !== values.length) {
16
- throw new Error(`Image batch candidates must use unique ${name}`);
17
- }
18
- };
19
- export const readImageGenerationBatchManifest = async (manifestPath) => {
20
- const source = new Uint8Array(await readFile(manifestPath));
21
- let value;
22
- try {
23
- value = JSON.parse(new TextDecoder().decode(source));
24
- }
25
- catch (error) {
26
- throw new Error(`Image batch manifest is not valid JSON: ${manifestPath}`, { cause: error });
27
- }
28
- if (!isRecord(value) || value.version !== 1) {
29
- throw new Error('Image batch manifest.version must be 1');
30
- }
31
- const provider = value.provider ?? 'auto';
32
- if (!isImageGenerationProvider(provider)) {
33
- throw new Error('Image batch manifest.provider must be auto, codex, or openai');
34
- }
35
- const aspect = value.aspect ?? 'landscape';
36
- if (!isImageGenerationAspect(aspect)) {
37
- throw new Error('Image batch manifest.aspect must be landscape, portrait, or square');
38
- }
39
- const referenceMode = value.referenceMode ?? 'inspiration';
40
- if (!isImageGenerationReferenceMode(referenceMode)) {
41
- throw new Error('Image batch manifest.referenceMode must be inspiration or preserve-structure');
42
- }
43
- if (!Array.isArray(value.candidates) || value.candidates.length < 2 || value.candidates.length > 16) {
44
- throw new Error('Image batch manifest.candidates must contain between 2 and 16 jobs');
45
- }
46
- const candidates = value.candidates.map((candidate, index) => {
47
- const context = `Image batch manifest.candidates[${index}]`;
48
- if (!isRecord(candidate))
49
- throw new Error(`${context} must be an object`);
50
- const id = requiredString(candidate, 'id', context);
51
- if (!/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/u.test(id)) {
52
- throw new Error(`${context}.id contains unsupported characters`);
53
- }
54
- const idempotencyKey = normalizeOptionalIdempotencyKey(requiredString(candidate, 'idempotencyKey', context), `${context}.idempotencyKey`);
55
- if (!idempotencyKey)
56
- throw new Error(`${context}.idempotencyKey is required`);
57
- return {
58
- id,
59
- prompt: requiredString(candidate, 'prompt', context),
60
- reference: requiredString(candidate, 'reference', context),
61
- out: requiredString(candidate, 'out', context),
62
- idempotencyKey,
63
- };
64
- });
65
- unique(candidates.map((candidate) => candidate.id), 'ids');
66
- unique(candidates.map((candidate) => candidate.idempotencyKey), 'idempotency keys');
67
- return {
68
- source,
69
- manifest: {
70
- version: 1,
71
- projectRoot: requiredString(value, 'projectRoot', 'Image batch manifest'),
72
- provider,
73
- aspect,
74
- referenceMode,
75
- candidates,
76
- },
77
- };
78
- };
79
- export const resolveImageGenerationBatchRequests = (args) => {
80
- const base = path.dirname(args.manifestPath);
81
- const resolve = (value) => path.resolve(base, value);
82
- const requests = args.manifest.candidates.map((candidate) => ({
83
- candidateId: candidate.id,
84
- prompt: candidate.prompt,
85
- promptSource: { kind: 'inline' },
86
- referencePath: resolve(candidate.reference),
87
- outputPath: resolve(candidate.out),
88
- projectRoot: resolve(args.manifest.projectRoot),
89
- provider: args.manifest.provider,
90
- aspect: args.manifest.aspect,
91
- referenceMode: args.manifest.referenceMode,
92
- idempotencyKey: candidate.idempotencyKey,
93
- }));
94
- unique(requests.map((request) => request.outputPath), 'output paths');
95
- return requests;
96
- };
97
- //# sourceMappingURL=image-generation-batch-manifest.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-generation-batch-manifest.js","sourceRoot":"","sources":["../src/image-generation-batch-manifest.ts"],"names":[],"mappings":"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"}
@@ -1,43 +0,0 @@
1
- /**
2
- * The one file a caller may poll. It appears exactly once, only when the batch
3
- * has reached a terminal state, and it names every candidate's status and
4
- * sha256 — so "has generation finished?" stops being a guess made by listing a
5
- * directory that is still being written.
6
- */
7
- export declare const IMAGE_BATCH_COMPLETION_FILENAME = "generation.complete.json";
8
- export type ImageBatchCompletionCandidate = {
9
- id: string;
10
- status: 'succeeded' | 'failed' | 'missing';
11
- outputPath: string;
12
- attemptFile: string;
13
- sha256?: string;
14
- bytes?: number;
15
- idempotencyKey?: string;
16
- error?: string;
17
- };
18
- export type ImageBatchCompletion = {
19
- version: 1;
20
- status: 'succeeded' | 'failed';
21
- manifestPath: string;
22
- manifestSha256: string;
23
- batchAttemptFile: string;
24
- provider: string;
25
- model: string;
26
- resumed: boolean;
27
- completedAt: string;
28
- candidateCount: number;
29
- succeededCount: number;
30
- failedCount: number;
31
- candidates: ImageBatchCompletionCandidate[];
32
- };
33
- export declare const imageBatchCompletionPath: (args: {
34
- manifestPath: string;
35
- outputPaths: readonly string[];
36
- }) => string;
37
- export declare const summarizeImageBatchCandidates: (candidates: readonly {
38
- id: string;
39
- outputPath: string;
40
- idempotencyKey?: string;
41
- }[]) => Promise<ImageBatchCompletionCandidate[]>;
42
- export declare const writeImageBatchCompletion: (file: string, completion: ImageBatchCompletion) => Promise<void>;
43
- //# sourceMappingURL=image-generation-completion.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-generation-completion.d.ts","sourceRoot":"","sources":["../src/image-generation-completion.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,6BAA6B,CAAC;AAE1E,MAAM,MAAM,6BAA6B,GAAG;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,6BAA6B,EAAE,CAAC;CAC7C,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,MAAM;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC,KAAG,MAKH,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,YAAY,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,KACjF,OAAO,CAAC,6BAA6B,EAAE,CAkBvC,CAAC;AAEJ,eAAO,MAAM,yBAAyB,GACpC,MAAM,MAAM,EACZ,YAAY,oBAAoB,KAC/B,OAAO,CAAC,IAAI,CAad,CAAC"}
@@ -1,54 +0,0 @@
1
- import { randomUUID } from 'node:crypto';
2
- import { mkdir, rename, rm, writeFile } from 'node:fs/promises';
3
- import path from 'node:path';
4
- import { imageAttemptPath } from './image-generation-evidence.js';
5
- import { imageGenerationFileBytes, imageGenerationPathExists } from './image-generation-fs.js';
6
- import { readImageGenerationAttemptFile } from './image-generation-staging.js';
7
- /**
8
- * The one file a caller may poll. It appears exactly once, only when the batch
9
- * has reached a terminal state, and it names every candidate's status and
10
- * sha256 — so "has generation finished?" stops being a guess made by listing a
11
- * directory that is still being written.
12
- */
13
- export const IMAGE_BATCH_COMPLETION_FILENAME = 'generation.complete.json';
14
- export const imageBatchCompletionPath = (args) => {
15
- const directories = new Set(args.outputPaths.map((outputPath) => path.dirname(outputPath)));
16
- const [only] = [...directories];
17
- const base = directories.size === 1 && only ? only : path.dirname(args.manifestPath);
18
- return path.join(base, IMAGE_BATCH_COMPLETION_FILENAME);
19
- };
20
- export const summarizeImageBatchCandidates = async (candidates) => Promise.all(candidates.map(async (candidate) => {
21
- const attemptFile = imageAttemptPath(candidate.outputPath);
22
- const [attempt, outputExists, bytes] = await Promise.all([
23
- readImageGenerationAttemptFile(attemptFile),
24
- imageGenerationPathExists(candidate.outputPath),
25
- imageGenerationFileBytes(candidate.outputPath),
26
- ]);
27
- const succeeded = outputExists && attempt?.status === 'succeeded';
28
- return {
29
- id: candidate.id,
30
- status: succeeded ? 'succeeded' : attempt?.status === 'failed' ? 'failed' : 'missing',
31
- outputPath: candidate.outputPath,
32
- attemptFile,
33
- ...(attempt?.outputSha256 ? { sha256: attempt.outputSha256 } : {}),
34
- ...(bytes === undefined ? {} : { bytes }),
35
- ...(candidate.idempotencyKey ? { idempotencyKey: candidate.idempotencyKey } : {}),
36
- ...(attempt?.error ? { error: attempt.error } : {}),
37
- };
38
- }));
39
- export const writeImageBatchCompletion = async (file, completion) => {
40
- await mkdir(path.dirname(file), { recursive: true });
41
- const temporary = `${file}.${randomUUID()}.tmp`;
42
- try {
43
- await writeFile(temporary, `${JSON.stringify(completion, null, 2)}\n`, {
44
- encoding: 'utf8',
45
- flag: 'wx',
46
- mode: 0o600,
47
- });
48
- await rename(temporary, file);
49
- }
50
- finally {
51
- await rm(temporary, { force: true });
52
- }
53
- };
54
- //# sourceMappingURL=image-generation-completion.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-generation-completion.js","sourceRoot":"","sources":["../src/image-generation-completion.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export declare const imageGenerationProviderRequestId: (error: unknown) => string | undefined;
2
- export declare const imageGenerationErrorMessage: (error: unknown) => string;
3
- //# sourceMappingURL=image-generation-error.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-generation-error.d.ts","sourceRoot":"","sources":["../src/image-generation-error.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,gCAAgC,GAAI,OAAO,OAAO,KAAG,MAAM,GAAG,SAY1E,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,OAAO,OAAO,KAAG,MAG5D,CAAC"}
@@ -1,30 +0,0 @@
1
- const PROVIDER_REQUEST_ID_KEYS = ['requestID', 'request_id'];
2
- const OPENAI_API_KEY = /\bsk-(?:[A-Za-z0-9_*.-]*[A-Za-z0-9_*])[A-Za-z0-9_*.-]*\b/gu;
3
- const normalizedEvidenceString = (value) => {
4
- if (typeof value !== 'string')
5
- return undefined;
6
- const normalized = value.trim();
7
- if (!normalized || normalized.length > 512 || /[\u0000-\u001f\u007f]/u.test(normalized))
8
- return undefined;
9
- return normalized;
10
- };
11
- export const imageGenerationProviderRequestId = (error) => {
12
- if (!error || typeof error !== 'object')
13
- return undefined;
14
- const record = error;
15
- for (const key of PROVIDER_REQUEST_ID_KEYS) {
16
- const requestId = normalizedEvidenceString(record[key]);
17
- if (requestId)
18
- return requestId;
19
- }
20
- const headers = record.headers;
21
- if (headers instanceof Headers) {
22
- return normalizedEvidenceString(headers.get('x-request-id'));
23
- }
24
- return undefined;
25
- };
26
- export const imageGenerationErrorMessage = (error) => {
27
- const message = error instanceof Error ? error.message : String(error);
28
- return message.replace(OPENAI_API_KEY, '[REDACTED_OPENAI_API_KEY]');
29
- };
30
- //# sourceMappingURL=image-generation-error.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-generation-error.js","sourceRoot":"","sources":["../src/image-generation-error.ts"],"names":[],"mappings":"AAAA,MAAM,wBAAwB,GAAG,CAAC,WAAW,EAAE,YAAY,CAAU,CAAC;AACtE,MAAM,cAAc,GAAG,4DAA4D,CAAC;AAEpF,MAAM,wBAAwB,GAAG,CAAC,KAAc,EAAsB,EAAE;IACtE,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,GAAG,IAAI,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1G,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,KAAc,EAAsB,EAAE;IACrF,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,KAAK,MAAM,GAAG,IAAI,wBAAwB,EAAE,CAAC;QAC3C,MAAM,SAAS,GAAG,wBAAwB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;IAClC,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC/B,IAAI,OAAO,YAAY,OAAO,EAAE,CAAC;QAC/B,OAAO,wBAAwB,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,KAAc,EAAU,EAAE;IACpE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,2BAA2B,CAAC,CAAC;AACtE,CAAC,CAAC"}
@@ -1,43 +0,0 @@
1
- import type { ImageGenerationUsageEvidence } from './image-generation-usage.js';
2
- export type ImageGenerationAttempt = {
3
- schemaVersion: 4;
4
- status: 'prepared' | 'dispatched' | 'succeeded' | 'failed';
5
- idempotencyKey: string;
6
- provider: 'codex' | 'openai';
7
- model: 'codex-gpt-image-2' | 'gpt-image-2';
8
- providerIdempotencyEnforced: boolean;
9
- providerEvidence: {
10
- codexVersion?: string;
11
- keySource?: 'process' | 'project-env';
12
- };
13
- prompt: string;
14
- promptSource: {
15
- kind: 'inline';
16
- } | {
17
- kind: 'file';
18
- path: string;
19
- };
20
- promptSha256: string;
21
- reference: {
22
- path: string;
23
- sha256: string;
24
- };
25
- referenceMode: 'inspiration' | 'preserve-structure';
26
- outputPath: string;
27
- preparedAt: string;
28
- batch?: {
29
- candidateId: string;
30
- manifestPath: string;
31
- manifestSha256: string;
32
- };
33
- dispatchedAt?: string;
34
- providerStartedAt?: string;
35
- completedAt?: string;
36
- providerRequestId?: string;
37
- outputSha256?: string;
38
- usage?: ImageGenerationUsageEvidence;
39
- error?: string;
40
- };
41
- export declare const imageAttemptPath: (outputPath: string) => string;
42
- export declare const writeImageGenerationAttempt: (filePath: string, attempt: ImageGenerationAttempt, exclusive?: boolean) => Promise<void>;
43
- //# sourceMappingURL=image-generation-evidence.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-generation-evidence.d.ts","sourceRoot":"","sources":["../src/image-generation-evidence.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAEhF,MAAM,MAAM,sBAAsB,GAAG;IACnC,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC7B,KAAK,EAAE,mBAAmB,GAAG,aAAa,CAAC;IAC3C,2BAA2B,EAAE,OAAO,CAAC;IACrC,gBAAgB,EAAE;QAChB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;KACvC,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,aAAa,EAAE,aAAa,GAAG,oBAAoB,CAAC;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,4BAA4B,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,YAAY,MAAM,KAAG,MAAsC,CAAC;AAE7F,eAAO,MAAM,2BAA2B,GACtC,UAAU,MAAM,EAChB,SAAS,sBAAsB,EAC/B,mBAAiB,KAChB,OAAO,CAAC,IAAI,CAqBd,CAAC"}
@@ -1,28 +0,0 @@
1
- import { randomUUID } from 'node:crypto';
2
- import { mkdir, rename, rm, writeFile } from 'node:fs/promises';
3
- import path from 'node:path';
4
- export const imageAttemptPath = (outputPath) => `${outputPath}.attempt.json`;
5
- export const writeImageGenerationAttempt = async (filePath, attempt, exclusive = false) => {
6
- await mkdir(path.dirname(filePath), { recursive: true });
7
- if (exclusive) {
8
- await writeFile(filePath, `${JSON.stringify(attempt, null, 2)}\n`, {
9
- encoding: 'utf8',
10
- flag: 'wx',
11
- mode: 0o600,
12
- });
13
- return;
14
- }
15
- const temporary = `${filePath}.${randomUUID()}.tmp`;
16
- try {
17
- await writeFile(temporary, `${JSON.stringify(attempt, null, 2)}\n`, {
18
- encoding: 'utf8',
19
- flag: 'wx',
20
- mode: 0o600,
21
- });
22
- await rename(temporary, filePath);
23
- }
24
- finally {
25
- await rm(temporary, { force: true });
26
- }
27
- };
28
- //# sourceMappingURL=image-generation-evidence.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-generation-evidence.js","sourceRoot":"","sources":["../src/image-generation-evidence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,IAAI,MAAM,WAAW,CAAC;AAoC7B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,UAAkB,EAAU,EAAE,CAAC,GAAG,UAAU,eAAe,CAAC;AAE7F,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,EAC9C,QAAgB,EAChB,OAA+B,EAC/B,SAAS,GAAG,KAAK,EACF,EAAE;IACjB,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YACjE,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,QAAQ,IAAI,UAAU,EAAE,MAAM,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YAClE,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;AACH,CAAC,CAAC"}
@@ -1,3 +0,0 @@
1
- export declare const imageGenerationPathExists: (target: string) => Promise<boolean>;
2
- export declare const imageGenerationFileBytes: (target: string) => Promise<number | undefined>;
3
- //# sourceMappingURL=image-generation-fs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-generation-fs.d.ts","sourceRoot":"","sources":["../src/image-generation-fs.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,yBAAyB,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,OAAO,CAQ/E,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAOzF,CAAC"}
@@ -1,23 +0,0 @@
1
- import { lstat } from 'node:fs/promises';
2
- export const imageGenerationPathExists = async (target) => {
3
- try {
4
- await lstat(target);
5
- return true;
6
- }
7
- catch (error) {
8
- if (error.code === 'ENOENT')
9
- return false;
10
- throw error;
11
- }
12
- };
13
- export const imageGenerationFileBytes = async (target) => {
14
- try {
15
- return (await lstat(target)).size;
16
- }
17
- catch (error) {
18
- if (error.code === 'ENOENT')
19
- return undefined;
20
- throw error;
21
- }
22
- };
23
- //# sourceMappingURL=image-generation-fs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-generation-fs.js","sourceRoot":"","sources":["../src/image-generation-fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,EAAE,MAAc,EAAoB,EAAE;IAClF,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACrE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAAE,MAAc,EAA+B,EAAE;IAC5F,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACzE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC"}
@@ -1,3 +0,0 @@
1
- export declare const referenceImageDataUrl: (bytes: Uint8Array, filePath: string) => Promise<string>;
2
- export declare const generatedPngBytes: (result: string) => Promise<Uint8Array>;
3
- //# sourceMappingURL=image-generation-output.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-generation-output.d.ts","sourceRoot":"","sources":["../src/image-generation-output.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,qBAAqB,GAChC,OAAO,UAAU,EACjB,UAAU,MAAM,KACf,OAAO,CAAC,MAAM,CAYhB,CAAC;AAgBF,eAAO,MAAM,iBAAiB,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,UAAU,CAe1E,CAAC"}
@@ -1,51 +0,0 @@
1
- import sharp from 'sharp';
2
- const supportedMediaType = (format) => {
3
- if (format === 'png')
4
- return 'image/png';
5
- if (format === 'jpeg')
6
- return 'image/jpeg';
7
- if (format === 'webp')
8
- return 'image/webp';
9
- return null;
10
- };
11
- export const referenceImageDataUrl = async (bytes, filePath) => {
12
- try {
13
- const metadata = await sharp(bytes, { failOn: 'error' }).metadata();
14
- const mediaType = supportedMediaType(metadata.format);
15
- if (!mediaType)
16
- throw new Error(`unsupported image format ${String(metadata.format)}`);
17
- return `data:${mediaType};base64,${Buffer.from(bytes).toString('base64')}`;
18
- }
19
- catch (error) {
20
- throw new Error(`Reference image must be a decodable PNG, JPEG, or WebP: ${filePath}`, { cause: error });
21
- }
22
- };
23
- const decodeProviderResult = async (result) => {
24
- if (/^https?:\/\//iu.test(result)) {
25
- const response = await fetch(result);
26
- if (!response.ok) {
27
- throw new Error(`Generated image download failed with HTTP ${response.status}`);
28
- }
29
- return new Uint8Array(await response.arrayBuffer());
30
- }
31
- const dataUrl = result.match(/^data:image\/(?:png|jpeg|webp);base64,(.+)$/isu);
32
- const bytes = new Uint8Array(Buffer.from(dataUrl?.[1] ?? result, 'base64'));
33
- if (bytes.byteLength === 0)
34
- throw new Error('Image provider returned an empty image');
35
- return bytes;
36
- };
37
- export const generatedPngBytes = async (result) => {
38
- const bytes = await decodeProviderResult(result);
39
- try {
40
- const image = sharp(bytes, { failOn: 'error' });
41
- const metadata = await image.metadata();
42
- if (!supportedMediaType(metadata.format)) {
43
- throw new Error(`unsupported image format ${String(metadata.format)}`);
44
- }
45
- return new Uint8Array(await image.png().toBuffer());
46
- }
47
- catch (error) {
48
- throw new Error('Image provider returned an undecodable PNG, JPEG, or WebP image', { cause: error });
49
- }
50
- };
51
- //# sourceMappingURL=image-generation-output.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-generation-output.js","sourceRoot":"","sources":["../src/image-generation-output.ts"],"names":[],"mappings":"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"}
@@ -1,43 +0,0 @@
1
- import type { ImageGenerationAttempt } from './image-generation-evidence.js';
2
- import { type ImageGenerationStagedPaths } from './image-generation-staging.js';
3
- import type { ImageGenerationProvider } from './image-provider-preflight.js';
4
- export { imageGenerationPathExists } from './image-generation-fs.js';
5
- export declare const IMAGE_GENERATION_ASPECTS: readonly ["landscape", "portrait", "square"];
6
- export type ImageGenerationAspect = (typeof IMAGE_GENERATION_ASPECTS)[number];
7
- export declare const IMAGE_GENERATION_REFERENCE_MODES: readonly ["inspiration", "preserve-structure"];
8
- export type ImageGenerationReferenceMode = (typeof IMAGE_GENERATION_REFERENCE_MODES)[number];
9
- export declare const isImageGenerationAspect: (value: unknown) => value is ImageGenerationAspect;
10
- export declare const isImageGenerationReferenceMode: (value: unknown) => value is ImageGenerationReferenceMode;
11
- export declare const imageGenerationSha256: (value: Uint8Array | string) => string;
12
- export type ImageGenerationRequest = {
13
- candidateId?: string;
14
- prompt: string;
15
- promptSource: ImageGenerationAttempt['promptSource'];
16
- referencePath: string;
17
- outputPath: string;
18
- projectRoot: string;
19
- provider: ImageGenerationProvider;
20
- aspect: ImageGenerationAspect;
21
- referenceMode: ImageGenerationReferenceMode;
22
- idempotencyKey: string;
23
- };
24
- export type PreparedImageGenerationRequest = ImageGenerationRequest & ImageGenerationStagedPaths & {
25
- attemptFile: string;
26
- promptSha256: string;
27
- reference: {
28
- path: string;
29
- sha256: string;
30
- dataUrl: string;
31
- };
32
- };
33
- export declare const prepareImageGenerationRequest: (request: ImageGenerationRequest, options?: {
34
- /**
35
- * `dispatch` refuses whenever any evidence of a previous attempt exists,
36
- * which is what keeps a plain re-run from buying the same candidate twice.
37
- * `resume` skips those refusals because the resume planner has already
38
- * classified this candidate from that same evidence and proved either that
39
- * nothing was billed or that the provider will honour the recorded key.
40
- */
41
- mode?: "dispatch" | "resume";
42
- }) => Promise<PreparedImageGenerationRequest>;
43
- //# sourceMappingURL=image-generation-request.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-generation-request.d.ts","sourceRoot":"","sources":["../src/image-generation-request.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAI7E,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAE7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAErE,eAAO,MAAM,wBAAwB,8CAA+C,CAAC;AACrF,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC9E,eAAO,MAAM,gCAAgC,gDAAiD,CAAC;AAC/F,MAAM,MAAM,4BAA4B,GAAG,CAAC,OAAO,gCAAgC,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7F,eAAO,MAAM,uBAAuB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,qBAGjE,CAAC;AAEF,eAAO,MAAM,8BAA8B,GACzC,OAAO,OAAO,KACb,KAAK,IAAI,4BAGX,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,OAAO,UAAU,GAAG,MAAM,KAAG,MAElE,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,sBAAsB,CAAC,cAAc,CAAC,CAAC;IACrD,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,uBAAuB,CAAC;IAClC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,aAAa,EAAE,4BAA4B,CAAC;IAC5C,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG,sBAAsB,GAAG,0BAA0B,GAAG;IACjG,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,SAAS,sBAAsB,EAC/B,UAAS;IACP;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;CACzB,KACL,OAAO,CAAC,8BAA8B,CAsCxC,CAAC"}
@@ -1,52 +0,0 @@
1
- import { createHash } from 'node:crypto';
2
- import { readFile } from 'node:fs/promises';
3
- import path from 'node:path';
4
- import { prepareOutputFile } from './cli-output-paths.js';
5
- import { imageAttemptPath } from './image-generation-evidence.js';
6
- import { imageGenerationPathExists } from './image-generation-fs.js';
7
- import { referenceImageDataUrl } from './image-generation-output.js';
8
- import { ensureImageGenerationStaging, imageGenerationStagedPaths, } from './image-generation-staging.js';
9
- export { imageGenerationPathExists } from './image-generation-fs.js';
10
- export const IMAGE_GENERATION_ASPECTS = ['landscape', 'portrait', 'square'];
11
- export const IMAGE_GENERATION_REFERENCE_MODES = ['inspiration', 'preserve-structure'];
12
- export const isImageGenerationAspect = (value) => (typeof value === 'string'
13
- && IMAGE_GENERATION_ASPECTS.includes(value));
14
- export const isImageGenerationReferenceMode = (value) => (typeof value === 'string'
15
- && IMAGE_GENERATION_REFERENCE_MODES.includes(value));
16
- export const imageGenerationSha256 = (value) => (createHash('sha256').update(value).digest('hex'));
17
- export const prepareImageGenerationRequest = async (request, options = {}) => {
18
- if (path.extname(request.outputPath).toLowerCase() !== '.png') {
19
- throw new Error('Image output must end in .png because image generation always writes PNG bytes');
20
- }
21
- const attemptFile = imageAttemptPath(request.outputPath);
22
- const staged = imageGenerationStagedPaths(request.outputPath);
23
- if (options.mode !== 'resume') {
24
- if (await imageGenerationPathExists(request.outputPath)) {
25
- throw new Error(`Refusing to dispatch because output already exists at ${request.outputPath}`);
26
- }
27
- if (await imageGenerationPathExists(attemptFile)) {
28
- throw new Error(`Image attempt evidence already exists at ${attemptFile}. Refusing to redispatch an`
29
- + ' ambiguous or completed request; inspect it and use a new output/idempotency key.');
30
- }
31
- if (await imageGenerationPathExists(staged.stagedAttemptFile)) {
32
- throw new Error(`Image attempt evidence already exists at ${staged.stagedAttemptFile}. Refusing to`
33
- + ' redispatch an ambiguous or in-flight request; inspect it and either resume the batch'
34
- + ' or use a new output/idempotency key.');
35
- }
36
- }
37
- await prepareOutputFile(request.outputPath);
38
- await ensureImageGenerationStaging(request.outputPath);
39
- const referenceBytes = new Uint8Array(await readFile(request.referencePath));
40
- return {
41
- ...request,
42
- ...staged,
43
- attemptFile,
44
- promptSha256: imageGenerationSha256(request.prompt),
45
- reference: {
46
- path: request.referencePath,
47
- sha256: imageGenerationSha256(referenceBytes),
48
- dataUrl: await referenceImageDataUrl(referenceBytes, request.referencePath),
49
- },
50
- };
51
- };
52
- //# sourceMappingURL=image-generation-request.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-generation-request.js","sourceRoot":"","sources":["../src/image-generation-request.ts"],"names":[],"mappings":"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"}