transloadit 4.7.4 → 4.8.0

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 (585) hide show
  1. package/README.md +915 -5
  2. package/dist/Transloadit.d.ts +3 -3
  3. package/dist/Transloadit.d.ts.map +1 -1
  4. package/dist/Transloadit.js +2 -2
  5. package/dist/Transloadit.js.map +1 -1
  6. package/dist/alphalib/assembly-linter.js +1 -1
  7. package/dist/alphalib/assembly-linter.js.map +1 -1
  8. package/dist/alphalib/stepParsing.js +2 -2
  9. package/dist/alphalib/stepParsing.js.map +1 -1
  10. package/dist/alphalib/types/assembliesGet.d.ts +5 -0
  11. package/dist/alphalib/types/assembliesGet.d.ts.map +1 -1
  12. package/dist/alphalib/types/assemblyReplay.d.ts +7 -7860
  13. package/dist/alphalib/types/assemblyReplay.d.ts.map +1 -1
  14. package/dist/alphalib/types/assemblyReplayNotification.d.ts +7 -7860
  15. package/dist/alphalib/types/assemblyReplayNotification.d.ts.map +1 -1
  16. package/dist/alphalib/types/assemblyStatus.d.ts +4822 -313
  17. package/dist/alphalib/types/assemblyStatus.d.ts.map +1 -1
  18. package/dist/alphalib/types/assemblyStatus.js +40 -2
  19. package/dist/alphalib/types/assemblyStatus.js.map +1 -1
  20. package/dist/alphalib/types/bill.d.ts +5 -0
  21. package/dist/alphalib/types/bill.d.ts.map +1 -1
  22. package/dist/alphalib/types/builtinTemplates.d.ts +83 -0
  23. package/dist/alphalib/types/builtinTemplates.d.ts.map +1 -0
  24. package/dist/alphalib/types/builtinTemplates.js +19 -0
  25. package/dist/alphalib/types/builtinTemplates.js.map +1 -0
  26. package/dist/alphalib/types/robots/_index.d.ts +903 -72620
  27. package/dist/alphalib/types/robots/_index.d.ts.map +1 -1
  28. package/dist/alphalib/types/robots/_index.js +62 -11
  29. package/dist/alphalib/types/robots/_index.js.map +1 -1
  30. package/dist/alphalib/types/robots/_instructions-primitives.d.ts +41 -10
  31. package/dist/alphalib/types/robots/_instructions-primitives.d.ts.map +1 -1
  32. package/dist/alphalib/types/robots/_instructions-primitives.js +89 -3
  33. package/dist/alphalib/types/robots/_instructions-primitives.js.map +1 -1
  34. package/dist/alphalib/types/robots/ai-chat.d.ts +33 -0
  35. package/dist/alphalib/types/robots/ai-chat.d.ts.map +1 -1
  36. package/dist/alphalib/types/robots/ai-chat.js +28 -4
  37. package/dist/alphalib/types/robots/ai-chat.js.map +1 -1
  38. package/dist/alphalib/types/robots/assembly-savejson.d.ts.map +1 -1
  39. package/dist/alphalib/types/robots/assembly-savejson.js +8 -0
  40. package/dist/alphalib/types/robots/assembly-savejson.js.map +1 -1
  41. package/dist/alphalib/types/robots/audio-artwork.d.ts.map +1 -1
  42. package/dist/alphalib/types/robots/audio-artwork.js +4 -5
  43. package/dist/alphalib/types/robots/audio-artwork.js.map +1 -1
  44. package/dist/alphalib/types/robots/audio-concat.d.ts.map +1 -1
  45. package/dist/alphalib/types/robots/audio-concat.js +1 -2
  46. package/dist/alphalib/types/robots/audio-concat.js.map +1 -1
  47. package/dist/alphalib/types/robots/audio-encode.d.ts.map +1 -1
  48. package/dist/alphalib/types/robots/audio-encode.js +1 -2
  49. package/dist/alphalib/types/robots/audio-encode.js.map +1 -1
  50. package/dist/alphalib/types/robots/audio-loop.d.ts.map +1 -1
  51. package/dist/alphalib/types/robots/audio-loop.js +1 -2
  52. package/dist/alphalib/types/robots/audio-loop.js.map +1 -1
  53. package/dist/alphalib/types/robots/audio-merge.d.ts.map +1 -1
  54. package/dist/alphalib/types/robots/audio-merge.js +1 -2
  55. package/dist/alphalib/types/robots/audio-merge.js.map +1 -1
  56. package/dist/alphalib/types/robots/audio-split.d.ts +2936 -0
  57. package/dist/alphalib/types/robots/audio-split.d.ts.map +1 -0
  58. package/dist/alphalib/types/robots/audio-split.js +88 -0
  59. package/dist/alphalib/types/robots/audio-split.js.map +1 -0
  60. package/dist/alphalib/types/robots/audio-waveform.d.ts +92 -6
  61. package/dist/alphalib/types/robots/audio-waveform.d.ts.map +1 -1
  62. package/dist/alphalib/types/robots/audio-waveform.js +72 -6
  63. package/dist/alphalib/types/robots/audio-waveform.js.map +1 -1
  64. package/dist/alphalib/types/robots/azure-import.d.ts.map +1 -1
  65. package/dist/alphalib/types/robots/azure-import.js +0 -1
  66. package/dist/alphalib/types/robots/azure-import.js.map +1 -1
  67. package/dist/alphalib/types/robots/azure-store.d.ts.map +1 -1
  68. package/dist/alphalib/types/robots/azure-store.js +0 -1
  69. package/dist/alphalib/types/robots/azure-store.js.map +1 -1
  70. package/dist/alphalib/types/robots/backblaze-import.d.ts.map +1 -1
  71. package/dist/alphalib/types/robots/backblaze-import.js +0 -1
  72. package/dist/alphalib/types/robots/backblaze-import.js.map +1 -1
  73. package/dist/alphalib/types/robots/backblaze-store.d.ts.map +1 -1
  74. package/dist/alphalib/types/robots/backblaze-store.js +0 -1
  75. package/dist/alphalib/types/robots/backblaze-store.js.map +1 -1
  76. package/dist/alphalib/types/robots/box-import.d.ts +150 -0
  77. package/dist/alphalib/types/robots/box-import.d.ts.map +1 -0
  78. package/dist/alphalib/types/robots/box-import.js +63 -0
  79. package/dist/alphalib/types/robots/box-import.js.map +1 -0
  80. package/dist/alphalib/types/robots/box-store.d.ts +455 -0
  81. package/dist/alphalib/types/robots/box-store.d.ts.map +1 -0
  82. package/dist/alphalib/types/robots/box-store.js +66 -0
  83. package/dist/alphalib/types/robots/box-store.js.map +1 -0
  84. package/dist/alphalib/types/robots/cloudfiles-import.d.ts.map +1 -1
  85. package/dist/alphalib/types/robots/cloudfiles-import.js +0 -1
  86. package/dist/alphalib/types/robots/cloudfiles-import.js.map +1 -1
  87. package/dist/alphalib/types/robots/cloudfiles-store.d.ts.map +1 -1
  88. package/dist/alphalib/types/robots/cloudfiles-store.js +0 -1
  89. package/dist/alphalib/types/robots/cloudfiles-store.js.map +1 -1
  90. package/dist/alphalib/types/robots/cloudflare-import.d.ts.map +1 -1
  91. package/dist/alphalib/types/robots/cloudflare-import.js +0 -1
  92. package/dist/alphalib/types/robots/cloudflare-import.js.map +1 -1
  93. package/dist/alphalib/types/robots/cloudflare-store.d.ts.map +1 -1
  94. package/dist/alphalib/types/robots/cloudflare-store.js +0 -1
  95. package/dist/alphalib/types/robots/cloudflare-store.js.map +1 -1
  96. package/dist/alphalib/types/robots/digitalocean-import.d.ts.map +1 -1
  97. package/dist/alphalib/types/robots/digitalocean-import.js +0 -1
  98. package/dist/alphalib/types/robots/digitalocean-import.js.map +1 -1
  99. package/dist/alphalib/types/robots/digitalocean-store.d.ts.map +1 -1
  100. package/dist/alphalib/types/robots/digitalocean-store.js +0 -1
  101. package/dist/alphalib/types/robots/digitalocean-store.js.map +1 -1
  102. package/dist/alphalib/types/robots/document-autorotate.d.ts.map +1 -1
  103. package/dist/alphalib/types/robots/document-autorotate.js +8 -1
  104. package/dist/alphalib/types/robots/document-autorotate.js.map +1 -1
  105. package/dist/alphalib/types/robots/document-convert.d.ts +8 -8
  106. package/dist/alphalib/types/robots/document-convert.d.ts.map +1 -1
  107. package/dist/alphalib/types/robots/document-convert.js +9 -3
  108. package/dist/alphalib/types/robots/document-convert.js.map +1 -1
  109. package/dist/alphalib/types/robots/document-merge.d.ts.map +1 -1
  110. package/dist/alphalib/types/robots/document-merge.js +0 -1
  111. package/dist/alphalib/types/robots/document-merge.js.map +1 -1
  112. package/dist/alphalib/types/robots/document-ocr.d.ts.map +1 -1
  113. package/dist/alphalib/types/robots/document-ocr.js +0 -1
  114. package/dist/alphalib/types/robots/document-ocr.js.map +1 -1
  115. package/dist/alphalib/types/robots/document-optimize.d.ts.map +1 -1
  116. package/dist/alphalib/types/robots/document-optimize.js +0 -1
  117. package/dist/alphalib/types/robots/document-optimize.js.map +1 -1
  118. package/dist/alphalib/types/robots/document-split.d.ts.map +1 -1
  119. package/dist/alphalib/types/robots/document-split.js +9 -1
  120. package/dist/alphalib/types/robots/document-split.js.map +1 -1
  121. package/dist/alphalib/types/robots/document-thumbs.d.ts +12 -0
  122. package/dist/alphalib/types/robots/document-thumbs.d.ts.map +1 -1
  123. package/dist/alphalib/types/robots/document-thumbs.js +23 -4
  124. package/dist/alphalib/types/robots/document-thumbs.js.map +1 -1
  125. package/dist/alphalib/types/robots/dropbox-import.d.ts.map +1 -1
  126. package/dist/alphalib/types/robots/dropbox-import.js +0 -1
  127. package/dist/alphalib/types/robots/dropbox-import.js.map +1 -1
  128. package/dist/alphalib/types/robots/dropbox-store.d.ts.map +1 -1
  129. package/dist/alphalib/types/robots/dropbox-store.js +0 -1
  130. package/dist/alphalib/types/robots/dropbox-store.js.map +1 -1
  131. package/dist/alphalib/types/robots/edgly-deliver.d.ts.map +1 -1
  132. package/dist/alphalib/types/robots/edgly-deliver.js +8 -1
  133. package/dist/alphalib/types/robots/edgly-deliver.js.map +1 -1
  134. package/dist/alphalib/types/robots/file-compress.d.ts +12 -0
  135. package/dist/alphalib/types/robots/file-compress.d.ts.map +1 -1
  136. package/dist/alphalib/types/robots/file-compress.js +8 -1
  137. package/dist/alphalib/types/robots/file-compress.js.map +1 -1
  138. package/dist/alphalib/types/robots/file-decompress.d.ts +24 -0
  139. package/dist/alphalib/types/robots/file-decompress.d.ts.map +1 -1
  140. package/dist/alphalib/types/robots/file-decompress.js +30 -5
  141. package/dist/alphalib/types/robots/file-decompress.js.map +1 -1
  142. package/dist/alphalib/types/robots/file-filter.d.ts.map +1 -1
  143. package/dist/alphalib/types/robots/file-filter.js +23 -6
  144. package/dist/alphalib/types/robots/file-filter.js.map +1 -1
  145. package/dist/alphalib/types/robots/file-hash.d.ts +24 -0
  146. package/dist/alphalib/types/robots/file-hash.d.ts.map +1 -1
  147. package/dist/alphalib/types/robots/file-hash.js +23 -1
  148. package/dist/alphalib/types/robots/file-hash.js.map +1 -1
  149. package/dist/alphalib/types/robots/file-preview.d.ts +12 -0
  150. package/dist/alphalib/types/robots/file-preview.d.ts.map +1 -1
  151. package/dist/alphalib/types/robots/file-preview.js +8 -1
  152. package/dist/alphalib/types/robots/file-preview.js.map +1 -1
  153. package/dist/alphalib/types/robots/file-read.d.ts.map +1 -1
  154. package/dist/alphalib/types/robots/file-read.js +9 -1
  155. package/dist/alphalib/types/robots/file-read.js.map +1 -1
  156. package/dist/alphalib/types/robots/file-serve.d.ts +12 -0
  157. package/dist/alphalib/types/robots/file-serve.d.ts.map +1 -1
  158. package/dist/alphalib/types/robots/file-serve.js +38 -7
  159. package/dist/alphalib/types/robots/file-serve.js.map +1 -1
  160. package/dist/alphalib/types/robots/file-verify.d.ts.map +1 -1
  161. package/dist/alphalib/types/robots/file-verify.js +0 -1
  162. package/dist/alphalib/types/robots/file-verify.js.map +1 -1
  163. package/dist/alphalib/types/robots/file-virusscan.d.ts.map +1 -1
  164. package/dist/alphalib/types/robots/file-virusscan.js +5 -4
  165. package/dist/alphalib/types/robots/file-virusscan.js.map +1 -1
  166. package/dist/alphalib/types/robots/file-watermark.d.ts.map +1 -1
  167. package/dist/alphalib/types/robots/file-watermark.js +10 -0
  168. package/dist/alphalib/types/robots/file-watermark.js.map +1 -1
  169. package/dist/alphalib/types/robots/ftp-import.d.ts.map +1 -1
  170. package/dist/alphalib/types/robots/ftp-import.js +0 -1
  171. package/dist/alphalib/types/robots/ftp-import.js.map +1 -1
  172. package/dist/alphalib/types/robots/ftp-store.d.ts.map +1 -1
  173. package/dist/alphalib/types/robots/ftp-store.js +0 -1
  174. package/dist/alphalib/types/robots/ftp-store.js.map +1 -1
  175. package/dist/alphalib/types/robots/google-import.d.ts.map +1 -1
  176. package/dist/alphalib/types/robots/google-import.js +0 -1
  177. package/dist/alphalib/types/robots/google-import.js.map +1 -1
  178. package/dist/alphalib/types/robots/google-store.d.ts.map +1 -1
  179. package/dist/alphalib/types/robots/google-store.js +0 -1
  180. package/dist/alphalib/types/robots/google-store.js.map +1 -1
  181. package/dist/alphalib/types/robots/html-convert.d.ts.map +1 -1
  182. package/dist/alphalib/types/robots/html-convert.js +0 -1
  183. package/dist/alphalib/types/robots/html-convert.js.map +1 -1
  184. package/dist/alphalib/types/robots/http-import.d.ts.map +1 -1
  185. package/dist/alphalib/types/robots/http-import.js +0 -1
  186. package/dist/alphalib/types/robots/http-import.js.map +1 -1
  187. package/dist/alphalib/types/robots/image-bgremove.d.ts +8 -8
  188. package/dist/alphalib/types/robots/image-bgremove.d.ts.map +1 -1
  189. package/dist/alphalib/types/robots/image-bgremove.js +4 -2
  190. package/dist/alphalib/types/robots/image-bgremove.js.map +1 -1
  191. package/dist/alphalib/types/robots/image-copyrightdetect.d.ts +465 -0
  192. package/dist/alphalib/types/robots/image-copyrightdetect.d.ts.map +1 -0
  193. package/dist/alphalib/types/robots/image-copyrightdetect.js +136 -0
  194. package/dist/alphalib/types/robots/image-copyrightdetect.js.map +1 -0
  195. package/dist/alphalib/types/robots/image-describe.d.ts.map +1 -1
  196. package/dist/alphalib/types/robots/image-describe.js +0 -1
  197. package/dist/alphalib/types/robots/image-describe.js.map +1 -1
  198. package/dist/alphalib/types/robots/image-enhance.d.ts +502 -0
  199. package/dist/alphalib/types/robots/image-enhance.d.ts.map +1 -0
  200. package/dist/alphalib/types/robots/image-enhance.js +146 -0
  201. package/dist/alphalib/types/robots/image-enhance.js.map +1 -0
  202. package/dist/alphalib/types/robots/image-facedetect.d.ts.map +1 -1
  203. package/dist/alphalib/types/robots/image-facedetect.js +0 -1
  204. package/dist/alphalib/types/robots/image-facedetect.js.map +1 -1
  205. package/dist/alphalib/types/robots/image-generate.d.ts +4 -5
  206. package/dist/alphalib/types/robots/image-generate.d.ts.map +1 -1
  207. package/dist/alphalib/types/robots/image-generate.js +62 -8
  208. package/dist/alphalib/types/robots/image-generate.js.map +1 -1
  209. package/dist/alphalib/types/robots/image-merge.d.ts +12 -12
  210. package/dist/alphalib/types/robots/image-merge.d.ts.map +1 -1
  211. package/dist/alphalib/types/robots/image-merge.js +0 -1
  212. package/dist/alphalib/types/robots/image-merge.js.map +1 -1
  213. package/dist/alphalib/types/robots/image-ocr.d.ts.map +1 -1
  214. package/dist/alphalib/types/robots/image-ocr.js +0 -1
  215. package/dist/alphalib/types/robots/image-ocr.js.map +1 -1
  216. package/dist/alphalib/types/robots/image-optimize.d.ts +12 -0
  217. package/dist/alphalib/types/robots/image-optimize.d.ts.map +1 -1
  218. package/dist/alphalib/types/robots/image-optimize.js +16 -3
  219. package/dist/alphalib/types/robots/image-optimize.js.map +1 -1
  220. package/dist/alphalib/types/robots/image-resize.d.ts +20 -8
  221. package/dist/alphalib/types/robots/image-resize.d.ts.map +1 -1
  222. package/dist/alphalib/types/robots/image-resize.js +37 -1
  223. package/dist/alphalib/types/robots/image-resize.js.map +1 -1
  224. package/dist/alphalib/types/robots/image-upscale.d.ts +447 -0
  225. package/dist/alphalib/types/robots/image-upscale.d.ts.map +1 -0
  226. package/dist/alphalib/types/robots/image-upscale.js +65 -0
  227. package/dist/alphalib/types/robots/image-upscale.js.map +1 -0
  228. package/dist/alphalib/types/robots/mega-import.d.ts +244 -0
  229. package/dist/alphalib/types/robots/mega-import.d.ts.map +1 -0
  230. package/dist/alphalib/types/robots/mega-import.js +84 -0
  231. package/dist/alphalib/types/robots/mega-import.js.map +1 -0
  232. package/dist/alphalib/types/robots/mega-store.d.ts +526 -0
  233. package/dist/alphalib/types/robots/mega-store.d.ts.map +1 -0
  234. package/dist/alphalib/types/robots/mega-store.js +82 -0
  235. package/dist/alphalib/types/robots/mega-store.js.map +1 -0
  236. package/dist/alphalib/types/robots/meta-read.d.ts.map +1 -1
  237. package/dist/alphalib/types/robots/meta-read.js +8 -0
  238. package/dist/alphalib/types/robots/meta-read.js.map +1 -1
  239. package/dist/alphalib/types/robots/meta-write.d.ts.map +1 -1
  240. package/dist/alphalib/types/robots/meta-write.js +0 -1
  241. package/dist/alphalib/types/robots/meta-write.js.map +1 -1
  242. package/dist/alphalib/types/robots/minio-import.d.ts.map +1 -1
  243. package/dist/alphalib/types/robots/minio-import.js +0 -1
  244. package/dist/alphalib/types/robots/minio-import.js.map +1 -1
  245. package/dist/alphalib/types/robots/minio-store.d.ts.map +1 -1
  246. package/dist/alphalib/types/robots/minio-store.js +0 -1
  247. package/dist/alphalib/types/robots/minio-store.js.map +1 -1
  248. package/dist/alphalib/types/robots/progress-simulate.d.ts.map +1 -1
  249. package/dist/alphalib/types/robots/progress-simulate.js +13 -0
  250. package/dist/alphalib/types/robots/progress-simulate.js.map +1 -1
  251. package/dist/alphalib/types/robots/s3-import.d.ts.map +1 -1
  252. package/dist/alphalib/types/robots/s3-import.js +0 -1
  253. package/dist/alphalib/types/robots/s3-import.js.map +1 -1
  254. package/dist/alphalib/types/robots/s3-store.d.ts.map +1 -1
  255. package/dist/alphalib/types/robots/s3-store.js +0 -1
  256. package/dist/alphalib/types/robots/s3-store.js.map +1 -1
  257. package/dist/alphalib/types/robots/script-run.d.ts.map +1 -1
  258. package/dist/alphalib/types/robots/script-run.js +10 -1
  259. package/dist/alphalib/types/robots/script-run.js.map +1 -1
  260. package/dist/alphalib/types/robots/sftp-import.d.ts.map +1 -1
  261. package/dist/alphalib/types/robots/sftp-import.js +0 -1
  262. package/dist/alphalib/types/robots/sftp-import.js.map +1 -1
  263. package/dist/alphalib/types/robots/sftp-store.d.ts.map +1 -1
  264. package/dist/alphalib/types/robots/sftp-store.js +0 -1
  265. package/dist/alphalib/types/robots/sftp-store.js.map +1 -1
  266. package/dist/alphalib/types/robots/speech-transcribe.d.ts.map +1 -1
  267. package/dist/alphalib/types/robots/speech-transcribe.js +0 -1
  268. package/dist/alphalib/types/robots/speech-transcribe.js.map +1 -1
  269. package/dist/alphalib/types/robots/supabase-import.d.ts.map +1 -1
  270. package/dist/alphalib/types/robots/supabase-import.js +0 -1
  271. package/dist/alphalib/types/robots/supabase-import.js.map +1 -1
  272. package/dist/alphalib/types/robots/supabase-store.d.ts.map +1 -1
  273. package/dist/alphalib/types/robots/supabase-store.js +0 -1
  274. package/dist/alphalib/types/robots/supabase-store.js.map +1 -1
  275. package/dist/alphalib/types/robots/swift-import.d.ts.map +1 -1
  276. package/dist/alphalib/types/robots/swift-import.js +0 -1
  277. package/dist/alphalib/types/robots/swift-import.js.map +1 -1
  278. package/dist/alphalib/types/robots/swift-store.d.ts.map +1 -1
  279. package/dist/alphalib/types/robots/swift-store.js +0 -1
  280. package/dist/alphalib/types/robots/swift-store.js.map +1 -1
  281. package/dist/alphalib/types/robots/text-speak.d.ts.map +1 -1
  282. package/dist/alphalib/types/robots/text-speak.js +0 -1
  283. package/dist/alphalib/types/robots/text-speak.js.map +1 -1
  284. package/dist/alphalib/types/robots/text-translate.d.ts.map +1 -1
  285. package/dist/alphalib/types/robots/text-translate.js +0 -1
  286. package/dist/alphalib/types/robots/text-translate.js.map +1 -1
  287. package/dist/alphalib/types/robots/tigris-import.d.ts.map +1 -1
  288. package/dist/alphalib/types/robots/tigris-import.js +0 -1
  289. package/dist/alphalib/types/robots/tigris-import.js.map +1 -1
  290. package/dist/alphalib/types/robots/tigris-store.d.ts.map +1 -1
  291. package/dist/alphalib/types/robots/tigris-store.js +0 -1
  292. package/dist/alphalib/types/robots/tigris-store.js.map +1 -1
  293. package/dist/alphalib/types/robots/tlcdn-deliver.d.ts.map +1 -1
  294. package/dist/alphalib/types/robots/tlcdn-deliver.js +8 -1
  295. package/dist/alphalib/types/robots/tlcdn-deliver.js.map +1 -1
  296. package/dist/alphalib/types/robots/tus-store.d.ts.map +1 -1
  297. package/dist/alphalib/types/robots/tus-store.js +1 -14
  298. package/dist/alphalib/types/robots/tus-store.js.map +1 -1
  299. package/dist/alphalib/types/robots/upload-handle.d.ts.map +1 -1
  300. package/dist/alphalib/types/robots/upload-handle.js +0 -1
  301. package/dist/alphalib/types/robots/upload-handle.js.map +1 -1
  302. package/dist/alphalib/types/robots/video-adaptive.d.ts +32 -8
  303. package/dist/alphalib/types/robots/video-adaptive.d.ts.map +1 -1
  304. package/dist/alphalib/types/robots/video-adaptive.js +22 -6
  305. package/dist/alphalib/types/robots/video-adaptive.js.map +1 -1
  306. package/dist/alphalib/types/robots/video-artwork.d.ts +2855 -0
  307. package/dist/alphalib/types/robots/video-artwork.d.ts.map +1 -0
  308. package/dist/alphalib/types/robots/video-artwork.js +66 -0
  309. package/dist/alphalib/types/robots/video-artwork.js.map +1 -0
  310. package/dist/alphalib/types/robots/video-concat.d.ts +36 -0
  311. package/dist/alphalib/types/robots/video-concat.d.ts.map +1 -1
  312. package/dist/alphalib/types/robots/video-concat.js +30 -1
  313. package/dist/alphalib/types/robots/video-concat.js.map +1 -1
  314. package/dist/alphalib/types/robots/video-encode.d.ts.map +1 -1
  315. package/dist/alphalib/types/robots/video-encode.js +0 -1
  316. package/dist/alphalib/types/robots/video-encode.js.map +1 -1
  317. package/dist/alphalib/types/robots/video-generate.d.ts +594 -0
  318. package/dist/alphalib/types/robots/video-generate.d.ts.map +1 -0
  319. package/dist/alphalib/types/robots/video-generate.js +90 -0
  320. package/dist/alphalib/types/robots/video-generate.js.map +1 -0
  321. package/dist/alphalib/types/robots/video-merge.d.ts +24 -0
  322. package/dist/alphalib/types/robots/video-merge.d.ts.map +1 -1
  323. package/dist/alphalib/types/robots/video-merge.js +33 -1
  324. package/dist/alphalib/types/robots/video-merge.js.map +1 -1
  325. package/dist/alphalib/types/robots/video-ondemand.d.ts.map +1 -1
  326. package/dist/alphalib/types/robots/video-ondemand.js +3 -4
  327. package/dist/alphalib/types/robots/video-ondemand.js.map +1 -1
  328. package/dist/alphalib/types/robots/video-split.d.ts +2939 -0
  329. package/dist/alphalib/types/robots/video-split.d.ts.map +1 -0
  330. package/dist/alphalib/types/robots/video-split.js +78 -0
  331. package/dist/alphalib/types/robots/video-split.js.map +1 -0
  332. package/dist/alphalib/types/robots/video-subtitle.d.ts +52 -4
  333. package/dist/alphalib/types/robots/video-subtitle.d.ts.map +1 -1
  334. package/dist/alphalib/types/robots/video-subtitle.js +61 -8
  335. package/dist/alphalib/types/robots/video-subtitle.js.map +1 -1
  336. package/dist/alphalib/types/robots/video-thumbs.d.ts.map +1 -1
  337. package/dist/alphalib/types/robots/video-thumbs.js +0 -1
  338. package/dist/alphalib/types/robots/video-thumbs.js.map +1 -1
  339. package/dist/alphalib/types/robots/vimeo-import.d.ts +4 -4
  340. package/dist/alphalib/types/robots/vimeo-import.d.ts.map +1 -1
  341. package/dist/alphalib/types/robots/vimeo-import.js +0 -1
  342. package/dist/alphalib/types/robots/vimeo-import.js.map +1 -1
  343. package/dist/alphalib/types/robots/vimeo-store.d.ts +2 -2
  344. package/dist/alphalib/types/robots/vimeo-store.d.ts.map +1 -1
  345. package/dist/alphalib/types/robots/vimeo-store.js +14 -3
  346. package/dist/alphalib/types/robots/vimeo-store.js.map +1 -1
  347. package/dist/alphalib/types/robots/wasabi-import.d.ts.map +1 -1
  348. package/dist/alphalib/types/robots/wasabi-import.js +0 -1
  349. package/dist/alphalib/types/robots/wasabi-import.js.map +1 -1
  350. package/dist/alphalib/types/robots/wasabi-store.d.ts.map +1 -1
  351. package/dist/alphalib/types/robots/wasabi-store.js +0 -1
  352. package/dist/alphalib/types/robots/wasabi-store.js.map +1 -1
  353. package/dist/alphalib/types/robots/youtube-store.d.ts.map +1 -1
  354. package/dist/alphalib/types/robots/youtube-store.js +4 -5
  355. package/dist/alphalib/types/robots/youtube-store.js.map +1 -1
  356. package/dist/alphalib/types/skillFrontmatter.d.ts +29 -0
  357. package/dist/alphalib/types/skillFrontmatter.d.ts.map +1 -0
  358. package/dist/alphalib/types/skillFrontmatter.js +19 -0
  359. package/dist/alphalib/types/skillFrontmatter.js.map +1 -0
  360. package/dist/alphalib/types/template.d.ts +77 -132175
  361. package/dist/alphalib/types/template.d.ts.map +1 -1
  362. package/dist/alphalib/types/template.js +26 -3
  363. package/dist/alphalib/types/template.js.map +1 -1
  364. package/dist/alphalib/types/templateCredential.d.ts +13 -3
  365. package/dist/alphalib/types/templateCredential.d.ts.map +1 -1
  366. package/dist/alphalib/types/templateCredential.js +1 -0
  367. package/dist/alphalib/types/templateCredential.js.map +1 -1
  368. package/dist/alphalib/zodParseWithContext.d.ts.map +1 -1
  369. package/dist/alphalib/zodParseWithContext.js +15 -11
  370. package/dist/alphalib/zodParseWithContext.js.map +1 -1
  371. package/dist/cli/commands/assemblies.d.ts +8 -2
  372. package/dist/cli/commands/assemblies.d.ts.map +1 -1
  373. package/dist/cli/commands/assemblies.js +566 -411
  374. package/dist/cli/commands/assemblies.js.map +1 -1
  375. package/dist/cli/commands/index.d.ts.map +1 -1
  376. package/dist/cli/commands/index.js +5 -0
  377. package/dist/cli/commands/index.js.map +1 -1
  378. package/dist/cli/commands/templates.d.ts.map +1 -1
  379. package/dist/cli/commands/templates.js +4 -14
  380. package/dist/cli/commands/templates.js.map +1 -1
  381. package/dist/cli/fileProcessingOptions.d.ts +35 -0
  382. package/dist/cli/fileProcessingOptions.d.ts.map +1 -0
  383. package/dist/cli/fileProcessingOptions.js +182 -0
  384. package/dist/cli/fileProcessingOptions.js.map +1 -0
  385. package/dist/cli/generateIntentDocs.d.ts +6 -0
  386. package/dist/cli/generateIntentDocs.d.ts.map +1 -0
  387. package/dist/cli/generateIntentDocs.js +337 -0
  388. package/dist/cli/generateIntentDocs.js.map +1 -0
  389. package/dist/cli/intentCommandSpecs.d.ts +36 -0
  390. package/dist/cli/intentCommandSpecs.d.ts.map +1 -0
  391. package/dist/cli/intentCommandSpecs.js +179 -0
  392. package/dist/cli/intentCommandSpecs.js.map +1 -0
  393. package/dist/cli/intentCommands.d.ts +13 -0
  394. package/dist/cli/intentCommands.d.ts.map +1 -0
  395. package/dist/cli/intentCommands.js +368 -0
  396. package/dist/cli/intentCommands.js.map +1 -0
  397. package/dist/cli/intentFields.d.ts +25 -0
  398. package/dist/cli/intentFields.d.ts.map +1 -0
  399. package/dist/cli/intentFields.js +298 -0
  400. package/dist/cli/intentFields.js.map +1 -0
  401. package/dist/cli/intentInputPolicy.d.ts +10 -0
  402. package/dist/cli/intentInputPolicy.d.ts.map +1 -0
  403. package/dist/cli/intentInputPolicy.js +2 -0
  404. package/dist/cli/intentInputPolicy.js.map +1 -0
  405. package/dist/cli/intentRuntime.d.ts +114 -0
  406. package/dist/cli/intentRuntime.d.ts.map +1 -0
  407. package/dist/cli/intentRuntime.js +464 -0
  408. package/dist/cli/intentRuntime.js.map +1 -0
  409. package/dist/cli/resultFiles.d.ts +19 -0
  410. package/dist/cli/resultFiles.d.ts.map +1 -0
  411. package/dist/cli/resultFiles.js +66 -0
  412. package/dist/cli/resultFiles.js.map +1 -0
  413. package/dist/cli/resultUrls.d.ts +19 -0
  414. package/dist/cli/resultUrls.d.ts.map +1 -0
  415. package/dist/cli/resultUrls.js +36 -0
  416. package/dist/cli/resultUrls.js.map +1 -0
  417. package/dist/cli/semanticIntents/imageDescribe.d.ts +45 -0
  418. package/dist/cli/semanticIntents/imageDescribe.d.ts.map +1 -0
  419. package/dist/cli/semanticIntents/imageDescribe.js +188 -0
  420. package/dist/cli/semanticIntents/imageDescribe.js.map +1 -0
  421. package/dist/cli/semanticIntents/imageGenerate.d.ts +94 -0
  422. package/dist/cli/semanticIntents/imageGenerate.d.ts.map +1 -0
  423. package/dist/cli/semanticIntents/imageGenerate.js +215 -0
  424. package/dist/cli/semanticIntents/imageGenerate.js.map +1 -0
  425. package/dist/cli/semanticIntents/index.d.ts +20 -0
  426. package/dist/cli/semanticIntents/index.d.ts.map +1 -0
  427. package/dist/cli/semanticIntents/index.js +20 -0
  428. package/dist/cli/semanticIntents/index.js.map +1 -0
  429. package/dist/cli/semanticIntents/markdownPdf.d.ts +4 -0
  430. package/dist/cli/semanticIntents/markdownPdf.d.ts.map +1 -0
  431. package/dist/cli/semanticIntents/markdownPdf.js +93 -0
  432. package/dist/cli/semanticIntents/markdownPdf.js.map +1 -0
  433. package/dist/cli/semanticIntents/parsing.d.ts +11 -0
  434. package/dist/cli/semanticIntents/parsing.d.ts.map +1 -0
  435. package/dist/cli/semanticIntents/parsing.js +29 -0
  436. package/dist/cli/semanticIntents/parsing.js.map +1 -0
  437. package/dist/cli/stepsInput.d.ts +4 -0
  438. package/dist/cli/stepsInput.d.ts.map +1 -0
  439. package/dist/cli/stepsInput.js +23 -0
  440. package/dist/cli/stepsInput.js.map +1 -0
  441. package/dist/cli.d.ts +1 -1
  442. package/dist/cli.d.ts.map +1 -1
  443. package/dist/cli.js +5 -4
  444. package/dist/cli.js.map +1 -1
  445. package/dist/ensureUniqueCounter.d.ts +8 -0
  446. package/dist/ensureUniqueCounter.d.ts.map +1 -0
  447. package/dist/ensureUniqueCounter.js +48 -0
  448. package/dist/ensureUniqueCounter.js.map +1 -0
  449. package/dist/inputFiles.d.ts +9 -0
  450. package/dist/inputFiles.d.ts.map +1 -1
  451. package/dist/inputFiles.js +177 -26
  452. package/dist/inputFiles.js.map +1 -1
  453. package/dist/robots.js +3 -3
  454. package/dist/robots.js.map +1 -1
  455. package/package.json +9 -7
  456. package/src/Transloadit.ts +3 -3
  457. package/src/alphalib/assembly-linter.ts +1 -1
  458. package/src/alphalib/stepParsing.ts +2 -2
  459. package/src/alphalib/types/assemblyStatus.ts +45 -3
  460. package/src/alphalib/types/builtinTemplates.ts +24 -0
  461. package/src/alphalib/types/robots/_index.ts +211 -20
  462. package/src/alphalib/types/robots/_instructions-primitives.ts +93 -3
  463. package/src/alphalib/types/robots/ai-chat.ts +35 -4
  464. package/src/alphalib/types/robots/assembly-savejson.ts +8 -0
  465. package/src/alphalib/types/robots/audio-artwork.ts +4 -5
  466. package/src/alphalib/types/robots/audio-concat.ts +1 -2
  467. package/src/alphalib/types/robots/audio-encode.ts +1 -2
  468. package/src/alphalib/types/robots/audio-loop.ts +1 -2
  469. package/src/alphalib/types/robots/audio-merge.ts +1 -2
  470. package/src/alphalib/types/robots/audio-split.ts +130 -0
  471. package/src/alphalib/types/robots/audio-waveform.ts +90 -6
  472. package/src/alphalib/types/robots/azure-import.ts +0 -1
  473. package/src/alphalib/types/robots/azure-store.ts +0 -1
  474. package/src/alphalib/types/robots/backblaze-import.ts +0 -1
  475. package/src/alphalib/types/robots/backblaze-store.ts +0 -1
  476. package/src/alphalib/types/robots/box-import.ts +97 -0
  477. package/src/alphalib/types/robots/box-store.ts +94 -0
  478. package/src/alphalib/types/robots/cloudfiles-import.ts +0 -1
  479. package/src/alphalib/types/robots/cloudfiles-store.ts +0 -1
  480. package/src/alphalib/types/robots/cloudflare-import.ts +0 -1
  481. package/src/alphalib/types/robots/cloudflare-store.ts +0 -1
  482. package/src/alphalib/types/robots/digitalocean-import.ts +0 -1
  483. package/src/alphalib/types/robots/digitalocean-store.ts +0 -1
  484. package/src/alphalib/types/robots/document-autorotate.ts +8 -1
  485. package/src/alphalib/types/robots/document-convert.ts +10 -3
  486. package/src/alphalib/types/robots/document-merge.ts +0 -1
  487. package/src/alphalib/types/robots/document-ocr.ts +0 -1
  488. package/src/alphalib/types/robots/document-optimize.ts +0 -1
  489. package/src/alphalib/types/robots/document-split.ts +9 -1
  490. package/src/alphalib/types/robots/document-thumbs.ts +26 -4
  491. package/src/alphalib/types/robots/dropbox-import.ts +0 -1
  492. package/src/alphalib/types/robots/dropbox-store.ts +0 -1
  493. package/src/alphalib/types/robots/edgly-deliver.ts +8 -1
  494. package/src/alphalib/types/robots/file-compress.ts +8 -1
  495. package/src/alphalib/types/robots/file-decompress.ts +30 -5
  496. package/src/alphalib/types/robots/file-filter.ts +23 -6
  497. package/src/alphalib/types/robots/file-hash.ts +23 -1
  498. package/src/alphalib/types/robots/file-preview.ts +8 -1
  499. package/src/alphalib/types/robots/file-read.ts +9 -1
  500. package/src/alphalib/types/robots/file-serve.ts +39 -7
  501. package/src/alphalib/types/robots/file-verify.ts +0 -1
  502. package/src/alphalib/types/robots/file-virusscan.ts +6 -4
  503. package/src/alphalib/types/robots/file-watermark.ts +10 -0
  504. package/src/alphalib/types/robots/ftp-import.ts +0 -1
  505. package/src/alphalib/types/robots/ftp-store.ts +0 -1
  506. package/src/alphalib/types/robots/google-import.ts +0 -1
  507. package/src/alphalib/types/robots/google-store.ts +0 -1
  508. package/src/alphalib/types/robots/html-convert.ts +0 -1
  509. package/src/alphalib/types/robots/http-import.ts +0 -1
  510. package/src/alphalib/types/robots/image-bgremove.ts +4 -2
  511. package/src/alphalib/types/robots/image-copyrightdetect.ts +167 -0
  512. package/src/alphalib/types/robots/image-describe.ts +0 -1
  513. package/src/alphalib/types/robots/image-enhance.ts +185 -0
  514. package/src/alphalib/types/robots/image-facedetect.ts +0 -1
  515. package/src/alphalib/types/robots/image-generate.ts +74 -8
  516. package/src/alphalib/types/robots/image-merge.ts +0 -1
  517. package/src/alphalib/types/robots/image-ocr.ts +0 -1
  518. package/src/alphalib/types/robots/image-optimize.ts +16 -3
  519. package/src/alphalib/types/robots/image-resize.ts +37 -1
  520. package/src/alphalib/types/robots/image-upscale.ts +93 -0
  521. package/src/alphalib/types/robots/mega-import.ts +123 -0
  522. package/src/alphalib/types/robots/mega-store.ts +109 -0
  523. package/src/alphalib/types/robots/meta-read.ts +8 -0
  524. package/src/alphalib/types/robots/meta-write.ts +0 -1
  525. package/src/alphalib/types/robots/minio-import.ts +0 -1
  526. package/src/alphalib/types/robots/minio-store.ts +0 -1
  527. package/src/alphalib/types/robots/progress-simulate.ts +13 -0
  528. package/src/alphalib/types/robots/s3-import.ts +0 -1
  529. package/src/alphalib/types/robots/s3-store.ts +0 -1
  530. package/src/alphalib/types/robots/script-run.ts +11 -1
  531. package/src/alphalib/types/robots/sftp-import.ts +0 -1
  532. package/src/alphalib/types/robots/sftp-store.ts +0 -1
  533. package/src/alphalib/types/robots/speech-transcribe.ts +0 -1
  534. package/src/alphalib/types/robots/supabase-import.ts +0 -1
  535. package/src/alphalib/types/robots/supabase-store.ts +0 -1
  536. package/src/alphalib/types/robots/swift-import.ts +0 -1
  537. package/src/alphalib/types/robots/swift-store.ts +0 -1
  538. package/src/alphalib/types/robots/text-speak.ts +0 -1
  539. package/src/alphalib/types/robots/text-translate.ts +0 -1
  540. package/src/alphalib/types/robots/tigris-import.ts +0 -1
  541. package/src/alphalib/types/robots/tigris-store.ts +0 -1
  542. package/src/alphalib/types/robots/tlcdn-deliver.ts +8 -1
  543. package/src/alphalib/types/robots/tus-store.ts +1 -14
  544. package/src/alphalib/types/robots/upload-handle.ts +0 -1
  545. package/src/alphalib/types/robots/video-adaptive.ts +22 -6
  546. package/src/alphalib/types/robots/video-artwork.ts +100 -0
  547. package/src/alphalib/types/robots/video-concat.ts +30 -1
  548. package/src/alphalib/types/robots/video-encode.ts +0 -1
  549. package/src/alphalib/types/robots/video-generate.ts +120 -0
  550. package/src/alphalib/types/robots/video-merge.ts +33 -1
  551. package/src/alphalib/types/robots/video-ondemand.ts +3 -4
  552. package/src/alphalib/types/robots/video-split.ts +117 -0
  553. package/src/alphalib/types/robots/video-subtitle.ts +61 -8
  554. package/src/alphalib/types/robots/video-thumbs.ts +0 -1
  555. package/src/alphalib/types/robots/vimeo-import.ts +0 -1
  556. package/src/alphalib/types/robots/vimeo-store.ts +14 -3
  557. package/src/alphalib/types/robots/wasabi-import.ts +0 -1
  558. package/src/alphalib/types/robots/wasabi-store.ts +0 -1
  559. package/src/alphalib/types/robots/youtube-store.ts +4 -5
  560. package/src/alphalib/types/skillFrontmatter.ts +24 -0
  561. package/src/alphalib/types/template.ts +61 -15
  562. package/src/alphalib/types/templateCredential.ts +1 -0
  563. package/src/alphalib/zodParseWithContext.ts +19 -12
  564. package/src/cli/commands/assemblies.ts +825 -505
  565. package/src/cli/commands/index.ts +6 -3
  566. package/src/cli/commands/templates.ts +6 -17
  567. package/src/cli/fileProcessingOptions.ts +294 -0
  568. package/src/cli/generateIntentDocs.ts +438 -0
  569. package/src/cli/intentCommandSpecs.ts +277 -0
  570. package/src/cli/intentCommands.ts +525 -0
  571. package/src/cli/intentFields.ts +403 -0
  572. package/src/cli/intentInputPolicy.ts +11 -0
  573. package/src/cli/intentRuntime.ts +739 -0
  574. package/src/cli/resultFiles.ts +105 -0
  575. package/src/cli/resultUrls.ts +72 -0
  576. package/src/cli/semanticIntents/imageDescribe.ts +257 -0
  577. package/src/cli/semanticIntents/imageGenerate.ts +254 -0
  578. package/src/cli/semanticIntents/index.ts +53 -0
  579. package/src/cli/semanticIntents/markdownPdf.ts +120 -0
  580. package/src/cli/semanticIntents/parsing.ts +56 -0
  581. package/src/cli/stepsInput.ts +32 -0
  582. package/src/cli.ts +5 -4
  583. package/src/ensureUniqueCounter.ts +75 -0
  584. package/src/inputFiles.ts +277 -26
  585. package/src/robots.ts +3 -3
@@ -0,0 +1,739 @@
1
+ import { statSync } from 'node:fs'
2
+ import { basename } from 'node:path'
3
+ import { Option } from 'clipanion'
4
+ import type { z } from 'zod'
5
+
6
+ import { prepareInputFiles } from '../inputFiles.ts'
7
+ import type { AssembliesCreateOptions } from './commands/assemblies.ts'
8
+ import * as assembliesCommands from './commands/assemblies.ts'
9
+ import { AuthenticatedCommand } from './commands/BaseCommand.ts'
10
+ import type { SharedCliOptionDocumentation } from './fileProcessingOptions.ts'
11
+ import {
12
+ concurrencyOption,
13
+ countProvidedInputs,
14
+ deleteAfterProcessingOption,
15
+ inputPathsOption,
16
+ printUrlsOption,
17
+ recursiveOption,
18
+ reprocessStaleOption,
19
+ singleAssemblyOption,
20
+ validateSharedFileProcessingOptions,
21
+ watchOption,
22
+ } from './fileProcessingOptions.ts'
23
+ import type { IntentFieldSpec } from './intentFields.ts'
24
+ import { coerceIntentFieldValue } from './intentFields.ts'
25
+ import type { IntentInputPolicy } from './intentInputPolicy.ts'
26
+ import { printResultUrls } from './resultUrls.ts'
27
+ import { getSemanticIntentDescriptor } from './semanticIntents/index.ts'
28
+
29
+ export interface PreparedIntentInputs {
30
+ cleanup: Array<() => Promise<void>>
31
+ hasTransientInputs: boolean
32
+ inputs: string[]
33
+ }
34
+
35
+ export interface IntentSingleStepExecutionDefinition {
36
+ fields: readonly IntentOptionDefinition[]
37
+ fixedValues: Record<string, unknown>
38
+ kind: 'single-step'
39
+ resultStepName: string
40
+ schema: z.AnyZodObject
41
+ }
42
+
43
+ export interface IntentDynamicStepExecutionDefinition {
44
+ fields: readonly IntentOptionDefinition[]
45
+ handler: string
46
+ kind: 'dynamic-step'
47
+ resultStepName: string
48
+ }
49
+
50
+ export interface IntentTemplateExecutionDefinition {
51
+ kind: 'template'
52
+ templateId: string
53
+ }
54
+
55
+ export type IntentFileExecutionDefinition =
56
+ | IntentDynamicStepExecutionDefinition
57
+ | IntentSingleStepExecutionDefinition
58
+ | IntentTemplateExecutionDefinition
59
+
60
+ export interface IntentFileCommandDefinition {
61
+ commandLabel: string
62
+ execution: IntentFileExecutionDefinition
63
+ inputPolicy: IntentInputPolicy
64
+ outputDescription: string
65
+ outputMode?: 'directory' | 'file'
66
+ }
67
+
68
+ export interface IntentNoInputCommandDefinition {
69
+ execution: IntentSingleStepExecutionDefinition
70
+ outputDescription: string
71
+ outputMode?: 'directory' | 'file'
72
+ }
73
+
74
+ export type IntentRunnerKind = 'bundled' | 'no-input' | 'standard' | 'watchable'
75
+
76
+ export interface IntentCommandDefinition {
77
+ className: string
78
+ description: string
79
+ details: string
80
+ examples: Array<[string, string]>
81
+ intentDefinition: IntentFileCommandDefinition | IntentNoInputCommandDefinition
82
+ paths: string[]
83
+ runnerKind: IntentRunnerKind
84
+ }
85
+
86
+ export interface IntentOptionDefinition extends IntentFieldSpec {
87
+ description?: string
88
+ exampleValue?: unknown
89
+ optionFlags: string
90
+ propertyName: string
91
+ required?: boolean
92
+ }
93
+
94
+ const inputBase64OptionDocumentation = {
95
+ flags: '--input-base64',
96
+ type: 'base64 | data URL',
97
+ required: 'no',
98
+ example: 'data:text/plain;base64,SGVsbG8=',
99
+ description: 'Provide base64-encoded input content directly',
100
+ } as const satisfies SharedCliOptionDocumentation
101
+
102
+ export function getInputBase64OptionDocumentation(): SharedCliOptionDocumentation {
103
+ return inputBase64OptionDocumentation
104
+ }
105
+
106
+ function inputBase64Option(): string[] {
107
+ return Option.Array(inputBase64OptionDocumentation.flags, {
108
+ description: inputBase64OptionDocumentation.description,
109
+ }) as unknown as string[]
110
+ }
111
+
112
+ function isHttpUrl(value: string): boolean {
113
+ try {
114
+ const url = new URL(value)
115
+ return url.protocol === 'http:' || url.protocol === 'https:'
116
+ } catch {
117
+ return false
118
+ }
119
+ }
120
+
121
+ function parseBase64DataUrl(
122
+ value: string,
123
+ ): { mediaType: string | null; payload: string; trimmed: string } | null {
124
+ const trimmed = value.trim()
125
+ const marker = ';base64,'
126
+ const markerIndex = trimmed.indexOf(marker)
127
+ if (!trimmed.startsWith('data:') || markerIndex === -1) {
128
+ return null
129
+ }
130
+
131
+ return {
132
+ trimmed,
133
+ mediaType: trimmed.slice('data:'.length, markerIndex).split(';')[0]?.toLowerCase() ?? null,
134
+ payload: trimmed.slice(markerIndex + marker.length),
135
+ }
136
+ }
137
+
138
+ function normalizeBase64Value(value: string): string {
139
+ const parsed = parseBase64DataUrl(value)
140
+ return parsed?.payload ?? value.trim()
141
+ }
142
+
143
+ function inferFilenameFromBase64Value(value: string, index: number): string {
144
+ const parsed = parseBase64DataUrl(value)
145
+ if (parsed == null) {
146
+ return `input-base64-${index}.bin`
147
+ }
148
+
149
+ const extensionByMediaType = {
150
+ 'text/plain': 'txt',
151
+ 'text/markdown': 'md',
152
+ 'application/pdf': 'pdf',
153
+ 'image/png': 'png',
154
+ 'image/jpeg': 'jpg',
155
+ 'image/webp': 'webp',
156
+ 'application/json': 'json',
157
+ } as const satisfies Record<string, string>
158
+ const extension =
159
+ (extensionByMediaType as Record<string, string>)[parsed.mediaType ?? ''] ?? 'bin'
160
+
161
+ return `input-base64-${index}.${extension}`
162
+ }
163
+
164
+ export async function prepareIntentInputs({
165
+ inputBase64Values,
166
+ inputValues,
167
+ }: {
168
+ inputBase64Values: string[]
169
+ inputValues: string[]
170
+ }): Promise<PreparedIntentInputs> {
171
+ const preparedOrder: string[] = []
172
+ const syntheticInputs: Array<
173
+ | {
174
+ base64: string
175
+ field: string
176
+ filename: string
177
+ kind: 'base64'
178
+ }
179
+ | {
180
+ field: string
181
+ kind: 'url'
182
+ url: string
183
+ }
184
+ > = []
185
+
186
+ for (const value of inputValues) {
187
+ if (!isHttpUrl(value)) {
188
+ preparedOrder.push(value)
189
+ continue
190
+ }
191
+
192
+ const field = `input_url_${syntheticInputs.length + 1}`
193
+ syntheticInputs.push({
194
+ kind: 'url',
195
+ field,
196
+ url: value,
197
+ })
198
+ preparedOrder.push(field)
199
+ }
200
+
201
+ for (const [index, value] of inputBase64Values.entries()) {
202
+ const field = `input_base64_${index + 1}`
203
+ const filename = inferFilenameFromBase64Value(value, index + 1)
204
+ syntheticInputs.push({
205
+ kind: 'base64',
206
+ field,
207
+ filename,
208
+ base64: normalizeBase64Value(value),
209
+ })
210
+ preparedOrder.push(field)
211
+ }
212
+
213
+ if (syntheticInputs.length === 0) {
214
+ return {
215
+ cleanup: [],
216
+ hasTransientInputs: false,
217
+ inputs: preparedOrder,
218
+ }
219
+ }
220
+
221
+ const prepared = await prepareInputFiles({
222
+ inputFiles: syntheticInputs.map((input) => {
223
+ if (input.kind === 'url') {
224
+ return {
225
+ kind: 'url' as const,
226
+ field: input.field,
227
+ url: input.url,
228
+ filename: basename(new URL(input.url).pathname) || undefined,
229
+ }
230
+ }
231
+
232
+ return {
233
+ kind: 'base64' as const,
234
+ field: input.field,
235
+ base64: input.base64,
236
+ filename: input.filename,
237
+ }
238
+ }),
239
+ base64Strategy: 'tempfile',
240
+ allowPrivateUrls: false,
241
+ urlStrategy: 'download',
242
+ })
243
+
244
+ const inputs = preparedOrder.map((value) => prepared.files[value] ?? value)
245
+
246
+ return {
247
+ cleanup: prepared.cleanup,
248
+ hasTransientInputs: true,
249
+ inputs,
250
+ }
251
+ }
252
+
253
+ function parseIntentStep<TSchema extends z.AnyZodObject>({
254
+ fields,
255
+ fixedValues,
256
+ rawValues,
257
+ schema,
258
+ }: {
259
+ fields: readonly IntentFieldSpec[]
260
+ fixedValues: Record<string, unknown>
261
+ rawValues: Record<string, unknown>
262
+ schema: TSchema
263
+ }): z.input<TSchema> {
264
+ const input: Record<string, unknown> = { ...fixedValues }
265
+
266
+ for (const fieldSpec of fields) {
267
+ const rawValue = rawValues[fieldSpec.name]
268
+ if (rawValue == null) continue
269
+ const fieldSchema = schema.shape[fieldSpec.name]
270
+ input[fieldSpec.name] = coerceIntentFieldValue(fieldSpec.kind, rawValue, fieldSchema)
271
+ }
272
+
273
+ const parsed = schema.parse(input) as Record<string, unknown>
274
+ const normalizedInput: Record<string, unknown> = { ...fixedValues }
275
+
276
+ for (const fieldSpec of fields) {
277
+ const rawValue = rawValues[fieldSpec.name]
278
+ if (rawValue == null) continue
279
+ normalizedInput[fieldSpec.name] = parsed[fieldSpec.name]
280
+ }
281
+
282
+ return normalizedInput as z.input<TSchema>
283
+ }
284
+
285
+ function resolveSingleStepFixedValues(
286
+ execution: IntentSingleStepExecutionDefinition,
287
+ inputPolicy: IntentInputPolicy,
288
+ hasInputs: boolean,
289
+ ): Record<string, unknown> {
290
+ if (!hasInputs) {
291
+ return execution.fixedValues
292
+ }
293
+
294
+ if (inputPolicy.kind !== 'optional' || inputPolicy.attachUseWhenInputsProvided !== true) {
295
+ return execution.fixedValues
296
+ }
297
+
298
+ return {
299
+ ...execution.fixedValues,
300
+ use: ':original',
301
+ }
302
+ }
303
+
304
+ function createSingleStep(
305
+ execution: IntentSingleStepExecutionDefinition,
306
+ inputPolicy: IntentInputPolicy,
307
+ rawValues: Record<string, unknown>,
308
+ hasInputs: boolean,
309
+ ): z.input<typeof execution.schema> {
310
+ return parseIntentStep({
311
+ schema: execution.schema,
312
+ fixedValues: resolveSingleStepFixedValues(execution, inputPolicy, hasInputs),
313
+ fields: execution.fields,
314
+ rawValues,
315
+ })
316
+ }
317
+
318
+ function createDynamicIntentStep(
319
+ execution: IntentDynamicStepExecutionDefinition,
320
+ rawValues: Record<string, unknown>,
321
+ hasInputs: boolean,
322
+ ): Record<string, unknown> {
323
+ return getSemanticIntentDescriptor(execution.handler).createStep(rawValues, { hasInputs })
324
+ }
325
+
326
+ function requiresLocalInput(
327
+ inputPolicy: IntentInputPolicy,
328
+ rawValues: Record<string, unknown>,
329
+ ): boolean {
330
+ if (inputPolicy.kind === 'required') {
331
+ return true
332
+ }
333
+
334
+ return rawValues[inputPolicy.field] == null
335
+ }
336
+
337
+ async function executeIntentCommand({
338
+ client,
339
+ definition,
340
+ output,
341
+ outputPath,
342
+ printUrls,
343
+ rawValues,
344
+ createOptions,
345
+ }: {
346
+ client: AuthenticatedCommand['client']
347
+ createOptions: Omit<AssembliesCreateOptions, 'output' | 'steps' | 'stepsData' | 'template'>
348
+ definition: IntentFileCommandDefinition | IntentNoInputCommandDefinition
349
+ output: AuthenticatedCommand['output']
350
+ outputPath?: string
351
+ printUrls: boolean
352
+ rawValues: Record<string, unknown>
353
+ }): Promise<number | undefined> {
354
+ const inputPolicy: IntentInputPolicy =
355
+ 'inputPolicy' in definition ? definition.inputPolicy : { kind: 'required' }
356
+ const executionOptions =
357
+ definition.execution.kind === 'template'
358
+ ? {
359
+ template: definition.execution.templateId,
360
+ }
361
+ : {
362
+ stepsData: {
363
+ [definition.execution.resultStepName]:
364
+ definition.execution.kind === 'single-step'
365
+ ? createSingleStep(
366
+ definition.execution,
367
+ inputPolicy,
368
+ rawValues,
369
+ createOptions.inputs.length > 0,
370
+ )
371
+ : createDynamicIntentStep(
372
+ definition.execution,
373
+ rawValues,
374
+ createOptions.inputs.length > 0,
375
+ ),
376
+ } as AssembliesCreateOptions['stepsData'],
377
+ }
378
+
379
+ const { hasFailures, resultUrls } = await assembliesCommands.create(output, client, {
380
+ ...createOptions,
381
+ output: outputPath ?? null,
382
+ outputMode: definition.outputMode,
383
+ ...executionOptions,
384
+ })
385
+ if (printUrls) {
386
+ printResultUrls(output, resultUrls)
387
+ }
388
+ return hasFailures ? 1 : undefined
389
+ }
390
+
391
+ abstract class GeneratedIntentCommandBase extends AuthenticatedCommand {
392
+ declare static intentDefinition: IntentFileCommandDefinition | IntentNoInputCommandDefinition
393
+
394
+ outputPath = Option.String('--out,-o', {
395
+ description: this.getOutputDescription(),
396
+ })
397
+
398
+ printUrls = printUrlsOption()
399
+
400
+ protected getIntentDefinition(): IntentFileCommandDefinition | IntentNoInputCommandDefinition {
401
+ const commandClass = this.constructor as unknown as typeof GeneratedIntentCommandBase
402
+ return commandClass.intentDefinition
403
+ }
404
+
405
+ protected getIntentRawValues(): Record<string, unknown> {
406
+ return readIntentRawValues(this, getIntentOptionDefinitions(this.getIntentDefinition()))
407
+ }
408
+
409
+ private getOutputDescription(): string {
410
+ return this.getIntentDefinition().outputDescription
411
+ }
412
+
413
+ protected validateOutputChoice(): number | undefined {
414
+ if (this.outputPath == null && !this.printUrls) {
415
+ this.output.error('Specify at least one of --out or --print-urls')
416
+ return 1
417
+ }
418
+
419
+ return undefined
420
+ }
421
+ }
422
+
423
+ export abstract class GeneratedNoInputIntentCommand extends GeneratedIntentCommandBase {
424
+ protected override async run(): Promise<number | undefined> {
425
+ const outputValidationError = this.validateOutputChoice()
426
+ if (outputValidationError != null) {
427
+ return outputValidationError
428
+ }
429
+
430
+ return await executeIntentCommand({
431
+ client: this.client,
432
+ createOptions: {
433
+ inputs: [],
434
+ },
435
+ definition: this.getIntentDefinition() as IntentNoInputCommandDefinition,
436
+ output: this.output,
437
+ outputPath: this.outputPath,
438
+ printUrls: this.printUrls ?? false,
439
+ rawValues: this.getIntentRawValues(),
440
+ })
441
+ }
442
+ }
443
+
444
+ export function getIntentOptionDefinitions(
445
+ definition: IntentFileCommandDefinition | IntentNoInputCommandDefinition,
446
+ ): readonly IntentOptionDefinition[] {
447
+ if (definition.execution.kind !== 'single-step' && definition.execution.kind !== 'dynamic-step') {
448
+ return []
449
+ }
450
+
451
+ return definition.execution.fields
452
+ }
453
+
454
+ function readIntentRawValues(
455
+ command: object,
456
+ fieldDefinitions: readonly IntentOptionDefinition[],
457
+ ): Record<string, unknown> {
458
+ const rawValues: Record<string, unknown> = {}
459
+
460
+ for (const fieldDefinition of fieldDefinitions) {
461
+ rawValues[fieldDefinition.name] = (command as Record<string, unknown>)[
462
+ fieldDefinition.propertyName
463
+ ]
464
+ }
465
+
466
+ return rawValues
467
+ }
468
+
469
+ abstract class GeneratedFileIntentCommandBase extends GeneratedIntentCommandBase {
470
+ inputs = inputPathsOption('Provide an input path, directory, URL, or - for stdin')
471
+
472
+ inputBase64 = inputBase64Option()
473
+
474
+ recursive = recursiveOption()
475
+
476
+ deleteAfterProcessing = deleteAfterProcessingOption()
477
+
478
+ reprocessStale = reprocessStaleOption()
479
+
480
+ protected override getIntentDefinition(): IntentFileCommandDefinition {
481
+ return super.getIntentDefinition() as IntentFileCommandDefinition
482
+ }
483
+
484
+ protected async prepareInputs(): Promise<PreparedIntentInputs> {
485
+ return await prepareIntentInputs({
486
+ inputValues: this.inputs ?? [],
487
+ inputBase64Values: this.inputBase64 ?? [],
488
+ })
489
+ }
490
+
491
+ protected getCreateOptions(
492
+ inputs: string[],
493
+ ): Omit<AssembliesCreateOptions, 'output' | 'steps' | 'stepsData' | 'template'> {
494
+ return {
495
+ del: this.deleteAfterProcessing,
496
+ inputs,
497
+ reprocessStale: this.reprocessStale,
498
+ recursive: this.recursive,
499
+ }
500
+ }
501
+
502
+ protected getProvidedInputCount(): number {
503
+ return countProvidedInputs({
504
+ inputs: this.inputs,
505
+ inputBase64: this.inputBase64,
506
+ })
507
+ }
508
+
509
+ protected hasTransientInputSources(): boolean {
510
+ return (
511
+ (this.inputs?.some((input) => isHttpUrl(input)) ?? false) ||
512
+ (this.inputBase64?.length ?? 0) > 0
513
+ )
514
+ }
515
+
516
+ protected resolveOutputMode(): 'directory' | 'file' | undefined {
517
+ if (this.getIntentDefinition().outputMode != null) {
518
+ return this.getIntentDefinition().outputMode
519
+ }
520
+
521
+ if (this.outputPath == null) {
522
+ return undefined
523
+ }
524
+
525
+ try {
526
+ return statSync(this.outputPath).isDirectory() ? 'directory' : 'file'
527
+ } catch {
528
+ return 'file'
529
+ }
530
+ }
531
+
532
+ protected isDirectoryOutputTarget(): boolean {
533
+ return this.resolveOutputMode() === 'directory'
534
+ }
535
+
536
+ protected validateInputPresence(rawValues: Record<string, unknown>): number | undefined {
537
+ const intentDefinition = this.getIntentDefinition()
538
+ const inputCount = this.getProvidedInputCount()
539
+ if (inputCount !== 0) {
540
+ return undefined
541
+ }
542
+
543
+ if (!requiresLocalInput(intentDefinition.inputPolicy, rawValues)) {
544
+ return undefined
545
+ }
546
+
547
+ if (intentDefinition.inputPolicy.kind === 'required') {
548
+ this.output.error(`${intentDefinition.commandLabel} requires --input or --input-base64`)
549
+ return 1
550
+ }
551
+
552
+ this.output.error(
553
+ `${intentDefinition.commandLabel} requires --input or --${intentDefinition.inputPolicy.field.replaceAll('_', '-')}`,
554
+ )
555
+ return 1
556
+ }
557
+
558
+ protected validateBeforePreparingInputs(rawValues: Record<string, unknown>): number | undefined {
559
+ const outputValidationError = this.validateOutputChoice()
560
+ if (outputValidationError != null) {
561
+ return outputValidationError
562
+ }
563
+
564
+ const validationError = this.validateInputPresence(rawValues)
565
+ if (validationError != null) {
566
+ return validationError
567
+ }
568
+
569
+ const execution = this.getIntentDefinition().execution
570
+ if (execution.kind === 'dynamic-step') {
571
+ createDynamicIntentStep(execution, rawValues, this.getProvidedInputCount() > 0)
572
+ }
573
+
574
+ return undefined
575
+ }
576
+
577
+ protected validatePreparedInputs(_preparedInputs: PreparedIntentInputs): number | undefined {
578
+ return undefined
579
+ }
580
+
581
+ protected async executePreparedInputs(
582
+ rawValues: Record<string, unknown>,
583
+ preparedInputs: PreparedIntentInputs,
584
+ ): Promise<number | undefined> {
585
+ let effectivePreparedInputs = preparedInputs
586
+ const execution = this.getIntentDefinition().execution
587
+ if (execution.kind === 'dynamic-step') {
588
+ const descriptor = getSemanticIntentDescriptor(execution.handler)
589
+ if (descriptor.prepareInputs != null) {
590
+ effectivePreparedInputs = await descriptor.prepareInputs(preparedInputs, rawValues)
591
+ }
592
+ }
593
+
594
+ return await executeIntentCommand({
595
+ client: this.client,
596
+ createOptions: this.getCreateOptions(effectivePreparedInputs.inputs),
597
+ definition: this.getIntentDefinition(),
598
+ output: this.output,
599
+ outputPath: this.outputPath,
600
+ printUrls: this.printUrls ?? false,
601
+ rawValues,
602
+ })
603
+ }
604
+
605
+ protected override async run(): Promise<number | undefined> {
606
+ const rawValues = this.getIntentRawValues()
607
+ const validationError = this.validateBeforePreparingInputs(rawValues)
608
+ if (validationError != null) {
609
+ return validationError
610
+ }
611
+
612
+ const preparedInputs = await this.prepareInputs()
613
+ try {
614
+ const preparedInputError = this.validatePreparedInputs(preparedInputs)
615
+ if (preparedInputError != null) {
616
+ return preparedInputError
617
+ }
618
+
619
+ return await this.executePreparedInputs(rawValues, preparedInputs)
620
+ } finally {
621
+ await Promise.all(preparedInputs.cleanup.map((cleanup) => cleanup()))
622
+ }
623
+ }
624
+ }
625
+
626
+ export abstract class GeneratedWatchableFileIntentCommand extends GeneratedFileIntentCommandBase {
627
+ watch = watchOption()
628
+
629
+ concurrency = concurrencyOption()
630
+
631
+ protected override getCreateOptions(
632
+ inputs: string[],
633
+ ): Omit<AssembliesCreateOptions, 'output' | 'steps' | 'stepsData' | 'template'> {
634
+ return {
635
+ ...super.getCreateOptions(inputs),
636
+ concurrency: this.concurrency,
637
+ watch: this.watch,
638
+ }
639
+ }
640
+
641
+ protected override validateBeforePreparingInputs(
642
+ rawValues: Record<string, unknown>,
643
+ ): number | undefined {
644
+ const validationError = super.validateBeforePreparingInputs(rawValues)
645
+ if (validationError != null) {
646
+ return validationError
647
+ }
648
+
649
+ const sharedValidationError = validateSharedFileProcessingOptions({
650
+ explicitInputCount: this.getProvidedInputCount(),
651
+ singleAssembly: this.getSingleAssemblyEnabled(),
652
+ watch: this.watch,
653
+ watchRequiresInputsMessage: `${this.getIntentDefinition().commandLabel} --watch requires --input or --input-base64`,
654
+ })
655
+ if (sharedValidationError != null) {
656
+ this.output.error(sharedValidationError)
657
+ return 1
658
+ }
659
+
660
+ if (this.watch && this.hasTransientInputSources()) {
661
+ this.output.error('--watch is only supported for filesystem inputs')
662
+ return 1
663
+ }
664
+
665
+ return undefined
666
+ }
667
+
668
+ protected getSingleAssemblyEnabled(): boolean {
669
+ return false
670
+ }
671
+
672
+ protected override validatePreparedInputs(
673
+ preparedInputs: PreparedIntentInputs,
674
+ ): number | undefined {
675
+ if (this.watch && preparedInputs.hasTransientInputs) {
676
+ this.output.error('--watch is only supported for filesystem inputs')
677
+ return 1
678
+ }
679
+ return undefined
680
+ }
681
+ }
682
+
683
+ export abstract class GeneratedStandardFileIntentCommand extends GeneratedWatchableFileIntentCommand {
684
+ singleAssembly = singleAssemblyOption()
685
+
686
+ protected override getSingleAssemblyEnabled(): boolean {
687
+ return this.singleAssembly
688
+ }
689
+
690
+ protected override getCreateOptions(
691
+ inputs: string[],
692
+ ): Omit<AssembliesCreateOptions, 'output' | 'steps' | 'stepsData' | 'template'> {
693
+ return {
694
+ ...super.getCreateOptions(inputs),
695
+ singleAssembly: this.singleAssembly,
696
+ }
697
+ }
698
+
699
+ protected override validateBeforePreparingInputs(
700
+ rawValues: Record<string, unknown>,
701
+ ): number | undefined {
702
+ const validationError = super.validateBeforePreparingInputs(rawValues)
703
+ if (validationError != null) {
704
+ return validationError
705
+ }
706
+
707
+ if (
708
+ this.singleAssembly &&
709
+ (this.getProvidedInputCount() > 1 ||
710
+ this.inputs.some((inputPath) => {
711
+ try {
712
+ return statSync(inputPath).isDirectory()
713
+ } catch {
714
+ return false
715
+ }
716
+ })) &&
717
+ this.outputPath != null &&
718
+ !this.isDirectoryOutputTarget()
719
+ ) {
720
+ this.output.error(
721
+ 'Output must be a directory when using --single-assembly with multiple inputs',
722
+ )
723
+ return 1
724
+ }
725
+
726
+ return undefined
727
+ }
728
+ }
729
+
730
+ export abstract class GeneratedBundledFileIntentCommand extends GeneratedFileIntentCommandBase {
731
+ protected override getCreateOptions(
732
+ inputs: string[],
733
+ ): Omit<AssembliesCreateOptions, 'output' | 'steps' | 'stepsData' | 'template'> {
734
+ return {
735
+ ...super.getCreateOptions(inputs),
736
+ singleAssembly: true,
737
+ }
738
+ }
739
+ }