qlogicagent 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 (450) hide show
  1. package/README.md +45 -0
  2. package/dist/agent/agent.d.ts +44 -0
  3. package/dist/agent/agent.d.ts.map +1 -0
  4. package/dist/agent/agent.js +114 -0
  5. package/dist/agent/agent.js.map +1 -0
  6. package/dist/agent/tool-loop.d.ts +65 -0
  7. package/dist/agent/tool-loop.d.ts.map +1 -0
  8. package/dist/agent/tool-loop.js +576 -0
  9. package/dist/agent/tool-loop.js.map +1 -0
  10. package/dist/agent/types.d.ts +176 -0
  11. package/dist/agent/types.d.ts.map +1 -0
  12. package/dist/agent/types.js +15 -0
  13. package/dist/agent/types.js.map +1 -0
  14. package/dist/cli/main.d.ts +12 -0
  15. package/dist/cli/main.d.ts.map +1 -0
  16. package/dist/cli/main.js +24 -0
  17. package/dist/cli/main.js.map +1 -0
  18. package/dist/cli/stdio-server.d.ts +46 -0
  19. package/dist/cli/stdio-server.d.ts.map +1 -0
  20. package/dist/cli/stdio-server.js +464 -0
  21. package/dist/cli/stdio-server.js.map +1 -0
  22. package/dist/config/config.d.ts +18 -0
  23. package/dist/config/config.d.ts.map +1 -0
  24. package/dist/config/config.js +22 -0
  25. package/dist/config/config.js.map +1 -0
  26. package/dist/contracts/hooks.d.ts +121 -0
  27. package/dist/contracts/hooks.d.ts.map +1 -0
  28. package/dist/contracts/hooks.js +8 -0
  29. package/dist/contracts/hooks.js.map +1 -0
  30. package/dist/contracts/index.d.ts +11 -0
  31. package/dist/contracts/index.d.ts.map +1 -0
  32. package/dist/contracts/index.js +11 -0
  33. package/dist/contracts/index.js.map +1 -0
  34. package/dist/contracts/planner.d.ts +36 -0
  35. package/dist/contracts/planner.d.ts.map +1 -0
  36. package/dist/contracts/planner.js +3 -0
  37. package/dist/contracts/planner.js.map +1 -0
  38. package/dist/contracts/skill-candidate.d.ts +64 -0
  39. package/dist/contracts/skill-candidate.d.ts.map +1 -0
  40. package/dist/contracts/skill-candidate.js +196 -0
  41. package/dist/contracts/skill-candidate.js.map +1 -0
  42. package/dist/contracts/todo.d.ts +15 -0
  43. package/dist/contracts/todo.d.ts.map +1 -0
  44. package/dist/contracts/todo.js +10 -0
  45. package/dist/contracts/todo.js.map +1 -0
  46. package/dist/index.d.ts +14 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +16 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/llm/builtin-providers.d.ts +11 -0
  51. package/dist/llm/builtin-providers.d.ts.map +1 -0
  52. package/dist/llm/builtin-providers.js +532 -0
  53. package/dist/llm/builtin-providers.js.map +1 -0
  54. package/dist/llm/index.d.ts +16 -0
  55. package/dist/llm/index.d.ts.map +1 -0
  56. package/dist/llm/index.js +15 -0
  57. package/dist/llm/index.js.map +1 -0
  58. package/dist/llm/llm-client.d.ts +44 -0
  59. package/dist/llm/llm-client.d.ts.map +1 -0
  60. package/dist/llm/llm-client.js +68 -0
  61. package/dist/llm/llm-client.js.map +1 -0
  62. package/dist/llm/model-catalog.d.ts +54 -0
  63. package/dist/llm/model-catalog.d.ts.map +1 -0
  64. package/dist/llm/model-catalog.js +192 -0
  65. package/dist/llm/model-catalog.js.map +1 -0
  66. package/dist/llm/provider-def.d.ts +60 -0
  67. package/dist/llm/provider-def.d.ts.map +1 -0
  68. package/dist/llm/provider-def.js +13 -0
  69. package/dist/llm/provider-def.js.map +1 -0
  70. package/dist/llm/provider-registry.d.ts +55 -0
  71. package/dist/llm/provider-registry.d.ts.map +1 -0
  72. package/dist/llm/provider-registry.js +148 -0
  73. package/dist/llm/provider-registry.js.map +1 -0
  74. package/dist/llm/transport.d.ts +63 -0
  75. package/dist/llm/transport.d.ts.map +1 -0
  76. package/dist/llm/transport.js +28 -0
  77. package/dist/llm/transport.js.map +1 -0
  78. package/dist/llm/transports/anthropic-messages.d.ts +32 -0
  79. package/dist/llm/transports/anthropic-messages.d.ts.map +1 -0
  80. package/dist/llm/transports/anthropic-messages.js +294 -0
  81. package/dist/llm/transports/anthropic-messages.js.map +1 -0
  82. package/dist/llm/transports/openai-chat.d.ts +37 -0
  83. package/dist/llm/transports/openai-chat.d.ts.map +1 -0
  84. package/dist/llm/transports/openai-chat.js +166 -0
  85. package/dist/llm/transports/openai-chat.js.map +1 -0
  86. package/dist/orchestration/agent-registry.d.ts +42 -0
  87. package/dist/orchestration/agent-registry.d.ts.map +1 -0
  88. package/dist/orchestration/agent-registry.js +117 -0
  89. package/dist/orchestration/agent-registry.js.map +1 -0
  90. package/dist/orchestration/approval-aware-tool-plan.d.ts +33 -0
  91. package/dist/orchestration/approval-aware-tool-plan.d.ts.map +1 -0
  92. package/dist/orchestration/approval-aware-tool-plan.js +88 -0
  93. package/dist/orchestration/approval-aware-tool-plan.js.map +1 -0
  94. package/dist/orchestration/context-compression.d.ts +221 -0
  95. package/dist/orchestration/context-compression.d.ts.map +1 -0
  96. package/dist/orchestration/context-compression.js +584 -0
  97. package/dist/orchestration/context-compression.js.map +1 -0
  98. package/dist/orchestration/conversation-repair.d.ts +62 -0
  99. package/dist/orchestration/conversation-repair.d.ts.map +1 -0
  100. package/dist/orchestration/conversation-repair.js +430 -0
  101. package/dist/orchestration/conversation-repair.js.map +1 -0
  102. package/dist/orchestration/curator-scheduler.d.ts +120 -0
  103. package/dist/orchestration/curator-scheduler.d.ts.map +1 -0
  104. package/dist/orchestration/curator-scheduler.js +136 -0
  105. package/dist/orchestration/curator-scheduler.js.map +1 -0
  106. package/dist/orchestration/embedded-failover-policy.d.ts +111 -0
  107. package/dist/orchestration/embedded-failover-policy.d.ts.map +1 -0
  108. package/dist/orchestration/embedded-failover-policy.js +169 -0
  109. package/dist/orchestration/embedded-failover-policy.js.map +1 -0
  110. package/dist/orchestration/error-classification.d.ts +13 -0
  111. package/dist/orchestration/error-classification.d.ts.map +1 -0
  112. package/dist/orchestration/error-classification.js +78 -0
  113. package/dist/orchestration/error-classification.js.map +1 -0
  114. package/dist/orchestration/failover-classification.d.ts +9 -0
  115. package/dist/orchestration/failover-classification.d.ts.map +1 -0
  116. package/dist/orchestration/failover-classification.js +382 -0
  117. package/dist/orchestration/failover-classification.js.map +1 -0
  118. package/dist/orchestration/failover-error.d.ts +34 -0
  119. package/dist/orchestration/failover-error.d.ts.map +1 -0
  120. package/dist/orchestration/failover-error.js +199 -0
  121. package/dist/orchestration/failover-error.js.map +1 -0
  122. package/dist/orchestration/fork-subagent.d.ts +101 -0
  123. package/dist/orchestration/fork-subagent.d.ts.map +1 -0
  124. package/dist/orchestration/fork-subagent.js +99 -0
  125. package/dist/orchestration/fork-subagent.js.map +1 -0
  126. package/dist/orchestration/index.d.ts +121 -0
  127. package/dist/orchestration/index.d.ts.map +1 -0
  128. package/dist/orchestration/index.js +268 -0
  129. package/dist/orchestration/index.js.map +1 -0
  130. package/dist/orchestration/memory-flush-policy.d.ts +58 -0
  131. package/dist/orchestration/memory-flush-policy.d.ts.map +1 -0
  132. package/dist/orchestration/memory-flush-policy.js +86 -0
  133. package/dist/orchestration/memory-flush-policy.js.map +1 -0
  134. package/dist/orchestration/memory-provider.d.ts +15 -0
  135. package/dist/orchestration/memory-provider.d.ts.map +1 -0
  136. package/dist/orchestration/memory-provider.js +3 -0
  137. package/dist/orchestration/memory-provider.js.map +1 -0
  138. package/dist/orchestration/parallel-tool-calls.d.ts +42 -0
  139. package/dist/orchestration/parallel-tool-calls.d.ts.map +1 -0
  140. package/dist/orchestration/parallel-tool-calls.js +60 -0
  141. package/dist/orchestration/parallel-tool-calls.js.map +1 -0
  142. package/dist/orchestration/prompt-cache-strategy.d.ts +127 -0
  143. package/dist/orchestration/prompt-cache-strategy.d.ts.map +1 -0
  144. package/dist/orchestration/prompt-cache-strategy.js +229 -0
  145. package/dist/orchestration/prompt-cache-strategy.js.map +1 -0
  146. package/dist/orchestration/reactive-compact.d.ts +74 -0
  147. package/dist/orchestration/reactive-compact.d.ts.map +1 -0
  148. package/dist/orchestration/reactive-compact.js +79 -0
  149. package/dist/orchestration/reactive-compact.js.map +1 -0
  150. package/dist/orchestration/retry-loop.d.ts +23 -0
  151. package/dist/orchestration/retry-loop.d.ts.map +1 -0
  152. package/dist/orchestration/retry-loop.js +25 -0
  153. package/dist/orchestration/retry-loop.js.map +1 -0
  154. package/dist/orchestration/skill-candidate.d.ts +53 -0
  155. package/dist/orchestration/skill-candidate.d.ts.map +1 -0
  156. package/dist/orchestration/skill-candidate.js +142 -0
  157. package/dist/orchestration/skill-candidate.js.map +1 -0
  158. package/dist/orchestration/skill-consolidation.d.ts +124 -0
  159. package/dist/orchestration/skill-consolidation.d.ts.map +1 -0
  160. package/dist/orchestration/skill-consolidation.js +221 -0
  161. package/dist/orchestration/skill-consolidation.js.map +1 -0
  162. package/dist/orchestration/skill-improvement.d.ts +60 -0
  163. package/dist/orchestration/skill-improvement.d.ts.map +1 -0
  164. package/dist/orchestration/skill-improvement.js +67 -0
  165. package/dist/orchestration/skill-improvement.js.map +1 -0
  166. package/dist/orchestration/skill-similarity.d.ts +99 -0
  167. package/dist/orchestration/skill-similarity.d.ts.map +1 -0
  168. package/dist/orchestration/skill-similarity.js +132 -0
  169. package/dist/orchestration/skill-similarity.js.map +1 -0
  170. package/dist/orchestration/streaming-tool-executor.d.ts +74 -0
  171. package/dist/orchestration/streaming-tool-executor.d.ts.map +1 -0
  172. package/dist/orchestration/streaming-tool-executor.js +97 -0
  173. package/dist/orchestration/streaming-tool-executor.js.map +1 -0
  174. package/dist/orchestration/team-orchestration.d.ts +196 -0
  175. package/dist/orchestration/team-orchestration.d.ts.map +1 -0
  176. package/dist/orchestration/team-orchestration.js +370 -0
  177. package/dist/orchestration/team-orchestration.js.map +1 -0
  178. package/dist/orchestration/team-tool-loop-wiring.d.ts +93 -0
  179. package/dist/orchestration/team-tool-loop-wiring.d.ts.map +1 -0
  180. package/dist/orchestration/team-tool-loop-wiring.js +148 -0
  181. package/dist/orchestration/team-tool-loop-wiring.js.map +1 -0
  182. package/dist/orchestration/tool-choice-policy.d.ts +55 -0
  183. package/dist/orchestration/tool-choice-policy.d.ts.map +1 -0
  184. package/dist/orchestration/tool-choice-policy.js +165 -0
  185. package/dist/orchestration/tool-choice-policy.js.map +1 -0
  186. package/dist/orchestration/tool-loop-state.d.ts +51 -0
  187. package/dist/orchestration/tool-loop-state.d.ts.map +1 -0
  188. package/dist/orchestration/tool-loop-state.js +134 -0
  189. package/dist/orchestration/tool-loop-state.js.map +1 -0
  190. package/dist/orchestration/tool-schema.d.ts +40 -0
  191. package/dist/orchestration/tool-schema.d.ts.map +1 -0
  192. package/dist/orchestration/tool-schema.js +298 -0
  193. package/dist/orchestration/tool-schema.js.map +1 -0
  194. package/dist/orchestration/transcript-repair.d.ts +43 -0
  195. package/dist/orchestration/transcript-repair.d.ts.map +1 -0
  196. package/dist/orchestration/transcript-repair.js +427 -0
  197. package/dist/orchestration/transcript-repair.js.map +1 -0
  198. package/dist/orchestration/turn-loop-guard.d.ts +87 -0
  199. package/dist/orchestration/turn-loop-guard.d.ts.map +1 -0
  200. package/dist/orchestration/turn-loop-guard.js +93 -0
  201. package/dist/orchestration/turn-loop-guard.js.map +1 -0
  202. package/dist/orchestration/web-browser-policy.d.ts +18 -0
  203. package/dist/orchestration/web-browser-policy.d.ts.map +1 -0
  204. package/dist/orchestration/web-browser-policy.js +40 -0
  205. package/dist/orchestration/web-browser-policy.js.map +1 -0
  206. package/dist/runtime/context-compression.d.ts +62 -0
  207. package/dist/runtime/context-compression.d.ts.map +1 -0
  208. package/dist/runtime/context-compression.js +275 -0
  209. package/dist/runtime/context-compression.js.map +1 -0
  210. package/dist/runtime/hook-registry.d.ts +13 -0
  211. package/dist/runtime/hook-registry.d.ts.map +1 -0
  212. package/dist/runtime/hook-registry.js +54 -0
  213. package/dist/runtime/hook-registry.js.map +1 -0
  214. package/dist/runtime/memory-hooks.d.ts +24 -0
  215. package/dist/runtime/memory-hooks.d.ts.map +1 -0
  216. package/dist/runtime/memory-hooks.js +66 -0
  217. package/dist/runtime/memory-hooks.js.map +1 -0
  218. package/dist/runtime/tool-eligibility.d.ts +60 -0
  219. package/dist/runtime/tool-eligibility.d.ts.map +1 -0
  220. package/dist/runtime/tool-eligibility.js +112 -0
  221. package/dist/runtime/tool-eligibility.js.map +1 -0
  222. package/dist/skills/index.d.ts +109 -0
  223. package/dist/skills/index.d.ts.map +1 -0
  224. package/dist/skills/index.js +83 -0
  225. package/dist/skills/index.js.map +1 -0
  226. package/dist/skills/memory-extractor.d.ts +65 -0
  227. package/dist/skills/memory-extractor.d.ts.map +1 -0
  228. package/dist/skills/memory-extractor.js +174 -0
  229. package/dist/skills/memory-extractor.js.map +1 -0
  230. package/dist/skills/memory-query-tool.d.ts +44 -0
  231. package/dist/skills/memory-query-tool.d.ts.map +1 -0
  232. package/dist/skills/memory-query-tool.js +128 -0
  233. package/dist/skills/memory-query-tool.js.map +1 -0
  234. package/dist/skills/memory-store.d.ts +67 -0
  235. package/dist/skills/memory-store.d.ts.map +1 -0
  236. package/dist/skills/memory-store.js +229 -0
  237. package/dist/skills/memory-store.js.map +1 -0
  238. package/dist/skills/memory-tool.d.ts +68 -0
  239. package/dist/skills/memory-tool.d.ts.map +1 -0
  240. package/dist/skills/memory-tool.js +193 -0
  241. package/dist/skills/memory-tool.js.map +1 -0
  242. package/dist/skills/portable-tool.d.ts +72 -0
  243. package/dist/skills/portable-tool.d.ts.map +1 -0
  244. package/dist/skills/portable-tool.js +15 -0
  245. package/dist/skills/portable-tool.js.map +1 -0
  246. package/dist/skills/qmemory-adapter.d.ts +53 -0
  247. package/dist/skills/qmemory-adapter.d.ts.map +1 -0
  248. package/dist/skills/qmemory-adapter.js +166 -0
  249. package/dist/skills/qmemory-adapter.js.map +1 -0
  250. package/dist/skills/skill-frontmatter.d.ts +20 -0
  251. package/dist/skills/skill-frontmatter.d.ts.map +1 -0
  252. package/dist/skills/skill-frontmatter.js +345 -0
  253. package/dist/skills/skill-frontmatter.js.map +1 -0
  254. package/dist/skills/skill-guard.d.ts +24 -0
  255. package/dist/skills/skill-guard.d.ts.map +1 -0
  256. package/dist/skills/skill-guard.js +230 -0
  257. package/dist/skills/skill-guard.js.map +1 -0
  258. package/dist/skills/skill-loader.d.ts +17 -0
  259. package/dist/skills/skill-loader.d.ts.map +1 -0
  260. package/dist/skills/skill-loader.js +304 -0
  261. package/dist/skills/skill-loader.js.map +1 -0
  262. package/dist/skills/skill-source.d.ts +120 -0
  263. package/dist/skills/skill-source.d.ts.map +1 -0
  264. package/dist/skills/skill-source.js +127 -0
  265. package/dist/skills/skill-source.js.map +1 -0
  266. package/dist/skills/skill-types.d.ts +200 -0
  267. package/dist/skills/skill-types.d.ts.map +1 -0
  268. package/dist/skills/skill-types.js +7 -0
  269. package/dist/skills/skill-types.js.map +1 -0
  270. package/dist/skills/think-tool.d.ts +17 -0
  271. package/dist/skills/think-tool.d.ts.map +1 -0
  272. package/dist/skills/think-tool.js +60 -0
  273. package/dist/skills/think-tool.js.map +1 -0
  274. package/dist/skills/todo-tool.d.ts +64 -0
  275. package/dist/skills/todo-tool.d.ts.map +1 -0
  276. package/dist/skills/todo-tool.js +115 -0
  277. package/dist/skills/todo-tool.js.map +1 -0
  278. package/dist/skills/tools/agent-tool.d.ts +92 -0
  279. package/dist/skills/tools/agent-tool.d.ts.map +1 -0
  280. package/dist/skills/tools/agent-tool.js +143 -0
  281. package/dist/skills/tools/agent-tool.js.map +1 -0
  282. package/dist/skills/tools/apply-patch-tool.d.ts +30 -0
  283. package/dist/skills/tools/apply-patch-tool.d.ts.map +1 -0
  284. package/dist/skills/tools/apply-patch-tool.js +185 -0
  285. package/dist/skills/tools/apply-patch-tool.js.map +1 -0
  286. package/dist/skills/tools/ask-user-tool.d.ts +81 -0
  287. package/dist/skills/tools/ask-user-tool.d.ts.map +1 -0
  288. package/dist/skills/tools/ask-user-tool.js +122 -0
  289. package/dist/skills/tools/ask-user-tool.js.map +1 -0
  290. package/dist/skills/tools/brief-tool.d.ts +75 -0
  291. package/dist/skills/tools/brief-tool.d.ts.map +1 -0
  292. package/dist/skills/tools/brief-tool.js +96 -0
  293. package/dist/skills/tools/brief-tool.js.map +1 -0
  294. package/dist/skills/tools/browser-tool.d.ts +115 -0
  295. package/dist/skills/tools/browser-tool.d.ts.map +1 -0
  296. package/dist/skills/tools/browser-tool.js +156 -0
  297. package/dist/skills/tools/browser-tool.js.map +1 -0
  298. package/dist/skills/tools/checkpoint-tool.d.ts +67 -0
  299. package/dist/skills/tools/checkpoint-tool.d.ts.map +1 -0
  300. package/dist/skills/tools/checkpoint-tool.js +103 -0
  301. package/dist/skills/tools/checkpoint-tool.js.map +1 -0
  302. package/dist/skills/tools/config-tool.d.ts +64 -0
  303. package/dist/skills/tools/config-tool.d.ts.map +1 -0
  304. package/dist/skills/tools/config-tool.js +144 -0
  305. package/dist/skills/tools/config-tool.js.map +1 -0
  306. package/dist/skills/tools/cron-tool.d.ts +117 -0
  307. package/dist/skills/tools/cron-tool.d.ts.map +1 -0
  308. package/dist/skills/tools/cron-tool.js +176 -0
  309. package/dist/skills/tools/cron-tool.js.map +1 -0
  310. package/dist/skills/tools/edit-tool.d.ts +44 -0
  311. package/dist/skills/tools/edit-tool.d.ts.map +1 -0
  312. package/dist/skills/tools/edit-tool.js +71 -0
  313. package/dist/skills/tools/edit-tool.js.map +1 -0
  314. package/dist/skills/tools/exec-tool.d.ts +103 -0
  315. package/dist/skills/tools/exec-tool.d.ts.map +1 -0
  316. package/dist/skills/tools/exec-tool.js +134 -0
  317. package/dist/skills/tools/exec-tool.js.map +1 -0
  318. package/dist/skills/tools/image-generate-tool.d.ts +63 -0
  319. package/dist/skills/tools/image-generate-tool.d.ts.map +1 -0
  320. package/dist/skills/tools/image-generate-tool.js +68 -0
  321. package/dist/skills/tools/image-generate-tool.js.map +1 -0
  322. package/dist/skills/tools/instructions-tool.d.ts +104 -0
  323. package/dist/skills/tools/instructions-tool.d.ts.map +1 -0
  324. package/dist/skills/tools/instructions-tool.js +188 -0
  325. package/dist/skills/tools/instructions-tool.js.map +1 -0
  326. package/dist/skills/tools/lsp-tool.d.ts +154 -0
  327. package/dist/skills/tools/lsp-tool.d.ts.map +1 -0
  328. package/dist/skills/tools/lsp-tool.js +228 -0
  329. package/dist/skills/tools/lsp-tool.js.map +1 -0
  330. package/dist/skills/tools/mcp-client-types.d.ts +270 -0
  331. package/dist/skills/tools/mcp-client-types.d.ts.map +1 -0
  332. package/dist/skills/tools/mcp-client-types.js +54 -0
  333. package/dist/skills/tools/mcp-client-types.js.map +1 -0
  334. package/dist/skills/tools/mcp-tool.d.ts +250 -0
  335. package/dist/skills/tools/mcp-tool.d.ts.map +1 -0
  336. package/dist/skills/tools/mcp-tool.js +504 -0
  337. package/dist/skills/tools/mcp-tool.js.map +1 -0
  338. package/dist/skills/tools/memory-tool.d.ts +75 -0
  339. package/dist/skills/tools/memory-tool.d.ts.map +1 -0
  340. package/dist/skills/tools/memory-tool.js +89 -0
  341. package/dist/skills/tools/memory-tool.js.map +1 -0
  342. package/dist/skills/tools/monitor-tool.d.ts +114 -0
  343. package/dist/skills/tools/monitor-tool.d.ts.map +1 -0
  344. package/dist/skills/tools/monitor-tool.js +132 -0
  345. package/dist/skills/tools/monitor-tool.js.map +1 -0
  346. package/dist/skills/tools/music-generate-tool.d.ts +56 -0
  347. package/dist/skills/tools/music-generate-tool.d.ts.map +1 -0
  348. package/dist/skills/tools/music-generate-tool.js +63 -0
  349. package/dist/skills/tools/music-generate-tool.js.map +1 -0
  350. package/dist/skills/tools/notify-tool.d.ts +54 -0
  351. package/dist/skills/tools/notify-tool.d.ts.map +1 -0
  352. package/dist/skills/tools/notify-tool.js +63 -0
  353. package/dist/skills/tools/notify-tool.js.map +1 -0
  354. package/dist/skills/tools/patch-tool.d.ts +46 -0
  355. package/dist/skills/tools/patch-tool.d.ts.map +1 -0
  356. package/dist/skills/tools/patch-tool.js +506 -0
  357. package/dist/skills/tools/patch-tool.js.map +1 -0
  358. package/dist/skills/tools/pdf-tool.d.ts +67 -0
  359. package/dist/skills/tools/pdf-tool.d.ts.map +1 -0
  360. package/dist/skills/tools/pdf-tool.js +89 -0
  361. package/dist/skills/tools/pdf-tool.js.map +1 -0
  362. package/dist/skills/tools/plan-mode-tool.d.ts +60 -0
  363. package/dist/skills/tools/plan-mode-tool.d.ts.map +1 -0
  364. package/dist/skills/tools/plan-mode-tool.js +123 -0
  365. package/dist/skills/tools/plan-mode-tool.js.map +1 -0
  366. package/dist/skills/tools/read-tool.d.ts +52 -0
  367. package/dist/skills/tools/read-tool.d.ts.map +1 -0
  368. package/dist/skills/tools/read-tool.js +85 -0
  369. package/dist/skills/tools/read-tool.js.map +1 -0
  370. package/dist/skills/tools/repl-tool.d.ts +71 -0
  371. package/dist/skills/tools/repl-tool.d.ts.map +1 -0
  372. package/dist/skills/tools/repl-tool.js +70 -0
  373. package/dist/skills/tools/repl-tool.js.map +1 -0
  374. package/dist/skills/tools/search-tool.d.ts +113 -0
  375. package/dist/skills/tools/search-tool.d.ts.map +1 -0
  376. package/dist/skills/tools/search-tool.js +226 -0
  377. package/dist/skills/tools/search-tool.js.map +1 -0
  378. package/dist/skills/tools/send-message-tool.d.ts +52 -0
  379. package/dist/skills/tools/send-message-tool.d.ts.map +1 -0
  380. package/dist/skills/tools/send-message-tool.js +77 -0
  381. package/dist/skills/tools/send-message-tool.js.map +1 -0
  382. package/dist/skills/tools/skill-list-tool.d.ts +34 -0
  383. package/dist/skills/tools/skill-list-tool.d.ts.map +1 -0
  384. package/dist/skills/tools/skill-list-tool.js +55 -0
  385. package/dist/skills/tools/skill-list-tool.js.map +1 -0
  386. package/dist/skills/tools/skill-manage-tool.d.ts +74 -0
  387. package/dist/skills/tools/skill-manage-tool.d.ts.map +1 -0
  388. package/dist/skills/tools/skill-manage-tool.js +154 -0
  389. package/dist/skills/tools/skill-manage-tool.js.map +1 -0
  390. package/dist/skills/tools/skill-view-tool.d.ts +38 -0
  391. package/dist/skills/tools/skill-view-tool.d.ts.map +1 -0
  392. package/dist/skills/tools/skill-view-tool.js +73 -0
  393. package/dist/skills/tools/skill-view-tool.js.map +1 -0
  394. package/dist/skills/tools/sleep-tool.d.ts +50 -0
  395. package/dist/skills/tools/sleep-tool.d.ts.map +1 -0
  396. package/dist/skills/tools/sleep-tool.js +82 -0
  397. package/dist/skills/tools/sleep-tool.js.map +1 -0
  398. package/dist/skills/tools/structured-output-tool.d.ts +117 -0
  399. package/dist/skills/tools/structured-output-tool.d.ts.map +1 -0
  400. package/dist/skills/tools/structured-output-tool.js +177 -0
  401. package/dist/skills/tools/structured-output-tool.js.map +1 -0
  402. package/dist/skills/tools/task-tool.d.ts +105 -0
  403. package/dist/skills/tools/task-tool.d.ts.map +1 -0
  404. package/dist/skills/tools/task-tool.js +162 -0
  405. package/dist/skills/tools/task-tool.js.map +1 -0
  406. package/dist/skills/tools/team-tool.d.ts +90 -0
  407. package/dist/skills/tools/team-tool.d.ts.map +1 -0
  408. package/dist/skills/tools/team-tool.js +106 -0
  409. package/dist/skills/tools/team-tool.js.map +1 -0
  410. package/dist/skills/tools/tool-search-tool.d.ts +52 -0
  411. package/dist/skills/tools/tool-search-tool.d.ts.map +1 -0
  412. package/dist/skills/tools/tool-search-tool.js +111 -0
  413. package/dist/skills/tools/tool-search-tool.js.map +1 -0
  414. package/dist/skills/tools/tts-tool.d.ts +39 -0
  415. package/dist/skills/tools/tts-tool.d.ts.map +1 -0
  416. package/dist/skills/tools/tts-tool.js +46 -0
  417. package/dist/skills/tools/tts-tool.js.map +1 -0
  418. package/dist/skills/tools/video-edit-tool.d.ts +70 -0
  419. package/dist/skills/tools/video-edit-tool.d.ts.map +1 -0
  420. package/dist/skills/tools/video-edit-tool.js +75 -0
  421. package/dist/skills/tools/video-edit-tool.js.map +1 -0
  422. package/dist/skills/tools/video-generate-tool.d.ts +63 -0
  423. package/dist/skills/tools/video-generate-tool.d.ts.map +1 -0
  424. package/dist/skills/tools/video-generate-tool.js +67 -0
  425. package/dist/skills/tools/video-generate-tool.js.map +1 -0
  426. package/dist/skills/tools/video-merge-tool.d.ts +106 -0
  427. package/dist/skills/tools/video-merge-tool.d.ts.map +1 -0
  428. package/dist/skills/tools/video-merge-tool.js +93 -0
  429. package/dist/skills/tools/video-merge-tool.js.map +1 -0
  430. package/dist/skills/tools/video-upscale-tool.d.ts +46 -0
  431. package/dist/skills/tools/video-upscale-tool.d.ts.map +1 -0
  432. package/dist/skills/tools/video-upscale-tool.js +53 -0
  433. package/dist/skills/tools/video-upscale-tool.js.map +1 -0
  434. package/dist/skills/tools/web-fetch-tool.d.ts +79 -0
  435. package/dist/skills/tools/web-fetch-tool.d.ts.map +1 -0
  436. package/dist/skills/tools/web-fetch-tool.js +93 -0
  437. package/dist/skills/tools/web-fetch-tool.js.map +1 -0
  438. package/dist/skills/tools/web-search-tool.d.ts +58 -0
  439. package/dist/skills/tools/web-search-tool.d.ts.map +1 -0
  440. package/dist/skills/tools/web-search-tool.js +87 -0
  441. package/dist/skills/tools/web-search-tool.js.map +1 -0
  442. package/dist/skills/tools/worktree-tool.d.ts +70 -0
  443. package/dist/skills/tools/worktree-tool.d.ts.map +1 -0
  444. package/dist/skills/tools/worktree-tool.js +148 -0
  445. package/dist/skills/tools/worktree-tool.js.map +1 -0
  446. package/dist/skills/tools/write-tool.d.ts +46 -0
  447. package/dist/skills/tools/write-tool.d.ts.map +1 -0
  448. package/dist/skills/tools/write-tool.js +82 -0
  449. package/dist/skills/tools/write-tool.js.map +1 -0
  450. package/package.json +41 -0
@@ -0,0 +1,68 @@
1
+ /**
2
+ * LLM Client factory — resolves ProviderDef → creates LLMTransport instance.
3
+ *
4
+ * Replaces the old createAdminInferProxyClient() call chain.
5
+ * User API key + ProviderDef → direct provider connection.
6
+ */
7
+ import { OpenAIChatTransport } from "./transports/openai-chat.js";
8
+ import { AnthropicMessagesTransport } from "./transports/anthropic-messages.js";
9
+ /**
10
+ * Create an LLM client from config + registry.
11
+ *
12
+ * 1. Look up provider in registry
13
+ * 2. Apply baseUrl override if provided
14
+ * 3. Instantiate the correct transport
15
+ */
16
+ export function createLLMClient(config, registry) {
17
+ // Apply user overrides to registry
18
+ if (config.baseUrl) {
19
+ registry.applyOverride(config.provider, { baseUrl: config.baseUrl });
20
+ }
21
+ const providerDef = registry.getProvider(config.provider);
22
+ if (!providerDef) {
23
+ throw new Error(`Unknown LLM provider: "${config.provider}". ` +
24
+ `Available: ${registry.listProviders().map((p) => p.id).join(", ")}`);
25
+ }
26
+ const baseUrl = config.baseUrl ?? providerDef.baseUrl;
27
+ const transport = createTransport(providerDef, baseUrl);
28
+ return {
29
+ transport,
30
+ apiKey: config.apiKey,
31
+ resolvedModel: config.model,
32
+ providerDef,
33
+ };
34
+ }
35
+ /**
36
+ * Auto-detect provider from API key environment variables.
37
+ * Scans registry for providers whose env vars are set.
38
+ * Returns the first match.
39
+ */
40
+ export function autoDetectProvider(registry) {
41
+ for (const provider of registry.listProviders()) {
42
+ const key = registry.resolveApiKey(provider.id);
43
+ if (key) {
44
+ return {
45
+ providerId: provider.id,
46
+ apiKey: key,
47
+ defaultModel: provider.defaultModel ?? provider.models?.[0]?.id ?? "",
48
+ };
49
+ }
50
+ }
51
+ return undefined;
52
+ }
53
+ function createTransport(providerDef, baseUrl) {
54
+ switch (providerDef.transport) {
55
+ case "openai-chat":
56
+ return new OpenAIChatTransport({
57
+ baseUrl,
58
+ extraHeaders: providerDef.extraHeaders,
59
+ supportsStreamOptions: providerDef.supportsStreamOptions,
60
+ omitZeroTemperature: providerDef.omitZeroTemperature,
61
+ });
62
+ case "anthropic-messages":
63
+ return new AnthropicMessagesTransport({ baseUrl });
64
+ default:
65
+ throw new Error(`Unsupported transport type: "${providerDef.transport}" for provider "${providerDef.id}"`);
66
+ }
67
+ }
68
+ //# sourceMappingURL=llm-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-client.js","sourceRoot":"","sources":["../../src/llm/llm-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAoBhF;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC9B,MAAuB,EACvB,QAA0B;IAE1B,mCAAmC;IACnC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1D,IAAI,CAAC,WAAW,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACd,0BAA0B,MAAM,CAAC,QAAQ,KAAK;YAC7C,cAAc,QAAQ,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrE,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC;IACtD,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAExD,OAAO;QACN,SAAS;QACT,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,aAAa,EAAE,MAAM,CAAC,KAAK;QAC3B,WAAW;KACX,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CACjC,QAA0B;IAE1B,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAChD,IAAI,GAAG,EAAE,CAAC;YACT,OAAO;gBACN,UAAU,EAAE,QAAQ,CAAC,EAAE;gBACvB,MAAM,EAAE,GAAG;gBACX,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE;aACrE,CAAC;QACH,CAAC;IACF,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,eAAe,CACvB,WAAwB,EACxB,OAAe;IAEf,QAAQ,WAAW,CAAC,SAAS,EAAE,CAAC;QAC/B,KAAK,aAAa;YACjB,OAAO,IAAI,mBAAmB,CAAC;gBAC9B,OAAO;gBACP,YAAY,EAAE,WAAW,CAAC,YAAY;gBACtC,qBAAqB,EAAE,WAAW,CAAC,qBAAqB;gBACxD,mBAAmB,EAAE,WAAW,CAAC,mBAAmB;aACpD,CAAC,CAAC;QAEJ,KAAK,oBAAoB;YACxB,OAAO,IAAI,0BAA0B,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAEpD;YACC,MAAM,IAAI,KAAK,CACd,gCAAgC,WAAW,CAAC,SAAS,mBAAmB,WAAW,CAAC,EAAE,GAAG,CACzF,CAAC;IACJ,CAAC;AACF,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * ModelCatalog — remote model directory with disk cache + fallback.
3
+ *
4
+ * Fetches model metadata from models.dev (open community catalog, 4000+ models).
5
+ * Aligned with Hermes agent/models_dev.py caching strategy.
6
+ *
7
+ * Three-layer fallback:
8
+ * 1. In-memory cache (process-level, TTL check against disk mtime)
9
+ * 2. Disk cache (~/.openclaw/cache/model_catalog.json)
10
+ * 3. Remote fetch (https://models.dev/api.json)
11
+ * 4. Stale disk cache (if remote fails)
12
+ * 5. Empty (caller falls back to builtin-providers.ts hardcoded)
13
+ *
14
+ * Non-blocking: first startup without cache returns empty immediately,
15
+ * triggers background async fetch. Agent uses builtin providers until
16
+ * catalog arrives.
17
+ */
18
+ import type { ModelInfo } from "./provider-def.js";
19
+ export declare class ModelCatalog {
20
+ private cache;
21
+ private cacheDir;
22
+ private cacheFile;
23
+ private ttlMs;
24
+ private fetching;
25
+ private lastFetchAttempt;
26
+ constructor(opts?: {
27
+ cacheDir?: string;
28
+ ttlMs?: number;
29
+ });
30
+ /**
31
+ * Get models for a provider. Non-blocking: returns whatever is cached.
32
+ * Triggers background refresh if stale.
33
+ */
34
+ getModels(providerId: string): ModelInfo[];
35
+ /**
36
+ * Get a single model by provider + model id.
37
+ */
38
+ getModel(providerId: string, modelId: string): ModelInfo | undefined;
39
+ /**
40
+ * List all known provider ids from the catalog.
41
+ */
42
+ listProviderIds(): string[];
43
+ /**
44
+ * Force refresh from remote. Returns true if successful.
45
+ */
46
+ refreshCatalog(): Promise<boolean>;
47
+ private ensureLoaded;
48
+ private isStale;
49
+ private loadFromDisk;
50
+ private saveToDisk;
51
+ private backgroundFetch;
52
+ private fetchRemote;
53
+ }
54
+ //# sourceMappingURL=model-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-catalog.d.ts","sourceRoot":"","sources":["../../src/llm/model-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,mBAAmB,CAAC;AAkChE,qBAAa,YAAY;IACxB,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,gBAAgB,CAAK;gBAEjB,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAMxD;;;OAGG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE;IAO1C;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAKpE;;OAEG;IACH,eAAe,IAAI,MAAM,EAAE;IAK3B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAMxC,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,eAAe;YAWT,WAAW;CA2BzB"}
@@ -0,0 +1,192 @@
1
+ /**
2
+ * ModelCatalog — remote model directory with disk cache + fallback.
3
+ *
4
+ * Fetches model metadata from models.dev (open community catalog, 4000+ models).
5
+ * Aligned with Hermes agent/models_dev.py caching strategy.
6
+ *
7
+ * Three-layer fallback:
8
+ * 1. In-memory cache (process-level, TTL check against disk mtime)
9
+ * 2. Disk cache (~/.openclaw/cache/model_catalog.json)
10
+ * 3. Remote fetch (https://models.dev/api.json)
11
+ * 4. Stale disk cache (if remote fails)
12
+ * 5. Empty (caller falls back to builtin-providers.ts hardcoded)
13
+ *
14
+ * Non-blocking: first startup without cache returns empty immediately,
15
+ * triggers background async fetch. Agent uses builtin providers until
16
+ * catalog arrives.
17
+ */
18
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
19
+ import { join } from "node:path";
20
+ import { homedir } from "node:os";
21
+ // ── Constants ────────────────────────────────────────────────────────────────
22
+ const MODELS_DEV_URL = "https://models.dev/api.json";
23
+ const FETCH_TIMEOUT_MS = 15_000;
24
+ const DEFAULT_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours
25
+ const RETRY_TTL_MS = 5 * 60 * 1000; // 5 min after failure
26
+ // ── ModelCatalog class ───────────────────────────────────────────────────────
27
+ export class ModelCatalog {
28
+ cache = null;
29
+ cacheDir;
30
+ cacheFile;
31
+ ttlMs;
32
+ fetching = false;
33
+ lastFetchAttempt = 0;
34
+ constructor(opts) {
35
+ this.cacheDir = opts?.cacheDir ?? join(homedir(), ".openclaw", "cache");
36
+ this.cacheFile = join(this.cacheDir, "model_catalog.json");
37
+ this.ttlMs = opts?.ttlMs ?? DEFAULT_TTL_MS;
38
+ }
39
+ /**
40
+ * Get models for a provider. Non-blocking: returns whatever is cached.
41
+ * Triggers background refresh if stale.
42
+ */
43
+ getModels(providerId) {
44
+ this.ensureLoaded();
45
+ const provider = this.cache?.providers.get(providerId);
46
+ if (!provider)
47
+ return [];
48
+ return [...provider.models.values()];
49
+ }
50
+ /**
51
+ * Get a single model by provider + model id.
52
+ */
53
+ getModel(providerId, modelId) {
54
+ this.ensureLoaded();
55
+ return this.cache?.providers.get(providerId)?.models.get(modelId);
56
+ }
57
+ /**
58
+ * List all known provider ids from the catalog.
59
+ */
60
+ listProviderIds() {
61
+ this.ensureLoaded();
62
+ return this.cache ? [...this.cache.providers.keys()] : [];
63
+ }
64
+ /**
65
+ * Force refresh from remote. Returns true if successful.
66
+ */
67
+ async refreshCatalog() {
68
+ return this.fetchRemote();
69
+ }
70
+ // ── Internal ──────────────────────────────────────────────────
71
+ ensureLoaded() {
72
+ if (this.cache && !this.isStale())
73
+ return;
74
+ // Try disk cache
75
+ if (!this.cache) {
76
+ this.loadFromDisk();
77
+ }
78
+ // Trigger background fetch if stale or missing
79
+ if (!this.cache || this.isStale()) {
80
+ this.backgroundFetch();
81
+ }
82
+ }
83
+ isStale() {
84
+ if (!this.cache)
85
+ return true;
86
+ return Date.now() - this.cache.fetchedAt > this.ttlMs;
87
+ }
88
+ loadFromDisk() {
89
+ try {
90
+ if (!existsSync(this.cacheFile))
91
+ return;
92
+ const raw = readFileSync(this.cacheFile, "utf8");
93
+ const parsed = JSON.parse(raw);
94
+ if (!parsed.fetchedAt || !parsed.data)
95
+ return;
96
+ this.cache = {
97
+ fetchedAt: parsed.fetchedAt,
98
+ providers: parseModelsDevResponse(parsed.data),
99
+ };
100
+ }
101
+ catch {
102
+ // Corrupted cache file — ignore
103
+ }
104
+ }
105
+ saveToDisk(data) {
106
+ try {
107
+ mkdirSync(this.cacheDir, { recursive: true });
108
+ const payload = JSON.stringify({ fetchedAt: Date.now(), data }, null, 0);
109
+ writeFileSync(this.cacheFile, payload, "utf8");
110
+ }
111
+ catch {
112
+ // Disk write failure — non-fatal
113
+ }
114
+ }
115
+ backgroundFetch() {
116
+ if (this.fetching)
117
+ return;
118
+ // Don't retry too soon after a failure
119
+ if (Date.now() - this.lastFetchAttempt < RETRY_TTL_MS)
120
+ return;
121
+ this.fetching = true;
122
+ this.fetchRemote().finally(() => {
123
+ this.fetching = false;
124
+ });
125
+ }
126
+ async fetchRemote() {
127
+ this.lastFetchAttempt = Date.now();
128
+ try {
129
+ const response = await fetch(MODELS_DEV_URL, {
130
+ signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),
131
+ headers: { Accept: "application/json" },
132
+ });
133
+ if (!response.ok) {
134
+ return false;
135
+ }
136
+ const data = await response.json();
137
+ const providers = parseModelsDevResponse(data);
138
+ if (providers.size === 0) {
139
+ return false;
140
+ }
141
+ this.cache = { fetchedAt: Date.now(), providers };
142
+ this.saveToDisk(data);
143
+ return true;
144
+ }
145
+ catch {
146
+ // Network failure — keep stale cache if any
147
+ return false;
148
+ }
149
+ }
150
+ }
151
+ // ── Parser: models.dev JSON → CatalogProvider map ────────────────────────────
152
+ /**
153
+ * Parse models.dev api.json response.
154
+ * Format: { provider_id: { models: { model_name: { ... } } } }
155
+ */
156
+ function parseModelsDevResponse(data) {
157
+ const providers = new Map();
158
+ if (!data || typeof data !== "object")
159
+ return providers;
160
+ for (const [providerId, providerData] of Object.entries(data)) {
161
+ if (!providerData || typeof providerData !== "object")
162
+ continue;
163
+ const modelsObj = providerData.models;
164
+ if (!modelsObj || typeof modelsObj !== "object")
165
+ continue;
166
+ const models = new Map();
167
+ for (const [modelId, modelData] of Object.entries(modelsObj)) {
168
+ if (!modelData || typeof modelData !== "object")
169
+ continue;
170
+ const m = modelData;
171
+ const limit = m.limit ?? {};
172
+ const modalities = m.modalities ?? {};
173
+ const inputMods = Array.isArray(modalities.input) ? modalities.input : [];
174
+ models.set(modelId, {
175
+ id: modelId,
176
+ name: typeof m.name === "string" ? m.name : modelId,
177
+ contextWindow: typeof limit.context === "number" ? limit.context : 200_000,
178
+ maxOutput: typeof limit.output === "number" ? limit.output : 8_192,
179
+ toolCall: m.tool_call === true,
180
+ reasoning: m.reasoning === true,
181
+ vision: m.attachment === true || inputMods.includes("image"),
182
+ costInput: typeof m.cost_input === "number" ? m.cost_input : undefined,
183
+ costOutput: typeof m.cost_output === "number" ? m.cost_output : undefined,
184
+ });
185
+ }
186
+ if (models.size > 0) {
187
+ providers.set(providerId, { models });
188
+ }
189
+ }
190
+ return providers;
191
+ }
192
+ //# sourceMappingURL=model-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-catalog.js","sourceRoot":"","sources":["../../src/llm/model-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAY,MAAM,SAAS,CAAC;AACvF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,gFAAgF;AAEhF,MAAM,cAAc,GAAG,6BAA6B,CAAC;AACrD,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAChC,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;AACvD,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,sBAAsB;AAyB1D,gFAAgF;AAEhF,MAAM,OAAO,YAAY;IAChB,KAAK,GAAwB,IAAI,CAAC;IAClC,QAAQ,CAAS;IACjB,SAAS,CAAS;IAClB,KAAK,CAAS;IACd,QAAQ,GAAG,KAAK,CAAC;IACjB,gBAAgB,GAAG,CAAC,CAAC;IAE7B,YAAY,IAA4C;QACvD,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QACxE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,cAAc,CAAC;IAC5C,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,UAAkB;QAC3B,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,UAAkB,EAAE,OAAe;QAC3C,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;IAED;;OAEG;IACH,eAAe;QACd,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QACnB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC;IAED,iEAAiE;IAEzD,YAAY;QACnB,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAAE,OAAO;QAE1C,iBAAiB;QACjB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACjB,IAAI,CAAC,YAAY,EAAE,CAAC;QACrB,CAAC;QAED,+CAA+C;QAC/C,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,eAAe,EAAE,CAAC;QACxB,CAAC;IACF,CAAC;IAEO,OAAO;QACd,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAC7B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;IACvD,CAAC;IAEO,YAAY;QACnB,IAAI,CAAC;YACJ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;gBAAE,OAAO;YACxC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyC,CAAC;YACvE,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,IAAI;gBAAE,OAAO;YAC9C,IAAI,CAAC,KAAK,GAAG;gBACZ,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,SAAS,EAAE,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC;aAC9C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACR,gCAAgC;QACjC,CAAC;IACF,CAAC;IAEO,UAAU,CAAC,IAAa;QAC/B,IAAI,CAAC;YACJ,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACzE,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACR,iCAAiC;QAClC,CAAC;IACF,CAAC;IAEO,eAAe;QACtB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,uCAAuC;QACvC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,GAAG,YAAY;YAAE,OAAO;QAE9D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAC/B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACvB,CAAC,CAAC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,WAAW;QACxB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACnC,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE;gBAC5C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC;gBAC7C,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;aACvC,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAClB,OAAO,KAAK,CAAC;YACd,CAAC;YAED,MAAM,IAAI,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC5C,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAE/C,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,KAAK,CAAC;YACd,CAAC;YAED,IAAI,CAAC,KAAK,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO,IAAI,CAAC;QACb,CAAC;QAAC,MAAM,CAAC;YACR,4CAA4C;YAC5C,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;CACD;AAED,gFAAgF;AAEhF;;;GAGG;AACH,SAAS,sBAAsB,CAAC,IAAa;IAC5C,MAAM,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;IACrD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAExD,KAAK,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAA+B,CAAC,EAAE,CAAC;QAC1F,IAAI,CAAC,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ;YAAE,SAAS;QAChE,MAAM,SAAS,GAAI,YAAwC,CAAC,MAAM,CAAC;QACnE,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ;YAAE,SAAS;QAE1D,MAAM,MAAM,GAAG,IAAI,GAAG,EAA4B,CAAC;QACnD,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAoC,CAAC,EAAE,CAAC;YACzF,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ;gBAAE,SAAS;YAC1D,MAAM,CAAC,GAAG,SAAoC,CAAC;YAE/C,MAAM,KAAK,GAAI,CAAC,CAAC,KAAiC,IAAI,EAAE,CAAC;YACzD,MAAM,UAAU,GAAI,CAAC,CAAC,UAAsC,IAAI,EAAE,CAAC;YACnE,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAE1E,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE;gBACnB,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;gBACnD,aAAa,EAAE,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;gBAC1E,SAAS,EAAE,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;gBAClE,QAAQ,EAAE,CAAC,CAAC,SAAS,KAAK,IAAI;gBAC9B,SAAS,EAAE,CAAC,CAAC,SAAS,KAAK,IAAI;gBAC/B,MAAM,EAAE,CAAC,CAAC,UAAU,KAAK,IAAI,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC5D,SAAS,EAAE,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;gBACtE,UAAU,EAAE,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;aACzE,CAAC,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACvC,CAAC;IACF,CAAC;IAED,OAAO,SAAS,CAAC;AAClB,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * ProviderDef — defines how to connect to an LLM provider.
3
+ *
4
+ * Aligned with Hermes `ProviderDef` dataclass pattern:
5
+ * id + name + transport type + baseUrl + auth config + model list
6
+ *
7
+ * Three-layer merge strategy (Layer 3 > Layer 2 > Layer 1):
8
+ * Layer 1: builtin-providers.ts hardcoded (fallback)
9
+ * Layer 2: model-catalog.ts remote (models.dev)
10
+ * Layer 3: user config (from agent.turn.config)
11
+ */
12
+ export type TransportType = "openai-chat" | "anthropic-messages";
13
+ export type AuthType = "bearer" | "x-api-key" | "none";
14
+ export interface ProviderDef {
15
+ /** Unique provider id, e.g. "deepseek", "openai", "anthropic" */
16
+ id: string;
17
+ /** Display name, e.g. "DeepSeek" */
18
+ name: string;
19
+ /** Which transport to use for LLM calls */
20
+ transport: TransportType;
21
+ /** API base URL, e.g. "https://api.deepseek.com" */
22
+ baseUrl: string;
23
+ /** Env var names for API key (priority order) */
24
+ apiKeyEnvVars: string[];
25
+ /** Auth header style */
26
+ authType: AuthType;
27
+ /** Is an aggregator (OpenRouter, 硅基) — model ids may have prefix */
28
+ isAggregator: boolean;
29
+ /** Recommended default model */
30
+ defaultModel?: string;
31
+ /** Known models for this provider */
32
+ models?: ModelInfo[];
33
+ /** Extra headers to send with every request (e.g. aggregator-specific) */
34
+ extraHeaders?: Record<string, string>;
35
+ /** Whether this provider supports stream_options (default true for openai-chat) */
36
+ supportsStreamOptions?: boolean;
37
+ /** Whether to omit temperature when it equals 0 (some providers reject 0) */
38
+ omitZeroTemperature?: boolean;
39
+ }
40
+ export interface ModelInfo {
41
+ /** Model id, e.g. "deepseek-chat" */
42
+ id: string;
43
+ /** Display name, e.g. "DeepSeek Chat V3" */
44
+ name: string;
45
+ /** Context window in tokens */
46
+ contextWindow: number;
47
+ /** Max output tokens */
48
+ maxOutput: number;
49
+ /** Supports function/tool calling */
50
+ toolCall: boolean;
51
+ /** Has reasoning/thinking mode */
52
+ reasoning: boolean;
53
+ /** Supports vision (image input) */
54
+ vision: boolean;
55
+ /** Cost per 1M input tokens (USD) */
56
+ costInput?: number;
57
+ /** Cost per 1M output tokens (USD) */
58
+ costOutput?: number;
59
+ }
60
+ //# sourceMappingURL=provider-def.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-def.d.ts","sourceRoot":"","sources":["../../src/llm/provider-def.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,oBAAoB,CAAC;AACjE,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC3B,iEAAiE;IACjE,EAAE,EAAE,MAAM,CAAC;IACX,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,SAAS,EAAE,aAAa,CAAC;IACzB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,wBAAwB;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,oEAAoE;IACpE,YAAY,EAAE,OAAO,CAAC;IACtB,gCAAgC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,mFAAmF;IACnF,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,6EAA6E;IAC7E,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACzB,qCAAqC;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,wBAAwB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,QAAQ,EAAE,OAAO,CAAC;IAClB,kCAAkC;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * ProviderDef — defines how to connect to an LLM provider.
3
+ *
4
+ * Aligned with Hermes `ProviderDef` dataclass pattern:
5
+ * id + name + transport type + baseUrl + auth config + model list
6
+ *
7
+ * Three-layer merge strategy (Layer 3 > Layer 2 > Layer 1):
8
+ * Layer 1: builtin-providers.ts hardcoded (fallback)
9
+ * Layer 2: model-catalog.ts remote (models.dev)
10
+ * Layer 3: user config (from agent.turn.config)
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=provider-def.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-def.js","sourceRoot":"","sources":["../../src/llm/provider-def.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * ProviderRegistry — three-layer merge registry for LLM providers.
3
+ *
4
+ * Layer 1: builtin-providers.ts hardcoded (lowest priority, ~20 providers)
5
+ * Layer 2: model-catalog.ts remote (models.dev — enriches model metadata)
6
+ * Layer 3: user config override (from agent.turn.config — highest priority)
7
+ *
8
+ * Merge strategy: Layer 3 > Layer 2 > Layer 1 (later layers override same-id fields)
9
+ *
10
+ * Aligned with Hermes provider_registry.py.
11
+ */
12
+ import type { ModelInfo, ProviderDef } from "./provider-def.js";
13
+ import { ModelCatalog } from "./model-catalog.js";
14
+ export declare class ProviderRegistry {
15
+ /** Layer 1: builtin hardcoded providers */
16
+ private builtins;
17
+ /** Layer 2: remote model catalog (models.dev) */
18
+ private catalog;
19
+ /** Layer 3: user overrides (from agent.turn.config) */
20
+ private overrides;
21
+ constructor(opts?: {
22
+ catalog?: ModelCatalog;
23
+ });
24
+ /**
25
+ * Apply user config override for a provider.
26
+ * Typically called when agent.turn.config has baseUrl/apiKey overrides.
27
+ */
28
+ applyOverride(providerId: string, override: Partial<ProviderDef>): void;
29
+ /**
30
+ * Get merged ProviderDef by id (Layer 3 > Layer 1).
31
+ * Returns undefined if provider not found.
32
+ * Supports common aliases (e.g., "claude" → "anthropic").
33
+ */
34
+ getProvider(id: string): ProviderDef | undefined;
35
+ /**
36
+ * List all known provider ids.
37
+ */
38
+ listProviders(): ProviderDef[];
39
+ /**
40
+ * List models for a specific provider.
41
+ * Merges: Layer 3 override > Layer 1 builtin > Layer 2 catalog enrichment.
42
+ */
43
+ listModels(providerId: string): ModelInfo[];
44
+ /**
45
+ * Trigger background refresh of the remote model catalog.
46
+ */
47
+ refreshCatalog(): Promise<boolean>;
48
+ /**
49
+ * Resolve API key for a provider:
50
+ * 1. Explicit key (from agent.turn.config)
51
+ * 2. Environment variables (ProviderDef.apiKeyEnvVars)
52
+ */
53
+ resolveApiKey(providerId: string, explicitKey?: string): string | undefined;
54
+ }
55
+ //# sourceMappingURL=provider-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-registry.d.ts","sourceRoot":"","sources":["../../src/llm/provider-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAYlD,qBAAa,gBAAgB;IAC5B,2CAA2C;IAC3C,OAAO,CAAC,QAAQ,CAAkC;IAClD,iDAAiD;IACjD,OAAO,CAAC,OAAO,CAAe;IAC9B,uDAAuD;IACvD,OAAO,CAAC,SAAS,CAA2C;gBAEhD,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,YAAY,CAAA;KAAE;IAO7C;;;OAGG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;IAOvE;;;;OAIG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAoChD;;OAEG;IACH,aAAa,IAAI,WAAW,EAAE;IAa9B;;;OAGG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE;IAqB3C;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAIxC;;;;OAIG;IACH,aAAa,CACZ,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS;CAarB"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * ProviderRegistry — three-layer merge registry for LLM providers.
3
+ *
4
+ * Layer 1: builtin-providers.ts hardcoded (lowest priority, ~20 providers)
5
+ * Layer 2: model-catalog.ts remote (models.dev — enriches model metadata)
6
+ * Layer 3: user config override (from agent.turn.config — highest priority)
7
+ *
8
+ * Merge strategy: Layer 3 > Layer 2 > Layer 1 (later layers override same-id fields)
9
+ *
10
+ * Aligned with Hermes provider_registry.py.
11
+ */
12
+ import { BUILTIN_PROVIDERS } from "./builtin-providers.js";
13
+ import { ModelCatalog } from "./model-catalog.js";
14
+ // Provider alias map (Hermes-aligned): common user names → canonical ids
15
+ const PROVIDER_ALIASES = {
16
+ claude: "anthropic",
17
+ gemini: "google",
18
+ "x-ai": "xai",
19
+ "z-ai": "xai",
20
+ silicon: "siliconflow",
21
+ "silicon-flow": "siliconflow",
22
+ };
23
+ export class ProviderRegistry {
24
+ /** Layer 1: builtin hardcoded providers */
25
+ builtins = new Map();
26
+ /** Layer 2: remote model catalog (models.dev) */
27
+ catalog;
28
+ /** Layer 3: user overrides (from agent.turn.config) */
29
+ overrides = new Map();
30
+ constructor(opts) {
31
+ for (const p of BUILTIN_PROVIDERS) {
32
+ this.builtins.set(p.id, p);
33
+ }
34
+ this.catalog = opts?.catalog ?? new ModelCatalog();
35
+ }
36
+ /**
37
+ * Apply user config override for a provider.
38
+ * Typically called when agent.turn.config has baseUrl/apiKey overrides.
39
+ */
40
+ applyOverride(providerId, override) {
41
+ this.overrides.set(providerId, {
42
+ ...this.overrides.get(providerId),
43
+ ...override,
44
+ });
45
+ }
46
+ /**
47
+ * Get merged ProviderDef by id (Layer 3 > Layer 1).
48
+ * Returns undefined if provider not found.
49
+ * Supports common aliases (e.g., "claude" → "anthropic").
50
+ */
51
+ getProvider(id) {
52
+ const resolvedId = PROVIDER_ALIASES[id] ?? id;
53
+ const builtin = this.builtins.get(resolvedId);
54
+ const override = this.overrides.get(resolvedId);
55
+ if (!builtin && !override)
56
+ return undefined;
57
+ if (!builtin && override) {
58
+ // User defined a custom provider entirely
59
+ if (!override.id || !override.transport || !override.baseUrl) {
60
+ return undefined;
61
+ }
62
+ return {
63
+ id: override.id,
64
+ name: override.name ?? override.id,
65
+ transport: override.transport,
66
+ baseUrl: override.baseUrl,
67
+ apiKeyEnvVars: override.apiKeyEnvVars ?? [],
68
+ authType: override.authType ?? "bearer",
69
+ isAggregator: override.isAggregator ?? false,
70
+ defaultModel: override.defaultModel,
71
+ models: override.models,
72
+ };
73
+ }
74
+ if (builtin && !override)
75
+ return builtin;
76
+ // Merge: override fields take precedence
77
+ return {
78
+ ...builtin,
79
+ ...override,
80
+ // Merge models: override models replace if provided
81
+ models: override.models ?? builtin.models,
82
+ };
83
+ }
84
+ /**
85
+ * List all known provider ids.
86
+ */
87
+ listProviders() {
88
+ const all = new Map();
89
+ for (const [id, p] of this.builtins) {
90
+ all.set(id, p);
91
+ }
92
+ // Override/custom providers
93
+ for (const [id] of this.overrides) {
94
+ const merged = this.getProvider(id);
95
+ if (merged)
96
+ all.set(id, merged);
97
+ }
98
+ return [...all.values()];
99
+ }
100
+ /**
101
+ * List models for a specific provider.
102
+ * Merges: Layer 3 override > Layer 1 builtin > Layer 2 catalog enrichment.
103
+ */
104
+ listModels(providerId) {
105
+ const provider = this.getProvider(providerId);
106
+ const builtinModels = provider?.models ?? [];
107
+ // Enrich with catalog data (Layer 2): catalog provides updated context windows,
108
+ // costs, and capability flags; builtin models take precedence for known fields.
109
+ const catalogModels = this.catalog.getModels(providerId);
110
+ if (catalogModels.length === 0)
111
+ return builtinModels;
112
+ // Build merged model list: builtin first, then catalog models not in builtin
113
+ const byId = new Map();
114
+ for (const cm of catalogModels) {
115
+ byId.set(cm.id, cm);
116
+ }
117
+ for (const bm of builtinModels) {
118
+ // Builtin overrides catalog for same id (builtin has curated values)
119
+ byId.set(bm.id, bm);
120
+ }
121
+ return [...byId.values()];
122
+ }
123
+ /**
124
+ * Trigger background refresh of the remote model catalog.
125
+ */
126
+ async refreshCatalog() {
127
+ return this.catalog.refreshCatalog();
128
+ }
129
+ /**
130
+ * Resolve API key for a provider:
131
+ * 1. Explicit key (from agent.turn.config)
132
+ * 2. Environment variables (ProviderDef.apiKeyEnvVars)
133
+ */
134
+ resolveApiKey(providerId, explicitKey) {
135
+ if (explicitKey)
136
+ return explicitKey;
137
+ const provider = this.getProvider(providerId);
138
+ if (!provider)
139
+ return undefined;
140
+ for (const envVar of provider.apiKeyEnvVars) {
141
+ const value = process.env[envVar];
142
+ if (value?.trim())
143
+ return value.trim();
144
+ }
145
+ return undefined;
146
+ }
147
+ }
148
+ //# sourceMappingURL=provider-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-registry.js","sourceRoot":"","sources":["../../src/llm/provider-registry.ts"],"names":[],"mappings":"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"}