@esankhan3/anvil-agent-core 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 (459) hide show
  1. package/README.md +142 -0
  2. package/dist/__tests__/adapter-enrichment.test.d.ts +12 -0
  3. package/dist/__tests__/adapter-enrichment.test.d.ts.map +1 -0
  4. package/dist/__tests__/adapter-enrichment.test.js +199 -0
  5. package/dist/__tests__/adapter-enrichment.test.js.map +1 -0
  6. package/dist/__tests__/adk-anthropic-llm.test.d.ts +18 -0
  7. package/dist/__tests__/adk-anthropic-llm.test.d.ts.map +1 -0
  8. package/dist/__tests__/adk-anthropic-llm.test.js +124 -0
  9. package/dist/__tests__/adk-anthropic-llm.test.js.map +1 -0
  10. package/dist/__tests__/cost-breakdown.test.d.ts +11 -0
  11. package/dist/__tests__/cost-breakdown.test.d.ts.map +1 -0
  12. package/dist/__tests__/cost-breakdown.test.js +163 -0
  13. package/dist/__tests__/cost-breakdown.test.js.map +1 -0
  14. package/dist/__tests__/mcp.test.d.ts +13 -0
  15. package/dist/__tests__/mcp.test.d.ts.map +1 -0
  16. package/dist/__tests__/mcp.test.js +413 -0
  17. package/dist/__tests__/mcp.test.js.map +1 -0
  18. package/dist/__tests__/ollama-adapter-agentic.test.d.ts +15 -0
  19. package/dist/__tests__/ollama-adapter-agentic.test.d.ts.map +1 -0
  20. package/dist/__tests__/ollama-adapter-agentic.test.js +268 -0
  21. package/dist/__tests__/ollama-adapter-agentic.test.js.map +1 -0
  22. package/dist/__tests__/ollama-adapter-executor.test.d.ts +10 -0
  23. package/dist/__tests__/ollama-adapter-executor.test.d.ts.map +1 -0
  24. package/dist/__tests__/ollama-adapter-executor.test.js +95 -0
  25. package/dist/__tests__/ollama-adapter-executor.test.js.map +1 -0
  26. package/dist/__tests__/openai-adapter-output.test.d.ts +17 -0
  27. package/dist/__tests__/openai-adapter-output.test.d.ts.map +1 -0
  28. package/dist/__tests__/openai-adapter-output.test.js +127 -0
  29. package/dist/__tests__/openai-adapter-output.test.js.map +1 -0
  30. package/dist/__tests__/opencode-adapter.test.d.ts +7 -0
  31. package/dist/__tests__/opencode-adapter.test.d.ts.map +1 -0
  32. package/dist/__tests__/opencode-adapter.test.js +141 -0
  33. package/dist/__tests__/opencode-adapter.test.js.map +1 -0
  34. package/dist/__tests__/openrouter-adapter-agentic.test.d.ts +11 -0
  35. package/dist/__tests__/openrouter-adapter-agentic.test.d.ts.map +1 -0
  36. package/dist/__tests__/openrouter-adapter-agentic.test.js +297 -0
  37. package/dist/__tests__/openrouter-adapter-agentic.test.js.map +1 -0
  38. package/dist/__tests__/router-circuit-breaker.test.d.ts +6 -0
  39. package/dist/__tests__/router-circuit-breaker.test.d.ts.map +1 -0
  40. package/dist/__tests__/router-circuit-breaker.test.js +253 -0
  41. package/dist/__tests__/router-circuit-breaker.test.js.map +1 -0
  42. package/dist/__tests__/router-config-loader.test.d.ts +8 -0
  43. package/dist/__tests__/router-config-loader.test.d.ts.map +1 -0
  44. package/dist/__tests__/router-config-loader.test.js +172 -0
  45. package/dist/__tests__/router-config-loader.test.js.map +1 -0
  46. package/dist/__tests__/router-discovery.test.d.ts +5 -0
  47. package/dist/__tests__/router-discovery.test.d.ts.map +1 -0
  48. package/dist/__tests__/router-discovery.test.js +129 -0
  49. package/dist/__tests__/router-discovery.test.js.map +1 -0
  50. package/dist/__tests__/router-fallback.test.d.ts +9 -0
  51. package/dist/__tests__/router-fallback.test.d.ts.map +1 -0
  52. package/dist/__tests__/router-fallback.test.js +283 -0
  53. package/dist/__tests__/router-fallback.test.js.map +1 -0
  54. package/dist/__tests__/router-local-executor.test.d.ts +6 -0
  55. package/dist/__tests__/router-local-executor.test.d.ts.map +1 -0
  56. package/dist/__tests__/router-local-executor.test.js +193 -0
  57. package/dist/__tests__/router-local-executor.test.js.map +1 -0
  58. package/dist/__tests__/router-model-registry.test.d.ts +8 -0
  59. package/dist/__tests__/router-model-registry.test.d.ts.map +1 -0
  60. package/dist/__tests__/router-model-registry.test.js +389 -0
  61. package/dist/__tests__/router-model-registry.test.js.map +1 -0
  62. package/dist/__tests__/router-rate-limiter.test.d.ts +8 -0
  63. package/dist/__tests__/router-rate-limiter.test.d.ts.map +1 -0
  64. package/dist/__tests__/router-rate-limiter.test.js +128 -0
  65. package/dist/__tests__/router-rate-limiter.test.js.map +1 -0
  66. package/dist/__tests__/router-resolver.test.d.ts +7 -0
  67. package/dist/__tests__/router-resolver.test.d.ts.map +1 -0
  68. package/dist/__tests__/router-resolver.test.js +110 -0
  69. package/dist/__tests__/router-resolver.test.js.map +1 -0
  70. package/dist/__tests__/router-retry.test.d.ts +7 -0
  71. package/dist/__tests__/router-retry.test.d.ts.map +1 -0
  72. package/dist/__tests__/router-retry.test.js +302 -0
  73. package/dist/__tests__/router-retry.test.js.map +1 -0
  74. package/dist/__tests__/router-scaffold.test.d.ts +11 -0
  75. package/dist/__tests__/router-scaffold.test.d.ts.map +1 -0
  76. package/dist/__tests__/router-scaffold.test.js +103 -0
  77. package/dist/__tests__/router-scaffold.test.js.map +1 -0
  78. package/dist/__tests__/router-spend-ledger.test.d.ts +8 -0
  79. package/dist/__tests__/router-spend-ledger.test.d.ts.map +1 -0
  80. package/dist/__tests__/router-spend-ledger.test.js +227 -0
  81. package/dist/__tests__/router-spend-ledger.test.js.map +1 -0
  82. package/dist/__tests__/router-telemetry.test.d.ts +11 -0
  83. package/dist/__tests__/router-telemetry.test.d.ts.map +1 -0
  84. package/dist/__tests__/router-telemetry.test.js +173 -0
  85. package/dist/__tests__/router-telemetry.test.js.map +1 -0
  86. package/dist/__tests__/single-shot.test.d.ts +12 -0
  87. package/dist/__tests__/single-shot.test.d.ts.map +1 -0
  88. package/dist/__tests__/single-shot.test.js +204 -0
  89. package/dist/__tests__/single-shot.test.js.map +1 -0
  90. package/dist/__tests__/skills-prompt.test.d.ts +11 -0
  91. package/dist/__tests__/skills-prompt.test.d.ts.map +1 -0
  92. package/dist/__tests__/skills-prompt.test.js +208 -0
  93. package/dist/__tests__/skills-prompt.test.js.map +1 -0
  94. package/dist/__tests__/skills.test.d.ts +11 -0
  95. package/dist/__tests__/skills.test.d.ts.map +1 -0
  96. package/dist/__tests__/skills.test.js +161 -0
  97. package/dist/__tests__/skills.test.js.map +1 -0
  98. package/dist/__tests__/telemetry-integration.test.d.ts +12 -0
  99. package/dist/__tests__/telemetry-integration.test.d.ts.map +1 -0
  100. package/dist/__tests__/telemetry-integration.test.js +153 -0
  101. package/dist/__tests__/telemetry-integration.test.js.map +1 -0
  102. package/dist/__tests__/telemetry.test.d.ts +13 -0
  103. package/dist/__tests__/telemetry.test.d.ts.map +1 -0
  104. package/dist/__tests__/telemetry.test.js +161 -0
  105. package/dist/__tests__/telemetry.test.js.map +1 -0
  106. package/dist/__tests__/upstream-error.test.d.ts +8 -0
  107. package/dist/__tests__/upstream-error.test.d.ts.map +1 -0
  108. package/dist/__tests__/upstream-error.test.js +186 -0
  109. package/dist/__tests__/upstream-error.test.js.map +1 -0
  110. package/dist/adk-adapter.d.ts +45 -0
  111. package/dist/adk-adapter.d.ts.map +1 -0
  112. package/dist/adk-adapter.js +403 -0
  113. package/dist/adk-adapter.js.map +1 -0
  114. package/dist/adk-anthropic-llm.d.ts +59 -0
  115. package/dist/adk-anthropic-llm.d.ts.map +1 -0
  116. package/dist/adk-anthropic-llm.js +397 -0
  117. package/dist/adk-anthropic-llm.js.map +1 -0
  118. package/dist/agent/index.d.ts +14 -0
  119. package/dist/agent/index.d.ts.map +1 -0
  120. package/dist/agent/index.js +14 -0
  121. package/dist/agent/index.js.map +1 -0
  122. package/dist/agent/session/__tests__/bridge-tool-executor.test.d.ts +10 -0
  123. package/dist/agent/session/__tests__/bridge-tool-executor.test.d.ts.map +1 -0
  124. package/dist/agent/session/__tests__/bridge-tool-executor.test.js +152 -0
  125. package/dist/agent/session/__tests__/bridge-tool-executor.test.js.map +1 -0
  126. package/dist/agent/session/__tests__/collect-trajectory.test.d.ts +18 -0
  127. package/dist/agent/session/__tests__/collect-trajectory.test.d.ts.map +1 -0
  128. package/dist/agent/session/__tests__/collect-trajectory.test.js +208 -0
  129. package/dist/agent/session/__tests__/collect-trajectory.test.js.map +1 -0
  130. package/dist/agent/session/__tests__/run-with-agent.test.d.ts +8 -0
  131. package/dist/agent/session/__tests__/run-with-agent.test.d.ts.map +1 -0
  132. package/dist/agent/session/__tests__/run-with-agent.test.js +98 -0
  133. package/dist/agent/session/__tests__/run-with-agent.test.js.map +1 -0
  134. package/dist/agent/session/__tests__/runtime.test.d.ts +7 -0
  135. package/dist/agent/session/__tests__/runtime.test.d.ts.map +1 -0
  136. package/dist/agent/session/__tests__/runtime.test.js +361 -0
  137. package/dist/agent/session/__tests__/runtime.test.js.map +1 -0
  138. package/dist/agent/session/__tests__/skills-mcp-spawn.test.d.ts +15 -0
  139. package/dist/agent/session/__tests__/skills-mcp-spawn.test.d.ts.map +1 -0
  140. package/dist/agent/session/__tests__/skills-mcp-spawn.test.js +160 -0
  141. package/dist/agent/session/__tests__/skills-mcp-spawn.test.js.map +1 -0
  142. package/dist/agent/session/__tests__/spawn-telemetry.test.d.ts +13 -0
  143. package/dist/agent/session/__tests__/spawn-telemetry.test.d.ts.map +1 -0
  144. package/dist/agent/session/__tests__/spawn-telemetry.test.js +135 -0
  145. package/dist/agent/session/__tests__/spawn-telemetry.test.js.map +1 -0
  146. package/dist/agent/session/__tests__/types.test.d.ts +9 -0
  147. package/dist/agent/session/__tests__/types.test.d.ts.map +1 -0
  148. package/dist/agent/session/__tests__/types.test.js +220 -0
  149. package/dist/agent/session/__tests__/types.test.js.map +1 -0
  150. package/dist/agent/session/adapter.d.ts +108 -0
  151. package/dist/agent/session/adapter.d.ts.map +1 -0
  152. package/dist/agent/session/adapter.js +39 -0
  153. package/dist/agent/session/adapter.js.map +1 -0
  154. package/dist/agent/session/collect-trajectory.d.ts +36 -0
  155. package/dist/agent/session/collect-trajectory.d.ts.map +1 -0
  156. package/dist/agent/session/collect-trajectory.js +193 -0
  157. package/dist/agent/session/collect-trajectory.js.map +1 -0
  158. package/dist/agent/session/default-adapter-factory.d.ts +48 -0
  159. package/dist/agent/session/default-adapter-factory.d.ts.map +1 -0
  160. package/dist/agent/session/default-adapter-factory.js +227 -0
  161. package/dist/agent/session/default-adapter-factory.js.map +1 -0
  162. package/dist/agent/session/headless-types.d.ts +85 -0
  163. package/dist/agent/session/headless-types.d.ts.map +1 -0
  164. package/dist/agent/session/headless-types.js +16 -0
  165. package/dist/agent/session/headless-types.js.map +1 -0
  166. package/dist/agent/session/index.d.ts +18 -0
  167. package/dist/agent/session/index.d.ts.map +1 -0
  168. package/dist/agent/session/index.js +20 -0
  169. package/dist/agent/session/index.js.map +1 -0
  170. package/dist/agent/session/language-model-bridge.d.ts +84 -0
  171. package/dist/agent/session/language-model-bridge.d.ts.map +1 -0
  172. package/dist/agent/session/language-model-bridge.js +454 -0
  173. package/dist/agent/session/language-model-bridge.js.map +1 -0
  174. package/dist/agent/session/legacy-adapter-types.d.ts +63 -0
  175. package/dist/agent/session/legacy-adapter-types.d.ts.map +1 -0
  176. package/dist/agent/session/legacy-adapter-types.js +11 -0
  177. package/dist/agent/session/legacy-adapter-types.js.map +1 -0
  178. package/dist/agent/session/run-with-agent.d.ts +36 -0
  179. package/dist/agent/session/run-with-agent.d.ts.map +1 -0
  180. package/dist/agent/session/run-with-agent.js +81 -0
  181. package/dist/agent/session/run-with-agent.js.map +1 -0
  182. package/dist/agent/session/session-registry.d.ts +71 -0
  183. package/dist/agent/session/session-registry.d.ts.map +1 -0
  184. package/dist/agent/session/session-registry.js +209 -0
  185. package/dist/agent/session/session-registry.js.map +1 -0
  186. package/dist/agent/session/session.d.ts +76 -0
  187. package/dist/agent/session/session.d.ts.map +1 -0
  188. package/dist/agent/session/session.js +327 -0
  189. package/dist/agent/session/session.js.map +1 -0
  190. package/dist/agent/session/types.d.ts +230 -0
  191. package/dist/agent/session/types.d.ts.map +1 -0
  192. package/dist/agent/session/types.js +44 -0
  193. package/dist/agent/session/types.js.map +1 -0
  194. package/dist/checkpoint/__tests__/blob-store.test.d.ts +5 -0
  195. package/dist/checkpoint/__tests__/blob-store.test.d.ts.map +1 -0
  196. package/dist/checkpoint/__tests__/blob-store.test.js +82 -0
  197. package/dist/checkpoint/__tests__/blob-store.test.js.map +1 -0
  198. package/dist/checkpoint/__tests__/key.test.d.ts +7 -0
  199. package/dist/checkpoint/__tests__/key.test.d.ts.map +1 -0
  200. package/dist/checkpoint/__tests__/key.test.js +130 -0
  201. package/dist/checkpoint/__tests__/key.test.js.map +1 -0
  202. package/dist/checkpoint/__tests__/runner.test.d.ts +12 -0
  203. package/dist/checkpoint/__tests__/runner.test.d.ts.map +1 -0
  204. package/dist/checkpoint/__tests__/runner.test.js +201 -0
  205. package/dist/checkpoint/__tests__/runner.test.js.map +1 -0
  206. package/dist/checkpoint/__tests__/store.test.d.ts +6 -0
  207. package/dist/checkpoint/__tests__/store.test.d.ts.map +1 -0
  208. package/dist/checkpoint/__tests__/store.test.js +150 -0
  209. package/dist/checkpoint/__tests__/store.test.js.map +1 -0
  210. package/dist/checkpoint/blob-store.d.ts +41 -0
  211. package/dist/checkpoint/blob-store.d.ts.map +1 -0
  212. package/dist/checkpoint/blob-store.js +119 -0
  213. package/dist/checkpoint/blob-store.js.map +1 -0
  214. package/dist/checkpoint/index.d.ts +15 -0
  215. package/dist/checkpoint/index.d.ts.map +1 -0
  216. package/dist/checkpoint/index.js +14 -0
  217. package/dist/checkpoint/index.js.map +1 -0
  218. package/dist/checkpoint/key.d.ts +39 -0
  219. package/dist/checkpoint/key.d.ts.map +1 -0
  220. package/dist/checkpoint/key.js +112 -0
  221. package/dist/checkpoint/key.js.map +1 -0
  222. package/dist/checkpoint/runner.d.ts +83 -0
  223. package/dist/checkpoint/runner.d.ts.map +1 -0
  224. package/dist/checkpoint/runner.js +146 -0
  225. package/dist/checkpoint/runner.js.map +1 -0
  226. package/dist/checkpoint/store.d.ts +91 -0
  227. package/dist/checkpoint/store.d.ts.map +1 -0
  228. package/dist/checkpoint/store.js +292 -0
  229. package/dist/checkpoint/store.js.map +1 -0
  230. package/dist/checkpoint/types.d.ts +74 -0
  231. package/dist/checkpoint/types.d.ts.map +1 -0
  232. package/dist/checkpoint/types.js +16 -0
  233. package/dist/checkpoint/types.js.map +1 -0
  234. package/dist/claude-adapter.d.ts +23 -0
  235. package/dist/claude-adapter.d.ts.map +1 -0
  236. package/dist/claude-adapter.js +233 -0
  237. package/dist/claude-adapter.js.map +1 -0
  238. package/dist/cost.d.ts +67 -0
  239. package/dist/cost.d.ts.map +1 -0
  240. package/dist/cost.js +148 -0
  241. package/dist/cost.js.map +1 -0
  242. package/dist/data/model-prices.json +39681 -0
  243. package/dist/fallback-adapter.d.ts +51 -0
  244. package/dist/fallback-adapter.d.ts.map +1 -0
  245. package/dist/fallback-adapter.js +116 -0
  246. package/dist/fallback-adapter.js.map +1 -0
  247. package/dist/gemini-adapter.d.ts +22 -0
  248. package/dist/gemini-adapter.d.ts.map +1 -0
  249. package/dist/gemini-adapter.js +185 -0
  250. package/dist/gemini-adapter.js.map +1 -0
  251. package/dist/gemini-cli-adapter.d.ts +24 -0
  252. package/dist/gemini-cli-adapter.d.ts.map +1 -0
  253. package/dist/gemini-cli-adapter.js +169 -0
  254. package/dist/gemini-cli-adapter.js.map +1 -0
  255. package/dist/index.d.ts +39 -0
  256. package/dist/index.d.ts.map +1 -0
  257. package/dist/index.js +39 -0
  258. package/dist/index.js.map +1 -0
  259. package/dist/mcp/client.d.ts +32 -0
  260. package/dist/mcp/client.d.ts.map +1 -0
  261. package/dist/mcp/client.js +92 -0
  262. package/dist/mcp/client.js.map +1 -0
  263. package/dist/mcp/config-loader.d.ts +36 -0
  264. package/dist/mcp/config-loader.d.ts.map +1 -0
  265. package/dist/mcp/config-loader.js +129 -0
  266. package/dist/mcp/config-loader.js.map +1 -0
  267. package/dist/mcp/index.d.ts +12 -0
  268. package/dist/mcp/index.d.ts.map +1 -0
  269. package/dist/mcp/index.js +11 -0
  270. package/dist/mcp/index.js.map +1 -0
  271. package/dist/mcp/tool-merger.d.ts +18 -0
  272. package/dist/mcp/tool-merger.d.ts.map +1 -0
  273. package/dist/mcp/tool-merger.js +34 -0
  274. package/dist/mcp/tool-merger.js.map +1 -0
  275. package/dist/mcp/types.d.ts +35 -0
  276. package/dist/mcp/types.d.ts.map +1 -0
  277. package/dist/mcp/types.js +10 -0
  278. package/dist/mcp/types.js.map +1 -0
  279. package/dist/ollama-adapter.d.ts +95 -0
  280. package/dist/ollama-adapter.d.ts.map +1 -0
  281. package/dist/ollama-adapter.js +404 -0
  282. package/dist/ollama-adapter.js.map +1 -0
  283. package/dist/openai-adapter.d.ts +40 -0
  284. package/dist/openai-adapter.d.ts.map +1 -0
  285. package/dist/openai-adapter.js +81 -0
  286. package/dist/openai-adapter.js.map +1 -0
  287. package/dist/opencode-adapter.d.ts +39 -0
  288. package/dist/opencode-adapter.d.ts.map +1 -0
  289. package/dist/opencode-adapter.js +105 -0
  290. package/dist/opencode-adapter.js.map +1 -0
  291. package/dist/openrouter-adapter.d.ts +69 -0
  292. package/dist/openrouter-adapter.d.ts.map +1 -0
  293. package/dist/openrouter-adapter.js +481 -0
  294. package/dist/openrouter-adapter.js.map +1 -0
  295. package/dist/registry.d.ts +55 -0
  296. package/dist/registry.d.ts.map +1 -0
  297. package/dist/registry.js +191 -0
  298. package/dist/registry.js.map +1 -0
  299. package/dist/router/circuit-breaker.d.ts +57 -0
  300. package/dist/router/circuit-breaker.d.ts.map +1 -0
  301. package/dist/router/circuit-breaker.js +110 -0
  302. package/dist/router/circuit-breaker.js.map +1 -0
  303. package/dist/router/config-loader.d.ts +43 -0
  304. package/dist/router/config-loader.d.ts.map +1 -0
  305. package/dist/router/config-loader.js +155 -0
  306. package/dist/router/config-loader.js.map +1 -0
  307. package/dist/router/discovery.d.ts +37 -0
  308. package/dist/router/discovery.d.ts.map +1 -0
  309. package/dist/router/discovery.js +54 -0
  310. package/dist/router/discovery.js.map +1 -0
  311. package/dist/router/errors.d.ts +39 -0
  312. package/dist/router/errors.d.ts.map +1 -0
  313. package/dist/router/errors.js +103 -0
  314. package/dist/router/errors.js.map +1 -0
  315. package/dist/router/index.d.ts +31 -0
  316. package/dist/router/index.d.ts.map +1 -0
  317. package/dist/router/index.js +20 -0
  318. package/dist/router/index.js.map +1 -0
  319. package/dist/router/local-executor.d.ts +62 -0
  320. package/dist/router/local-executor.d.ts.map +1 -0
  321. package/dist/router/local-executor.js +161 -0
  322. package/dist/router/local-executor.js.map +1 -0
  323. package/dist/router/model-registry.d.ts +90 -0
  324. package/dist/router/model-registry.d.ts.map +1 -0
  325. package/dist/router/model-registry.js +242 -0
  326. package/dist/router/model-registry.js.map +1 -0
  327. package/dist/router/rate-limiter.d.ts +63 -0
  328. package/dist/router/rate-limiter.d.ts.map +1 -0
  329. package/dist/router/rate-limiter.js +136 -0
  330. package/dist/router/rate-limiter.js.map +1 -0
  331. package/dist/router/resolver.d.ts +45 -0
  332. package/dist/router/resolver.d.ts.map +1 -0
  333. package/dist/router/resolver.js +71 -0
  334. package/dist/router/resolver.js.map +1 -0
  335. package/dist/router/retry.d.ts +58 -0
  336. package/dist/router/retry.d.ts.map +1 -0
  337. package/dist/router/retry.js +119 -0
  338. package/dist/router/retry.js.map +1 -0
  339. package/dist/router/router.d.ts +100 -0
  340. package/dist/router/router.d.ts.map +1 -0
  341. package/dist/router/router.js +306 -0
  342. package/dist/router/router.js.map +1 -0
  343. package/dist/router/spend-ledger.d.ts +69 -0
  344. package/dist/router/spend-ledger.d.ts.map +1 -0
  345. package/dist/router/spend-ledger.js +191 -0
  346. package/dist/router/spend-ledger.js.map +1 -0
  347. package/dist/router/telemetry.d.ts +48 -0
  348. package/dist/router/telemetry.d.ts.map +1 -0
  349. package/dist/router/telemetry.js +112 -0
  350. package/dist/router/telemetry.js.map +1 -0
  351. package/dist/router/types.d.ts +95 -0
  352. package/dist/router/types.d.ts.map +1 -0
  353. package/dist/router/types.js +16 -0
  354. package/dist/router/types.js.map +1 -0
  355. package/dist/single-shot.d.ts +60 -0
  356. package/dist/single-shot.d.ts.map +1 -0
  357. package/dist/single-shot.js +385 -0
  358. package/dist/single-shot.js.map +1 -0
  359. package/dist/skills/activator.d.ts +17 -0
  360. package/dist/skills/activator.d.ts.map +1 -0
  361. package/dist/skills/activator.js +24 -0
  362. package/dist/skills/activator.js.map +1 -0
  363. package/dist/skills/compose.d.ts +43 -0
  364. package/dist/skills/compose.d.ts.map +1 -0
  365. package/dist/skills/compose.js +53 -0
  366. package/dist/skills/compose.js.map +1 -0
  367. package/dist/skills/index.d.ts +17 -0
  368. package/dist/skills/index.d.ts.map +1 -0
  369. package/dist/skills/index.js +16 -0
  370. package/dist/skills/index.js.map +1 -0
  371. package/dist/skills/loader.d.ts +9 -0
  372. package/dist/skills/loader.d.ts.map +1 -0
  373. package/dist/skills/loader.js +49 -0
  374. package/dist/skills/loader.js.map +1 -0
  375. package/dist/skills/parser.d.ts +13 -0
  376. package/dist/skills/parser.d.ts.map +1 -0
  377. package/dist/skills/parser.js +60 -0
  378. package/dist/skills/parser.js.map +1 -0
  379. package/dist/skills/render.d.ts +11 -0
  380. package/dist/skills/render.d.ts.map +1 -0
  381. package/dist/skills/render.js +21 -0
  382. package/dist/skills/render.js.map +1 -0
  383. package/dist/skills/resolve-dir.d.ts +20 -0
  384. package/dist/skills/resolve-dir.d.ts.map +1 -0
  385. package/dist/skills/resolve-dir.js +30 -0
  386. package/dist/skills/resolve-dir.js.map +1 -0
  387. package/dist/skills/tool-policy.d.ts +26 -0
  388. package/dist/skills/tool-policy.d.ts.map +1 -0
  389. package/dist/skills/tool-policy.js +33 -0
  390. package/dist/skills/tool-policy.js.map +1 -0
  391. package/dist/skills/types.d.ts +42 -0
  392. package/dist/skills/types.d.ts.map +1 -0
  393. package/dist/skills/types.js +8 -0
  394. package/dist/skills/types.js.map +1 -0
  395. package/dist/stream-format.d.ts +100 -0
  396. package/dist/stream-format.d.ts.map +1 -0
  397. package/dist/stream-format.js +90 -0
  398. package/dist/stream-format.js.map +1 -0
  399. package/dist/telemetry/attributes.d.ts +38 -0
  400. package/dist/telemetry/attributes.d.ts.map +1 -0
  401. package/dist/telemetry/attributes.js +39 -0
  402. package/dist/telemetry/attributes.js.map +1 -0
  403. package/dist/telemetry/config.d.ts +30 -0
  404. package/dist/telemetry/config.d.ts.map +1 -0
  405. package/dist/telemetry/config.js +54 -0
  406. package/dist/telemetry/config.js.map +1 -0
  407. package/dist/telemetry/exporters.d.ts +10 -0
  408. package/dist/telemetry/exporters.d.ts.map +1 -0
  409. package/dist/telemetry/exporters.js +46 -0
  410. package/dist/telemetry/exporters.js.map +1 -0
  411. package/dist/telemetry/index.d.ts +15 -0
  412. package/dist/telemetry/index.d.ts.map +1 -0
  413. package/dist/telemetry/index.js +12 -0
  414. package/dist/telemetry/index.js.map +1 -0
  415. package/dist/telemetry/instrument.d.ts +36 -0
  416. package/dist/telemetry/instrument.d.ts.map +1 -0
  417. package/dist/telemetry/instrument.js +215 -0
  418. package/dist/telemetry/instrument.js.map +1 -0
  419. package/dist/telemetry/metrics.d.ts +45 -0
  420. package/dist/telemetry/metrics.d.ts.map +1 -0
  421. package/dist/telemetry/metrics.js +186 -0
  422. package/dist/telemetry/metrics.js.map +1 -0
  423. package/dist/telemetry/tracer.d.ts +33 -0
  424. package/dist/telemetry/tracer.d.ts.map +1 -0
  425. package/dist/telemetry/tracer.js +162 -0
  426. package/dist/telemetry/tracer.js.map +1 -0
  427. package/dist/tools/__tests__/builtin.test.d.ts +7 -0
  428. package/dist/tools/__tests__/builtin.test.d.ts.map +1 -0
  429. package/dist/tools/__tests__/builtin.test.js +242 -0
  430. package/dist/tools/__tests__/builtin.test.js.map +1 -0
  431. package/dist/tools/builtin.d.ts +29 -0
  432. package/dist/tools/builtin.d.ts.map +1 -0
  433. package/dist/tools/builtin.js +367 -0
  434. package/dist/tools/builtin.js.map +1 -0
  435. package/dist/tools/index.d.ts +4 -0
  436. package/dist/tools/index.d.ts.map +1 -0
  437. package/dist/tools/index.js +3 -0
  438. package/dist/tools/index.js.map +1 -0
  439. package/dist/tools/path-guard.d.ts +23 -0
  440. package/dist/tools/path-guard.d.ts.map +1 -0
  441. package/dist/tools/path-guard.js +66 -0
  442. package/dist/tools/path-guard.js.map +1 -0
  443. package/dist/tools/types.d.ts +45 -0
  444. package/dist/tools/types.d.ts.map +1 -0
  445. package/dist/tools/types.js +11 -0
  446. package/dist/tools/types.js.map +1 -0
  447. package/dist/types.d.ts +249 -0
  448. package/dist/types.d.ts.map +1 -0
  449. package/dist/types.js +22 -0
  450. package/dist/types.js.map +1 -0
  451. package/dist/upstream-error.d.ts +64 -0
  452. package/dist/upstream-error.d.ts.map +1 -0
  453. package/dist/upstream-error.js +105 -0
  454. package/dist/upstream-error.js.map +1 -0
  455. package/dist/version.d.ts +2 -0
  456. package/dist/version.d.ts.map +1 -0
  457. package/dist/version.js +2 -0
  458. package/dist/version.js.map +1 -0
  459. package/package.json +49 -0
@@ -0,0 +1,404 @@
1
+ /**
2
+ * Ollama adapter — HTTP API for local Ollama server, no npm dependencies.
3
+ *
4
+ * Base URL: OLLAMA_HOST env var or http://localhost:11434
5
+ * Streaming: NDJSON (not SSE) from POST /api/chat
6
+ *
7
+ * Two modes, picked at runtime by the presence of `config.toolExecutor`:
8
+ *
9
+ * 1. Single-shot chat — no tool executor. Drains one /api/chat
10
+ * response, emits text + result. Backwards-compatible with every
11
+ * caller that existed before agentic support landed.
12
+ *
13
+ * 2. Agentic loop — tool executor present. Each turn the adapter
14
+ * sends `tools: [...]` (OpenAI-compatible JSON Schema), parses
15
+ * `message.tool_calls` from the response, executes each call via
16
+ * the executor, appends the assistant + tool messages to history,
17
+ * and re-POSTs. Loops until the model returns no tool_calls or
18
+ * the `maxToolIterations` cap fires.
19
+ *
20
+ * Capabilities flip to `tier: 'agentic'` because the adapter now drives
21
+ * a full agentic loop. Stage-policy.yaml's build/validate/ship preferences
22
+ * for `local` are real — the adapter can hold its end of those stages.
23
+ */
24
+ import { randomUUID } from 'node:crypto';
25
+ import { emitContent, emitResult, emitToolResult, emitToolUse } from './stream-format.js';
26
+ import { localExecutor } from './router/local-executor.js';
27
+ import { UpstreamError } from './upstream-error.js';
28
+ const DEFAULT_MAX_ITERATIONS = 32;
29
+ const DEFAULT_CONTEXT_WINDOW = 16_384;
30
+ /**
31
+ * Crude tokens-per-byte heuristic. Real tokenizer counts vary by model
32
+ * but for the purposes of OVERFLOW DETECTION (i.e. "are we about to
33
+ * blow num_ctx?") a 4-bytes-per-token approximation is conservative
34
+ * enough — we trim before we'd hit the wall, never after.
35
+ */
36
+ const BYTES_PER_TOKEN = 4;
37
+ /**
38
+ * Soft trim threshold — when accumulated history reaches this fraction
39
+ * of num_ctx, drop oldest tool_result blocks. Keeps a safety margin so
40
+ * the prompt still has room to grow within one turn.
41
+ */
42
+ const SOFT_TRIM_RATIO = 0.85;
43
+ /** Thrown when the conversation history can't be trimmed below num_ctx
44
+ * (e.g. one tool result alone exceeds the window). The dashboard
45
+ * resolver catches this and re-runs the stage with an escalation chain
46
+ * that skips local. */
47
+ export class ContextExhaustedError extends Error {
48
+ model;
49
+ numCtx;
50
+ historyTokens;
51
+ constructor(model, numCtx, historyTokens) {
52
+ super(`Conversation history (${historyTokens} tokens) exceeds num_ctx=${numCtx} for model "${model}" ` +
53
+ `even after trimming. Escalate to a model with a larger context window.`);
54
+ this.name = 'ContextExhaustedError';
55
+ this.model = model;
56
+ this.numCtx = numCtx;
57
+ this.historyTokens = historyTokens;
58
+ }
59
+ }
60
+ function getBaseUrl() {
61
+ return (process.env.OLLAMA_HOST || 'http://localhost:11434').replace(/\/+$/, '');
62
+ }
63
+ // ───────────────────────────────────────────────────────────────────────
64
+ // Adapter
65
+ // ───────────────────────────────────────────────────────────────────────
66
+ export class OllamaAdapter {
67
+ executor;
68
+ provider = 'ollama';
69
+ capabilities = {
70
+ tier: 'agentic',
71
+ streaming: true,
72
+ toolUse: true,
73
+ fileSystem: true,
74
+ shellExecution: true,
75
+ sessionResume: false,
76
+ cache: 'none',
77
+ structuredOutput: 'best-effort',
78
+ maxOutputTokens: false,
79
+ };
80
+ /**
81
+ * In-flight AbortControllers — one per concurrent run() invocation.
82
+ * The adapter is a singleton, but per-repo stages (build/validate/
83
+ * specs/tasks) run multiple repos in parallel against it. A single
84
+ * instance-level field would let one call's `finally` block null out
85
+ * the controller while another is still mid-fetch, causing
86
+ * "Cannot read properties of null (reading 'signal')". The Set lets
87
+ * concurrent calls each own their own controller; kill() aborts all.
88
+ */
89
+ activeControllers = new Set();
90
+ /**
91
+ * @param executor — Single-slot FIFO queue used when a call sets
92
+ * `config.exclusiveSlot === true`. Defaults to the process-wide
93
+ * singleton; tests inject a fresh instance for isolation.
94
+ */
95
+ constructor(executor = localExecutor) {
96
+ this.executor = executor;
97
+ }
98
+ supportsModel(_modelId) {
99
+ // Only used when explicitly configured; auto-detection is via registry rules.
100
+ return false;
101
+ }
102
+ getModelPricing(_modelId) {
103
+ return [0, 0]; // local = free
104
+ }
105
+ async checkAvailability() {
106
+ const baseUrl = getBaseUrl();
107
+ try {
108
+ const res = await fetch(`${baseUrl}/api/tags`, { method: 'GET' });
109
+ if (res.ok)
110
+ return { available: true };
111
+ return { available: false, error: `Ollama returned ${res.status}` };
112
+ }
113
+ catch (err) {
114
+ const msg = err instanceof Error ? err.message : String(err);
115
+ return { available: false, error: `Cannot reach Ollama at ${baseUrl}: ${msg}` };
116
+ }
117
+ }
118
+ kill() {
119
+ for (const ac of this.activeControllers) {
120
+ try {
121
+ ac.abort();
122
+ }
123
+ catch { /* already aborted */ }
124
+ }
125
+ this.activeControllers.clear();
126
+ }
127
+ async run(config, output) {
128
+ if (config.exclusiveSlot) {
129
+ return this.executor.withModel(config.model, () => this.runInner(config, output));
130
+ }
131
+ return this.runInner(config, output);
132
+ }
133
+ async runInner(config, output) {
134
+ const abortController = new AbortController();
135
+ this.activeControllers.add(abortController);
136
+ const startMs = Date.now();
137
+ const messages = [];
138
+ if (config.projectPrompt)
139
+ messages.push({ role: 'system', content: config.projectPrompt });
140
+ messages.push({ role: 'user', content: config.userPrompt });
141
+ const tools = config.toolExecutor ? mapSchemasToOllama(config.toolExecutor.listSchemas()) : undefined;
142
+ const numCtx = config.contextWindow ?? DEFAULT_CONTEXT_WINDOW;
143
+ const maxIter = config.maxToolIterations ?? DEFAULT_MAX_ITERATIONS;
144
+ let aggregatedText = '';
145
+ let totalIn = 0;
146
+ let totalOut = 0;
147
+ let totalDurMs = 0;
148
+ let stopReason;
149
+ try {
150
+ for (let iter = 0; iter < maxIter; iter++) {
151
+ // Bound conversation history before each turn. Drops oldest
152
+ // tool_result blocks (least informative — the model already saw
153
+ // them once) keeping the system + user + recent turns intact.
154
+ // If trimming can't bring history below num_ctx, escalate.
155
+ trimHistoryIfNeeded(messages, numCtx, config.model);
156
+ const turn = await this.runOneTurn(messages, tools, numCtx, config, output, abortController.signal);
157
+ aggregatedText += turn.text;
158
+ totalIn += turn.inputTokens;
159
+ totalOut += turn.outputTokens;
160
+ totalDurMs += turn.durationMs;
161
+ if (turn.toolCalls.length === 0 || !config.toolExecutor) {
162
+ stopReason = turn.toolCalls.length === 0 ? 'end_turn' : 'tools_unsupported';
163
+ break;
164
+ }
165
+ // Append the assistant's tool-call turn to history so the model
166
+ // sees its own request when we re-prompt with results.
167
+ messages.push({
168
+ role: 'assistant',
169
+ content: turn.text,
170
+ tool_calls: turn.toolCalls,
171
+ });
172
+ // Execute every tool call. Sequential — parallel exec via the
173
+ // builtin executor is safe today (each tool is independent),
174
+ // but bash/edit ordering matters when the model chains them,
175
+ // so we serialize.
176
+ for (const toolCall of turn.toolCalls) {
177
+ const callId = randomUUID();
178
+ const args = normalizeArgs(toolCall.function.arguments);
179
+ const call = { id: callId, name: toolCall.function.name, arguments: args };
180
+ emitToolUse(output, call.name, args, callId);
181
+ const result = await invokeTool(config.toolExecutor, call, config.workingDir, abortController.signal);
182
+ emitToolResult(output, { toolUseId: callId, content: result.content, isError: result.isError });
183
+ messages.push({
184
+ role: 'tool',
185
+ content: result.content,
186
+ tool_call_id: callId,
187
+ });
188
+ }
189
+ if (abortController.signal.aborted) {
190
+ stopReason = 'aborted';
191
+ break;
192
+ }
193
+ }
194
+ if (stopReason === undefined)
195
+ stopReason = 'iteration_limit';
196
+ }
197
+ finally {
198
+ this.activeControllers.delete(abortController);
199
+ }
200
+ const durationMs = totalDurMs > 0 ? totalDurMs : Date.now() - startMs;
201
+ emitResult(output, {
202
+ text: aggregatedText,
203
+ costUsd: 0,
204
+ inputTokens: totalIn,
205
+ outputTokens: totalOut,
206
+ durationMs,
207
+ });
208
+ return {
209
+ output: aggregatedText,
210
+ inputTokens: totalIn,
211
+ outputTokens: totalOut,
212
+ costUsd: 0,
213
+ durationMs,
214
+ provider: 'ollama',
215
+ model: config.model,
216
+ stopReason,
217
+ toolCallCount: countToolCalls(messages),
218
+ };
219
+ }
220
+ /**
221
+ * One round-trip with Ollama: send messages + tools, drain the NDJSON
222
+ * stream, return the assistant's text accumulator + any tool_calls
223
+ * the model emitted in the final chunk.
224
+ */
225
+ async runOneTurn(messages, tools, numCtx, config, output, signal) {
226
+ const baseUrl = getBaseUrl();
227
+ const body = {
228
+ model: config.model,
229
+ messages,
230
+ stream: true,
231
+ options: { num_ctx: numCtx },
232
+ };
233
+ if (tools && tools.length > 0)
234
+ body.tools = tools;
235
+ if (typeof config.maxOutputTokens === 'number' && config.maxOutputTokens > 0) {
236
+ body.options.num_predict = config.maxOutputTokens;
237
+ }
238
+ const response = await fetch(`${baseUrl}/api/chat`, {
239
+ method: 'POST',
240
+ headers: { 'Content-Type': 'application/json' },
241
+ body: JSON.stringify(body),
242
+ signal,
243
+ });
244
+ if (!response.ok) {
245
+ const errBody = await response.text();
246
+ throw new UpstreamError(response.status, errBody, { provider: 'ollama' });
247
+ }
248
+ if (!response.body)
249
+ throw new UpstreamError(0, 'Ollama API returned no response body', { provider: 'ollama' });
250
+ const reader = response.body.getReader();
251
+ const decoder = new TextDecoder();
252
+ let buffer = '';
253
+ let text = '';
254
+ const toolCalls = [];
255
+ let inputTokens = 0;
256
+ let outputTokens = 0;
257
+ let durationMs = 0;
258
+ // Buffer text deltas and flush at line breaks (or every ~80 chars)
259
+ // so each activity card holds a readable chunk instead of one
260
+ // word per row.
261
+ let pendingText = '';
262
+ const FLUSH_THRESHOLD = 80;
263
+ while (true) {
264
+ const { done, value } = await reader.read();
265
+ if (done)
266
+ break;
267
+ buffer += decoder.decode(value, { stream: true });
268
+ const lines = buffer.split('\n');
269
+ buffer = lines.pop() ?? '';
270
+ for (const line of lines) {
271
+ const trimmed = line.trim();
272
+ if (!trimmed)
273
+ continue;
274
+ let chunk;
275
+ try {
276
+ chunk = JSON.parse(trimmed);
277
+ }
278
+ catch {
279
+ continue;
280
+ }
281
+ const msg = chunk.message;
282
+ if (msg?.content) {
283
+ text += msg.content;
284
+ pendingText += msg.content;
285
+ while (pendingText.includes('\n')) {
286
+ const nl = pendingText.indexOf('\n');
287
+ const lineOut = pendingText.slice(0, nl + 1);
288
+ emitContent(output, lineOut);
289
+ pendingText = pendingText.slice(nl + 1);
290
+ }
291
+ if (pendingText.length >= FLUSH_THRESHOLD) {
292
+ emitContent(output, pendingText);
293
+ pendingText = '';
294
+ }
295
+ }
296
+ if (msg?.tool_calls && msg.tool_calls.length > 0) {
297
+ toolCalls.push(...msg.tool_calls);
298
+ }
299
+ if (chunk.done === true) {
300
+ if (typeof chunk.prompt_eval_count === 'number')
301
+ inputTokens = chunk.prompt_eval_count;
302
+ if (typeof chunk.eval_count === 'number')
303
+ outputTokens = chunk.eval_count;
304
+ if (typeof chunk.total_duration === 'number')
305
+ durationMs = chunk.total_duration / 1_000_000;
306
+ }
307
+ }
308
+ }
309
+ // Flush trailing content not ending on a newline.
310
+ if (pendingText.length > 0) {
311
+ emitContent(output, pendingText);
312
+ }
313
+ return { text, toolCalls, inputTokens, outputTokens, durationMs };
314
+ }
315
+ }
316
+ // ───────────────────────────────────────────────────────────────────────
317
+ // Helpers
318
+ // ───────────────────────────────────────────────────────────────────────
319
+ function mapSchemasToOllama(schemas) {
320
+ return schemas.map((s) => ({
321
+ type: 'function',
322
+ function: {
323
+ name: s.name,
324
+ description: s.description,
325
+ parameters: s.inputSchema,
326
+ },
327
+ }));
328
+ }
329
+ function normalizeArgs(args) {
330
+ if (typeof args === 'object' && args !== null)
331
+ return args;
332
+ if (typeof args === 'string') {
333
+ try {
334
+ const parsed = JSON.parse(args);
335
+ return typeof parsed === 'object' && parsed !== null ? parsed : {};
336
+ }
337
+ catch {
338
+ return { _raw: args };
339
+ }
340
+ }
341
+ return {};
342
+ }
343
+ async function invokeTool(executor, call, workingDir, abortSignal) {
344
+ try {
345
+ return await executor.execute(call, { workingDir, abortSignal });
346
+ }
347
+ catch (err) {
348
+ const msg = err instanceof Error ? err.message : String(err);
349
+ return { content: `Tool execution threw: ${msg}`, isError: true };
350
+ }
351
+ }
352
+ function countToolCalls(messages) {
353
+ let n = 0;
354
+ for (const m of messages) {
355
+ if (m.role === 'assistant' && m.tool_calls)
356
+ n += m.tool_calls.length;
357
+ }
358
+ return n;
359
+ }
360
+ /**
361
+ * Crude tokens approximation — bytes / 4. Used only to decide when to
362
+ * trim, never as a billing input.
363
+ */
364
+ function estimateTokens(messages) {
365
+ let bytes = 0;
366
+ for (const m of messages) {
367
+ bytes += m.content.length;
368
+ if (m.tool_calls) {
369
+ for (const tc of m.tool_calls) {
370
+ bytes += tc.function.name.length;
371
+ bytes += typeof tc.function.arguments === 'string'
372
+ ? tc.function.arguments.length
373
+ : JSON.stringify(tc.function.arguments).length;
374
+ }
375
+ }
376
+ }
377
+ return Math.ceil(bytes / BYTES_PER_TOKEN);
378
+ }
379
+ /**
380
+ * Drop the oldest tool-role messages until the history fits below
381
+ * SOFT_TRIM_RATIO × numCtx. Keeps system + user prompts intact (they
382
+ * carry the original task framing) and keeps the most recent turns
383
+ * intact (where the active state of the loop lives). If we can't trim
384
+ * enough — e.g. a single tool_result is bigger than the window —
385
+ * escalate via ContextExhaustedError.
386
+ */
387
+ export function trimHistoryIfNeeded(messages, numCtx, model) {
388
+ const cap = Math.floor(numCtx * SOFT_TRIM_RATIO);
389
+ if (estimateTokens(messages) <= cap)
390
+ return;
391
+ // Walk forward from the start, skipping system/user, drop the FIRST
392
+ // tool message we find. Repeat until under cap or no more droppable
393
+ // tool messages exist.
394
+ while (estimateTokens(messages) > cap) {
395
+ const dropIndex = messages.findIndex((m) => m.role === 'tool');
396
+ if (dropIndex === -1)
397
+ break;
398
+ messages.splice(dropIndex, 1);
399
+ }
400
+ if (estimateTokens(messages) > numCtx) {
401
+ throw new ContextExhaustedError(model, numCtx, estimateTokens(messages));
402
+ }
403
+ }
404
+ //# sourceMappingURL=ollama-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama-adapter.js","sourceRoot":"","sources":["../src/ollama-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * OpenAI HTTP API adapter — agentic, inherits the OpenAI-compatible
3
+ * SSE loop from `OpenRouterAdapter`.
4
+ *
5
+ * OpenRouter / OpenCode Go / OpenAI all speak the same `/v1/chat/completions`
6
+ * protocol. We use OpenRouter as the canonical implementation (SSE
7
+ * `tool_calls` reassembly by `index`, `reasoning` + `reasoning_details`
8
+ * echo-back for o-series / thinking models, `UpstreamError` with
9
+ * retryable classification, per-call `AbortController` set, buffered
10
+ * emitContent). This adapter just overrides the config knobs:
11
+ *
12
+ * - `provider` flips to `'openai'`
13
+ * - API key reads from `OPENAI_API_KEY`
14
+ * - Base URL defaults to `https://api.openai.com/v1` (override with
15
+ * `OPENAI_BASE_URL` for proxies / Azure-OpenAI / etc.)
16
+ * - Drops OpenRouter's attribution headers (`HTTP-Referer`, `X-Title`)
17
+ * - Pricing fallback table maps the bare OpenAI ids
18
+ *
19
+ * Capability tier flips from `'function-calling'` → `'agentic'` because
20
+ * the inherited SSE consumer drives a real `BuiltinToolExecutor` loop.
21
+ * o1 / o3 / o4 reasoning models work out-of-the-box — the parent
22
+ * captures `delta.reasoning` / `delta.reasoning_details` and replays
23
+ * them on the next assistant turn (same protocol upstream uses).
24
+ */
25
+ import type { ProviderName } from './types.js';
26
+ import { OpenRouterAdapter } from './openrouter-adapter.js';
27
+ export declare class OpenAIAdapter extends OpenRouterAdapter {
28
+ readonly provider: ProviderName;
29
+ protected getApiKey(): string | undefined;
30
+ protected getBaseUrl(): string;
31
+ protected getExtraHeaders(): Record<string, string>;
32
+ supportsModel(modelId: string): boolean;
33
+ getModelPricing(modelId: string): [number, number] | null;
34
+ checkAvailability(): Promise<{
35
+ available: boolean;
36
+ version?: string;
37
+ error?: string;
38
+ }>;
39
+ }
40
+ //# sourceMappingURL=openai-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-adapter.d.ts","sourceRoot":"","sources":["../src/openai-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAwB5D,qBAAa,aAAc,SAAQ,iBAAiB;IAClD,SAAkB,QAAQ,EAAE,YAAY,CAAY;cAIjC,SAAS,IAAI,MAAM,GAAG,SAAS;cAI/B,UAAU,IAAI,MAAM;cAOpB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAOnD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOvC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAMnD,iBAAiB,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAKtG"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * OpenAI HTTP API adapter — agentic, inherits the OpenAI-compatible
3
+ * SSE loop from `OpenRouterAdapter`.
4
+ *
5
+ * OpenRouter / OpenCode Go / OpenAI all speak the same `/v1/chat/completions`
6
+ * protocol. We use OpenRouter as the canonical implementation (SSE
7
+ * `tool_calls` reassembly by `index`, `reasoning` + `reasoning_details`
8
+ * echo-back for o-series / thinking models, `UpstreamError` with
9
+ * retryable classification, per-call `AbortController` set, buffered
10
+ * emitContent). This adapter just overrides the config knobs:
11
+ *
12
+ * - `provider` flips to `'openai'`
13
+ * - API key reads from `OPENAI_API_KEY`
14
+ * - Base URL defaults to `https://api.openai.com/v1` (override with
15
+ * `OPENAI_BASE_URL` for proxies / Azure-OpenAI / etc.)
16
+ * - Drops OpenRouter's attribution headers (`HTTP-Referer`, `X-Title`)
17
+ * - Pricing fallback table maps the bare OpenAI ids
18
+ *
19
+ * Capability tier flips from `'function-calling'` → `'agentic'` because
20
+ * the inherited SSE consumer drives a real `BuiltinToolExecutor` loop.
21
+ * o1 / o3 / o4 reasoning models work out-of-the-box — the parent
22
+ * captures `delta.reasoning` / `delta.reasoning_details` and replays
23
+ * them on the next assistant turn (same protocol upstream uses).
24
+ */
25
+ import { OpenRouterAdapter } from './openrouter-adapter.js';
26
+ /**
27
+ * Pricing fallbacks for known bare OpenAI ids.
28
+ * `[inputPer1MTokens, outputPer1MTokens]`. The chat-completions response
29
+ * doesn't echo `usage.cost`, so the inherited base class falls back to
30
+ * this table when computing per-call cost.
31
+ */
32
+ const OPENAI_PRICING = {
33
+ // Current generation
34
+ 'gpt-4o': [2.5, 10.0],
35
+ 'gpt-4o-mini': [0.15, 0.60],
36
+ 'gpt-4-turbo': [10.0, 30.0],
37
+ 'gpt-4': [30.0, 60.0],
38
+ 'chatgpt-4o-latest': [5.0, 15.0],
39
+ // o-series reasoning models
40
+ 'o1': [15.0, 60.0],
41
+ 'o1-mini': [3.0, 12.0],
42
+ 'o1-preview': [15.0, 60.0],
43
+ 'o3': [10.0, 40.0],
44
+ 'o3-mini': [1.1, 4.4],
45
+ 'o4-mini': [1.1, 4.4],
46
+ };
47
+ export class OpenAIAdapter extends OpenRouterAdapter {
48
+ provider = 'openai';
49
+ // -- Configuration overrides ----------------------------------------------
50
+ getApiKey() {
51
+ return process.env.OPENAI_API_KEY;
52
+ }
53
+ getBaseUrl() {
54
+ // Default to api.openai.com. `OPENAI_BASE_URL` overrides for proxies,
55
+ // Azure-OpenAI, or self-hosted OpenAI-compatible endpoints (vLLM,
56
+ // LocalAI, etc.).
57
+ return (process.env.OPENAI_BASE_URL ?? 'https://api.openai.com/v1').replace(/\/+$/, '');
58
+ }
59
+ getExtraHeaders() {
60
+ // OpenAI's API doesn't use the OpenRouter attribution headers.
61
+ return {};
62
+ }
63
+ // -- Model id handling ----------------------------------------------------
64
+ supportsModel(modelId) {
65
+ // Match bare OpenAI ids — `gpt-*`, `chatgpt-*`, and the o-series.
66
+ // OpenRouter slugs (`openai/gpt-4o`) deliberately fall through to
67
+ // OpenRouterAdapter via the slash-routing in default-adapter-factory.
68
+ return /^(gpt-|chatgpt-|o[134](-|$))/.test(modelId);
69
+ }
70
+ getModelPricing(modelId) {
71
+ return OPENAI_PRICING[modelId] ?? null;
72
+ }
73
+ // -- Availability ---------------------------------------------------------
74
+ async checkAvailability() {
75
+ const key = this.getApiKey();
76
+ if (!key)
77
+ return { available: false, error: 'OPENAI_API_KEY is not set' };
78
+ return { available: true };
79
+ }
80
+ }
81
+ //# sourceMappingURL=openai-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-adapter.js","sourceRoot":"","sources":["../src/openai-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,cAAc,GAAqC;IACvD,qBAAqB;IACrB,QAAQ,EAAkB,CAAC,GAAG,EAAE,IAAI,CAAC;IACrC,aAAa,EAAa,CAAC,IAAI,EAAE,IAAI,CAAC;IACtC,aAAa,EAAa,CAAC,IAAI,EAAE,IAAI,CAAC;IACtC,OAAO,EAAmB,CAAC,IAAI,EAAE,IAAI,CAAC;IACtC,mBAAmB,EAAO,CAAC,GAAG,EAAE,IAAI,CAAC;IACrC,4BAA4B;IAC5B,IAAI,EAAsB,CAAC,IAAI,EAAE,IAAI,CAAC;IACtC,SAAS,EAAiB,CAAC,GAAG,EAAE,IAAI,CAAC;IACrC,YAAY,EAAc,CAAC,IAAI,EAAE,IAAI,CAAC;IACtC,IAAI,EAAsB,CAAC,IAAI,EAAE,IAAI,CAAC;IACtC,SAAS,EAAiB,CAAC,GAAG,EAAE,GAAG,CAAC;IACpC,SAAS,EAAiB,CAAC,GAAG,EAAE,GAAG,CAAC;CACrC,CAAC;AAEF,MAAM,OAAO,aAAc,SAAQ,iBAAiB;IAChC,QAAQ,GAAiB,QAAQ,CAAC;IAEpD,4EAA4E;IAEzD,SAAS;QAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACpC,CAAC;IAEkB,UAAU;QAC3B,sEAAsE;QACtE,kEAAkE;QAClE,kBAAkB;QAClB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,2BAA2B,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC1F,CAAC;IAEkB,eAAe;QAChC,+DAA+D;QAC/D,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,4EAA4E;IAEnE,aAAa,CAAC,OAAe;QACpC,kEAAkE;QAClE,kEAAkE;QAClE,sEAAsE;QACtE,OAAO,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtD,CAAC;IAEQ,eAAe,CAAC,OAAe;QACtC,OAAO,cAAc,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IACzC,CAAC;IAED,4EAA4E;IAEnE,KAAK,CAAC,iBAAiB;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;QAC1E,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;CACF"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * OpenCode Go adapter — agentic HTTPS proxy for OpenCode's subscription
3
+ * service (https://opencode.ai/docs/go).
4
+ *
5
+ * OpenCode Go is a $10/month subscription that exposes a curated set of
6
+ * open coding models (Qwen3.5/3.6 Plus, Kimi K2.5/K2.6, GLM-5/5.1,
7
+ * DeepSeek V4, MiniMax M2.5/M2.7, MiMo …) via an OpenAI-compatible API
8
+ * at `https://opencode.ai/zen/go/v1/`. From our perspective it's just
9
+ * another OpenAI-compatible endpoint — same SSE format, same tool-call
10
+ * delta protocol — so we inherit `OpenRouterAdapter`'s agentic loop
11
+ * and override the config.
12
+ *
13
+ * Models in the registry are addressed as `opencode/<model>` (e.g.
14
+ * `opencode/qwen3.5-plus`). The adapter strips the `opencode/` prefix
15
+ * before sending to the upstream API. No binary, no daemon, no local
16
+ * SDK — just HTTP + an API key from the user's Go subscription.
17
+ *
18
+ * Replaces Ollama as the cheap local-tier provider when the user has
19
+ * a Go subscription: VRAM cost drops from ~12 GB (Ollama hosting
20
+ * qwen3:14b) to 0 GB, RAM cost stays nominal. Inference happens on
21
+ * OpenCode's hosted infrastructure.
22
+ */
23
+ import type { ModelAdapterConfig, ModelAdapterResult, ProviderName } from './types.js';
24
+ import { OpenRouterAdapter } from './openrouter-adapter.js';
25
+ export declare class OpenCodeAdapter extends OpenRouterAdapter {
26
+ readonly provider: ProviderName;
27
+ protected getApiKey(): string | undefined;
28
+ protected getBaseUrl(): string;
29
+ protected getExtraHeaders(): Record<string, string>;
30
+ supportsModel(modelId: string): boolean;
31
+ getModelPricing(modelId: string): [number, number] | null;
32
+ run(config: ModelAdapterConfig, output: NodeJS.WritableStream): Promise<ModelAdapterResult>;
33
+ checkAvailability(): Promise<{
34
+ available: boolean;
35
+ version?: string;
36
+ error?: string;
37
+ }>;
38
+ }
39
+ //# sourceMappingURL=opencode-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-adapter.d.ts","sourceRoot":"","sources":["../src/opencode-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAkC5D,qBAAa,eAAgB,SAAQ,iBAAiB;IACpD,SAAkB,QAAQ,EAAE,YAAY,CAAc;cAInC,SAAS,IAAI,MAAM,GAAG,SAAS;cAI/B,UAAU,IAAI,MAAM;cAOpB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAUnD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOvC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAOnD,GAAG,CAChB,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,MAAM,CAAC,cAAc,GAC5B,OAAO,CAAC,kBAAkB,CAAC;IAef,iBAAiB,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAKtG"}