@12ui/design 0.2.26 → 0.2.28

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 (361) hide show
  1. package/README.md +72 -87
  2. package/SKILL.md +5 -5
  3. package/dist/branch-client.d.ts +7 -0
  4. package/dist/branch-client.d.ts.map +1 -1
  5. package/dist/branch-client.js +1 -0
  6. package/dist/branch-client.js.map +1 -1
  7. package/dist/branch-completion.d.ts +8 -0
  8. package/dist/branch-completion.d.ts.map +1 -1
  9. package/dist/branch-completion.js +84 -16
  10. package/dist/branch-completion.js.map +1 -1
  11. package/dist/branch-execution.d.ts +8 -0
  12. package/dist/branch-execution.d.ts.map +1 -1
  13. package/dist/branch-execution.js +62 -11
  14. package/dist/branch-execution.js.map +1 -1
  15. package/dist/branch-identity.d.ts +10 -4
  16. package/dist/branch-identity.d.ts.map +1 -1
  17. package/dist/branch-identity.js +9 -6
  18. package/dist/branch-identity.js.map +1 -1
  19. package/dist/branch-page-conversion.d.ts +14 -8
  20. package/dist/branch-page-conversion.d.ts.map +1 -1
  21. package/dist/branch-page-conversion.js +32 -15
  22. package/dist/branch-page-conversion.js.map +1 -1
  23. package/dist/branch-page-packaging.d.ts +31 -0
  24. package/dist/branch-page-packaging.d.ts.map +1 -0
  25. package/dist/branch-page-packaging.js +86 -0
  26. package/dist/branch-page-packaging.js.map +1 -0
  27. package/dist/branch-plan.d.ts +44 -0
  28. package/dist/branch-plan.d.ts.map +1 -1
  29. package/dist/branch-plan.js +89 -18
  30. package/dist/branch-plan.js.map +1 -1
  31. package/dist/branch-progress.d.ts +22 -0
  32. package/dist/branch-progress.d.ts.map +1 -1
  33. package/dist/branch-progress.js +46 -8
  34. package/dist/branch-progress.js.map +1 -1
  35. package/dist/branch-run-record.d.ts +36 -1
  36. package/dist/branch-run-record.d.ts.map +1 -1
  37. package/dist/branch-run-record.js.map +1 -1
  38. package/dist/branch-status.d.ts +2 -0
  39. package/dist/branch-status.d.ts.map +1 -1
  40. package/dist/branch-status.js +60 -15
  41. package/dist/branch-status.js.map +1 -1
  42. package/dist/branch-winner.d.ts +13 -15
  43. package/dist/branch-winner.d.ts.map +1 -1
  44. package/dist/branch-winner.js +25 -77
  45. package/dist/branch-winner.js.map +1 -1
  46. package/dist/cli-auth-command.d.ts.map +1 -1
  47. package/dist/cli-auth-command.js +5 -0
  48. package/dist/cli-auth-command.js.map +1 -1
  49. package/dist/cli-auth-onboarding.d.ts +12 -0
  50. package/dist/cli-auth-onboarding.d.ts.map +1 -0
  51. package/dist/cli-auth-onboarding.js +21 -0
  52. package/dist/cli-auth-onboarding.js.map +1 -0
  53. package/dist/cli-branch-command.d.ts +14 -19
  54. package/dist/cli-branch-command.d.ts.map +1 -1
  55. package/dist/cli-branch-command.js +207 -137
  56. package/dist/cli-branch-command.js.map +1 -1
  57. package/dist/cli-capabilities.d.ts +10 -51
  58. package/dist/cli-capabilities.d.ts.map +1 -1
  59. package/dist/cli-capabilities.js +13 -26
  60. package/dist/cli-capabilities.js.map +1 -1
  61. package/dist/cli-cli-command.d.ts +3 -0
  62. package/dist/cli-cli-command.d.ts.map +1 -1
  63. package/dist/cli-cli-command.js +15 -3
  64. package/dist/cli-cli-command.js.map +1 -1
  65. package/dist/cli-conversion-derivation.d.ts +30 -0
  66. package/dist/cli-conversion-derivation.d.ts.map +1 -0
  67. package/dist/{cli-export-command.js → cli-conversion-derivation.js} +178 -110
  68. package/dist/cli-conversion-derivation.js.map +1 -0
  69. package/dist/cli-conversion-output-directory.d.ts +5 -0
  70. package/dist/cli-conversion-output-directory.d.ts.map +1 -0
  71. package/dist/{cli-export-output-directory.js → cli-conversion-output-directory.js} +10 -10
  72. package/dist/cli-conversion-output-directory.js.map +1 -0
  73. package/dist/cli-convert-command.d.ts +9 -0
  74. package/dist/cli-convert-command.d.ts.map +1 -1
  75. package/dist/cli-convert-command.js +528 -158
  76. package/dist/cli-convert-command.js.map +1 -1
  77. package/dist/cli-corpus-command.d.ts.map +1 -1
  78. package/dist/cli-corpus-command.js +77 -10
  79. package/dist/cli-corpus-command.js.map +1 -1
  80. package/dist/cli-corpus-reference-downloads.d.ts +5 -0
  81. package/dist/cli-corpus-reference-downloads.d.ts.map +1 -1
  82. package/dist/cli-corpus-reference-downloads.js +18 -7
  83. package/dist/cli-corpus-reference-downloads.js.map +1 -1
  84. package/dist/cli-corpus-run.d.ts +9 -0
  85. package/dist/cli-corpus-run.d.ts.map +1 -1
  86. package/dist/cli-corpus-run.js +18 -0
  87. package/dist/cli-corpus-run.js.map +1 -1
  88. package/dist/cli-detach.d.ts +12 -4
  89. package/dist/cli-detach.d.ts.map +1 -1
  90. package/dist/cli-detach.js +49 -17
  91. package/dist/cli-detach.js.map +1 -1
  92. package/dist/cli-draft-command.d.ts +44 -61
  93. package/dist/cli-draft-command.d.ts.map +1 -1
  94. package/dist/cli-draft-command.js +307 -180
  95. package/dist/cli-draft-command.js.map +1 -1
  96. package/dist/cli-help/conversion.d.ts +30 -0
  97. package/dist/cli-help/conversion.d.ts.map +1 -0
  98. package/dist/cli-help/conversion.js +55 -0
  99. package/dist/cli-help/conversion.js.map +1 -0
  100. package/dist/cli-help/design.d.ts +74 -0
  101. package/dist/cli-help/design.d.ts.map +1 -0
  102. package/dist/cli-help/design.js +131 -0
  103. package/dist/cli-help/design.js.map +1 -0
  104. package/dist/cli-help/index.d.ts +224 -0
  105. package/dist/cli-help/index.d.ts.map +1 -0
  106. package/dist/cli-help/index.js +32 -0
  107. package/dist/cli-help/index.js.map +1 -0
  108. package/dist/cli-help/meta.d.ts +24 -0
  109. package/dist/cli-help/meta.d.ts.map +1 -0
  110. package/dist/cli-help/meta.js +30 -0
  111. package/dist/cli-help/meta.js.map +1 -0
  112. package/dist/cli-help/render.d.ts +4 -0
  113. package/dist/cli-help/render.d.ts.map +1 -0
  114. package/dist/cli-help/render.js +28 -0
  115. package/dist/cli-help/render.js.map +1 -0
  116. package/dist/cli-help/setup.d.ts +93 -0
  117. package/dist/cli-help/setup.d.ts.map +1 -0
  118. package/dist/cli-help/setup.js +142 -0
  119. package/dist/cli-help/setup.js.map +1 -0
  120. package/dist/cli-help/types.d.ts +10 -0
  121. package/dist/cli-help/types.d.ts.map +1 -0
  122. package/dist/cli-help/types.js +2 -0
  123. package/dist/cli-help/types.js.map +1 -0
  124. package/dist/cli-next-command.d.ts +11 -8
  125. package/dist/cli-next-command.d.ts.map +1 -1
  126. package/dist/cli-next-command.js +288 -88
  127. package/dist/cli-next-command.js.map +1 -1
  128. package/dist/cli-output-paths.d.ts +2 -23
  129. package/dist/cli-output-paths.d.ts.map +1 -1
  130. package/dist/cli-output-paths.js +2 -36
  131. package/dist/cli-output-paths.js.map +1 -1
  132. package/dist/cli-package-command.d.ts +1 -0
  133. package/dist/cli-package-command.d.ts.map +1 -1
  134. package/dist/cli-package-command.js +107 -34
  135. package/dist/cli-package-command.js.map +1 -1
  136. package/dist/cli-pending-auth.d.ts +20 -0
  137. package/dist/cli-pending-auth.d.ts.map +1 -0
  138. package/dist/cli-pending-auth.js +160 -0
  139. package/dist/cli-pending-auth.js.map +1 -0
  140. package/dist/cli-progress.d.ts +256 -75
  141. package/dist/cli-progress.d.ts.map +1 -1
  142. package/dist/cli-progress.js +425 -98
  143. package/dist/cli-progress.js.map +1 -1
  144. package/dist/cli-run.d.ts +2 -0
  145. package/dist/cli-run.d.ts.map +1 -1
  146. package/dist/cli-run.js +56 -75
  147. package/dist/cli-run.js.map +1 -1
  148. package/dist/cli-skill-command.d.ts +3 -0
  149. package/dist/cli-skill-command.d.ts.map +1 -1
  150. package/dist/cli-skill-command.js +26 -3
  151. package/dist/cli-skill-command.js.map +1 -1
  152. package/dist/cli-usage.d.ts +17 -8
  153. package/dist/cli-usage.d.ts.map +1 -1
  154. package/dist/cli-usage.js +55 -40
  155. package/dist/cli-usage.js.map +1 -1
  156. package/dist/config.d.ts +1 -0
  157. package/dist/config.d.ts.map +1 -1
  158. package/dist/config.js +8 -2
  159. package/dist/config.js.map +1 -1
  160. package/dist/conversion-client.d.ts +4 -0
  161. package/dist/conversion-client.d.ts.map +1 -1
  162. package/dist/conversion-client.js +23 -3
  163. package/dist/conversion-client.js.map +1 -1
  164. package/dist/conversion-outputs.d.ts +11 -0
  165. package/dist/conversion-outputs.d.ts.map +1 -1
  166. package/dist/conversion-outputs.js +13 -1
  167. package/dist/conversion-outputs.js.map +1 -1
  168. package/dist/conversion-receipt.d.ts +1 -1
  169. package/dist/conversion-receipt.js +1 -1
  170. package/dist/conversion-recovery.d.ts +20 -0
  171. package/dist/conversion-recovery.d.ts.map +1 -0
  172. package/dist/conversion-recovery.js +61 -0
  173. package/dist/conversion-recovery.js.map +1 -0
  174. package/dist/conversion-status-contract.js +1 -1
  175. package/dist/conversion-status-contract.js.map +1 -1
  176. package/dist/credential-setup.d.ts +9 -1
  177. package/dist/credential-setup.d.ts.map +1 -1
  178. package/dist/credential-setup.js +13 -1
  179. package/dist/credential-setup.js.map +1 -1
  180. package/dist/draft-adoption.d.ts +9 -3
  181. package/dist/draft-adoption.d.ts.map +1 -1
  182. package/dist/draft-adoption.js +26 -41
  183. package/dist/draft-adoption.js.map +1 -1
  184. package/dist/draft-identity.d.ts +9 -12
  185. package/dist/draft-identity.d.ts.map +1 -1
  186. package/dist/draft-identity.js +0 -0
  187. package/dist/draft-identity.js.map +1 -1
  188. package/dist/draft-run.d.ts +9 -19
  189. package/dist/draft-run.d.ts.map +1 -1
  190. package/dist/draft-run.js +67 -95
  191. package/dist/draft-run.js.map +1 -1
  192. package/dist/draft-workspace.d.ts +26 -18
  193. package/dist/draft-workspace.d.ts.map +1 -1
  194. package/dist/draft-workspace.js +16 -5
  195. package/dist/draft-workspace.js.map +1 -1
  196. package/dist/hosted-draft-identity.d.ts +20 -0
  197. package/dist/hosted-draft-identity.d.ts.map +1 -0
  198. package/dist/hosted-draft-identity.js +30 -0
  199. package/dist/hosted-draft-identity.js.map +1 -0
  200. package/dist/hosted-draft-run.d.ts +60 -0
  201. package/dist/hosted-draft-run.d.ts.map +1 -0
  202. package/dist/hosted-draft-run.js +97 -0
  203. package/dist/hosted-draft-run.js.map +1 -0
  204. package/dist/legacy-codex-cleanup.d.ts +13 -0
  205. package/dist/legacy-codex-cleanup.d.ts.map +1 -1
  206. package/dist/legacy-codex-cleanup.js +83 -0
  207. package/dist/legacy-codex-cleanup.js.map +1 -1
  208. package/dist/legacy-skill-catalog.d.ts +2 -2
  209. package/dist/legacy-skill-catalog.d.ts.map +1 -1
  210. package/dist/legacy-skill-catalog.js +76 -5
  211. package/dist/legacy-skill-catalog.js.map +1 -1
  212. package/dist/login-auth.d.ts +38 -0
  213. package/dist/login-auth.d.ts.map +1 -1
  214. package/dist/login-auth.js +67 -16
  215. package/dist/login-auth.js.map +1 -1
  216. package/dist/mcp-tool-definitions.js +1 -1
  217. package/dist/mcp-tool-definitions.js.map +1 -1
  218. package/dist/next-target.d.ts +1 -4
  219. package/dist/next-target.d.ts.map +1 -1
  220. package/dist/next-target.js +5 -9
  221. package/dist/next-target.js.map +1 -1
  222. package/dist/next-wait-lease.d.ts +17 -0
  223. package/dist/next-wait-lease.d.ts.map +1 -0
  224. package/dist/next-wait-lease.js +92 -0
  225. package/dist/next-wait-lease.js.map +1 -0
  226. package/dist/operation-poll-policy.d.ts +89 -0
  227. package/dist/operation-poll-policy.d.ts.map +1 -0
  228. package/dist/operation-poll-policy.js +99 -0
  229. package/dist/operation-poll-policy.js.map +1 -0
  230. package/dist/package-client.d.ts +30 -0
  231. package/dist/package-client.d.ts.map +1 -1
  232. package/dist/package-client.js +48 -9
  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 +43 -2
  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/run-journal-commands.d.ts.map +1 -1
  245. package/dist/run-journal-commands.js +30 -78
  246. package/dist/run-journal-commands.js.map +1 -1
  247. package/dist/run-journal-in-flight.d.ts +2 -2
  248. package/dist/run-journal-in-flight.d.ts.map +1 -1
  249. package/dist/run-journal-in-flight.js +0 -0
  250. package/dist/run-journal-in-flight.js.map +1 -1
  251. package/dist/skill-installer.d.ts +2 -2
  252. package/dist/skill-installer.d.ts.map +1 -1
  253. package/dist/skill-installer.js +2 -2
  254. package/dist/skill-installer.js.map +1 -1
  255. package/open-design.json +3 -3
  256. package/package.json +1 -1
  257. package/skills/12ui-design/SKILL.md +62 -0
  258. package/skills/12ui-design/agents/openai.yaml +6 -0
  259. package/skills/12ui-design/inspire.md +11 -0
  260. package/dist/cli-create-command.d.ts +0 -59
  261. package/dist/cli-create-command.d.ts.map +0 -1
  262. package/dist/cli-create-command.js +0 -354
  263. package/dist/cli-create-command.js.map +0 -1
  264. package/dist/cli-export-command.d.ts +0 -26
  265. package/dist/cli-export-command.d.ts.map +0 -1
  266. package/dist/cli-export-command.js.map +0 -1
  267. package/dist/cli-export-output-directory.d.ts +0 -5
  268. package/dist/cli-export-output-directory.d.ts.map +0 -1
  269. package/dist/cli-export-output-directory.js.map +0 -1
  270. package/dist/cli-image-batch-command.d.ts +0 -29
  271. package/dist/cli-image-batch-command.d.ts.map +0 -1
  272. package/dist/cli-image-batch-command.js +0 -236
  273. package/dist/cli-image-batch-command.js.map +0 -1
  274. package/dist/cli-image-batch-materialize.d.ts +0 -27
  275. package/dist/cli-image-batch-materialize.d.ts.map +0 -1
  276. package/dist/cli-image-batch-materialize.js +0 -41
  277. package/dist/cli-image-batch-materialize.js.map +0 -1
  278. package/dist/cli-image-batch-resume.d.ts +0 -36
  279. package/dist/cli-image-batch-resume.d.ts.map +0 -1
  280. package/dist/cli-image-batch-resume.js +0 -176
  281. package/dist/cli-image-batch-resume.js.map +0 -1
  282. package/dist/cli-image-command.d.ts +0 -10
  283. package/dist/cli-image-command.d.ts.map +0 -1
  284. package/dist/cli-image-command.js +0 -106
  285. package/dist/cli-image-command.js.map +0 -1
  286. package/dist/cli-select-command.d.ts +0 -16
  287. package/dist/cli-select-command.d.ts.map +0 -1
  288. package/dist/cli-select-command.js +0 -60
  289. package/dist/cli-select-command.js.map +0 -1
  290. package/dist/create-identity.d.ts +0 -25
  291. package/dist/create-identity.d.ts.map +0 -1
  292. package/dist/create-identity.js +0 -0
  293. package/dist/create-identity.js.map +0 -1
  294. package/dist/draft-prompts.d.ts +0 -35
  295. package/dist/draft-prompts.d.ts.map +0 -1
  296. package/dist/draft-prompts.js +0 -51
  297. package/dist/draft-prompts.js.map +0 -1
  298. package/dist/image-batch-status.d.ts +0 -42
  299. package/dist/image-batch-status.d.ts.map +0 -1
  300. package/dist/image-batch-status.js +0 -143
  301. package/dist/image-batch-status.js.map +0 -1
  302. package/dist/image-generation-batch-attempt.d.ts +0 -28
  303. package/dist/image-generation-batch-attempt.d.ts.map +0 -1
  304. package/dist/image-generation-batch-attempt.js +0 -48
  305. package/dist/image-generation-batch-attempt.js.map +0 -1
  306. package/dist/image-generation-batch-manifest.d.ts +0 -25
  307. package/dist/image-generation-batch-manifest.d.ts.map +0 -1
  308. package/dist/image-generation-batch-manifest.js +0 -97
  309. package/dist/image-generation-batch-manifest.js.map +0 -1
  310. package/dist/image-generation-completion.d.ts +0 -43
  311. package/dist/image-generation-completion.d.ts.map +0 -1
  312. package/dist/image-generation-completion.js +0 -54
  313. package/dist/image-generation-completion.js.map +0 -1
  314. package/dist/image-generation-error.d.ts +0 -3
  315. package/dist/image-generation-error.d.ts.map +0 -1
  316. package/dist/image-generation-error.js +0 -30
  317. package/dist/image-generation-error.js.map +0 -1
  318. package/dist/image-generation-evidence.d.ts +0 -43
  319. package/dist/image-generation-evidence.d.ts.map +0 -1
  320. package/dist/image-generation-evidence.js +0 -28
  321. package/dist/image-generation-evidence.js.map +0 -1
  322. package/dist/image-generation-fs.d.ts +0 -3
  323. package/dist/image-generation-fs.d.ts.map +0 -1
  324. package/dist/image-generation-fs.js +0 -23
  325. package/dist/image-generation-fs.js.map +0 -1
  326. package/dist/image-generation-output.d.ts +0 -3
  327. package/dist/image-generation-output.d.ts.map +0 -1
  328. package/dist/image-generation-output.js +0 -51
  329. package/dist/image-generation-output.js.map +0 -1
  330. package/dist/image-generation-request.d.ts +0 -43
  331. package/dist/image-generation-request.d.ts.map +0 -1
  332. package/dist/image-generation-request.js +0 -52
  333. package/dist/image-generation-request.js.map +0 -1
  334. package/dist/image-generation-resume.d.ts +0 -49
  335. package/dist/image-generation-resume.d.ts.map +0 -1
  336. package/dist/image-generation-resume.js +0 -96
  337. package/dist/image-generation-resume.js.map +0 -1
  338. package/dist/image-generation-run.d.ts +0 -46
  339. package/dist/image-generation-run.d.ts.map +0 -1
  340. package/dist/image-generation-run.js +0 -158
  341. package/dist/image-generation-run.js.map +0 -1
  342. package/dist/image-generation-staging.d.ts +0 -25
  343. package/dist/image-generation-staging.d.ts.map +0 -1
  344. package/dist/image-generation-staging.js +0 -80
  345. package/dist/image-generation-staging.js.map +0 -1
  346. package/dist/image-generation-usage.d.ts +0 -75
  347. package/dist/image-generation-usage.d.ts.map +0 -1
  348. package/dist/image-generation-usage.js +0 -219
  349. package/dist/image-generation-usage.js.map +0 -1
  350. package/dist/image-provider-preflight.d.ts +0 -21
  351. package/dist/image-provider-preflight.d.ts.map +0 -1
  352. package/dist/image-provider-preflight.js +0 -184
  353. package/dist/image-provider-preflight.js.map +0 -1
  354. package/dist/selection-record.d.ts +0 -97
  355. package/dist/selection-record.d.ts.map +0 -1
  356. package/dist/selection-record.js +0 -138
  357. package/dist/selection-record.js.map +0 -1
  358. package/skills/design/SKILL.md +0 -116
  359. package/skills/design/agents/openai.yaml +0 -8
  360. package/skills/design/assets/large-logo.svg +0 -3
  361. package/skills/design/assets/small-400px.png +0 -0
@@ -1,236 +0,0 @@
1
- import path from 'node:path';
2
- import { booleanFlag, stringFlag } from './cli-arguments.js';
3
- import { CliRefusal } from './cli-refusal.js';
4
- import { usageRefusal } from './cli-usage.js';
5
- import { OPERATION_DURATION_HINTS, formatDuration, nextActionLine, } from './cli-progress.js';
6
- import { summarizeImageBatchProgress } from './image-batch-status.js';
7
- import { materializeImageBatch, publishImageBatchCompletion, } from './cli-image-batch-materialize.js';
8
- import { describeBatchRecovery, neverDispatchedBatchMessage, resumeImageBatchCommand, } from './cli-image-batch-resume.js';
9
- import { imageBatchAttemptPath, readBatchAttempt, writeBatchAttempt, } from './image-generation-batch-attempt.js';
10
- import { readImageGenerationBatchManifest, resolveImageGenerationBatchRequests, } from './image-generation-batch-manifest.js';
11
- import { imageGenerationPathExists } from './image-generation-fs.js';
12
- import { batchWasNeverDispatched, classifyImageGenerationResume, resumeStateSummary, } from './image-generation-resume.js';
13
- import { dispatchImageGeneration, failImageGenerationBeforeDispatch, markImageGenerationDispatched, reserveImageGeneration, } from './image-generation-run.js';
14
- import { imageGenerationSha256, prepareImageGenerationRequest, } from './image-generation-request.js';
15
- import { summarizeImageGenerationUsage } from './image-generation-usage.js';
16
- import { preflightImageProvider } from './image-provider-preflight.js';
17
- const errorMessage = (error) => (error instanceof Error ? error.message : String(error));
18
- const failReserved = async (reserved, message) => {
19
- await Promise.allSettled(reserved.map((item) => failImageGenerationBeforeDispatch(item, message)));
20
- };
21
- const identities = (requests) => requests.map((request) => ({
22
- ...(request.candidateId ? { candidateId: request.candidateId } : {}),
23
- outputPath: request.outputPath,
24
- idempotencyKey: request.idempotencyKey,
25
- }));
26
- /**
27
- * Explain what the existing evidence permits instead of stopping at "evidence
28
- * exists". A refusal that names no recovery is what turned a finished batch
29
- * into a dead end for eleven benchmark runs.
30
- */
31
- const existingEvidenceRefusal = async (args) => {
32
- const states = await Promise.all(args.requests.map((request) => classifyImageGenerationResume({
33
- outputPath: request.outputPath,
34
- ...(request.candidateId ? { candidateId: request.candidateId } : {}),
35
- })));
36
- const summary = resumeStateSummary(states);
37
- const recoverable = summary.stageable + summary.redispatchable;
38
- const guidance = recoverable > 0
39
- ? `Re-run the same command with --resume to recover ${recoverable} candidate(s) with no new`
40
- + ' spend; it never re-buys a candidate.'
41
- : summary.unrecoverable > 0
42
- ? 'Nothing can be recovered without new spend; give the affected candidates a new output'
43
- + ' path and idempotency key if you accept buying them again.'
44
- : 'Every candidate is already on disk — read them rather than generating again.';
45
- return `Image batch attempt evidence already exists at ${args.batchAttemptFile}.`
46
- + ` ${describeBatchRecovery(states)}. ${guidance}`;
47
- };
48
- export const IMAGE_BATCH_HEARTBEAT_MS = 15_000;
49
- /**
50
- * The batch keeps its output directory empty until it is terminal, so silence
51
- * here is indistinguishable from death. A heartbeat reads the staging ledgers
52
- * and narrates what each candidate is doing, which is what stops a caller from
53
- * deciding the command hung and improvising around it.
54
- */
55
- export const startImageBatchHeartbeat = (args) => {
56
- if (args.quiet)
57
- return { stop: () => undefined };
58
- const write = args.write ?? ((line) => { process.stderr.write(`${line}\n`); });
59
- const startedAt = (args.now ?? Date.now)();
60
- const timer = setInterval(() => {
61
- void summarizeImageBatchProgress({ manifestPath: args.manifestPath })
62
- .then((report) => {
63
- const elapsed = formatDuration(((args.now ?? Date.now)() - startedAt) / 1000);
64
- write(`[${elapsed}] generate-batch: ${report.narrative}`);
65
- })
66
- .catch(() => undefined);
67
- }, args.intervalMs ?? IMAGE_BATCH_HEARTBEAT_MS);
68
- timer.unref?.();
69
- return { stop: () => clearInterval(timer) };
70
- };
71
- export const runImageBatchCommand = async (flags, dependencies = {}) => {
72
- const manifestFlag = stringFlag(flags, 'manifest')?.trim();
73
- if (!manifestFlag) {
74
- throw usageRefusal({
75
- reason: 'A batch generates the candidates one manifest declares, and --manifest was not given.',
76
- code: 'image_batch_usage',
77
- verb: ['image', 'generate-batch'],
78
- });
79
- }
80
- const manifestPath = path.resolve(manifestFlag);
81
- const batchAttemptFile = imageBatchAttemptPath(manifestPath);
82
- const resumeRequested = booleanFlag(flags, 'resume');
83
- const { manifest, source } = await readImageGenerationBatchManifest(manifestPath);
84
- const requests = resolveImageGenerationBatchRequests({ manifest, manifestPath });
85
- const manifestSha256 = imageGenerationSha256(source);
86
- const existingBatchAttempt = await readBatchAttempt(batchAttemptFile);
87
- // `--resume` reached for before the batch was ever dispatched. Answering with
88
- // a recovery report here is what turned an un-started batch into a believed
89
- // provider outage in 18 of 24 compliance runs, so this answers in a different
90
- // register entirely: nothing failed, and here is the command to run.
91
- if (resumeRequested && !(await imageGenerationPathExists(batchAttemptFile))) {
92
- const states = await Promise.all(requests.map((request) => classifyImageGenerationResume({
93
- outputPath: request.outputPath,
94
- ...(request.candidateId ? { candidateId: request.candidateId } : {}),
95
- })));
96
- if (batchWasNeverDispatched(states)) {
97
- throw new CliRefusal(neverDispatchedBatchMessage(manifestPath), 'image_batch_never_dispatched');
98
- }
99
- }
100
- if (await imageGenerationPathExists(batchAttemptFile)) {
101
- if (!resumeRequested) {
102
- throw new CliRefusal(await existingEvidenceRefusal({ batchAttemptFile, requests }), 'image_batch_evidence_exists');
103
- }
104
- if (!existingBatchAttempt) {
105
- throw new CliRefusal(`Image batch attempt evidence at ${batchAttemptFile} is unreadable, so no candidate can be`
106
- + ' proved unbilled. Inspect it before resuming.', 'image_batch_evidence_unreadable');
107
- }
108
- if (existingBatchAttempt.manifestSha256 !== manifestSha256) {
109
- throw new CliRefusal(`Refusing to resume: ${manifestPath} has changed since the batch was dispatched`
110
- + ` (${existingBatchAttempt.manifestSha256} then, ${manifestSha256} now). A resume must`
111
- + ' replay the same candidate identities.', 'image_batch_manifest_changed');
112
- }
113
- const resumed = await resumeImageBatchCommand({
114
- manifestPath,
115
- manifestSha256,
116
- batchAttemptFile,
117
- batchAttempt: existingBatchAttempt,
118
- requests,
119
- dependencies,
120
- });
121
- return { manifestPath, batchAttemptFile, completionPath: resumed.completionPath };
122
- }
123
- const prepared = await Promise.all(requests.map((request) => (prepareImageGenerationRequest(request))));
124
- const preflight = await (dependencies.preflight ?? preflightImageProvider)({
125
- provider: manifest.provider,
126
- projectRoot: prepared[0].projectRoot,
127
- });
128
- const attempt = {
129
- version: 2,
130
- status: 'prepared',
131
- manifestPath,
132
- manifestSha256,
133
- projectRoot: prepared[0].projectRoot,
134
- requestedProvider: manifest.provider,
135
- provider: preflight.provider,
136
- model: preflight.model,
137
- referenceMode: manifest.referenceMode,
138
- candidateIds: prepared.map((item) => item.candidateId),
139
- candidateAttemptFiles: prepared.map((item) => item.attemptFile),
140
- preparedAt: new Date().toISOString(),
141
- };
142
- await writeBatchAttempt(batchAttemptFile, attempt, true);
143
- const candidates = identities(prepared);
144
- const terminate = async (args) => {
145
- if (args.materialize)
146
- await materializeImageBatch(candidates);
147
- const { completionPath } = await publishImageBatchCompletion({
148
- manifestPath,
149
- manifestSha256,
150
- batchAttemptFile,
151
- provider: attempt.provider,
152
- model: attempt.model,
153
- resumed: false,
154
- status: args.status,
155
- candidates,
156
- });
157
- attempt.status = args.status;
158
- attempt.completedAt = new Date().toISOString();
159
- attempt.completionPath = completionPath;
160
- if (args.errors)
161
- attempt.errors = args.errors;
162
- await writeBatchAttempt(batchAttemptFile, attempt);
163
- return completionPath;
164
- };
165
- const reservations = await Promise.allSettled(prepared.map((request) => (reserveImageGeneration({
166
- request,
167
- preflight,
168
- batch: {
169
- candidateId: request.candidateId,
170
- manifestPath,
171
- manifestSha256,
172
- },
173
- }))));
174
- const reserved = reservations.flatMap((result) => (result.status === 'fulfilled' ? [result.value] : []));
175
- const reservationErrors = reservations.flatMap((result) => (result.status === 'rejected' ? [errorMessage(result.reason)] : []));
176
- if (reservationErrors.length > 0) {
177
- const message = 'Batch reservation failed before any provider request was started';
178
- await failReserved(reserved, message);
179
- const completionPath = await terminate({
180
- status: 'failed',
181
- errors: reservationErrors,
182
- materialize: false,
183
- });
184
- throw new AggregateError(reservationErrors, `${message}. Evidence: ${batchAttemptFile}. Completion sentinel: ${completionPath}`);
185
- }
186
- attempt.status = 'dispatched';
187
- attempt.dispatchedAt = new Date().toISOString();
188
- await writeBatchAttempt(batchAttemptFile, attempt);
189
- const marked = await Promise.allSettled(reserved.map((item) => markImageGenerationDispatched(item)));
190
- const markErrors = marked.flatMap((result) => (result.status === 'rejected' ? [errorMessage(result.reason)] : []));
191
- if (markErrors.length > 0) {
192
- const message = 'Batch evidence preparation failed before any provider request was started';
193
- await failReserved(reserved, message);
194
- const completionPath = await terminate({
195
- status: 'failed',
196
- errors: markErrors,
197
- materialize: false,
198
- });
199
- throw new AggregateError(markErrors, `${message}. Evidence: ${batchAttemptFile}. Completion sentinel: ${completionPath}`);
200
- }
201
- const quiet = booleanFlag(flags, 'quiet');
202
- if (!quiet) {
203
- process.stderr.write(`12ui image generate-batch — ${reserved.length} candidate(s) on ${attempt.provider},`
204
- + ` started concurrently and blocking until every one lands.\n`
205
- + `${nextActionLine({
206
- what: 'A batch of four candidates',
207
- typicalSeconds: OPERATION_DURATION_HINTS.imageBatch,
208
- statusCommand: `12ui next ${manifestPath}`,
209
- waitHint: 'or leave this command running, which is what --wait already does by default',
210
- })}\n`);
211
- }
212
- const heartbeat = startImageBatchHeartbeat({ manifestPath, quiet });
213
- const settled = await Promise.allSettled(reserved.map((item) => (dispatchImageGeneration(item, { generate: dependencies.generate })))).finally(() => { heartbeat.stop(); });
214
- const results = settled.flatMap((result) => (result.status === 'fulfilled' ? [result.value] : []));
215
- const errors = settled.flatMap((result) => (result.status === 'rejected' ? [errorMessage(result.reason)] : []));
216
- attempt.results = results;
217
- attempt.accounting = summarizeImageGenerationUsage(reserved.map((item) => item.attempt.usage), preflight.provider);
218
- if (errors.length > 0) {
219
- const completionPath = await terminate({ status: 'failed', errors, materialize: true });
220
- throw new AggregateError(errors, `Image batch finished with ${errors.length} failed candidate(s); no retries or provider`
221
- + ` fallback were attempted. Evidence: ${batchAttemptFile}.`
222
- + ` Completion sentinel: ${completionPath}`);
223
- }
224
- const completionPath = await terminate({ status: 'succeeded', materialize: true });
225
- console.log(JSON.stringify({
226
- provider: attempt.provider,
227
- model: attempt.model,
228
- manifestPath,
229
- batchAttemptFile,
230
- completionPath,
231
- accounting: attempt.accounting,
232
- candidates: results,
233
- }, null, 2));
234
- return { manifestPath, batchAttemptFile, completionPath };
235
- };
236
- //# sourceMappingURL=cli-image-batch-command.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-image-batch-command.js","sourceRoot":"","sources":["../src/cli-image-batch-command.ts"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- import { type ImageBatchCompletion } from './image-generation-completion.js';
2
- export type ImageBatchCandidateIdentity = {
3
- candidateId?: string;
4
- outputPath: string;
5
- idempotencyKey: string;
6
- };
7
- /**
8
- * Move every candidate the provider settled — succeeded or failed — out of the
9
- * hidden staging directory in one pass. Nothing is delivered mid-flight, so the
10
- * candidates directory goes from empty to complete rather than through a
11
- * half-written state that reads as failure.
12
- */
13
- export declare const materializeImageBatch: (candidates: readonly ImageBatchCandidateIdentity[]) => Promise<void>;
14
- export declare const publishImageBatchCompletion: (args: {
15
- manifestPath: string;
16
- manifestSha256: string;
17
- batchAttemptFile: string;
18
- provider: string;
19
- model: string;
20
- resumed: boolean;
21
- status: "succeeded" | "failed";
22
- candidates: readonly ImageBatchCandidateIdentity[];
23
- }) => Promise<{
24
- completionPath: string;
25
- completion: ImageBatchCompletion;
26
- }>;
27
- //# sourceMappingURL=cli-image-batch-materialize.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-image-batch-materialize.d.ts","sourceRoot":"","sources":["../src/cli-image-batch-materialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,kCAAkC,CAAC;AAG1C,MAAM,MAAM,2BAA2B,GAAG;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAMF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,YAAY,SAAS,2BAA2B,EAAE,KACjD,OAAO,CAAC,IAAI,CAId,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAU,MAAM;IACtD,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,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,UAAU,EAAE,SAAS,2BAA2B,EAAE,CAAC;CACpD,KAAG,OAAO,CAAC;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,oBAAoB,CAAA;CAAE,CA2BvE,CAAC"}
@@ -1,41 +0,0 @@
1
- import { imageBatchCompletionPath, summarizeImageBatchCandidates, writeImageBatchCompletion, } from './image-generation-completion.js';
2
- import { materializeImageGeneration } from './image-generation-staging.js';
3
- const identityId = (candidate, index) => (candidate.candidateId ?? String(index + 1));
4
- /**
5
- * Move every candidate the provider settled — succeeded or failed — out of the
6
- * hidden staging directory in one pass. Nothing is delivered mid-flight, so the
7
- * candidates directory goes from empty to complete rather than through a
8
- * half-written state that reads as failure.
9
- */
10
- export const materializeImageBatch = async (candidates) => {
11
- await Promise.all(candidates.map((candidate) => (materializeImageGeneration(candidate.outputPath))));
12
- };
13
- export const publishImageBatchCompletion = async (args) => {
14
- const completionPath = imageBatchCompletionPath({
15
- manifestPath: args.manifestPath,
16
- outputPaths: args.candidates.map((candidate) => candidate.outputPath),
17
- });
18
- const candidates = await summarizeImageBatchCandidates(args.candidates.map((candidate, index) => ({
19
- id: identityId(candidate, index),
20
- outputPath: candidate.outputPath,
21
- idempotencyKey: candidate.idempotencyKey,
22
- })));
23
- const completion = {
24
- version: 1,
25
- status: args.status,
26
- manifestPath: args.manifestPath,
27
- manifestSha256: args.manifestSha256,
28
- batchAttemptFile: args.batchAttemptFile,
29
- provider: args.provider,
30
- model: args.model,
31
- resumed: args.resumed,
32
- completedAt: new Date().toISOString(),
33
- candidateCount: candidates.length,
34
- succeededCount: candidates.filter((candidate) => candidate.status === 'succeeded').length,
35
- failedCount: candidates.filter((candidate) => candidate.status !== 'succeeded').length,
36
- candidates,
37
- };
38
- await writeImageBatchCompletion(completionPath, completion);
39
- return { completionPath, completion };
40
- };
41
- //# sourceMappingURL=cli-image-batch-materialize.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-image-batch-materialize.js","sourceRoot":"","sources":["../src/cli-image-batch-materialize.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,6BAA6B,EAC7B,yBAAyB,GAE1B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAQ3E,MAAM,UAAU,GAAG,CAAC,SAAsC,EAAE,KAAa,EAAU,EAAE,CAAC,CACpF,SAAS,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAC3C,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EACxC,UAAkD,EACnC,EAAE;IACjB,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAC9C,0BAA0B,CAAC,SAAS,CAAC,UAAU,CAAC,CACjD,CAAC,CAAC,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,EAAE,IASjD,EAAyE,EAAE;IAC1E,MAAM,cAAc,GAAG,wBAAwB,CAAC;QAC9C,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC;KACtE,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,MAAM,6BAA6B,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAChG,EAAE,EAAE,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC;QAChC,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,cAAc,EAAE,SAAS,CAAC,cAAc;KACzC,CAAC,CAAC,CAAC,CAAC;IACL,MAAM,UAAU,GAAyB;QACvC,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,cAAc,EAAE,UAAU,CAAC,MAAM;QACjC,cAAc,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM;QACzF,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM;QACtF,UAAU;KACX,CAAC;IACF,MAAM,yBAAyB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAC5D,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;AACxC,CAAC,CAAC"}
@@ -1,36 +0,0 @@
1
- import { ensembleImage } from '@just-every/ensemble';
2
- import { type ImageBatchAttempt } from './image-generation-batch-attempt.js';
3
- import type { ImageGenerationRequest } from './image-generation-request.js';
4
- import { type ImageGenerationResumeState } from './image-generation-resume.js';
5
- import { preflightImageProvider } from './image-provider-preflight.js';
6
- /**
7
- * THE redirect for a batch nobody has dispatched yet. It names the next command
8
- * and its duration, and it deliberately shares no vocabulary with the recovery
9
- * report — no counts, no "unrecoverable" — because the failure mode being fixed
10
- * here is a caller reading a recovery report as a provider outage.
11
- */
12
- export declare const neverDispatchedBatchMessage: (manifestPath: string) => string;
13
- export declare const describeBatchRecovery: (states: readonly ImageGenerationResumeState[]) => string;
14
- /**
15
- * Recover a batch whose candidates were dispatched but never delivered.
16
- *
17
- * Every candidate is classified from its own durable ledger entry first. Work
18
- * that was already bought is delivered from staging; work that provably was not
19
- * bought, or that the provider will return again for free under the recorded
20
- * idempotency key, is re-requested under that same identity. Anything else is
21
- * refused rather than bought a second time.
22
- */
23
- export declare const resumeImageBatchCommand: (args: {
24
- manifestPath: string;
25
- manifestSha256: string;
26
- batchAttemptFile: string;
27
- batchAttempt: ImageBatchAttempt;
28
- requests: ImageGenerationRequest[];
29
- dependencies: {
30
- generate?: typeof ensembleImage;
31
- preflight?: typeof preflightImageProvider;
32
- };
33
- }) => Promise<{
34
- completionPath: string;
35
- }>;
36
- //# sourceMappingURL=cli-image-batch-resume.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-image-batch-resume.d.ts","sourceRoot":"","sources":["../src/cli-image-batch-resume.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAOrD,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAE5E,OAAO,EAIL,KAAK,0BAA0B,EAChC,MAAM,8BAA8B,CAAC;AAStC,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAcvE;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,GAAI,cAAc,MAAM,KAAG,MAKlE,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,QAAQ,SAAS,0BAA0B,EAAE,KAC5C,MASF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,GAAU,MAAM;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,iBAAiB,CAAC;IAChC,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC,YAAY,EAAE;QACZ,QAAQ,CAAC,EAAE,OAAO,aAAa,CAAC;QAChC,SAAS,CAAC,EAAE,OAAO,sBAAsB,CAAC;KAC3C,CAAC;CACH,KAAG,OAAO,CAAC;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,CAsJrC,CAAC"}
@@ -1,176 +0,0 @@
1
- import { materializeImageBatch, publishImageBatchCompletion, } from './cli-image-batch-materialize.js';
2
- import { writeBatchAttempt, } from './image-generation-batch-attempt.js';
3
- import { prepareImageGenerationRequest } from './image-generation-request.js';
4
- import { classifyImageGenerationResume, describeResumeState, resumeStateSummary, } from './image-generation-resume.js';
5
- import { dispatchImageGeneration, markImageGenerationDispatched, resumeReservedImageGeneration, } from './image-generation-run.js';
6
- import { materializeImageGeneration } from './image-generation-staging.js';
7
- import { summarizeImageGenerationUsage } from './image-generation-usage.js';
8
- import { preflightImageProvider } from './image-provider-preflight.js';
9
- const errorMessage = (error) => (error instanceof Error ? error.message : String(error));
10
- const identities = (requests) => requests.map((request) => ({
11
- ...(request.candidateId ? { candidateId: request.candidateId } : {}),
12
- outputPath: request.outputPath,
13
- idempotencyKey: request.idempotencyKey,
14
- }));
15
- /**
16
- * THE redirect for a batch nobody has dispatched yet. It names the next command
17
- * and its duration, and it deliberately shares no vocabulary with the recovery
18
- * report — no counts, no "unrecoverable" — because the failure mode being fixed
19
- * here is a caller reading a recovery report as a provider outage.
20
- */
21
- export const neverDispatchedBatchMessage = (manifestPath) => (`This batch has never been dispatched — there is nothing to resume, and nothing has failed.`
22
- + ` Run \`12ui image generate-batch --manifest ${manifestPath}\` to dispatch it; it blocks for`
23
- + ' about 90 seconds and writes every candidate at once when it finishes.'
24
- + ' Use --resume only after a dispatch you watched start and lose its output.');
25
- export const describeBatchRecovery = (states) => {
26
- const summary = resumeStateSummary(states);
27
- const parts = [
28
- `${summary.materialized} already on disk`,
29
- `${summary.stageable} generated and awaiting delivery`,
30
- `${summary.redispatchable} recoverable without new spend`,
31
- `${summary.unrecoverable} unrecoverable`,
32
- ];
33
- return `${states.length} candidate(s): ${parts.join(', ')}`;
34
- };
35
- /**
36
- * Recover a batch whose candidates were dispatched but never delivered.
37
- *
38
- * Every candidate is classified from its own durable ledger entry first. Work
39
- * that was already bought is delivered from staging; work that provably was not
40
- * bought, or that the provider will return again for free under the recorded
41
- * idempotency key, is re-requested under that same identity. Anything else is
42
- * refused rather than bought a second time.
43
- */
44
- export const resumeImageBatchCommand = async (args) => {
45
- const { batchAttempt, batchAttemptFile, manifestPath, manifestSha256, requests } = args;
46
- const states = await Promise.all(requests.map((request) => classifyImageGenerationResume({
47
- outputPath: request.outputPath,
48
- ...(request.candidateId ? { candidateId: request.candidateId } : {}),
49
- })));
50
- const summary = resumeStateSummary(states);
51
- const candidates = identities(requests);
52
- if (summary.stageable === 0 && summary.redispatchable === 0 && summary.unrecoverable === 0) {
53
- // Nothing is outstanding. This is the state the eleven benchmark runs were
54
- // actually in when they gave up: the batch had finished. Republish the
55
- // sentinel so the caller can read what it already owns, then refuse — a
56
- // completed batch is never re-run, because that would be a second purchase.
57
- const { completionPath, completion } = await publishImageBatchCompletion({
58
- manifestPath,
59
- manifestSha256,
60
- batchAttemptFile,
61
- provider: batchAttempt.provider,
62
- model: batchAttempt.model,
63
- resumed: true,
64
- status: 'succeeded',
65
- candidates,
66
- });
67
- throw new Error(`Image batch already completed; every candidate is on disk and nothing can be resumed.`
68
- + ` Re-running it would be a second paid call. Candidates: ${completion.candidates
69
- .map((candidate) => `${candidate.id} ${candidate.outputPath}`
70
- + ` sha256=${candidate.sha256 ?? 'unknown'} bytes=${candidate.bytes ?? 0}`)
71
- .join('; ')}. Completion sentinel: ${completionPath}`);
72
- }
73
- const delivered = states.filter((state) => state.disposition === 'stageable');
74
- await Promise.all(delivered.map((state) => materializeImageGeneration(state.outputPath)));
75
- const redispatch = states.filter((state) => state.disposition === 'redispatchable');
76
- const results = [];
77
- const errors = [];
78
- if (redispatch.length > 0) {
79
- const outstanding = new Map(redispatch.map((state) => [state.outputPath, state]));
80
- const pending = requests.filter((request) => outstanding.has(request.outputPath));
81
- const preflight = await (args.dependencies.preflight ?? preflightImageProvider)({
82
- provider: batchAttempt.requestedProvider,
83
- projectRoot: batchAttempt.projectRoot,
84
- });
85
- if (preflight.provider !== batchAttempt.provider) {
86
- throw new Error(`Refusing to resume with ${preflight.provider} because the batch was dispatched to`
87
- + ` ${batchAttempt.provider}; switching providers after dispatch is never a resume.`);
88
- }
89
- const prepared = await Promise.all(pending.map((request) => (prepareImageGenerationRequest(request, { mode: 'resume' }))));
90
- const reserved = prepared.map((request) => resumeReservedImageGeneration({
91
- request,
92
- preflight,
93
- attempt: outstanding.get(request.outputPath)?.attempt ?? {
94
- schemaVersion: 4,
95
- status: 'prepared',
96
- idempotencyKey: request.idempotencyKey,
97
- provider: preflight.provider,
98
- model: preflight.model,
99
- providerIdempotencyEnforced: preflight.provider === 'openai',
100
- providerEvidence: preflight.provider === 'codex'
101
- ? { codexVersion: preflight.codexVersion }
102
- : { keySource: preflight.keySource },
103
- prompt: request.prompt,
104
- promptSource: request.promptSource,
105
- promptSha256: request.promptSha256,
106
- reference: { path: request.reference.path, sha256: request.reference.sha256 },
107
- referenceMode: request.referenceMode,
108
- outputPath: request.outputPath,
109
- preparedAt: new Date().toISOString(),
110
- },
111
- }));
112
- await Promise.all(reserved.map((item) => markImageGenerationDispatched(item)));
113
- const settled = await Promise.allSettled(reserved.map((item) => (dispatchImageGeneration(item, { generate: args.dependencies.generate }))));
114
- for (const outcome of settled) {
115
- if (outcome.status === 'fulfilled')
116
- results.push(outcome.value);
117
- else
118
- errors.push(errorMessage(outcome.reason));
119
- }
120
- batchAttempt.accounting = summarizeImageGenerationUsage(reserved.map((item) => item.attempt.usage), preflight.provider);
121
- }
122
- await materializeImageBatch(candidates);
123
- const unrecoverable = states.filter((state) => state.disposition === 'unrecoverable');
124
- const failed = errors.length > 0 || unrecoverable.length > 0;
125
- const { completionPath, completion } = await publishImageBatchCompletion({
126
- manifestPath,
127
- manifestSha256,
128
- batchAttemptFile,
129
- provider: batchAttempt.provider,
130
- model: batchAttempt.model,
131
- resumed: true,
132
- status: failed ? 'failed' : 'succeeded',
133
- candidates,
134
- });
135
- batchAttempt.status = failed ? 'failed' : 'succeeded';
136
- batchAttempt.completedAt = new Date().toISOString();
137
- batchAttempt.completionPath = completionPath;
138
- batchAttempt.resumedAt = [...batchAttempt.resumedAt ?? [], new Date().toISOString()];
139
- if (results.length > 0)
140
- batchAttempt.results = [...batchAttempt.results ?? [], ...results];
141
- if (failed) {
142
- batchAttempt.errors = [
143
- ...errors,
144
- ...unrecoverable.map((state) => describeResumeState(state)),
145
- ];
146
- }
147
- await writeBatchAttempt(batchAttemptFile, batchAttempt);
148
- if (failed) {
149
- throw new AggregateError(batchAttempt.errors ?? [], `Image batch resume recovered ${completion.succeededCount} of ${completion.candidateCount}`
150
- + ` candidate(s) without new spend, and cannot recover the rest.`
151
- + ` ${describeBatchRecovery(states)}.`
152
- // Say what this is NOT. A recovery report that only counts what it could
153
- // not recover reads as a dead provider, and a caller that believes the
154
- // provider is dead abandons the pipeline and hand-writes the page.
155
- + ' This is a delivery gap on candidates that were already dispatched and'
156
- + ' already paid for — it is not a provider outage, and image generation is not'
157
- + ` broken. Any candidate listed as already on disk is valid: read it and carry on.`
158
- + ' Give any unrecoverable candidate a new output path and idempotency key to buy'
159
- + ` it again. Evidence: ${batchAttemptFile}.`
160
- + ` Completion sentinel: ${completionPath}`);
161
- }
162
- console.log(JSON.stringify({
163
- provider: batchAttempt.provider,
164
- model: batchAttempt.model,
165
- manifestPath,
166
- batchAttemptFile,
167
- completionPath,
168
- resumed: true,
169
- deliveredFromStaging: delivered.length,
170
- redispatchedWithoutNewSpend: results.length,
171
- accounting: batchAttempt.accounting,
172
- candidates: completion.candidates,
173
- }, null, 2));
174
- return { completionPath };
175
- };
176
- //# sourceMappingURL=cli-image-batch-resume.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-image-batch-resume.js","sourceRoot":"","sources":["../src/cli-image-batch-resume.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import { ensembleImage } from '@just-every/ensemble';
2
- import { type CliFlags } from './cli-arguments.js';
3
- import { preflightImageProvider } from './image-provider-preflight.js';
4
- export declare const runImageCommand: (action: string | undefined, flags: CliFlags, dependencies?: {
5
- generate?: typeof ensembleImage;
6
- preflight?: typeof preflightImageProvider;
7
- }) => Promise<{
8
- outputPath: string;
9
- }>;
10
- //# sourceMappingURL=cli-image-command.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-image-command.d.ts","sourceRoot":"","sources":["../src/cli-image-command.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAmB/D,OAAO,EAGL,sBAAsB,EACvB,MAAM,+BAA+B,CAAC;AAoCvC,eAAO,MAAM,eAAe,GAC1B,QAAQ,MAAM,GAAG,SAAS,EAC1B,OAAO,QAAQ,EACf,eAAc;IACZ,QAAQ,CAAC,EAAE,OAAO,aAAa,CAAC;IAChC,SAAS,CAAC,EAAE,OAAO,sBAAsB,CAAC;CACtC,KACL,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAmEhC,CAAC"}