@nodetool-ai/runtime 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 (713) hide show
  1. package/README.md +29 -0
  2. package/dist/.nodetool-build-stamp +1 -0
  3. package/dist/agent-memory.d.ts +118 -0
  4. package/dist/agent-memory.d.ts.map +1 -0
  5. package/dist/agent-memory.js +186 -0
  6. package/dist/agent-memory.js.map +1 -0
  7. package/dist/async-local-storage.d.ts +20 -0
  8. package/dist/async-local-storage.d.ts.map +1 -0
  9. package/dist/async-local-storage.js +28 -0
  10. package/dist/async-local-storage.js.map +1 -0
  11. package/dist/blender-executor.d.ts +93 -0
  12. package/dist/blender-executor.d.ts.map +1 -0
  13. package/dist/blender-executor.js +294 -0
  14. package/dist/blender-executor.js.map +1 -0
  15. package/dist/comfy-executor.d.ts +23 -1
  16. package/dist/comfy-executor.d.ts.map +1 -1
  17. package/dist/comfy-executor.js +234 -55
  18. package/dist/comfy-executor.js.map +1 -1
  19. package/dist/context-packer.d.ts +1 -1
  20. package/dist/context-packer.d.ts.map +1 -1
  21. package/dist/context-packer.js +23 -25
  22. package/dist/context-packer.js.map +1 -1
  23. package/dist/context.d.ts +982 -127
  24. package/dist/context.d.ts.map +1 -1
  25. package/dist/context.js +2649 -530
  26. package/dist/context.js.map +1 -1
  27. package/dist/cost-reconciler.d.ts +32 -0
  28. package/dist/cost-reconciler.d.ts.map +1 -0
  29. package/dist/cost-reconciler.js +21 -0
  30. package/dist/cost-reconciler.js.map +1 -0
  31. package/dist/entities.d.ts +33 -0
  32. package/dist/entities.d.ts.map +1 -0
  33. package/dist/entities.js +43 -0
  34. package/dist/entities.js.map +1 -0
  35. package/dist/external-media-fetch.d.ts +29 -0
  36. package/dist/external-media-fetch.d.ts.map +1 -0
  37. package/dist/external-media-fetch.js +38 -0
  38. package/dist/external-media-fetch.js.map +1 -0
  39. package/dist/generation-receipt.d.ts +86 -0
  40. package/dist/generation-receipt.d.ts.map +1 -0
  41. package/dist/generation-receipt.js +137 -0
  42. package/dist/generation-receipt.js.map +1 -0
  43. package/dist/generation-registry.d.ts +75 -0
  44. package/dist/generation-registry.d.ts.map +1 -0
  45. package/dist/generation-registry.js +144 -0
  46. package/dist/generation-registry.js.map +1 -0
  47. package/dist/google/client.d.ts +196 -0
  48. package/dist/google/client.d.ts.map +1 -0
  49. package/dist/google/client.js +396 -0
  50. package/dist/google/client.js.map +1 -0
  51. package/dist/google/index.d.ts +3 -0
  52. package/dist/google/index.d.ts.map +1 -0
  53. package/dist/google/index.js +3 -0
  54. package/dist/google/index.js.map +1 -0
  55. package/dist/google/token.d.ts +15 -0
  56. package/dist/google/token.d.ts.map +1 -0
  57. package/dist/google/token.js +24 -0
  58. package/dist/google/token.js.map +1 -0
  59. package/dist/host-binaries.d.ts +106 -0
  60. package/dist/host-binaries.d.ts.map +1 -0
  61. package/dist/host-binaries.js +352 -0
  62. package/dist/host-binaries.js.map +1 -0
  63. package/dist/image-codec.d.ts +76 -0
  64. package/dist/image-codec.d.ts.map +1 -0
  65. package/dist/image-codec.js +293 -0
  66. package/dist/image-codec.js.map +1 -0
  67. package/dist/image-model-tasks.d.ts +15 -0
  68. package/dist/image-model-tasks.d.ts.map +1 -0
  69. package/dist/image-model-tasks.js +24 -0
  70. package/dist/image-model-tasks.js.map +1 -0
  71. package/dist/index.d.ts +67 -6
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +51 -4
  74. package/dist/index.js.map +1 -1
  75. package/dist/invocation-account.d.ts +43 -0
  76. package/dist/invocation-account.d.ts.map +1 -0
  77. package/dist/invocation-account.js +60 -0
  78. package/dist/invocation-account.js.map +1 -0
  79. package/dist/media-ref-bytes.d.ts +35 -0
  80. package/dist/media-ref-bytes.d.ts.map +1 -0
  81. package/dist/media-ref-bytes.js +191 -0
  82. package/dist/media-ref-bytes.js.map +1 -0
  83. package/dist/node-executor.d.ts +119 -2
  84. package/dist/node-executor.d.ts.map +1 -1
  85. package/dist/permission-gate.d.ts +152 -0
  86. package/dist/permission-gate.d.ts.map +1 -0
  87. package/dist/permission-gate.js +87 -0
  88. package/dist/permission-gate.js.map +1 -0
  89. package/dist/prefixed-storage-adapter.d.ts +33 -0
  90. package/dist/prefixed-storage-adapter.d.ts.map +1 -0
  91. package/dist/prefixed-storage-adapter.js +70 -0
  92. package/dist/prefixed-storage-adapter.js.map +1 -0
  93. package/dist/prompt-asset-refs.d.ts +222 -0
  94. package/dist/prompt-asset-refs.d.ts.map +1 -0
  95. package/dist/prompt-asset-refs.js +751 -0
  96. package/dist/prompt-asset-refs.js.map +1 -0
  97. package/dist/provider-cache.d.ts +3 -0
  98. package/dist/provider-cache.d.ts.map +1 -0
  99. package/dist/provider-cache.js +8 -0
  100. package/dist/provider-cache.js.map +1 -0
  101. package/dist/providers/aki-provider.d.ts +35 -10
  102. package/dist/providers/aki-provider.d.ts.map +1 -1
  103. package/dist/providers/aki-provider.js +90 -77
  104. package/dist/providers/aki-provider.js.map +1 -1
  105. package/dist/providers/alibaba-provider.d.ts +39 -0
  106. package/dist/providers/alibaba-provider.d.ts.map +1 -0
  107. package/dist/providers/alibaba-provider.js +86 -0
  108. package/dist/providers/alibaba-provider.js.map +1 -0
  109. package/dist/providers/anthropic-provider.d.ts +52 -3
  110. package/dist/providers/anthropic-provider.d.ts.map +1 -1
  111. package/dist/providers/anthropic-provider.js +1020 -338
  112. package/dist/providers/anthropic-provider.js.map +1 -1
  113. package/dist/providers/atlascloud-provider.d.ts +103 -0
  114. package/dist/providers/atlascloud-provider.d.ts.map +1 -0
  115. package/dist/providers/atlascloud-provider.js +1031 -0
  116. package/dist/providers/atlascloud-provider.js.map +1 -0
  117. package/dist/providers/atlascloud-transport.d.ts +100 -0
  118. package/dist/providers/atlascloud-transport.d.ts.map +1 -0
  119. package/dist/providers/atlascloud-transport.js +364 -0
  120. package/dist/providers/atlascloud-transport.js.map +1 -0
  121. package/dist/providers/atlascloud-webhook-registry.d.ts +35 -0
  122. package/dist/providers/atlascloud-webhook-registry.d.ts.map +1 -0
  123. package/dist/providers/atlascloud-webhook-registry.js +104 -0
  124. package/dist/providers/atlascloud-webhook-registry.js.map +1 -0
  125. package/dist/providers/audio-mime.d.ts +11 -0
  126. package/dist/providers/audio-mime.d.ts.map +1 -0
  127. package/dist/providers/audio-mime.js +46 -0
  128. package/dist/providers/audio-mime.js.map +1 -0
  129. package/dist/providers/base-provider.d.ts +501 -32
  130. package/dist/providers/base-provider.d.ts.map +1 -1
  131. package/dist/providers/base-provider.js +1280 -87
  132. package/dist/providers/base-provider.js.map +1 -1
  133. package/dist/providers/cassette-provider.d.ts +217 -0
  134. package/dist/providers/cassette-provider.d.ts.map +1 -0
  135. package/dist/providers/cassette-provider.js +502 -0
  136. package/dist/providers/cassette-provider.js.map +1 -0
  137. package/dist/providers/cerebras-provider.d.ts +6 -12
  138. package/dist/providers/cerebras-provider.d.ts.map +1 -1
  139. package/dist/providers/cerebras-provider.js +8 -33
  140. package/dist/providers/cerebras-provider.js.map +1 -1
  141. package/dist/providers/claude-agent-provider.d.ts +107 -74
  142. package/dist/providers/claude-agent-provider.d.ts.map +1 -1
  143. package/dist/providers/claude-agent-provider.js +1279 -517
  144. package/dist/providers/claude-agent-provider.js.map +1 -1
  145. package/dist/providers/codex-provider.d.ts +84 -0
  146. package/dist/providers/codex-provider.d.ts.map +1 -0
  147. package/dist/providers/codex-provider.js +505 -0
  148. package/dist/providers/codex-provider.js.map +1 -0
  149. package/dist/providers/cohere-provider.d.ts +7 -3
  150. package/dist/providers/cohere-provider.d.ts.map +1 -1
  151. package/dist/providers/cohere-provider.js +14 -2
  152. package/dist/providers/cohere-provider.js.map +1 -1
  153. package/dist/providers/comfy-cloud-provider.d.ts +30 -0
  154. package/dist/providers/comfy-cloud-provider.d.ts.map +1 -0
  155. package/dist/providers/comfy-cloud-provider.js +42 -0
  156. package/dist/providers/comfy-cloud-provider.js.map +1 -0
  157. package/dist/providers/content-filter.d.ts +46 -0
  158. package/dist/providers/content-filter.d.ts.map +1 -0
  159. package/dist/providers/content-filter.js +92 -0
  160. package/dist/providers/content-filter.js.map +1 -0
  161. package/dist/providers/context-exceeded.d.ts +37 -0
  162. package/dist/providers/context-exceeded.d.ts.map +1 -0
  163. package/dist/providers/context-exceeded.js +114 -0
  164. package/dist/providers/context-exceeded.js.map +1 -0
  165. package/dist/providers/context-window.d.ts +44 -0
  166. package/dist/providers/context-window.d.ts.map +1 -0
  167. package/dist/providers/context-window.js +145 -0
  168. package/dist/providers/context-window.js.map +1 -0
  169. package/dist/providers/contract/index.d.ts +4 -0
  170. package/dist/providers/contract/index.d.ts.map +1 -0
  171. package/dist/providers/contract/index.js +4 -0
  172. package/dist/providers/contract/index.js.map +1 -0
  173. package/dist/providers/contract/probe-manifest.d.ts +75 -0
  174. package/dist/providers/contract/probe-manifest.d.ts.map +1 -0
  175. package/dist/providers/contract/probe-manifest.js +379 -0
  176. package/dist/providers/contract/probe-manifest.js.map +1 -0
  177. package/dist/providers/contract/probe-runner.d.ts +57 -0
  178. package/dist/providers/contract/probe-runner.d.ts.map +1 -0
  179. package/dist/providers/contract/probe-runner.js +180 -0
  180. package/dist/providers/contract/probe-runner.js.map +1 -0
  181. package/dist/providers/contract/redact.d.ts +29 -0
  182. package/dist/providers/contract/redact.d.ts.map +1 -0
  183. package/dist/providers/contract/redact.js +113 -0
  184. package/dist/providers/contract/redact.js.map +1 -0
  185. package/dist/providers/core-tools.d.ts +75 -0
  186. package/dist/providers/core-tools.d.ts.map +1 -0
  187. package/dist/providers/core-tools.js +128 -0
  188. package/dist/providers/core-tools.js.map +1 -0
  189. package/dist/providers/cost-calculator.d.ts +69 -50
  190. package/dist/providers/cost-calculator.d.ts.map +1 -1
  191. package/dist/providers/cost-calculator.js +207 -397
  192. package/dist/providers/cost-calculator.js.map +1 -1
  193. package/dist/providers/credential-check.d.ts +45 -0
  194. package/dist/providers/credential-check.d.ts.map +1 -0
  195. package/dist/providers/credential-check.js +164 -0
  196. package/dist/providers/credential-check.js.map +1 -0
  197. package/dist/providers/custom-model-kinds.d.ts +33 -0
  198. package/dist/providers/custom-model-kinds.d.ts.map +1 -0
  199. package/dist/providers/custom-model-kinds.js +96 -0
  200. package/dist/providers/custom-model-kinds.js.map +1 -0
  201. package/dist/providers/custom-openai-provider.d.ts +83 -0
  202. package/dist/providers/custom-openai-provider.d.ts.map +1 -0
  203. package/dist/providers/custom-openai-provider.js +190 -0
  204. package/dist/providers/custom-openai-provider.js.map +1 -0
  205. package/dist/providers/custom-provider-registry.d.ts +19 -0
  206. package/dist/providers/custom-provider-registry.d.ts.map +1 -0
  207. package/dist/providers/custom-provider-registry.js +52 -0
  208. package/dist/providers/custom-provider-registry.js.map +1 -0
  209. package/dist/providers/deepseek-provider.d.ts +8 -14
  210. package/dist/providers/deepseek-provider.d.ts.map +1 -1
  211. package/dist/providers/deepseek-provider.js +6 -35
  212. package/dist/providers/deepseek-provider.js.map +1 -1
  213. package/dist/providers/defaults.d.ts +12 -0
  214. package/dist/providers/defaults.d.ts.map +1 -0
  215. package/dist/providers/defaults.js +12 -0
  216. package/dist/providers/defaults.js.map +1 -0
  217. package/dist/providers/dreamina-models.d.ts +5 -0
  218. package/dist/providers/dreamina-models.d.ts.map +1 -0
  219. package/dist/providers/dreamina-models.js +57 -0
  220. package/dist/providers/dreamina-models.js.map +1 -0
  221. package/dist/providers/dreamina-music.d.ts +52 -0
  222. package/dist/providers/dreamina-music.d.ts.map +1 -0
  223. package/dist/providers/dreamina-music.js +115 -0
  224. package/dist/providers/dreamina-music.js.map +1 -0
  225. package/dist/providers/dreamina-provider.d.ts +62 -0
  226. package/dist/providers/dreamina-provider.d.ts.map +1 -0
  227. package/dist/providers/dreamina-provider.js +790 -0
  228. package/dist/providers/dreamina-provider.js.map +1 -0
  229. package/dist/providers/elevenlabs-provider.d.ts +50 -0
  230. package/dist/providers/elevenlabs-provider.d.ts.map +1 -0
  231. package/dist/providers/elevenlabs-provider.js +147 -0
  232. package/dist/providers/elevenlabs-provider.js.map +1 -0
  233. package/dist/providers/entity-references.d.ts +31 -0
  234. package/dist/providers/entity-references.d.ts.map +1 -0
  235. package/dist/providers/entity-references.js +113 -0
  236. package/dist/providers/entity-references.js.map +1 -0
  237. package/dist/providers/evolink-provider.d.ts +40 -0
  238. package/dist/providers/evolink-provider.d.ts.map +1 -0
  239. package/dist/providers/evolink-provider.js +312 -0
  240. package/dist/providers/evolink-provider.js.map +1 -0
  241. package/dist/providers/fake-provider.d.ts +74 -2
  242. package/dist/providers/fake-provider.d.ts.map +1 -1
  243. package/dist/providers/fake-provider.js +213 -1
  244. package/dist/providers/fake-provider.js.map +1 -1
  245. package/dist/providers/fal-generations.d.ts +106 -0
  246. package/dist/providers/fal-generations.d.ts.map +1 -0
  247. package/dist/providers/fal-generations.js +286 -0
  248. package/dist/providers/fal-generations.js.map +1 -0
  249. package/dist/providers/fal-provider.d.ts +173 -8
  250. package/dist/providers/fal-provider.d.ts.map +1 -1
  251. package/dist/providers/fal-provider.js +1396 -64
  252. package/dist/providers/fal-provider.js.map +1 -1
  253. package/dist/providers/fal-queue.d.ts +47 -0
  254. package/dist/providers/fal-queue.d.ts.map +1 -0
  255. package/dist/providers/fal-queue.js +231 -0
  256. package/dist/providers/fal-queue.js.map +1 -0
  257. package/dist/providers/gemini-provider.d.ts +150 -9
  258. package/dist/providers/gemini-provider.d.ts.map +1 -1
  259. package/dist/providers/gemini-provider.js +1515 -316
  260. package/dist/providers/gemini-provider.js.map +1 -1
  261. package/dist/providers/gmi-provider.d.ts +21 -0
  262. package/dist/providers/gmi-provider.d.ts.map +1 -0
  263. package/dist/providers/gmi-provider.js +34 -0
  264. package/dist/providers/gmi-provider.js.map +1 -0
  265. package/dist/providers/gpt-image-size.d.ts +3 -0
  266. package/dist/providers/gpt-image-size.d.ts.map +1 -0
  267. package/dist/providers/gpt-image-size.js +37 -0
  268. package/dist/providers/gpt-image-size.js.map +1 -0
  269. package/dist/providers/groq-provider.d.ts +9 -12
  270. package/dist/providers/groq-provider.d.ts.map +1 -1
  271. package/dist/providers/groq-provider.js +19 -33
  272. package/dist/providers/groq-provider.js.map +1 -1
  273. package/dist/providers/groq-request.d.ts +38 -0
  274. package/dist/providers/groq-request.d.ts.map +1 -0
  275. package/dist/providers/groq-request.js +138 -0
  276. package/dist/providers/groq-request.js.map +1 -0
  277. package/dist/providers/higgsfield-provider.d.ts +31 -0
  278. package/dist/providers/higgsfield-provider.d.ts.map +1 -0
  279. package/dist/providers/higgsfield-provider.js +143 -0
  280. package/dist/providers/higgsfield-provider.js.map +1 -0
  281. package/dist/providers/higgsfield-transport.d.ts +106 -0
  282. package/dist/providers/higgsfield-transport.d.ts.map +1 -0
  283. package/dist/providers/higgsfield-transport.js +182 -0
  284. package/dist/providers/higgsfield-transport.js.map +1 -0
  285. package/dist/providers/http-transport.d.ts +74 -0
  286. package/dist/providers/http-transport.d.ts.map +1 -0
  287. package/dist/providers/http-transport.js +152 -0
  288. package/dist/providers/http-transport.js.map +1 -0
  289. package/dist/providers/huggingface-provider.d.ts +73 -4
  290. package/dist/providers/huggingface-provider.d.ts.map +1 -1
  291. package/dist/providers/huggingface-provider.js +240 -34
  292. package/dist/providers/huggingface-provider.js.map +1 -1
  293. package/dist/providers/image-mime.d.ts +39 -0
  294. package/dist/providers/image-mime.d.ts.map +1 -0
  295. package/dist/providers/image-mime.js +111 -0
  296. package/dist/providers/image-mime.js.map +1 -0
  297. package/dist/providers/image-ref.d.ts +21 -0
  298. package/dist/providers/image-ref.d.ts.map +1 -0
  299. package/dist/providers/image-ref.js +44 -0
  300. package/dist/providers/image-ref.js.map +1 -0
  301. package/dist/providers/index.d.ts +87 -8
  302. package/dist/providers/index.d.ts.map +1 -1
  303. package/dist/providers/index.js +250 -56
  304. package/dist/providers/index.js.map +1 -1
  305. package/dist/providers/jina-provider.d.ts +12 -3
  306. package/dist/providers/jina-provider.d.ts.map +1 -1
  307. package/dist/providers/jina-provider.js +21 -7
  308. package/dist/providers/jina-provider.js.map +1 -1
  309. package/dist/providers/kie-provider.d.ts +172 -10
  310. package/dist/providers/kie-provider.d.ts.map +1 -1
  311. package/dist/providers/kie-provider.js +1190 -228
  312. package/dist/providers/kie-provider.js.map +1 -1
  313. package/dist/providers/kie-webhook-registry.d.ts +28 -0
  314. package/dist/providers/kie-webhook-registry.d.ts.map +1 -0
  315. package/dist/providers/kie-webhook-registry.js +91 -0
  316. package/dist/providers/kie-webhook-registry.js.map +1 -0
  317. package/dist/providers/llama-provider.d.ts +23 -36
  318. package/dist/providers/llama-provider.d.ts.map +1 -1
  319. package/dist/providers/llama-provider.js +50 -355
  320. package/dist/providers/llama-provider.js.map +1 -1
  321. package/dist/providers/lmstudio-provider.d.ts +4 -7
  322. package/dist/providers/lmstudio-provider.d.ts.map +1 -1
  323. package/dist/providers/lmstudio-provider.js +24 -15
  324. package/dist/providers/lmstudio-provider.js.map +1 -1
  325. package/dist/providers/loop-tracing.d.ts +17 -0
  326. package/dist/providers/loop-tracing.d.ts.map +1 -0
  327. package/dist/providers/loop-tracing.js +132 -0
  328. package/dist/providers/loop-tracing.js.map +1 -0
  329. package/dist/providers/manifest-models.d.ts +341 -1
  330. package/dist/providers/manifest-models.d.ts.map +1 -1
  331. package/dist/providers/manifest-models.js +1106 -22
  332. package/dist/providers/manifest-models.js.map +1 -1
  333. package/dist/providers/media-mime.d.ts +14 -0
  334. package/dist/providers/media-mime.d.ts.map +1 -0
  335. package/dist/providers/media-mime.js +35 -0
  336. package/dist/providers/media-mime.js.map +1 -0
  337. package/dist/providers/meshy-provider.d.ts +16 -2
  338. package/dist/providers/meshy-provider.d.ts.map +1 -1
  339. package/dist/providers/meshy-provider.js +82 -46
  340. package/dist/providers/meshy-provider.js.map +1 -1
  341. package/dist/providers/meta-provider.d.ts +22 -0
  342. package/dist/providers/meta-provider.d.ts.map +1 -0
  343. package/dist/providers/meta-provider.js +54 -0
  344. package/dist/providers/meta-provider.js.map +1 -0
  345. package/dist/providers/minimax-provider.d.ts +27 -18
  346. package/dist/providers/minimax-provider.d.ts.map +1 -1
  347. package/dist/providers/minimax-provider.js +222 -72
  348. package/dist/providers/minimax-provider.js.map +1 -1
  349. package/dist/providers/mistral-provider.d.ts +8 -12
  350. package/dist/providers/mistral-provider.d.ts.map +1 -1
  351. package/dist/providers/mistral-provider.js +15 -34
  352. package/dist/providers/mistral-provider.js.map +1 -1
  353. package/dist/providers/moonshot-provider.d.ts +11 -15
  354. package/dist/providers/moonshot-provider.d.ts.map +1 -1
  355. package/dist/providers/moonshot-provider.js +33 -23
  356. package/dist/providers/moonshot-provider.js.map +1 -1
  357. package/dist/providers/node-llama-cpp-provider.d.ts +99 -0
  358. package/dist/providers/node-llama-cpp-provider.d.ts.map +1 -0
  359. package/dist/providers/node-llama-cpp-provider.js +484 -0
  360. package/dist/providers/node-llama-cpp-provider.js.map +1 -0
  361. package/dist/providers/nodetool-provider.d.ts +49 -0
  362. package/dist/providers/nodetool-provider.d.ts.map +1 -0
  363. package/dist/providers/nodetool-provider.js +222 -0
  364. package/dist/providers/nodetool-provider.js.map +1 -0
  365. package/dist/providers/oauth/browser-launcher.d.ts +23 -0
  366. package/dist/providers/oauth/browser-launcher.d.ts.map +1 -0
  367. package/dist/providers/oauth/browser-launcher.js +45 -0
  368. package/dist/providers/oauth/browser-launcher.js.map +1 -0
  369. package/dist/providers/oauth/claude-code-credentials.d.ts +74 -0
  370. package/dist/providers/oauth/claude-code-credentials.d.ts.map +1 -0
  371. package/dist/providers/oauth/claude-code-credentials.js +133 -0
  372. package/dist/providers/oauth/claude-code-credentials.js.map +1 -0
  373. package/dist/providers/oauth/claude-code-login.d.ts +124 -0
  374. package/dist/providers/oauth/claude-code-login.d.ts.map +1 -0
  375. package/dist/providers/oauth/claude-code-login.js +230 -0
  376. package/dist/providers/oauth/claude-code-login.js.map +1 -0
  377. package/dist/providers/oauth/claude-code-oauth-client.d.ts +111 -0
  378. package/dist/providers/oauth/claude-code-oauth-client.d.ts.map +1 -0
  379. package/dist/providers/oauth/claude-code-oauth-client.js +207 -0
  380. package/dist/providers/oauth/claude-code-oauth-client.js.map +1 -0
  381. package/dist/providers/oauth/errors.d.ts +54 -0
  382. package/dist/providers/oauth/errors.d.ts.map +1 -0
  383. package/dist/providers/oauth/errors.js +79 -0
  384. package/dist/providers/oauth/errors.js.map +1 -0
  385. package/dist/providers/oauth/index.d.ts +105 -0
  386. package/dist/providers/oauth/index.d.ts.map +1 -0
  387. package/dist/providers/oauth/index.js +167 -0
  388. package/dist/providers/oauth/index.js.map +1 -0
  389. package/dist/providers/oauth/jwt-claims.d.ts +23 -0
  390. package/dist/providers/oauth/jwt-claims.d.ts.map +1 -0
  391. package/dist/providers/oauth/jwt-claims.js +67 -0
  392. package/dist/providers/oauth/jwt-claims.js.map +1 -0
  393. package/dist/providers/oauth/local-callback-server.d.ts +60 -0
  394. package/dist/providers/oauth/local-callback-server.d.ts.map +1 -0
  395. package/dist/providers/oauth/local-callback-server.js +148 -0
  396. package/dist/providers/oauth/local-callback-server.js.map +1 -0
  397. package/dist/providers/oauth/oauth-client.d.ts +55 -0
  398. package/dist/providers/oauth/oauth-client.d.ts.map +1 -0
  399. package/dist/providers/oauth/oauth-client.js +161 -0
  400. package/dist/providers/oauth/oauth-client.js.map +1 -0
  401. package/dist/providers/oauth/openai-oauth-provider.d.ts +129 -0
  402. package/dist/providers/oauth/openai-oauth-provider.d.ts.map +1 -0
  403. package/dist/providers/oauth/openai-oauth-provider.js +265 -0
  404. package/dist/providers/oauth/openai-oauth-provider.js.map +1 -0
  405. package/dist/providers/oauth/pkce-helper.d.ts +43 -0
  406. package/dist/providers/oauth/pkce-helper.d.ts.map +1 -0
  407. package/dist/providers/oauth/pkce-helper.js +57 -0
  408. package/dist/providers/oauth/pkce-helper.js.map +1 -0
  409. package/dist/providers/oauth/redaction.d.ts +22 -0
  410. package/dist/providers/oauth/redaction.d.ts.map +1 -0
  411. package/dist/providers/oauth/redaction.js +59 -0
  412. package/dist/providers/oauth/redaction.js.map +1 -0
  413. package/dist/providers/oauth/secure-credential-store.d.ts +67 -0
  414. package/dist/providers/oauth/secure-credential-store.d.ts.map +1 -0
  415. package/dist/providers/oauth/secure-credential-store.js +73 -0
  416. package/dist/providers/oauth/secure-credential-store.js.map +1 -0
  417. package/dist/providers/oauth/token-store.d.ts +53 -0
  418. package/dist/providers/oauth/token-store.d.ts.map +1 -0
  419. package/dist/providers/oauth/token-store.js +78 -0
  420. package/dist/providers/oauth/token-store.js.map +1 -0
  421. package/dist/providers/oauth/types.d.ts +64 -0
  422. package/dist/providers/oauth/types.d.ts.map +1 -0
  423. package/dist/providers/oauth/types.js +12 -0
  424. package/dist/providers/oauth/types.js.map +1 -0
  425. package/dist/providers/object-tracking.d.ts +47 -0
  426. package/dist/providers/object-tracking.d.ts.map +1 -0
  427. package/dist/providers/object-tracking.js +46 -0
  428. package/dist/providers/object-tracking.js.map +1 -0
  429. package/dist/providers/offline-model-index.d.ts +20 -0
  430. package/dist/providers/offline-model-index.d.ts.map +1 -0
  431. package/dist/providers/offline-model-index.js +112 -0
  432. package/dist/providers/offline-model-index.js.map +1 -0
  433. package/dist/providers/ollama-provider.d.ts +30 -2
  434. package/dist/providers/ollama-provider.d.ts.map +1 -1
  435. package/dist/providers/ollama-provider.js +198 -43
  436. package/dist/providers/ollama-provider.js.map +1 -1
  437. package/dist/providers/openai-compat/client.d.ts +57 -0
  438. package/dist/providers/openai-compat/client.d.ts.map +1 -0
  439. package/dist/providers/openai-compat/client.js +157 -0
  440. package/dist/providers/openai-compat/client.js.map +1 -0
  441. package/dist/providers/openai-compat/decode.d.ts +36 -0
  442. package/dist/providers/openai-compat/decode.d.ts.map +1 -0
  443. package/dist/providers/openai-compat/decode.js +55 -0
  444. package/dist/providers/openai-compat/decode.js.map +1 -0
  445. package/dist/providers/openai-compat/errors.d.ts +54 -0
  446. package/dist/providers/openai-compat/errors.d.ts.map +1 -0
  447. package/dist/providers/openai-compat/errors.js +144 -0
  448. package/dist/providers/openai-compat/errors.js.map +1 -0
  449. package/dist/providers/openai-compat/index.d.ts +8 -0
  450. package/dist/providers/openai-compat/index.d.ts.map +1 -0
  451. package/dist/providers/openai-compat/index.js +5 -0
  452. package/dist/providers/openai-compat/index.js.map +1 -0
  453. package/dist/providers/openai-compat/sse.d.ts +14 -0
  454. package/dist/providers/openai-compat/sse.d.ts.map +1 -0
  455. package/dist/providers/openai-compat/sse.js +69 -0
  456. package/dist/providers/openai-compat/sse.js.map +1 -0
  457. package/dist/providers/openai-compat/types.d.ts +75 -0
  458. package/dist/providers/openai-compat/types.d.ts.map +1 -0
  459. package/dist/providers/openai-compat/types.js +9 -0
  460. package/dist/providers/openai-compat/types.js.map +1 -0
  461. package/dist/providers/openai-compat-provider.d.ts +90 -0
  462. package/dist/providers/openai-compat-provider.d.ts.map +1 -0
  463. package/dist/providers/openai-compat-provider.js +282 -0
  464. package/dist/providers/openai-compat-provider.js.map +1 -0
  465. package/dist/providers/openai-provider.d.ts +98 -27
  466. package/dist/providers/openai-provider.d.ts.map +1 -1
  467. package/dist/providers/openai-provider.js +1037 -105
  468. package/dist/providers/openai-provider.js.map +1 -1
  469. package/dist/providers/openrouter-provider.d.ts +58 -13
  470. package/dist/providers/openrouter-provider.d.ts.map +1 -1
  471. package/dist/providers/openrouter-provider.js +383 -51
  472. package/dist/providers/openrouter-provider.js.map +1 -1
  473. package/dist/providers/provider-call-failure.d.ts +39 -0
  474. package/dist/providers/provider-call-failure.d.ts.map +1 -0
  475. package/dist/providers/provider-call-failure.js +132 -0
  476. package/dist/providers/provider-call-failure.js.map +1 -0
  477. package/dist/providers/provider-error.d.ts +59 -0
  478. package/dist/providers/provider-error.d.ts.map +1 -0
  479. package/dist/providers/provider-error.js +171 -0
  480. package/dist/providers/provider-error.js.map +1 -0
  481. package/dist/providers/provider-generations.d.ts +99 -0
  482. package/dist/providers/provider-generations.d.ts.map +1 -0
  483. package/dist/providers/provider-generations.js +71 -0
  484. package/dist/providers/provider-generations.js.map +1 -0
  485. package/dist/providers/provider-queue.d.ts +62 -0
  486. package/dist/providers/provider-queue.d.ts.map +1 -0
  487. package/dist/providers/provider-queue.js +28 -0
  488. package/dist/providers/provider-queue.js.map +1 -0
  489. package/dist/providers/provider-registry.d.ts +33 -14
  490. package/dist/providers/provider-registry.d.ts.map +1 -1
  491. package/dist/providers/provider-registry.js +85 -68
  492. package/dist/providers/provider-registry.js.map +1 -1
  493. package/dist/providers/provider-request-log.d.ts +53 -0
  494. package/dist/providers/provider-request-log.d.ts.map +1 -0
  495. package/dist/providers/provider-request-log.js +168 -0
  496. package/dist/providers/provider-request-log.js.map +1 -0
  497. package/dist/providers/provider-session.d.ts +3 -0
  498. package/dist/providers/provider-session.d.ts.map +1 -0
  499. package/dist/providers/provider-session.js +10 -0
  500. package/dist/providers/provider-session.js.map +1 -0
  501. package/dist/providers/provider-transport.d.ts +11 -0
  502. package/dist/providers/provider-transport.d.ts.map +1 -0
  503. package/dist/providers/provider-transport.js +11 -0
  504. package/dist/providers/provider-transport.js.map +1 -0
  505. package/dist/providers/python-provider.d.ts +26 -13
  506. package/dist/providers/python-provider.d.ts.map +1 -1
  507. package/dist/providers/python-provider.js +204 -25
  508. package/dist/providers/python-provider.js.map +1 -1
  509. package/dist/providers/replicate-provider.d.ts +91 -8
  510. package/dist/providers/replicate-provider.d.ts.map +1 -1
  511. package/dist/providers/replicate-provider.js +823 -65
  512. package/dist/providers/replicate-provider.js.map +1 -1
  513. package/dist/providers/replicate-retry.d.ts +30 -0
  514. package/dist/providers/replicate-retry.d.ts.map +1 -0
  515. package/dist/providers/replicate-retry.js +97 -0
  516. package/dist/providers/replicate-retry.js.map +1 -0
  517. package/dist/providers/requesty-provider.d.ts +30 -0
  518. package/dist/providers/requesty-provider.d.ts.map +1 -0
  519. package/dist/providers/requesty-provider.js +87 -0
  520. package/dist/providers/requesty-provider.js.map +1 -0
  521. package/dist/providers/responses-api.d.ts +27 -0
  522. package/dist/providers/responses-api.d.ts.map +1 -0
  523. package/dist/providers/responses-api.js +297 -0
  524. package/dist/providers/responses-api.js.map +1 -0
  525. package/dist/providers/reve-provider.d.ts +46 -0
  526. package/dist/providers/reve-provider.d.ts.map +1 -0
  527. package/dist/providers/reve-provider.js +165 -0
  528. package/dist/providers/reve-provider.js.map +1 -0
  529. package/dist/providers/rodin-provider.d.ts +25 -2
  530. package/dist/providers/rodin-provider.d.ts.map +1 -1
  531. package/dist/providers/rodin-provider.js +95 -51
  532. package/dist/providers/rodin-provider.js.map +1 -1
  533. package/dist/providers/safe-url.d.ts +70 -0
  534. package/dist/providers/safe-url.d.ts.map +1 -0
  535. package/dist/providers/safe-url.js +277 -0
  536. package/dist/providers/safe-url.js.map +1 -0
  537. package/dist/providers/scripted-provider.d.ts +9 -0
  538. package/dist/providers/scripted-provider.d.ts.map +1 -1
  539. package/dist/providers/scripted-provider.js +86 -10
  540. package/dist/providers/scripted-provider.js.map +1 -1
  541. package/dist/providers/structured-output.d.ts +42 -0
  542. package/dist/providers/structured-output.d.ts.map +1 -0
  543. package/dist/providers/structured-output.js +83 -0
  544. package/dist/providers/structured-output.js.map +1 -0
  545. package/dist/providers/together-operations.d.ts +27 -0
  546. package/dist/providers/together-operations.d.ts.map +1 -0
  547. package/dist/providers/together-operations.js +95 -0
  548. package/dist/providers/together-operations.js.map +1 -0
  549. package/dist/providers/together-provider.d.ts +18 -18
  550. package/dist/providers/together-provider.d.ts.map +1 -1
  551. package/dist/providers/together-provider.js +140 -367
  552. package/dist/providers/together-provider.js.map +1 -1
  553. package/dist/providers/topaz-provider.d.ts +45 -0
  554. package/dist/providers/topaz-provider.d.ts.map +1 -0
  555. package/dist/providers/topaz-provider.js +244 -0
  556. package/dist/providers/topaz-provider.js.map +1 -0
  557. package/dist/providers/types.d.ts +641 -4
  558. package/dist/providers/types.d.ts.map +1 -1
  559. package/dist/providers/types.js +81 -1
  560. package/dist/providers/types.js.map +1 -1
  561. package/dist/providers/useapi-provider.d.ts +28 -0
  562. package/dist/providers/useapi-provider.d.ts.map +1 -0
  563. package/dist/providers/useapi-provider.js +274 -0
  564. package/dist/providers/useapi-provider.js.map +1 -0
  565. package/dist/providers/video-duration.d.ts +6 -0
  566. package/dist/providers/video-duration.d.ts.map +1 -0
  567. package/dist/providers/video-duration.js +63 -0
  568. package/dist/providers/video-duration.js.map +1 -0
  569. package/dist/providers/video-frame-fallback.d.ts +39 -0
  570. package/dist/providers/video-frame-fallback.d.ts.map +1 -0
  571. package/dist/providers/video-frame-fallback.js +155 -0
  572. package/dist/providers/video-frame-fallback.js.map +1 -0
  573. package/dist/providers/video-frames.d.ts +61 -0
  574. package/dist/providers/video-frames.d.ts.map +1 -0
  575. package/dist/providers/video-frames.js +208 -0
  576. package/dist/providers/video-frames.js.map +1 -0
  577. package/dist/providers/video-mime.d.ts +14 -0
  578. package/dist/providers/video-mime.d.ts.map +1 -0
  579. package/dist/providers/video-mime.js +44 -0
  580. package/dist/providers/video-mime.js.map +1 -0
  581. package/dist/providers/video-to-audio.d.ts +34 -0
  582. package/dist/providers/video-to-audio.d.ts.map +1 -0
  583. package/dist/providers/video-to-audio.js +62 -0
  584. package/dist/providers/video-to-audio.js.map +1 -0
  585. package/dist/providers/vllm-provider.d.ts +20 -8
  586. package/dist/providers/vllm-provider.d.ts.map +1 -1
  587. package/dist/providers/vllm-provider.js +44 -23
  588. package/dist/providers/vllm-provider.js.map +1 -1
  589. package/dist/providers/voyage-provider.d.ts +12 -3
  590. package/dist/providers/voyage-provider.d.ts.map +1 -1
  591. package/dist/providers/voyage-provider.js +21 -7
  592. package/dist/providers/voyage-provider.js.map +1 -1
  593. package/dist/providers/xai-provider.d.ts +56 -13
  594. package/dist/providers/xai-provider.d.ts.map +1 -1
  595. package/dist/providers/xai-provider.js +307 -22
  596. package/dist/providers/xai-provider.js.map +1 -1
  597. package/dist/python-bridge-base.d.ts +358 -0
  598. package/dist/python-bridge-base.d.ts.map +1 -0
  599. package/dist/python-bridge-base.js +1557 -0
  600. package/dist/python-bridge-base.js.map +1 -0
  601. package/dist/python-bridge-codec.d.ts +28 -0
  602. package/dist/python-bridge-codec.d.ts.map +1 -0
  603. package/dist/python-bridge-codec.js +39 -0
  604. package/dist/python-bridge-codec.js.map +1 -0
  605. package/dist/python-bridge-factory.d.ts +52 -0
  606. package/dist/python-bridge-factory.d.ts.map +1 -0
  607. package/dist/python-bridge-factory.js +69 -0
  608. package/dist/python-bridge-factory.js.map +1 -0
  609. package/dist/python-bridge-framing.d.ts +68 -0
  610. package/dist/python-bridge-framing.d.ts.map +1 -0
  611. package/dist/python-bridge-framing.js +91 -0
  612. package/dist/python-bridge-framing.js.map +1 -0
  613. package/dist/python-bridge-types.d.ts +545 -2
  614. package/dist/python-bridge-types.d.ts.map +1 -1
  615. package/dist/python-bridge-types.js +49 -1
  616. package/dist/python-bridge-types.js.map +1 -1
  617. package/dist/python-graph-resolver.d.ts +57 -0
  618. package/dist/python-graph-resolver.d.ts.map +1 -0
  619. package/dist/python-graph-resolver.js +79 -0
  620. package/dist/python-graph-resolver.js.map +1 -0
  621. package/dist/python-node-executor.d.ts +36 -4
  622. package/dist/python-node-executor.d.ts.map +1 -1
  623. package/dist/python-node-executor.js +177 -86
  624. package/dist/python-node-executor.js.map +1 -1
  625. package/dist/python-stdio-bridge.d.ts +18 -37
  626. package/dist/python-stdio-bridge.d.ts.map +1 -1
  627. package/dist/python-stdio-bridge.js +148 -475
  628. package/dist/python-stdio-bridge.js.map +1 -1
  629. package/dist/python-websocket-bridge.d.ts +140 -0
  630. package/dist/python-websocket-bridge.d.ts.map +1 -0
  631. package/dist/python-websocket-bridge.js +561 -0
  632. package/dist/python-websocket-bridge.js.map +1 -0
  633. package/dist/python-worker-stderr.d.ts +4 -0
  634. package/dist/python-worker-stderr.d.ts.map +1 -0
  635. package/dist/python-worker-stderr.js +24 -0
  636. package/dist/python-worker-stderr.js.map +1 -0
  637. package/dist/recommended-models.d.ts +2 -2
  638. package/dist/recommended-models.d.ts.map +1 -1
  639. package/dist/recommended-models.js +44 -4
  640. package/dist/recommended-models.js.map +1 -1
  641. package/dist/recoverable-node-error.d.ts +31 -0
  642. package/dist/recoverable-node-error.d.ts.map +1 -0
  643. package/dist/recoverable-node-error.js +37 -0
  644. package/dist/recoverable-node-error.js.map +1 -0
  645. package/dist/redact-params.d.ts +13 -0
  646. package/dist/redact-params.d.ts.map +1 -0
  647. package/dist/redact-params.js +57 -0
  648. package/dist/redact-params.js.map +1 -0
  649. package/dist/run-context.d.ts +20 -0
  650. package/dist/run-context.d.ts.map +1 -0
  651. package/dist/run-context.js +18 -0
  652. package/dist/run-context.js.map +1 -0
  653. package/dist/run-trace-context.d.ts +30 -0
  654. package/dist/run-trace-context.d.ts.map +1 -0
  655. package/dist/run-trace-context.js +80 -0
  656. package/dist/run-trace-context.js.map +1 -0
  657. package/dist/run-trace-processor.d.ts +65 -0
  658. package/dist/run-trace-processor.d.ts.map +1 -0
  659. package/dist/run-trace-processor.js +417 -0
  660. package/dist/run-trace-processor.js.map +1 -0
  661. package/dist/run-trace-serialization.d.ts +5 -0
  662. package/dist/run-trace-serialization.d.ts.map +1 -0
  663. package/dist/run-trace-serialization.js +113 -0
  664. package/dist/run-trace-serialization.js.map +1 -0
  665. package/dist/sandbox-module-catalog.d.ts +43 -0
  666. package/dist/sandbox-module-catalog.d.ts.map +1 -0
  667. package/dist/sandbox-module-catalog.js +25 -0
  668. package/dist/sandbox-module-catalog.js.map +1 -0
  669. package/dist/storage-workspace.d.ts +62 -0
  670. package/dist/storage-workspace.d.ts.map +1 -0
  671. package/dist/storage-workspace.js +441 -0
  672. package/dist/storage-workspace.js.map +1 -0
  673. package/dist/swappable-python-bridge.d.ts +83 -0
  674. package/dist/swappable-python-bridge.d.ts.map +1 -0
  675. package/dist/swappable-python-bridge.js +246 -0
  676. package/dist/swappable-python-bridge.js.map +1 -0
  677. package/dist/telemetry.d.ts +16 -3
  678. package/dist/telemetry.d.ts.map +1 -1
  679. package/dist/telemetry.js +76 -20
  680. package/dist/telemetry.js.map +1 -1
  681. package/dist/testing.d.ts +81 -0
  682. package/dist/testing.d.ts.map +1 -0
  683. package/dist/testing.js +130 -0
  684. package/dist/testing.js.map +1 -0
  685. package/dist/token-counter.d.ts +30 -0
  686. package/dist/token-counter.d.ts.map +1 -0
  687. package/dist/token-counter.js +156 -0
  688. package/dist/token-counter.js.map +1 -0
  689. package/dist/trace-exporters.d.ts +11 -28
  690. package/dist/trace-exporters.d.ts.map +1 -1
  691. package/dist/trace-exporters.js +69 -22
  692. package/dist/trace-exporters.js.map +1 -1
  693. package/dist/tracing-helpers.d.ts +60 -26
  694. package/dist/tracing-helpers.d.ts.map +1 -1
  695. package/dist/tracing-helpers.js +100 -25
  696. package/dist/tracing-helpers.js.map +1 -1
  697. package/dist/trim-video-window.d.ts +8 -0
  698. package/dist/trim-video-window.d.ts.map +1 -0
  699. package/dist/trim-video-window.js +50 -0
  700. package/dist/trim-video-window.js.map +1 -0
  701. package/dist/turn-budget.d.ts +278 -0
  702. package/dist/turn-budget.d.ts.map +1 -0
  703. package/dist/turn-budget.js +365 -0
  704. package/dist/turn-budget.js.map +1 -0
  705. package/dist/variable-channel.d.ts +48 -0
  706. package/dist/variable-channel.d.ts.map +1 -0
  707. package/dist/variable-channel.js +110 -0
  708. package/dist/variable-channel.js.map +1 -0
  709. package/dist/workspace.d.ts +119 -0
  710. package/dist/workspace.d.ts.map +1 -0
  711. package/dist/workspace.js +112 -0
  712. package/dist/workspace.js.map +1 -0
  713. package/package.json +121 -19
@@ -0,0 +1,561 @@
1
+ /**
2
+ * Python worker bridge using a remote WebSocket transport.
3
+ *
4
+ * Unlike {@link PythonStdioBridge}, this bridge NEVER spawns a process — it
5
+ * connects to an already-running worker (Docker, remote host, sidecar) by URL.
6
+ * The worker lifecycle is owned externally; this bridge only owns the socket.
7
+ *
8
+ * Wire protocol: one WS BINARY message == exactly one msgpack frame. There is
9
+ * NO 4-byte length prefix (that framing belongs to the stdio transport). The
10
+ * worker sends frames via `ws.send(msgpack.packb(msg))`; we decode every
11
+ * incoming binary message with msgpack.decode and feed it to the shared
12
+ * {@link PythonBridgeBase._handleMessage}.
13
+ *
14
+ * Resilience: if the socket drops unexpectedly (worker restart, network blip),
15
+ * the bridge rejects all in-flight requests, emits "exit", and then reconnects
16
+ * with exponential backoff (1s, 2s, 4s, … capped at maxReconnectDelayMs).
17
+ * After a successful reconnect it re-runs discover + worker.status and emits
18
+ * "reconnected". An explicit {@link close} disables reconnect.
19
+ */
20
+ import { packBridgeMessage, unpackBridgeMessage } from "./python-bridge-codec.js";
21
+ import WebSocket from "ws";
22
+ import { createLogger, safeProcessEnv } from "@nodetool-ai/config";
23
+ import { PythonBridgeBase } from "./python-bridge-base.js";
24
+ const log = createLogger("nodetool.runtime.python-websocket-bridge");
25
+ import { isCallable } from "@nodetool-ai/protocol";
26
+ /** Mirror of the stdio bridge's frame ceiling, used here for `maxPayload`. */
27
+ const MAX_BRIDGE_FRAME_SIZE = Number(safeProcessEnv()["NODETOOL_BRIDGE_MAX_FRAME_SIZE"] ?? 256 * 1024 * 1024);
28
+ const DEFAULT_STARTUP_TIMEOUT_MS = 20000;
29
+ const DEFAULT_RECONNECT_RPC_TIMEOUT_MS = 20000;
30
+ const DEFAULT_MAX_RECONNECT_DELAY_MS = 30000;
31
+ const INITIAL_RECONNECT_DELAY_MS = 1000;
32
+ function attachErrorSinks(ws) {
33
+ try {
34
+ ws.on("error", () => { });
35
+ }
36
+ catch {
37
+ /* best-effort */
38
+ }
39
+ // The raw TCP socket can emit its own error during a CONNECTING teardown.
40
+ // SAFETY: `ws` is a Node `ws` socket, which keeps the underlying TCP
41
+ // socket on `_socket`; the optional declaration and the guard below cover a
42
+ // build that does not.
43
+ const rawSocket = ws._socket;
44
+ if (rawSocket && isCallable(rawSocket.on)) {
45
+ try {
46
+ rawSocket.on("error", () => { });
47
+ }
48
+ catch {
49
+ /* best-effort */
50
+ }
51
+ }
52
+ }
53
+ /**
54
+ * Terminate a socket crash-safely: attach error sinks (see
55
+ * {@link attachErrorSinks}) before terminating so any late CONNECTING-state
56
+ * error is swallowed rather than crashing the process.
57
+ */
58
+ function crashSafeTerminate(ws) {
59
+ attachErrorSinks(ws);
60
+ try {
61
+ ws.terminate();
62
+ }
63
+ catch {
64
+ /* best-effort cleanup */
65
+ }
66
+ }
67
+ export class WebsocketPythonBridge extends PythonBridgeBase {
68
+ _ws = null;
69
+ // Mutable so the bridge can be re-pointed at a different worker at runtime via
70
+ // setTarget(); both are captured from options at construction as the default.
71
+ _wsUrl;
72
+ _workerToken;
73
+ _maxReconnectDelayMs;
74
+ _reconnectRpcTimeoutMs;
75
+ _autoReconnect;
76
+ /** Set once close() is called — permanently disables reconnect. */
77
+ _explicitlyClosed = false;
78
+ /** Timer for a pending reconnect attempt, if any. */
79
+ _reconnectTimer = null;
80
+ /** True while a reconnect attempt is in flight (guards overlap). */
81
+ _reconnecting = false;
82
+ /**
83
+ * Monotonic generation for reconnect attempts. Bumped whenever the current
84
+ * attempt is superseded (setTarget re-points the worker, or a teardown
85
+ * abandons it). An in-flight _attemptReconnect captures the epoch at start
86
+ * and, once its RPC settles, bails out if the epoch changed — so a stale
87
+ * attempt can't clobber the state of the one that replaced it.
88
+ */
89
+ _reconnectEpoch = 0;
90
+ /**
91
+ * True once a connection has been fully established and announced (initial
92
+ * connect() resolved, or a reconnect emitted "reconnected"). Gates the
93
+ * "exit" emission so a socket that drops mid-reconnect — before any
94
+ * "reconnected" was emitted for it — does not produce a duplicate "exit"
95
+ * for consumers pairing exit/reconnected.
96
+ */
97
+ _announcedConnected = false;
98
+ /** Current backoff delay; doubles each failed attempt. */
99
+ _reconnectDelayMs = INITIAL_RECONNECT_DELAY_MS;
100
+ /**
101
+ * Set while an _openTransport handshake is in flight; invoking it rejects the
102
+ * handshake and crash-safely tears down the CONNECTING socket. Lets close()
103
+ * abort a connect that is still mid-handshake instead of waiting out the full
104
+ * startup timeout.
105
+ */
106
+ _abortHandshake = null;
107
+ /** Bound listeners for the active socket, removed before replacing it. */
108
+ _messageListener = null;
109
+ _closeListener = null;
110
+ _errorListener = null;
111
+ constructor(options = {}) {
112
+ super(options);
113
+ if (!options.wsUrl) {
114
+ throw new Error("WebsocketPythonBridge requires options.wsUrl — the remote worker WebSocket URL");
115
+ }
116
+ this._wsUrl = options.wsUrl;
117
+ // Shared-secret bearer token: when present, every handshake (connect AND
118
+ // reconnect, both via _openSocket) carries `Authorization: Bearer <token>`.
119
+ // An empty string is treated as unset (no header → worker accepts all).
120
+ this._workerToken = options.workerToken || undefined;
121
+ this._maxReconnectDelayMs =
122
+ options.maxReconnectDelayMs ?? DEFAULT_MAX_RECONNECT_DELAY_MS;
123
+ this._reconnectRpcTimeoutMs =
124
+ options.reconnectRpcTimeoutMs ?? DEFAULT_RECONNECT_RPC_TIMEOUT_MS;
125
+ // WebSocket transport reconnects by default — the worker lives elsewhere
126
+ // and may restart independently. Set autoRestart: false to opt out.
127
+ this._autoReconnect = options.autoRestart ?? true;
128
+ }
129
+ /** The remote worker WebSocket URL this bridge connects to. */
130
+ get wsUrl() {
131
+ return this._wsUrl;
132
+ }
133
+ /**
134
+ * Re-point the bridge at a different worker without restarting the process.
135
+ * Used by the worker-attach flow: attaching a provisioned GPU worker hands its
136
+ * `{wsUrl, token}` here so the live bridge adopts it.
137
+ *
138
+ * No-op when `url` matches the current target (avoids a needless reconnect).
139
+ * Otherwise the current socket is torn down — rejecting any in-flight requests
140
+ * — the new url/token replace the instance fields, and a reconnect is forced
141
+ * through the existing reconnect path so `_openSocket` uses the new values and
142
+ * a successful re-point emits "reconnected" like any other reconnect. An empty
143
+ * or missing token sends no `Authorization` header (worker accepts all).
144
+ */
145
+ setTarget(url, token) {
146
+ if (url === this._wsUrl)
147
+ return;
148
+ this._wsUrl = url;
149
+ // Match the constructor: an empty string means "no token" (no auth header).
150
+ this._workerToken = token || undefined;
151
+ // Cancel any pending/in-flight reconnect so the next attempt uses the new
152
+ // target and backoff timing is deterministic.
153
+ if (this._reconnectTimer) {
154
+ clearTimeout(this._reconnectTimer);
155
+ this._reconnectTimer = null;
156
+ }
157
+ this._reconnecting = false;
158
+ this._reconnectDelayMs = INITIAL_RECONNECT_DELAY_MS;
159
+ // Abort any in-flight handshake (CONNECTING socket) before tearing down.
160
+ // _teardownSocket only acts on this._ws, but a handshake in progress lives
161
+ // only in the _openTransport closure — without aborting it, its finishSuccess
162
+ // would later set this._ws and clobber the new target's socket.
163
+ if (this._abortHandshake) {
164
+ const abort = this._abortHandshake;
165
+ this._abortHandshake = null;
166
+ abort(new Error("Python worker re-pointed via setTarget"));
167
+ }
168
+ // Tear down the current socket (detaches listeners → no spurious
169
+ // _onUnexpectedClose) and reject in-flight requests, then drive a fresh
170
+ // connect against the new target via the reconnect path.
171
+ this._teardownSocket("Python worker re-pointed via setTarget");
172
+ void this._attemptReconnect();
173
+ }
174
+ // ── Connection lifecycle ────────────────────────────────────────────
175
+ /**
176
+ * Connect to the remote worker. Overrides the base flow so the post-open RPC
177
+ * phase (discover + worker.status) is bounded by a timeout: the startup
178
+ * timeout only covers the TCP/WS handshake, so a worker that accepts the
179
+ * socket but never answers discover would otherwise hang connect() forever.
180
+ * On RPC timeout we tear down the half-open socket (crash-safe) and reject.
181
+ */
182
+ async connect() {
183
+ this._assertCanConnect();
184
+ await this._openTransport();
185
+ try {
186
+ await this._withRpcTimeout(this._runPostOpenRpc());
187
+ }
188
+ catch (err) {
189
+ this._teardownSocket(err instanceof Error ? err.message : "Python worker connect failed");
190
+ throw err;
191
+ }
192
+ this._announcedConnected = true;
193
+ }
194
+ /**
195
+ * Run discover + worker.status against the freshly-opened socket. discover
196
+ * failures propagate (they mean the worker is unusable); a status failure is
197
+ * tolerated — load_errors will simply be unavailable until the next fetch.
198
+ */
199
+ async _runPostOpenRpc() {
200
+ await this._discover();
201
+ try {
202
+ // Use the status call bounded by statusTimeoutMs so a worker that
203
+ // answers discover but hangs on status does not stall the RPC phase up
204
+ // to the (larger) reconnectRpcTimeoutMs.
205
+ await this._getWorkerStatusWithTimeout();
206
+ }
207
+ catch (err) {
208
+ log.warn("Failed to fetch worker status; load_errors will be unavailable until the next status fetch", err);
209
+ }
210
+ }
211
+ /**
212
+ * Race a post-open RPC promise against the configured RPC timeout. A worker
213
+ * that accepts the socket but never answers (half-open: port up before
214
+ * handlers are registered during a restart) is rejected rather than allowed
215
+ * to hang. A timeout of 0 disables the bound.
216
+ */
217
+ async _withRpcTimeout(promise) {
218
+ const timeoutMs = this._reconnectRpcTimeoutMs;
219
+ if (timeoutMs <= 0) {
220
+ return promise;
221
+ }
222
+ let timer;
223
+ const timeoutPromise = new Promise((_, reject) => {
224
+ timer = setTimeout(() => {
225
+ reject(new Error(`Python worker did not answer discover/status within ${timeoutMs}ms (${this._wsUrl}).`));
226
+ }, timeoutMs);
227
+ });
228
+ try {
229
+ return await Promise.race([promise, timeoutPromise]);
230
+ }
231
+ finally {
232
+ if (timer)
233
+ clearTimeout(timer);
234
+ }
235
+ }
236
+ /**
237
+ * Detach long-lived listeners, crash-safely terminate the current socket,
238
+ * clear connection state, and reject any requests left in flight (e.g. the
239
+ * discover/status RPCs that timed out, or a user execute that slipped in
240
+ * while the socket was briefly open). Idempotent and safe to call twice.
241
+ */
242
+ _teardownSocket(reason) {
243
+ if (this._ws) {
244
+ this._detachLongLivedListeners(this._ws);
245
+ crashSafeTerminate(this._ws);
246
+ this._ws = null;
247
+ }
248
+ // Cancel any reconnect armed by a mid-handshake close so a connect() the
249
+ // caller saw fail cannot leave a background reconnect running behind it.
250
+ // _attemptReconnect's catch re-schedules after this returns, so tearing the
251
+ // timer down here does not interfere with the reconnect backoff loop.
252
+ if (this._reconnectTimer) {
253
+ clearTimeout(this._reconnectTimer);
254
+ this._reconnectTimer = null;
255
+ }
256
+ // Supersede any in-flight reconnect: an _attemptReconnect awaiting its RPC
257
+ // captured the old epoch and will no-op when it settles, so it can't clobber
258
+ // a socket opened after this teardown (e.g. by setTarget's fresh attempt).
259
+ this._reconnectEpoch += 1;
260
+ this._connected = false;
261
+ this._rejectAllPending(new Error(reason));
262
+ }
263
+ // ── Transport: open the remote socket ───────────────────────────────
264
+ /**
265
+ * Construct the `ws` WebSocket. The SINGLE place a socket is created — used by
266
+ * both the initial connect and every reconnect (both run through
267
+ * {@link _openTransport}), so the auth header is applied uniformly. When a
268
+ * worker token is configured, send `Authorization: Bearer <token>` on the
269
+ * handshake; otherwise send no header (worker accepts all).
270
+ */
271
+ _openSocket() {
272
+ return new WebSocket(this._wsUrl, {
273
+ maxPayload: MAX_BRIDGE_FRAME_SIZE,
274
+ headers: this._workerToken
275
+ ? { Authorization: `Bearer ${this._workerToken}` }
276
+ : undefined
277
+ });
278
+ }
279
+ async _openTransport() {
280
+ const startupTimeoutMs = this._options.startupTimeoutMs ?? DEFAULT_STARTUP_TIMEOUT_MS;
281
+ await new Promise((resolve, reject) => {
282
+ let settled = false;
283
+ const ws = this._openSocket();
284
+ ws.binaryType = "nodebuffer";
285
+ const startupTimer = setTimeout(() => {
286
+ finishError(new Error(`Python worker WebSocket did not open within ${startupTimeoutMs}ms (${this._wsUrl}).`));
287
+ }, startupTimeoutMs);
288
+ // Listeners used only during the open handshake; replaced with the
289
+ // long-lived listeners on success.
290
+ const onOpen = () => finishSuccess();
291
+ const onPreOpenError = (err) => finishError(err);
292
+ const onPreOpenClose = () => finishError(new Error(`Python worker WebSocket closed before opening (${this._wsUrl}).`));
293
+ const cleanupHandshake = () => {
294
+ clearTimeout(startupTimer);
295
+ this._abortHandshake = null;
296
+ ws.removeListener("open", onOpen);
297
+ ws.removeListener("error", onPreOpenError);
298
+ ws.removeListener("close", onPreOpenClose);
299
+ };
300
+ const finishError = (err) => {
301
+ if (settled)
302
+ return;
303
+ settled = true;
304
+ cleanupHandshake();
305
+ // cleanupHandshake just removed the only 'error' listener. The socket
306
+ // may still be CONNECTING, in which case terminate() emits a late
307
+ // 'error' that would otherwise crash the process — terminate
308
+ // crash-safely.
309
+ crashSafeTerminate(ws);
310
+ reject(err);
311
+ };
312
+ const finishSuccess = () => {
313
+ if (settled)
314
+ return;
315
+ settled = true;
316
+ cleanupHandshake();
317
+ this._ws = ws;
318
+ this._connected = true;
319
+ this._attachLongLivedListeners(ws);
320
+ resolve();
321
+ };
322
+ // Let close() abort this handshake mid-flight instead of waiting out the
323
+ // full startup timeout.
324
+ this._abortHandshake = finishError;
325
+ // close() may have already fired before we registered the aborter.
326
+ if (this._explicitlyClosed) {
327
+ finishError(new Error(`Python worker WebSocket closed before opening (${this._wsUrl}).`));
328
+ return;
329
+ }
330
+ ws.on("open", onOpen);
331
+ ws.on("error", onPreOpenError);
332
+ ws.on("close", onPreOpenClose);
333
+ });
334
+ }
335
+ /**
336
+ * Wire up the message/close/error handlers for an opened socket. Removed via
337
+ * {@link _detachLongLivedListeners} before any reconnect so listeners never
338
+ * leak across sockets.
339
+ */
340
+ _attachLongLivedListeners(ws) {
341
+ this._messageListener = (data) => {
342
+ try {
343
+ const buf = this._toUint8Array(data);
344
+ const msg = unpackBridgeMessage(buf);
345
+ // A decoded inbound frame is activity too. Requests are sent once and
346
+ // then answered over minutes — a model download streams progress with
347
+ // no outbound frame at all — so an outbound-only clock freezes while
348
+ // the worker is at its busiest.
349
+ this.emit("activity");
350
+ this._handleMessage(msg);
351
+ }
352
+ catch (err) {
353
+ log.error(`Failed to decode WebSocket frame: ${err}`);
354
+ }
355
+ };
356
+ this._closeListener = () => this._onUnexpectedClose();
357
+ this._errorListener = (err) => {
358
+ log.warn(`Python worker WebSocket error: ${err.message}`);
359
+ this._onUnexpectedClose();
360
+ };
361
+ ws.on("message", this._messageListener);
362
+ ws.on("close", this._closeListener);
363
+ ws.on("error", this._errorListener);
364
+ }
365
+ _detachLongLivedListeners(ws) {
366
+ if (this._messageListener)
367
+ ws.removeListener("message", this._messageListener);
368
+ if (this._closeListener)
369
+ ws.removeListener("close", this._closeListener);
370
+ if (this._errorListener)
371
+ ws.removeListener("error", this._errorListener);
372
+ this._messageListener = null;
373
+ this._closeListener = null;
374
+ this._errorListener = null;
375
+ }
376
+ /** Normalize the various ws RawData shapes into a single Uint8Array. */
377
+ _toUint8Array(data) {
378
+ if (data instanceof ArrayBuffer)
379
+ return new Uint8Array(data);
380
+ if (Array.isArray(data))
381
+ return Buffer.concat(data);
382
+ // Buffer is a Uint8Array subclass; msgpack.decode accepts it directly.
383
+ return data;
384
+ }
385
+ // ── Send ────────────────────────────────────────────────────────────
386
+ _send(msg) {
387
+ if (!this._ws || !this._connected) {
388
+ throw new Error("Not connected to Python worker");
389
+ }
390
+ const payload = packBridgeMessage(msg);
391
+ if (payload.length > MAX_BRIDGE_FRAME_SIZE) {
392
+ throw new Error(`Outgoing Python bridge frame exceeds max size (${payload.length} > ${MAX_BRIDGE_FRAME_SIZE})`);
393
+ }
394
+ // Send as a single binary frame — no length prefix on WebSocket.
395
+ this._ws.send(payload, { binary: true });
396
+ // Every outbound frame to the remote worker is fresh activity. The cost
397
+ // guard's reaper measures idle time from `last_activity_at`, and this bridge
398
+ // is its designated heartbeat source: any host with database access listens
399
+ // for "activity" and touches the worker instance, so an actively-executing
400
+ // worker is never reaped as idle. The listener is
401
+ // `attachWorkerActivityHeartbeat` in @nodetool-ai/compute, wired by the
402
+ // server and by the CLI through `onPythonBridgeCreated`.
403
+ this.emit("activity");
404
+ }
405
+ // ── Unexpected close → reject + reconnect ───────────────────────────
406
+ _onUnexpectedClose() {
407
+ if (this._explicitlyClosed)
408
+ return;
409
+ // Guard re-entrancy: both 'close' and 'error' can fire for one drop.
410
+ if (!this._connected)
411
+ return;
412
+ const reconnecting = this._reconnecting;
413
+ this._connected = false;
414
+ if (this._ws) {
415
+ this._detachLongLivedListeners(this._ws);
416
+ crashSafeTerminate(this._ws);
417
+ this._ws = null;
418
+ }
419
+ // Reject in-flight requests in both cases. When this drop happens during
420
+ // an in-flight reconnect (a fresh socket opened, then dropped while
421
+ // discover/status were running), rejecting the pending discover promise is
422
+ // what kicks _attemptReconnect's catch into owning teardown + backoff +
423
+ // reschedule — so we deliberately do NOT reschedule here, avoiding a race
424
+ // where two paths both grow/skip backoff non-deterministically.
425
+ this._rejectAllPending(new Error("Python worker WebSocket closed unexpectedly"));
426
+ if (reconnecting) {
427
+ // The reconnect attempt owns re-announcement and the next backoff step.
428
+ // Emitting "exit" here would produce a duplicate exit for a connection
429
+ // that was never announced as reconnected.
430
+ return;
431
+ }
432
+ // Only announce "exit" for the drop of a fully-established connection.
433
+ if (this._announcedConnected) {
434
+ this.emit("exit", null);
435
+ }
436
+ if (!this._autoReconnect)
437
+ return;
438
+ // Only auto-reconnect a connection that was fully established. A socket that
439
+ // dropped mid-handshake (during the initial connect's discover/status phase,
440
+ // before it was ever announced) is owned by connect()'s caller: the rejected
441
+ // discover propagates out of connect(), and the caller decides whether to
442
+ // retry. Arming a background reconnect here would race a caller-driven retry
443
+ // into two live sockets. (Mirrors the _announcedConnected exit guard above.)
444
+ if (!this._announcedConnected)
445
+ return;
446
+ this._scheduleReconnect();
447
+ }
448
+ _scheduleReconnect() {
449
+ if (this._explicitlyClosed || !this._autoReconnect)
450
+ return;
451
+ if (this._reconnectTimer || this._reconnecting)
452
+ return;
453
+ const delay = Math.min(this._reconnectDelayMs, this._maxReconnectDelayMs);
454
+ log.info(`Scheduling Python worker WebSocket reconnect in ${delay}ms (${this._wsUrl}).`);
455
+ this._reconnectTimer = setTimeout(() => {
456
+ this._reconnectTimer = null;
457
+ void this._attemptReconnect();
458
+ }, delay);
459
+ }
460
+ async _attemptReconnect() {
461
+ if (this._explicitlyClosed || this._reconnecting)
462
+ return;
463
+ this._reconnecting = true;
464
+ // Snapshot the generation. If setTarget/_teardownSocket supersedes this
465
+ // attempt while its RPC is awaiting, the epoch changes and both the success
466
+ // and failure paths below no-op instead of clobbering the newer attempt's
467
+ // socket/state or arming a duplicate reconnect timer.
468
+ const epoch = ++this._reconnectEpoch;
469
+ try {
470
+ await this._openTransport();
471
+ // Re-run discovery + status against the (possibly new) worker so node
472
+ // metadata and load errors reflect the current process. Bound the RPC
473
+ // phase by a timeout: _openTransport only covers the handshake, so a
474
+ // half-open worker (port up before handlers are registered during a
475
+ // restart) that never answers discover would otherwise wedge the
476
+ // reconnect loop forever with _reconnecting stuck true.
477
+ await this._withRpcTimeout(this._runPostOpenRpc());
478
+ if (epoch !== this._reconnectEpoch || this._explicitlyClosed) {
479
+ // A newer attempt superseded this one, or the bridge was explicitly
480
+ // closed while the RPC was in flight; leave state untouched and do not
481
+ // emit "reconnected" on a dead bridge.
482
+ return;
483
+ }
484
+ // Success: reset backoff and announce.
485
+ this._reconnectDelayMs = INITIAL_RECONNECT_DELAY_MS;
486
+ this._reconnecting = false;
487
+ this._announcedConnected = true;
488
+ log.info(`Python worker WebSocket reconnected (${this._wsUrl}).`);
489
+ this.emit("reconnected");
490
+ }
491
+ catch (err) {
492
+ if (epoch !== this._reconnectEpoch) {
493
+ // This attempt was superseded before its RPC settled. The attempt that
494
+ // replaced it owns _reconnecting/teardown/backoff — do nothing here.
495
+ return;
496
+ }
497
+ // This catch is the single owner of teardown + backoff growth +
498
+ // reschedule for a failed reconnect. _onUnexpectedClose deliberately
499
+ // does NOT reschedule while _reconnecting is true, so backoff timing is
500
+ // deterministic regardless of which event observed the drop first.
501
+ this._reconnecting = false;
502
+ log.warn(`Python worker WebSocket reconnect failed: ${err instanceof Error ? err.message : String(err)}`);
503
+ // Tear down any half-open socket crash-safely (it may still be
504
+ // CONNECTING, or open-but-silent on discover/status).
505
+ this._teardownSocket(err instanceof Error ? err.message : "Python worker reconnect failed");
506
+ if (this._explicitlyClosed || !this._autoReconnect)
507
+ return;
508
+ this._reconnectDelayMs = Math.min(this._reconnectDelayMs * 2, this._maxReconnectDelayMs);
509
+ this._scheduleReconnect();
510
+ }
511
+ }
512
+ // ── Shutdown ────────────────────────────────────────────────────────
513
+ close() {
514
+ this._explicitlyClosed = true;
515
+ if (this._reconnectTimer) {
516
+ clearTimeout(this._reconnectTimer);
517
+ this._reconnectTimer = null;
518
+ }
519
+ this._reconnecting = false;
520
+ this._announcedConnected = false;
521
+ // Supersede any in-flight reconnect attempt whose post-open RPC is still
522
+ // awaiting: bump the epoch so its success block no-ops instead of emitting
523
+ // "reconnected" / setting _announcedConnected on a bridge that is now
524
+ // explicitly closed.
525
+ this._reconnectEpoch += 1;
526
+ // Abort an in-flight handshake (CONNECTING socket) so a pending connect()
527
+ // rejects immediately instead of waiting out the startup timeout. The
528
+ // aborter crash-safely terminates the CONNECTING socket.
529
+ if (this._abortHandshake) {
530
+ const abort = this._abortHandshake;
531
+ this._abortHandshake = null;
532
+ abort(new Error(`Python worker WebSocket closed before opening (${this._wsUrl}).`));
533
+ }
534
+ if (this._ws) {
535
+ this._detachLongLivedListeners(this._ws);
536
+ // Detaching removed the error listener; close()/terminate() on a socket
537
+ // that is still CONNECTING emits a late 'error' that would crash the
538
+ // process. Attach permanent no-op error sinks first.
539
+ const ws = this._ws;
540
+ attachErrorSinks(ws);
541
+ try {
542
+ ws.close();
543
+ }
544
+ catch {
545
+ /* best-effort cleanup */
546
+ }
547
+ try {
548
+ ws.terminate();
549
+ }
550
+ catch {
551
+ /* best-effort cleanup */
552
+ }
553
+ this._ws = null;
554
+ }
555
+ this._connected = false;
556
+ if (this._pending.size > 0 || this._pendingStream.size > 0) {
557
+ this._rejectAllPending(new Error("Python bridge closed"));
558
+ }
559
+ }
560
+ }
561
+ //# sourceMappingURL=python-websocket-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-websocket-bridge.js","sourceRoot":"","sources":["../src/python-websocket-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Logger } from "@nodetool-ai/config";
2
+ /** Forward Python worker stderr lines at an appropriate log level. */
3
+ export declare function logPythonWorkerStderr(line: string, logger: Logger): void;
4
+ //# sourceMappingURL=python-worker-stderr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-worker-stderr.d.ts","sourceRoot":"","sources":["../src/python-worker-stderr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,sEAAsE;AACtE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAyBxE"}
@@ -0,0 +1,24 @@
1
+ /** Forward Python worker stderr lines at an appropriate log level. */
2
+ export function logPythonWorkerStderr(line, logger) {
3
+ const trimmed = line.trim();
4
+ if (!trimmed || trimmed === "NODETOOL_STDIO_READY") {
5
+ return;
6
+ }
7
+ if (/\| ERROR \|/i.test(trimmed) || /^\[error\]/i.test(trimmed)) {
8
+ logger.error(`[python-worker] ${trimmed}`);
9
+ return;
10
+ }
11
+ if (/\| WARNING \|/i.test(trimmed) || /^\[warning\]/i.test(trimmed)) {
12
+ logger.warn(`[python-worker] ${trimmed}`);
13
+ return;
14
+ }
15
+ if (/\| DEBUG \|/i.test(trimmed) || /^\[debug\]/i.test(trimmed)) {
16
+ logger.debug(`[python-worker] ${trimmed}`);
17
+ return;
18
+ }
19
+ // Everything else from the worker (explicit INFO lines, raw prints,
20
+ // tracebacks, library output) goes to the main log at info level so no
21
+ // Python-side output is silently dropped at the default log level.
22
+ logger.info(`[python-worker] ${trimmed}`);
23
+ }
24
+ //# sourceMappingURL=python-worker-stderr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-worker-stderr.js","sourceRoot":"","sources":["../src/python-worker-stderr.ts"],"names":[],"mappings":"AAEA,sEAAsE;AACtE,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,MAAc;IAChE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,sBAAsB,EAAE,CAAC;QACnD,OAAO;IACT,CAAC;IAED,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAChE,MAAM,CAAC,KAAK,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;QAC1C,OAAO;IACT,CAAC;IAED,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAChE,MAAM,CAAC,KAAK,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,oEAAoE;IACpE,uEAAuE;IACvE,mEAAmE;IACnE,MAAM,CAAC,IAAI,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;AAC5C,CAAC"}
@@ -7,8 +7,8 @@
7
7
  import type { UnifiedModel } from "@nodetool-ai/protocol";
8
8
  import type { ProviderId } from "./providers/index.js";
9
9
  export interface RecommendedUnifiedModel extends UnifiedModel {
10
- modality: "language" | "image" | "tts" | "asr" | "video";
11
- task?: "text_generation" | "embedding" | "text_to_image" | "image_to_image" | "text_to_video" | "image_to_video";
10
+ modality: "language" | "image" | "tts" | "asr" | "video" | "music" | "audio_to_audio";
11
+ task?: "text_generation" | "embedding" | "text_to_image" | "image_to_image" | "text_to_video" | "image_to_video" | "video_to_video";
12
12
  provider?: ProviderId;
13
13
  /** Optional list of platforms this entry is valid on. Undefined = all. */
14
14
  supported_systems?: Array<"darwin" | "linux" | "windows">;
@@ -1 +1 @@
1
- {"version":3,"file":"recommended-models.d.ts","sourceRoot":"","sources":["../src/recommended-models.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,WAAW,uBAAwB,SAAQ,YAAY;IAC3D,QAAQ,EAAE,UAAU,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;IACzD,IAAI,CAAC,EACD,iBAAiB,GACjB,WAAW,GACX,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,gBAAgB,CAAC;IACrB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,KAAK,CAAC,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;CAC3D;AAED,eAAO,MAAM,kBAAkB,EAAE,uBAAuB,EAmIvD,CAAC"}
1
+ {"version":3,"file":"recommended-models.d.ts","sourceRoot":"","sources":["../src/recommended-models.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,WAAW,uBAAwB,SAAQ,YAAY;IAC3D,QAAQ,EACJ,UAAU,GACV,OAAO,GACP,KAAK,GACL,KAAK,GACL,OAAO,GACP,OAAO,GACP,gBAAgB,CAAC;IACrB,IAAI,CAAC,EACD,iBAAiB,GACjB,WAAW,GACX,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,gBAAgB,GAChB,gBAAgB,CAAC;IACrB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,KAAK,CAAC,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;CAC3D;AAED,eAAO,MAAM,kBAAkB,EAAE,uBAAuB,EA2KvD,CAAC"}