@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,249 @@
1
+ /**
2
+ * `@esankhan3/anvil-agent-core` — public type surface.
3
+ *
4
+ * Two interfaces live here, intentionally:
5
+ *
6
+ * 1. `LanguageModel` — the new, forward-looking shape. Vendor-agnostic
7
+ * streaming/single-shot interface that future code (Phase 5+ of the
8
+ * agent-core extract) wires against. Yields typed events; analytical
9
+ * callers drain the stream via the default `invoke()` impl.
10
+ *
11
+ * 2. `ModelAdapter` — the legacy interface inherited from cli/src/providers.
12
+ * Kept verbatim (same field names, same signatures) so the seven existing
13
+ * adapters keep compiling unchanged when they move into this package in
14
+ * Phase 3+4. New code should not import these — they are bridged into
15
+ * `LanguageModel` via `legacyAdapterToLanguageModel()` (Phase 3).
16
+ *
17
+ * `ProviderName` is shared between the two interfaces and uses the EXISTING
18
+ * values (`'claude' | 'openai' | …`) — see ADR D15. Renaming would cascade
19
+ * through every `ProviderRegistry.get()` site and the model-router dispatcher.
20
+ */
21
+ export type ProviderName = 'claude' | 'openai' | 'gemini' | 'openrouter' | 'ollama' | 'gemini-cli' | 'adk' | 'opencode';
22
+ export type ProviderTier = 'agentic' | 'function-calling' | 'text-only';
23
+ export interface ProviderCapabilities {
24
+ tier: ProviderTier;
25
+ streaming: boolean;
26
+ toolUse: boolean;
27
+ fileSystem: boolean;
28
+ shellExecution: boolean;
29
+ sessionResume: boolean;
30
+ /** Whether the provider supports prompt caching (e.g. Anthropic ephemeral cache). */
31
+ promptCaching?: boolean;
32
+ /**
33
+ * Prompt-cache marker semantics:
34
+ * - 'auto' — provider caches stable prefixes silently (e.g. OpenAI ≥1024 tok).
35
+ * - 'explicit' — caller must place markers (e.g. Anthropic cache_control).
36
+ * - 'none' — no caching benefit; markers are no-ops.
37
+ * `undefined` means the adapter has not declared a stance — treat as 'none'.
38
+ */
39
+ cache?: 'auto' | 'explicit' | 'none';
40
+ /** Cache TTL in seconds when `cache !== 'none'`. Informational only. */
41
+ cacheTtlSeconds?: number;
42
+ /**
43
+ * Adapter honors `ModelAdapterConfig.maxOutputTokens` and forwards it to the
44
+ * provider. When false, callers may still pass it but the adapter ignores it.
45
+ */
46
+ maxOutputTokens?: boolean;
47
+ /**
48
+ * Structured-output (JSON-schema-constrained generation) support level.
49
+ * - 'strict' — provider enforces the schema server-side.
50
+ * - 'tool-shim' — caller emulates via tool calls (e.g. Claude's tool-use trick).
51
+ * - 'best-effort' — prompt-only; provider doesn't constrain output.
52
+ * - 'none' — not supported.
53
+ */
54
+ structuredOutput?: 'strict' | 'tool-shim' | 'best-effort' | 'none';
55
+ }
56
+ export interface LanguageModelMessage {
57
+ role: 'system' | 'user' | 'assistant' | 'tool';
58
+ content: string;
59
+ toolCallId?: string;
60
+ toolCalls?: ToolCall[];
61
+ }
62
+ export interface ToolCall {
63
+ id: string;
64
+ name: string;
65
+ arguments: Record<string, unknown>;
66
+ }
67
+ export interface ToolSchema {
68
+ name: string;
69
+ description: string;
70
+ inputSchema: Record<string, unknown>;
71
+ }
72
+ export interface LanguageModelInvokeOptions {
73
+ model: string;
74
+ messages: LanguageModelMessage[];
75
+ tools?: ToolSchema[];
76
+ maxTokens?: number;
77
+ temperature?: number;
78
+ /** Index in `messages[]` where a cache breakpoint should be inserted (Anthropic-style). */
79
+ cacheBreakpoint?: number;
80
+ /** Escape hatch for provider-specific knobs (e.g., `topP`, `responseFormat`). */
81
+ providerOptions?: Record<string, unknown>;
82
+ signal?: AbortSignal;
83
+ }
84
+ export type StreamEvent = {
85
+ type: 'text-delta';
86
+ text: string;
87
+ } | {
88
+ type: 'tool-call';
89
+ call: ToolCall;
90
+ } | {
91
+ type: 'reasoning-delta';
92
+ text: string;
93
+ } | {
94
+ type: 'usage';
95
+ inputTokens: number;
96
+ outputTokens: number;
97
+ cacheReadTokens?: number;
98
+ cacheWriteTokens?: number;
99
+ } | {
100
+ type: 'finish';
101
+ reason: 'end' | 'tool-use' | 'length' | 'error';
102
+ error?: string;
103
+ };
104
+ export interface InvokeUsage {
105
+ inputTokens: number;
106
+ outputTokens: number;
107
+ cacheReadTokens?: number;
108
+ cacheWriteTokens?: number;
109
+ }
110
+ export interface InvokeResult {
111
+ text: string;
112
+ toolCalls: ToolCall[];
113
+ usage: InvokeUsage;
114
+ costUsd: number;
115
+ durationMs: number;
116
+ provider: ProviderName;
117
+ model: string;
118
+ /** Reason the stream finished. Mirrors the final `finish` event. */
119
+ finishReason: 'end' | 'tool-use' | 'length' | 'error';
120
+ }
121
+ export interface LanguageModel {
122
+ readonly provider: ProviderName;
123
+ readonly capabilities: ProviderCapabilities;
124
+ supportsModel(modelId: string): boolean;
125
+ /** `[inputPer1M, outputPer1M]` pricing in USD, or `null` if unknown. */
126
+ getModelPricing(modelId: string): [number, number] | null;
127
+ checkAvailability(): Promise<{
128
+ available: boolean;
129
+ version?: string;
130
+ error?: string;
131
+ }>;
132
+ /** Streaming surface — yields events as the provider produces them. */
133
+ invokeStream(opts: LanguageModelInvokeOptions): AsyncIterable<StreamEvent>;
134
+ /** Single-shot surface — drains the stream and returns the final block. */
135
+ invoke(opts: LanguageModelInvokeOptions): Promise<InvokeResult>;
136
+ }
137
+ export interface ModelAdapterConfig {
138
+ userPrompt: string;
139
+ projectPrompt?: string;
140
+ model: string;
141
+ workingDir: string;
142
+ stage: string;
143
+ persona: string;
144
+ sessionId?: string;
145
+ resume?: boolean;
146
+ permissionMode?: string;
147
+ allowedTools?: string[];
148
+ disallowedTools?: string[];
149
+ timeout?: number;
150
+ /**
151
+ * Cap on the number of output tokens the provider should emit for this
152
+ * call. Adapters whose `capabilities.maxOutputTokens === true` honor it
153
+ * (set the provider's `max_tokens` knob); others ignore it.
154
+ */
155
+ maxOutputTokens?: number;
156
+ /**
157
+ * Routes the call through the process-local FIFO single-slot executor
158
+ * (`@esankhan3/anvil-agent-core/router/local-executor`). Set true ONLY for local
159
+ * GPU-resident models that cannot co-reside (Qwen 14B / Gemma class).
160
+ * Other adapters ignore this flag. Default false = bypass queue.
161
+ */
162
+ exclusiveSlot?: boolean;
163
+ /**
164
+ * Optional tool executor for adapters that drive their own agentic
165
+ * loop (Ollama, future OpenAI/Gemini agentic paths). When set, the
166
+ * adapter advertises the executor's filtered schemas to the model
167
+ * and feeds back tool results in-loop. Claude CLI ignores it — it
168
+ * ships its own tool runtime.
169
+ */
170
+ toolExecutor?: ToolExecutorLike;
171
+ /**
172
+ * Cap on agentic-loop iterations. Default 32. Adapters that don't
173
+ * loop ignore the field. Hitting the cap surfaces as
174
+ * `stopReason: 'iteration_limit'` in the result.
175
+ */
176
+ maxToolIterations?: number;
177
+ /**
178
+ * Provider-side context-window cap (Ollama `num_ctx`). Bounds VRAM
179
+ * cost of the conversation history. Adapters that don't expose
180
+ * this knob ignore the field.
181
+ */
182
+ contextWindow?: number;
183
+ /**
184
+ * Path to an `mcp.json` config the adapter should forward to its
185
+ * underlying tool runtime. Today only the Claude CLI path consumes
186
+ * this (passes `--mcp-config <path>`); other adapters ignore it.
187
+ * Populated by `defaultAdapterFactory` when a `workspaceDir` is set
188
+ * and an MCP config is discovered. Per AGENT-PROCESS-CONSOLIDATION-
189
+ * ADR §C5.
190
+ */
191
+ mcpConfigPath?: string;
192
+ }
193
+ export interface ToolExecutorLike {
194
+ listSchemas(): ToolSchema[];
195
+ execute(call: ToolCall, ctx: {
196
+ workingDir: string;
197
+ abortSignal: AbortSignal;
198
+ }): Promise<{
199
+ content: string;
200
+ isError: boolean;
201
+ }>;
202
+ }
203
+ export interface ModelAdapterResult {
204
+ output: string;
205
+ inputTokens: number;
206
+ outputTokens: number;
207
+ costUsd: number;
208
+ durationMs: number;
209
+ sessionId?: string;
210
+ provider: ProviderName;
211
+ model: string;
212
+ /** Tokens served from a prompt cache (Anthropic cache_read, OpenAI cached_tokens, Gemini cachedContentTokenCount). */
213
+ cacheReadTokens?: number;
214
+ /** Tokens written to the prompt cache (Anthropic cache_creation; OpenAI/Gemini do not bill cache writes separately). */
215
+ cacheWriteTokens?: number;
216
+ /** Tokens spent on extended thinking / reasoning blocks (Anthropic ThinkingBlock, OpenAI o-series reasoning, Gemini thoughtsTokenCount). */
217
+ reasoningTokens?: number;
218
+ /** Count of tool_use / function-call invocations in this turn. */
219
+ toolCallCount?: number;
220
+ /**
221
+ * Provider-reported reason the call ended. Common values:
222
+ * - 'end_turn' / 'stop' — natural completion
223
+ * - 'max_tokens' / 'length' — output ceiling hit (truncation)
224
+ * - 'tool_use' — paused for a tool call
225
+ * Adapters that don't surface a reason leave it undefined. OpenAI-shape
226
+ * adapters normalize 'length' → 'max_tokens' so callers can detect
227
+ * truncation provider-agnostically.
228
+ */
229
+ stopReason?: string;
230
+ }
231
+ export interface ModelAdapter {
232
+ readonly provider: ProviderName;
233
+ readonly capabilities: ProviderCapabilities;
234
+ /** Check whether this adapter handles the given model identifier. */
235
+ supportsModel(modelId: string): boolean;
236
+ /** Return [inputPer1M, outputPer1M] pricing, or null if unknown. */
237
+ getModelPricing(modelId: string): [number, number] | null;
238
+ /** Verify the provider CLI / API is reachable and report its version. */
239
+ checkAvailability(): Promise<{
240
+ available: boolean;
241
+ version?: string;
242
+ error?: string;
243
+ }>;
244
+ /** Run agent. Write Anvil Stream Format NDJSON to `output`. */
245
+ run(config: ModelAdapterConfig, output: NodeJS.WritableStream): Promise<ModelAdapterResult>;
246
+ /** Kill running process if applicable. */
247
+ kill?(): void;
248
+ }
249
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,22 @@
1
+ /**
2
+ * `@esankhan3/anvil-agent-core` — public type surface.
3
+ *
4
+ * Two interfaces live here, intentionally:
5
+ *
6
+ * 1. `LanguageModel` — the new, forward-looking shape. Vendor-agnostic
7
+ * streaming/single-shot interface that future code (Phase 5+ of the
8
+ * agent-core extract) wires against. Yields typed events; analytical
9
+ * callers drain the stream via the default `invoke()` impl.
10
+ *
11
+ * 2. `ModelAdapter` — the legacy interface inherited from cli/src/providers.
12
+ * Kept verbatim (same field names, same signatures) so the seven existing
13
+ * adapters keep compiling unchanged when they move into this package in
14
+ * Phase 3+4. New code should not import these — they are bridged into
15
+ * `LanguageModel` via `legacyAdapterToLanguageModel()` (Phase 3).
16
+ *
17
+ * `ProviderName` is shared between the two interfaces and uses the EXISTING
18
+ * values (`'claude' | 'openai' | …`) — see ADR D15. Renaming would cascade
19
+ * through every `ProviderRegistry.get()` site and the model-router dispatcher.
20
+ */
21
+ export {};
22
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Shared upstream-error contract for all `ModelAdapter` implementations.
3
+ *
4
+ * The dashboard's `runStageWithFallback` (in
5
+ * `packages/dashboard/server/pipeline-runner.ts`) duck-types this shape
6
+ * — `name === 'UpstreamError' && retryable === true` — to decide whether
7
+ * to burn the current model and re-resolve the chain. Adapters that
8
+ * throw plain `Error` lose chain-fallback even when the failure is
9
+ * obviously transient (429 quota, 503 outage).
10
+ *
11
+ * The class is provider-agnostic on purpose. CLI adapters (claude,
12
+ * gemini-cli) don't get an HTTP status — pass `synthesizeStatusFromCli`
13
+ * the stderr text and we'll map known vendor patterns to a synthetic
14
+ * status code that callers can switch on the same way they switch on
15
+ * real HTTP status codes.
16
+ */
17
+ export declare class UpstreamError extends Error {
18
+ readonly status: number;
19
+ readonly body: string;
20
+ /**
21
+ * True when the failure class warrants chain-fallback (insufficient
22
+ * quota, rate limited, upstream outage). Auth / bad-request errors
23
+ * are NOT retryable — they need a config fix, not a different model.
24
+ */
25
+ readonly retryable: boolean;
26
+ constructor(status: number, body: string, opts?: {
27
+ provider?: string;
28
+ retryable?: boolean;
29
+ });
30
+ }
31
+ /**
32
+ * Default retryable-status map. Matches what the dashboard's
33
+ * `runStageWithFallback` checks. Adapters can pass an explicit
34
+ * `retryable` override when they need finer control (e.g. Anthropic's
35
+ * "Credit balance too low" is 400 with a specific body — not
36
+ * retryable to a different model from the SAME provider, but the
37
+ * dashboard should still fall back to a DIFFERENT provider in the
38
+ * chain, so we mark it retryable=true with a synthetic 402).
39
+ */
40
+ export declare function isRetryableStatus(status: number): boolean;
41
+ /**
42
+ * Body-pattern matcher for cases where the upstream returns 200/400
43
+ * but the body indicates a transient condition. Common with Anthropic
44
+ * (`overloaded_error`) and OpenRouter's wrapped-provider errors.
45
+ */
46
+ export declare function bodyLooksRetryable(body: string): boolean;
47
+ /**
48
+ * For CLI subprocess adapters (claude, gemini-cli) — map stderr text
49
+ * patterns to a synthetic HTTP-style status code. Returns `undefined`
50
+ * when the stderr doesn't look like a known transient condition; the
51
+ * adapter should then throw a plain (non-retryable) `Error`.
52
+ *
53
+ * Patterns curated from observed stderr output:
54
+ * - Anthropic Claude CLI: "rate_limit_error", "overloaded_error",
55
+ * "Credit balance is too low" (the last is a hard block — but we
56
+ * mark it retryable so the chain hops to another provider).
57
+ * - Google Gemini CLI: "RESOURCE_EXHAUSTED", "Quota exceeded",
58
+ * "rate limit exceeded", "429".
59
+ */
60
+ export declare function synthesizeStatusFromCli(stderr: string): {
61
+ status: number;
62
+ retryable: boolean;
63
+ } | undefined;
64
+ //# sourceMappingURL=upstream-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstream-error.d.ts","sourceRoot":"","sources":["../src/upstream-error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;gBAEhB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAO;CAQhG;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAQzD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGxD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAuB1G"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Shared upstream-error contract for all `ModelAdapter` implementations.
3
+ *
4
+ * The dashboard's `runStageWithFallback` (in
5
+ * `packages/dashboard/server/pipeline-runner.ts`) duck-types this shape
6
+ * — `name === 'UpstreamError' && retryable === true` — to decide whether
7
+ * to burn the current model and re-resolve the chain. Adapters that
8
+ * throw plain `Error` lose chain-fallback even when the failure is
9
+ * obviously transient (429 quota, 503 outage).
10
+ *
11
+ * The class is provider-agnostic on purpose. CLI adapters (claude,
12
+ * gemini-cli) don't get an HTTP status — pass `synthesizeStatusFromCli`
13
+ * the stderr text and we'll map known vendor patterns to a synthetic
14
+ * status code that callers can switch on the same way they switch on
15
+ * real HTTP status codes.
16
+ */
17
+ export class UpstreamError extends Error {
18
+ status;
19
+ body;
20
+ /**
21
+ * True when the failure class warrants chain-fallback (insufficient
22
+ * quota, rate limited, upstream outage). Auth / bad-request errors
23
+ * are NOT retryable — they need a config fix, not a different model.
24
+ */
25
+ retryable;
26
+ constructor(status, body, opts = {}) {
27
+ const provider = opts.provider ?? 'upstream';
28
+ super(`${provider} ${status}: ${truncate(body, 400)}`);
29
+ this.name = 'UpstreamError';
30
+ this.status = status;
31
+ this.body = body;
32
+ this.retryable = opts.retryable ?? (isRetryableStatus(status) || bodyLooksRetryable(body));
33
+ }
34
+ }
35
+ /**
36
+ * Default retryable-status map. Matches what the dashboard's
37
+ * `runStageWithFallback` checks. Adapters can pass an explicit
38
+ * `retryable` override when they need finer control (e.g. Anthropic's
39
+ * "Credit balance too low" is 400 with a specific body — not
40
+ * retryable to a different model from the SAME provider, but the
41
+ * dashboard should still fall back to a DIFFERENT provider in the
42
+ * chain, so we mark it retryable=true with a synthetic 402).
43
+ */
44
+ export function isRetryableStatus(status) {
45
+ return status === 408 || // Request Timeout
46
+ status === 425 || // Too Early
47
+ status === 429 || // Too Many Requests / quota
48
+ status === 502 || // Bad Gateway
49
+ status === 503 || // Service Unavailable
50
+ status === 504 || // Gateway Timeout
51
+ status === 0; // network / empty body / DNS
52
+ }
53
+ /**
54
+ * Body-pattern matcher for cases where the upstream returns 200/400
55
+ * but the body indicates a transient condition. Common with Anthropic
56
+ * (`overloaded_error`) and OpenRouter's wrapped-provider errors.
57
+ */
58
+ export function bodyLooksRetryable(body) {
59
+ if (!body)
60
+ return false;
61
+ return /insufficient[\s_-]?quota|rate[\s_-]?limit|overloaded[\s_-]?error|resource[\s_-]?exhausted|quota[\s_-]?exceeded|server\s+(?:is\s+)?busy|temporarily\s+(?:un)?available|temporarily\s+rate-?limited|too\s+many\s+requests/i.test(body);
62
+ }
63
+ /**
64
+ * For CLI subprocess adapters (claude, gemini-cli) — map stderr text
65
+ * patterns to a synthetic HTTP-style status code. Returns `undefined`
66
+ * when the stderr doesn't look like a known transient condition; the
67
+ * adapter should then throw a plain (non-retryable) `Error`.
68
+ *
69
+ * Patterns curated from observed stderr output:
70
+ * - Anthropic Claude CLI: "rate_limit_error", "overloaded_error",
71
+ * "Credit balance is too low" (the last is a hard block — but we
72
+ * mark it retryable so the chain hops to another provider).
73
+ * - Google Gemini CLI: "RESOURCE_EXHAUSTED", "Quota exceeded",
74
+ * "rate limit exceeded", "429".
75
+ */
76
+ export function synthesizeStatusFromCli(stderr) {
77
+ if (!stderr)
78
+ return undefined;
79
+ const s = stderr.toLowerCase();
80
+ // Quota / billing — provider-side. Hop to another provider's chain entry.
81
+ if (/credit\s+balance\s+is\s+too\s+low|insufficient[\s_-]?credit|insufficient[\s_-]?quota|quota[\s_-]?exceeded|resource[\s_-]?exhausted/.test(s)) {
82
+ return { status: 429, retryable: true };
83
+ }
84
+ // Rate-limit / overload — usually transient. Other models help.
85
+ if (/rate[\s_-]?limit|too\s+many\s+requests|overloaded_error|server\s+(?:is\s+)?busy|\b429\b/.test(s)) {
86
+ return { status: 429, retryable: true };
87
+ }
88
+ // Outage signals.
89
+ if (/internal\s+server\s+error|\b503\b|\b502\b|\b504\b|service\s+unavailable|gateway\s+timeout|temporarily\s+unavailable/.test(s)) {
90
+ return { status: 503, retryable: true };
91
+ }
92
+ // Auth / config errors — terminal. The chain-fallback would just hit
93
+ // the same wall on the next model from the same provider.
94
+ if (/invalid\s+api\s+key|api\s+key\s+not\s+valid|unauthorized|\b401\b|\b403\b|permission[\s_-]?denied/.test(s)) {
95
+ return { status: 401, retryable: false };
96
+ }
97
+ // Default: caller should treat as terminal.
98
+ return undefined;
99
+ }
100
+ function truncate(s, n) {
101
+ if (s.length <= n)
102
+ return s;
103
+ return s.slice(0, n) + '…';
104
+ }
105
+ //# sourceMappingURL=upstream-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstream-error.js","sourceRoot":"","sources":["../src/upstream-error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,MAAM,CAAS;IACf,IAAI,CAAS;IACtB;;;;OAIG;IACM,SAAS,CAAU;IAE5B,YAAY,MAAc,EAAE,IAAY,EAAE,OAAmD,EAAE;QAC7F,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC;QAC7C,KAAK,CAAC,GAAG,QAAQ,IAAI,MAAM,KAAK,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7F,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAO,MAAM,KAAK,GAAG,IAAK,kBAAkB;QACrC,MAAM,KAAK,GAAG,IAAK,YAAY;QAC/B,MAAM,KAAK,GAAG,IAAK,4BAA4B;QAC/C,MAAM,KAAK,GAAG,IAAK,cAAc;QACjC,MAAM,KAAK,GAAG,IAAK,sBAAsB;QACzC,MAAM,KAAK,GAAG,IAAK,kBAAkB;QACrC,MAAM,KAAK,CAAC,CAAC,CAAM,6BAA6B;AACzD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO,0NAA0N,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/O,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAc;IACpD,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAE/B,0EAA0E;IAC1E,IAAI,oIAAoI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACjJ,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IACD,gEAAgE;IAChE,IAAI,yFAAyF,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACtG,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IACD,kBAAkB;IAClB,IAAI,qHAAqH,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAClI,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IACD,qEAAqE;IACrE,0DAA0D;IAC1D,IAAI,kGAAkG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/G,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC3C,CAAC;IACD,4CAA4C;IAC5C,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS;IACpC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const VERSION = "0.0.1";
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const VERSION = '0.0.1';
2
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@esankhan3/anvil-agent-core",
3
+ "version": "0.1.0",
4
+ "description": "Shared LLM stack — unified LanguageModel interface, provider adapters, agent subprocess machinery, and cost calculation for cli + knowledge-core + headless runners.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "default": "./dist/index.js"
13
+ },
14
+ "./*.js": {
15
+ "types": "./dist/*.d.ts",
16
+ "default": "./dist/*.js"
17
+ }
18
+ },
19
+ "files": [
20
+ "dist"
21
+ ],
22
+ "scripts": {
23
+ "build": "tsc -b && mkdir -p dist/data && cp src/data/model-prices.json dist/data/",
24
+ "dev": "tsc -b --watch",
25
+ "test": "tsc -b && mkdir -p dist/data && cp src/data/model-prices.json dist/data/ && node --test dist/__tests__/*.test.js dist/agent/session/__tests__/*.test.js dist/checkpoint/__tests__/*.test.js",
26
+ "refresh-cost-table": "node scripts/refresh-cost-table.mjs"
27
+ },
28
+ "dependencies": {
29
+ "@opentelemetry/api": "^1.9.0",
30
+ "@opentelemetry/exporter-metrics-otlp-http": "^0.200.0",
31
+ "@opentelemetry/exporter-trace-otlp-http": "^0.200.0",
32
+ "@opentelemetry/resources": "^2.0.0",
33
+ "@opentelemetry/sdk-metrics": "^2.0.0",
34
+ "@opentelemetry/sdk-trace-base": "^2.0.0",
35
+ "@opentelemetry/sdk-trace-node": "^2.0.0",
36
+ "@opentelemetry/semantic-conventions": "^1.30.0",
37
+ "@modelcontextprotocol/sdk": "^1.29.0",
38
+ "better-sqlite3": "^11.7.0",
39
+ "yaml": "^2.8.3"
40
+ },
41
+ "optionalDependencies": {
42
+ "@google/adk": "^1.1.0",
43
+ "@google/genai": "^1.37.0"
44
+ },
45
+ "devDependencies": {
46
+ "@types/better-sqlite3": "^7.6.12",
47
+ "@types/node": "^22.15.2"
48
+ }
49
+ }