@nodetool-ai/websocket 0.7.0-rc.23 → 0.8.2

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 (1101) hide show
  1. package/README.md +50 -0
  2. package/dist/.nodetool-build-stamp +1 -0
  3. package/dist/agent/run-node-tool.d.ts +39 -0
  4. package/dist/agent/run-node-tool.d.ts.map +1 -0
  5. package/dist/agent/run-node-tool.js +55 -0
  6. package/dist/agent/run-node-tool.js.map +1 -0
  7. package/dist/chat-prediction-forwarder.d.ts +13 -0
  8. package/dist/chat-prediction-forwarder.d.ts.map +1 -0
  9. package/dist/chat-prediction-forwarder.js +22 -0
  10. package/dist/chat-prediction-forwarder.js.map +1 -0
  11. package/dist/chat-tool-call-repair.d.ts +45 -0
  12. package/dist/chat-tool-call-repair.d.ts.map +1 -0
  13. package/dist/chat-tool-call-repair.js +100 -0
  14. package/dist/chat-tool-call-repair.js.map +1 -0
  15. package/dist/chat-turn-registry.d.ts +169 -0
  16. package/dist/chat-turn-registry.d.ts.map +1 -0
  17. package/dist/chat-turn-registry.js +326 -0
  18. package/dist/chat-turn-registry.js.map +1 -0
  19. package/dist/collection-api.d.ts +2 -2
  20. package/dist/collection-api.d.ts.map +1 -1
  21. package/dist/collection-api.js +82 -14
  22. package/dist/collection-api.js.map +1 -1
  23. package/dist/configured-providers.d.ts +52 -0
  24. package/dist/configured-providers.d.ts.map +1 -0
  25. package/dist/configured-providers.js +85 -0
  26. package/dist/configured-providers.js.map +1 -0
  27. package/dist/cors.d.ts +22 -0
  28. package/dist/cors.d.ts.map +1 -0
  29. package/dist/cors.js +91 -0
  30. package/dist/cors.js.map +1 -0
  31. package/dist/credit-gate.d.ts +36 -0
  32. package/dist/credit-gate.d.ts.map +1 -0
  33. package/dist/credit-gate.js +76 -0
  34. package/dist/credit-gate.js.map +1 -0
  35. package/dist/custom-providers.d.ts +40 -0
  36. package/dist/custom-providers.d.ts.map +1 -0
  37. package/dist/custom-providers.js +134 -0
  38. package/dist/custom-providers.js.map +1 -0
  39. package/dist/debug-sessions.d.ts +10 -0
  40. package/dist/debug-sessions.d.ts.map +1 -0
  41. package/dist/debug-sessions.js +9 -0
  42. package/dist/debug-sessions.js.map +1 -0
  43. package/dist/drain.d.ts +34 -0
  44. package/dist/drain.d.ts.map +1 -0
  45. package/dist/drain.js +68 -0
  46. package/dist/drain.js.map +1 -0
  47. package/dist/e2e-server.d.ts +30 -0
  48. package/dist/e2e-server.d.ts.map +1 -0
  49. package/dist/e2e-server.js +111 -0
  50. package/dist/e2e-server.js.map +1 -0
  51. package/dist/error-traces.d.ts +56 -0
  52. package/dist/error-traces.d.ts.map +1 -0
  53. package/dist/error-traces.js +179 -0
  54. package/dist/error-traces.js.map +1 -0
  55. package/dist/example-workflows.d.ts +20 -0
  56. package/dist/example-workflows.d.ts.map +1 -0
  57. package/dist/example-workflows.js +123 -0
  58. package/dist/example-workflows.js.map +1 -0
  59. package/dist/external-mcp.d.ts +58 -0
  60. package/dist/external-mcp.d.ts.map +1 -0
  61. package/dist/external-mcp.js +288 -0
  62. package/dist/external-mcp.js.map +1 -0
  63. package/dist/fake-runtime.d.ts +114 -0
  64. package/dist/fake-runtime.d.ts.map +1 -0
  65. package/dist/fake-runtime.js +307 -0
  66. package/dist/fake-runtime.js.map +1 -0
  67. package/dist/file-api.d.ts +4 -7
  68. package/dist/file-api.d.ts.map +1 -1
  69. package/dist/file-api.js +122 -39
  70. package/dist/file-api.js.map +1 -1
  71. package/dist/frontend-renderer-registry.d.ts +75 -0
  72. package/dist/frontend-renderer-registry.d.ts.map +1 -0
  73. package/dist/frontend-renderer-registry.js +111 -0
  74. package/dist/frontend-renderer-registry.js.map +1 -0
  75. package/dist/generation-recovery.d.ts +13 -0
  76. package/dist/generation-recovery.d.ts.map +1 -0
  77. package/dist/generation-recovery.js +219 -0
  78. package/dist/generation-recovery.js.map +1 -0
  79. package/dist/headless-job-runner.d.ts +71 -0
  80. package/dist/headless-job-runner.d.ts.map +1 -0
  81. package/dist/headless-job-runner.js +198 -0
  82. package/dist/headless-job-runner.js.map +1 -0
  83. package/dist/http-api.d.ts +157 -24
  84. package/dist/http-api.d.ts.map +1 -1
  85. package/dist/http-api.js +628 -646
  86. package/dist/http-api.js.map +1 -1
  87. package/dist/http-body-schemas.d.ts +109 -0
  88. package/dist/http-body-schemas.d.ts.map +1 -0
  89. package/dist/http-body-schemas.js +146 -0
  90. package/dist/http-body-schemas.js.map +1 -0
  91. package/dist/index.d.ts +10 -3
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +10 -3
  94. package/dist/index.js.map +1 -1
  95. package/dist/interrupted-jobs.d.ts +14 -0
  96. package/dist/interrupted-jobs.d.ts.map +1 -0
  97. package/dist/interrupted-jobs.js +28 -0
  98. package/dist/interrupted-jobs.js.map +1 -0
  99. package/dist/job-control.d.ts +57 -0
  100. package/dist/job-control.d.ts.map +1 -0
  101. package/dist/job-control.js +134 -0
  102. package/dist/job-control.js.map +1 -0
  103. package/dist/job-queue.d.ts +47 -0
  104. package/dist/job-queue.d.ts.map +1 -0
  105. package/dist/job-queue.js +52 -0
  106. package/dist/job-queue.js.map +1 -0
  107. package/dist/job-run-registry.d.ts +176 -0
  108. package/dist/job-run-registry.d.ts.map +1 -0
  109. package/dist/job-run-registry.js +312 -0
  110. package/dist/job-run-registry.js.map +1 -0
  111. package/dist/lib/app-build-service.d.ts +16 -0
  112. package/dist/lib/app-build-service.d.ts.map +1 -0
  113. package/dist/lib/app-build-service.js +39 -0
  114. package/dist/lib/app-build-service.js.map +1 -0
  115. package/dist/lib/app-debug-service.d.ts +16 -0
  116. package/dist/lib/app-debug-service.d.ts.map +1 -0
  117. package/dist/lib/app-debug-service.js +48 -0
  118. package/dist/lib/app-debug-service.js.map +1 -0
  119. package/dist/lib/app-deployment-service.d.ts +82 -0
  120. package/dist/lib/app-deployment-service.d.ts.map +1 -0
  121. package/dist/lib/app-deployment-service.js +282 -0
  122. package/dist/lib/app-deployment-service.js.map +1 -0
  123. package/dist/lib/app-instances-service.d.ts +1284 -0
  124. package/dist/lib/app-instances-service.d.ts.map +1 -0
  125. package/dist/lib/app-instances-service.js +378 -0
  126. package/dist/lib/app-instances-service.js.map +1 -0
  127. package/dist/lib/app-run-cancellation.d.ts +4 -0
  128. package/dist/lib/app-run-cancellation.d.ts.map +1 -0
  129. package/dist/lib/app-run-cancellation.js +28 -0
  130. package/dist/lib/app-run-cancellation.js.map +1 -0
  131. package/dist/lib/app-run-server.d.ts +7 -0
  132. package/dist/lib/app-run-server.d.ts.map +1 -0
  133. package/dist/lib/app-run-server.js +6 -0
  134. package/dist/lib/app-run-server.js.map +1 -0
  135. package/dist/lib/app-session-scope.d.ts +91 -0
  136. package/dist/lib/app-session-scope.d.ts.map +1 -0
  137. package/dist/lib/app-session-scope.js +91 -0
  138. package/dist/lib/app-session-scope.js.map +1 -0
  139. package/dist/lib/applications-service.d.ts +354 -0
  140. package/dist/lib/applications-service.d.ts.map +1 -0
  141. package/dist/lib/applications-service.js +507 -0
  142. package/dist/lib/applications-service.js.map +1 -0
  143. package/dist/lib/asset-duration.d.ts +7 -0
  144. package/dist/lib/asset-duration.d.ts.map +1 -0
  145. package/dist/lib/asset-duration.js +24 -0
  146. package/dist/lib/asset-duration.js.map +1 -0
  147. package/dist/lib/asset-export.d.ts +34 -0
  148. package/dist/lib/asset-export.d.ts.map +1 -0
  149. package/dist/lib/asset-export.js +113 -0
  150. package/dist/lib/asset-export.js.map +1 -0
  151. package/dist/lib/asset-model-interface.d.ts +41 -0
  152. package/dist/lib/asset-model-interface.d.ts.map +1 -0
  153. package/dist/lib/asset-model-interface.js +74 -0
  154. package/dist/lib/asset-model-interface.js.map +1 -0
  155. package/dist/lib/asset-paths.d.ts +49 -1
  156. package/dist/lib/asset-paths.d.ts.map +1 -1
  157. package/dist/lib/asset-paths.js +127 -31
  158. package/dist/lib/asset-paths.js.map +1 -1
  159. package/dist/lib/asset-response.d.ts +12 -0
  160. package/dist/lib/asset-response.d.ts.map +1 -0
  161. package/dist/lib/asset-response.js +89 -0
  162. package/dist/lib/asset-response.js.map +1 -0
  163. package/dist/lib/audio-peaks.d.ts +23 -0
  164. package/dist/lib/audio-peaks.d.ts.map +1 -0
  165. package/dist/lib/audio-peaks.js +335 -0
  166. package/dist/lib/audio-peaks.js.map +1 -0
  167. package/dist/lib/bridge.d.ts +9 -1
  168. package/dist/lib/bridge.d.ts.map +1 -1
  169. package/dist/lib/bridge.js +27 -4
  170. package/dist/lib/bridge.js.map +1 -1
  171. package/dist/lib/compression.d.ts +3 -0
  172. package/dist/lib/compression.d.ts.map +1 -0
  173. package/dist/lib/compression.js +3 -0
  174. package/dist/lib/compression.js.map +1 -0
  175. package/dist/lib/document-model-interfaces.d.ts +30 -0
  176. package/dist/lib/document-model-interfaces.d.ts.map +1 -0
  177. package/dist/lib/document-model-interfaces.js +296 -0
  178. package/dist/lib/document-model-interfaces.js.map +1 -0
  179. package/dist/lib/env-config.d.ts +9 -0
  180. package/dist/lib/env-config.d.ts.map +1 -0
  181. package/dist/lib/env-config.js +18 -0
  182. package/dist/lib/env-config.js.map +1 -0
  183. package/dist/lib/example-apps.d.ts +52 -0
  184. package/dist/lib/example-apps.d.ts.map +1 -0
  185. package/dist/lib/example-apps.js +192 -0
  186. package/dist/lib/example-apps.js.map +1 -0
  187. package/dist/lib/example-games.d.ts +5 -0
  188. package/dist/lib/example-games.d.ts.map +1 -0
  189. package/dist/lib/example-games.js +13 -0
  190. package/dist/lib/example-games.js.map +1 -0
  191. package/dist/lib/example-recipes.d.ts +33 -0
  192. package/dist/lib/example-recipes.d.ts.map +1 -0
  193. package/dist/lib/example-recipes.js +213 -0
  194. package/dist/lib/example-recipes.js.map +1 -0
  195. package/dist/lib/example-storyboards.d.ts +40 -0
  196. package/dist/lib/example-storyboards.d.ts.map +1 -0
  197. package/dist/lib/example-storyboards.js +131 -0
  198. package/dist/lib/example-storyboards.js.map +1 -0
  199. package/dist/lib/example-thumbnail.d.ts +21 -0
  200. package/dist/lib/example-thumbnail.d.ts.map +1 -0
  201. package/dist/lib/example-thumbnail.js +50 -0
  202. package/dist/lib/example-thumbnail.js.map +1 -0
  203. package/dist/lib/example-timelines.d.ts +9 -0
  204. package/dist/lib/example-timelines.d.ts.map +1 -0
  205. package/dist/lib/example-timelines.js +25 -0
  206. package/dist/lib/example-timelines.js.map +1 -0
  207. package/dist/lib/extension-dist.d.ts +24 -0
  208. package/dist/lib/extension-dist.d.ts.map +1 -0
  209. package/dist/lib/extension-dist.js +67 -0
  210. package/dist/lib/extension-dist.js.map +1 -0
  211. package/dist/lib/external-asset-lookup.d.ts +30 -0
  212. package/dist/lib/external-asset-lookup.d.ts.map +1 -0
  213. package/dist/lib/external-asset-lookup.js +99 -0
  214. package/dist/lib/external-asset-lookup.js.map +1 -0
  215. package/dist/lib/external-assets.d.ts +13 -0
  216. package/dist/lib/external-assets.d.ts.map +1 -0
  217. package/dist/lib/external-assets.js +46 -0
  218. package/dist/lib/external-assets.js.map +1 -0
  219. package/dist/lib/fly-replay.d.ts +34 -0
  220. package/dist/lib/fly-replay.d.ts.map +1 -0
  221. package/dist/lib/fly-replay.js +111 -0
  222. package/dist/lib/fly-replay.js.map +1 -0
  223. package/dist/lib/http-rate-limit.d.ts +32 -0
  224. package/dist/lib/http-rate-limit.d.ts.map +1 -0
  225. package/dist/lib/http-rate-limit.js +47 -0
  226. package/dist/lib/http-rate-limit.js.map +1 -0
  227. package/dist/lib/http-tracing.d.ts +12 -0
  228. package/dist/lib/http-tracing.d.ts.map +1 -0
  229. package/dist/lib/http-tracing.js +81 -0
  230. package/dist/lib/http-tracing.js.map +1 -0
  231. package/dist/lib/instance-id.d.ts +25 -0
  232. package/dist/lib/instance-id.d.ts.map +1 -0
  233. package/dist/lib/instance-id.js +44 -0
  234. package/dist/lib/instance-id.js.map +1 -0
  235. package/dist/lib/link-codes.d.ts +82 -0
  236. package/dist/lib/link-codes.d.ts.map +1 -0
  237. package/dist/lib/link-codes.js +100 -0
  238. package/dist/lib/link-codes.js.map +1 -0
  239. package/dist/lib/local-asset-upload.d.ts +5 -0
  240. package/dist/lib/local-asset-upload.d.ts.map +1 -0
  241. package/dist/lib/local-asset-upload.js +69 -0
  242. package/dist/lib/local-asset-upload.js.map +1 -0
  243. package/dist/lib/local-file-access.d.ts +31 -0
  244. package/dist/lib/local-file-access.d.ts.map +1 -0
  245. package/dist/lib/local-file-access.js +169 -0
  246. package/dist/lib/local-file-access.js.map +1 -0
  247. package/dist/lib/localhost-trust.d.ts +59 -0
  248. package/dist/lib/localhost-trust.d.ts.map +1 -0
  249. package/dist/lib/localhost-trust.js +139 -0
  250. package/dist/lib/localhost-trust.js.map +1 -0
  251. package/dist/lib/mcp-mount.d.ts +25 -0
  252. package/dist/lib/mcp-mount.d.ts.map +1 -0
  253. package/dist/lib/mcp-mount.js +32 -0
  254. package/dist/lib/mcp-mount.js.map +1 -0
  255. package/dist/lib/media-size.d.ts +21 -0
  256. package/dist/lib/media-size.d.ts.map +1 -0
  257. package/dist/lib/media-size.js +48 -0
  258. package/dist/lib/media-size.js.map +1 -0
  259. package/dist/lib/media.d.ts +33 -0
  260. package/dist/lib/media.d.ts.map +1 -0
  261. package/dist/lib/media.js +110 -0
  262. package/dist/lib/media.js.map +1 -0
  263. package/dist/lib/package-asset-export.d.ts +83 -0
  264. package/dist/lib/package-asset-export.d.ts.map +1 -0
  265. package/dist/lib/package-asset-export.js +212 -0
  266. package/dist/lib/package-asset-export.js.map +1 -0
  267. package/dist/lib/package-assets.d.ts +41 -0
  268. package/dist/lib/package-assets.d.ts.map +1 -0
  269. package/dist/lib/package-assets.js +155 -0
  270. package/dist/lib/package-assets.js.map +1 -0
  271. package/dist/lib/project-delete.d.ts +11 -0
  272. package/dist/lib/project-delete.d.ts.map +1 -0
  273. package/dist/lib/project-delete.js +67 -0
  274. package/dist/lib/project-delete.js.map +1 -0
  275. package/dist/lib/project-document-copy.d.ts +31 -0
  276. package/dist/lib/project-document-copy.d.ts.map +1 -0
  277. package/dist/lib/project-document-copy.js +473 -0
  278. package/dist/lib/project-document-copy.js.map +1 -0
  279. package/dist/lib/public-app-assets.d.ts +8 -0
  280. package/dist/lib/public-app-assets.d.ts.map +1 -0
  281. package/dist/lib/public-app-assets.js +77 -0
  282. package/dist/lib/public-app-assets.js.map +1 -0
  283. package/dist/lib/public-routes.d.ts +102 -0
  284. package/dist/lib/public-routes.d.ts.map +1 -0
  285. package/dist/lib/public-routes.js +168 -0
  286. package/dist/lib/public-routes.js.map +1 -0
  287. package/dist/lib/public-workflow-share.d.ts +20 -0
  288. package/dist/lib/public-workflow-share.d.ts.map +1 -0
  289. package/dist/lib/public-workflow-share.js +45 -0
  290. package/dist/lib/public-workflow-share.js.map +1 -0
  291. package/dist/lib/run-trace-live-delivery.d.ts +25 -0
  292. package/dist/lib/run-trace-live-delivery.d.ts.map +1 -0
  293. package/dist/lib/run-trace-live-delivery.js +91 -0
  294. package/dist/lib/run-trace-live-delivery.js.map +1 -0
  295. package/dist/lib/runtime-detection.d.ts +17 -0
  296. package/dist/lib/runtime-detection.d.ts.map +1 -0
  297. package/dist/lib/runtime-detection.js +90 -0
  298. package/dist/lib/runtime-detection.js.map +1 -0
  299. package/dist/lib/storage-access.d.ts +21 -0
  300. package/dist/lib/storage-access.d.ts.map +1 -0
  301. package/dist/lib/storage-access.js +74 -0
  302. package/dist/lib/storage-access.js.map +1 -0
  303. package/dist/lib/storage.d.ts +9 -0
  304. package/dist/lib/storage.d.ts.map +1 -0
  305. package/dist/lib/storage.js +28 -0
  306. package/dist/lib/storage.js.map +1 -0
  307. package/dist/lib/storyboard-export.d.ts +64 -0
  308. package/dist/lib/storyboard-export.d.ts.map +1 -0
  309. package/dist/lib/storyboard-export.js +183 -0
  310. package/dist/lib/storyboard-export.js.map +1 -0
  311. package/dist/lib/style-presets.d.ts +34 -0
  312. package/dist/lib/style-presets.d.ts.map +1 -0
  313. package/dist/lib/style-presets.js +62 -0
  314. package/dist/lib/style-presets.js.map +1 -0
  315. package/dist/lib/temp-url-resolver.d.ts +35 -0
  316. package/dist/lib/temp-url-resolver.d.ts.map +1 -0
  317. package/dist/lib/temp-url-resolver.js +88 -0
  318. package/dist/lib/temp-url-resolver.js.map +1 -0
  319. package/dist/lib/test-ui-run-routes.d.ts +8 -0
  320. package/dist/lib/test-ui-run-routes.d.ts.map +1 -0
  321. package/dist/lib/test-ui-run-routes.js +42 -0
  322. package/dist/lib/test-ui-run-routes.js.map +1 -0
  323. package/dist/lib/thumbnail.d.ts +74 -0
  324. package/dist/lib/thumbnail.d.ts.map +1 -0
  325. package/dist/lib/thumbnail.js +305 -0
  326. package/dist/lib/thumbnail.js.map +1 -0
  327. package/dist/lib/timeline-bundle.d.ts +1821 -0
  328. package/dist/lib/timeline-bundle.d.ts.map +1 -0
  329. package/dist/lib/timeline-bundle.js +342 -0
  330. package/dist/lib/timeline-bundle.js.map +1 -0
  331. package/dist/lib/video-proxy.d.ts +114 -0
  332. package/dist/lib/video-proxy.d.ts.map +1 -0
  333. package/dist/lib/video-proxy.js +546 -0
  334. package/dist/lib/video-proxy.js.map +1 -0
  335. package/dist/lib/wire-values.d.ts +31 -0
  336. package/dist/lib/wire-values.d.ts.map +1 -0
  337. package/dist/lib/wire-values.js +49 -0
  338. package/dist/lib/wire-values.js.map +1 -0
  339. package/dist/lib/workflow-bundle.d.ts +102 -0
  340. package/dist/lib/workflow-bundle.d.ts.map +1 -0
  341. package/dist/lib/workflow-bundle.js +306 -0
  342. package/dist/lib/workflow-bundle.js.map +1 -0
  343. package/dist/lib/workflow-service.d.ts +82 -0
  344. package/dist/lib/workflow-service.d.ts.map +1 -0
  345. package/dist/lib/workflow-service.js +197 -0
  346. package/dist/lib/workflow-service.js.map +1 -0
  347. package/dist/lib/workflow-workspace.d.ts +20 -0
  348. package/dist/lib/workflow-workspace.d.ts.map +1 -0
  349. package/dist/lib/workflow-workspace.js +65 -0
  350. package/dist/lib/workflow-workspace.js.map +1 -0
  351. package/dist/lib/ws-connection-health.d.ts +10 -0
  352. package/dist/lib/ws-connection-health.d.ts.map +1 -0
  353. package/dist/lib/ws-connection-health.js +38 -0
  354. package/dist/lib/ws-connection-health.js.map +1 -0
  355. package/dist/lib/ws-rate-limit.d.ts +22 -0
  356. package/dist/lib/ws-rate-limit.d.ts.map +1 -0
  357. package/dist/lib/ws-rate-limit.js +45 -0
  358. package/dist/lib/ws-rate-limit.js.map +1 -0
  359. package/dist/lib/ws-upgrade.d.ts +40 -0
  360. package/dist/lib/ws-upgrade.d.ts.map +1 -0
  361. package/dist/lib/ws-upgrade.js +66 -0
  362. package/dist/lib/ws-upgrade.js.map +1 -0
  363. package/dist/lib/zip-stream.d.ts +46 -0
  364. package/dist/lib/zip-stream.d.ts.map +1 -0
  365. package/dist/lib/zip-stream.js +140 -0
  366. package/dist/lib/zip-stream.js.map +1 -0
  367. package/dist/mcp-agent-tools.d.ts +56 -0
  368. package/dist/mcp-agent-tools.d.ts.map +1 -0
  369. package/dist/mcp-agent-tools.js +1147 -0
  370. package/dist/mcp-agent-tools.js.map +1 -0
  371. package/dist/mcp-client-config.d.ts +64 -0
  372. package/dist/mcp-client-config.d.ts.map +1 -0
  373. package/dist/mcp-client-config.js +353 -0
  374. package/dist/mcp-client-config.js.map +1 -0
  375. package/dist/mcp-server.d.ts +56 -7
  376. package/dist/mcp-server.d.ts.map +1 -1
  377. package/dist/mcp-server.js +255 -762
  378. package/dist/mcp-server.js.map +1 -1
  379. package/dist/mcp-tool-deps.d.ts +20 -0
  380. package/dist/mcp-tool-deps.d.ts.map +1 -0
  381. package/dist/mcp-tool-deps.js +61 -0
  382. package/dist/mcp-tool-deps.js.map +1 -0
  383. package/dist/messagepack.d.ts +7 -0
  384. package/dist/messagepack.d.ts.map +1 -0
  385. package/dist/messagepack.js +19 -0
  386. package/dist/messagepack.js.map +1 -0
  387. package/dist/model-download-runtime.d.ts +9 -0
  388. package/dist/model-download-runtime.d.ts.map +1 -0
  389. package/dist/model-download-runtime.js +77 -0
  390. package/dist/model-download-runtime.js.map +1 -0
  391. package/dist/model-execution-availability.d.ts +14 -0
  392. package/dist/model-execution-availability.d.ts.map +1 -0
  393. package/dist/model-execution-availability.js +161 -0
  394. package/dist/model-execution-availability.js.map +1 -0
  395. package/dist/models-api.d.ts +61 -5
  396. package/dist/models-api.d.ts.map +1 -1
  397. package/dist/models-api.js +182 -689
  398. package/dist/models-api.js.map +1 -1
  399. package/dist/node-registry-setup.d.ts +84 -0
  400. package/dist/node-registry-setup.d.ts.map +1 -0
  401. package/dist/node-registry-setup.js +163 -0
  402. package/dist/node-registry-setup.js.map +1 -0
  403. package/dist/oauth/cimd.d.ts +28 -0
  404. package/dist/oauth/cimd.d.ts.map +1 -0
  405. package/dist/oauth/cimd.js +177 -0
  406. package/dist/oauth/cimd.js.map +1 -0
  407. package/dist/oauth/gate.d.ts +38 -0
  408. package/dist/oauth/gate.d.ts.map +1 -0
  409. package/dist/oauth/gate.js +77 -0
  410. package/dist/oauth/gate.js.map +1 -0
  411. package/dist/oauth/metadata.d.ts +35 -0
  412. package/dist/oauth/metadata.d.ts.map +1 -0
  413. package/dist/oauth/metadata.js +56 -0
  414. package/dist/oauth/metadata.js.map +1 -0
  415. package/dist/oauth/pending-store.d.ts +79 -0
  416. package/dist/oauth/pending-store.d.ts.map +1 -0
  417. package/dist/oauth/pending-store.js +133 -0
  418. package/dist/oauth/pending-store.js.map +1 -0
  419. package/dist/oauth/pkce.d.ts +16 -0
  420. package/dist/oauth/pkce.d.ts.map +1 -0
  421. package/dist/oauth/pkce.js +29 -0
  422. package/dist/oauth/pkce.js.map +1 -0
  423. package/dist/oauth/validate.d.ts +25 -0
  424. package/dist/oauth/validate.d.ts.map +1 -0
  425. package/dist/oauth/validate.js +62 -0
  426. package/dist/oauth/validate.js.map +1 -0
  427. package/dist/oauth/www-authenticate.d.ts +9 -0
  428. package/dist/oauth/www-authenticate.d.ts.map +1 -0
  429. package/dist/oauth/www-authenticate.js +33 -0
  430. package/dist/oauth/www-authenticate.js.map +1 -0
  431. package/dist/oauth-api.d.ts +19 -0
  432. package/dist/oauth-api.d.ts.map +1 -1
  433. package/dist/oauth-api.js +531 -12
  434. package/dist/oauth-api.js.map +1 -1
  435. package/dist/openai-api.d.ts.map +1 -1
  436. package/dist/openai-api.js +4 -9
  437. package/dist/openai-api.js.map +1 -1
  438. package/dist/pack-snapshot.d.ts +24 -0
  439. package/dist/pack-snapshot.d.ts.map +1 -0
  440. package/dist/pack-snapshot.js +35 -0
  441. package/dist/pack-snapshot.js.map +1 -0
  442. package/dist/plugins/websocket.d.ts +21 -4
  443. package/dist/plugins/websocket.d.ts.map +1 -1
  444. package/dist/plugins/websocket.js +106 -297
  445. package/dist/plugins/websocket.js.map +1 -1
  446. package/dist/python-bridge-gate.d.ts +28 -0
  447. package/dist/python-bridge-gate.d.ts.map +1 -0
  448. package/dist/python-bridge-gate.js +36 -0
  449. package/dist/python-bridge-gate.js.map +1 -0
  450. package/dist/resolve-media-urls.d.ts +17 -3
  451. package/dist/resolve-media-urls.d.ts.map +1 -1
  452. package/dist/resolve-media-urls.js +117 -31
  453. package/dist/resolve-media-urls.js.map +1 -1
  454. package/dist/resource-events.d.ts +28 -0
  455. package/dist/resource-events.d.ts.map +1 -0
  456. package/dist/resource-events.js +20 -0
  457. package/dist/resource-events.js.map +1 -0
  458. package/dist/routes/account.d.ts +100 -0
  459. package/dist/routes/account.d.ts.map +1 -0
  460. package/dist/routes/account.js +197 -0
  461. package/dist/routes/account.js.map +1 -0
  462. package/dist/routes/app-runs.d.ts +4 -0
  463. package/dist/routes/app-runs.d.ts.map +1 -0
  464. package/dist/routes/app-runs.js +173 -0
  465. package/dist/routes/app-runs.js.map +1 -0
  466. package/dist/routes/applications.d.ts +36 -0
  467. package/dist/routes/applications.d.ts.map +1 -0
  468. package/dist/routes/applications.js +183 -0
  469. package/dist/routes/applications.js.map +1 -0
  470. package/dist/routes/assets.d.ts +3 -3
  471. package/dist/routes/assets.d.ts.map +1 -1
  472. package/dist/routes/assets.js +78 -44
  473. package/dist/routes/assets.js.map +1 -1
  474. package/dist/routes/atlascloud-webhook.d.ts +93 -0
  475. package/dist/routes/atlascloud-webhook.d.ts.map +1 -0
  476. package/dist/routes/atlascloud-webhook.js +369 -0
  477. package/dist/routes/atlascloud-webhook.js.map +1 -0
  478. package/dist/routes/collections.d.ts.map +1 -1
  479. package/dist/routes/config.d.ts +26 -0
  480. package/dist/routes/config.d.ts.map +1 -0
  481. package/dist/routes/config.js +64 -0
  482. package/dist/routes/config.js.map +1 -0
  483. package/dist/routes/documents.d.ts +27 -0
  484. package/dist/routes/documents.d.ts.map +1 -0
  485. package/dist/routes/documents.js +155 -0
  486. package/dist/routes/documents.js.map +1 -0
  487. package/dist/routes/fal-credits.d.ts +4 -0
  488. package/dist/routes/fal-credits.d.ts.map +1 -0
  489. package/dist/routes/fal-credits.js +101 -0
  490. package/dist/routes/fal-credits.js.map +1 -0
  491. package/dist/routes/fal-pricing-estimate.d.ts +4 -0
  492. package/dist/routes/fal-pricing-estimate.d.ts.map +1 -0
  493. package/dist/routes/fal-pricing-estimate.js +114 -0
  494. package/dist/routes/fal-pricing-estimate.js.map +1 -0
  495. package/dist/routes/fal-pricing.d.ts +4 -0
  496. package/dist/routes/fal-pricing.d.ts.map +1 -0
  497. package/dist/routes/fal-pricing.js +93 -0
  498. package/dist/routes/fal-pricing.js.map +1 -0
  499. package/dist/routes/fal-webhook.d.ts +102 -0
  500. package/dist/routes/fal-webhook.d.ts.map +1 -0
  501. package/dist/routes/fal-webhook.js +379 -0
  502. package/dist/routes/fal-webhook.js.map +1 -0
  503. package/dist/routes/files.d.ts.map +1 -1
  504. package/dist/routes/files.js +4 -3
  505. package/dist/routes/files.js.map +1 -1
  506. package/dist/routes/health.d.ts +1 -0
  507. package/dist/routes/health.d.ts.map +1 -1
  508. package/dist/routes/health.js +41 -7
  509. package/dist/routes/health.js.map +1 -1
  510. package/dist/routes/integrations.d.ts +39 -0
  511. package/dist/routes/integrations.d.ts.map +1 -0
  512. package/dist/routes/integrations.js +211 -0
  513. package/dist/routes/integrations.js.map +1 -0
  514. package/dist/routes/js-scripts.d.ts +32 -0
  515. package/dist/routes/js-scripts.d.ts.map +1 -0
  516. package/dist/routes/js-scripts.js +498 -0
  517. package/dist/routes/js-scripts.js.map +1 -0
  518. package/dist/routes/kie-credits.d.ts +4 -0
  519. package/dist/routes/kie-credits.d.ts.map +1 -0
  520. package/dist/routes/kie-credits.js +93 -0
  521. package/dist/routes/kie-credits.js.map +1 -0
  522. package/dist/routes/kie-pricing.d.ts +4 -0
  523. package/dist/routes/kie-pricing.d.ts.map +1 -0
  524. package/dist/routes/kie-pricing.js +45 -0
  525. package/dist/routes/kie-pricing.js.map +1 -0
  526. package/dist/routes/kie-webhook.d.ts +4 -0
  527. package/dist/routes/kie-webhook.d.ts.map +1 -0
  528. package/dist/routes/kie-webhook.js +70 -0
  529. package/dist/routes/kie-webhook.js.map +1 -0
  530. package/dist/routes/nodes.d.ts.map +1 -1
  531. package/dist/routes/nodes.js +29 -51
  532. package/dist/routes/nodes.js.map +1 -1
  533. package/dist/routes/oauth-as.d.ts +30 -0
  534. package/dist/routes/oauth-as.d.ts.map +1 -0
  535. package/dist/routes/oauth-as.js +412 -0
  536. package/dist/routes/oauth-as.js.map +1 -0
  537. package/dist/routes/oauth.d.ts.map +1 -1
  538. package/dist/routes/openai.d.ts.map +1 -1
  539. package/dist/routes/public-apps.d.ts +27 -0
  540. package/dist/routes/public-apps.d.ts.map +1 -0
  541. package/dist/routes/public-apps.js +99 -0
  542. package/dist/routes/public-apps.js.map +1 -0
  543. package/dist/routes/public-shared-workflows.d.ts +16 -0
  544. package/dist/routes/public-shared-workflows.d.ts.map +1 -0
  545. package/dist/routes/public-shared-workflows.js +55 -0
  546. package/dist/routes/public-shared-workflows.js.map +1 -0
  547. package/dist/routes/run-spans.d.ts +4 -0
  548. package/dist/routes/run-spans.d.ts.map +1 -0
  549. package/dist/routes/run-spans.js +53 -0
  550. package/dist/routes/run-spans.js.map +1 -0
  551. package/dist/routes/sandbox-modules.d.ts +17 -0
  552. package/dist/routes/sandbox-modules.d.ts.map +1 -0
  553. package/dist/routes/sandbox-modules.js +85 -0
  554. package/dist/routes/sandbox-modules.js.map +1 -0
  555. package/dist/routes/sdk-v1.d.ts +24 -0
  556. package/dist/routes/sdk-v1.d.ts.map +1 -0
  557. package/dist/routes/sdk-v1.js +320 -0
  558. package/dist/routes/sdk-v1.js.map +1 -0
  559. package/dist/routes/storage.d.ts.map +1 -1
  560. package/dist/routes/storyboards.d.ts +16 -0
  561. package/dist/routes/storyboards.d.ts.map +1 -0
  562. package/dist/routes/storyboards.js +97 -0
  563. package/dist/routes/storyboards.js.map +1 -0
  564. package/dist/routes/timeline-animations.d.ts +23 -0
  565. package/dist/routes/timeline-animations.d.ts.map +1 -0
  566. package/dist/routes/timeline-animations.js +99 -0
  567. package/dist/routes/timeline-animations.js.map +1 -0
  568. package/dist/routes/timeline-audio-bake.d.ts +51 -0
  569. package/dist/routes/timeline-audio-bake.d.ts.map +1 -0
  570. package/dist/routes/timeline-audio-bake.js +110 -0
  571. package/dist/routes/timeline-audio-bake.js.map +1 -0
  572. package/dist/routes/timeline-fonts.d.ts +51 -0
  573. package/dist/routes/timeline-fonts.d.ts.map +1 -0
  574. package/dist/routes/timeline-fonts.js +195 -0
  575. package/dist/routes/timeline-fonts.js.map +1 -0
  576. package/dist/routes/timeline-isolate-subject.d.ts +55 -0
  577. package/dist/routes/timeline-isolate-subject.d.ts.map +1 -0
  578. package/dist/routes/timeline-isolate-subject.js +128 -0
  579. package/dist/routes/timeline-isolate-subject.js.map +1 -0
  580. package/dist/routes/timeline-track-object.d.ts +39 -0
  581. package/dist/routes/timeline-track-object.d.ts.map +1 -0
  582. package/dist/routes/timeline-track-object.js +97 -0
  583. package/dist/routes/timeline-track-object.js.map +1 -0
  584. package/dist/routes/timelines.d.ts +18 -0
  585. package/dist/routes/timelines.d.ts.map +1 -0
  586. package/dist/routes/timelines.js +191 -0
  587. package/dist/routes/timelines.js.map +1 -0
  588. package/dist/routes/workflows.d.ts +6 -9
  589. package/dist/routes/workflows.d.ts.map +1 -1
  590. package/dist/routes/workflows.js +100 -11
  591. package/dist/routes/workflows.js.map +1 -1
  592. package/dist/routes/workspace.d.ts.map +1 -1
  593. package/dist/run-supervisor.d.ts +30 -0
  594. package/dist/run-supervisor.d.ts.map +1 -0
  595. package/dist/run-supervisor.js +86 -0
  596. package/dist/run-supervisor.js.map +1 -0
  597. package/dist/sandbox-catalog.d.ts +28 -0
  598. package/dist/sandbox-catalog.d.ts.map +1 -0
  599. package/dist/sandbox-catalog.js +74 -0
  600. package/dist/sandbox-catalog.js.map +1 -0
  601. package/dist/screenshot-projects.d.ts +27 -0
  602. package/dist/screenshot-projects.d.ts.map +1 -0
  603. package/dist/screenshot-projects.js +880 -0
  604. package/dist/screenshot-projects.js.map +1 -0
  605. package/dist/screenshot-server.js +950 -47
  606. package/dist/screenshot-server.js.map +1 -1
  607. package/dist/sdk/sdk-cached-model-inventory.d.ts +21 -0
  608. package/dist/sdk/sdk-cached-model-inventory.d.ts.map +1 -0
  609. package/dist/sdk/sdk-cached-model-inventory.js +51 -0
  610. package/dist/sdk/sdk-cached-model-inventory.js.map +1 -0
  611. package/dist/sdk/sdk-capabilities-service.d.ts +32 -0
  612. package/dist/sdk/sdk-capabilities-service.d.ts.map +1 -0
  613. package/dist/sdk/sdk-capabilities-service.js +47 -0
  614. package/dist/sdk/sdk-capabilities-service.js.map +1 -0
  615. package/dist/sdk/sdk-execution-readiness-probe.d.ts +19 -0
  616. package/dist/sdk/sdk-execution-readiness-probe.d.ts.map +1 -0
  617. package/dist/sdk/sdk-execution-readiness-probe.js +90 -0
  618. package/dist/sdk/sdk-execution-readiness-probe.js.map +1 -0
  619. package/dist/sdk/sdk-execution-target-readiness.d.ts +15 -0
  620. package/dist/sdk/sdk-execution-target-readiness.d.ts.map +1 -0
  621. package/dist/sdk/sdk-execution-target-readiness.js +50 -0
  622. package/dist/sdk/sdk-execution-target-readiness.js.map +1 -0
  623. package/dist/sdk/sdk-feature-flags.d.ts +18 -0
  624. package/dist/sdk/sdk-feature-flags.d.ts.map +1 -0
  625. package/dist/sdk/sdk-feature-flags.js +30 -0
  626. package/dist/sdk/sdk-feature-flags.js.map +1 -0
  627. package/dist/sdk/sdk-huggingface-download-state.d.ts +15 -0
  628. package/dist/sdk/sdk-huggingface-download-state.d.ts.map +1 -0
  629. package/dist/sdk/sdk-huggingface-download-state.js +25 -0
  630. package/dist/sdk/sdk-huggingface-download-state.js.map +1 -0
  631. package/dist/sdk/sdk-live-runner-registry.d.ts +21 -0
  632. package/dist/sdk/sdk-live-runner-registry.d.ts.map +1 -0
  633. package/dist/sdk/sdk-live-runner-registry.js +26 -0
  634. package/dist/sdk/sdk-live-runner-registry.js.map +1 -0
  635. package/dist/sdk/sdk-model-catalog-service.d.ts +20 -0
  636. package/dist/sdk/sdk-model-catalog-service.d.ts.map +1 -0
  637. package/dist/sdk/sdk-model-catalog-service.js +219 -0
  638. package/dist/sdk/sdk-model-catalog-service.js.map +1 -0
  639. package/dist/sdk/sdk-model-download-service.d.ts +39 -0
  640. package/dist/sdk/sdk-model-download-service.d.ts.map +1 -0
  641. package/dist/sdk/sdk-model-download-service.js +277 -0
  642. package/dist/sdk/sdk-model-download-service.js.map +1 -0
  643. package/dist/sdk/sdk-model-requirement-probe.d.ts +30 -0
  644. package/dist/sdk/sdk-model-requirement-probe.d.ts.map +1 -0
  645. package/dist/sdk/sdk-model-requirement-probe.js +120 -0
  646. package/dist/sdk/sdk-model-requirement-probe.js.map +1 -0
  647. package/dist/sdk/sdk-node-package-requirement-probe.d.ts +20 -0
  648. package/dist/sdk/sdk-node-package-requirement-probe.d.ts.map +1 -0
  649. package/dist/sdk/sdk-node-package-requirement-probe.js +44 -0
  650. package/dist/sdk/sdk-node-package-requirement-probe.js.map +1 -0
  651. package/dist/sdk/sdk-node-type-inventory-service.d.ts +11 -0
  652. package/dist/sdk/sdk-node-type-inventory-service.d.ts.map +1 -0
  653. package/dist/sdk/sdk-node-type-inventory-service.js +36 -0
  654. package/dist/sdk/sdk-node-type-inventory-service.js.map +1 -0
  655. package/dist/sdk/sdk-preflight-orchestrator.d.ts +54 -0
  656. package/dist/sdk/sdk-preflight-orchestrator.d.ts.map +1 -0
  657. package/dist/sdk/sdk-preflight-orchestrator.js +63 -0
  658. package/dist/sdk/sdk-preflight-orchestrator.js.map +1 -0
  659. package/dist/sdk/sdk-preflight-requirement-resolver.d.ts +35 -0
  660. package/dist/sdk/sdk-preflight-requirement-resolver.d.ts.map +1 -0
  661. package/dist/sdk/sdk-preflight-requirement-resolver.js +67 -0
  662. package/dist/sdk/sdk-preflight-requirement-resolver.js.map +1 -0
  663. package/dist/sdk/sdk-preflight-service.d.ts +61 -0
  664. package/dist/sdk/sdk-preflight-service.d.ts.map +1 -0
  665. package/dist/sdk/sdk-preflight-service.js +104 -0
  666. package/dist/sdk/sdk-preflight-service.js.map +1 -0
  667. package/dist/sdk/sdk-preflight-workflow-source.d.ts +18 -0
  668. package/dist/sdk/sdk-preflight-workflow-source.d.ts.map +1 -0
  669. package/dist/sdk/sdk-preflight-workflow-source.js +42 -0
  670. package/dist/sdk/sdk-preflight-workflow-source.js.map +1 -0
  671. package/dist/sdk/sdk-route-policy.d.ts +3 -0
  672. package/dist/sdk/sdk-route-policy.d.ts.map +1 -0
  673. package/dist/sdk/sdk-route-policy.js +18 -0
  674. package/dist/sdk/sdk-route-policy.js.map +1 -0
  675. package/dist/sdk/sdk-runtime-capabilities-service.d.ts +60 -0
  676. package/dist/sdk/sdk-runtime-capabilities-service.d.ts.map +1 -0
  677. package/dist/sdk/sdk-runtime-capabilities-service.js +30 -0
  678. package/dist/sdk/sdk-runtime-capabilities-service.js.map +1 -0
  679. package/dist/sdk/sdk-runtime-requirement-probe.d.ts +13 -0
  680. package/dist/sdk/sdk-runtime-requirement-probe.d.ts.map +1 -0
  681. package/dist/sdk/sdk-runtime-requirement-probe.js +55 -0
  682. package/dist/sdk/sdk-runtime-requirement-probe.js.map +1 -0
  683. package/dist/sdk/sdk-static-preflight-service.d.ts +66 -0
  684. package/dist/sdk/sdk-static-preflight-service.d.ts.map +1 -0
  685. package/dist/sdk/sdk-static-preflight-service.js +492 -0
  686. package/dist/sdk/sdk-static-preflight-service.js.map +1 -0
  687. package/dist/sdk/sdk-temporary-asset-service.d.ts +18 -0
  688. package/dist/sdk/sdk-temporary-asset-service.d.ts.map +1 -0
  689. package/dist/sdk/sdk-temporary-asset-service.js +33 -0
  690. package/dist/sdk/sdk-temporary-asset-service.js.map +1 -0
  691. package/dist/sdk/sdk-temporary-asset-upload-http-handler.d.ts +9 -0
  692. package/dist/sdk/sdk-temporary-asset-upload-http-handler.d.ts.map +1 -0
  693. package/dist/sdk/sdk-temporary-asset-upload-http-handler.js +65 -0
  694. package/dist/sdk/sdk-temporary-asset-upload-http-handler.js.map +1 -0
  695. package/dist/sdk/sdk-v1-handler-map.d.ts +44 -0
  696. package/dist/sdk/sdk-v1-handler-map.d.ts.map +1 -0
  697. package/dist/sdk/sdk-v1-handler-map.js +37 -0
  698. package/dist/sdk/sdk-v1-handler-map.js.map +1 -0
  699. package/dist/sdk/sdk-v1-service-error.d.ts +21 -0
  700. package/dist/sdk/sdk-v1-service-error.d.ts.map +1 -0
  701. package/dist/sdk/sdk-v1-service-error.js +62 -0
  702. package/dist/sdk/sdk-v1-service-error.js.map +1 -0
  703. package/dist/sdk/sdk-v1-service.d.ts +74 -0
  704. package/dist/sdk/sdk-v1-service.d.ts.map +1 -0
  705. package/dist/sdk/sdk-v1-service.js +219 -0
  706. package/dist/sdk/sdk-v1-service.js.map +1 -0
  707. package/dist/sdk/sdk-worker-readiness-adapter.d.ts +22 -0
  708. package/dist/sdk/sdk-worker-readiness-adapter.d.ts.map +1 -0
  709. package/dist/sdk/sdk-worker-readiness-adapter.js +29 -0
  710. package/dist/sdk/sdk-worker-readiness-adapter.js.map +1 -0
  711. package/dist/server.js +1091 -206
  712. package/dist/server.js.map +1 -1
  713. package/dist/session/app-run-fold.d.ts +7 -0
  714. package/dist/session/app-run-fold.d.ts.map +1 -0
  715. package/dist/session/app-run-fold.js +45 -0
  716. package/dist/session/app-run-fold.js.map +1 -0
  717. package/dist/session/asset-autosave.d.ts +80 -0
  718. package/dist/session/asset-autosave.d.ts.map +1 -0
  719. package/dist/session/asset-autosave.js +456 -0
  720. package/dist/session/asset-autosave.js.map +1 -0
  721. package/dist/session/chat-compaction.d.ts +107 -0
  722. package/dist/session/chat-compaction.d.ts.map +1 -0
  723. package/dist/session/chat-compaction.js +191 -0
  724. package/dist/session/chat-compaction.js.map +1 -0
  725. package/dist/session/chat-history.d.ts +75 -0
  726. package/dist/session/chat-history.d.ts.map +1 -0
  727. package/dist/session/chat-history.js +194 -0
  728. package/dist/session/chat-history.js.map +1 -0
  729. package/dist/session/chat-prompt.d.ts +45 -0
  730. package/dist/session/chat-prompt.d.ts.map +1 -0
  731. package/dist/session/chat-prompt.js +502 -0
  732. package/dist/session/chat-prompt.js.map +1 -0
  733. package/dist/session/chat-turn.d.ts +337 -0
  734. package/dist/session/chat-turn.d.ts.map +1 -0
  735. package/dist/session/chat-turn.js +3612 -0
  736. package/dist/session/chat-turn.js.map +1 -0
  737. package/dist/session/client-session.d.ts +59 -0
  738. package/dist/session/client-session.d.ts.map +1 -0
  739. package/dist/session/client-session.js +2 -0
  740. package/dist/session/client-session.js.map +1 -0
  741. package/dist/session/commands.d.ts +133 -0
  742. package/dist/session/commands.d.ts.map +1 -0
  743. package/dist/session/commands.js +784 -0
  744. package/dist/session/commands.js.map +1 -0
  745. package/dist/session/inference.d.ts +218 -0
  746. package/dist/session/inference.d.ts.map +1 -0
  747. package/dist/session/inference.js +1143 -0
  748. package/dist/session/inference.js.map +1 -0
  749. package/dist/session/job-execution.d.ts +484 -0
  750. package/dist/session/job-execution.d.ts.map +1 -0
  751. package/dist/session/job-execution.js +2379 -0
  752. package/dist/session/job-execution.js.map +1 -0
  753. package/dist/session/media-generation.d.ts +94 -0
  754. package/dist/session/media-generation.d.ts.map +1 -0
  755. package/dist/session/media-generation.js +234 -0
  756. package/dist/session/media-generation.js.map +1 -0
  757. package/dist/session/model-interfaces.d.ts +28 -0
  758. package/dist/session/model-interfaces.d.ts.map +1 -0
  759. package/dist/session/model-interfaces.js +133 -0
  760. package/dist/session/model-interfaces.js.map +1 -0
  761. package/dist/session/sanitize.d.ts +7 -0
  762. package/dist/session/sanitize.d.ts.map +1 -0
  763. package/dist/session/sanitize.js +64 -0
  764. package/dist/session/sanitize.js.map +1 -0
  765. package/dist/settings-registry.d.ts +6 -15
  766. package/dist/settings-registry.d.ts.map +1 -1
  767. package/dist/settings-registry.js +6 -103
  768. package/dist/settings-registry.js.map +1 -1
  769. package/dist/storage-api.d.ts +20 -0
  770. package/dist/storage-api.d.ts.map +1 -1
  771. package/dist/storage-api.js +260 -77
  772. package/dist/storage-api.js.map +1 -1
  773. package/dist/storage-retention.d.ts +14 -0
  774. package/dist/storage-retention.d.ts.map +1 -0
  775. package/dist/storage-retention.js +95 -0
  776. package/dist/storage-retention.js.map +1 -0
  777. package/dist/system-stats.d.ts +52 -0
  778. package/dist/system-stats.d.ts.map +1 -0
  779. package/dist/system-stats.js +134 -0
  780. package/dist/system-stats.js.map +1 -0
  781. package/dist/test-ui-server.d.ts +46 -0
  782. package/dist/test-ui-server.d.ts.map +1 -1
  783. package/dist/test-ui-server.js +207 -42
  784. package/dist/test-ui-server.js.map +1 -1
  785. package/dist/timeline-generation-recovery.d.ts +4 -0
  786. package/dist/timeline-generation-recovery.d.ts.map +1 -0
  787. package/dist/timeline-generation-recovery.js +72 -0
  788. package/dist/timeline-generation-recovery.js.map +1 -0
  789. package/dist/triggers/boot.d.ts +73 -0
  790. package/dist/triggers/boot.d.ts.map +1 -0
  791. package/dist/triggers/boot.js +149 -0
  792. package/dist/triggers/boot.js.map +1 -0
  793. package/dist/triggers/dispatcher.d.ts +234 -0
  794. package/dist/triggers/dispatcher.d.ts.map +1 -0
  795. package/dist/triggers/dispatcher.js +525 -0
  796. package/dist/triggers/dispatcher.js.map +1 -0
  797. package/dist/triggers/file-watch.d.ts +90 -0
  798. package/dist/triggers/file-watch.d.ts.map +1 -0
  799. package/dist/triggers/file-watch.js +405 -0
  800. package/dist/triggers/file-watch.js.map +1 -0
  801. package/dist/triggers/registration-sync.d.ts +34 -0
  802. package/dist/triggers/registration-sync.d.ts.map +1 -0
  803. package/dist/triggers/registration-sync.js +162 -0
  804. package/dist/triggers/registration-sync.js.map +1 -0
  805. package/dist/triggers/schedule-timing.d.ts +52 -0
  806. package/dist/triggers/schedule-timing.d.ts.map +1 -0
  807. package/dist/triggers/schedule-timing.js +90 -0
  808. package/dist/triggers/schedule-timing.js.map +1 -0
  809. package/dist/triggers/scheduler.d.ts +55 -0
  810. package/dist/triggers/scheduler.d.ts.map +1 -0
  811. package/dist/triggers/scheduler.js +122 -0
  812. package/dist/triggers/scheduler.js.map +1 -0
  813. package/dist/triggers/settle.d.ts +66 -0
  814. package/dist/triggers/settle.d.ts.map +1 -0
  815. package/dist/triggers/settle.js +99 -0
  816. package/dist/triggers/settle.js.map +1 -0
  817. package/dist/triggers/stores.d.ts +38 -0
  818. package/dist/triggers/stores.d.ts.map +1 -0
  819. package/dist/triggers/stores.js +168 -0
  820. package/dist/triggers/stores.js.map +1 -0
  821. package/dist/triggers/webhook-route.d.ts +49 -0
  822. package/dist/triggers/webhook-route.d.ts.map +1 -0
  823. package/dist/triggers/webhook-route.js +148 -0
  824. package/dist/triggers/webhook-route.js.map +1 -0
  825. package/dist/trpc/context.d.ts +52 -5
  826. package/dist/trpc/context.d.ts.map +1 -1
  827. package/dist/trpc/context.js +4 -1
  828. package/dist/trpc/context.js.map +1 -1
  829. package/dist/trpc/error-formatter.d.ts.map +1 -1
  830. package/dist/trpc/error-formatter.js +23 -2
  831. package/dist/trpc/error-formatter.js.map +1 -1
  832. package/dist/trpc/error-logging.d.ts +24 -0
  833. package/dist/trpc/error-logging.d.ts.map +1 -0
  834. package/dist/trpc/error-logging.js +48 -0
  835. package/dist/trpc/error-logging.js.map +1 -0
  836. package/dist/trpc/index.d.ts +2 -2
  837. package/dist/trpc/index.d.ts.map +1 -1
  838. package/dist/trpc/index.js +0 -2
  839. package/dist/trpc/index.js.map +1 -1
  840. package/dist/trpc/middleware.d.ts +6 -3
  841. package/dist/trpc/middleware.d.ts.map +1 -1
  842. package/dist/trpc/router.d.ts +100 -2540
  843. package/dist/trpc/router.d.ts.map +1 -1
  844. package/dist/trpc/router.js +58 -6
  845. package/dist/trpc/router.js.map +1 -1
  846. package/dist/trpc/routers/agent-access.d.ts +149 -0
  847. package/dist/trpc/routers/agent-access.d.ts.map +1 -0
  848. package/dist/trpc/routers/agent-access.js +224 -0
  849. package/dist/trpc/routers/agent-access.js.map +1 -0
  850. package/dist/trpc/routers/app-instances.d.ts +2269 -0
  851. package/dist/trpc/routers/app-instances.d.ts.map +1 -0
  852. package/dist/trpc/routers/app-instances.js +52 -0
  853. package/dist/trpc/routers/app-instances.js.map +1 -0
  854. package/dist/trpc/routers/app-runs.d.ts +1092 -0
  855. package/dist/trpc/routers/app-runs.d.ts.map +1 -0
  856. package/dist/trpc/routers/app-runs.js +28 -0
  857. package/dist/trpc/routers/app-runs.js.map +1 -0
  858. package/dist/trpc/routers/applications.d.ts +2212 -0
  859. package/dist/trpc/routers/applications.d.ts.map +1 -0
  860. package/dist/trpc/routers/applications.js +221 -0
  861. package/dist/trpc/routers/applications.js.map +1 -0
  862. package/dist/trpc/routers/assets.d.ts +194 -42
  863. package/dist/trpc/routers/assets.d.ts.map +1 -1
  864. package/dist/trpc/routers/assets.js +503 -105
  865. package/dist/trpc/routers/assets.js.map +1 -1
  866. package/dist/trpc/routers/bug-reports.d.ts +33 -0
  867. package/dist/trpc/routers/bug-reports.d.ts.map +1 -0
  868. package/dist/trpc/routers/bug-reports.js +69 -0
  869. package/dist/trpc/routers/bug-reports.js.map +1 -0
  870. package/dist/trpc/routers/code-gen.d.ts +99 -0
  871. package/dist/trpc/routers/code-gen.d.ts.map +1 -0
  872. package/dist/trpc/routers/code-gen.js +164 -0
  873. package/dist/trpc/routers/code-gen.js.map +1 -0
  874. package/dist/trpc/routers/collections.d.ts +1 -26
  875. package/dist/trpc/routers/collections.d.ts.map +1 -1
  876. package/dist/trpc/routers/collections.js +145 -78
  877. package/dist/trpc/routers/collections.js.map +1 -1
  878. package/dist/trpc/routers/costs.d.ts +40 -96
  879. package/dist/trpc/routers/costs.d.ts.map +1 -1
  880. package/dist/trpc/routers/costs.js +14 -89
  881. package/dist/trpc/routers/costs.js.map +1 -1
  882. package/dist/trpc/routers/credits.d.ts +110 -0
  883. package/dist/trpc/routers/credits.d.ts.map +1 -0
  884. package/dist/trpc/routers/credits.js +69 -0
  885. package/dist/trpc/routers/credits.js.map +1 -0
  886. package/dist/trpc/routers/custom-providers.d.ts +88 -0
  887. package/dist/trpc/routers/custom-providers.d.ts.map +1 -0
  888. package/dist/trpc/routers/custom-providers.js +140 -0
  889. package/dist/trpc/routers/custom-providers.js.map +1 -0
  890. package/dist/trpc/routers/documents.d.ts +61 -0
  891. package/dist/trpc/routers/documents.d.ts.map +1 -0
  892. package/dist/trpc/routers/documents.js +29 -0
  893. package/dist/trpc/routers/documents.js.map +1 -0
  894. package/dist/trpc/routers/error-traces.d.ts +132 -0
  895. package/dist/trpc/routers/error-traces.d.ts.map +1 -0
  896. package/dist/trpc/routers/error-traces.js +118 -0
  897. package/dist/trpc/routers/error-traces.js.map +1 -0
  898. package/dist/trpc/routers/extension.d.ts +24 -0
  899. package/dist/trpc/routers/extension.d.ts.map +1 -0
  900. package/dist/trpc/routers/extension.js +28 -0
  901. package/dist/trpc/routers/extension.js.map +1 -0
  902. package/dist/trpc/routers/external-mcp.d.ts +108 -0
  903. package/dist/trpc/routers/external-mcp.d.ts.map +1 -0
  904. package/dist/trpc/routers/external-mcp.js +70 -0
  905. package/dist/trpc/routers/external-mcp.js.map +1 -0
  906. package/dist/trpc/routers/files.d.ts +9 -2
  907. package/dist/trpc/routers/files.d.ts.map +1 -1
  908. package/dist/trpc/routers/files.js +67 -37
  909. package/dist/trpc/routers/files.js.map +1 -1
  910. package/dist/trpc/routers/fonts.d.ts +30 -0
  911. package/dist/trpc/routers/fonts.d.ts.map +1 -0
  912. package/dist/trpc/routers/fonts.js +112 -0
  913. package/dist/trpc/routers/fonts.js.map +1 -0
  914. package/dist/trpc/routers/gameDraftHistory.d.ts +8 -0
  915. package/dist/trpc/routers/gameDraftHistory.d.ts.map +1 -0
  916. package/dist/trpc/routers/gameDraftHistory.js +40 -0
  917. package/dist/trpc/routers/gameDraftHistory.js.map +1 -0
  918. package/dist/trpc/routers/games.d.ts +26502 -0
  919. package/dist/trpc/routers/games.d.ts.map +1 -0
  920. package/dist/trpc/routers/games.js +674 -0
  921. package/dist/trpc/routers/games.js.map +1 -0
  922. package/dist/trpc/routers/integrations.d.ts +86 -0
  923. package/dist/trpc/routers/integrations.d.ts.map +1 -0
  924. package/dist/trpc/routers/integrations.js +129 -0
  925. package/dist/trpc/routers/integrations.js.map +1 -0
  926. package/dist/trpc/routers/jobs.d.ts +117 -21
  927. package/dist/trpc/routers/jobs.d.ts.map +1 -1
  928. package/dist/trpc/routers/jobs.js +191 -30
  929. package/dist/trpc/routers/jobs.js.map +1 -1
  930. package/dist/trpc/routers/js-scripts.d.ts +410 -0
  931. package/dist/trpc/routers/js-scripts.d.ts.map +1 -0
  932. package/dist/trpc/routers/js-scripts.js +303 -0
  933. package/dist/trpc/routers/js-scripts.js.map +1 -0
  934. package/dist/trpc/routers/mcp-config.d.ts +4 -2
  935. package/dist/trpc/routers/mcp-config.d.ts.map +1 -1
  936. package/dist/trpc/routers/mcp-config.js +46 -206
  937. package/dist/trpc/routers/mcp-config.js.map +1 -1
  938. package/dist/trpc/routers/memories.d.ts +79 -0
  939. package/dist/trpc/routers/memories.d.ts.map +1 -0
  940. package/dist/trpc/routers/memories.js +66 -0
  941. package/dist/trpc/routers/memories.js.map +1 -0
  942. package/dist/trpc/routers/messages.d.ts +4 -77
  943. package/dist/trpc/routers/messages.d.ts.map +1 -1
  944. package/dist/trpc/routers/messages.js +9 -58
  945. package/dist/trpc/routers/messages.js.map +1 -1
  946. package/dist/trpc/routers/models.d.ts +1544 -249
  947. package/dist/trpc/routers/models.d.ts.map +1 -1
  948. package/dist/trpc/routers/models.js +624 -318
  949. package/dist/trpc/routers/models.js.map +1 -1
  950. package/dist/trpc/routers/nodes.d.ts +32 -16
  951. package/dist/trpc/routers/nodes.d.ts.map +1 -1
  952. package/dist/trpc/routers/nodes.js +70 -31
  953. package/dist/trpc/routers/nodes.js.map +1 -1
  954. package/dist/trpc/routers/packs.d.ts +184 -0
  955. package/dist/trpc/routers/packs.d.ts.map +1 -0
  956. package/dist/trpc/routers/packs.js +259 -0
  957. package/dist/trpc/routers/packs.js.map +1 -0
  958. package/dist/trpc/routers/projects.d.ts +422 -0
  959. package/dist/trpc/routers/projects.d.ts.map +1 -0
  960. package/dist/trpc/routers/projects.js +373 -0
  961. package/dist/trpc/routers/projects.js.map +1 -0
  962. package/dist/trpc/routers/resources.d.ts +120 -0
  963. package/dist/trpc/routers/resources.d.ts.map +1 -0
  964. package/dist/trpc/routers/resources.js +212 -0
  965. package/dist/trpc/routers/resources.js.map +1 -0
  966. package/dist/trpc/routers/runs.d.ts +472 -0
  967. package/dist/trpc/routers/runs.d.ts.map +1 -0
  968. package/dist/trpc/routers/runs.js +40 -0
  969. package/dist/trpc/routers/runs.js.map +1 -0
  970. package/dist/trpc/routers/scripts.d.ts +1116 -0
  971. package/dist/trpc/routers/scripts.d.ts.map +1 -0
  972. package/dist/trpc/routers/scripts.js +131 -0
  973. package/dist/trpc/routers/scripts.js.map +1 -0
  974. package/dist/trpc/routers/segmentation.d.ts +62 -0
  975. package/dist/trpc/routers/segmentation.d.ts.map +1 -0
  976. package/dist/trpc/routers/segmentation.js +146 -0
  977. package/dist/trpc/routers/segmentation.js.map +1 -0
  978. package/dist/trpc/routers/settings.d.ts +180 -10
  979. package/dist/trpc/routers/settings.d.ts.map +1 -1
  980. package/dist/trpc/routers/settings.js +125 -33
  981. package/dist/trpc/routers/settings.js.map +1 -1
  982. package/dist/trpc/routers/sketch.d.ts +868 -0
  983. package/dist/trpc/routers/sketch.d.ts.map +1 -0
  984. package/dist/trpc/routers/sketch.js +617 -0
  985. package/dist/trpc/routers/sketch.js.map +1 -0
  986. package/dist/trpc/routers/skills.d.ts +76 -22
  987. package/dist/trpc/routers/skills.d.ts.map +1 -1
  988. package/dist/trpc/routers/skills.js +195 -170
  989. package/dist/trpc/routers/skills.js.map +1 -1
  990. package/dist/trpc/routers/storage.d.ts +3 -30
  991. package/dist/trpc/routers/storage.d.ts.map +1 -1
  992. package/dist/trpc/routers/storage.js +60 -117
  993. package/dist/trpc/routers/storage.js.map +1 -1
  994. package/dist/trpc/routers/storyboards.d.ts +6639 -0
  995. package/dist/trpc/routers/storyboards.d.ts.map +1 -0
  996. package/dist/trpc/routers/storyboards.js +156 -0
  997. package/dist/trpc/routers/storyboards.js.map +1 -0
  998. package/dist/trpc/routers/threads.d.ts +33 -21
  999. package/dist/trpc/routers/threads.d.ts.map +1 -1
  1000. package/dist/trpc/routers/threads.js +36 -30
  1001. package/dist/trpc/routers/threads.js.map +1 -1
  1002. package/dist/trpc/routers/timeline.d.ts +9085 -0
  1003. package/dist/trpc/routers/timeline.d.ts.map +1 -0
  1004. package/dist/trpc/routers/timeline.js +669 -0
  1005. package/dist/trpc/routers/timeline.js.map +1 -0
  1006. package/dist/trpc/routers/triggers.d.ts +46 -0
  1007. package/dist/trpc/routers/triggers.d.ts.map +1 -0
  1008. package/dist/trpc/routers/triggers.js +117 -0
  1009. package/dist/trpc/routers/triggers.js.map +1 -0
  1010. package/dist/trpc/routers/users.d.ts +1 -14
  1011. package/dist/trpc/routers/users.d.ts.map +1 -1
  1012. package/dist/trpc/routers/users.js +1 -12
  1013. package/dist/trpc/routers/users.js.map +1 -1
  1014. package/dist/trpc/routers/worker.d.ts +243 -0
  1015. package/dist/trpc/routers/worker.d.ts.map +1 -0
  1016. package/dist/trpc/routers/worker.js +221 -0
  1017. package/dist/trpc/routers/worker.js.map +1 -0
  1018. package/dist/trpc/routers/workflows.d.ts +428 -187
  1019. package/dist/trpc/routers/workflows.d.ts.map +1 -1
  1020. package/dist/trpc/routers/workflows.js +347 -345
  1021. package/dist/trpc/routers/workflows.js.map +1 -1
  1022. package/dist/trpc/routers/workspace.d.ts +59 -33
  1023. package/dist/trpc/routers/workspace.d.ts.map +1 -1
  1024. package/dist/trpc/routers/workspace.js +230 -93
  1025. package/dist/trpc/routers/workspace.js.map +1 -1
  1026. package/dist/trpc/sandbox-coverage.d.ts +64 -0
  1027. package/dist/trpc/sandbox-coverage.d.ts.map +1 -0
  1028. package/dist/trpc/sandbox-coverage.js +1139 -0
  1029. package/dist/trpc/sandbox-coverage.js.map +1 -0
  1030. package/dist/websocket-client-session.d.ts +322 -0
  1031. package/dist/websocket-client-session.d.ts.map +1 -0
  1032. package/dist/websocket-client-session.js +1267 -0
  1033. package/dist/websocket-client-session.js.map +1 -0
  1034. package/dist/workflow-interface-service.d.ts +87 -0
  1035. package/dist/workflow-interface-service.d.ts.map +1 -0
  1036. package/dist/workflow-interface-service.js +131 -0
  1037. package/dist/workflow-interface-service.js.map +1 -0
  1038. package/dist/workspace-api.d.ts.map +1 -1
  1039. package/dist/workspace-api.js +33 -23
  1040. package/dist/workspace-api.js.map +1 -1
  1041. package/dist/ws-adapter.d.ts +46 -3
  1042. package/dist/ws-adapter.d.ts.map +1 -1
  1043. package/dist/ws-adapter.js +164 -26
  1044. package/dist/ws-adapter.js.map +1 -1
  1045. package/package.json +97 -36
  1046. package/dist/agent/agent-runtime.d.ts +0 -47
  1047. package/dist/agent/agent-runtime.d.ts.map +0 -1
  1048. package/dist/agent/agent-runtime.js +0 -579
  1049. package/dist/agent/agent-runtime.js.map +0 -1
  1050. package/dist/agent/codex-agent.d.ts +0 -41
  1051. package/dist/agent/codex-agent.d.ts.map +0 -1
  1052. package/dist/agent/codex-agent.js +0 -334
  1053. package/dist/agent/codex-agent.js.map +0 -1
  1054. package/dist/agent/index.d.ts +0 -6
  1055. package/dist/agent/index.d.ts.map +0 -1
  1056. package/dist/agent/index.js +0 -4
  1057. package/dist/agent/index.js.map +0 -1
  1058. package/dist/agent/llm-agent.d.ts +0 -51
  1059. package/dist/agent/llm-agent.d.ts.map +0 -1
  1060. package/dist/agent/llm-agent.js +0 -526
  1061. package/dist/agent/llm-agent.js.map +0 -1
  1062. package/dist/agent/mcp-tool-server.d.ts +0 -33
  1063. package/dist/agent/mcp-tool-server.d.ts.map +0 -1
  1064. package/dist/agent/mcp-tool-server.js +0 -292
  1065. package/dist/agent/mcp-tool-server.js.map +0 -1
  1066. package/dist/agent/opencode-agent.d.ts +0 -32
  1067. package/dist/agent/opencode-agent.d.ts.map +0 -1
  1068. package/dist/agent/opencode-agent.js +0 -332
  1069. package/dist/agent/opencode-agent.js.map +0 -1
  1070. package/dist/agent/pi-agent.d.ts +0 -42
  1071. package/dist/agent/pi-agent.d.ts.map +0 -1
  1072. package/dist/agent/pi-agent.js +0 -429
  1073. package/dist/agent/pi-agent.js.map +0 -1
  1074. package/dist/agent/sdk-provider.d.ts +0 -46
  1075. package/dist/agent/sdk-provider.d.ts.map +0 -1
  1076. package/dist/agent/sdk-provider.js +0 -50
  1077. package/dist/agent/sdk-provider.js.map +0 -1
  1078. package/dist/agent/socket-route.d.ts +0 -11
  1079. package/dist/agent/socket-route.d.ts.map +0 -1
  1080. package/dist/agent/socket-route.js +0 -262
  1081. package/dist/agent/socket-route.js.map +0 -1
  1082. package/dist/agent/transport.d.ts +0 -39
  1083. package/dist/agent/transport.d.ts.map +0 -1
  1084. package/dist/agent/transport.js +0 -17
  1085. package/dist/agent/transport.js.map +0 -1
  1086. package/dist/agent/types.d.ts +0 -11
  1087. package/dist/agent/types.d.ts.map +0 -1
  1088. package/dist/agent/types.js +0 -10
  1089. package/dist/agent/types.js.map +0 -1
  1090. package/dist/routes/jobs.d.ts +0 -16
  1091. package/dist/routes/jobs.d.ts.map +0 -1
  1092. package/dist/routes/jobs.js +0 -25
  1093. package/dist/routes/jobs.js.map +0 -1
  1094. package/dist/trpc/routers/sandboxes.d.ts +0 -64
  1095. package/dist/trpc/routers/sandboxes.d.ts.map +0 -1
  1096. package/dist/trpc/routers/sandboxes.js +0 -327
  1097. package/dist/trpc/routers/sandboxes.js.map +0 -1
  1098. package/dist/unified-websocket-runner.d.ts +0 -280
  1099. package/dist/unified-websocket-runner.d.ts.map +0 -1
  1100. package/dist/unified-websocket-runner.js +0 -3840
  1101. package/dist/unified-websocket-runner.js.map +0 -1
@@ -3,16 +3,14 @@
3
3
  *
4
4
  * Retained on REST (file downloads):
5
5
  * - GET /api/workflows/:id/dsl-export (text/plain file download)
6
- * - POST /api/workflows/:id/gradio-export (501 stub, kept for API compat)
7
6
  *
8
7
  * Everything else is served via tRPC:
9
- * - list, names, get, create, update, delete
10
- * - run, autosave
11
- * - tools, examples (list + search)
8
+ * - list, get, create, update, delete
9
+ * - autosave
10
+ * - examples (list + search)
11
+ * - recipes (shipped chains of examples)
12
12
  * - public (list + get) — publicProcedure (no auth required)
13
- * - app (metadata for workflow app page)
14
- * - generateName
15
- * - versions (list, create, get, restore, delete)
13
+ * - versions (list, create, restore, delete)
16
14
  *
17
15
  * Auth note:
18
16
  * - `public.*` endpoints use publicProcedure — no auth required, matches
@@ -21,17 +19,59 @@
21
19
  */
22
20
  import { existsSync, readFileSync, readdirSync } from "node:fs";
23
21
  import nodePath from "node:path";
24
- import { Workflow, WorkflowVersion, Job } from "@nodetool-ai/models";
25
- import { PythonNodeExecutor } from "@nodetool-ai/runtime";
26
- import { WorkflowRunner } from "@nodetool-ai/kernel";
22
+ import { z } from "zod";
23
+ import { withCacheBuster } from "../../lib/example-thumbnail.js";
24
+ import { Workflow, WorkflowVersion, WorkflowCollaborator, WorkflowShare } from "@nodetool-ai/models";
27
25
  import { loadPythonPackageMetadata } from "@nodetool-ai/node-sdk";
28
26
  import { createLogger } from "@nodetool-ai/config";
27
+ import { deriveExampleAssetsDir } from "../../example-workflows.js";
28
+ import { exampleRecipeSummary } from "@nodetool-ai/protocol/api-schemas/recipes.js";
29
+ import { listExampleRecipes } from "../../lib/example-recipes.js";
29
30
  import { ApiErrorCode } from "../../error-codes.js";
30
31
  import { router, publicProcedure } from "../index.js";
31
32
  import { protectedProcedure } from "../middleware.js";
32
33
  import { throwApiError } from "../error-formatter.js";
33
- import { listInput, listOutput, namesOutput, getInput, createInput, updateInput, deleteInput, deleteOutput, runInput, runOutput, autosaveInput, autosaveOutput, toolsInput, toolsOutput, examplesInput, examplesOutput, publicListInput, publicListOutput, publicGetInput, appInput, appOutput, generateNameInput, generateNameOutput, versionsListInput, versionsListOutput, versionCreateInput, versionGetInput, versionResponse, versionRestoreInput, versionDeleteInput, versionDeleteOutput, workflowResponse, graph as graphSchema } from "@nodetool-ai/protocol/api-schemas/workflows.js";
34
+ import { createWorkflow, deleteWorkflow, syncTriggerRegistrations, updateWorkflow, WorkflowServiceError } from "../../lib/workflow-service.js";
35
+ import { listInput, listOutput, getInput, createInput, updateInput, deleteInput, deleteOutput, autosaveInput, autosaveOutput, examplesInput, examplesOutput, publicListInput, publicListOutput, publicGetInput, versionsListInput, versionsListOutput, versionCreateInput, versionResponse, versionRestoreInput, versionDeleteInput, versionDeleteOutput, terminalOutputsInput, terminalOutputsOutput, workflowResponse, graph as graphSchema, sharingGetInput, sharingGetOutput, sharingCreateLinkInput, sharingRevokeLinkInput, sharingSetRoleInput, sharingRemoveCollaboratorInput, sharingOkOutput, sharingAcceptInput, sharingAcceptOutput, sharingPublicTokenInput, shareItem, collaboratorItem, sharedWithMeInput, sharedWithMeOutput } from "@nodetool-ai/protocol/api-schemas/workflows.js";
36
+ import { isString } from "../../lib/wire-values.js";
37
+ import { getStorageRetentionSettings } from "../../storage-retention.js";
38
+ import { loadPublicShareWorkflow } from "../../lib/public-workflow-share.js";
34
39
  const log = createLogger("nodetool.websocket.trpc.workflows");
40
+ /** Map a `workflow-service` failure onto this router's tRPC error shape. */
41
+ async function runWorkflowService(run) {
42
+ try {
43
+ return await run();
44
+ }
45
+ catch (error) {
46
+ if (error instanceof WorkflowServiceError) {
47
+ throwApiError(error.code, error.message);
48
+ }
49
+ throw error;
50
+ }
51
+ }
52
+ async function resolveWorkflowRole(workflow, userId) {
53
+ if (workflow.user_id === userId)
54
+ return "owner";
55
+ const grant = await WorkflowCollaborator.findFor(workflow.id, userId);
56
+ if (grant)
57
+ return grant.role;
58
+ if (workflow.access === "public")
59
+ return "viewer";
60
+ return null;
61
+ }
62
+ /** Load a workflow and require at least `minimum` access, else 404. */
63
+ async function requireWorkflowRole(workflowId, userId, minimum) {
64
+ const workflow = (await Workflow.get(workflowId));
65
+ if (!workflow) {
66
+ throwApiError(ApiErrorCode.WORKFLOW_NOT_FOUND, "Workflow not found");
67
+ }
68
+ const role = await resolveWorkflowRole(workflow, userId);
69
+ const rank = { viewer: 1, editor: 2, owner: 3 };
70
+ if (!role || rank[role] < rank[minimum]) {
71
+ throwApiError(ApiErrorCode.WORKFLOW_NOT_FOUND, "Workflow not found");
72
+ }
73
+ return { workflow, role };
74
+ }
35
75
  /**
36
76
  * Validate a workflow graph against the wire schema. Returns the graph if it
37
77
  * passes, or null if invalid — so list endpoints can still return the rest of
@@ -57,9 +97,43 @@ function safeGraph(workflowId, raw) {
57
97
  log.warn(`Workflow ${workflowId} has an invalid graph; returning null: ${summarizeGraphIssues(parsed.error.issues)}`);
58
98
  return null;
59
99
  }
100
+ const OUTPUT_NODE_MEDIA_TYPES = {
101
+ "nodetool.output.ImageOutput": "image",
102
+ "nodetool.output.VideoOutput": "video",
103
+ "nodetool.output.AudioOutput": "audio"
104
+ };
105
+ function findTerminalMediaOutputNodes(workflow) {
106
+ const graph = safeGraph(workflow.id, workflow.graph);
107
+ const nodes = (graph?.nodes ?? []);
108
+ const edges = (graph?.edges ?? []);
109
+ const terminalOutputNodeIds = new Set(nodes
110
+ .filter((n) => Object.hasOwn(OUTPUT_NODE_MEDIA_TYPES, n.type))
111
+ .map((n) => n.id));
112
+ for (const edge of edges) {
113
+ const sourceId = edge.source;
114
+ if (sourceId && terminalOutputNodeIds.has(sourceId)) {
115
+ terminalOutputNodeIds.delete(sourceId);
116
+ }
117
+ }
118
+ return nodes.filter((n) => terminalOutputNodeIds.has(n.id));
119
+ }
120
+ function hasTerminalMediaOutput(workflow) {
121
+ return findTerminalMediaOutputNodes(workflow).length > 0;
122
+ }
60
123
  // ── Rate-limit tracking for autosave ───────────────────────────────────────
61
124
  const lastAutosaveTime = new Map();
62
125
  const AUTOSAVE_RATE_LIMIT_MS = 30_000;
126
+ // Entries older than the rate-limit window can never rate-limit again, so drop
127
+ // them. Without this the map grows one permanent entry per workflow ever
128
+ // autosaved (including deleted ones) for the lifetime of the process.
129
+ function recordAutosave(workflowId, now) {
130
+ for (const [id, ts] of lastAutosaveTime) {
131
+ if (now - ts >= AUTOSAVE_RATE_LIMIT_MS) {
132
+ lastAutosaveTime.delete(id);
133
+ }
134
+ }
135
+ lastAutosaveTime.set(workflowId, now);
136
+ }
63
137
  // ── toWorkflowResponse ─────────────────────────────────────────────────────
64
138
  function toWorkflowResponse(workflow) {
65
139
  return {
@@ -81,9 +155,11 @@ function toWorkflowResponse(workflow) {
81
155
  path: workflow.path ?? null,
82
156
  run_mode: workflow.run_mode ?? null,
83
157
  workspace_id: workflow.workspace_id ?? null,
158
+ project_id: workflow.project_id,
84
159
  required_providers: null,
85
160
  required_models: null,
86
161
  html_app: workflow.html_app ?? null,
162
+ app_doc: workflow.app_doc ?? null,
87
163
  etag: workflow.getEtag() ?? null
88
164
  };
89
165
  }
@@ -102,15 +178,31 @@ function toVersionResponse(v) {
102
178
  created_at: v.created_at ?? null
103
179
  };
104
180
  }
181
+ function toCollaboratorItem(grant) {
182
+ return {
183
+ workflow_id: grant.workflow_id,
184
+ user_id: grant.user_id,
185
+ role: grant.role,
186
+ invited_by: grant.invited_by,
187
+ created_at: grant.created_at ?? null
188
+ };
189
+ }
190
+ function toShareItem(share) {
191
+ return {
192
+ id: share.id,
193
+ workflow_id: share.workflow_id,
194
+ token: share.token,
195
+ role: share.role,
196
+ created_at: share.created_at ?? null,
197
+ revoked_at: share.revoked_at ?? null
198
+ };
199
+ }
105
200
  // ── Example workflow helpers ────────────────────────────────────────────────
106
201
  const EXAMPLES_THUMBNAILS_PREFIX = "/api/workflows/examples/thumbnails/";
107
- function deriveAssetsDir(examplesDir) {
108
- return nodePath.join(nodePath.dirname(nodePath.dirname(examplesDir)), "assets", nodePath.basename(examplesDir));
109
- }
110
- function buildExamplesFromDir(examplesDir) {
202
+ function buildExamplesFromDir(examplesDir, examplesAssetsFallbackDir) {
111
203
  if (!existsSync(examplesDir))
112
204
  return [];
113
- const assetsDir = deriveAssetsDir(examplesDir);
205
+ const assetsDir = deriveExampleAssetsDir(examplesDir, examplesAssetsFallbackDir);
114
206
  const now = new Date().toISOString();
115
207
  const workflows = [];
116
208
  let files;
@@ -126,12 +218,15 @@ function buildExamplesFromDir(examplesDir) {
126
218
  try {
127
219
  const raw = readFileSync(nodePath.join(examplesDir, file), "utf8");
128
220
  const parsed = JSON.parse(raw);
129
- const name = typeof parsed.name === "string"
221
+ const name = isString(parsed.name)
130
222
  ? parsed.name
131
223
  : file.replace(/\.json$/i, "");
224
+ // Append ?v=<md5-8> via withCacheBuster so the browser invalidates
225
+ // its cached thumbnail whenever the JPG is regenerated on disk.
132
226
  const jpgFile = `${name}.jpg`;
133
- const thumbnailUrl = existsSync(nodePath.join(assetsDir, jpgFile))
134
- ? `${EXAMPLES_THUMBNAILS_PREFIX}${encodeURIComponent(jpgFile)}`
227
+ const jpgPath = nodePath.join(assetsDir, jpgFile);
228
+ const thumbnailUrl = existsSync(jpgPath)
229
+ ? withCacheBuster(`${EXAMPLES_THUMBNAILS_PREFIX}${encodeURIComponent(jpgFile)}`, jpgPath)
135
230
  : null;
136
231
  workflows.push({
137
232
  id: file,
@@ -140,9 +235,9 @@ function buildExamplesFromDir(examplesDir) {
140
235
  updated_at: now,
141
236
  name,
142
237
  tool_name: null,
143
- description: typeof parsed.description === "string" ? parsed.description : "",
238
+ description: isString(parsed.description) ? parsed.description : "",
144
239
  tags: Array.isArray(parsed.tags)
145
- ? parsed.tags.filter((t) => typeof t === "string")
240
+ ? parsed.tags.filter((t) => isString(t))
146
241
  : [],
147
242
  thumbnail: thumbnailUrl ? jpgFile : null,
148
243
  thumbnail_url: thumbnailUrl,
@@ -150,13 +245,16 @@ function buildExamplesFromDir(examplesDir) {
150
245
  input_schema: null,
151
246
  output_schema: null,
152
247
  settings: null,
153
- package_name: typeof parsed.package_name === "string" ? parsed.package_name : null,
248
+ package_name: isString(parsed.package_name)
249
+ ? parsed.package_name
250
+ : null,
154
251
  path: null,
155
252
  run_mode: null,
156
253
  workspace_id: null,
157
254
  required_providers: null,
158
255
  required_models: null,
159
256
  html_app: null,
257
+ app_doc: null,
160
258
  etag: null
161
259
  });
162
260
  }
@@ -168,7 +266,7 @@ function buildExamplesFromDir(examplesDir) {
168
266
  }
169
267
  function buildExampleWorkflows(apiOptions) {
170
268
  if (apiOptions.examplesDir) {
171
- return buildExamplesFromDir(apiOptions.examplesDir);
269
+ return buildExamplesFromDir(apiOptions.examplesDir, apiOptions.examplesAssetsFallbackDir);
172
270
  }
173
271
  const loaded = loadPythonPackageMetadata({
174
272
  roots: apiOptions.metadataRoots,
@@ -203,54 +301,13 @@ function buildExampleWorkflows(apiOptions) {
203
301
  required_providers: null,
204
302
  required_models: null,
205
303
  html_app: null,
304
+ app_doc: null,
206
305
  etag: null
207
306
  });
208
307
  }
209
308
  }
210
309
  return workflows;
211
310
  }
212
- function loadExampleGraph(packageName, exampleName, apiOptions) {
213
- const loaded = loadPythonPackageMetadata({
214
- roots: apiOptions.metadataRoots,
215
- maxDepth: apiOptions.metadataMaxDepth
216
- });
217
- const pkg = loaded.packages.find((p) => p.name === packageName);
218
- if (!pkg?.sourceFolder)
219
- return null;
220
- const examplePath = nodePath.join(pkg.sourceFolder, "nodetool", "examples", packageName, `${exampleName}.json`);
221
- try {
222
- const raw = readFileSync(examplePath, "utf8");
223
- return JSON.parse(raw);
224
- }
225
- catch {
226
- return null;
227
- }
228
- }
229
- // ── deriveWorkflowName ─────────────────────────────────────────────────────
230
- function deriveWorkflowName(workflow) {
231
- const graph = workflow.graph;
232
- const nodes = graph?.nodes ?? [];
233
- if (nodes.length === 0) {
234
- return workflow.name || "Untitled Workflow";
235
- }
236
- const categories = new Set();
237
- for (const n of nodes) {
238
- if (typeof n.type === "string") {
239
- const parts = n.type.split(".");
240
- if (parts.length >= 2 && parts[1]) {
241
- categories.add(parts[1]);
242
- }
243
- }
244
- }
245
- const segments = Array.from(categories).slice(0, 3);
246
- if (segments.length === 0) {
247
- return workflow.name || "Untitled Workflow";
248
- }
249
- const label = segments
250
- .map((s) => s.charAt(0).toUpperCase() + s.slice(1))
251
- .join(" + ");
252
- return `${label} Workflow`;
253
- }
254
311
  // ── Router ─────────────────────────────────────────────────────────────────
255
312
  export const workflowsRouter = router({
256
313
  // ── list (GET /api/workflows) ─────────────────────────────────────────────
@@ -260,34 +317,28 @@ export const workflowsRouter = router({
260
317
  .query(async ({ ctx, input }) => {
261
318
  const [workflows, cursor] = await Workflow.paginate(ctx.userId, {
262
319
  limit: input.limit,
263
- runMode: input.run_mode
320
+ runMode: input.run_mode,
321
+ tag: input.tag,
322
+ projectId: input.project_id,
323
+ startKey: input.cursor
264
324
  });
325
+ let filtered = workflows;
326
+ if (input.mediaOutput) {
327
+ filtered = filtered.filter((w) => hasTerminalMediaOutput(w));
328
+ }
265
329
  return {
266
- workflows: workflows.map((w) => toWorkflowResponse(w)),
267
- next: cursor || null
330
+ workflows: filtered.map((w) => toWorkflowResponse(w)),
331
+ // mediaOutput filtering happens in memory after DB pagination, so cursor
332
+ // pagination is intentionally disabled for this mode.
333
+ next: input.mediaOutput ? null : cursor || null
268
334
  };
269
335
  }),
270
- // ── names (GET /api/workflows/names) ─────────────────────────────────────
271
- names: protectedProcedure
272
- .output(namesOutput)
273
- .query(async ({ ctx }) => {
274
- const [workflows] = await Workflow.paginate(ctx.userId, { limit: 1000 });
275
- const names = {};
276
- for (const wf of workflows)
277
- names[wf.id] = wf.name;
278
- return names;
279
- }),
280
336
  // ── get (GET /api/workflows/:id) ─────────────────────────────────────────
281
337
  get: protectedProcedure
282
338
  .input(getInput)
283
339
  .output(workflowResponse)
284
340
  .query(async ({ ctx, input }) => {
285
- const workflow = (await Workflow.get(input.id));
286
- if (!workflow)
287
- throwApiError(ApiErrorCode.WORKFLOW_NOT_FOUND, "Workflow not found");
288
- if (workflow.access !== "public" && workflow.user_id !== ctx.userId) {
289
- throwApiError(ApiErrorCode.WORKFLOW_NOT_FOUND, "Workflow not found");
290
- }
341
+ const { workflow } = await requireWorkflowRole(input.id, ctx.userId, "viewer");
291
342
  return toWorkflowResponse(workflow);
292
343
  }),
293
344
  // ── create (POST /api/workflows) ─────────────────────────────────────────
@@ -295,36 +346,13 @@ export const workflowsRouter = router({
295
346
  .input(createInput)
296
347
  .output(workflowResponse)
297
348
  .mutation(async ({ ctx, input }) => {
298
- if (!input.graph || !Array.isArray(input.graph.nodes) || !Array.isArray(input.graph.edges)) {
299
- throwApiError(ApiErrorCode.INVALID_INPUT, "graph is required and must have nodes and edges arrays");
300
- }
301
- let graph = input.graph;
302
- // Optionally seed from example
303
- if (input.from_example_package &&
304
- input.from_example_name &&
305
- (!graph || graph.nodes?.length === 0)) {
306
- const example = loadExampleGraph(input.from_example_package, input.from_example_name, ctx.apiOptions);
307
- if (example?.graph) {
308
- graph = example.graph;
349
+ const workflow = await runWorkflowService(() => createWorkflow(ctx.userId, input, input.from_example_name
350
+ ? {
351
+ packageName: input.from_example_package ?? undefined,
352
+ exampleName: input.from_example_name,
353
+ apiOptions: ctx.apiOptions
309
354
  }
310
- }
311
- const workflow = (await Workflow.create({
312
- user_id: ctx.userId,
313
- name: input.name,
314
- tool_name: input.tool_name ?? null,
315
- package_name: input.package_name ?? null,
316
- path: input.path ?? null,
317
- tags: input.tags ?? [],
318
- description: input.description ?? "",
319
- thumbnail: input.thumbnail ?? null,
320
- thumbnail_url: input.thumbnail_url ?? null,
321
- access: input.access === "public" ? "public" : "private",
322
- graph,
323
- settings: input.settings ?? null,
324
- run_mode: input.run_mode ?? "workflow",
325
- workspace_id: input.workspace_id ?? null,
326
- html_app: input.html_app ?? null
327
- }));
355
+ : undefined));
328
356
  return toWorkflowResponse(workflow);
329
357
  }),
330
358
  // ── update (PUT /api/workflows/:id) ──────────────────────────────────────
@@ -332,51 +360,7 @@ export const workflowsRouter = router({
332
360
  .input(updateInput)
333
361
  .output(workflowResponse)
334
362
  .mutation(async ({ ctx, input }) => {
335
- if (!input.graph || !Array.isArray(input.graph.nodes) || !Array.isArray(input.graph.edges)) {
336
- throwApiError(ApiErrorCode.INVALID_INPUT, "graph is required and must have nodes and edges arrays");
337
- }
338
- const graph = input.graph;
339
- const existing = (await Workflow.get(input.id));
340
- if (existing && existing.user_id !== ctx.userId) {
341
- throwApiError(ApiErrorCode.WORKFLOW_NOT_FOUND, "Workflow not found");
342
- }
343
- if (existing) {
344
- existing.name = input.name;
345
- existing.tool_name = input.tool_name ?? null;
346
- existing.description = input.description ?? "";
347
- existing.tags = input.tags ?? [];
348
- existing.package_name = input.package_name ?? null;
349
- if (input.thumbnail !== undefined)
350
- existing.thumbnail = input.thumbnail;
351
- existing.access = input.access === "public" ? "public" : "private";
352
- existing.graph = graph;
353
- existing.settings = input.settings ?? null;
354
- if (input.run_mode !== undefined && input.run_mode !== null)
355
- existing.run_mode = input.run_mode;
356
- existing.workspace_id = input.workspace_id ?? null;
357
- existing.html_app = input.html_app ?? null;
358
- await existing.save();
359
- return toWorkflowResponse(existing);
360
- }
361
- // Upsert: create if doesn't exist
362
- const workflow = (await Workflow.create({
363
- id: input.id,
364
- user_id: ctx.userId,
365
- name: input.name,
366
- tool_name: input.tool_name ?? null,
367
- package_name: input.package_name ?? null,
368
- path: input.path ?? null,
369
- tags: input.tags ?? [],
370
- description: input.description ?? "",
371
- thumbnail: input.thumbnail ?? null,
372
- thumbnail_url: input.thumbnail_url ?? null,
373
- access: input.access === "public" ? "public" : "private",
374
- graph,
375
- settings: input.settings ?? null,
376
- run_mode: input.run_mode ?? "workflow",
377
- workspace_id: input.workspace_id ?? null,
378
- html_app: input.html_app ?? null
379
- }));
363
+ const workflow = await runWorkflowService(() => updateWorkflow(ctx.userId, input.id, input));
380
364
  return toWorkflowResponse(workflow);
381
365
  }),
382
366
  // ── delete (DELETE /api/workflows/:id) ───────────────────────────────────
@@ -384,123 +368,19 @@ export const workflowsRouter = router({
384
368
  .input(deleteInput)
385
369
  .output(deleteOutput)
386
370
  .mutation(async ({ ctx, input }) => {
387
- const workflow = (await Workflow.get(input.id));
388
- if (!workflow)
389
- throwApiError(ApiErrorCode.WORKFLOW_NOT_FOUND, "Workflow not found");
390
- if (workflow.user_id !== ctx.userId) {
391
- throwApiError(ApiErrorCode.WORKFLOW_NOT_FOUND, "Workflow not found");
392
- }
393
- await workflow.delete();
371
+ await runWorkflowService(() => deleteWorkflow(ctx.userId, input.id));
372
+ lastAutosaveTime.delete(input.id);
394
373
  return { ok: true };
395
374
  }),
396
- // ── run (POST /api/workflows/:id/run) ────────────────────────────────────
397
- run: protectedProcedure
398
- .input(runInput)
399
- .output(runOutput)
400
- .mutation(async ({ ctx, input }) => {
401
- const workflow = await Workflow.find(ctx.userId, input.id);
402
- if (!workflow)
403
- throwApiError(ApiErrorCode.WORKFLOW_NOT_FOUND, "Workflow not found");
404
- const runMode = workflow.run_mode ?? "workflow";
405
- if (runMode !== "workflow") {
406
- throwApiError(ApiErrorCode.INVALID_INPUT, `Workflow run mode "${runMode}" is not supported by the standalone backend`);
407
- }
408
- const params = input.params ?? {};
409
- const graph = workflow.getGraph();
410
- const runnableGraph = {
411
- nodes: graph.nodes.map((node) => {
412
- const record = node;
413
- return {
414
- ...record,
415
- id: String(record.id ?? ""),
416
- type: String(record.type ?? ""),
417
- properties: (record.properties ?? record.data ?? {})
418
- };
419
- }),
420
- edges: graph.edges.map((edge) => {
421
- const record = edge;
422
- return {
423
- ...record,
424
- id: typeof record.id === "string" || record.id == null
425
- ? record.id
426
- : String(record.id),
427
- source: String(record.source ?? ""),
428
- target: String(record.target ?? ""),
429
- sourceHandle: String(record.sourceHandle ?? ""),
430
- targetHandle: String(record.targetHandle ?? ""),
431
- edge_type: record.edge_type === "control" ? "control" : "data"
432
- };
433
- })
434
- };
435
- const registry = ctx.registry;
436
- const pythonBridge = ctx.pythonBridge;
437
- const getPythonBridgeReady = ctx.getPythonBridgeReady;
438
- const hasPythonNode = runnableGraph.nodes.some((node) => {
439
- const nodeType = typeof node.type === "string" ? node.type : "";
440
- return (nodeType !== "" &&
441
- Boolean(registry.getMetadata(nodeType)) &&
442
- !registry.has(nodeType));
443
- });
444
- if (hasPythonNode) {
445
- if (!getPythonBridgeReady()) {
446
- await pythonBridge.ensureConnected();
447
- }
448
- }
449
- const resolveExecutor = (node) => {
450
- if (registry.has(node.type)) {
451
- return registry.resolve(node);
452
- }
453
- if (getPythonBridgeReady() && pythonBridge.hasNodeType(node.type)) {
454
- const meta = pythonBridge
455
- .getNodeMetadata()
456
- .find((n) => n.node_type === node.type);
457
- const props = (node.properties ?? {});
458
- return new PythonNodeExecutor(pythonBridge, node.type, props, Object.fromEntries((meta?.outputs ?? []).map((o) => [o.name, o.type.type])), meta?.required_settings ?? []);
459
- }
460
- return registry.resolve(node);
461
- };
462
- const job = await Job.create({
463
- workflow_id: input.id,
464
- user_id: ctx.userId,
465
- status: "running",
466
- params,
467
- graph: runnableGraph
468
- });
469
- const runner = new WorkflowRunner(job.id, { resolveExecutor });
470
- const result = await runner.run({ job_id: job.id, workflow_id: input.id, params }, runnableGraph);
471
- if (result.status === "completed") {
472
- job.markCompleted();
473
- }
474
- else if (result.status === "cancelled") {
475
- job.markCancelled();
476
- }
477
- else {
478
- job.markFailed(result.error ?? "Workflow run failed");
479
- }
480
- await job.save();
481
- return {
482
- job_id: job.id,
483
- workflow_id: input.id,
484
- status: result.status,
485
- outputs: result.outputs ?? null,
486
- error: result.error ?? null,
487
- message_count: result.messages.length,
488
- background: input.background ?? false
489
- };
490
- }),
491
375
  // ── autosave (POST/PUT /api/workflows/:id/autosave) ───────────────────────
492
376
  autosave: protectedProcedure
493
377
  .input(autosaveInput)
494
378
  .output(autosaveOutput)
495
379
  .mutation(async ({ ctx, input }) => {
496
- const workflow = (await Workflow.get(input.id));
497
- if (!workflow)
498
- throwApiError(ApiErrorCode.WORKFLOW_NOT_FOUND, "Workflow not found");
499
- if (workflow.user_id !== ctx.userId) {
500
- throwApiError(ApiErrorCode.WORKFLOW_NOT_FOUND, "Workflow not found");
501
- }
380
+ const { workflow, role } = await requireWorkflowRole(input.id, ctx.userId, "editor");
502
381
  const force = input.force === true;
503
- const maxVersions = typeof input.max_versions === "number" ? input.max_versions : 10;
382
+ const { policy: retentionPolicy } = await getStorageRetentionSettings(ctx.userId);
383
+ const maxVersions = retentionPolicy.maxAutosavesPerWorkflow;
504
384
  // Rate-limit
505
385
  if (!force) {
506
386
  const last = lastAutosaveTime.get(input.id);
@@ -508,19 +388,28 @@ export const workflowsRouter = router({
508
388
  return {
509
389
  version: null,
510
390
  message: "Autosave skipped (rate limited)",
511
- skipped: true
391
+ skipped: true,
392
+ updated_at: workflow.updated_at ?? null
512
393
  };
513
394
  }
514
395
  }
515
- workflow.graph = input.graph;
396
+ const fields = {
397
+ graph: input.graph
398
+ };
516
399
  if (input.name !== undefined)
517
- workflow.name = input.name;
400
+ fields.name = input.name;
518
401
  if (input.description !== undefined)
519
- workflow.description = input.description;
520
- if (input.access === "public" || input.access === "private")
521
- workflow.access = input.access;
522
- await workflow.save();
523
- lastAutosaveTime.set(input.id, Date.now());
402
+ fields.description = input.description;
403
+ // Only the owner can change visibility; editors keep it as-is.
404
+ if (role === "owner" &&
405
+ (input.access === "public" || input.access === "private"))
406
+ fields.access = input.access;
407
+ const savedWorkflow = await Workflow.updateFieldsIfUnchanged(input.id, input.expected_updated_at ?? workflow.updated_at, fields);
408
+ if (!savedWorkflow) {
409
+ throwApiError(ApiErrorCode.ALREADY_EXISTS, "Workflow was modified since last read (optimistic concurrency conflict)");
410
+ }
411
+ await syncTriggerRegistrations(savedWorkflow);
412
+ recordAutosave(input.id, Date.now());
524
413
  let version = null;
525
414
  try {
526
415
  const nextVer = await WorkflowVersion.nextVersion(input.id);
@@ -530,8 +419,8 @@ export const workflowsRouter = router({
530
419
  graph: input.graph,
531
420
  version: nextVer,
532
421
  save_type: "autosave",
533
- name: workflow.name,
534
- description: workflow.description
422
+ name: savedWorkflow.name,
423
+ description: savedWorkflow.description
535
424
  });
536
425
  await wv.save();
537
426
  version = {
@@ -541,7 +430,7 @@ export const workflowsRouter = router({
541
430
  save_type: wv.save_type ?? "autosave",
542
431
  created_at: wv.created_at ?? null
543
432
  };
544
- await WorkflowVersion.pruneOldVersions(input.id, maxVersions);
433
+ await WorkflowVersion.pruneOldAutosaves(input.id, maxVersions);
545
434
  }
546
435
  catch {
547
436
  // non-fatal — version table may not exist
@@ -549,24 +438,8 @@ export const workflowsRouter = router({
549
438
  return {
550
439
  version,
551
440
  message: "Autosaved successfully",
552
- skipped: false
553
- };
554
- }),
555
- // ── tools (GET /api/workflows/tools) ─────────────────────────────────────
556
- tools: protectedProcedure
557
- .input(toolsInput)
558
- .output(toolsOutput)
559
- .query(async ({ ctx, input }) => {
560
- const [workflows] = await Workflow.paginateTools(ctx.userId, {
561
- limit: input.limit
562
- });
563
- return {
564
- workflows: workflows.map((w) => ({
565
- name: w.name,
566
- tool_name: w.tool_name ?? null,
567
- description: w.description ?? null
568
- })),
569
- next: null
441
+ skipped: false,
442
+ updated_at: savedWorkflow.updated_at ?? null
570
443
  };
571
444
  }),
572
445
  // ── examples (GET /api/workflows/examples) ────────────────────────────────
@@ -589,13 +462,21 @@ export const workflowsRouter = router({
589
462
  : workflows;
590
463
  return { workflows: filtered, next: null };
591
464
  }),
465
+ // ── recipes (shipped chains of example workflows) ─────────────────────────
466
+ // Manifest files on disk, like the examples they order: no user, no database,
467
+ // and each step resolved against the examples this install actually ships.
468
+ recipes: protectedProcedure
469
+ .output(z.array(exampleRecipeSummary))
470
+ .query(({ ctx }) => listExampleRecipes(ctx.apiOptions)),
592
471
  // ── public workflows ──────────────────────────────────────────────────────
593
472
  public: router({
594
473
  list: publicProcedure
595
474
  .input(publicListInput)
596
475
  .output(publicListOutput)
597
476
  .query(async ({ input }) => {
598
- const [workflows] = await Workflow.paginatePublic({ limit: input.limit });
477
+ const [workflows] = await Workflow.paginatePublic({
478
+ limit: input.limit
479
+ });
599
480
  return {
600
481
  workflows: workflows.map((w) => toWorkflowResponse(w)),
601
482
  next: null
@@ -612,30 +493,26 @@ export const workflowsRouter = router({
612
493
  return toWorkflowResponse(workflow);
613
494
  })
614
495
  }),
615
- // ── app (GET /api/workflows/:id/app) ─────────────────────────────────────
616
- app: protectedProcedure
617
- .input(appInput)
618
- .output(appOutput)
496
+ // ── terminalOutputs (GET /api/workflows/:id/terminal-outputs) ─────────────
497
+ // Returns the terminal media-output nodes of a workflow for the multi-output
498
+ // selection prompt in AddClipMenu.
499
+ terminalOutputs: protectedProcedure
500
+ .input(terminalOutputsInput)
501
+ .output(terminalOutputsOutput)
619
502
  .query(async ({ ctx, input }) => {
620
- const baseUrl = input.baseUrl ?? ctx.apiOptions.baseUrl ?? "http://127.0.0.1:7777";
621
- return {
622
- workflow_id: input.id,
623
- api_url: baseUrl
624
- };
625
- }),
626
- // ── generateName (POST /api/workflows/:id/generate-name) ─────────────────
627
- generateName: protectedProcedure
628
- .input(generateNameInput)
629
- .output(generateNameOutput)
630
- .mutation(async ({ ctx, input }) => {
631
503
  const workflow = (await Workflow.get(input.id));
632
504
  if (!workflow)
633
505
  throwApiError(ApiErrorCode.WORKFLOW_NOT_FOUND, "Workflow not found");
634
- if (workflow.user_id !== ctx.userId) {
506
+ if (workflow.access !== "public" && workflow.user_id !== ctx.userId) {
635
507
  throwApiError(ApiErrorCode.WORKFLOW_NOT_FOUND, "Workflow not found");
636
508
  }
637
- const name = deriveWorkflowName(workflow);
638
- return { name };
509
+ const outputs = findTerminalMediaOutputNodes(workflow).map((n) => ({
510
+ id: n.id,
511
+ type: n.type,
512
+ mediaType: OUTPUT_NODE_MEDIA_TYPES[n.type],
513
+ name: n.data?.name ?? ""
514
+ }));
515
+ return { outputs };
639
516
  }),
640
517
  // ── versions ──────────────────────────────────────────────────────────────
641
518
  versions: router({
@@ -644,11 +521,8 @@ export const workflowsRouter = router({
644
521
  .input(versionsListInput)
645
522
  .output(versionsListOutput)
646
523
  .query(async ({ ctx, input }) => {
647
- // Check ownership via the parent workflow
648
- const workflow = (await Workflow.get(input.id));
649
- if (!workflow || workflow.user_id !== ctx.userId) {
650
- throwApiError(ApiErrorCode.WORKFLOW_NOT_FOUND, "Workflow not found");
651
- }
524
+ // Owners and editors see version history
525
+ await requireWorkflowRole(input.id, ctx.userId, "editor");
652
526
  const versions = await WorkflowVersion.listForWorkflow(input.id, {
653
527
  limit: input.limit
654
528
  });
@@ -659,12 +533,7 @@ export const workflowsRouter = router({
659
533
  .input(versionCreateInput)
660
534
  .output(versionResponse)
661
535
  .mutation(async ({ ctx, input }) => {
662
- const workflow = (await Workflow.get(input.id));
663
- if (!workflow)
664
- throwApiError(ApiErrorCode.WORKFLOW_NOT_FOUND, "Workflow not found");
665
- if (workflow.user_id !== ctx.userId) {
666
- throwApiError(ApiErrorCode.WORKFLOW_NOT_FOUND, "Workflow not found");
667
- }
536
+ const { workflow } = await requireWorkflowRole(input.id, ctx.userId, "editor");
668
537
  const nextVer = await WorkflowVersion.nextVersion(input.id);
669
538
  const version = (await WorkflowVersion.create({
670
539
  workflow_id: input.id,
@@ -676,29 +545,12 @@ export const workflowsRouter = router({
676
545
  }));
677
546
  return toVersionResponse(version);
678
547
  }),
679
- // GET /api/workflows/:id/versions/:version
680
- get: protectedProcedure
681
- .input(versionGetInput)
682
- .output(versionResponse)
683
- .query(async ({ ctx, input }) => {
684
- const workflow = (await Workflow.get(input.id));
685
- if (!workflow || workflow.user_id !== ctx.userId) {
686
- throwApiError(ApiErrorCode.WORKFLOW_NOT_FOUND, "Workflow not found");
687
- }
688
- const version = await WorkflowVersion.findByVersion(input.id, input.version);
689
- if (!version)
690
- throwApiError(ApiErrorCode.NOT_FOUND, "Version not found");
691
- return toVersionResponse(version);
692
- }),
693
548
  // POST /api/workflows/:id/versions/:version/restore
694
549
  restore: protectedProcedure
695
550
  .input(versionRestoreInput)
696
551
  .output(workflowResponse)
697
552
  .mutation(async ({ ctx, input }) => {
698
- const workflow = (await Workflow.get(input.id));
699
- if (!workflow || workflow.user_id !== ctx.userId) {
700
- throwApiError(ApiErrorCode.WORKFLOW_NOT_FOUND, "Workflow not found");
701
- }
553
+ const { workflow } = await requireWorkflowRole(input.id, ctx.userId, "editor");
702
554
  const version = await WorkflowVersion.findByVersion(input.id, input.version);
703
555
  if (!version)
704
556
  throwApiError(ApiErrorCode.NOT_FOUND, "Version not found");
@@ -715,11 +567,161 @@ export const workflowsRouter = router({
715
567
  if (!version)
716
568
  throwApiError(ApiErrorCode.NOT_FOUND, "Version not found");
717
569
  if (version.user_id !== ctx.userId) {
718
- throwApiError(ApiErrorCode.NOT_FOUND, "Version not found");
570
+ // The workflow owner may prune versions saved by collaborators.
571
+ const parent = (await Workflow.get(version.workflow_id));
572
+ if (!parent || parent.user_id !== ctx.userId) {
573
+ throwApiError(ApiErrorCode.NOT_FOUND, "Version not found");
574
+ }
719
575
  }
720
576
  await version.delete();
721
577
  return { ok: true };
722
578
  })
579
+ }),
580
+ // ── sharing ────────────────────────────────────────────────────────────────
581
+ // Private sharing via role-scoped links: the owner mints a link, any
582
+ // authenticated user who redeems it becomes a collaborator (viewer/editor).
583
+ sharing: router({
584
+ // Collaborators + share links for the dialog. Owner only.
585
+ get: protectedProcedure
586
+ .input(sharingGetInput)
587
+ .output(sharingGetOutput)
588
+ .query(async ({ ctx, input }) => {
589
+ await requireWorkflowRole(input.id, ctx.userId, "owner");
590
+ const [collaborators, shares] = await Promise.all([
591
+ WorkflowCollaborator.listForWorkflow(input.id),
592
+ WorkflowShare.listForWorkflow(input.id)
593
+ ]);
594
+ return {
595
+ collaborators: collaborators.map(toCollaboratorItem),
596
+ shares: shares.map(toShareItem)
597
+ };
598
+ }),
599
+ // Mint (or return the existing active) share link for a role.
600
+ createLink: protectedProcedure
601
+ .input(sharingCreateLinkInput)
602
+ .output(shareItem)
603
+ .mutation(async ({ ctx, input }) => {
604
+ await requireWorkflowRole(input.id, ctx.userId, "owner");
605
+ const share = await WorkflowShare.ensure({
606
+ workflowId: input.id,
607
+ role: input.role,
608
+ createdBy: ctx.userId
609
+ });
610
+ return toShareItem(share);
611
+ }),
612
+ // Stop new redemptions of a link. Existing collaborators keep access.
613
+ revokeLink: protectedProcedure
614
+ .input(sharingRevokeLinkInput)
615
+ .output(sharingOkOutput)
616
+ .mutation(async ({ ctx, input }) => {
617
+ await requireWorkflowRole(input.id, ctx.userId, "owner");
618
+ const share = (await WorkflowShare.get(input.share_id));
619
+ if (!share || share.workflow_id !== input.id) {
620
+ throwApiError(ApiErrorCode.NOT_FOUND, "Share not found");
621
+ }
622
+ if (!share.isRevoked)
623
+ await share.revoke();
624
+ return { ok: true };
625
+ }),
626
+ // Change a collaborator's role. Owner only.
627
+ setRole: protectedProcedure
628
+ .input(sharingSetRoleInput)
629
+ .output(collaboratorItem)
630
+ .mutation(async ({ ctx, input }) => {
631
+ await requireWorkflowRole(input.id, ctx.userId, "owner");
632
+ const grant = await WorkflowCollaborator.findFor(input.id, input.user_id);
633
+ if (!grant) {
634
+ throwApiError(ApiErrorCode.NOT_FOUND, "Collaborator not found");
635
+ }
636
+ if (grant.role !== input.role) {
637
+ grant.role = input.role;
638
+ await grant.save();
639
+ }
640
+ return toCollaboratorItem(grant);
641
+ }),
642
+ // Remove a collaborator. Owner removes anyone; a collaborator may
643
+ // remove themself ("leave").
644
+ removeCollaborator: protectedProcedure
645
+ .input(sharingRemoveCollaboratorInput)
646
+ .output(sharingOkOutput)
647
+ .mutation(async ({ ctx, input }) => {
648
+ if (input.user_id !== ctx.userId) {
649
+ await requireWorkflowRole(input.id, ctx.userId, "owner");
650
+ }
651
+ const removed = await WorkflowCollaborator.remove(input.id, input.user_id);
652
+ if (!removed) {
653
+ throwApiError(ApiErrorCode.NOT_FOUND, "Collaborator not found");
654
+ }
655
+ return { ok: true };
656
+ }),
657
+ // Redeem a share link: the caller becomes a collaborator with the
658
+ // link's role and gets the workflow back for navigation.
659
+ accept: protectedProcedure
660
+ .input(sharingAcceptInput)
661
+ .output(sharingAcceptOutput)
662
+ .mutation(async ({ ctx, input }) => {
663
+ const share = await WorkflowShare.findByToken(input.token);
664
+ // A public link grants nothing; see lib/public-workflow-share.ts.
665
+ if (!share || share.isRevoked || share.role === "public") {
666
+ throwApiError(ApiErrorCode.NOT_FOUND, "Share link is invalid or revoked");
667
+ }
668
+ const workflow = (await Workflow.get(share.workflow_id));
669
+ if (!workflow) {
670
+ throwApiError(ApiErrorCode.WORKFLOW_NOT_FOUND, "Workflow not found");
671
+ }
672
+ // The owner opening their own link is a no-op, not a grant.
673
+ if (workflow.user_id !== ctx.userId) {
674
+ await WorkflowCollaborator.upsert({
675
+ workflowId: workflow.id,
676
+ userId: ctx.userId,
677
+ role: share.role,
678
+ invitedBy: share.created_by
679
+ });
680
+ }
681
+ return { workflow: toWorkflowResponse(workflow), role: share.role };
682
+ }),
683
+ // Copy a publicly linked workflow into the caller's own workflows as a
684
+ // new private row. The source stays untouched and grants nothing. The
685
+ // read side is the unauthenticated GET /api/shared-workflows/:token.
686
+ duplicatePublic: protectedProcedure
687
+ .input(sharingPublicTokenInput)
688
+ .output(workflowResponse)
689
+ .mutation(async ({ ctx, input }) => {
690
+ const source = await loadPublicShareWorkflow(input.token);
691
+ const copy = await runWorkflowService(() => createWorkflow(ctx.userId, {
692
+ name: source.name,
693
+ description: source.description,
694
+ tags: source.tags,
695
+ access: "private",
696
+ graph: safeGraph(source.id, source.graph),
697
+ settings: source.settings,
698
+ run_mode: source.run_mode
699
+ }));
700
+ return toWorkflowResponse(copy);
701
+ }),
702
+ // Workflows shared with the caller, with their role on each.
703
+ sharedWithMe: protectedProcedure
704
+ .input(sharedWithMeInput)
705
+ .output(sharedWithMeOutput)
706
+ .query(async ({ ctx, input }) => {
707
+ const grants = await WorkflowCollaborator.listForUser(ctx.userId);
708
+ const limited = grants.slice(0, input.limit);
709
+ const loaded = await Promise.all(limited.map(async (grant) => ({
710
+ grant,
711
+ workflow: (await Workflow.get(grant.workflow_id))
712
+ })));
713
+ const workflows = [];
714
+ for (const { grant, workflow } of loaded) {
715
+ // Skip grants pointing at deleted workflows.
716
+ if (!workflow)
717
+ continue;
718
+ workflows.push({
719
+ ...toWorkflowResponse(workflow),
720
+ shared_role: grant.role
721
+ });
722
+ }
723
+ return { workflows };
724
+ })
723
725
  })
724
726
  });
725
727
  //# sourceMappingURL=workflows.js.map