@nodetool-ai/runtime 0.7.0-rc.22 → 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,224 @@
1
+ /**
2
+ * NodeTool's own managed models — the provider behind the credits product.
3
+ *
4
+ * Every model in the curated catalog (`NODETOOL_MODELS` in
5
+ * `@nodetool-ai/protocol`) names a delegate provider + model; this provider
6
+ * runs the delegate on *platform-owned* keys (`NODETOOL_PLATFORM_FAL_KEY`,
7
+ * `NODETOOL_PLATFORM_ANTHROPIC_KEY`) rather than the user's. That split is
8
+ * the whole billing model: calls through `nodetool` are metered against the
9
+ * user's credit balance server-side, while BYOK providers keep running on the
10
+ * user's own keys, unmetered.
11
+ *
12
+ * Cost is accounted at the delegate's price: each call absorbs the inner
13
+ * provider's cost delta into this instance, so the host's prediction logging
14
+ * records real USD under provider "nodetool".
15
+ *
16
+ * The provider itself is cloud-only (`CLOUD_ONLY_PROVIDER_IDS`): off the cloud
17
+ * profile it is never registered, because a desktop or self-hosted server has
18
+ * no platform keys and no account to bill. Where it does run, a model is
19
+ * served only when it is both **funded** (the delegate's platform key is set)
20
+ * and **allowed** (`NODETOOL_CREDIT_MODELS` names it, or names nothing at
21
+ * all). The listers hide what fails either test and `delegateFor` refuses it,
22
+ * so a whitelist an operator narrows can never be spent past by a client
23
+ * holding a stale menu.
24
+ */
25
+ import { NODETOOL_MODELS, isNonEmptyString, nodetoolModelById } from "@nodetool-ai/protocol";
26
+ import { isCreditModelAllowed } from "@nodetool-ai/config";
27
+ import { BaseProvider } from "./base-provider.js";
28
+ import { FalProvider } from "./fal-provider.js";
29
+ import { AnthropicProvider } from "./anthropic-provider.js";
30
+ const PLATFORM_KEYS = {
31
+ fal_ai: "NODETOOL_PLATFORM_FAL_KEY",
32
+ anthropic: "NODETOOL_PLATFORM_ANTHROPIC_KEY"
33
+ };
34
+ export class NodetoolProvider extends BaseProvider {
35
+ secrets;
36
+ _absorbedCost = 0;
37
+ static requiredSecrets() {
38
+ return [];
39
+ }
40
+ constructor(secrets = {}) {
41
+ super("nodetool");
42
+ this.secrets = secrets;
43
+ }
44
+ platformKey(delegateProvider) {
45
+ const keyName = PLATFORM_KEYS[delegateProvider];
46
+ const value = keyName ? this.secrets[keyName] : null;
47
+ return isNonEmptyString(value) ? value : null;
48
+ }
49
+ isFunded(delegateProvider) {
50
+ return this.platformKey(delegateProvider) != null;
51
+ }
52
+ /** Funded by a platform key and whitelisted for spend on this server. */
53
+ isServable(def) {
54
+ return this.isFunded(def.delegate.provider) && isCreditModelAllowed(def.id);
55
+ }
56
+ /**
57
+ * The delegate serving a nodetool model id, constructed on platform keys.
58
+ * A fresh instance per call on purpose: cost is read off the delegate's
59
+ * cumulative counter after the call, and a shared delegate serving
60
+ * overlapping calls would double-count one call's cost into another's
61
+ * absorption window. Construction is cheap — both delegates build their
62
+ * network clients lazily.
63
+ */
64
+ delegateFor(modelId, task) {
65
+ const def = nodetoolModelById(modelId);
66
+ if (!def) {
67
+ throw new Error(`Unknown NodeTool model "${modelId}".`);
68
+ }
69
+ if (!isCreditModelAllowed(def.id)) {
70
+ throw new Error(`NodeTool model "${modelId}" is not available on this server.`);
71
+ }
72
+ if (task && Array.isArray(def.tasks) && !def.tasks.includes(task)) {
73
+ throw new Error(`NodeTool model "${modelId}" does not support ${task}.`);
74
+ }
75
+ const delegate = (task === "image_to_image" ? def.editDelegate : undefined) ??
76
+ (task === "text_to_video" ? def.textDelegate : undefined) ??
77
+ def.delegate;
78
+ const key = this.platformKey(delegate.provider);
79
+ if (!key) {
80
+ throw new Error(`NodeTool model "${modelId}" is not available on this server ` +
81
+ `(missing ${PLATFORM_KEYS[delegate.provider]}).`);
82
+ }
83
+ const provider = delegate.provider === "fal_ai"
84
+ ? new FalProvider({ FAL_API_KEY: key })
85
+ : new AnthropicProvider({ ANTHROPIC_API_KEY: key });
86
+ return { provider, model: delegate.model };
87
+ }
88
+ /** Run a delegated call and absorb the delegate's cost delta as our own. */
89
+ async absorbing(inner, call) {
90
+ const before = inner.getTotalCost();
91
+ try {
92
+ return await call();
93
+ }
94
+ finally {
95
+ this._absorbedCost += inner.getTotalCost() - before;
96
+ }
97
+ }
98
+ get cost() {
99
+ return this._absorbedCost;
100
+ }
101
+ getTotalCost() {
102
+ return this._absorbedCost;
103
+ }
104
+ resetCost() {
105
+ this._absorbedCost = 0;
106
+ }
107
+ declaredCapabilities() {
108
+ const capabilities = [];
109
+ for (const def of NODETOOL_MODELS) {
110
+ if (!this.isServable(def))
111
+ continue;
112
+ if (def.kind === "language")
113
+ capabilities.push("generate_message");
114
+ if (def.kind === "image") {
115
+ capabilities.push("text_to_image");
116
+ if (def.editDelegate)
117
+ capabilities.push("image_to_image");
118
+ }
119
+ if (def.kind === "video") {
120
+ if (def.tasks?.includes("image_to_video"))
121
+ capabilities.push("image_to_video");
122
+ if (def.tasks?.includes("reference_to_video"))
123
+ capabilities.push("reference_to_video");
124
+ if (def.textDelegate)
125
+ capabilities.push("text_to_video");
126
+ }
127
+ if (def.kind === "tts")
128
+ capabilities.push("text_to_speech");
129
+ }
130
+ return [...new Set(capabilities)];
131
+ }
132
+ servableModels(kind) {
133
+ return NODETOOL_MODELS.filter((def) => def.kind === kind && this.isServable(def));
134
+ }
135
+ async getAvailableLanguageModels() {
136
+ return this.servableModels("language").map((def) => ({
137
+ type: "language_model",
138
+ id: def.id,
139
+ name: def.name,
140
+ provider: "nodetool"
141
+ }));
142
+ }
143
+ async getAvailableImageModels() {
144
+ return this.servableModels("image").map((def) => ({
145
+ type: "image_model",
146
+ id: def.id,
147
+ name: def.name,
148
+ provider: "nodetool",
149
+ supported_tasks: def.tasks ?? []
150
+ }));
151
+ }
152
+ async getAvailableVideoModels() {
153
+ return this.servableModels("video").map((def) => ({
154
+ type: "video_model",
155
+ id: def.id,
156
+ name: def.name,
157
+ provider: "nodetool",
158
+ supportedTasks: def.tasks ?? []
159
+ }));
160
+ }
161
+ async getAvailableTTSModels() {
162
+ return this.servableModels("tts").map((def) => ({
163
+ id: def.id,
164
+ name: def.name,
165
+ provider: "nodetool",
166
+ voices: (def.voices ?? []).map((voice) => voice.id)
167
+ }));
168
+ }
169
+ async textToImage(params) {
170
+ const { provider, model } = this.delegateFor(params.model.id);
171
+ return this.absorbing(provider, () => provider.textToImage({
172
+ ...params,
173
+ model: { ...params.model, id: model, provider: provider.provider }
174
+ }));
175
+ }
176
+ async imageToImage(images, params) {
177
+ const { provider, model } = this.delegateFor(params.model.id, "image_to_image");
178
+ return this.absorbing(provider, () => provider.imageToImage(images, {
179
+ ...params,
180
+ model: { ...params.model, id: model, provider: provider.provider }
181
+ }));
182
+ }
183
+ async textToVideo(params) {
184
+ const { provider, model } = this.delegateFor(params.model.id, "text_to_video");
185
+ return this.absorbing(provider, () => provider.textToVideo({
186
+ ...params,
187
+ model: { ...params.model, id: model, provider: provider.provider }
188
+ }));
189
+ }
190
+ async imageToVideo(image, params) {
191
+ const { provider, model } = this.delegateFor(params.model.id, "image_to_video");
192
+ return this.absorbing(provider, () => provider.imageToVideo(image, {
193
+ ...params,
194
+ model: { ...params.model, id: model, provider: provider.provider }
195
+ }));
196
+ }
197
+ async referenceToVideo(inputs, params) {
198
+ const { provider, model } = this.delegateFor(params.model.id, "reference_to_video");
199
+ return this.absorbing(provider, () => provider.referenceToVideo(inputs, {
200
+ ...params,
201
+ model: { ...params.model, id: model, provider: provider.provider }
202
+ }));
203
+ }
204
+ async textToSpeechEncoded(args) {
205
+ const { provider, model } = this.delegateFor(args.model);
206
+ return this.absorbing(provider, () => provider.textToSpeechEncoded({ ...args, model }));
207
+ }
208
+ async generateMessage(args) {
209
+ const { provider, model } = this.delegateFor(args.model);
210
+ return this.absorbing(provider, () => provider.generateMessage({ ...args, model }));
211
+ }
212
+ async *generateMessages(args) {
213
+ const { provider, model } = this.delegateFor(args.model);
214
+ const before = provider.getTotalCost();
215
+ try {
216
+ yield* provider.generateMessages({ ...args, model });
217
+ }
218
+ finally {
219
+ this._absorbedCost += provider.getTotalCost() - before;
220
+ }
221
+ }
222
+ }
223
+ export default NodetoolProvider;
224
+ //# sourceMappingURL=nodetool-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodetool-provider.js","sourceRoot":"","sources":["../../src/providers/nodetool-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * BrowserLauncher — opens a URL in the user's default browser.
3
+ *
4
+ * Abstracted behind an interface so the provider can be tested without
5
+ * spawning a real browser, and so non-desktop hosts can supply their own
6
+ * strategy (e.g. printing the URL for the user to paste).
7
+ */
8
+ import type { Logger } from "@nodetool-ai/config";
9
+ export interface BrowserLauncher {
10
+ /** Open `url`. Reject with `BrowserLaunchError` if the browser won't start. */
11
+ open(url: string): Promise<void>;
12
+ }
13
+ /** Opens URLs via the platform's native "open" command. */
14
+ export declare class DefaultBrowserLauncher implements BrowserLauncher {
15
+ private readonly platform;
16
+ private readonly logger?;
17
+ constructor(options?: {
18
+ platform?: NodeJS.Platform;
19
+ logger?: Logger;
20
+ });
21
+ open(url: string): Promise<void>;
22
+ }
23
+ //# sourceMappingURL=browser-launcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-launcher.d.ts","sourceRoot":"","sources":["../../../src/providers/oauth/browser-launcher.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,MAAM,WAAW,eAAe;IAC9B,+EAA+E;IAC/E,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC;AAeD,2DAA2D;AAC3D,qBAAa,sBAAuB,YAAW,eAAe;IAC5D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IAEjC,YAAY,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,EAGxE;IAEK,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAerC;CACF"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * BrowserLauncher — opens a URL in the user's default browser.
3
+ *
4
+ * Abstracted behind an interface so the provider can be tested without
5
+ * spawning a real browser, and so non-desktop hosts can supply their own
6
+ * strategy (e.g. printing the URL for the user to paste).
7
+ */
8
+ import { spawn } from "node:child_process";
9
+ import { BrowserLaunchError } from "./errors.js";
10
+ /** Per-platform command that opens a URL in the default browser. */
11
+ function openCommand(platform) {
12
+ switch (platform) {
13
+ case "darwin":
14
+ return { cmd: "open", args: [] };
15
+ case "win32":
16
+ // `start` is a cmd builtin; the empty "" is the (ignored) window title.
17
+ return { cmd: "cmd", args: ["/c", "start", ""] };
18
+ default:
19
+ return { cmd: "xdg-open", args: [] };
20
+ }
21
+ }
22
+ /** Opens URLs via the platform's native "open" command. */
23
+ export class DefaultBrowserLauncher {
24
+ platform;
25
+ logger;
26
+ constructor(options = {}) {
27
+ this.platform = options.platform ?? process.platform;
28
+ this.logger = options.logger;
29
+ }
30
+ async open(url) {
31
+ const { cmd, args } = openCommand(this.platform);
32
+ await new Promise((resolve, reject) => {
33
+ const child = spawn(cmd, [...args, url], { stdio: "ignore", detached: true });
34
+ child.once("error", (err) => reject(new BrowserLaunchError("Could not launch the default browser", { cause: err })));
35
+ // The launcher process exits quickly; the browser keeps running. Treat a
36
+ // clean spawn as success and unref so it never blocks process exit.
37
+ child.once("spawn", () => {
38
+ child.unref();
39
+ this.logger?.debug("Opened authorization URL in default browser");
40
+ resolve();
41
+ });
42
+ });
43
+ }
44
+ }
45
+ //# sourceMappingURL=browser-launcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-launcher.js","sourceRoot":"","sources":["../../../src/providers/oauth/browser-launcher.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAOjD,oEAAoE;AACpE,SAAS,WAAW,CAAC,QAAyB;IAC5C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACnC,KAAK,OAAO;YACV,wEAAwE;YACxE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QACnD;YACE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACzC,CAAC;AACH,CAAC;AAED,2DAA2D;AAC3D,MAAM,OAAO,sBAAsB;IAChB,QAAQ,CAAkB;IAC1B,MAAM,CAAU;IAEjC,YAAY,OAAO,GAAoD,EAAE;QACvE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;QACrD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9E,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAC1B,MAAM,CAAC,IAAI,kBAAkB,CAAC,sCAAsC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CACvF,CAAC;YACF,yEAAyE;YACzE,oEAAoE;YACpE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;gBACvB,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,6CAA6C,CAAC,CAAC;gBAClE,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * ClaudeCodeCredentialsStore — reads and writes the credential file the Claude
3
+ * Agent SDK authenticates from.
4
+ *
5
+ * The SDK spawns the bundled `claude` binary, which loads its subscription
6
+ * credentials from `$CLAUDE_CONFIG_DIR/.credentials.json` (defaulting to
7
+ * `~/.claude/.credentials.json`) under a `claudeAiOauth` key. Writing that exact
8
+ * shape is the whole point of this module: a NodeTool login and a `claude login`
9
+ * produce interchangeable credentials, and {@link ClaudeAgentProvider} needs no
10
+ * token plumbing of its own.
11
+ *
12
+ * The file is not NodeTool's — other keys are preserved on write, and the mode
13
+ * is forced to 0600 to match what the CLI does.
14
+ */
15
+ import { type Logger } from "@nodetool-ai/config";
16
+ import type { ClaudeCodeTokens } from "./claude-code-oauth-client.js";
17
+ /** The `claudeAiOauth` entry, field-for-field as the CLI writes it. */
18
+ export interface ClaudeAiOAuthCredentials {
19
+ accessToken: string;
20
+ refreshToken: string | null;
21
+ /** Absolute expiry, epoch ms. */
22
+ expiresAt: number | null;
23
+ scopes: string[];
24
+ subscriptionType: string | null;
25
+ rateLimitTier: string | null;
26
+ /** Only set when a non-default OAuth client minted the token. */
27
+ clientId?: string;
28
+ }
29
+ interface ClaudeCodeCredentialsStoreOptions {
30
+ /** Override the config directory. Defaults to `$CLAUDE_CONFIG_DIR` or `~/.claude`. */
31
+ readonly configDir?: string;
32
+ readonly logger?: Logger;
33
+ }
34
+ /**
35
+ * The directory the `claude` CLI keeps its state in. `CLAUDE_CONFIG_DIR` is the
36
+ * CLI's own override — honouring it keeps NodeTool pointed at the same profile
37
+ * the user's terminal sessions use.
38
+ */
39
+ export declare function claudeConfigDir(): string;
40
+ export declare class ClaudeCodeCredentialsStore {
41
+ private readonly configDir;
42
+ private readonly logger;
43
+ constructor(options?: ClaudeCodeCredentialsStoreOptions);
44
+ /** Absolute path of the credential file. */
45
+ get path(): string;
46
+ /** The stored OAuth credentials, or null when there is no usable login. */
47
+ read(): Promise<ClaudeAiOAuthCredentials | null>;
48
+ /**
49
+ * Merge a fresh token set into the file, preserving any keys the CLI owns
50
+ * (and any profile metadata a previous login recorded).
51
+ */
52
+ save(params: {
53
+ tokens: ClaudeCodeTokens;
54
+ subscriptionType?: string | null;
55
+ rateLimitTier?: string | null;
56
+ /** Set only for a non-default OAuth client. */
57
+ clientId?: string;
58
+ }): Promise<ClaudeAiOAuthCredentials>;
59
+ /**
60
+ * Drop the OAuth entry. Other keys survive; the file itself is removed once
61
+ * nothing is left in it.
62
+ */
63
+ clear(): Promise<boolean>;
64
+ private readFile;
65
+ /**
66
+ * Write via a temp file in the same directory, so a concurrent `claude`
67
+ * process never observes a half-written credential file.
68
+ */
69
+ private writeFile;
70
+ }
71
+ /** True when `expiresAt` has passed (or comes within `skewMs`). */
72
+ export declare function isExpired(credentials: Pick<ClaudeAiOAuthCredentials, "expiresAt">, now: number, skewMs?: number): boolean;
73
+ export {};
74
+ //# sourceMappingURL=claude-code-credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code-credentials.d.ts","sourceRoot":"","sources":["../../../src/providers/oauth/claude-code-credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAYH,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGtE,uEAAuE;AACvE,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iCAAiC;IACjC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAWD,UAAU,iCAAiC;IACzC,sFAAsF;IACtF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAKxC;AAED,qBAAa,0BAA0B;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,YAAY,OAAO,GAAE,iCAAsC,EAK1D;IAED,4CAA4C;IAC5C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,2EAA2E;IACrE,IAAI,IAAI,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAIrD;IAED;;;OAGG;IACG,IAAI,CAAC,MAAM,EAAE;QACjB,MAAM,EAAE,gBAAgB,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,+CAA+C;QAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAiBpC;IAED;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAU9B;YAEa,QAAQ;IAkBtB;;;OAGG;YACW,SAAS;CAexB;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CACvB,WAAW,EAAE,IAAI,CAAC,wBAAwB,EAAE,WAAW,CAAC,EACxD,GAAG,EAAE,MAAM,EACX,MAAM,SAAS,GACd,OAAO,CAET"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * ClaudeCodeCredentialsStore — reads and writes the credential file the Claude
3
+ * Agent SDK authenticates from.
4
+ *
5
+ * The SDK spawns the bundled `claude` binary, which loads its subscription
6
+ * credentials from `$CLAUDE_CONFIG_DIR/.credentials.json` (defaulting to
7
+ * `~/.claude/.credentials.json`) under a `claudeAiOauth` key. Writing that exact
8
+ * shape is the whole point of this module: a NodeTool login and a `claude login`
9
+ * produce interchangeable credentials, and {@link ClaudeAgentProvider} needs no
10
+ * token plumbing of its own.
11
+ *
12
+ * The file is not NodeTool's — other keys are preserved on write, and the mode
13
+ * is forced to 0600 to match what the CLI does.
14
+ */
15
+ import { chmod, mkdir, readFile, rename, unlink, writeFile } from "node:fs/promises";
16
+ import { homedir } from "node:os";
17
+ import { join } from "node:path";
18
+ import { createLogger } from "@nodetool-ai/config";
19
+ import { isObjectLike, isString } from "@nodetool-ai/protocol";
20
+ /** Owner-only file mode, matching the CLI. */
21
+ const FILE_MODE = 0o600;
22
+ /**
23
+ * The directory the `claude` CLI keeps its state in. `CLAUDE_CONFIG_DIR` is the
24
+ * CLI's own override — honouring it keeps NodeTool pointed at the same profile
25
+ * the user's terminal sessions use.
26
+ */
27
+ export function claudeConfigDir() {
28
+ const override = process.env.CLAUDE_CONFIG_DIR;
29
+ return override && override.length > 0
30
+ ? override
31
+ : join(homedir(), ".claude");
32
+ }
33
+ export class ClaudeCodeCredentialsStore {
34
+ configDir;
35
+ logger;
36
+ constructor(options = {}) {
37
+ this.configDir = options.configDir ?? claudeConfigDir();
38
+ this.logger =
39
+ options.logger ??
40
+ createLogger("nodetool.runtime.oauth.claude-credentials");
41
+ }
42
+ /** Absolute path of the credential file. */
43
+ get path() {
44
+ return join(this.configDir, ".credentials.json");
45
+ }
46
+ /** The stored OAuth credentials, or null when there is no usable login. */
47
+ async read() {
48
+ const file = await this.readFile();
49
+ const oauth = file?.claudeAiOauth;
50
+ return oauth && isString(oauth.accessToken) ? oauth : null;
51
+ }
52
+ /**
53
+ * Merge a fresh token set into the file, preserving any keys the CLI owns
54
+ * (and any profile metadata a previous login recorded).
55
+ */
56
+ async save(params) {
57
+ const file = (await this.readFile()) ?? {};
58
+ const previous = file.claudeAiOauth;
59
+ const credentials = {
60
+ accessToken: params.tokens.accessToken,
61
+ refreshToken: params.tokens.refreshToken ?? previous?.refreshToken ?? null,
62
+ expiresAt: params.tokens.expiresAt,
63
+ scopes: [...params.tokens.scopes],
64
+ subscriptionType: params.subscriptionType ?? previous?.subscriptionType ?? null,
65
+ rateLimitTier: params.rateLimitTier ?? previous?.rateLimitTier ?? null
66
+ };
67
+ if (params.clientId)
68
+ credentials.clientId = params.clientId;
69
+ await this.writeFile({ ...file, claudeAiOauth: credentials });
70
+ return credentials;
71
+ }
72
+ /**
73
+ * Drop the OAuth entry. Other keys survive; the file itself is removed once
74
+ * nothing is left in it.
75
+ */
76
+ async clear() {
77
+ const file = await this.readFile();
78
+ if (!file?.claudeAiOauth)
79
+ return false;
80
+ const { claudeAiOauth: _removed, ...rest } = file;
81
+ if (Object.keys(rest).length === 0) {
82
+ await unlink(this.path).catch(() => { });
83
+ }
84
+ else {
85
+ await this.writeFile(rest);
86
+ }
87
+ return true;
88
+ }
89
+ async readFile() {
90
+ let raw;
91
+ try {
92
+ raw = await readFile(this.path, "utf8");
93
+ }
94
+ catch {
95
+ return null;
96
+ }
97
+ try {
98
+ const parsed = JSON.parse(raw);
99
+ return isObjectLike(parsed) ? parsed : null;
100
+ }
101
+ catch {
102
+ this.logger.warn("Claude credential file is not valid JSON", {
103
+ path: this.path
104
+ });
105
+ return null;
106
+ }
107
+ }
108
+ /**
109
+ * Write via a temp file in the same directory, so a concurrent `claude`
110
+ * process never observes a half-written credential file.
111
+ */
112
+ async writeFile(contents) {
113
+ await mkdir(this.configDir, { recursive: true });
114
+ const tmp = `${this.path}.${process.pid}.tmp`;
115
+ await writeFile(tmp, `${JSON.stringify(contents, null, 2)}\n`, {
116
+ encoding: "utf8",
117
+ mode: FILE_MODE
118
+ });
119
+ try {
120
+ await rename(tmp, this.path);
121
+ }
122
+ catch (err) {
123
+ await unlink(tmp).catch(() => { });
124
+ throw err;
125
+ }
126
+ await chmod(this.path, FILE_MODE);
127
+ }
128
+ }
129
+ /** True when `expiresAt` has passed (or comes within `skewMs`). */
130
+ export function isExpired(credentials, now, skewMs = 60_000) {
131
+ return credentials.expiresAt != null && credentials.expiresAt - skewMs <= now;
132
+ }
133
+ //# sourceMappingURL=claude-code-credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code-credentials.js","sourceRoot":"","sources":["../../../src/providers/oauth/claude-code-credentials.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * ClaudeCodeLogin — orchestration for signing in with a Claude subscription,
3
+ * exactly as the `claude` CLI does it, and persisting the result where the
4
+ * Claude Agent SDK will find it.
5
+ *
6
+ * Two completion paths share one authorization request:
7
+ *
8
+ * - **Loopback** — the browser is redirected to an ephemeral `127.0.0.1`
9
+ * listener this process binds. Works when the browser runs on the same
10
+ * machine as the server (desktop, local dev).
11
+ * - **Manual** — the console shows a `<code>#<state>` string the user pastes
12
+ * back. The only option on a headless or remote host.
13
+ *
14
+ * The two differ only in `redirect_uri`, which must match between the
15
+ * authorization request and the token exchange — hence the two URLs handed back
16
+ * from {@link ClaudeCodeLogin.begin} and the `manual` flag carried through to
17
+ * completion.
18
+ */
19
+ import { type Logger } from "@nodetool-ai/config";
20
+ import { ClaudeCodeCredentialsStore, type ClaudeAiOAuthCredentials } from "./claude-code-credentials.js";
21
+ import { ClaudeCodeOAuthClient, type ClaudeCodeLoginMethod } from "./claude-code-oauth-client.js";
22
+ import { LocalCallbackServer } from "./local-callback-server.js";
23
+ import { PKCEHelper } from "./pkce-helper.js";
24
+ import { type Clock } from "./types.js";
25
+ /** How long a started login stays completable before the listener is torn down. */
26
+ export declare const CLAUDE_LOGIN_TIMEOUT_MS: number;
27
+ export interface ClaudeCodeLoginOptions {
28
+ /** Sign in with a claude.ai subscription (default) or a console account. */
29
+ readonly loginMethod?: ClaudeCodeLoginMethod;
30
+ /**
31
+ * Skip the loopback listener entirely. Set on hosts where the browser can't
32
+ * reach this process — only the manual paste path will be offered.
33
+ */
34
+ readonly manualOnly?: boolean;
35
+ /** Abort waiting for the redirect. */
36
+ readonly timeoutMs?: number;
37
+ }
38
+ /** Non-secret summary of a stored login. */
39
+ export interface ClaudeCodeAuthStatus {
40
+ readonly connected: boolean;
41
+ readonly expiresAt: number | null;
42
+ readonly expired: boolean;
43
+ readonly scopes: readonly string[];
44
+ readonly subscriptionType: string | null;
45
+ readonly rateLimitTier: string | null;
46
+ /** Where the credentials live, so the UI can point at the right file. */
47
+ readonly credentialsPath: string;
48
+ }
49
+ /** A login in progress: the URLs to open, and the two ways to finish it. */
50
+ export interface PendingClaudeCodeLogin {
51
+ /** Authorization URL for the loopback flow. Null when `manualOnly`. */
52
+ readonly authUrl: string | null;
53
+ /** Where the loopback flow sends the browser. Null when `manualOnly`. */
54
+ readonly redirectUri: string | null;
55
+ /** Authorization URL whose redirect shows a paste-able `code#state`. */
56
+ readonly manualAuthUrl: string;
57
+ /** CSRF state; the caller may key the pending login on it. */
58
+ readonly state: string;
59
+ /**
60
+ * Wait for the browser to hit the loopback listener, then exchange and
61
+ * persist. Rejects if the login was started with `manualOnly`.
62
+ */
63
+ waitForRedirect(signal?: AbortSignal): Promise<ClaudeAiOAuthCredentials>;
64
+ /**
65
+ * Finish from a pasted `code#state` (or a bare code plus the state this
66
+ * object carries). Exchanges against the manual redirect URI and persists.
67
+ */
68
+ completeWithPastedCode(input: string): Promise<ClaudeAiOAuthCredentials>;
69
+ /** Tear down the listener. Idempotent; safe to call after completion. */
70
+ cancel(): Promise<void>;
71
+ }
72
+ export interface ClaudeCodeLoginDeps {
73
+ readonly client?: ClaudeCodeOAuthClient;
74
+ readonly credentials?: ClaudeCodeCredentialsStore;
75
+ readonly pkce?: PKCEHelper;
76
+ /** Factory so tests can supply a fake listener. */
77
+ readonly callbackServerFactory?: () => LocalCallbackServer;
78
+ readonly clock?: Clock;
79
+ readonly logger?: Logger;
80
+ }
81
+ export declare class ClaudeCodeLogin {
82
+ private readonly client;
83
+ private readonly credentials;
84
+ private readonly pkce;
85
+ private readonly callbackServerFactory;
86
+ private readonly clock;
87
+ private readonly logger;
88
+ constructor(deps?: ClaudeCodeLoginDeps);
89
+ /** Where the credentials the SDK reads are stored. */
90
+ get credentialsPath(): string;
91
+ /**
92
+ * Start an authorization request. Binds the loopback listener (unless
93
+ * `manualOnly`) and returns both authorization URLs plus the handles to
94
+ * finish the flow. The caller owns teardown via `cancel()`.
95
+ */
96
+ begin(options?: ClaudeCodeLoginOptions): Promise<PendingClaudeCodeLogin>;
97
+ /** Non-secret summary of the stored login. */
98
+ status(): Promise<ClaudeCodeAuthStatus>;
99
+ /**
100
+ * Refresh the stored access token. Returns the credentials unchanged when
101
+ * they are still valid, unless `force` is set.
102
+ *
103
+ * The `claude` CLI refreshes on its own, so this is for callers that need a
104
+ * usable token *outside* the SDK (status display, `CLAUDE_CODE_OAUTH_TOKEN`)
105
+ * rather than a prerequisite for running the provider.
106
+ */
107
+ refresh(options?: {
108
+ force?: boolean;
109
+ signal?: AbortSignal;
110
+ }): Promise<ClaudeAiOAuthCredentials>;
111
+ /** Remove the stored login. Returns false when there was nothing to remove. */
112
+ logout(): Promise<boolean>;
113
+ private exchangeAndStore;
114
+ }
115
+ /**
116
+ * Parse what the console shows after a manual authorization: `<code>#<state>`.
117
+ * A bare code is accepted too, falling back to the state of the login it is
118
+ * completing — but a mismatched state is a CSRF signal and always rejected.
119
+ */
120
+ export declare function parsePastedCode(input: string, expectedState: string): {
121
+ code: string;
122
+ state: string;
123
+ };
124
+ //# sourceMappingURL=claude-code-login.d.ts.map