@jini-ai/agent-runtime 0.1.0

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 (399) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +43 -0
  3. package/dist/acp-model-probe.d.ts +48 -0
  4. package/dist/acp-model-probe.d.ts.map +1 -0
  5. package/dist/acp-model-probe.js +15 -0
  6. package/dist/acp-model-probe.js.map +1 -0
  7. package/dist/agent-protocol/acp/account-failure.d.ts +54 -0
  8. package/dist/agent-protocol/acp/account-failure.d.ts.map +1 -0
  9. package/dist/agent-protocol/acp/account-failure.js +37 -0
  10. package/dist/agent-protocol/acp/account-failure.js.map +1 -0
  11. package/dist/agent-protocol/acp/constants.d.ts +26 -0
  12. package/dist/agent-protocol/acp/constants.d.ts.map +1 -0
  13. package/dist/agent-protocol/acp/constants.js +39 -0
  14. package/dist/agent-protocol/acp/constants.js.map +1 -0
  15. package/dist/agent-protocol/acp/index.d.ts +14 -0
  16. package/dist/agent-protocol/acp/index.d.ts.map +1 -0
  17. package/dist/agent-protocol/acp/index.js +14 -0
  18. package/dist/agent-protocol/acp/index.js.map +1 -0
  19. package/dist/agent-protocol/acp/json.d.ts +82 -0
  20. package/dist/agent-protocol/acp/json.d.ts.map +1 -0
  21. package/dist/agent-protocol/acp/json.js +144 -0
  22. package/dist/agent-protocol/acp/json.js.map +1 -0
  23. package/dist/agent-protocol/acp/models.d.ts +112 -0
  24. package/dist/agent-protocol/acp/models.d.ts.map +1 -0
  25. package/dist/agent-protocol/acp/models.js +293 -0
  26. package/dist/agent-protocol/acp/models.js.map +1 -0
  27. package/dist/agent-protocol/acp/rpc.d.ts +107 -0
  28. package/dist/agent-protocol/acp/rpc.d.ts.map +1 -0
  29. package/dist/agent-protocol/acp/rpc.js +162 -0
  30. package/dist/agent-protocol/acp/rpc.js.map +1 -0
  31. package/dist/agent-protocol/acp/session-params.d.ts +55 -0
  32. package/dist/agent-protocol/acp/session-params.d.ts.map +1 -0
  33. package/dist/agent-protocol/acp/session-params.js +81 -0
  34. package/dist/agent-protocol/acp/session-params.js.map +1 -0
  35. package/dist/agent-protocol/acp/session.d.ts +101 -0
  36. package/dist/agent-protocol/acp/session.d.ts.map +1 -0
  37. package/dist/agent-protocol/acp/session.js +832 -0
  38. package/dist/agent-protocol/acp/session.js.map +1 -0
  39. package/dist/agent-protocol/acp/text-suppression.d.ts +73 -0
  40. package/dist/agent-protocol/acp/text-suppression.d.ts.map +1 -0
  41. package/dist/agent-protocol/acp/text-suppression.js +229 -0
  42. package/dist/agent-protocol/acp/text-suppression.js.map +1 -0
  43. package/dist/agent-protocol/acp/types.d.ts +27 -0
  44. package/dist/agent-protocol/acp/types.d.ts.map +1 -0
  45. package/dist/agent-protocol/acp/types.js +2 -0
  46. package/dist/agent-protocol/acp/types.js.map +1 -0
  47. package/dist/agent-protocol/acp/updates.d.ts +166 -0
  48. package/dist/agent-protocol/acp/updates.d.ts.map +1 -0
  49. package/dist/agent-protocol/acp/updates.js +268 -0
  50. package/dist/agent-protocol/acp/updates.js.map +1 -0
  51. package/dist/agent-protocol/core/index.d.ts +6 -0
  52. package/dist/agent-protocol/core/index.d.ts.map +1 -0
  53. package/dist/agent-protocol/core/index.js +6 -0
  54. package/dist/agent-protocol/core/index.js.map +1 -0
  55. package/dist/agent-protocol/core/json-line-stream.d.ts +42 -0
  56. package/dist/agent-protocol/core/json-line-stream.d.ts.map +1 -0
  57. package/dist/agent-protocol/core/json-line-stream.js +333 -0
  58. package/dist/agent-protocol/core/json-line-stream.js.map +1 -0
  59. package/dist/agent-protocol/index.d.ts +8 -0
  60. package/dist/agent-protocol/index.d.ts.map +1 -0
  61. package/dist/agent-protocol/index.js +8 -0
  62. package/dist/agent-protocol/index.js.map +1 -0
  63. package/dist/agent-protocol/pi-rpc/events.d.ts +26 -0
  64. package/dist/agent-protocol/pi-rpc/events.d.ts.map +1 -0
  65. package/dist/agent-protocol/pi-rpc/events.js +167 -0
  66. package/dist/agent-protocol/pi-rpc/events.js.map +1 -0
  67. package/dist/agent-protocol/pi-rpc/index.d.ts +11 -0
  68. package/dist/agent-protocol/pi-rpc/index.d.ts.map +1 -0
  69. package/dist/agent-protocol/pi-rpc/index.js +11 -0
  70. package/dist/agent-protocol/pi-rpc/index.js.map +1 -0
  71. package/dist/agent-protocol/pi-rpc/internal.d.ts +45 -0
  72. package/dist/agent-protocol/pi-rpc/internal.d.ts.map +1 -0
  73. package/dist/agent-protocol/pi-rpc/internal.js +41 -0
  74. package/dist/agent-protocol/pi-rpc/internal.js.map +1 -0
  75. package/dist/agent-protocol/pi-rpc/models.d.ts +21 -0
  76. package/dist/agent-protocol/pi-rpc/models.d.ts.map +1 -0
  77. package/dist/agent-protocol/pi-rpc/models.js +48 -0
  78. package/dist/agent-protocol/pi-rpc/models.js.map +1 -0
  79. package/dist/agent-protocol/pi-rpc/session.d.ts +106 -0
  80. package/dist/agent-protocol/pi-rpc/session.d.ts.map +1 -0
  81. package/dist/agent-protocol/pi-rpc/session.js +371 -0
  82. package/dist/agent-protocol/pi-rpc/session.js.map +1 -0
  83. package/dist/amr-model-cache.d.ts +40 -0
  84. package/dist/amr-model-cache.d.ts.map +1 -0
  85. package/dist/amr-model-cache.js +79 -0
  86. package/dist/amr-model-cache.js.map +1 -0
  87. package/dist/amr-profile-resolver.d.ts +21 -0
  88. package/dist/amr-profile-resolver.d.ts.map +1 -0
  89. package/dist/amr-profile-resolver.js +4 -0
  90. package/dist/amr-profile-resolver.js.map +1 -0
  91. package/dist/artifact-taxonomy.d.ts +27 -0
  92. package/dist/artifact-taxonomy.d.ts.map +1 -0
  93. package/dist/artifact-taxonomy.js +5 -0
  94. package/dist/artifact-taxonomy.js.map +1 -0
  95. package/dist/auth.d.ts +25 -0
  96. package/dist/auth.d.ts.map +1 -0
  97. package/dist/auth.js +332 -0
  98. package/dist/auth.js.map +1 -0
  99. package/dist/capabilities.d.ts +9 -0
  100. package/dist/capabilities.d.ts.map +1 -0
  101. package/dist/capabilities.js +2 -0
  102. package/dist/capabilities.js.map +1 -0
  103. package/dist/claude-stream.d.ts +37 -0
  104. package/dist/claude-stream.d.ts.map +1 -0
  105. package/dist/claude-stream.js +660 -0
  106. package/dist/claude-stream.js.map +1 -0
  107. package/dist/copilot-stream.d.ts +37 -0
  108. package/dist/copilot-stream.d.ts.map +1 -0
  109. package/dist/copilot-stream.js +136 -0
  110. package/dist/copilot-stream.js.map +1 -0
  111. package/dist/defs/aider.d.ts +13 -0
  112. package/dist/defs/aider.d.ts.map +1 -0
  113. package/dist/defs/aider.js +63 -0
  114. package/dist/defs/aider.js.map +1 -0
  115. package/dist/defs/amp.d.ts +12 -0
  116. package/dist/defs/amp.d.ts.map +1 -0
  117. package/dist/defs/amp.js +56 -0
  118. package/dist/defs/amp.js.map +1 -0
  119. package/dist/defs/amr.d.ts +37 -0
  120. package/dist/defs/amr.d.ts.map +1 -0
  121. package/dist/defs/amr.js +303 -0
  122. package/dist/defs/amr.js.map +1 -0
  123. package/dist/defs/antigravity.d.ts +25 -0
  124. package/dist/defs/antigravity.d.ts.map +1 -0
  125. package/dist/defs/antigravity.js +213 -0
  126. package/dist/defs/antigravity.js.map +1 -0
  127. package/dist/defs/claude.d.ts +30 -0
  128. package/dist/defs/claude.d.ts.map +1 -0
  129. package/dist/defs/claude.js +130 -0
  130. package/dist/defs/claude.js.map +1 -0
  131. package/dist/defs/codebuddy.d.ts +26 -0
  132. package/dist/defs/codebuddy.d.ts.map +1 -0
  133. package/dist/defs/codebuddy.js +124 -0
  134. package/dist/defs/codebuddy.js.map +1 -0
  135. package/dist/defs/codex.d.ts +30 -0
  136. package/dist/defs/codex.d.ts.map +1 -0
  137. package/dist/defs/codex.js +196 -0
  138. package/dist/defs/codex.js.map +1 -0
  139. package/dist/defs/copilot.d.ts +12 -0
  140. package/dist/defs/copilot.d.ts.map +1 -0
  141. package/dist/defs/copilot.js +88 -0
  142. package/dist/defs/copilot.js.map +1 -0
  143. package/dist/defs/cursor-agent.d.ts +27 -0
  144. package/dist/defs/cursor-agent.d.ts.map +1 -0
  145. package/dist/defs/cursor-agent.js +93 -0
  146. package/dist/defs/cursor-agent.js.map +1 -0
  147. package/dist/defs/deepseek.d.ts +12 -0
  148. package/dist/defs/deepseek.d.ts.map +1 -0
  149. package/dist/defs/deepseek.js +53 -0
  150. package/dist/defs/deepseek.js.map +1 -0
  151. package/dist/defs/devin.d.ts +12 -0
  152. package/dist/defs/devin.d.ts.map +1 -0
  153. package/dist/defs/devin.js +45 -0
  154. package/dist/defs/devin.js.map +1 -0
  155. package/dist/defs/grok-build.d.ts +26 -0
  156. package/dist/defs/grok-build.d.ts.map +1 -0
  157. package/dist/defs/grok-build.js +105 -0
  158. package/dist/defs/grok-build.js.map +1 -0
  159. package/dist/defs/hermes.d.ts +13 -0
  160. package/dist/defs/hermes.d.ts.map +1 -0
  161. package/dist/defs/hermes.js +51 -0
  162. package/dist/defs/hermes.js.map +1 -0
  163. package/dist/defs/index.d.ts +33 -0
  164. package/dist/defs/index.d.ts.map +1 -0
  165. package/dist/defs/index.js +33 -0
  166. package/dist/defs/index.js.map +1 -0
  167. package/dist/defs/kilo.d.ts +12 -0
  168. package/dist/defs/kilo.d.ts.map +1 -0
  169. package/dist/defs/kilo.js +20 -0
  170. package/dist/defs/kilo.js.map +1 -0
  171. package/dist/defs/kimi.d.ts +13 -0
  172. package/dist/defs/kimi.d.ts.map +1 -0
  173. package/dist/defs/kimi.js +26 -0
  174. package/dist/defs/kimi.js.map +1 -0
  175. package/dist/defs/kiro.d.ts +12 -0
  176. package/dist/defs/kiro.d.ts.map +1 -0
  177. package/dist/defs/kiro.js +20 -0
  178. package/dist/defs/kiro.js.map +1 -0
  179. package/dist/defs/mimo.d.ts +13 -0
  180. package/dist/defs/mimo.d.ts.map +1 -0
  181. package/dist/defs/mimo.js +26 -0
  182. package/dist/defs/mimo.js.map +1 -0
  183. package/dist/defs/opencode.d.ts +27 -0
  184. package/dist/defs/opencode.d.ts.map +1 -0
  185. package/dist/defs/opencode.js +89 -0
  186. package/dist/defs/opencode.js.map +1 -0
  187. package/dist/defs/pi.d.ts +18 -0
  188. package/dist/defs/pi.d.ts.map +1 -0
  189. package/dist/defs/pi.js +94 -0
  190. package/dist/defs/pi.js.map +1 -0
  191. package/dist/defs/qoder.d.ts +11 -0
  192. package/dist/defs/qoder.d.ts.map +1 -0
  193. package/dist/defs/qoder.js +50 -0
  194. package/dist/defs/qoder.js.map +1 -0
  195. package/dist/defs/qwen.d.ts +11 -0
  196. package/dist/defs/qwen.d.ts.map +1 -0
  197. package/dist/defs/qwen.js +28 -0
  198. package/dist/defs/qwen.js.map +1 -0
  199. package/dist/defs/reasonix.d.ts +20 -0
  200. package/dist/defs/reasonix.d.ts.map +1 -0
  201. package/dist/defs/reasonix.js +60 -0
  202. package/dist/defs/reasonix.js.map +1 -0
  203. package/dist/defs/shared.d.ts +23 -0
  204. package/dist/defs/shared.d.ts.map +1 -0
  205. package/dist/defs/shared.js +58 -0
  206. package/dist/defs/shared.js.map +1 -0
  207. package/dist/defs/trae-cli.d.ts +14 -0
  208. package/dist/defs/trae-cli.d.ts.map +1 -0
  209. package/dist/defs/trae-cli.js +22 -0
  210. package/dist/defs/trae-cli.js.map +1 -0
  211. package/dist/defs/vibe.d.ts +12 -0
  212. package/dist/defs/vibe.d.ts.map +1 -0
  213. package/dist/defs/vibe.js +20 -0
  214. package/dist/defs/vibe.js.map +1 -0
  215. package/dist/detection.d.ts +14 -0
  216. package/dist/detection.d.ts.map +1 -0
  217. package/dist/detection.js +266 -0
  218. package/dist/detection.js.map +1 -0
  219. package/dist/diagnostics.d.ts +8 -0
  220. package/dist/diagnostics.d.ts.map +1 -0
  221. package/dist/diagnostics.js +95 -0
  222. package/dist/diagnostics.js.map +1 -0
  223. package/dist/env.d.ts +19 -0
  224. package/dist/env.d.ts.map +1 -0
  225. package/dist/env.js +95 -0
  226. package/dist/env.js.map +1 -0
  227. package/dist/executables.d.ts +24 -0
  228. package/dist/executables.d.ts.map +1 -0
  229. package/dist/executables.js +349 -0
  230. package/dist/executables.js.map +1 -0
  231. package/dist/index.d.ts +74 -0
  232. package/dist/index.d.ts.map +1 -0
  233. package/dist/index.js +102 -0
  234. package/dist/index.js.map +1 -0
  235. package/dist/invocation.d.ts +6 -0
  236. package/dist/invocation.d.ts.map +1 -0
  237. package/dist/invocation.js +47 -0
  238. package/dist/invocation.js.map +1 -0
  239. package/dist/json-event-stream.d.ts +9 -0
  240. package/dist/json-event-stream.d.ts.map +1 -0
  241. package/dist/json-event-stream.js +856 -0
  242. package/dist/json-event-stream.js.map +1 -0
  243. package/dist/launch.d.ts +12 -0
  244. package/dist/launch.d.ts.map +1 -0
  245. package/dist/launch.js +221 -0
  246. package/dist/launch.js.map +1 -0
  247. package/dist/mcp.d.ts +44 -0
  248. package/dist/mcp.d.ts.map +1 -0
  249. package/dist/mcp.js +12 -0
  250. package/dist/mcp.js.map +1 -0
  251. package/dist/metadata.d.ts +24 -0
  252. package/dist/metadata.d.ts.map +1 -0
  253. package/dist/metadata.js +100 -0
  254. package/dist/metadata.js.map +1 -0
  255. package/dist/mmd-routes.d.ts +12 -0
  256. package/dist/mmd-routes.d.ts.map +1 -0
  257. package/dist/mmd-routes.js +146 -0
  258. package/dist/mmd-routes.js.map +1 -0
  259. package/dist/model-registry.d.ts +120 -0
  260. package/dist/model-registry.d.ts.map +1 -0
  261. package/dist/model-registry.js +77 -0
  262. package/dist/model-registry.js.map +1 -0
  263. package/dist/models.d.ts +16 -0
  264. package/dist/models.d.ts.map +1 -0
  265. package/dist/models.js +93 -0
  266. package/dist/models.js.map +1 -0
  267. package/dist/opencode-log.d.ts +16 -0
  268. package/dist/opencode-log.d.ts.map +1 -0
  269. package/dist/opencode-log.js +163 -0
  270. package/dist/opencode-log.js.map +1 -0
  271. package/dist/paths.d.ts +3 -0
  272. package/dist/paths.d.ts.map +1 -0
  273. package/dist/paths.js +29 -0
  274. package/dist/paths.js.map +1 -0
  275. package/dist/pi-models.d.ts +13 -0
  276. package/dist/pi-models.d.ts.map +1 -0
  277. package/dist/pi-models.js +36 -0
  278. package/dist/pi-models.js.map +1 -0
  279. package/dist/prompt-augmenter.d.ts +60 -0
  280. package/dist/prompt-augmenter.d.ts.map +1 -0
  281. package/dist/prompt-augmenter.js +26 -0
  282. package/dist/prompt-augmenter.js.map +1 -0
  283. package/dist/prompt-budget.d.ts +20 -0
  284. package/dist/prompt-budget.d.ts.map +1 -0
  285. package/dist/prompt-budget.js +226 -0
  286. package/dist/prompt-budget.js.map +1 -0
  287. package/dist/prompt-file.d.ts +7 -0
  288. package/dist/prompt-file.d.ts.map +1 -0
  289. package/dist/prompt-file.js +27 -0
  290. package/dist/prompt-file.js.map +1 -0
  291. package/dist/providers/aihubmix.d.ts +99 -0
  292. package/dist/providers/aihubmix.d.ts.map +1 -0
  293. package/dist/providers/aihubmix.js +239 -0
  294. package/dist/providers/aihubmix.js.map +1 -0
  295. package/dist/providers/anthropic-messages.d.ts +116 -0
  296. package/dist/providers/anthropic-messages.d.ts.map +1 -0
  297. package/dist/providers/anthropic-messages.js +313 -0
  298. package/dist/providers/anthropic-messages.js.map +1 -0
  299. package/dist/providers/azure-chat.d.ts +99 -0
  300. package/dist/providers/azure-chat.d.ts.map +1 -0
  301. package/dist/providers/azure-chat.js +164 -0
  302. package/dist/providers/azure-chat.js.map +1 -0
  303. package/dist/providers/connection-guard.d.ts +67 -0
  304. package/dist/providers/connection-guard.d.ts.map +1 -0
  305. package/dist/providers/connection-guard.js +211 -0
  306. package/dist/providers/connection-guard.js.map +1 -0
  307. package/dist/providers/elevenlabs.d.ts +28 -0
  308. package/dist/providers/elevenlabs.d.ts.map +1 -0
  309. package/dist/providers/elevenlabs.js +138 -0
  310. package/dist/providers/elevenlabs.js.map +1 -0
  311. package/dist/providers/google-messages.d.ts +108 -0
  312. package/dist/providers/google-messages.d.ts.map +1 -0
  313. package/dist/providers/google-messages.js +284 -0
  314. package/dist/providers/google-messages.js.map +1 -0
  315. package/dist/providers/google.d.ts +20 -0
  316. package/dist/providers/google.d.ts.map +1 -0
  317. package/dist/providers/google.js +42 -0
  318. package/dist/providers/google.js.map +1 -0
  319. package/dist/providers/index.d.ts +39 -0
  320. package/dist/providers/index.d.ts.map +1 -0
  321. package/dist/providers/index.js +39 -0
  322. package/dist/providers/index.js.map +1 -0
  323. package/dist/providers/model-catalog.d.ts +32 -0
  324. package/dist/providers/model-catalog.d.ts.map +1 -0
  325. package/dist/providers/model-catalog.js +394 -0
  326. package/dist/providers/model-catalog.js.map +1 -0
  327. package/dist/providers/oauth-callback-server.d.ts +35 -0
  328. package/dist/providers/oauth-callback-server.d.ts.map +1 -0
  329. package/dist/providers/oauth-callback-server.js +217 -0
  330. package/dist/providers/oauth-callback-server.js.map +1 -0
  331. package/dist/providers/oauth-credentials.d.ts +29 -0
  332. package/dist/providers/oauth-credentials.d.ts.map +1 -0
  333. package/dist/providers/oauth-credentials.js +70 -0
  334. package/dist/providers/oauth-credentials.js.map +1 -0
  335. package/dist/providers/oauth-provider.d.ts +95 -0
  336. package/dist/providers/oauth-provider.d.ts.map +1 -0
  337. package/dist/providers/oauth-provider.js +130 -0
  338. package/dist/providers/oauth-provider.js.map +1 -0
  339. package/dist/providers/oauth-tokens.d.ts +35 -0
  340. package/dist/providers/oauth-tokens.d.ts.map +1 -0
  341. package/dist/providers/oauth-tokens.js +136 -0
  342. package/dist/providers/oauth-tokens.js.map +1 -0
  343. package/dist/providers/ollama-chat.d.ts +106 -0
  344. package/dist/providers/ollama-chat.d.ts.map +1 -0
  345. package/dist/providers/ollama-chat.js +292 -0
  346. package/dist/providers/ollama-chat.js.map +1 -0
  347. package/dist/providers/openai-chat.d.ts +147 -0
  348. package/dist/providers/openai-chat.d.ts.map +1 -0
  349. package/dist/providers/openai-chat.js +302 -0
  350. package/dist/providers/openai-chat.js.map +1 -0
  351. package/dist/providers/pkce.d.ts +81 -0
  352. package/dist/providers/pkce.d.ts.map +1 -0
  353. package/dist/providers/pkce.js +176 -0
  354. package/dist/providers/pkce.js.map +1 -0
  355. package/dist/providers/sse-decode.d.ts +47 -0
  356. package/dist/providers/sse-decode.d.ts.map +1 -0
  357. package/dist/providers/sse-decode.js +109 -0
  358. package/dist/providers/sse-decode.js.map +1 -0
  359. package/dist/providers/token-params.d.ts +29 -0
  360. package/dist/providers/token-params.d.ts.map +1 -0
  361. package/dist/providers/token-params.js +41 -0
  362. package/dist/providers/token-params.js.map +1 -0
  363. package/dist/providers/turn-end-guard.d.ts +37 -0
  364. package/dist/providers/turn-end-guard.d.ts.map +1 -0
  365. package/dist/providers/turn-end-guard.js +42 -0
  366. package/dist/providers/turn-end-guard.js.map +1 -0
  367. package/dist/providers/types.d.ts +36 -0
  368. package/dist/providers/types.d.ts.map +1 -0
  369. package/dist/providers/types.js +13 -0
  370. package/dist/providers/types.js.map +1 -0
  371. package/dist/qoder-stream.d.ts +19 -0
  372. package/dist/qoder-stream.d.ts.map +1 -0
  373. package/dist/qoder-stream.js +167 -0
  374. package/dist/qoder-stream.js.map +1 -0
  375. package/dist/registry.d.ts +5 -0
  376. package/dist/registry.d.ts.map +1 -0
  377. package/dist/registry.js +58 -0
  378. package/dist/registry.js.map +1 -0
  379. package/dist/resolution.d.ts +2 -0
  380. package/dist/resolution.d.ts.map +1 -0
  381. package/dist/resolution.js +19 -0
  382. package/dist/resolution.js.map +1 -0
  383. package/dist/role-marker-guard.d.ts +53 -0
  384. package/dist/role-marker-guard.d.ts.map +1 -0
  385. package/dist/role-marker-guard.js +280 -0
  386. package/dist/role-marker-guard.js.map +1 -0
  387. package/dist/telemetry-sink.d.ts +35 -0
  388. package/dist/telemetry-sink.d.ts.map +1 -0
  389. package/dist/telemetry-sink.js +5 -0
  390. package/dist/telemetry-sink.js.map +1 -0
  391. package/dist/terminal-launch.d.ts +11 -0
  392. package/dist/terminal-launch.d.ts.map +1 -0
  393. package/dist/terminal-launch.js +123 -0
  394. package/dist/terminal-launch.js.map +1 -0
  395. package/dist/types.d.ts +185 -0
  396. package/dist/types.d.ts.map +1 -0
  397. package/dist/types.js +2 -0
  398. package/dist/types.js.map +1 -0
  399. package/package.json +47 -0
@@ -0,0 +1,7 @@
1
+ import type { RuntimeAgentDef } from './types.js';
2
+ export type PreparedPromptFile = {
3
+ path: string;
4
+ cleanup: () => Promise<void>;
5
+ };
6
+ export declare function preparePromptFileForAgent(def: RuntimeAgentDef | null | undefined, prompt: string, label: string): Promise<PreparedPromptFile | null>;
7
+ //# sourceMappingURL=prompt-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-file.d.ts","sourceRoot":"","sources":["../src/prompt-file.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAAC;AAEF,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EACvC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAcpC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @module prompt-file
3
+ *
4
+ * Stages a composed prompt to a temp file for adapters that declare
5
+ * `promptViaFile: true`. Ported from OD's
6
+ * `apps/daemon/src/runtimes/prompt/prompt-file.ts` with one de-branding
7
+ * change: the temp-dir prefix was `od-${def.id}-...`; now
8
+ * `agent-runtime-${def.id}-...`.
9
+ */
10
+ import { promises as fs } from 'node:fs';
11
+ import os from 'node:os';
12
+ import path from 'node:path';
13
+ export async function preparePromptFileForAgent(def, prompt, label) {
14
+ if (!def?.promptViaFile)
15
+ return null;
16
+ const safeLabel = label.replace(/[^a-zA-Z0-9_.-]/g, '-').slice(0, 80) || 'prompt';
17
+ const dir = await fs.mkdtemp(path.join(os.tmpdir(), `agent-runtime-${def.id}-${safeLabel}-`));
18
+ const filePath = path.join(dir, 'prompt.md');
19
+ await fs.writeFile(filePath, prompt, { encoding: 'utf8', mode: 0o600 });
20
+ return {
21
+ path: filePath,
22
+ cleanup: async () => {
23
+ await fs.rm(dir, { recursive: true, force: true });
24
+ },
25
+ };
26
+ }
27
+ //# sourceMappingURL=prompt-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-file.js","sourceRoot":"","sources":["../src/prompt-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAQ7B,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,GAAuC,EACvC,MAAc,EACd,KAAa;IAEb,IAAI,CAAC,GAAG,EAAE,aAAa;QAAE,OAAO,IAAI,CAAC;IAErC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC;IAClF,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,iBAAiB,GAAG,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;IAC9F,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC7C,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAExE,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * @module providers/aihubmix
3
+ *
4
+ * AIHubMix BYOK provider — shared identity + outbound header helper.
5
+ *
6
+ * AIHubMix (https://aihubmix.com) is an OpenAI-wire-compatible aggregator
7
+ * gateway: a single API key fronts OpenAI / Anthropic / Gemini models, routed
8
+ * by model name on the upstream side (`claude*` -> Anthropic, `gemini*` / `imagen*`
9
+ * -> Gemini, everything else -> OpenAI). Because the wire shape is identical to
10
+ * OpenAI's, chat proxies, connection tests, model discovery and media
11
+ * renderers all reuse the OpenAI call shape — the ONLY thing that differs is
12
+ * the outbound headers, which is why every outbound call point funnels through
13
+ * `aihubmixHeaders()` rather than hand-building `Authorization` inline.
14
+ *
15
+ * The distinctive AIHubMix detail is the `APP-Code` attribution header: a
16
+ * fixed per-integration code that grants a usage discount (the same mechanism
17
+ * cherry-studio and the dify plugin use). Injecting it in one helper keeps the
18
+ * invariant "every AIHubMix request carries the APP-Code" enforceable in one
19
+ * place instead of being re-derived at each call site.
20
+ *
21
+ * This is a third-party gateway's own wire protocol, not a product-owned
22
+ * integration — ported verbatim (zero imports, no product-identity strings
23
+ * in the origin).
24
+ */
25
+ export declare const AIHUBMIX_APP_CODE = "DMCY9912";
26
+ export declare const AIHUBMIX_DEFAULT_BASE_URL = "https://aihubmix.com/v1";
27
+ /**
28
+ * Builds the outbound header set for an AIHubMix request: Bearer auth plus the
29
+ * fixed `APP-Code` attribution header. Callers spread the result into their
30
+ * `fetch` headers and may add `content-type` etc. on top.
31
+ */
32
+ export declare function aihubmixHeaders(apiKey: string): Record<string, string>;
33
+ /**
34
+ * The APP-Code attribution header on its own (no auth). For the Anthropic /
35
+ * Gemini routes, which carry their own auth header (`x-api-key` /
36
+ * `x-goog-api-key`) — spread this alongside it so every AIHubMix request,
37
+ * whatever the wire protocol, still carries APP-Code.
38
+ *
39
+ * `AIHUBMIX_APP_CODE` is a fixed non-empty literal (not a runtime-configurable
40
+ * value), so this always returns the header — no conditional/empty-string
41
+ * branch to test.
42
+ */
43
+ export declare function aihubmixAppCodeHeader(): Record<string, string>;
44
+ export type AIHubMixProtocol = 'openai' | 'anthropic' | 'gemini';
45
+ export declare function classifyAIHubMixModel(model: string): AIHubMixProtocol;
46
+ /**
47
+ * Origin of the configured AIHubMix base URL — the three protocol clients all
48
+ * derive their endpoint from it:
49
+ * openai -> `${origin}/v1`
50
+ * anthropic -> `${origin}` (+ /v1/messages)
51
+ * gemini -> `${origin}/gemini` (+ /v1beta/models/{model}:...)
52
+ */
53
+ export declare function aihubmixOriginFromBase(baseUrl: string): string;
54
+ /** Gemini-native generateContent endpoint for an AIHubMix image model. */
55
+ export declare function aihubmixGeminiImageUrl(baseUrl: string, wireModel: string): string;
56
+ export interface AIHubMixGeminiImageRequest {
57
+ baseUrl: string;
58
+ apiKey: string;
59
+ wireModel: string;
60
+ prompt: string;
61
+ /** Gemini aspectRatio string, e.g. "1:1" / "16:9". */
62
+ aspect: string;
63
+ }
64
+ /**
65
+ * Generates an image through AIHubMix's Gemini-native `generateContent` wire and
66
+ * returns the decoded image bytes.
67
+ *
68
+ * gemini/imagen-family image models reject the OpenAI `/images/generations`
69
+ * shape ("Unknown name prompt/n/size"), so any caller driving an in-chat tool
70
+ * or a media renderer for those models should route here. This helper owns the
71
+ * single source of truth for the request body and the inline-image response
72
+ * parse; `doFetch` lets each caller apply its own request-init wrapper (proxy
73
+ * dispatcher, abort signal, redirect policy). Throws on a non-OK status or a
74
+ * response without inline image data.
75
+ */
76
+ export declare function aihubmixGeminiImageBytes(req: AIHubMixGeminiImageRequest, doFetch: (url: string, init: RequestInit) => Promise<Response>): Promise<Buffer>;
77
+ export declare function aihubmixWireModel(catalogId: string): string;
78
+ export declare function aihubmixVideoSeconds(wireModel: string, requested: number): string;
79
+ export type AIHubMixCatalogType = 'llm' | 'image_generation' | 'tts' | 'video';
80
+ export declare function aihubmixCatalogUrl(baseUrl: string, type: AIHubMixCatalogType): string;
81
+ export interface AIHubMixCatalogModel {
82
+ id: string;
83
+ label: string;
84
+ }
85
+ export interface ParseAIHubMixCatalogOptions {
86
+ /** Keep only genuine chat models, dropping media-generation rows. AIHubMix's
87
+ * `?type=llm` query matches any model whose `types` merely CONTAINS `llm`, so
88
+ * dual-tagged image models (e.g. `gpt-image-2` -> "image_generation,llm") leak
89
+ * into the chat catalogue. A chat model picker should pass this; media
90
+ * pickers (which query `?type=image_generation` / `video` / `tts`) leave it
91
+ * off so their own catalogues stay intact. Rows with no `types` are kept —
92
+ * absent metadata shouldn't hide an otherwise-valid chat model. */
93
+ chatOnly?: boolean;
94
+ }
95
+ /** Parses the AIHubMix catalogue envelope into { id, label } options. Reads
96
+ * `model_id` (the wire name sent as `model`) and `model_name` (display). */
97
+ export declare function parseAIHubMixCatalog(data: unknown, options?: ParseAIHubMixCatalogOptions): AIHubMixCatalogModel[];
98
+ export declare const AIHUBMIX_IMAGE_ASPECT_TO_SIZE: Record<string, string>;
99
+ //# sourceMappingURL=aihubmix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aihubmix.d.ts","sourceRoot":"","sources":["../../src/providers/aihubmix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAMH,eAAO,MAAM,iBAAiB,aAAa,CAAC;AAK5C,eAAO,MAAM,yBAAyB,4BAA4B,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKtE;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE9D;AAQD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEjE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAarE;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED,0EAA0E;AAC1E,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAKjF;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,0BAA0B,EAC/B,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,GAC7D,OAAO,CAAC,MAAM,CAAC,CAmCjB;AAcD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAYD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAiBjF;AAUD,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,kBAAkB,GAAG,KAAK,GAAG,OAAO,CAAC;AAE/E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAQrF;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAiBD,MAAM,WAAW,2BAA2B;IAC1C;;;;;;wEAMoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;6EAC6E;AAC7E,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,2BAA2B,GACpC,oBAAoB,EAAE,CAuBxB;AAOD,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMhE,CAAC"}
@@ -0,0 +1,239 @@
1
+ /**
2
+ * @module providers/aihubmix
3
+ *
4
+ * AIHubMix BYOK provider — shared identity + outbound header helper.
5
+ *
6
+ * AIHubMix (https://aihubmix.com) is an OpenAI-wire-compatible aggregator
7
+ * gateway: a single API key fronts OpenAI / Anthropic / Gemini models, routed
8
+ * by model name on the upstream side (`claude*` -> Anthropic, `gemini*` / `imagen*`
9
+ * -> Gemini, everything else -> OpenAI). Because the wire shape is identical to
10
+ * OpenAI's, chat proxies, connection tests, model discovery and media
11
+ * renderers all reuse the OpenAI call shape — the ONLY thing that differs is
12
+ * the outbound headers, which is why every outbound call point funnels through
13
+ * `aihubmixHeaders()` rather than hand-building `Authorization` inline.
14
+ *
15
+ * The distinctive AIHubMix detail is the `APP-Code` attribution header: a
16
+ * fixed per-integration code that grants a usage discount (the same mechanism
17
+ * cherry-studio and the dify plugin use). Injecting it in one helper keeps the
18
+ * invariant "every AIHubMix request carries the APP-Code" enforceable in one
19
+ * place instead of being re-derived at each call site.
20
+ *
21
+ * This is a third-party gateway's own wire protocol, not a product-owned
22
+ * integration — ported verbatim (zero imports, no product-identity strings
23
+ * in the origin).
24
+ */
25
+ // Fixed App Code for this integration (from https://aihubmix.com/appstore).
26
+ // Sent as the APP-Code attribution header on every AIHubMix request to grant
27
+ // the integration's usage discount. When empty, the header is omitted and the
28
+ // integration still works (just without the discount).
29
+ export const AIHUBMIX_APP_CODE = 'DMCY9912';
30
+ // Default base URL a caller can assume when its BYOK form leaves the field
31
+ // blank. Kept here as the single source of truth so a chat proxy, media
32
+ // renderer and connection test can all default to the same origin.
33
+ export const AIHUBMIX_DEFAULT_BASE_URL = 'https://aihubmix.com/v1';
34
+ /**
35
+ * Builds the outbound header set for an AIHubMix request: Bearer auth plus the
36
+ * fixed `APP-Code` attribution header. Callers spread the result into their
37
+ * `fetch` headers and may add `content-type` etc. on top.
38
+ */
39
+ export function aihubmixHeaders(apiKey) {
40
+ return {
41
+ authorization: `Bearer ${apiKey}`,
42
+ ...aihubmixAppCodeHeader(),
43
+ };
44
+ }
45
+ /**
46
+ * The APP-Code attribution header on its own (no auth). For the Anthropic /
47
+ * Gemini routes, which carry their own auth header (`x-api-key` /
48
+ * `x-goog-api-key`) — spread this alongside it so every AIHubMix request,
49
+ * whatever the wire protocol, still carries APP-Code.
50
+ *
51
+ * `AIHUBMIX_APP_CODE` is a fixed non-empty literal (not a runtime-configurable
52
+ * value), so this always returns the header — no conditional/empty-string
53
+ * branch to test.
54
+ */
55
+ export function aihubmixAppCodeHeader() {
56
+ return { 'APP-Code': AIHUBMIX_APP_CODE };
57
+ }
58
+ export function classifyAIHubMixModel(model) {
59
+ const m = (model || '').trim().toLowerCase();
60
+ // Gemini: gemini*/imagen*, excluding the `-nothink`/`-search` suffixes and
61
+ // any embedding model (those stay on the OpenAI-compatible path per §4.1).
62
+ if ((m.startsWith('gemini') || m.startsWith('imagen'))
63
+ && !/-(nothink|search)$/.test(m)
64
+ && !m.includes('embedding')) {
65
+ return 'gemini';
66
+ }
67
+ if (m.startsWith('claude'))
68
+ return 'anthropic';
69
+ return 'openai';
70
+ }
71
+ /**
72
+ * Origin of the configured AIHubMix base URL — the three protocol clients all
73
+ * derive their endpoint from it:
74
+ * openai -> `${origin}/v1`
75
+ * anthropic -> `${origin}` (+ /v1/messages)
76
+ * gemini -> `${origin}/gemini` (+ /v1beta/models/{model}:...)
77
+ */
78
+ export function aihubmixOriginFromBase(baseUrl) {
79
+ try {
80
+ return new URL(baseUrl || AIHUBMIX_DEFAULT_BASE_URL).origin;
81
+ }
82
+ catch {
83
+ return 'https://aihubmix.com';
84
+ }
85
+ }
86
+ /** Gemini-native generateContent endpoint for an AIHubMix image model. */
87
+ export function aihubmixGeminiImageUrl(baseUrl, wireModel) {
88
+ return (`${aihubmixOriginFromBase(baseUrl)}/gemini/v1beta/models/`
89
+ + `${encodeURIComponent(wireModel)}:generateContent`);
90
+ }
91
+ /**
92
+ * Generates an image through AIHubMix's Gemini-native `generateContent` wire and
93
+ * returns the decoded image bytes.
94
+ *
95
+ * gemini/imagen-family image models reject the OpenAI `/images/generations`
96
+ * shape ("Unknown name prompt/n/size"), so any caller driving an in-chat tool
97
+ * or a media renderer for those models should route here. This helper owns the
98
+ * single source of truth for the request body and the inline-image response
99
+ * parse; `doFetch` lets each caller apply its own request-init wrapper (proxy
100
+ * dispatcher, abort signal, redirect policy). Throws on a non-OK status or a
101
+ * response without inline image data.
102
+ */
103
+ export async function aihubmixGeminiImageBytes(req, doFetch) {
104
+ const url = aihubmixGeminiImageUrl(req.baseUrl, req.wireModel);
105
+ const resp = await doFetch(url, {
106
+ method: 'POST',
107
+ redirect: 'error',
108
+ headers: {
109
+ 'content-type': 'application/json',
110
+ 'x-goog-api-key': req.apiKey,
111
+ ...aihubmixAppCodeHeader(),
112
+ },
113
+ body: JSON.stringify({
114
+ contents: [{ role: 'user', parts: [{ text: req.prompt }] }],
115
+ generationConfig: {
116
+ responseModalities: ['TEXT', 'IMAGE'],
117
+ imageConfig: { aspectRatio: req.aspect },
118
+ },
119
+ }),
120
+ });
121
+ if (!resp.ok) {
122
+ const text = await resp.text().catch(() => '');
123
+ throw new Error(`aihubmix image (gemini) ${resp.status}: ${text.slice(0, 240)}`);
124
+ }
125
+ const data = (await resp.json());
126
+ const parts = data?.candidates?.[0]?.content?.parts ?? [];
127
+ const b64 = parts
128
+ .map((p) => p?.inlineData?.data || p?.inline_data?.data)
129
+ .find((d) => typeof d === 'string' && d.length > 0);
130
+ if (!b64) {
131
+ throw new Error(`aihubmix gemini image response had no inline image data: ${JSON.stringify(data).slice(0, 200)}`);
132
+ }
133
+ return Buffer.from(b64, 'base64');
134
+ }
135
+ // Catalogue ids vs wire names. A media registry may require globally-unique
136
+ // model ids across providers, but `gpt-image-1` / `dall-e-3` / `tts-1` are
137
+ // already owned by the `openai` provider in such a registry. So AIHubMix's
138
+ // models are registered with an `aihubmix-` prefix and mapped back to the
139
+ // real upstream name here. A plain prefix strip is the fallback so adding a
140
+ // new `aihubmix-<wire>` entry needs no edit here.
141
+ const AIHUBMIX_WIRE_MODELS = {
142
+ 'aihubmix-gpt-image-1': 'gpt-image-1',
143
+ 'aihubmix-dall-e-3': 'dall-e-3',
144
+ 'aihubmix-tts-1': 'tts-1',
145
+ };
146
+ export function aihubmixWireModel(catalogId) {
147
+ return AIHUBMIX_WIRE_MODELS[catalogId] ?? catalogId.replace(/^aihubmix-/, '');
148
+ }
149
+ // AIHubMix's unified /videos API uses a single `seconds` (string) field for
150
+ // every model family, but the *valid values* differ per family — an
151
+ // out-of-set duration 400s (e.g. Veo rejects 5; only 4/6/8 are allowed, which
152
+ // AIHubMix forwards to Google's native `durationSeconds`). Snap the requested
153
+ // duration to the family's nearest allowed value (ties prefer the shorter one).
154
+ // veo: 4, 6, 8 (default 8)
155
+ // sora: 4, 8, 12 (default 4)
156
+ // wan: 5, 10 (default 5)
157
+ // seedance/doubao + unknown: accepts a range — clamp to 3-12.
158
+ // `wireModel` is the upstream name (prefix already stripped).
159
+ export function aihubmixVideoSeconds(wireModel, requested) {
160
+ const m = (wireModel || '').toLowerCase();
161
+ const req = Number.isFinite(requested) ? requested : 5;
162
+ let allowed = null;
163
+ if (m.startsWith('veo'))
164
+ allowed = [4, 6, 8];
165
+ else if (m.startsWith('sora'))
166
+ allowed = [4, 8, 12];
167
+ else if (m.startsWith('wan'))
168
+ allowed = [5, 10];
169
+ if (!allowed) {
170
+ // Seedance/doubao and unknown families take a continuous range.
171
+ return String(Math.min(12, Math.max(3, Math.round(req))));
172
+ }
173
+ // Nearest allowed value; strict `<` keeps the first (smaller) on a tie.
174
+ const snapped = allowed.reduce((best, v) => (Math.abs(v - req) < Math.abs(best - req) ? v : best), allowed[0]);
175
+ return String(snapped);
176
+ }
177
+ export function aihubmixCatalogUrl(baseUrl, type) {
178
+ let origin;
179
+ try {
180
+ origin = new URL(baseUrl || AIHUBMIX_DEFAULT_BASE_URL).origin;
181
+ }
182
+ catch {
183
+ origin = 'https://aihubmix.com';
184
+ }
185
+ return `${origin}/api/v1/models?type=${type}`;
186
+ }
187
+ // AIHubMix tags every catalogue row with a comma-separated `types` field
188
+ // (e.g. "llm", "llm,search", "image_generation,llm"). These are the
189
+ // media-generation capabilities that belong to dedicated image/video/audio
190
+ // pickers — NOT the chat model picker.
191
+ const AIHUBMIX_MEDIA_GENERATION_TYPES = new Set(['image_generation', 'video', 'tts']);
192
+ function aihubmixRowTypes(row) {
193
+ const raw = row?.types;
194
+ if (typeof raw !== 'string')
195
+ return [];
196
+ return raw
197
+ .split(',')
198
+ .map((t) => t.trim().toLowerCase())
199
+ .filter(Boolean);
200
+ }
201
+ /** Parses the AIHubMix catalogue envelope into { id, label } options. Reads
202
+ * `model_id` (the wire name sent as `model`) and `model_name` (display). */
203
+ export function parseAIHubMixCatalog(data, options) {
204
+ const rows = data?.data;
205
+ if (!Array.isArray(rows))
206
+ return [];
207
+ const seen = new Set();
208
+ const out = [];
209
+ for (const row of rows) {
210
+ const id = typeof row?.model_id === 'string'
211
+ ? row.model_id
212
+ : '';
213
+ if (!id || seen.has(id))
214
+ continue;
215
+ if (options?.chatOnly &&
216
+ aihubmixRowTypes(row).some((t) => AIHUBMIX_MEDIA_GENERATION_TYPES.has(t))) {
217
+ continue;
218
+ }
219
+ seen.add(id);
220
+ const name = typeof row?.model_name === 'string'
221
+ ? row.model_name
222
+ : '';
223
+ out.push({ id, label: name || id });
224
+ }
225
+ return out;
226
+ }
227
+ // Aspect -> pixel size for a chat `generate_image` tool. Tuned for the
228
+ // default model (gpt-image-1, which accepts 1024x1024 / 1536x1024 /
229
+ // 1024x1536). A CLI/media renderer path may use a model-aware size resolver
230
+ // instead; this conservative table keeps a tool call from 400-ing on an
231
+ // unsupported size.
232
+ export const AIHUBMIX_IMAGE_ASPECT_TO_SIZE = {
233
+ '1:1': '1024x1024',
234
+ '16:9': '1536x1024',
235
+ '9:16': '1024x1536',
236
+ '4:3': '1536x1024',
237
+ '3:4': '1024x1536',
238
+ };
239
+ //# sourceMappingURL=aihubmix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aihubmix.js","sourceRoot":"","sources":["../../src/providers/aihubmix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,4EAA4E;AAC5E,6EAA6E;AAC7E,8EAA8E;AAC9E,uDAAuD;AACvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAE5C,2EAA2E;AAC3E,wEAAwE;AACxE,mEAAmE;AACnE,MAAM,CAAC,MAAM,yBAAyB,GAAG,yBAAyB,CAAC;AAEnE;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO;QACL,aAAa,EAAE,UAAU,MAAM,EAAE;QACjC,GAAG,qBAAqB,EAAE;KAC3B,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;AAC3C,CAAC;AAUD,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7C,2EAA2E;IAC3E,2EAA2E;IAC3E,IACE,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;WAC/C,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;WAC7B,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAC3B,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,WAAW,CAAC;IAC/C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,OAAO,IAAI,yBAAyB,CAAC,CAAC,MAAM,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,sBAAsB,CAAC;IAChC,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,sBAAsB,CAAC,OAAe,EAAE,SAAiB;IACvE,OAAO,CACL,GAAG,sBAAsB,CAAC,OAAO,CAAC,wBAAwB;UACxD,GAAG,kBAAkB,CAAC,SAAS,CAAC,kBAAkB,CACrD,CAAC;AACJ,CAAC;AAWD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,GAA+B,EAC/B,OAA8D;IAE9D,MAAM,GAAG,GAAG,sBAAsB,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE;QAC9B,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,gBAAgB,EAAE,GAAG,CAAC,MAAM;YAC5B,GAAG,qBAAqB,EAAE;SAC3B;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;YAC3D,gBAAgB,EAAE;gBAChB,kBAAkB,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;gBACrC,WAAW,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE;aACzC;SACF,CAAC;KACH,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAE9B,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;IAC1D,MAAM,GAAG,GAAG,KAAK;SACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC;SACvD,IAAI,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CACb,4DAA4D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CACjG,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED,4EAA4E;AAC5E,2EAA2E;AAC3E,2EAA2E;AAC3E,0EAA0E;AAC1E,4EAA4E;AAC5E,kDAAkD;AAClD,MAAM,oBAAoB,GAA2B;IACnD,sBAAsB,EAAE,aAAa;IACrC,mBAAmB,EAAE,UAAU;IAC/B,gBAAgB,EAAE,OAAO;CAC1B,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,OAAO,oBAAoB,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,4EAA4E;AAC5E,oEAAoE;AACpE,8EAA8E;AAC9E,8EAA8E;AAC9E,gFAAgF;AAChF,gCAAgC;AAChC,gCAAgC;AAChC,gCAAgC;AAChC,gEAAgE;AAChE,8DAA8D;AAC9D,MAAM,UAAU,oBAAoB,CAAC,SAAiB,EAAE,SAAiB;IACvE,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,IAAI,OAAO,GAAoB,IAAI,CAAC;IACpC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SACxC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;SAC/C,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,gEAAgE;QAChE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,wEAAwE;IACxE,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAC5B,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAClE,OAAO,CAAC,CAAC,CAAE,CACZ,CAAC;IACF,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAYD,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,IAAyB;IAC3E,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,IAAI,yBAAyB,CAAC,CAAC,MAAM,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,sBAAsB,CAAC;IAClC,CAAC;IACD,OAAO,GAAG,MAAM,uBAAuB,IAAI,EAAE,CAAC;AAChD,CAAC;AAOD,yEAAyE;AACzE,oEAAoE;AACpE,2EAA2E;AAC3E,uCAAuC;AACvC,MAAM,+BAA+B,GAAG,IAAI,GAAG,CAAC,CAAC,kBAAkB,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAEtF,SAAS,gBAAgB,CAAC,GAAY;IACpC,MAAM,GAAG,GAAI,GAA2B,EAAE,KAAK,CAAC;IAChD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO,GAAG;SACP,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SAClC,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAaD;6EAC6E;AAC7E,MAAM,UAAU,oBAAoB,CAClC,IAAa,EACb,OAAqC;IAErC,MAAM,IAAI,GAAI,IAA2B,EAAE,IAAI,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,OAAQ,GAA8B,EAAE,QAAQ,KAAK,QAAQ;YACtE,CAAC,CAAE,GAA4B,CAAC,QAAQ;YACxC,CAAC,CAAC,EAAE,CAAC;QACP,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QAClC,IACE,OAAO,EAAE,QAAQ;YACjB,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,+BAA+B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACzE,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,MAAM,IAAI,GAAG,OAAQ,GAAgC,EAAE,UAAU,KAAK,QAAQ;YAC5E,CAAC,CAAE,GAA8B,CAAC,UAAU;YAC5C,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,uEAAuE;AACvE,oEAAoE;AACpE,4EAA4E;AAC5E,wEAAwE;AACxE,oBAAoB;AACpB,MAAM,CAAC,MAAM,6BAA6B,GAA2B;IACnE,KAAK,EAAE,WAAW;IAClB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;CACnB,CAAC"}
@@ -0,0 +1,116 @@
1
+ import { type TurnEndReason } from './turn-end-guard.js';
2
+ export interface AnthropicTextBlockParam {
3
+ readonly type: 'text';
4
+ readonly text: string;
5
+ }
6
+ export interface AnthropicToolUseBlockParam {
7
+ readonly type: 'tool_use';
8
+ readonly id: string;
9
+ readonly name: string;
10
+ readonly input: unknown;
11
+ }
12
+ export interface AnthropicToolResultBlockParam {
13
+ readonly type: 'tool_result';
14
+ readonly tool_use_id: string;
15
+ readonly content: string;
16
+ readonly is_error?: boolean;
17
+ }
18
+ export type AnthropicContentBlockParam = AnthropicTextBlockParam | AnthropicToolUseBlockParam | AnthropicToolResultBlockParam;
19
+ export interface AnthropicMessageParam {
20
+ readonly role: 'user' | 'assistant';
21
+ readonly content: string | readonly AnthropicContentBlockParam[];
22
+ }
23
+ export interface AnthropicToolDef {
24
+ readonly name: string;
25
+ readonly description?: string;
26
+ readonly input_schema: Record<string, unknown>;
27
+ }
28
+ export interface AnthropicToolCall {
29
+ readonly id: string;
30
+ readonly name: string;
31
+ readonly input: unknown;
32
+ }
33
+ export interface AnthropicToolResult {
34
+ readonly content: string;
35
+ readonly isError?: boolean;
36
+ }
37
+ /** Host-owned tool execution. This module only knows how to run the wire-protocol loop — what a tool actually *does* is always the caller's business (matching `@jini-ai/http`'s `RunHttpDeps.onStarted`/`db-ops.ts`'s injected `DaemonDbOperations` "the collaborator is always supplied" convention). */
38
+ export type AnthropicToolExecutor = (call: AnthropicToolCall) => Promise<AnthropicToolResult>;
39
+ /** Why a `runAnthropicToolTurn` call ended its event stream. */
40
+ export type AnthropicTurnEndReason = TurnEndReason;
41
+ export type AnthropicTurnEvent = {
42
+ readonly type: 'status';
43
+ readonly label: string;
44
+ } | {
45
+ readonly type: 'text_delta';
46
+ readonly delta: string;
47
+ } | {
48
+ readonly type: 'tool_use';
49
+ readonly id: string;
50
+ readonly name: string;
51
+ readonly input: unknown;
52
+ } | {
53
+ readonly type: 'tool_result';
54
+ readonly toolUseId: string;
55
+ readonly content: string;
56
+ readonly isError: boolean;
57
+ } | {
58
+ readonly type: 'usage';
59
+ readonly usage: Record<string, unknown> | null;
60
+ } | {
61
+ readonly type: 'fabricated_role_marker';
62
+ readonly marker: string;
63
+ readonly messageId: string;
64
+ } | {
65
+ readonly type: 'error';
66
+ readonly message: string;
67
+ readonly code?: string;
68
+ } | {
69
+ readonly type: 'end';
70
+ readonly reason: AnthropicTurnEndReason;
71
+ };
72
+ export interface AnthropicTurnOptions {
73
+ readonly apiKey: string;
74
+ /** Defaults to `https://api.anthropic.com`. Overridable for BYOK-compatible gateways. */
75
+ readonly baseUrl?: string;
76
+ /** Defaults to `2023-06-01`, Anthropic's current stable Messages API version. */
77
+ readonly apiVersion?: string;
78
+ readonly model: string;
79
+ readonly system?: string;
80
+ readonly messages: readonly AnthropicMessageParam[];
81
+ readonly tools?: readonly AnthropicToolDef[];
82
+ readonly maxTokens: number;
83
+ readonly temperature?: number;
84
+ /** Tool-loop iteration ceiling (a single request counts as one iteration once it returns `stop_reason: 'tool_use'`). Defaults to 8 — generous for a real agentic turn, bounded so a misbehaving tool/model pair cannot loop forever. */
85
+ readonly maxToolTurns?: number;
86
+ /** Omit to run a single request with no tool-result feedback loop (pending tool calls are still emitted as `tool_use` events; the turn simply ends after the first response). */
87
+ readonly executeTool?: AnthropicToolExecutor;
88
+ readonly onEvent: (event: AnthropicTurnEvent) => void;
89
+ readonly signal?: AbortSignal;
90
+ /**
91
+ * Caller-supplied extra headers merged onto every request (e.g. an
92
+ * OpenRouter-shaped gateway's `HTTP-Referer`/`X-Title` pair, or a proxy's
93
+ * own routing header). Never hardcode a caller/product identity string
94
+ * here — this is the generalized fix for the confirmed OD product-identity
95
+ * leak documented in this module's header comment.
96
+ */
97
+ readonly extraHeaders?: Record<string, string>;
98
+ }
99
+ export interface AnthropicTurnResult {
100
+ readonly stopReason: string | null;
101
+ readonly toolTurns: number;
102
+ }
103
+ /**
104
+ * Runs a full Anthropic Messages API turn, including the tool-execution
105
+ * loop when `options.executeTool` is supplied and the model requests tool
106
+ * use. Emits a generic event stream via `options.onEvent` — a caller (e.g.
107
+ * `@jini-ai/http`'s `model-proxy.ts`) adapts those events onto an outbound SSE
108
+ * channel; this module has no knowledge of HTTP/Express.
109
+ *
110
+ * Guarantees exactly one `{type: 'end'}` event per call, regardless of which
111
+ * of the four exit paths (contamination, normal stop, max-tool-turns,
112
+ * request/stream error) triggers it — the fix for OD's confirmed duplicate-
113
+ * `end`-event bug (see module doc).
114
+ */
115
+ export declare function runAnthropicToolTurn(options: AnthropicTurnOptions): Promise<AnthropicTurnResult>;
116
+ //# sourceMappingURL=anthropic-messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-messages.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic-messages.ts"],"names":[],"mappings":"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"}