@nodetool-ai/runtime 0.7.0-rc.23 → 0.8.1

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 (665) 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 +954 -127
  24. package/dist/context.d.ts.map +1 -1
  25. package/dist/context.js +2424 -513
  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 +67 -0
  44. package/dist/generation-registry.d.ts.map +1 -0
  45. package/dist/generation-registry.js +126 -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 +344 -0
  62. package/dist/host-binaries.js.map +1 -0
  63. package/dist/image-codec.d.ts +74 -0
  64. package/dist/image-codec.d.ts.map +1 -0
  65. package/dist/image-codec.js +273 -0
  66. package/dist/image-codec.js.map +1 -0
  67. package/dist/index.d.ts +56 -6
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +43 -4
  70. package/dist/index.js.map +1 -1
  71. package/dist/invocation-account.d.ts +43 -0
  72. package/dist/invocation-account.d.ts.map +1 -0
  73. package/dist/invocation-account.js +60 -0
  74. package/dist/invocation-account.js.map +1 -0
  75. package/dist/media-ref-bytes.d.ts +19 -0
  76. package/dist/media-ref-bytes.d.ts.map +1 -0
  77. package/dist/media-ref-bytes.js +181 -0
  78. package/dist/media-ref-bytes.js.map +1 -0
  79. package/dist/node-executor.d.ts +113 -2
  80. package/dist/node-executor.d.ts.map +1 -1
  81. package/dist/permission-gate.d.ts +152 -0
  82. package/dist/permission-gate.d.ts.map +1 -0
  83. package/dist/permission-gate.js +87 -0
  84. package/dist/permission-gate.js.map +1 -0
  85. package/dist/prefixed-storage-adapter.d.ts +33 -0
  86. package/dist/prefixed-storage-adapter.d.ts.map +1 -0
  87. package/dist/prefixed-storage-adapter.js +70 -0
  88. package/dist/prefixed-storage-adapter.js.map +1 -0
  89. package/dist/prompt-asset-refs.d.ts +222 -0
  90. package/dist/prompt-asset-refs.d.ts.map +1 -0
  91. package/dist/prompt-asset-refs.js +751 -0
  92. package/dist/prompt-asset-refs.js.map +1 -0
  93. package/dist/provider-cache.d.ts +3 -0
  94. package/dist/provider-cache.d.ts.map +1 -0
  95. package/dist/provider-cache.js +8 -0
  96. package/dist/provider-cache.js.map +1 -0
  97. package/dist/providers/aki-provider.d.ts +33 -10
  98. package/dist/providers/aki-provider.d.ts.map +1 -1
  99. package/dist/providers/aki-provider.js +84 -77
  100. package/dist/providers/aki-provider.js.map +1 -1
  101. package/dist/providers/alibaba-provider.d.ts +39 -0
  102. package/dist/providers/alibaba-provider.d.ts.map +1 -0
  103. package/dist/providers/alibaba-provider.js +86 -0
  104. package/dist/providers/alibaba-provider.js.map +1 -0
  105. package/dist/providers/anthropic-provider.d.ts +52 -3
  106. package/dist/providers/anthropic-provider.d.ts.map +1 -1
  107. package/dist/providers/anthropic-provider.js +1020 -338
  108. package/dist/providers/anthropic-provider.js.map +1 -1
  109. package/dist/providers/atlascloud-provider.d.ts +101 -0
  110. package/dist/providers/atlascloud-provider.d.ts.map +1 -0
  111. package/dist/providers/atlascloud-provider.js +1009 -0
  112. package/dist/providers/atlascloud-provider.js.map +1 -0
  113. package/dist/providers/atlascloud-transport.d.ts +100 -0
  114. package/dist/providers/atlascloud-transport.d.ts.map +1 -0
  115. package/dist/providers/atlascloud-transport.js +364 -0
  116. package/dist/providers/atlascloud-transport.js.map +1 -0
  117. package/dist/providers/atlascloud-webhook-registry.d.ts +35 -0
  118. package/dist/providers/atlascloud-webhook-registry.d.ts.map +1 -0
  119. package/dist/providers/atlascloud-webhook-registry.js +104 -0
  120. package/dist/providers/atlascloud-webhook-registry.js.map +1 -0
  121. package/dist/providers/audio-mime.d.ts +11 -0
  122. package/dist/providers/audio-mime.d.ts.map +1 -0
  123. package/dist/providers/audio-mime.js +46 -0
  124. package/dist/providers/audio-mime.js.map +1 -0
  125. package/dist/providers/base-provider.d.ts +481 -24
  126. package/dist/providers/base-provider.d.ts.map +1 -1
  127. package/dist/providers/base-provider.js +1259 -42
  128. package/dist/providers/base-provider.js.map +1 -1
  129. package/dist/providers/cassette-provider.d.ts +217 -0
  130. package/dist/providers/cassette-provider.d.ts.map +1 -0
  131. package/dist/providers/cassette-provider.js +502 -0
  132. package/dist/providers/cassette-provider.js.map +1 -0
  133. package/dist/providers/cerebras-provider.d.ts +6 -12
  134. package/dist/providers/cerebras-provider.d.ts.map +1 -1
  135. package/dist/providers/cerebras-provider.js +8 -33
  136. package/dist/providers/cerebras-provider.js.map +1 -1
  137. package/dist/providers/claude-agent-provider.d.ts +131 -68
  138. package/dist/providers/claude-agent-provider.d.ts.map +1 -1
  139. package/dist/providers/claude-agent-provider.js +1095 -515
  140. package/dist/providers/claude-agent-provider.js.map +1 -1
  141. package/dist/providers/codex-provider.d.ts +82 -0
  142. package/dist/providers/codex-provider.d.ts.map +1 -0
  143. package/dist/providers/codex-provider.js +492 -0
  144. package/dist/providers/codex-provider.js.map +1 -0
  145. package/dist/providers/cohere-provider.d.ts +5 -2
  146. package/dist/providers/cohere-provider.d.ts.map +1 -1
  147. package/dist/providers/cohere-provider.js +9 -2
  148. package/dist/providers/cohere-provider.js.map +1 -1
  149. package/dist/providers/comfy-cloud-provider.d.ts +30 -0
  150. package/dist/providers/comfy-cloud-provider.d.ts.map +1 -0
  151. package/dist/providers/comfy-cloud-provider.js +42 -0
  152. package/dist/providers/comfy-cloud-provider.js.map +1 -0
  153. package/dist/providers/content-filter.d.ts +46 -0
  154. package/dist/providers/content-filter.d.ts.map +1 -0
  155. package/dist/providers/content-filter.js +92 -0
  156. package/dist/providers/content-filter.js.map +1 -0
  157. package/dist/providers/context-exceeded.d.ts +37 -0
  158. package/dist/providers/context-exceeded.d.ts.map +1 -0
  159. package/dist/providers/context-exceeded.js +114 -0
  160. package/dist/providers/context-exceeded.js.map +1 -0
  161. package/dist/providers/context-window.d.ts +44 -0
  162. package/dist/providers/context-window.d.ts.map +1 -0
  163. package/dist/providers/context-window.js +145 -0
  164. package/dist/providers/context-window.js.map +1 -0
  165. package/dist/providers/contract/index.d.ts +4 -0
  166. package/dist/providers/contract/index.d.ts.map +1 -0
  167. package/dist/providers/contract/index.js +4 -0
  168. package/dist/providers/contract/index.js.map +1 -0
  169. package/dist/providers/contract/probe-manifest.d.ts +75 -0
  170. package/dist/providers/contract/probe-manifest.d.ts.map +1 -0
  171. package/dist/providers/contract/probe-manifest.js +379 -0
  172. package/dist/providers/contract/probe-manifest.js.map +1 -0
  173. package/dist/providers/contract/probe-runner.d.ts +57 -0
  174. package/dist/providers/contract/probe-runner.d.ts.map +1 -0
  175. package/dist/providers/contract/probe-runner.js +180 -0
  176. package/dist/providers/contract/probe-runner.js.map +1 -0
  177. package/dist/providers/contract/redact.d.ts +29 -0
  178. package/dist/providers/contract/redact.d.ts.map +1 -0
  179. package/dist/providers/contract/redact.js +113 -0
  180. package/dist/providers/contract/redact.js.map +1 -0
  181. package/dist/providers/core-tools.d.ts +74 -0
  182. package/dist/providers/core-tools.d.ts.map +1 -0
  183. package/dist/providers/core-tools.js +127 -0
  184. package/dist/providers/core-tools.js.map +1 -0
  185. package/dist/providers/cost-calculator.d.ts +69 -50
  186. package/dist/providers/cost-calculator.d.ts.map +1 -1
  187. package/dist/providers/cost-calculator.js +207 -397
  188. package/dist/providers/cost-calculator.js.map +1 -1
  189. package/dist/providers/credential-check.d.ts +45 -0
  190. package/dist/providers/credential-check.d.ts.map +1 -0
  191. package/dist/providers/credential-check.js +159 -0
  192. package/dist/providers/credential-check.js.map +1 -0
  193. package/dist/providers/custom-model-kinds.d.ts +33 -0
  194. package/dist/providers/custom-model-kinds.d.ts.map +1 -0
  195. package/dist/providers/custom-model-kinds.js +96 -0
  196. package/dist/providers/custom-model-kinds.js.map +1 -0
  197. package/dist/providers/custom-openai-provider.d.ts +81 -0
  198. package/dist/providers/custom-openai-provider.d.ts.map +1 -0
  199. package/dist/providers/custom-openai-provider.js +182 -0
  200. package/dist/providers/custom-openai-provider.js.map +1 -0
  201. package/dist/providers/custom-provider-registry.d.ts +19 -0
  202. package/dist/providers/custom-provider-registry.d.ts.map +1 -0
  203. package/dist/providers/custom-provider-registry.js +52 -0
  204. package/dist/providers/custom-provider-registry.js.map +1 -0
  205. package/dist/providers/deepseek-provider.d.ts +8 -14
  206. package/dist/providers/deepseek-provider.d.ts.map +1 -1
  207. package/dist/providers/deepseek-provider.js +6 -35
  208. package/dist/providers/deepseek-provider.js.map +1 -1
  209. package/dist/providers/defaults.d.ts +12 -0
  210. package/dist/providers/defaults.d.ts.map +1 -0
  211. package/dist/providers/defaults.js +12 -0
  212. package/dist/providers/defaults.js.map +1 -0
  213. package/dist/providers/elevenlabs-provider.d.ts +49 -0
  214. package/dist/providers/elevenlabs-provider.d.ts.map +1 -0
  215. package/dist/providers/elevenlabs-provider.js +142 -0
  216. package/dist/providers/elevenlabs-provider.js.map +1 -0
  217. package/dist/providers/entity-references.d.ts +31 -0
  218. package/dist/providers/entity-references.d.ts.map +1 -0
  219. package/dist/providers/entity-references.js +113 -0
  220. package/dist/providers/entity-references.js.map +1 -0
  221. package/dist/providers/evolink-provider.d.ts +38 -0
  222. package/dist/providers/evolink-provider.d.ts.map +1 -0
  223. package/dist/providers/evolink-provider.js +304 -0
  224. package/dist/providers/evolink-provider.js.map +1 -0
  225. package/dist/providers/fake-provider.d.ts +72 -1
  226. package/dist/providers/fake-provider.d.ts.map +1 -1
  227. package/dist/providers/fake-provider.js +203 -1
  228. package/dist/providers/fake-provider.js.map +1 -1
  229. package/dist/providers/fal-generations.d.ts +106 -0
  230. package/dist/providers/fal-generations.d.ts.map +1 -0
  231. package/dist/providers/fal-generations.js +286 -0
  232. package/dist/providers/fal-generations.js.map +1 -0
  233. package/dist/providers/fal-provider.d.ts +171 -7
  234. package/dist/providers/fal-provider.d.ts.map +1 -1
  235. package/dist/providers/fal-provider.js +1369 -64
  236. package/dist/providers/fal-provider.js.map +1 -1
  237. package/dist/providers/fal-queue.d.ts +47 -0
  238. package/dist/providers/fal-queue.d.ts.map +1 -0
  239. package/dist/providers/fal-queue.js +231 -0
  240. package/dist/providers/fal-queue.js.map +1 -0
  241. package/dist/providers/gemini-provider.d.ts +148 -8
  242. package/dist/providers/gemini-provider.d.ts.map +1 -1
  243. package/dist/providers/gemini-provider.js +1500 -316
  244. package/dist/providers/gemini-provider.js.map +1 -1
  245. package/dist/providers/gmi-provider.d.ts +21 -0
  246. package/dist/providers/gmi-provider.d.ts.map +1 -0
  247. package/dist/providers/gmi-provider.js +34 -0
  248. package/dist/providers/gmi-provider.js.map +1 -0
  249. package/dist/providers/gpt-image-size.d.ts +3 -0
  250. package/dist/providers/gpt-image-size.d.ts.map +1 -0
  251. package/dist/providers/gpt-image-size.js +37 -0
  252. package/dist/providers/gpt-image-size.js.map +1 -0
  253. package/dist/providers/groq-provider.d.ts +9 -12
  254. package/dist/providers/groq-provider.d.ts.map +1 -1
  255. package/dist/providers/groq-provider.js +19 -33
  256. package/dist/providers/groq-provider.js.map +1 -1
  257. package/dist/providers/groq-request.d.ts +38 -0
  258. package/dist/providers/groq-request.d.ts.map +1 -0
  259. package/dist/providers/groq-request.js +138 -0
  260. package/dist/providers/groq-request.js.map +1 -0
  261. package/dist/providers/higgsfield-provider.d.ts +30 -0
  262. package/dist/providers/higgsfield-provider.d.ts.map +1 -0
  263. package/dist/providers/higgsfield-provider.js +131 -0
  264. package/dist/providers/higgsfield-provider.js.map +1 -0
  265. package/dist/providers/higgsfield-transport.d.ts +106 -0
  266. package/dist/providers/higgsfield-transport.d.ts.map +1 -0
  267. package/dist/providers/higgsfield-transport.js +182 -0
  268. package/dist/providers/higgsfield-transport.js.map +1 -0
  269. package/dist/providers/http-transport.d.ts +74 -0
  270. package/dist/providers/http-transport.d.ts.map +1 -0
  271. package/dist/providers/http-transport.js +152 -0
  272. package/dist/providers/http-transport.js.map +1 -0
  273. package/dist/providers/huggingface-provider.d.ts +71 -3
  274. package/dist/providers/huggingface-provider.d.ts.map +1 -1
  275. package/dist/providers/huggingface-provider.js +230 -34
  276. package/dist/providers/huggingface-provider.js.map +1 -1
  277. package/dist/providers/image-mime.d.ts +39 -0
  278. package/dist/providers/image-mime.d.ts.map +1 -0
  279. package/dist/providers/image-mime.js +111 -0
  280. package/dist/providers/image-mime.js.map +1 -0
  281. package/dist/providers/image-ref.d.ts +21 -0
  282. package/dist/providers/image-ref.d.ts.map +1 -0
  283. package/dist/providers/image-ref.js +44 -0
  284. package/dist/providers/image-ref.js.map +1 -0
  285. package/dist/providers/index.d.ts +84 -8
  286. package/dist/providers/index.d.ts.map +1 -1
  287. package/dist/providers/index.js +239 -56
  288. package/dist/providers/index.js.map +1 -1
  289. package/dist/providers/jina-provider.d.ts +10 -2
  290. package/dist/providers/jina-provider.d.ts.map +1 -1
  291. package/dist/providers/jina-provider.js +16 -7
  292. package/dist/providers/jina-provider.js.map +1 -1
  293. package/dist/providers/kie-provider.d.ts +170 -9
  294. package/dist/providers/kie-provider.d.ts.map +1 -1
  295. package/dist/providers/kie-provider.js +1176 -228
  296. package/dist/providers/kie-provider.js.map +1 -1
  297. package/dist/providers/kie-webhook-registry.d.ts +28 -0
  298. package/dist/providers/kie-webhook-registry.d.ts.map +1 -0
  299. package/dist/providers/kie-webhook-registry.js +91 -0
  300. package/dist/providers/kie-webhook-registry.js.map +1 -0
  301. package/dist/providers/llama-provider.d.ts +21 -37
  302. package/dist/providers/llama-provider.d.ts.map +1 -1
  303. package/dist/providers/llama-provider.js +43 -354
  304. package/dist/providers/llama-provider.js.map +1 -1
  305. package/dist/providers/lmstudio-provider.d.ts +4 -7
  306. package/dist/providers/lmstudio-provider.d.ts.map +1 -1
  307. package/dist/providers/lmstudio-provider.js +24 -15
  308. package/dist/providers/lmstudio-provider.js.map +1 -1
  309. package/dist/providers/manifest-models.d.ts +341 -1
  310. package/dist/providers/manifest-models.d.ts.map +1 -1
  311. package/dist/providers/manifest-models.js +1106 -22
  312. package/dist/providers/manifest-models.js.map +1 -1
  313. package/dist/providers/media-mime.d.ts +14 -0
  314. package/dist/providers/media-mime.d.ts.map +1 -0
  315. package/dist/providers/media-mime.js +35 -0
  316. package/dist/providers/media-mime.js.map +1 -0
  317. package/dist/providers/meshy-provider.d.ts +14 -1
  318. package/dist/providers/meshy-provider.d.ts.map +1 -1
  319. package/dist/providers/meshy-provider.js +76 -46
  320. package/dist/providers/meshy-provider.js.map +1 -1
  321. package/dist/providers/meta-provider.d.ts +22 -0
  322. package/dist/providers/meta-provider.d.ts.map +1 -0
  323. package/dist/providers/meta-provider.js +54 -0
  324. package/dist/providers/meta-provider.js.map +1 -0
  325. package/dist/providers/minimax-provider.d.ts +25 -18
  326. package/dist/providers/minimax-provider.d.ts.map +1 -1
  327. package/dist/providers/minimax-provider.js +211 -72
  328. package/dist/providers/minimax-provider.js.map +1 -1
  329. package/dist/providers/mistral-provider.d.ts +6 -12
  330. package/dist/providers/mistral-provider.d.ts.map +1 -1
  331. package/dist/providers/mistral-provider.js +10 -34
  332. package/dist/providers/mistral-provider.js.map +1 -1
  333. package/dist/providers/moonshot-provider.d.ts +11 -15
  334. package/dist/providers/moonshot-provider.d.ts.map +1 -1
  335. package/dist/providers/moonshot-provider.js +33 -23
  336. package/dist/providers/moonshot-provider.js.map +1 -1
  337. package/dist/providers/node-llama-cpp-provider.d.ts +98 -0
  338. package/dist/providers/node-llama-cpp-provider.d.ts.map +1 -0
  339. package/dist/providers/node-llama-cpp-provider.js +479 -0
  340. package/dist/providers/node-llama-cpp-provider.js.map +1 -0
  341. package/dist/providers/nodetool-provider.d.ts +49 -0
  342. package/dist/providers/nodetool-provider.d.ts.map +1 -0
  343. package/dist/providers/nodetool-provider.js +224 -0
  344. package/dist/providers/nodetool-provider.js.map +1 -0
  345. package/dist/providers/oauth/browser-launcher.d.ts +23 -0
  346. package/dist/providers/oauth/browser-launcher.d.ts.map +1 -0
  347. package/dist/providers/oauth/browser-launcher.js +45 -0
  348. package/dist/providers/oauth/browser-launcher.js.map +1 -0
  349. package/dist/providers/oauth/claude-code-credentials.d.ts +74 -0
  350. package/dist/providers/oauth/claude-code-credentials.d.ts.map +1 -0
  351. package/dist/providers/oauth/claude-code-credentials.js +133 -0
  352. package/dist/providers/oauth/claude-code-credentials.js.map +1 -0
  353. package/dist/providers/oauth/claude-code-login.d.ts +124 -0
  354. package/dist/providers/oauth/claude-code-login.d.ts.map +1 -0
  355. package/dist/providers/oauth/claude-code-login.js +230 -0
  356. package/dist/providers/oauth/claude-code-login.js.map +1 -0
  357. package/dist/providers/oauth/claude-code-oauth-client.d.ts +111 -0
  358. package/dist/providers/oauth/claude-code-oauth-client.d.ts.map +1 -0
  359. package/dist/providers/oauth/claude-code-oauth-client.js +207 -0
  360. package/dist/providers/oauth/claude-code-oauth-client.js.map +1 -0
  361. package/dist/providers/oauth/errors.d.ts +54 -0
  362. package/dist/providers/oauth/errors.d.ts.map +1 -0
  363. package/dist/providers/oauth/errors.js +79 -0
  364. package/dist/providers/oauth/errors.js.map +1 -0
  365. package/dist/providers/oauth/index.d.ts +105 -0
  366. package/dist/providers/oauth/index.d.ts.map +1 -0
  367. package/dist/providers/oauth/index.js +167 -0
  368. package/dist/providers/oauth/index.js.map +1 -0
  369. package/dist/providers/oauth/jwt-claims.d.ts +23 -0
  370. package/dist/providers/oauth/jwt-claims.d.ts.map +1 -0
  371. package/dist/providers/oauth/jwt-claims.js +67 -0
  372. package/dist/providers/oauth/jwt-claims.js.map +1 -0
  373. package/dist/providers/oauth/local-callback-server.d.ts +60 -0
  374. package/dist/providers/oauth/local-callback-server.d.ts.map +1 -0
  375. package/dist/providers/oauth/local-callback-server.js +148 -0
  376. package/dist/providers/oauth/local-callback-server.js.map +1 -0
  377. package/dist/providers/oauth/oauth-client.d.ts +55 -0
  378. package/dist/providers/oauth/oauth-client.d.ts.map +1 -0
  379. package/dist/providers/oauth/oauth-client.js +161 -0
  380. package/dist/providers/oauth/oauth-client.js.map +1 -0
  381. package/dist/providers/oauth/openai-oauth-provider.d.ts +129 -0
  382. package/dist/providers/oauth/openai-oauth-provider.d.ts.map +1 -0
  383. package/dist/providers/oauth/openai-oauth-provider.js +265 -0
  384. package/dist/providers/oauth/openai-oauth-provider.js.map +1 -0
  385. package/dist/providers/oauth/pkce-helper.d.ts +43 -0
  386. package/dist/providers/oauth/pkce-helper.d.ts.map +1 -0
  387. package/dist/providers/oauth/pkce-helper.js +57 -0
  388. package/dist/providers/oauth/pkce-helper.js.map +1 -0
  389. package/dist/providers/oauth/redaction.d.ts +22 -0
  390. package/dist/providers/oauth/redaction.d.ts.map +1 -0
  391. package/dist/providers/oauth/redaction.js +59 -0
  392. package/dist/providers/oauth/redaction.js.map +1 -0
  393. package/dist/providers/oauth/secure-credential-store.d.ts +67 -0
  394. package/dist/providers/oauth/secure-credential-store.d.ts.map +1 -0
  395. package/dist/providers/oauth/secure-credential-store.js +73 -0
  396. package/dist/providers/oauth/secure-credential-store.js.map +1 -0
  397. package/dist/providers/oauth/token-store.d.ts +53 -0
  398. package/dist/providers/oauth/token-store.d.ts.map +1 -0
  399. package/dist/providers/oauth/token-store.js +78 -0
  400. package/dist/providers/oauth/token-store.js.map +1 -0
  401. package/dist/providers/oauth/types.d.ts +64 -0
  402. package/dist/providers/oauth/types.d.ts.map +1 -0
  403. package/dist/providers/oauth/types.js +12 -0
  404. package/dist/providers/oauth/types.js.map +1 -0
  405. package/dist/providers/object-tracking.d.ts +47 -0
  406. package/dist/providers/object-tracking.d.ts.map +1 -0
  407. package/dist/providers/object-tracking.js +46 -0
  408. package/dist/providers/object-tracking.js.map +1 -0
  409. package/dist/providers/offline-model-index.d.ts +20 -0
  410. package/dist/providers/offline-model-index.d.ts.map +1 -0
  411. package/dist/providers/offline-model-index.js +112 -0
  412. package/dist/providers/offline-model-index.js.map +1 -0
  413. package/dist/providers/ollama-provider.d.ts +28 -1
  414. package/dist/providers/ollama-provider.d.ts.map +1 -1
  415. package/dist/providers/ollama-provider.js +193 -43
  416. package/dist/providers/ollama-provider.js.map +1 -1
  417. package/dist/providers/openai-compat/client.d.ts +57 -0
  418. package/dist/providers/openai-compat/client.d.ts.map +1 -0
  419. package/dist/providers/openai-compat/client.js +157 -0
  420. package/dist/providers/openai-compat/client.js.map +1 -0
  421. package/dist/providers/openai-compat/decode.d.ts +36 -0
  422. package/dist/providers/openai-compat/decode.d.ts.map +1 -0
  423. package/dist/providers/openai-compat/decode.js +55 -0
  424. package/dist/providers/openai-compat/decode.js.map +1 -0
  425. package/dist/providers/openai-compat/errors.d.ts +54 -0
  426. package/dist/providers/openai-compat/errors.d.ts.map +1 -0
  427. package/dist/providers/openai-compat/errors.js +144 -0
  428. package/dist/providers/openai-compat/errors.js.map +1 -0
  429. package/dist/providers/openai-compat/index.d.ts +8 -0
  430. package/dist/providers/openai-compat/index.d.ts.map +1 -0
  431. package/dist/providers/openai-compat/index.js +5 -0
  432. package/dist/providers/openai-compat/index.js.map +1 -0
  433. package/dist/providers/openai-compat/sse.d.ts +14 -0
  434. package/dist/providers/openai-compat/sse.d.ts.map +1 -0
  435. package/dist/providers/openai-compat/sse.js +69 -0
  436. package/dist/providers/openai-compat/sse.js.map +1 -0
  437. package/dist/providers/openai-compat/types.d.ts +75 -0
  438. package/dist/providers/openai-compat/types.d.ts.map +1 -0
  439. package/dist/providers/openai-compat/types.js +9 -0
  440. package/dist/providers/openai-compat/types.js.map +1 -0
  441. package/dist/providers/openai-compat-provider.d.ts +90 -0
  442. package/dist/providers/openai-compat-provider.d.ts.map +1 -0
  443. package/dist/providers/openai-compat-provider.js +282 -0
  444. package/dist/providers/openai-compat-provider.js.map +1 -0
  445. package/dist/providers/openai-provider.d.ts +89 -26
  446. package/dist/providers/openai-provider.d.ts.map +1 -1
  447. package/dist/providers/openai-provider.js +990 -105
  448. package/dist/providers/openai-provider.js.map +1 -1
  449. package/dist/providers/openrouter-provider.d.ts +6 -12
  450. package/dist/providers/openrouter-provider.d.ts.map +1 -1
  451. package/dist/providers/openrouter-provider.js +24 -53
  452. package/dist/providers/openrouter-provider.js.map +1 -1
  453. package/dist/providers/provider-call-failure.d.ts +39 -0
  454. package/dist/providers/provider-call-failure.d.ts.map +1 -0
  455. package/dist/providers/provider-call-failure.js +132 -0
  456. package/dist/providers/provider-call-failure.js.map +1 -0
  457. package/dist/providers/provider-error.d.ts +59 -0
  458. package/dist/providers/provider-error.d.ts.map +1 -0
  459. package/dist/providers/provider-error.js +165 -0
  460. package/dist/providers/provider-error.js.map +1 -0
  461. package/dist/providers/provider-generations.d.ts +99 -0
  462. package/dist/providers/provider-generations.d.ts.map +1 -0
  463. package/dist/providers/provider-generations.js +71 -0
  464. package/dist/providers/provider-generations.js.map +1 -0
  465. package/dist/providers/provider-queue.d.ts +62 -0
  466. package/dist/providers/provider-queue.d.ts.map +1 -0
  467. package/dist/providers/provider-queue.js +28 -0
  468. package/dist/providers/provider-queue.js.map +1 -0
  469. package/dist/providers/provider-registry.d.ts +33 -14
  470. package/dist/providers/provider-registry.d.ts.map +1 -1
  471. package/dist/providers/provider-registry.js +85 -68
  472. package/dist/providers/provider-registry.js.map +1 -1
  473. package/dist/providers/provider-request-log.d.ts +53 -0
  474. package/dist/providers/provider-request-log.d.ts.map +1 -0
  475. package/dist/providers/provider-request-log.js +157 -0
  476. package/dist/providers/provider-request-log.js.map +1 -0
  477. package/dist/providers/provider-session.d.ts +3 -0
  478. package/dist/providers/provider-session.d.ts.map +1 -0
  479. package/dist/providers/provider-session.js +10 -0
  480. package/dist/providers/provider-session.js.map +1 -0
  481. package/dist/providers/provider-transport.d.ts +11 -0
  482. package/dist/providers/provider-transport.d.ts.map +1 -0
  483. package/dist/providers/provider-transport.js +11 -0
  484. package/dist/providers/provider-transport.js.map +1 -0
  485. package/dist/providers/python-provider.d.ts +20 -12
  486. package/dist/providers/python-provider.d.ts.map +1 -1
  487. package/dist/providers/python-provider.js +185 -25
  488. package/dist/providers/python-provider.js.map +1 -1
  489. package/dist/providers/replicate-provider.d.ts +89 -7
  490. package/dist/providers/replicate-provider.d.ts.map +1 -1
  491. package/dist/providers/replicate-provider.js +801 -65
  492. package/dist/providers/replicate-provider.js.map +1 -1
  493. package/dist/providers/replicate-retry.d.ts +30 -0
  494. package/dist/providers/replicate-retry.d.ts.map +1 -0
  495. package/dist/providers/replicate-retry.js +97 -0
  496. package/dist/providers/replicate-retry.js.map +1 -0
  497. package/dist/providers/responses-api.d.ts +27 -0
  498. package/dist/providers/responses-api.d.ts.map +1 -0
  499. package/dist/providers/responses-api.js +297 -0
  500. package/dist/providers/responses-api.js.map +1 -0
  501. package/dist/providers/reve-provider.d.ts +45 -0
  502. package/dist/providers/reve-provider.d.ts.map +1 -0
  503. package/dist/providers/reve-provider.js +159 -0
  504. package/dist/providers/reve-provider.js.map +1 -0
  505. package/dist/providers/rodin-provider.d.ts +23 -1
  506. package/dist/providers/rodin-provider.d.ts.map +1 -1
  507. package/dist/providers/rodin-provider.js +89 -51
  508. package/dist/providers/rodin-provider.js.map +1 -1
  509. package/dist/providers/safe-url.d.ts +70 -0
  510. package/dist/providers/safe-url.d.ts.map +1 -0
  511. package/dist/providers/safe-url.js +277 -0
  512. package/dist/providers/safe-url.js.map +1 -0
  513. package/dist/providers/scripted-provider.d.ts +9 -0
  514. package/dist/providers/scripted-provider.d.ts.map +1 -1
  515. package/dist/providers/scripted-provider.js +86 -10
  516. package/dist/providers/scripted-provider.js.map +1 -1
  517. package/dist/providers/structured-output.d.ts +42 -0
  518. package/dist/providers/structured-output.d.ts.map +1 -0
  519. package/dist/providers/structured-output.js +83 -0
  520. package/dist/providers/structured-output.js.map +1 -0
  521. package/dist/providers/together-provider.d.ts +19 -16
  522. package/dist/providers/together-provider.d.ts.map +1 -1
  523. package/dist/providers/together-provider.js +103 -225
  524. package/dist/providers/together-provider.js.map +1 -1
  525. package/dist/providers/topaz-provider.d.ts +44 -0
  526. package/dist/providers/topaz-provider.d.ts.map +1 -0
  527. package/dist/providers/topaz-provider.js +239 -0
  528. package/dist/providers/topaz-provider.js.map +1 -0
  529. package/dist/providers/types.d.ts +603 -4
  530. package/dist/providers/types.d.ts.map +1 -1
  531. package/dist/providers/types.js +81 -1
  532. package/dist/providers/types.js.map +1 -1
  533. package/dist/providers/useapi-provider.d.ts +27 -0
  534. package/dist/providers/useapi-provider.d.ts.map +1 -0
  535. package/dist/providers/useapi-provider.js +266 -0
  536. package/dist/providers/useapi-provider.js.map +1 -0
  537. package/dist/providers/video-duration.d.ts +6 -0
  538. package/dist/providers/video-duration.d.ts.map +1 -0
  539. package/dist/providers/video-duration.js +63 -0
  540. package/dist/providers/video-duration.js.map +1 -0
  541. package/dist/providers/video-frame-fallback.d.ts +39 -0
  542. package/dist/providers/video-frame-fallback.d.ts.map +1 -0
  543. package/dist/providers/video-frame-fallback.js +155 -0
  544. package/dist/providers/video-frame-fallback.js.map +1 -0
  545. package/dist/providers/video-frames.d.ts +61 -0
  546. package/dist/providers/video-frames.d.ts.map +1 -0
  547. package/dist/providers/video-frames.js +208 -0
  548. package/dist/providers/video-frames.js.map +1 -0
  549. package/dist/providers/video-mime.d.ts +14 -0
  550. package/dist/providers/video-mime.d.ts.map +1 -0
  551. package/dist/providers/video-mime.js +44 -0
  552. package/dist/providers/video-mime.js.map +1 -0
  553. package/dist/providers/video-to-audio.d.ts +34 -0
  554. package/dist/providers/video-to-audio.d.ts.map +1 -0
  555. package/dist/providers/video-to-audio.js +62 -0
  556. package/dist/providers/video-to-audio.js.map +1 -0
  557. package/dist/providers/vllm-provider.d.ts +22 -8
  558. package/dist/providers/vllm-provider.d.ts.map +1 -1
  559. package/dist/providers/vllm-provider.js +48 -23
  560. package/dist/providers/vllm-provider.js.map +1 -1
  561. package/dist/providers/voyage-provider.d.ts +10 -2
  562. package/dist/providers/voyage-provider.d.ts.map +1 -1
  563. package/dist/providers/voyage-provider.js +16 -7
  564. package/dist/providers/voyage-provider.js.map +1 -1
  565. package/dist/providers/xai-provider.d.ts +54 -13
  566. package/dist/providers/xai-provider.d.ts.map +1 -1
  567. package/dist/providers/xai-provider.js +299 -22
  568. package/dist/providers/xai-provider.js.map +1 -1
  569. package/dist/python-bridge-base.d.ts +358 -0
  570. package/dist/python-bridge-base.d.ts.map +1 -0
  571. package/dist/python-bridge-base.js +1557 -0
  572. package/dist/python-bridge-base.js.map +1 -0
  573. package/dist/python-bridge-codec.d.ts +28 -0
  574. package/dist/python-bridge-codec.d.ts.map +1 -0
  575. package/dist/python-bridge-codec.js +39 -0
  576. package/dist/python-bridge-codec.js.map +1 -0
  577. package/dist/python-bridge-factory.d.ts +52 -0
  578. package/dist/python-bridge-factory.d.ts.map +1 -0
  579. package/dist/python-bridge-factory.js +69 -0
  580. package/dist/python-bridge-factory.js.map +1 -0
  581. package/dist/python-bridge-framing.d.ts +68 -0
  582. package/dist/python-bridge-framing.d.ts.map +1 -0
  583. package/dist/python-bridge-framing.js +91 -0
  584. package/dist/python-bridge-framing.js.map +1 -0
  585. package/dist/python-bridge-types.d.ts +545 -2
  586. package/dist/python-bridge-types.d.ts.map +1 -1
  587. package/dist/python-bridge-types.js +49 -1
  588. package/dist/python-bridge-types.js.map +1 -1
  589. package/dist/python-graph-resolver.d.ts +57 -0
  590. package/dist/python-graph-resolver.d.ts.map +1 -0
  591. package/dist/python-graph-resolver.js +79 -0
  592. package/dist/python-graph-resolver.js.map +1 -0
  593. package/dist/python-node-executor.d.ts +36 -4
  594. package/dist/python-node-executor.d.ts.map +1 -1
  595. package/dist/python-node-executor.js +177 -86
  596. package/dist/python-node-executor.js.map +1 -1
  597. package/dist/python-stdio-bridge.d.ts +18 -37
  598. package/dist/python-stdio-bridge.d.ts.map +1 -1
  599. package/dist/python-stdio-bridge.js +148 -475
  600. package/dist/python-stdio-bridge.js.map +1 -1
  601. package/dist/python-websocket-bridge.d.ts +140 -0
  602. package/dist/python-websocket-bridge.d.ts.map +1 -0
  603. package/dist/python-websocket-bridge.js +561 -0
  604. package/dist/python-websocket-bridge.js.map +1 -0
  605. package/dist/python-worker-stderr.d.ts +4 -0
  606. package/dist/python-worker-stderr.d.ts.map +1 -0
  607. package/dist/python-worker-stderr.js +24 -0
  608. package/dist/python-worker-stderr.js.map +1 -0
  609. package/dist/recommended-models.d.ts +2 -2
  610. package/dist/recommended-models.d.ts.map +1 -1
  611. package/dist/recommended-models.js +24 -4
  612. package/dist/recommended-models.js.map +1 -1
  613. package/dist/recoverable-node-error.d.ts +31 -0
  614. package/dist/recoverable-node-error.d.ts.map +1 -0
  615. package/dist/recoverable-node-error.js +37 -0
  616. package/dist/recoverable-node-error.js.map +1 -0
  617. package/dist/redact-params.d.ts +13 -0
  618. package/dist/redact-params.d.ts.map +1 -0
  619. package/dist/redact-params.js +57 -0
  620. package/dist/redact-params.js.map +1 -0
  621. package/dist/sandbox-module-catalog.d.ts +43 -0
  622. package/dist/sandbox-module-catalog.d.ts.map +1 -0
  623. package/dist/sandbox-module-catalog.js +25 -0
  624. package/dist/sandbox-module-catalog.js.map +1 -0
  625. package/dist/storage-workspace.d.ts +59 -0
  626. package/dist/storage-workspace.d.ts.map +1 -0
  627. package/dist/storage-workspace.js +426 -0
  628. package/dist/storage-workspace.js.map +1 -0
  629. package/dist/swappable-python-bridge.d.ts +83 -0
  630. package/dist/swappable-python-bridge.d.ts.map +1 -0
  631. package/dist/swappable-python-bridge.js +246 -0
  632. package/dist/swappable-python-bridge.js.map +1 -0
  633. package/dist/telemetry.d.ts +7 -0
  634. package/dist/telemetry.d.ts.map +1 -1
  635. package/dist/telemetry.js +23 -0
  636. package/dist/telemetry.js.map +1 -1
  637. package/dist/testing.d.ts +81 -0
  638. package/dist/testing.d.ts.map +1 -0
  639. package/dist/testing.js +130 -0
  640. package/dist/testing.js.map +1 -0
  641. package/dist/token-counter.d.ts +30 -0
  642. package/dist/token-counter.d.ts.map +1 -0
  643. package/dist/token-counter.js +156 -0
  644. package/dist/token-counter.js.map +1 -0
  645. package/dist/trace-exporters.d.ts +10 -0
  646. package/dist/trace-exporters.d.ts.map +1 -1
  647. package/dist/trace-exporters.js +59 -20
  648. package/dist/trace-exporters.js.map +1 -1
  649. package/dist/tracing-helpers.d.ts +45 -4
  650. package/dist/tracing-helpers.d.ts.map +1 -1
  651. package/dist/tracing-helpers.js +62 -19
  652. package/dist/tracing-helpers.js.map +1 -1
  653. package/dist/turn-budget.d.ts +278 -0
  654. package/dist/turn-budget.d.ts.map +1 -0
  655. package/dist/turn-budget.js +365 -0
  656. package/dist/turn-budget.js.map +1 -0
  657. package/dist/variable-channel.d.ts +48 -0
  658. package/dist/variable-channel.d.ts.map +1 -0
  659. package/dist/variable-channel.js +110 -0
  660. package/dist/variable-channel.js.map +1 -0
  661. package/dist/workspace.d.ts +119 -0
  662. package/dist/workspace.d.ts.map +1 -0
  663. package/dist/workspace.js +112 -0
  664. package/dist/workspace.js.map +1 -0
  665. package/package.json +107 -19
@@ -0,0 +1,75 @@
1
+ /**
2
+ * The provider contract probe manifest.
3
+ *
4
+ * A cassette proves NodeTool still handles a response a provider gave us *once*.
5
+ * It cannot notice that the provider changed the response today. Each entry
6
+ * here names one response shape NodeTool depends on, the production decoder
7
+ * that reads it, a checked-in raw HTTP response fixture, and — where a live
8
+ * call is cheap enough to make nightly — the single request that fetches
9
+ * today's version of it.
10
+ *
11
+ * Both directions run the same decoder. The fixture direction is the offline
12
+ * test (`provider-contract-probes.test.ts`); the live direction is the nightly
13
+ * probe (`scripts/provider-contract-probe.mjs`). Neither ever writes a
14
+ * cassette.
15
+ *
16
+ * Budget: the first manifest allows one live request and USD 0.05 per provider
17
+ * per run, enforced by `runProbes` and asserted by the manifest test.
18
+ */
19
+ /** Providers the first manifest covers. */
20
+ export type ProbeProvider = "anthropic" | "openai" | "gemini" | "fal_ai" | "kie" | "replicate";
21
+ /** The one live HTTP request an entry may make per run. */
22
+ export interface LiveProbeSpec {
23
+ /** Environment variable holding the credential, or null when none is needed. */
24
+ credential: string | null;
25
+ /** Hard ceiling on requests this entry may issue in one run. */
26
+ maxRequests: number;
27
+ /** Hard ceiling on what this entry may spend in one run. */
28
+ maxCostUsd: number;
29
+ /** What one run is expected to cost, for the budget rollup. */
30
+ estimatedCostUsd: number;
31
+ /**
32
+ * Build the request. `env` is the process environment; `credential` is the
33
+ * resolved secret (empty string when the entry needs none).
34
+ */
35
+ request(env: Record<string, string | undefined>, credential: string): {
36
+ url: string;
37
+ init: RequestInit;
38
+ };
39
+ /**
40
+ * True when a non-2xx status is the contract under test — KIE answers a
41
+ * rejected submission with its error envelope — so the runner decodes the
42
+ * body instead of reporting a network failure.
43
+ */
44
+ acceptsHttpError?: boolean;
45
+ }
46
+ export interface ProbeManifestEntry {
47
+ /** Stable id, `<provider>.<shape>`. */
48
+ id: string;
49
+ provider: ProbeProvider;
50
+ /** The model or endpoint whose response shape this entry pins. */
51
+ target: string;
52
+ /** Name of the production decoder the check runs. */
53
+ decoder: string;
54
+ /** Raw response fixture, relative to `tests/fixtures/provider-contract/`. */
55
+ fixture: string;
56
+ /**
57
+ * Run the production decoder over a raw response body and assert what the
58
+ * provider needs from it. Throws on anything a caller could not use.
59
+ */
60
+ check(raw: unknown): void;
61
+ /**
62
+ * Dotted paths into the fixture whose removal must make `check` fail. These
63
+ * are the positive controls: the offline test deletes each one and requires
64
+ * the check to reject the result.
65
+ */
66
+ requiredFields: string[];
67
+ /** The nightly live request, or null when this shape is fixture-only. */
68
+ live: LiveProbeSpec | null;
69
+ /** Why there is no live probe. Required when `live` is null. */
70
+ liveGap?: string;
71
+ }
72
+ export declare const PROBE_MANIFEST: ProbeManifestEntry[];
73
+ /** Every provider the manifest covers, in manifest order. */
74
+ export declare function probeProviders(): ProbeProvider[];
75
+ //# sourceMappingURL=probe-manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probe-manifest.d.ts","sourceRoot":"","sources":["../../../src/providers/contract/probe-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA+BH,2CAA2C;AAC3C,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,KAAK,GACL,WAAW,CAAC;AAEhB,2DAA2D;AAC3D,MAAM,WAAW,aAAa;IAC5B,gFAAgF;IAChF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,OAAO,CACL,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,UAAU,EAAE,MAAM,GACjB;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC;IACtC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,aAAa,CAAC;IACxB,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B;;;;OAIG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,yEAAyE;IACzE,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3B,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAwDD,eAAO,MAAM,cAAc,EAAE,kBAAkB,EAmW9C,CAAC;AAEF,6DAA6D;AAC7D,wBAAgB,cAAc,IAAI,aAAa,EAAE,CAEhD"}
@@ -0,0 +1,379 @@
1
+ /**
2
+ * The provider contract probe manifest.
3
+ *
4
+ * A cassette proves NodeTool still handles a response a provider gave us *once*.
5
+ * It cannot notice that the provider changed the response today. Each entry
6
+ * here names one response shape NodeTool depends on, the production decoder
7
+ * that reads it, a checked-in raw HTTP response fixture, and — where a live
8
+ * call is cheap enough to make nightly — the single request that fetches
9
+ * today's version of it.
10
+ *
11
+ * Both directions run the same decoder. The fixture direction is the offline
12
+ * test (`provider-contract-probes.test.ts`); the live direction is the nightly
13
+ * probe (`scripts/provider-contract-probe.mjs`). Neither ever writes a
14
+ * cassette.
15
+ *
16
+ * Budget: the first manifest allows one live request and USD 0.05 per provider
17
+ * per run, enforced by `runProbes` and asserted by the manifest test.
18
+ */
19
+ import { decodeChatCompletion } from "../openai-compat/index.js";
20
+ import { decodeOpenAIModelList } from "../openai-provider.js";
21
+ import { decodeGeminiGenerateContent, decodeGeminiModelsPage } from "../gemini-provider.js";
22
+ import { decodeFalLanguageCatalog, extractAudioUrl, extractImageUrls, extractVideoUrl } from "../fal-provider.js";
23
+ import { decodeKieRecordInfo, decodeKieResultUrls, decodeKieTaskSubmission, kieEnvelopeError } from "../kie-provider.js";
24
+ import { decodeReplicateOutput } from "../replicate-provider.js";
25
+ import { anthropicContextExceeded, geminiContextExceeded, openAIContextExceeded } from "../context-exceeded.js";
26
+ function expect(condition, message) {
27
+ if (!condition)
28
+ throw new Error(message);
29
+ }
30
+ function isNonEmptyString(value) {
31
+ return typeof value === "string" && value.length > 0;
32
+ }
33
+ function checkChatCompletion(raw) {
34
+ const decoded = decodeChatCompletion(raw);
35
+ expect(isNonEmptyString(decoded.content) || (decoded.toolCalls?.length ?? 0) > 0, "chat completion carried neither content nor a tool call");
36
+ expect(isNonEmptyString(decoded.finishReason), "chat completion carried no finish_reason");
37
+ expect(decoded.usage !== null, "chat completion carried no usage block");
38
+ expect((decoded.usage?.outputTokens ?? 0) > 0, "chat completion reported zero output tokens");
39
+ }
40
+ /**
41
+ * A context-window refusal the caller must be able to recognize: overflowing
42
+ * the window is the one provider failure a long conversation can recover from,
43
+ * by shortening the transcript and retrying. The check asserts the *named*
44
+ * signal, not just the classification, so a provider dropping the field the
45
+ * recognizer reads is reported even while the English message still matches.
46
+ */
47
+ function checkContextExceeded(recognize, expected) {
48
+ return (raw) => {
49
+ const signal = recognize(raw);
50
+ expect(signal === expected, `context-window refusal no longer reports the ${expected} signal (got ${signal ?? "no match"})`);
51
+ };
52
+ }
53
+ /** Why no context-window entry makes a live request. */
54
+ const CONTEXT_EXCEEDED_LIVE_GAP = "Reproducing the refusal means sending a prompt larger than the model's " +
55
+ "context window, which is far above the per-provider request budget. The " +
56
+ "wire shape is pinned by the fixture.";
57
+ const OPENAI_PROBE_MODEL = "gpt-5.4-mini";
58
+ const GEMINI_PROBE_MODEL = "gemini-3-flash";
59
+ export const PROBE_MANIFEST = [
60
+ {
61
+ id: "anthropic.context-window-exceeded",
62
+ provider: "anthropic",
63
+ target: "POST https://api.anthropic.com/v1/messages (input over the window)",
64
+ decoder: "anthropicContextExceeded",
65
+ fixture: "anthropic/context-window-exceeded.json",
66
+ check: checkContextExceeded(anthropicContextExceeded, "message"),
67
+ requiredFields: ["error", "error.message"],
68
+ live: null,
69
+ liveGap: CONTEXT_EXCEEDED_LIVE_GAP
70
+ },
71
+ {
72
+ id: "anthropic.context-window-exceeded-stop",
73
+ provider: "anthropic",
74
+ target: "POST https://api.anthropic.com/v1/messages (generation hits the window)",
75
+ decoder: "anthropicContextExceeded",
76
+ fixture: "anthropic/context-window-exceeded-stop.json",
77
+ check: checkContextExceeded(anthropicContextExceeded, "stop_reason"),
78
+ requiredFields: ["stop_reason"],
79
+ live: null,
80
+ liveGap: CONTEXT_EXCEEDED_LIVE_GAP
81
+ },
82
+ {
83
+ id: "openai.context-length-exceeded",
84
+ provider: "openai",
85
+ target: "POST https://api.openai.com/v1/chat/completions (input over the window)",
86
+ decoder: "openAIContextExceeded",
87
+ fixture: "openai/context-length-exceeded.json",
88
+ check: checkContextExceeded(openAIContextExceeded, "error_code"),
89
+ requiredFields: ["error", "error.code"],
90
+ live: null,
91
+ liveGap: CONTEXT_EXCEEDED_LIVE_GAP
92
+ },
93
+ {
94
+ id: "gemini.context-window-exceeded",
95
+ provider: "gemini",
96
+ target: "POST :generateContent (input over the window)",
97
+ decoder: "geminiContextExceeded",
98
+ fixture: "gemini/context-window-exceeded.json",
99
+ check: checkContextExceeded(geminiContextExceeded, "message"),
100
+ requiredFields: ["error", "error.message"],
101
+ live: null,
102
+ liveGap: CONTEXT_EXCEEDED_LIVE_GAP
103
+ },
104
+ {
105
+ id: "openai.chat-completion",
106
+ provider: "openai",
107
+ target: `POST https://api.openai.com/v1/chat/completions (${OPENAI_PROBE_MODEL})`,
108
+ decoder: "decodeChatCompletion",
109
+ fixture: "openai/chat-completion.json",
110
+ check: checkChatCompletion,
111
+ requiredFields: [
112
+ "choices",
113
+ "choices.0.message.content",
114
+ "choices.0.finish_reason",
115
+ "usage"
116
+ ],
117
+ live: {
118
+ credential: "OPENAI_API_KEY",
119
+ maxRequests: 1,
120
+ maxCostUsd: 0.05,
121
+ estimatedCostUsd: 0.001,
122
+ request: (env, credential) => ({
123
+ url: "https://api.openai.com/v1/chat/completions",
124
+ init: {
125
+ method: "POST",
126
+ headers: {
127
+ Authorization: `Bearer ${credential}`,
128
+ "Content-Type": "application/json"
129
+ },
130
+ body: JSON.stringify({
131
+ model: env.NODETOOL_PROBE_OPENAI_MODEL ?? OPENAI_PROBE_MODEL,
132
+ messages: [{ role: "user", content: "Reply with the word ok." }],
133
+ max_completion_tokens: 16
134
+ })
135
+ }
136
+ })
137
+ }
138
+ },
139
+ {
140
+ id: "openai.models-list",
141
+ provider: "openai",
142
+ target: "GET https://api.openai.com/v1/models",
143
+ decoder: "decodeOpenAIModelList",
144
+ fixture: "openai/models-list.json",
145
+ check: (raw) => {
146
+ const models = decodeOpenAIModelList(raw, {
147
+ provider: "openai",
148
+ onlyResponsesModels: true
149
+ });
150
+ expect(models.length > 0, "model list decoded to no gpt-5 models");
151
+ expect(models.every((m) => isNonEmptyString(m.id) && isNonEmptyString(m.name)), "a decoded model is missing an id or name");
152
+ },
153
+ requiredFields: ["data", "data.0.id"],
154
+ live: null,
155
+ liveGap: "One live request per provider, and the chat completion is the shape a " +
156
+ "run actually depends on. The model list is covered by its fixture."
157
+ },
158
+ {
159
+ id: "gemini.generate-content",
160
+ provider: "gemini",
161
+ target: `POST :generateContent (${GEMINI_PROBE_MODEL})`,
162
+ decoder: "decodeGeminiGenerateContent",
163
+ fixture: "gemini/generate-content.json",
164
+ check: (raw) => {
165
+ const decoded = decodeGeminiGenerateContent(raw);
166
+ expect(decoded.parts.length > 0, "candidate carried no parts");
167
+ expect(decoded.parts.some((part) => isNonEmptyString(part.text)), "no candidate part carried text");
168
+ expect((decoded.usage?.candidatesTokenCount ?? 0) > 0, "usageMetadata reported no candidate tokens");
169
+ },
170
+ requiredFields: [
171
+ "candidates",
172
+ "candidates.0.content.parts",
173
+ "usageMetadata.candidatesTokenCount"
174
+ ],
175
+ live: {
176
+ credential: "GEMINI_API_KEY",
177
+ maxRequests: 1,
178
+ maxCostUsd: 0.05,
179
+ estimatedCostUsd: 0.001,
180
+ request: (env, credential) => {
181
+ const model = env.NODETOOL_PROBE_GEMINI_MODEL ?? GEMINI_PROBE_MODEL;
182
+ return {
183
+ url: "https://generativelanguage.googleapis.com/v1beta/models/" +
184
+ `${model}:generateContent?key=${encodeURIComponent(credential)}`,
185
+ init: {
186
+ method: "POST",
187
+ headers: { "Content-Type": "application/json" },
188
+ body: JSON.stringify({
189
+ contents: [
190
+ { role: "user", parts: [{ text: "Reply with the word ok." }] }
191
+ ],
192
+ generationConfig: { maxOutputTokens: 16 }
193
+ })
194
+ }
195
+ };
196
+ }
197
+ }
198
+ },
199
+ {
200
+ id: "gemini.models-list",
201
+ provider: "gemini",
202
+ target: "GET https://generativelanguage.googleapis.com/v1beta/models",
203
+ decoder: "decodeGeminiModelsPage",
204
+ fixture: "gemini/models-list.json",
205
+ check: (raw) => {
206
+ const page = decodeGeminiModelsPage(raw);
207
+ const usable = (page.models ?? []).filter((m) => (m.supportedGenerationMethods ?? []).includes("generateContent"));
208
+ expect(usable.length > 0, "no listed model supports generateContent");
209
+ expect(usable.every((m) => isNonEmptyString(m.name)), "a listed model has no name");
210
+ },
211
+ requiredFields: [
212
+ "models",
213
+ "models.0.name",
214
+ "models.0.supportedGenerationMethods"
215
+ ],
216
+ live: null,
217
+ liveGap: "One live request per provider; generateContent is the shape a run " +
218
+ "depends on. The model list is covered by its fixture."
219
+ },
220
+ {
221
+ id: "fal_ai.language-catalog",
222
+ provider: "fal_ai",
223
+ target: "GET https://openrouter.ai/api/v1/models",
224
+ decoder: "decodeFalLanguageCatalog",
225
+ fixture: "fal_ai/language-catalog.json",
226
+ check: (raw) => {
227
+ const rows = decodeFalLanguageCatalog(raw);
228
+ expect(rows.length > 0, "fal catalog decoded to no rows");
229
+ expect(rows.some((row) => isNonEmptyString(row.id)), "no catalog row carried an id");
230
+ expect(rows.some((row) => row.supported_parameters?.includes("tools")), "no catalog row declared tool support");
231
+ },
232
+ requiredFields: ["data", "data.0.id", "data.0.supported_parameters"],
233
+ live: {
234
+ // fal's chat route is OpenRouter's router, and its catalog is the public
235
+ // OpenRouter listing — no credential, no cost.
236
+ credential: null,
237
+ maxRequests: 1,
238
+ maxCostUsd: 0,
239
+ estimatedCostUsd: 0,
240
+ request: () => ({
241
+ url: "https://openrouter.ai/api/v1/models",
242
+ init: { method: "GET" }
243
+ })
244
+ }
245
+ },
246
+ {
247
+ id: "fal_ai.image-result",
248
+ provider: "fal_ai",
249
+ target: "fal queue result (image endpoints)",
250
+ decoder: "extractImageUrls",
251
+ fixture: "fal_ai/image-result.json",
252
+ check: (raw) => {
253
+ const urls = extractImageUrls(raw);
254
+ expect(urls.length > 0, "no image url in the fal result");
255
+ expect(urls.every((url) => url.startsWith("https://")), "a fal image url is not https");
256
+ },
257
+ requiredFields: ["images", "images.0.url"],
258
+ live: null,
259
+ liveGap: "A live image result requires a paid generation. Covered by fixtures " +
260
+ "until the manifest's per-provider request budget is raised."
261
+ },
262
+ {
263
+ id: "fal_ai.video-result",
264
+ provider: "fal_ai",
265
+ target: "fal queue result (video endpoints)",
266
+ decoder: "extractVideoUrl",
267
+ fixture: "fal_ai/video-result.json",
268
+ check: (raw) => {
269
+ const url = extractVideoUrl(raw);
270
+ expect(url.startsWith("https://"), "fal video url is not https");
271
+ },
272
+ requiredFields: ["video.url"],
273
+ live: null,
274
+ liveGap: "A live video result requires a paid generation."
275
+ },
276
+ {
277
+ id: "fal_ai.audio-result",
278
+ provider: "fal_ai",
279
+ target: "fal queue result (TTS and music endpoints)",
280
+ decoder: "extractAudioUrl",
281
+ fixture: "fal_ai/audio-result.json",
282
+ check: (raw) => {
283
+ const url = extractAudioUrl(raw);
284
+ expect(url.startsWith("https://"), "fal audio url is not https");
285
+ },
286
+ requiredFields: ["audio.url"],
287
+ live: null,
288
+ liveGap: "A live audio result requires a paid generation."
289
+ },
290
+ {
291
+ id: "kie.error-envelope",
292
+ provider: "kie",
293
+ target: "POST https://api.kie.ai/api/v1/jobs/createTask (unknown model)",
294
+ decoder: "kieEnvelopeError",
295
+ fixture: "kie/error-envelope.json",
296
+ check: (raw) => {
297
+ const error = kieEnvelopeError(raw);
298
+ expect(error !== null, "KIE error envelope no longer decodes to a known code");
299
+ },
300
+ requiredFields: ["code"],
301
+ live: {
302
+ credential: "KIE_API_KEY",
303
+ maxRequests: 1,
304
+ maxCostUsd: 0,
305
+ estimatedCostUsd: 0,
306
+ // KIE reports a rejected submission inside the body, so this creates no
307
+ // job and costs nothing. It is the only KIE response a probe can obtain
308
+ // without paying for a generation.
309
+ acceptsHttpError: true,
310
+ request: (_env, credential) => ({
311
+ url: "https://api.kie.ai/api/v1/jobs/createTask",
312
+ init: {
313
+ method: "POST",
314
+ headers: {
315
+ Authorization: `Bearer ${credential}`,
316
+ "Content-Type": "application/json"
317
+ },
318
+ body: JSON.stringify({
319
+ model: "nodetool/contract-probe-no-such-model",
320
+ input: {}
321
+ })
322
+ }
323
+ })
324
+ }
325
+ },
326
+ {
327
+ id: "kie.create-task",
328
+ provider: "kie",
329
+ target: "POST https://api.kie.ai/api/v1/jobs/createTask (accepted)",
330
+ decoder: "decodeKieTaskSubmission",
331
+ fixture: "kie/create-task.json",
332
+ check: (raw) => {
333
+ const taskId = decodeKieTaskSubmission(raw);
334
+ expect(isNonEmptyString(taskId), "createTask decoded to an empty taskId");
335
+ },
336
+ requiredFields: ["data.taskId"],
337
+ live: null,
338
+ liveGap: "Accepting a task starts a paid job."
339
+ },
340
+ {
341
+ id: "kie.record-info",
342
+ provider: "kie",
343
+ target: "GET https://api.kie.ai/api/v1/jobs/recordInfo",
344
+ decoder: "decodeKieRecordInfo",
345
+ fixture: "kie/record-info.json",
346
+ check: (raw) => {
347
+ const info = decodeKieRecordInfo(raw);
348
+ expect(info.state === "success", `recordInfo decoded to state "${info.state}", expected "success"`);
349
+ const urls = decodeKieResultUrls(raw);
350
+ expect(urls.length > 0, "recordInfo carried no result urls");
351
+ },
352
+ requiredFields: ["data.state", "data.resultJson"],
353
+ live: null,
354
+ liveGap: "A finished record requires a paid job."
355
+ },
356
+ {
357
+ id: "replicate.prediction-output",
358
+ provider: "replicate",
359
+ target: "GET https://api.replicate.com/v1/predictions/:id (flux-schnell)",
360
+ decoder: "decodeReplicateOutput",
361
+ fixture: "replicate/prediction-flux-schnell.json",
362
+ check: (raw) => {
363
+ const prediction = raw;
364
+ expect(prediction.status === "succeeded", `prediction fixture has status "${String(prediction.status)}"`);
365
+ const target = decodeReplicateOutput(prediction.output);
366
+ expect(target !== null, "prediction output decoded to no file");
367
+ expect(target?.kind === "url" && target.url.startsWith("https://"), "prediction output did not decode to an https locator");
368
+ },
369
+ requiredFields: ["status", "output", "output.0"],
370
+ live: null,
371
+ liveGap: "Replicate has no free endpoint that answers a finished prediction — " +
372
+ "obtaining one means paying for a generation."
373
+ }
374
+ ];
375
+ /** Every provider the manifest covers, in manifest order. */
376
+ export function probeProviders() {
377
+ return [...new Set(PROBE_MANIFEST.map((entry) => entry.provider))];
378
+ }
379
+ //# sourceMappingURL=probe-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probe-manifest.js","sourceRoot":"","sources":["../../../src/providers/contract/probe-manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Runs the live half of the provider contract probes.
3
+ *
4
+ * One request per manifest entry, decoded by the production decoder the entry
5
+ * names. The two ways a probe fails are reported apart: a **network failure**
6
+ * means we never got a body to judge (DNS, timeout, 5xx, a non-JSON gateway
7
+ * page), and a **schema failure** means the provider answered and the response
8
+ * no longer decodes into what NodeTool needs. Only the second is a contract
9
+ * break; treating them alike would turn every flaky night into a false alarm.
10
+ *
11
+ * Nothing here writes a cassette, and nothing retains a response body: what a
12
+ * run keeps is the shape (see `summarizeShape`).
13
+ */
14
+ import { type ProbeManifestEntry, type ProbeProvider } from "./probe-manifest.js";
15
+ export type ProbeStatus = "passed" | "schema-failure" | "network-failure" | "skipped";
16
+ export interface ProbeResult {
17
+ id: string;
18
+ provider: ProbeProvider;
19
+ target: string;
20
+ decoder: string;
21
+ status: ProbeStatus;
22
+ /** Redacted explanation for every non-passing status. */
23
+ reason?: string;
24
+ durationMs: number;
25
+ requests: number;
26
+ costUsd: number;
27
+ /** Redacted shape of the decoded response, kept for passing probes too. */
28
+ shape?: unknown;
29
+ }
30
+ export interface ProbeReport {
31
+ startedAt: string;
32
+ results: ProbeResult[];
33
+ totals: {
34
+ passed: number;
35
+ schemaFailures: number;
36
+ networkFailures: number;
37
+ skipped: number;
38
+ requests: number;
39
+ costUsd: number;
40
+ };
41
+ perProvider: Record<string, {
42
+ requests: number;
43
+ costUsd: number;
44
+ }>;
45
+ }
46
+ export interface RunProbesOptions {
47
+ env?: Record<string, string | undefined>;
48
+ fetchImpl?: typeof fetch;
49
+ entries?: ProbeManifestEntry[];
50
+ /** Wall-clock cap per request. */
51
+ timeoutMs?: number;
52
+ now?: () => number;
53
+ }
54
+ export declare function runProbes(options?: RunProbesOptions): Promise<ProbeReport>;
55
+ /** One line per probe, for a CI log. */
56
+ export declare function formatProbeReport(report: ProbeReport): string;
57
+ //# sourceMappingURL=probe-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probe-runner.d.ts","sourceRoot":"","sources":["../../../src/providers/contract/probe-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,gBAAgB,GAChB,iBAAiB,GACjB,SAAS,CAAC;AAEd,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC/B,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AA0BD,wBAAsB,SAAS,CAC7B,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,WAAW,CAAC,CAmItB;AAED,wCAAwC;AACxC,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAkB7D"}