@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
@@ -0,0 +1,1147 @@
1
+ /**
2
+ * Bridges the canonical agent tools (`@nodetool-ai/agents`) onto the MCP server
3
+ * so external agents (Claude Code, ChatGPT, …) get the same surface the in-app
4
+ * chat agent runs on.
5
+ *
6
+ * That surface is CodeAct, not a flat catalog. `execute_code` is built by the
7
+ * same {@link createChatCodeActSession} the chat runner uses. `view_image` and
8
+ * asset transfer stay direct because pixels and file bytes need MCP channels.
9
+ * Every other capability lives inside the sandbox as `tools.<name>()` and the
10
+ * `nodetool.*` object model, found with `nodetool.searchTools()` and catalogued
11
+ * on `nodetool://capabilities` and `nodetool://sandbox`.
12
+ *
13
+ * The bridged set is *derived*, not hand-listed: `getBuiltinTools()` plus
14
+ * `getAllMcpTools()` plus the Google Workspace tools are exactly what
15
+ * `websocket-client-session` assembles for a chat turn, so a tool added to
16
+ * either catalog reaches the sandbox belt with no edit here. Only tools whose
17
+ * constructor needs something the catalogs can't supply (a timeline loader, the
18
+ * lazily probed provider map) are named
19
+ * individually below.
20
+ */
21
+ import { z } from "zod";
22
+ import { DIRECT_TOOL_NAMES, ProcessingContext as ProcessingContextImpl, SDK_NATIVE_TOOL_REPLACEMENTS, detectImageMime, isSvgBytes, loadMediaRefBytes, zodToJsonSchema } from "@nodetool-ai/runtime";
23
+ import { Tool, CODEACT_RESIDENT_TOOL_NAMES, createChatCodeActSession, availableBuiltinToolNames, GOOGLE_WORKSPACE_TOOL_NAMES, APIFY_TOOL_NAMES, SERPAPI_TOOL_NAMES, capabilityForName, capabilityFromTool, getAllMcpCapabilitySpecs, createCapabilityRun, contextSecretAvailability, headlessGate, EXECUTE_CODE_TOOL_NAME, NODETOOL_API_NAMESPACE_TOOLS, MCP_GUEST_CONTRACT, MCP_SANDBOX_RESOURCE_URI, MCP_SANDBOX_PROMPTS, buildMcpSandboxCatalog, extractInjectableImages, stripImagePayload } from "@nodetool-ai/agents";
24
+ import { FileStorageAdapter } from "@nodetool-ai/storage";
25
+ import { uiToolSchemas } from "@nodetool-ai/protocol";
26
+ import { loadConfiguredProviders } from "./configured-providers.js";
27
+ import { mcpToolHostDeps } from "./mcp-tool-deps.js";
28
+ import { getSecret, Asset, ImageDocument, TimelineSequence } from "@nodetool-ai/models";
29
+ import { WORKFLOW_DOCUMENT_TOOL_NAMES } from "@nodetool-ai/node-sdk";
30
+ import { createLogger, getNodetoolDataDir, isGoogleWorkspaceEnabled } from "@nodetool-ai/config";
31
+ import { basename, dirname, isAbsolute, join } from "node:path";
32
+ import { mkdtemp, readFile, rm, stat, writeFile } from "node:fs/promises";
33
+ import { tmpdir } from "node:os";
34
+ import { execFile as execFileCallback } from "node:child_process";
35
+ import { promisify } from "node:util";
36
+ import { fileURLToPath } from "node:url";
37
+ import sharp from "sharp";
38
+ import { getAssetAdapter } from "./lib/storage.js";
39
+ import { normalizeAssetContentType } from "./lib/asset-paths.js";
40
+ import { createAssetModelInterface, updateAssetBytesModelInterface } from "./lib/asset-model-interface.js";
41
+ import { isRecord, isString } from "./lib/wire-values.js";
42
+ const log = createLogger("nodetool.websocket.mcp-agent-tools");
43
+ const execFile = promisify(execFileCallback);
44
+ /**
45
+ * These capabilities answer readiness questions from the configured-provider
46
+ * map. Populate that map before dispatch so a first workflow call cannot
47
+ * mistake lazy loading for a missing provider.
48
+ */
49
+ const WORKFLOW_READINESS_TOOL_NAMES = new Set([
50
+ "plan_workflow",
51
+ "update_workflow_plan_step",
52
+ "build_workflow_from_plan"
53
+ ]);
54
+ /**
55
+ * Per-user workspace directory the bridged file tools (read_file, write_file,
56
+ * glob, grep, …) are rooted at. Kept under the NodeTool data dir rather than a
57
+ * temp dir because an MCP session is long-lived and spans many calls — a file
58
+ * written on one call has to still be there on the next. One directory per
59
+ * user, so a multi-user mount cannot let one caller read another's files.
60
+ */
61
+ function mcpWorkspaceDir(userId) {
62
+ // A user id reaches the filesystem as a path segment here, so allow only
63
+ // characters that cannot traverse out of the parent directory.
64
+ const safeUserId = userId.replace(/[^A-Za-z0-9_-]/g, "_") || "default";
65
+ return join(getNodetoolDataDir(), "mcp-workspaces", safeUserId);
66
+ }
67
+ /** Test-only: expose the workspace path rule for isolation assertions. */
68
+ export const __mcpWorkspaceDirForTests = mcpWorkspaceDir;
69
+ /**
70
+ * Build the shared ProcessingContext the bridged tools run against. REST-backed
71
+ * tools (create_workflow, list_models, …) read `NODETOOL_API_URL` from the
72
+ * inherited environment; media tools resolve providers via the secret resolver;
73
+ * save/media tools persist artifacts through `createAsset`; file tools read and
74
+ * write under the session's workspace directory.
75
+ */
76
+ function buildAgentToolContext(userId) {
77
+ const storage = getAssetAdapter();
78
+ const workspaceDir = mcpWorkspaceDir(userId);
79
+ const context = new ProcessingContextImpl({
80
+ jobId: "mcp-agent-tools",
81
+ userId,
82
+ // Bind secret lookups to the scoped user — never a global default.
83
+ secretResolver: (key) => getSecret(key, userId),
84
+ storage,
85
+ workspaceDir,
86
+ workspaceStorage: new FileStorageAdapter(workspaceDir)
87
+ });
88
+ context.setModelInterfaces({
89
+ createAsset: createAssetModelInterface,
90
+ updateAssetBytes: updateAssetBytesModelInterface,
91
+ getAssetInfo: async ({ userId, assetId }) => {
92
+ const asset = await Asset.find(userId, assetId);
93
+ if (!asset)
94
+ return null;
95
+ return {
96
+ id: asset.id,
97
+ content_type: asset.content_type,
98
+ name: asset.name,
99
+ metadata: asset.metadata ?? null
100
+ };
101
+ }
102
+ });
103
+ return context;
104
+ }
105
+ /**
106
+ * Read a `timeline_sequences` row for `validate_timeline`. There is no REST
107
+ * route for timelines (the API is tRPC-only), so the tool takes this loader
108
+ * instead of fetching. Ownership is checked the same way the tRPC router's
109
+ * `loadOwned` does — a row belonging to another user reads as not found.
110
+ */
111
+ const loadTimelineForUser = async (context, id) => {
112
+ const row = await TimelineSequence.findById(id);
113
+ if (!row || row.user_id !== context.userId)
114
+ return null;
115
+ return {
116
+ document: row.document,
117
+ fps: row.fps,
118
+ width: row.width,
119
+ height: row.height,
120
+ name: row.name
121
+ };
122
+ };
123
+ /**
124
+ * Read an `image_documents` row for `validate_sketch`. There is no REST route
125
+ * for sketches (the API is tRPC-only), so the tool takes this loader instead of
126
+ * fetching. Ownership is checked the same way the tRPC router's `loadOwned`
127
+ * does — a row belonging to another user reads as not found.
128
+ */
129
+ const loadSketchForUser = async (context, id) => {
130
+ const row = await ImageDocument.findById(id);
131
+ if (!row || row.user_id !== context.userId)
132
+ return null;
133
+ return {
134
+ document: row.document,
135
+ width: row.width,
136
+ height: row.height,
137
+ backgroundColor: row.background_color,
138
+ name: row.name
139
+ };
140
+ };
141
+ /** Test-only: expose the per-user context construction for scope assertions. */
142
+ export const __buildAgentToolContextForTests = (userId) => buildAgentToolContext(userId);
143
+ // ── JSON Schema → Zod shape ─────────────────────────────────────────
144
+ //
145
+ // The agent tools declare plain JSON-Schema; the MCP SDK's `server.tool`
146
+ // wants a Zod raw shape. These converters cover the property kinds the tools
147
+ // actually use (string/number/boolean/array/object, enums, defaults).
148
+ function jsonSchemaPropToZod(prop) {
149
+ const type = prop["type"];
150
+ switch (type) {
151
+ case "string": {
152
+ const values = prop["enum"];
153
+ if (Array.isArray(values) &&
154
+ values.every((v) => isString(v)) &&
155
+ values.length > 0) {
156
+ return z.enum(values);
157
+ }
158
+ return z.string();
159
+ }
160
+ case "number":
161
+ case "integer":
162
+ return z.number();
163
+ case "boolean":
164
+ return z.boolean();
165
+ case "array": {
166
+ const items = prop["items"];
167
+ return z.array(items ? jsonSchemaPropToZod(items) : z.unknown());
168
+ }
169
+ case "object":
170
+ return z.record(z.string(), z.unknown());
171
+ default:
172
+ return z.unknown();
173
+ }
174
+ }
175
+ function jsonSchemaToZodShape(schema) {
176
+ const shape = {};
177
+ const s = schema;
178
+ if (!s || s["type"] !== "object")
179
+ return shape;
180
+ const properties = s["properties"];
181
+ if (!properties)
182
+ return shape;
183
+ const required = new Set(Array.isArray(s["required"]) ? s["required"] : []);
184
+ for (const [key, prop] of Object.entries(properties)) {
185
+ let zt = jsonSchemaPropToZod(prop);
186
+ if (isString(prop["description"])) {
187
+ zt = zt.describe(prop["description"]);
188
+ }
189
+ if ("default" in prop) {
190
+ zt = zt.default(prop["default"]);
191
+ }
192
+ else if (!required.has(key)) {
193
+ zt = zt.optional();
194
+ }
195
+ shape[key] = zt;
196
+ }
197
+ return shape;
198
+ }
199
+ // ── MCP response helpers ────────────────────────────────────────────
200
+ function isErrorResult(result) {
201
+ if (!isRecord(result))
202
+ return false;
203
+ const r = result;
204
+ return Boolean(r["error"]) || r["success"] === false;
205
+ }
206
+ function toToolResponse(result) {
207
+ const isObject = isRecord(result);
208
+ const isError = isErrorResult(result);
209
+ const base = {
210
+ content: [{ type: "text", text: JSON.stringify(result ?? null) }]
211
+ };
212
+ const withError = isError ? { ...base, isError: true } : base;
213
+ return isObject && !isError
214
+ ? { ...withError, structuredContent: result }
215
+ : withError;
216
+ }
217
+ async function toImageToolResponse(result, context) {
218
+ const extracted = extractInjectableImages(result);
219
+ if (!extracted || isErrorResult(result)) {
220
+ return toToolResponse(result);
221
+ }
222
+ const response = toToolResponse(stripImagePayload(result));
223
+ const images = await Promise.all(extracted.images.map(async ({ image }) => {
224
+ const bytes = await loadMediaRefBytes(image, context);
225
+ if (!bytes?.length) {
226
+ throw new Error("Could not load image bytes for the MCP response.");
227
+ }
228
+ return {
229
+ type: "image",
230
+ data: Buffer.from(bytes).toString("base64"),
231
+ mimeType: detectImageMime(bytes)
232
+ };
233
+ }));
234
+ return { ...response, content: [...response.content, ...images] };
235
+ }
236
+ function errorResponse(err) {
237
+ return {
238
+ content: [
239
+ {
240
+ type: "text",
241
+ text: JSON.stringify({
242
+ error: err instanceof Error ? err.message : String(err)
243
+ })
244
+ }
245
+ ],
246
+ isError: true
247
+ };
248
+ }
249
+ /**
250
+ * Every agent tool the bridge offers, in registration order. Derived from the
251
+ * same catalogs `websocket-client-session` assembles a chat toolbelt from, so
252
+ * the two surfaces cannot drift.
253
+ *
254
+ * Dependency resolution is deferred to the session-owned capability run.
255
+ */
256
+ function collectBridgedSpecs(options) {
257
+ return [
258
+ ...availableBuiltinToolNames().map((name) => capabilityForName(name).spec),
259
+ ...getAllMcpCapabilitySpecs({ registry: options?.registry }),
260
+ ...(isGoogleWorkspaceEnabled() ? GOOGLE_WORKSPACE_TOOL_NAMES : []).map((name) => capabilityForName(name).spec),
261
+ ...[...APIFY_TOOL_NAMES, ...SERPAPI_TOOL_NAMES, "find_model", "list_models"].map((name) => capabilityForName(name).spec)
262
+ ];
263
+ }
264
+ /**
265
+ * The gate an MCP session runs under: `auto`, denying every escalation the
266
+ * ladder raises, with one standing approval.
267
+ *
268
+ * `auto` is D4 — a client's user connected this agent deliberately, and the
269
+ * session has no approval UI of its own, so a gate that could ask would only
270
+ * deadlock. The approver therefore denies: resolving `"allow"` would grant
271
+ * exactly what an escalation exists to withhold, and never resolving would
272
+ * hang the run (invariant I-4).
273
+ *
274
+ * The exception is `execute_code` itself, seeded into `sessionAllow`. Every
275
+ * action arrives as an MCP tool call the *client* put in front of its user —
276
+ * with the code in it — before sending it, and `sessionAllow` is the ladder's
277
+ * own channel for "the user already said yes". Without the seed,
278
+ * `admitCodeAction` would refuse every action that does not declare
279
+ * `risk: "low"` (an omitted declaration reads as `high`), which is most of
280
+ * them: the mount would answer and never act. Escalations raised *inside* a
281
+ * run — an Apify actor this install has not allowlisted, a security-monitor
282
+ * consult — are a different matter and still deny, because nothing here can
283
+ * put those in front of that user.
284
+ */
285
+ function mcpSessionGate() {
286
+ const gate = headlessGate("MCP");
287
+ gate.sessionAllow.add(EXECUTE_CODE_TOOL_NAME);
288
+ return gate;
289
+ }
290
+ /** URI of the structured capability catalog this mount publishes. */
291
+ export const MCP_CAPABILITIES_RESOURCE_URI = "nodetool://capabilities";
292
+ /** URI of the guest-JS surface this mount publishes. Re-exported for callers. */
293
+ export { MCP_SANDBOX_RESOURCE_URI };
294
+ const RENDERER_ID_PROPERTY = {
295
+ type: "string",
296
+ description: "Target a specific connected NodeTool editor. Omit to use the " +
297
+ "most-recently-active one. List ids with list_renderers()."
298
+ };
299
+ function recordValue(value) {
300
+ return isRecord(value) ? value : {};
301
+ }
302
+ async function executeFrontendTool(options, userId, name, args) {
303
+ const registry = options.frontendRendererRegistry;
304
+ if (!registry)
305
+ return { handled: false };
306
+ const { renderer_id, ...toolArgs } = args;
307
+ return registry.execute({
308
+ userId,
309
+ rendererId: isString(renderer_id) ? renderer_id : undefined,
310
+ toolName: name,
311
+ args: toolArgs
312
+ });
313
+ }
314
+ /** Import a local file or a URL into the current user's asset library. */
315
+ class ImportAssetTool extends Tool {
316
+ localFilePathsAllowed;
317
+ saveAsset;
318
+ name = "import_asset";
319
+ description = "Import a local file on a local MCP connection or an http(s) URL as a NodeTool asset. Returns its asset URI, size and media duration.";
320
+ jsonSchema = {
321
+ type: "object",
322
+ properties: {
323
+ path: {
324
+ type: "string",
325
+ description: "Absolute server-local path; local connections only."
326
+ },
327
+ url: { type: "string", description: "HTTP or HTTPS URL to fetch." },
328
+ name: { type: "string", description: "Optional asset name." },
329
+ content_type: { type: "string", description: "Optional MIME type." }
330
+ },
331
+ required: []
332
+ };
333
+ constructor(localFilePathsAllowed, saveAsset) {
334
+ super();
335
+ this.localFilePathsAllowed = localFilePathsAllowed;
336
+ this.saveAsset = saveAsset;
337
+ }
338
+ async process(context, params) {
339
+ const path = params["path"];
340
+ const url = params["url"];
341
+ if (isString(path) === isString(url)) {
342
+ throw new Error("Provide exactly one of path or url.");
343
+ }
344
+ if (isString(path) && (!this.localFilePathsAllowed || !isAbsolute(path))) {
345
+ throw new Error("path requires an absolute path on a local MCP connection.");
346
+ }
347
+ if (isString(url) && !/^https?:\/\//.test(url)) {
348
+ throw new Error("url must be an HTTP or HTTPS URL.");
349
+ }
350
+ const sourceName = isString(path)
351
+ ? basename(path)
352
+ : basename(new URL(url).pathname) || "download";
353
+ const name = isString(params["name"]) && params["name"].trim()
354
+ ? params["name"].trim()
355
+ : sourceName;
356
+ let result;
357
+ if (isString(path)) {
358
+ const bytes = await readFile(path);
359
+ const asset = await createAssetModelInterface({
360
+ userId: context.userId,
361
+ name,
362
+ contentType: isString(params["content_type"])
363
+ ? params["content_type"]
364
+ : "",
365
+ content: bytes
366
+ });
367
+ result = {
368
+ asset_id: asset.id,
369
+ asset_uri: `asset://${asset.id}`,
370
+ size: bytes.length
371
+ };
372
+ }
373
+ else {
374
+ const saveParams = {
375
+ name,
376
+ source: url
377
+ };
378
+ if (isString(params["content_type"])) {
379
+ saveParams["content_type"] = params["content_type"];
380
+ }
381
+ result = await this.saveAsset(saveParams);
382
+ }
383
+ if (!isRecord(result) || !isString(result["asset_id"]))
384
+ return result;
385
+ const asset = await Asset.find(context.userId, result["asset_id"]);
386
+ if (!asset)
387
+ return result;
388
+ return {
389
+ ...result,
390
+ asset_uri: `asset://${asset.id}`,
391
+ content_type: normalizeAssetContentType(asset.content_type, asset.name),
392
+ size: asset.size,
393
+ duration: asset.duration
394
+ };
395
+ }
396
+ }
397
+ class RenderDemoSurfaceTool extends Tool {
398
+ name = "render_demo_surface";
399
+ description = "Render a NodeTool product surface as a silent video asset. Cast IDs: chat hero-brief or chat-agent-qa; storyboard hero-storyboard or storyboard-assistant; script script-assistant; sketch sketch-assistant; timeline hero-timeline or promo-timeline; graph promo-trailer. A range plays at recorded speed unless duration_ms compresses it. For exact frame matching at 30 fps, duration_ms may be a multiple of 1000/30; sample_span_frames selects the cast range's interpolation span independently of output length. Available from a NodeTool source checkout with the demo renderer installed.";
400
+ jsonSchema = {
401
+ type: "object",
402
+ properties: {
403
+ surface: {
404
+ type: "string",
405
+ enum: ["chat", "storyboard", "script", "sketch", "timeline", "graph", "3d"]
406
+ },
407
+ cast_id: {
408
+ type: "string",
409
+ description: "Cast ID for the selected surface. See the tool description for valid IDs."
410
+ },
411
+ from_ms: {
412
+ type: "number",
413
+ description: "Source range start in milliseconds; provide with to_ms."
414
+ },
415
+ to_ms: {
416
+ type: "number",
417
+ description: "Source range end in milliseconds; provide with from_ms."
418
+ },
419
+ duration_ms: { type: "number", description: "Output duration in milliseconds for a ranged cast; compresses or expands the selected range." },
420
+ sample_span_frames: { type: "number", description: "Frame span from source range start to end. Defaults to output frame count minus one. Use 79 for the sizzle montage's cast clock." },
421
+ logical_width: { type: "number", description: "CSS layout width of the product surface before scaling to the output width." },
422
+ output_width: { type: "number", description: "Even output video width in pixels." },
423
+ output_height: { type: "number", description: "Even output video height in pixels." },
424
+ viewport: { type: "object", description: "Graph viewport {x, y, zoom} in logical surface pixels.", properties: { x: { type: "number" }, y: { type: "number" }, zoom: { type: "number" } }, required: ["x", "y", "zoom"] },
425
+ tracks_height_px: { type: "number", description: "Timeline track area height in logical CSS pixels." },
426
+ chrome: { type: "boolean", description: "Show timeline editor chrome; defaults to false." },
427
+ label: {
428
+ type: "boolean",
429
+ description: "Show the corner label; defaults to false."
430
+ }
431
+ },
432
+ required: ["surface"]
433
+ };
434
+ async process(context, params) {
435
+ const surface = params["surface"];
436
+ if (!isString(surface) ||
437
+ !["chat", "storyboard", "script", "sketch", "timeline", "graph", "3d"].includes(surface)) {
438
+ throw new Error("surface must be chat, storyboard, script, sketch, timeline, graph or 3d.");
439
+ }
440
+ const fromMs = params["from_ms"];
441
+ const toMs = params["to_ms"];
442
+ if (fromMs !== undefined &&
443
+ (typeof fromMs !== "number" || !Number.isFinite(fromMs) || fromMs < 0)) {
444
+ throw new Error("from_ms must be a nonnegative number.");
445
+ }
446
+ if (toMs !== undefined &&
447
+ (typeof toMs !== "number" || !Number.isFinite(toMs) || toMs <= 0)) {
448
+ throw new Error("to_ms must be a positive number.");
449
+ }
450
+ if (typeof fromMs === "number" &&
451
+ typeof toMs === "number" &&
452
+ toMs <= fromMs) {
453
+ throw new Error("to_ms must exceed from_ms.");
454
+ }
455
+ if ((fromMs === undefined) !== (toMs === undefined)) {
456
+ throw new Error("from_ms and to_ms must be supplied together.");
457
+ }
458
+ if (surface === "3d" && typeof toMs === "number" && toMs > 6000) {
459
+ throw new Error("The 3d surface range must end by 6000 ms.");
460
+ }
461
+ const casts = {
462
+ chat: ["hero-brief", "chat-agent-qa"],
463
+ storyboard: ["hero-storyboard", "storyboard-assistant"],
464
+ script: ["script-assistant"],
465
+ sketch: ["sketch-assistant"],
466
+ timeline: ["hero-timeline", "promo-timeline"],
467
+ graph: ["promo-trailer"],
468
+ "3d": []
469
+ };
470
+ const castId = params["cast_id"];
471
+ if (castId !== undefined && (!isString(castId) || !casts[surface]?.includes(castId))) {
472
+ throw new Error(`cast_id for ${surface} must be one of: ${casts[surface]?.join(", ") || "none"}.`);
473
+ }
474
+ const durationMs = params["duration_ms"];
475
+ if (durationMs !== undefined &&
476
+ (typeof durationMs !== "number" || !Number.isFinite(durationMs) || durationMs <= 0 || typeof fromMs !== "number")) {
477
+ throw new Error("duration_ms requires a source range and must be positive.");
478
+ }
479
+ const sampleSpanFrames = params["sample_span_frames"];
480
+ if (sampleSpanFrames !== undefined &&
481
+ (typeof sampleSpanFrames !== "number" || !Number.isInteger(sampleSpanFrames) || sampleSpanFrames <= 0 || typeof fromMs !== "number")) {
482
+ throw new Error("sample_span_frames requires a source range and must be a positive integer.");
483
+ }
484
+ for (const key of ["logical_width", "tracks_height_px"]) {
485
+ const value = params[key];
486
+ if (value !== undefined && (typeof value !== "number" || !Number.isFinite(value) || value <= 0)) {
487
+ throw new Error(`${key} must be a positive number.`);
488
+ }
489
+ }
490
+ for (const key of ["output_width", "output_height"]) {
491
+ const value = params[key];
492
+ if (value !== undefined && (typeof value !== "number" || !Number.isInteger(value) || value <= 0 || value % 2 !== 0)) {
493
+ throw new Error(`${key} must be a positive even integer.`);
494
+ }
495
+ }
496
+ const viewport = params["viewport"];
497
+ if (viewport !== undefined &&
498
+ (surface !== "graph" || !isRecord(viewport) ||
499
+ ["x", "y", "zoom"].some((key) => typeof viewport[key] !== "number" || !Number.isFinite(viewport[key])) ||
500
+ typeof viewport["zoom"] !== "number" || viewport["zoom"] <= 0)) {
501
+ throw new Error("viewport requires graph and finite x, y and positive zoom.");
502
+ }
503
+ if (params["tracks_height_px"] !== undefined && surface !== "timeline") {
504
+ throw new Error("tracks_height_px requires the timeline surface.");
505
+ }
506
+ const demoDir = join(dirname(fileURLToPath(import.meta.url)), "../../../demo");
507
+ const renderer = join(demoDir, "../node_modules/.bin/remotion");
508
+ try {
509
+ await stat(renderer);
510
+ await stat(join(demoDir, "src/index.ts"));
511
+ }
512
+ catch {
513
+ throw new Error("The demo renderer is unavailable on this NodeTool server.");
514
+ }
515
+ const props = {};
516
+ if (isString(castId))
517
+ props["castId"] = castId;
518
+ if (typeof fromMs === "number")
519
+ props["fromMs"] = fromMs;
520
+ if (typeof toMs === "number")
521
+ props["toMs"] = toMs;
522
+ if (typeof durationMs === "number") {
523
+ props["durationMs"] = durationMs;
524
+ props["realtime"] = false;
525
+ }
526
+ if (typeof sampleSpanFrames === "number")
527
+ props["sampleSpanFrames"] = sampleSpanFrames;
528
+ if (typeof params["logical_width"] === "number")
529
+ props["logicalWidth"] = params["logical_width"];
530
+ if (typeof params["output_width"] === "number")
531
+ props["outputWidth"] = params["output_width"];
532
+ if (typeof params["output_height"] === "number")
533
+ props["outputHeight"] = params["output_height"];
534
+ if (viewport !== undefined)
535
+ props["viewport"] = viewport;
536
+ if (typeof params["tracks_height_px"] === "number")
537
+ props["tracksHeightPx"] = params["tracks_height_px"];
538
+ if (typeof params["chrome"] === "boolean")
539
+ props["chrome"] = params["chrome"];
540
+ const ranged = typeof fromMs === "number";
541
+ if (ranged)
542
+ props["labelVisible"] = params["label"] === true;
543
+ const composition = `Surface-${surface}${ranged ? "-Harness" : params["label"] === true ? "" : "-Clean"}`;
544
+ const directory = await mkdtemp(join(tmpdir(), "nodetool-surface-"));
545
+ const output = join(directory, `${surface}.mp4`);
546
+ try {
547
+ await execFile(renderer, [
548
+ "render",
549
+ "src/index.ts",
550
+ composition,
551
+ output,
552
+ "--props",
553
+ JSON.stringify(props),
554
+ ...(surface === "3d" ? ["--gl=angle"] : [])
555
+ ], {
556
+ cwd: demoDir,
557
+ timeout: 300_000,
558
+ maxBuffer: 2 * 1024 * 1024
559
+ });
560
+ const bytes = await readFile(output);
561
+ const asset = await createAssetModelInterface({
562
+ userId: context.userId,
563
+ name: `${surface}-surface.mp4`,
564
+ contentType: "video/mp4",
565
+ content: bytes
566
+ });
567
+ return {
568
+ asset_id: asset.id,
569
+ asset_uri: `asset://${asset.id}`,
570
+ duration: asset.duration,
571
+ size: asset.size,
572
+ content_type: asset.content_type
573
+ };
574
+ }
575
+ finally {
576
+ await rm(directory, { recursive: true, force: true });
577
+ }
578
+ }
579
+ }
580
+ /** A `ui_*` request that must be handled by a connected editor. */
581
+ class FrontendUiTool extends Tool {
582
+ options;
583
+ userId;
584
+ name;
585
+ description;
586
+ jsonSchema;
587
+ constructor(name, description, jsonSchema, options, userId) {
588
+ super();
589
+ this.options = options;
590
+ this.userId = userId;
591
+ this.name = name;
592
+ this.description = description;
593
+ this.jsonSchema = jsonSchema;
594
+ }
595
+ // HOLDOUT (anti-slop/no-unknown-returns): a bridged tool's result is
596
+ // whatever the editor or capability answered — the open tool-result domain
597
+ // the base `Tool.process` contract in `@nodetool-ai/agents` declares.
598
+ async process(_context, params) {
599
+ const outcome = await executeFrontendTool(this.options, this.userId, this.name, params);
600
+ if (!outcome.handled) {
601
+ const rendererId = params["renderer_id"];
602
+ throw new Error(isString(rendererId)
603
+ ? `No connected NodeTool renderer with id "${rendererId}".`
604
+ : `${this.name} needs a connected NodeTool editor; none is open.`);
605
+ }
606
+ return outcome.result;
607
+ }
608
+ }
609
+ /** `list_renderers` as a belt tool: which editors a `ui_*` call could target. */
610
+ class ListRenderersTool extends Tool {
611
+ options;
612
+ userId;
613
+ name = "list_renderers";
614
+ description = "List connected NodeTool editor renderers that can run ui_* tools. Pass a " +
615
+ "returned renderer_id to a ui_* tool to target that editor; omit it to use " +
616
+ "the active one.";
617
+ jsonSchema = {
618
+ type: "object",
619
+ properties: {}
620
+ };
621
+ constructor(options, userId) {
622
+ super();
623
+ this.options = options;
624
+ this.userId = userId;
625
+ }
626
+ async process() {
627
+ const renderers = this.options.frontendRendererRegistry
628
+ ? this.options.frontendRendererRegistry
629
+ .list(this.userId)
630
+ .map((renderer, index) => ({
631
+ renderer_id: renderer.renderer_id,
632
+ active: index === 0
633
+ }))
634
+ : [];
635
+ return { renderers };
636
+ }
637
+ }
638
+ /**
639
+ * The `ui_*` schemas that steer a connected editor rather than edit a
640
+ * persisted workflow document, plus `list_renderers`.
641
+ */
642
+ function editorSteeringTools(options, userId) {
643
+ const documentToolNames = new Set(WORKFLOW_DOCUMENT_TOOL_NAMES);
644
+ const tools = [new ListRenderersTool(options, userId)];
645
+ for (const [name, schema] of Object.entries(uiToolSchemas)) {
646
+ if (documentToolNames.has(name))
647
+ continue;
648
+ const params = zodToJsonSchema(z.object(schema.parameters));
649
+ const properties = {
650
+ ...recordValue(params["properties"]),
651
+ renderer_id: RENDERER_ID_PROPERTY
652
+ };
653
+ tools.push(new FrontendUiTool(name, schema.description, { ...params, type: "object", properties }, options, userId));
654
+ }
655
+ return tools;
656
+ }
657
+ /** First sentence of a tool description, for the capabilities catalog. */
658
+ function oneLine(description) {
659
+ const flat = description.replace(/\s+/g, " ").trim();
660
+ const stop = flat.indexOf(". ");
661
+ const line = stop > 0 ? flat.slice(0, stop + 1) : flat;
662
+ return line.length > 200 ? `${line.slice(0, 197)}…` : line;
663
+ }
664
+ /**
665
+ * The machine-readable form of what this session can do, served as the
666
+ * `nodetool://capabilities` resource. A client that lists two tools learns the
667
+ * contract from the `execute_code` description, which is right for a model and
668
+ * poor for tooling; this is the same catalog with structure, and costs nothing
669
+ * at list time.
670
+ */
671
+ function buildCapabilityCatalog(belt, directToolNames) {
672
+ const available = new Set(belt.map((tool) => tool.name));
673
+ const modules = Object.entries(NODETOOL_API_NAMESPACE_TOOLS)
674
+ .map(([namespace, names]) => ({
675
+ namespace,
676
+ import: `nodetool.${namespace}`,
677
+ exports: names.filter((name) => available.has(name))
678
+ }))
679
+ .filter((entry) => entry.exports.length > 0);
680
+ return {
681
+ server: "nodetool",
682
+ direct_tools: directToolNames,
683
+ modules,
684
+ tools: belt
685
+ .map((tool) => ({
686
+ name: tool.name,
687
+ description: oneLine(tool.description),
688
+ permission_category: tool.category
689
+ }))
690
+ .sort((a, b) => a.name.localeCompare(b.name))
691
+ };
692
+ }
693
+ /**
694
+ * Register the agent surface on `server`: CodeAct, image viewing, asset
695
+ * transfer, and the promoted direct tools.
696
+ *
697
+ * `gate` defaults to {@link mcpSessionGate} — `auto` with an approver that
698
+ * denies, because an MCP session has no user of its own to ask. A host that
699
+ * does have an approval channel passes its own gate instead.
700
+ *
701
+ * Everything else the catalogs offer becomes the sandbox belt instead of an MCP
702
+ * tool. It stays fully reachable — `tools.<name>()`, the `nodetool.*` object
703
+ * model, `await nodetool.searchTools("query")` — and the `execute_code` description
704
+ * carries the same contract and catalog the chat runner puts in its system
705
+ * prompt, because MCP has no system prompt to put it in.
706
+ */
707
+ export function registerAgentMcpTools(server, options, gate = mcpSessionGate()) {
708
+ // Every bridged tool runs against one user's secrets and assets, so a session
709
+ // without an explicit user binding has no surface at all — a default user
710
+ // here would cross the tenant boundary on any mount serving more than one
711
+ // caller. `createMcpServer` refuses such a session before reaching here.
712
+ const scope = options.agentToolsScope;
713
+ if (!scope) {
714
+ throw new Error("registerAgentMcpTools requires options.agentToolsScope: an MCP session " +
715
+ "must be bound to a user id.");
716
+ }
717
+ const localFilePathsAllowed = scope.source === "stdio-local" || options.allowLocalFilePaths === true;
718
+ const context = buildAgentToolContext(scope.userId);
719
+ // Populated lazily on first `find_model` call — provider probing hits the
720
+ // secret store and network, so it's deferred out of server construction.
721
+ const sharedProviders = {};
722
+ let providersPromise = null;
723
+ const ensureProviders = () => {
724
+ if (!providersPromise) {
725
+ providersPromise = loadConfiguredProviders(scope.userId).then((loaded) => {
726
+ Object.assign(sharedProviders, loaded);
727
+ });
728
+ }
729
+ return providersPromise;
730
+ };
731
+ // The gate: `auto` with the headless deny, `mcpSessionGate` above. What
732
+ // bounds this surface is the session's user binding, not a per-call
733
+ // question the mount has nobody to ask.
734
+ //
735
+ // The codeact session mounts this run, so an action can import
736
+ // `@nodetool-ai/sandbox-nodetool/<namespace>` and land on `run.invoke`; the
737
+ // same run handles `tools.<name>()` and direct MCP registrations.
738
+ const workflowDocumentToolNames = new Set(WORKFLOW_DOCUMENT_TOOL_NAMES);
739
+ /**
740
+ * Run one bridged tool. The single execution path for both surfaces — a
741
+ * direct MCP call and a `tools.<name>()` call inside an action — so a
742
+ * capability cannot behave differently depending on how it was reached.
743
+ */
744
+ // HOLDOUT (anti-slop/no-unknown-returns): one path for every bridged tool,
745
+ // so the result is the open tool-result domain `Tool.process` declares.
746
+ const runBridgedTool = async (tool, args) => {
747
+ return capabilityRun.invoke(tool.name, args);
748
+ };
749
+ const register = (tool) => {
750
+ const isImageTool = tool.name === "view_image";
751
+ const schema = { ...jsonSchemaToZodShape(tool.inputSchema) };
752
+ if (isImageTool) {
753
+ schema["image_id"] = z
754
+ .string()
755
+ .describe("An asset id, asset:// URI, public https:// URL, or data: URI. " +
756
+ "Local MCP connections also accept an absolute disk image path or file:// URI.");
757
+ }
758
+ server.tool(tool.name, tool.description +
759
+ (isImageTool
760
+ ? " Returns MCP image content so you can see the pixels. On local MCP connections, image_id also accepts an absolute disk path or file:// URI."
761
+ : ""), schema, async (args) => {
762
+ try {
763
+ const input = { ...args };
764
+ const imageId = isImageTool && isString(input["image_id"])
765
+ ? input["image_id"].trim()
766
+ : undefined;
767
+ const isDiskImage = imageId &&
768
+ !imageId.startsWith("/api/storage/") &&
769
+ (isAbsolute(imageId) || imageId.startsWith("file://"));
770
+ if (isDiskImage) {
771
+ if (!localFilePathsAllowed) {
772
+ throw new Error("Disk image paths require a local MCP connection. Use an asset id on remote sessions.");
773
+ }
774
+ const path = imageId.startsWith("file://")
775
+ ? fileURLToPath(imageId)
776
+ : imageId;
777
+ const bytes = await readFile(path);
778
+ await sharp(bytes).metadata();
779
+ const mime = isSvgBytes(bytes)
780
+ ? "image/svg+xml"
781
+ : detectImageMime(bytes);
782
+ input["image_id"] =
783
+ `data:${mime};base64,${bytes.toString("base64")}`;
784
+ if (!isString(input["question"]) || !input["question"].trim()) {
785
+ input["question"] = `Image ${imageId}:`;
786
+ }
787
+ }
788
+ else if (imageId?.startsWith("data:")) {
789
+ if (!isString(input["question"]) || !input["question"].trim()) {
790
+ input["question"] = "Inline image:";
791
+ }
792
+ }
793
+ const result = await runBridgedTool(tool, input);
794
+ if (!isImageTool) {
795
+ return toToolResponse(result);
796
+ }
797
+ if (isRecord(result) && imageId && !isErrorResult(result)) {
798
+ result["image_id"] = imageId.startsWith("data:")
799
+ ? "inline image"
800
+ : imageId;
801
+ }
802
+ return await toImageToolResponse(result, context);
803
+ }
804
+ catch (err) {
805
+ return errorResponse(err);
806
+ }
807
+ });
808
+ };
809
+ // The belt the sandbox sees. Deduped by name, because the two catalogs
810
+ // overlap and a session must not offer one tool under two instances.
811
+ const hostCapabilities = [];
812
+ const legacyEntries = [
813
+ new ImportAssetTool(localFilePathsAllowed, (args) => capabilityRun.invoke("save_asset", args)),
814
+ new RenderDemoSurfaceTool(),
815
+ ...editorSteeringTools(options, scope.userId)
816
+ ].map(capabilityFromTool);
817
+ const entries = [
818
+ ...legacyEntries,
819
+ ...collectBridgedSpecs(options).map((spec) => capabilityForName(spec.name))
820
+ ];
821
+ const belt = [];
822
+ const beltNames = new Set();
823
+ for (const entry of entries) {
824
+ const tool = entry.spec;
825
+ if (beltNames.has(tool.name)) {
826
+ continue;
827
+ }
828
+ beltNames.add(tool.name);
829
+ const spec = workflowDocumentToolNames.has(tool.name)
830
+ ? {
831
+ ...tool,
832
+ zodSchema: tool.zodSchema instanceof z.ZodObject
833
+ ? tool.zodSchema.extend({ renderer_id: z.string().optional() })
834
+ : tool.zodSchema,
835
+ inputSchema: {
836
+ ...tool.inputSchema,
837
+ properties: {
838
+ ...recordValue(tool.inputSchema["properties"]),
839
+ renderer_id: RENDERER_ID_PROPERTY
840
+ }
841
+ }
842
+ }
843
+ : tool;
844
+ belt.push(spec);
845
+ hostCapabilities.push({
846
+ spec,
847
+ impl: async (run, args) => {
848
+ // Model search and workflow readiness read the configured-providers map at
849
+ // call time, so populate it before either handler runs. Without the
850
+ // workflow entries, the first plan/build call sees the lazy map while it
851
+ // is still empty and reports a false missing-provider blocker.
852
+ if (tool.name === "find_model" ||
853
+ tool.name === "list_models" ||
854
+ WORKFLOW_READINESS_TOOL_NAMES.has(tool.name)) {
855
+ await ensureProviders();
856
+ }
857
+ const isWorkflowDocumentTool = workflowDocumentToolNames.has(tool.name);
858
+ const isFrontendTool = tool.name.startsWith("ui_");
859
+ if (isWorkflowDocumentTool || isFrontendTool) {
860
+ const live = await executeFrontendTool(options, scope.userId, tool.name, args);
861
+ if (live.handled) {
862
+ return live.result;
863
+ }
864
+ const rendererId = args["renderer_id"];
865
+ if (isString(rendererId)) {
866
+ throw new Error(`No connected NodeTool renderer with id "${rendererId}".`);
867
+ }
868
+ // Workflow document tools have a server-side implementation and use the
869
+ // live editor when one is available. Other editor tools only exist in a
870
+ // connected renderer, so report the missing target clearly.
871
+ if (isFrontendTool && !isWorkflowDocumentTool) {
872
+ throw new Error(`${tool.name} needs a connected NodeTool editor; none is open.`);
873
+ }
874
+ }
875
+ const { renderer_id: _rendererId, ...serverArgs } = args;
876
+ return entry.impl(run, serverArgs);
877
+ }
878
+ });
879
+ }
880
+ const capabilityRun = createCapabilityRun({
881
+ capabilities: hostCapabilities,
882
+ context,
883
+ gate,
884
+ availableSecrets: contextSecretAvailability(context),
885
+ nodeRegistry: options.registry,
886
+ ...mcpToolHostDeps({
887
+ registry: options.registry,
888
+ metadataRoots: options.metadataRoots,
889
+ metadataMaxDepth: options.metadataMaxDepth,
890
+ examplesDir: options.examplesDir
891
+ }),
892
+ providers: sharedProviders,
893
+ loaders: { timeline: loadTimelineForUser, sketch: loadSketchForUser }
894
+ });
895
+ const byName = new Map(belt.map((tool) => [tool.name, tool]));
896
+ // `view_image` is the one channel that puts pixels into a caller's context,
897
+ // and pixels cannot ride the sandbox's JSON observation envelope — so it is a
898
+ // direct tool and is kept off the belt, exactly as the chat runner does.
899
+ const beltForSandbox = belt.filter((tool) => tool.name !== "view_image");
900
+ // The direct set, derived the way the CLI turn and the websocket runner
901
+ // derive theirs — minus the tools an MCP *client* already serves natively.
902
+ //
903
+ // `DIRECT_TOOL_NAMES` goes top level everywhere else because those are the
904
+ // shapes models are trained on, so a sandbox round trip whose only job is to
905
+ // forward one buys nothing. That argument holds here too. What does not hold
906
+ // is the file/search half: `SDK_NATIVE_TOOL_REPLACEMENTS` already names the
907
+ // tools a host agent covers with its own — and an MCP client (Claude Code,
908
+ // ChatGPT) is that host. Offering NodeTool's workspace-scoped `read_file`
909
+ // beside the client's own would put two tools of one name and two different
910
+ // roots in front of the same model.
911
+ //
912
+ // What is left has no host equivalent: discovery (which providers, models
913
+ // and node types this install has — a guess there is a hallucinated id that
914
+ // fails at generation time, after the run was paid for), the server-side
915
+ // reach that runs behind NodeTool's own SSRF guard and secrets, and
916
+ // `run_subtask`, whose child gets the NodeTool belt rather than the client's.
917
+ //
918
+ // Derived from both tables rather than hand-listed, so a tool added to
919
+ // either reaches this mount with no edit here.
920
+ const promotedDirect = belt.filter((tool) => DIRECT_TOOL_NAMES.has(tool.name) &&
921
+ !SDK_NATIVE_TOOL_REPLACEMENTS.has(tool.name));
922
+ // They stay on the belt: an action still calls them from code. Listing them
923
+ // as direct only moves where the prompt documents them.
924
+ const directToolNames = [
925
+ "view_image",
926
+ ...promotedDirect.map((tool) => tool.name)
927
+ ];
928
+ const session = createChatCodeActSession({
929
+ tools: beltForSandbox.map((tool) => ({
930
+ name: tool.name,
931
+ description: tool.description,
932
+ inputSchema: tool.inputSchema
933
+ })),
934
+ directToolNames,
935
+ residentToolNames: CODEACT_RESIDENT_TOOL_NAMES,
936
+ executeTool: async (call) => {
937
+ const tool = byName.get(call.name);
938
+ if (!tool)
939
+ throw new Error(`Unknown tool: ${call.name}`);
940
+ return runBridgedTool(tool, call.args);
941
+ },
942
+ capabilityRun
943
+ });
944
+ // The action tool. MCP has no system prompt, so the guest contract, the
945
+ // catalog and the sandbox summary ride in the description — the only field
946
+ // every MCP client is guaranteed to show the model. The short contract
947
+ // leads: many clients truncate a long description.
948
+ // `title` is a display label for NodeTool's own chat UI, and the action path
949
+ // never reads it — `executeAction` takes `code` and discards the rest. On the
950
+ // provider tool it is required because a system prompt teaches the contract
951
+ // and the label is what the user watches. MCP has neither: a client whose
952
+ // model skipped a field this server does not use had its whole action
953
+ // rejected on validation. It stays in the schema — described, and the
954
+ // contract in the description still asks for one — but is optional here.
955
+ //
956
+ // `risk` is optional here for the same reason, and it still decides
957
+ // nothing: `admitCodeAction` reads the standing `execute_code` approval in
958
+ // this session's gate (see `mcpSessionGate`) before it looks at the declared
959
+ // risk, because the client already asked its user about this very call.
960
+ //
961
+ // `description` follows `risk`: it is the text an approval dialog asks the
962
+ // user about, and this surface never opens one.
963
+ const optionalOnMcp = new Set(["title", "risk", "description"]);
964
+ const actionSchema = session.providerTool.inputSchema;
965
+ const actionShape = jsonSchemaToZodShape({
966
+ ...actionSchema,
967
+ required: (Array.isArray(actionSchema["required"])
968
+ ? actionSchema["required"]
969
+ : []).filter((name) => !optionalOnMcp.has(name))
970
+ });
971
+ server.tool(session.providerTool.name, `${MCP_GUEST_CONTRACT}\n\n${session.providerTool.description}\n\n${session.systemPromptSection}`, actionShape, async (args) => {
972
+ try {
973
+ // The session already returns the observation envelope as JSON text.
974
+ // Passing it through `toToolResponse` would encode it a second time
975
+ // and hand the caller a quoted string instead of an object.
976
+ const observation = await session.executeAction(args ?? {});
977
+ return {
978
+ content: [{ type: "text", text: observation }]
979
+ };
980
+ }
981
+ catch (err) {
982
+ return errorResponse(err);
983
+ }
984
+ });
985
+ // `view_image` carries image content, which an action's observation envelope
986
+ // cannot, so it is direct for a reason no other tool shares.
987
+ const viewImage = byName.get("view_image");
988
+ if (viewImage)
989
+ register(viewImage);
990
+ // The rest of the direct set, for parity with every other entrance.
991
+ for (const tool of promotedDirect)
992
+ register(tool);
993
+ server.tool("upload_asset", "Upload bytes to this user's NodeTool asset library. Pass content_base64 " +
994
+ "from any MCP client, or an absolute file_path on a local connection. " +
995
+ "The path is on the NodeTool server, not on a remote MCP client's machine.", {
996
+ name: z
997
+ .string()
998
+ .optional()
999
+ .describe("Asset name; defaults to the file name for file_path."),
1000
+ content_base64: z
1001
+ .string()
1002
+ .optional()
1003
+ .describe("File bytes encoded as base64."),
1004
+ file_path: z
1005
+ .string()
1006
+ .optional()
1007
+ .describe("Absolute server-local file path; local connections only."),
1008
+ content_type: z
1009
+ .string()
1010
+ .optional()
1011
+ .describe("MIME type; inferred from file_path or name when omitted.")
1012
+ }, async ({ name, content_base64, file_path, content_type }) => {
1013
+ try {
1014
+ if (Boolean(content_base64) === Boolean(file_path)) {
1015
+ throw new Error("Provide exactly one of content_base64 or file_path.");
1016
+ }
1017
+ if (file_path && (!localFilePathsAllowed || !isAbsolute(file_path))) {
1018
+ throw new Error("file_path requires an absolute path on a local MCP connection.");
1019
+ }
1020
+ const assetName = name?.trim() || (file_path ? basename(file_path) : "");
1021
+ if (!assetName)
1022
+ throw new Error("name is required for a base64 upload.");
1023
+ if (content_base64 &&
1024
+ !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(content_base64)) {
1025
+ throw new Error("content_base64 must be valid base64.");
1026
+ }
1027
+ const bytes = file_path
1028
+ ? await readFile(file_path)
1029
+ : Buffer.from(content_base64 ?? "", "base64");
1030
+ const asset = await createAssetModelInterface({
1031
+ userId: scope.userId,
1032
+ name: assetName,
1033
+ contentType: normalizeAssetContentType(content_type ?? "", file_path ?? assetName),
1034
+ content: bytes
1035
+ });
1036
+ return toToolResponse({
1037
+ asset_id: asset.id,
1038
+ asset_uri: `asset://${asset.id}`,
1039
+ name: asset.name,
1040
+ content_type: asset.content_type,
1041
+ size: bytes.length
1042
+ });
1043
+ }
1044
+ catch (err) {
1045
+ return errorResponse(err);
1046
+ }
1047
+ });
1048
+ server.tool("download_asset", "Download an asset owned by this user. Returns content_base64, or writes " +
1049
+ "to an absolute output_path on a local connection. The path is on the " +
1050
+ "NodeTool server, not on a remote MCP client's machine.", {
1051
+ asset_id: z
1052
+ .string()
1053
+ .describe("Asset ID returned by upload_asset or list_assets."),
1054
+ output_path: z
1055
+ .string()
1056
+ .optional()
1057
+ .describe("Absolute server-local output path; local connections only.")
1058
+ }, async ({ asset_id, output_path }) => {
1059
+ try {
1060
+ if (output_path &&
1061
+ (!localFilePathsAllowed || !isAbsolute(output_path))) {
1062
+ throw new Error("output_path requires an absolute path on a local MCP connection.");
1063
+ }
1064
+ const asset = await Asset.find(scope.userId, asset_id);
1065
+ if (!asset || asset.isFolder)
1066
+ throw new Error("Asset not found.");
1067
+ const bytes = await loadMediaRefBytes({ asset_id: asset.id }, context);
1068
+ if (!bytes)
1069
+ throw new Error("Asset bytes not found.");
1070
+ if (output_path)
1071
+ await writeFile(output_path, bytes);
1072
+ return toToolResponse({
1073
+ asset_id: asset.id,
1074
+ name: asset.name,
1075
+ content_type: asset.content_type,
1076
+ size: bytes.length,
1077
+ ...(output_path
1078
+ ? { output_path }
1079
+ : { content_base64: Buffer.from(bytes).toString("base64") })
1080
+ });
1081
+ }
1082
+ catch (err) {
1083
+ return errorResponse(err);
1084
+ }
1085
+ });
1086
+ // The structured catalog, for clients that want more than a description.
1087
+ const catalog = buildCapabilityCatalog(belt, [
1088
+ session.providerTool.name,
1089
+ ...directToolNames,
1090
+ "upload_asset",
1091
+ "download_asset"
1092
+ ]);
1093
+ server.registerResource("NodeTool Capabilities", MCP_CAPABILITIES_RESOURCE_URI, {
1094
+ description: "What this NodeTool session can do: the nodetool.* modules mounted for " +
1095
+ "it, every tool an execute_code action can call, and each tool's " +
1096
+ "permission category.",
1097
+ mimeType: "application/json"
1098
+ }, async (uri) => ({
1099
+ contents: [
1100
+ {
1101
+ uri: uri.href,
1102
+ mimeType: "application/json",
1103
+ text: JSON.stringify(catalog, null, 2)
1104
+ }
1105
+ ]
1106
+ }));
1107
+ const sandbox = buildMcpSandboxCatalog();
1108
+ server.registerResource("NodeTool Sandbox", MCP_SANDBOX_RESOURCE_URI, {
1109
+ description: "How to write execute_code: the guest contract, blocked globals, " +
1110
+ "bridges this chat session cannot use, and two worked examples.",
1111
+ mimeType: "application/json"
1112
+ }, async (uri) => ({
1113
+ contents: [
1114
+ {
1115
+ uri: uri.href,
1116
+ mimeType: "application/json",
1117
+ text: JSON.stringify(sandbox, null, 2)
1118
+ }
1119
+ ]
1120
+ }));
1121
+ for (const prompt of MCP_SANDBOX_PROMPTS) {
1122
+ server.registerPrompt(prompt.name, {
1123
+ title: prompt.title,
1124
+ description: prompt.description
1125
+ }, async () => ({
1126
+ messages: [
1127
+ {
1128
+ role: "user",
1129
+ content: { type: "text", text: prompt.snippet }
1130
+ }
1131
+ ]
1132
+ }));
1133
+ }
1134
+ log.info("Registered agent MCP tools", {
1135
+ userId: scope.userId,
1136
+ source: scope.source,
1137
+ registered: [
1138
+ session.providerTool.name,
1139
+ ...(viewImage ? ["view_image"] : []),
1140
+ "upload_asset",
1141
+ "download_asset"
1142
+ ],
1143
+ beltSize: belt.length
1144
+ });
1145
+ return capabilityRun;
1146
+ }
1147
+ //# sourceMappingURL=mcp-agent-tools.js.map