@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 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/session/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,cAAc,GAEf,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,YAAY,GAEb,MAAM,uBAAuB,CAAC;AAQ/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,8EAA8E;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,eAAe,GAChB,MAAM,8BAA8B,CAAC;AAOtC,uEAAuE;AACvE,+DAA+D;AAC/D,OAAO,EACL,YAAY,GAGb,MAAM,qBAAqB,CAAC;AAE7B,2EAA2E;AAC3E,2EAA2E;AAC3E,2CAA2C;AAC3C,OAAO,EACL,iBAAiB,GAElB,MAAM,yBAAyB,CAAC;AAuBjC,OAAO,EACL,kBAAkB,EAClB,8BAA8B,GAC/B,MAAM,YAAY,CAAC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * `LanguageModelBridge` — adapts an `@esankhan3/anvil-agent-core` `ModelAdapter` (or a
3
+ * future `LanguageModel`) to the `AgentAdapter` interface that
4
+ * `AgentProcess` consumes (5-event EventEmitter: `content` / `activity` /
5
+ * `result` / `error-output` / `exit`).
6
+ *
7
+ * Two surfaces in one class:
8
+ * - `AgentAdapter` (lifecycle): `start()` / `kill()` + the 5 events.
9
+ * This is what `AgentProcess` drives.
10
+ * - Prompt-construction helpers: `capabilities` (with `promptCache`
11
+ * stance), `markCacheBreakpoint(prompt, position)`, `countTokens(text)`.
12
+ * These let prompt-envelope code make caching decisions before the
13
+ * spawn — out of band of the lifecycle.
14
+ *
15
+ * Behavior:
16
+ * - `start()` kicks `ModelAdapter.run()` against an in-process Writable
17
+ * that parses Anvil Stream Format NDJSON and re-emits dashboard events.
18
+ * - The wire-format `result` frame is ignored — the bridge waits for
19
+ * `run()` to resolve and emits `result` from the richer
20
+ * `ModelAdapterResult` (which includes `stopReason` + cache token
21
+ * counts that the wire format doesn't carry).
22
+ * - Errors from `run()` surface as `error-output` + `exit(1)`.
23
+ */
24
+ import { EventEmitter } from 'node:events';
25
+ import type { ModelAdapter, ProviderName } from '../../types.js';
26
+ import type { AdapterRequest, AgentAdapter } from './adapter.js';
27
+ import type { AdapterCapabilities } from './legacy-adapter-types.js';
28
+ export declare class LanguageModelBridge extends EventEmitter implements AgentAdapter {
29
+ private readonly request;
30
+ private readonly adapter;
31
+ private readonly providerName;
32
+ private readonly capabilitiesCache;
33
+ private maxOutputTokensOverride?;
34
+ private isStarted;
35
+ private isKilled;
36
+ private activityCounter;
37
+ /** Map of tool_use_id → open child span. Tool spans are opened when we
38
+ * see a `tool_use` block in the assistant stream and closed when the
39
+ * matching `tool_result` arrives in a user-role message. Surviving
40
+ * entries on adapter end are closed with status=UNSET so they're still
41
+ * visible — adapters that hang up before tool_result arrives are not
42
+ * uncommon. */
43
+ private readonly openToolSpans;
44
+ constructor(request: AdapterRequest, adapter: ModelAdapter, providerName: ProviderName);
45
+ start(): void;
46
+ kill(_signal?: string): void;
47
+ setMaxOutputTokens(n: number): void;
48
+ get pid(): number | undefined;
49
+ get killed(): boolean;
50
+ get capabilities(): AdapterCapabilities;
51
+ /** Heuristic estimator (chars / 4). Concrete adapters with exact token
52
+ * counters can override; bridges use the heuristic. */
53
+ countTokens(text: string): number;
54
+ /** Insert a cache breakpoint marker into `prompt` at byte `position`.
55
+ * No-op for `auto` / `none` providers. */
56
+ markCacheBreakpoint(prompt: string, position: number): string;
57
+ /** Provider name surfaced for diagnostics. */
58
+ get provider(): ProviderName;
59
+ private buildAdapterConfig;
60
+ private runAdapter;
61
+ /**
62
+ * Build a Writable that parses Anvil Stream Format NDJSON line-by-line
63
+ * and re-emits AgentAdapter events. The result frame is ignored here —
64
+ * the bridge surfaces it from the resolved ModelAdapterResult instead.
65
+ */
66
+ private createStreamSink;
67
+ private nextActivityId;
68
+ private handleStreamLine;
69
+ private handleAssistantBlocks;
70
+ private handleUserBlocks;
71
+ /** Open a child span for a tool_use block. The span lives in the active
72
+ * `gen_ai.invoke` span's context — that's set up by instrumentModelAdapter
73
+ * before adapter.run() starts streaming. We rely on Node's
74
+ * AsyncLocalStorage to propagate context through the Writable callback. */
75
+ private openToolSpan;
76
+ /** Close a tool span when its matching tool_result arrives. */
77
+ private closeToolSpan;
78
+ /** Close any tool spans that never received a tool_result. Called from
79
+ * runAdapter's finally block so abandoned spans don't linger. */
80
+ private closeOpenToolSpans;
81
+ }
82
+ /** Test/internal — reset the registry cache so the next lookup re-reads. */
83
+ export declare function _resetBridgeRegistryCache(): void;
84
+ //# sourceMappingURL=language-model-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-model-bridge.d.ts","sourceRoot":"","sources":["../../../src/agent/session/language-model-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,KAAK,EACV,YAAY,EAIZ,YAAY,EAEb,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,EACV,mBAAmB,EAEpB,MAAM,2BAA2B,CAAC;AAuEnC,qBAAa,mBAAoB,SAAQ,YAAa,YAAW,YAAY;IAC3E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAsB;IACxD,OAAO,CAAC,uBAAuB,CAAC,CAAS;IACzC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,eAAe,CAAK;IAC5B;;;;;oBAKgB;IAChB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2B;gBAGvD,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,YAAY,EACrB,YAAY,EAAE,YAAY;IAc5B,KAAK,IAAI,IAAI;IAMb,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAS5B,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAInC,IAAI,GAAG,IAAI,MAAM,GAAG,SAAS,CAE5B;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAID,IAAI,YAAY,IAAI,mBAAmB,CAEtC;IAED;4DACwD;IACxD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAKjC;+CAC2C;IAC3C,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAM7D,8CAA8C;IAC9C,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAID,OAAO,CAAC,kBAAkB;YAuCZ,UAAU;IA8CxB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,qBAAqB;IAmC7B,OAAO,CAAC,gBAAgB;IAgCxB;;;gFAG4E;IAC5E,OAAO,CAAC,YAAY;IAiBpB,+DAA+D;IAC/D,OAAO,CAAC,aAAa;IAYrB;sEACkE;IAClE,OAAO,CAAC,kBAAkB;CAO3B;AAgDD,4EAA4E;AAC5E,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD"}
@@ -0,0 +1,454 @@
1
+ /**
2
+ * `LanguageModelBridge` — adapts an `@esankhan3/anvil-agent-core` `ModelAdapter` (or a
3
+ * future `LanguageModel`) to the `AgentAdapter` interface that
4
+ * `AgentProcess` consumes (5-event EventEmitter: `content` / `activity` /
5
+ * `result` / `error-output` / `exit`).
6
+ *
7
+ * Two surfaces in one class:
8
+ * - `AgentAdapter` (lifecycle): `start()` / `kill()` + the 5 events.
9
+ * This is what `AgentProcess` drives.
10
+ * - Prompt-construction helpers: `capabilities` (with `promptCache`
11
+ * stance), `markCacheBreakpoint(prompt, position)`, `countTokens(text)`.
12
+ * These let prompt-envelope code make caching decisions before the
13
+ * spawn — out of band of the lifecycle.
14
+ *
15
+ * Behavior:
16
+ * - `start()` kicks `ModelAdapter.run()` against an in-process Writable
17
+ * that parses Anvil Stream Format NDJSON and re-emits dashboard events.
18
+ * - The wire-format `result` frame is ignored — the bridge waits for
19
+ * `run()` to resolve and emits `result` from the richer
20
+ * `ModelAdapterResult` (which includes `stopReason` + cache token
21
+ * counts that the wire format doesn't carry).
22
+ * - Errors from `run()` surface as `error-output` + `exit(1)`.
23
+ */
24
+ import { EventEmitter } from 'node:events';
25
+ import { Writable } from 'node:stream';
26
+ import { SpanStatusCode } from '@opentelemetry/api';
27
+ import { instrumentModelAdapter } from '../../telemetry/instrument.js';
28
+ import { getTracer } from '../../telemetry/tracer.js';
29
+ import { BuiltinToolExecutor } from '../../tools/index.js';
30
+ import { loadModelRegistry } from '../../router/model-registry.js';
31
+ // ── Capability mapping ───────────────────────────────────────────────────
32
+ const STRUCTURED_OUTPUT_DEFAULT = 'best-effort';
33
+ function mapCapabilities(caps) {
34
+ const promptCache = caps.cache ?? (caps.promptCaching ? 'auto' : 'none');
35
+ return {
36
+ promptCache,
37
+ countTokens: 'heuristic',
38
+ structuredOutput: caps.structuredOutput ?? STRUCTURED_OUTPUT_DEFAULT,
39
+ cacheTtlSeconds: caps.cacheTtlSeconds,
40
+ maxOutputTokens: caps.maxOutputTokens === true,
41
+ };
42
+ }
43
+ // ── Tool-use summary ─────────────────────────────────────────────────────
44
+ function summarizeToolUse(name, input) {
45
+ // Two casings live in this stream simultaneously: Claude CLI ships
46
+ // PascalCase tool names (Read/Edit/Write/Bash/Grep/Glob), and the
47
+ // BuiltinToolExecutor (used by Ollama / OpenCode / OpenRouter
48
+ // agentic adapters) emits snake_case (read_file/edit/write_file/
49
+ // bash/grep/glob/list). Field shapes also differ on the path arg —
50
+ // Claude uses `file_path`, Builtin uses `path`. Normalize so the
51
+ // dashboard activity log shows the same human label regardless.
52
+ const path = (input.file_path ?? input.path ?? 'file');
53
+ switch (name) {
54
+ case 'Read':
55
+ case 'read_file':
56
+ return `Reading ${path}`;
57
+ case 'Edit':
58
+ case 'edit':
59
+ return `Editing ${path}`;
60
+ case 'Write':
61
+ case 'write_file':
62
+ return `Writing ${path}`;
63
+ case 'Bash':
64
+ case 'bash':
65
+ return `Running: ${String(input.command ?? input.description ?? '').slice(0, 120)}`;
66
+ case 'Grep':
67
+ case 'grep':
68
+ return `Searching for "${String(input.pattern ?? '').slice(0, 60)}"${input.path ? ` in ${input.path}` : ''}`;
69
+ case 'Glob':
70
+ case 'glob':
71
+ return `Finding files: ${input.pattern ?? ''}`;
72
+ case 'list':
73
+ return `Listing ${input.path ?? '.'}`;
74
+ case 'Agent':
75
+ return `Spawning sub-agent: ${input.description ?? ''}`;
76
+ case 'Skill':
77
+ return `Using skill: ${input.skill ?? ''}${input.args ? ` ${input.args}` : ''}`;
78
+ case 'ToolSearch':
79
+ return `Searching tools: ${input.query ?? ''}`;
80
+ case 'TaskCreate':
81
+ return `Creating task: ${input.description ?? ''}`;
82
+ case 'TaskUpdate':
83
+ return `Updating task: ${input.id ?? ''} → ${input.status ?? ''}`;
84
+ default:
85
+ return `Using ${name}`;
86
+ }
87
+ }
88
+ // ── Bridge ───────────────────────────────────────────────────────────────
89
+ export class LanguageModelBridge extends EventEmitter {
90
+ request;
91
+ adapter;
92
+ providerName;
93
+ capabilitiesCache;
94
+ maxOutputTokensOverride;
95
+ isStarted = false;
96
+ isKilled = false;
97
+ activityCounter = 0;
98
+ /** Map of tool_use_id → open child span. Tool spans are opened when we
99
+ * see a `tool_use` block in the assistant stream and closed when the
100
+ * matching `tool_result` arrives in a user-role message. Surviving
101
+ * entries on adapter end are closed with status=UNSET so they're still
102
+ * visible — adapters that hang up before tool_result arrives are not
103
+ * uncommon. */
104
+ openToolSpans = new Map();
105
+ constructor(request, adapter, providerName) {
106
+ super();
107
+ this.request = request;
108
+ // Wrap the adapter so every `run()` emits an OTel `gen_ai.invoke` span.
109
+ // No-op when telemetry is disabled (loadTelemetryConfig returns the
110
+ // noop exporter and OTel's no-op tracer skips work).
111
+ this.adapter = instrumentModelAdapter(adapter);
112
+ this.providerName = providerName;
113
+ this.capabilitiesCache = mapCapabilities(adapter.capabilities);
114
+ }
115
+ // ── AgentAdapter surface ─────────────────────────────────────────────
116
+ start() {
117
+ if (this.isStarted)
118
+ return;
119
+ this.isStarted = true;
120
+ void this.runAdapter();
121
+ }
122
+ kill(_signal) {
123
+ this.isKilled = true;
124
+ try {
125
+ this.adapter.kill?.();
126
+ }
127
+ catch {
128
+ // best-effort
129
+ }
130
+ }
131
+ setMaxOutputTokens(n) {
132
+ if (n > 0)
133
+ this.maxOutputTokensOverride = n;
134
+ }
135
+ get pid() {
136
+ return undefined;
137
+ }
138
+ get killed() {
139
+ return this.isKilled;
140
+ }
141
+ // ── Prompt-construction surface ───────────────────────────────────────
142
+ get capabilities() {
143
+ return this.capabilitiesCache;
144
+ }
145
+ /** Heuristic estimator (chars / 4). Concrete adapters with exact token
146
+ * counters can override; bridges use the heuristic. */
147
+ countTokens(text) {
148
+ if (!text)
149
+ return 0;
150
+ return Math.ceil(text.length / 4);
151
+ }
152
+ /** Insert a cache breakpoint marker into `prompt` at byte `position`.
153
+ * No-op for `auto` / `none` providers. */
154
+ markCacheBreakpoint(prompt, position) {
155
+ if (this.capabilitiesCache.promptCache !== 'explicit')
156
+ return prompt;
157
+ const safe = Math.max(0, Math.min(prompt.length, position));
158
+ return prompt.slice(0, safe) + '\n<!-- anvil:cache-breakpoint -->\n' + prompt.slice(safe);
159
+ }
160
+ /** Provider name surfaced for diagnostics. */
161
+ get provider() {
162
+ return this.providerName;
163
+ }
164
+ // ── Internals ─────────────────────────────────────────────────────────
165
+ buildAdapterConfig() {
166
+ const config = {
167
+ userPrompt: this.request.prompt,
168
+ projectPrompt: this.request.projectPrompt,
169
+ model: this.request.model,
170
+ workingDir: this.request.cwd,
171
+ stage: this.request.stage ?? '',
172
+ persona: this.request.persona ?? '',
173
+ sessionId: this.request.sessionId,
174
+ resume: this.request.resume,
175
+ permissionMode: this.request.permissionMode,
176
+ allowedTools: this.request.allowedTools,
177
+ disallowedTools: this.request.disallowedTools,
178
+ maxOutputTokens: this.maxOutputTokensOverride ?? this.request.maxOutputTokens,
179
+ };
180
+ // Non-Claude providers need a tool executor + bounded context to drive
181
+ // an agentic loop. Claude CLI ships its own tool runtime; passing one
182
+ // here would be ignored. Keep the construction lazy so this method
183
+ // stays cheap when called by adapters that don't loop.
184
+ if (this.providerName !== 'claude') {
185
+ const executor = buildBuiltinExecutor(this.request);
186
+ if (executor)
187
+ config.toolExecutor = executor;
188
+ const ctx = lookupContextWindow(this.request.model);
189
+ if (ctx !== undefined)
190
+ config.contextWindow = ctx;
191
+ }
192
+ else if (this.request.claudeMcpConfigPath) {
193
+ // Claude path: forward the resolved mcp.json so claude-cli reads
194
+ // its MCP servers via --mcp-config. Populated by
195
+ // defaultAdapterFactory when workspaceDir is set.
196
+ config.mcpConfigPath = this.request.claudeMcpConfigPath;
197
+ }
198
+ if (this.request.exclusiveSlot) {
199
+ config.exclusiveSlot = true;
200
+ }
201
+ return config;
202
+ }
203
+ async runAdapter() {
204
+ const sink = this.createStreamSink();
205
+ let result = null;
206
+ let runError = null;
207
+ try {
208
+ result = await this.adapter.run(this.buildAdapterConfig(), sink);
209
+ }
210
+ catch (err) {
211
+ runError = err instanceof Error ? err : new Error(String(err));
212
+ }
213
+ finally {
214
+ // Close any tool spans whose tool_result never arrived (e.g. adapter
215
+ // crashed mid-call). Must happen BEFORE the adapter run span ends
216
+ // so OTel captures them as siblings, not orphans.
217
+ this.closeOpenToolSpans();
218
+ }
219
+ sink.end();
220
+ if (runError) {
221
+ if (!this.isKilled) {
222
+ this.emit('error-output', runError.message);
223
+ }
224
+ this.emit('exit', 1);
225
+ return;
226
+ }
227
+ if (result) {
228
+ const cost = {
229
+ totalUsd: result.costUsd ?? 0,
230
+ inputTokens: result.inputTokens ?? 0,
231
+ outputTokens: result.outputTokens ?? 0,
232
+ cacheReadTokens: result.cacheReadTokens ?? 0,
233
+ cacheWriteTokens: result.cacheWriteTokens ?? 0,
234
+ durationMs: result.durationMs ?? 0,
235
+ stopReason: result.stopReason,
236
+ };
237
+ this.emit('result', {
238
+ result: result.output ?? '',
239
+ cost,
240
+ sessionId: result.sessionId ?? this.request.sessionId,
241
+ });
242
+ }
243
+ this.emit('exit', this.isKilled ? null : 0);
244
+ }
245
+ /**
246
+ * Build a Writable that parses Anvil Stream Format NDJSON line-by-line
247
+ * and re-emits AgentAdapter events. The result frame is ignored here —
248
+ * the bridge surfaces it from the resolved ModelAdapterResult instead.
249
+ */
250
+ createStreamSink() {
251
+ let buffer = '';
252
+ return new Writable({
253
+ write: (chunk, _enc, cb) => {
254
+ buffer += chunk.toString('utf-8');
255
+ const lines = buffer.split('\n');
256
+ buffer = lines.pop() ?? '';
257
+ for (const line of lines)
258
+ this.handleStreamLine(line);
259
+ cb();
260
+ },
261
+ final: (cb) => {
262
+ if (buffer) {
263
+ this.handleStreamLine(buffer);
264
+ buffer = '';
265
+ }
266
+ cb();
267
+ },
268
+ });
269
+ }
270
+ nextActivityId() {
271
+ return `act-${this.request.sessionId.slice(0, 8)}-${++this.activityCounter}`;
272
+ }
273
+ handleStreamLine(line) {
274
+ const trimmed = line.trim();
275
+ if (!trimmed)
276
+ return;
277
+ let parsed;
278
+ try {
279
+ parsed = JSON.parse(trimmed);
280
+ }
281
+ catch {
282
+ return;
283
+ }
284
+ // Tool-use blocks come in `assistant` messages. The corresponding
285
+ // `tool_result` blocks come back in `user` messages. We pair them up
286
+ // by `tool_use_id` to materialise child spans.
287
+ if (parsed?.type === 'assistant' && Array.isArray(parsed.message?.content)) {
288
+ this.handleAssistantBlocks(parsed.message.content);
289
+ return;
290
+ }
291
+ if (parsed?.type === 'user' && Array.isArray(parsed.message?.content)) {
292
+ this.handleUserBlocks(parsed.message.content);
293
+ return;
294
+ }
295
+ }
296
+ handleAssistantBlocks(blocks) {
297
+ for (const block of blocks) {
298
+ if (block.type === 'text' && typeof block.text === 'string') {
299
+ this.emit('content', block.text);
300
+ this.emit('activity', {
301
+ id: this.nextActivityId(),
302
+ kind: 'text',
303
+ summary: block.text.slice(0, 200),
304
+ content: block.text,
305
+ timestamp: Date.now(),
306
+ });
307
+ }
308
+ else if (block.type === 'tool_use' && typeof block.name === 'string') {
309
+ const input = block.input ?? {};
310
+ const toolUseId = typeof block.id === 'string' ? block.id : undefined;
311
+ this.emit('activity', {
312
+ id: this.nextActivityId(),
313
+ kind: 'tool_use',
314
+ tool: block.name,
315
+ summary: summarizeToolUse(block.name, input),
316
+ content: JSON.stringify(input, null, 2),
317
+ timestamp: Date.now(),
318
+ });
319
+ this.openToolSpan(block.name, input, toolUseId);
320
+ }
321
+ else if (block.type === 'thinking' && typeof block.text === 'string') {
322
+ this.emit('activity', {
323
+ id: this.nextActivityId(),
324
+ kind: 'thinking',
325
+ summary: block.text.slice(0, 200),
326
+ content: block.text,
327
+ timestamp: Date.now(),
328
+ });
329
+ }
330
+ }
331
+ }
332
+ handleUserBlocks(blocks) {
333
+ for (const block of blocks) {
334
+ if (block.type !== 'tool_result')
335
+ continue;
336
+ const toolUseId = typeof block.tool_use_id === 'string' ? block.tool_use_id : undefined;
337
+ const isError = block.is_error === true;
338
+ const rawContent = typeof block.content === 'string' ? block.content : '';
339
+ // Emit an activity so consumers (dashboard PR scanner, run history,
340
+ // audit log) see what the tool returned. Without this, `gh pr
341
+ // create` invoked via bash prints the PR URL into the tool_result
342
+ // body — but the URL never reaches `agent-activity`, so the
343
+ // dashboard's `extractPRUrls(content)` scanner can't find it and
344
+ // PRs never surface in stats. Cap content at 4KB so a stray
345
+ // `bash: cat huge_file` doesn't blow the activity stream.
346
+ if (rawContent) {
347
+ // `tool_result` kind so the dashboard renders it collapsed/hidden
348
+ // by default — without this, the activity panel dumps the full
349
+ // file body (line-by-line) for every Read / Bash / Grep call.
350
+ // PR URL extraction scans every activity regardless of kind, so
351
+ // `gh pr create` URLs still surface.
352
+ this.emit('activity', {
353
+ id: this.nextActivityId(),
354
+ kind: 'tool_result',
355
+ summary: rawContent.slice(0, 200),
356
+ content: rawContent.slice(0, 4096),
357
+ timestamp: Date.now(),
358
+ });
359
+ }
360
+ if (!toolUseId)
361
+ continue;
362
+ this.closeToolSpan(toolUseId, { isError });
363
+ }
364
+ }
365
+ /** Open a child span for a tool_use block. The span lives in the active
366
+ * `gen_ai.invoke` span's context — that's set up by instrumentModelAdapter
367
+ * before adapter.run() starts streaming. We rely on Node's
368
+ * AsyncLocalStorage to propagate context through the Writable callback. */
369
+ openToolSpan(name, input, toolUseId) {
370
+ if (!toolUseId)
371
+ return; // Without an id we can't pair the result; skip.
372
+ const tracer = getTracer();
373
+ const span = tracer.startSpan(`gen_ai.tool.${name}`, {
374
+ attributes: {
375
+ 'gen_ai.tool.name': name,
376
+ 'gen_ai.tool.call.id': toolUseId,
377
+ 'gen_ai.tool.input.summary': summarizeToolUse(name, input).slice(0, 256),
378
+ },
379
+ });
380
+ this.openToolSpans.set(toolUseId, span);
381
+ }
382
+ /** Close a tool span when its matching tool_result arrives. */
383
+ closeToolSpan(toolUseId, result) {
384
+ const span = this.openToolSpans.get(toolUseId);
385
+ if (!span)
386
+ return;
387
+ this.openToolSpans.delete(toolUseId);
388
+ if (result.isError) {
389
+ span.setStatus({ code: SpanStatusCode.ERROR });
390
+ }
391
+ else {
392
+ span.setStatus({ code: SpanStatusCode.OK });
393
+ }
394
+ span.end();
395
+ }
396
+ /** Close any tool spans that never received a tool_result. Called from
397
+ * runAdapter's finally block so abandoned spans don't linger. */
398
+ closeOpenToolSpans() {
399
+ for (const span of this.openToolSpans.values()) {
400
+ span.setAttribute('gen_ai.tool.abandoned', true);
401
+ span.end();
402
+ }
403
+ this.openToolSpans.clear();
404
+ }
405
+ }
406
+ // ───────────────────────────────────────────────────────────────────────
407
+ // Helpers — tool executor + context window lookup for non-Claude paths
408
+ // ───────────────────────────────────────────────────────────────────────
409
+ /**
410
+ * Build a `BuiltinToolExecutor` for an agentic non-Claude run. The
411
+ * `request.allowedTools` field carries the per-stage permission set
412
+ * the dashboard pipeline-runner populated upstream. When it's missing
413
+ * (legacy spawn sites that haven't been upgraded yet), we conservatively
414
+ * fall back to read-only tools so the model can still work but never
415
+ * mutates the workspace.
416
+ */
417
+ function buildBuiltinExecutor(req) {
418
+ if (!req.cwd)
419
+ return undefined;
420
+ const allowed = req.allowedTools && req.allowedTools.length > 0
421
+ ? req.allowedTools
422
+ : ['read_file', 'grep', 'glob', 'list'];
423
+ return new BuiltinToolExecutor({ allowedTools: allowed });
424
+ }
425
+ /**
426
+ * Look up the configured `context_window` for a model in the registry.
427
+ * Returns undefined when the model isn't in the registry or has no
428
+ * context_window set — the adapter then falls back to its own default.
429
+ *
430
+ * Cached lazily; the registry file rarely changes during a run.
431
+ */
432
+ let _registryCache = null;
433
+ function lookupContextWindow(modelId) {
434
+ if (!_registryCache) {
435
+ _registryCache = new Map();
436
+ try {
437
+ const reg = loadModelRegistry();
438
+ for (const m of reg.models) {
439
+ if (m.context_window !== undefined) {
440
+ _registryCache.set(m.id, m.context_window);
441
+ }
442
+ }
443
+ }
444
+ catch {
445
+ // Registry missing/invalid → no context-window data; adapters use defaults.
446
+ }
447
+ }
448
+ return _registryCache.get(modelId);
449
+ }
450
+ /** Test/internal — reset the registry cache so the next lookup re-reads. */
451
+ export function _resetBridgeRegistryCache() {
452
+ _registryCache = null;
453
+ }
454
+ //# sourceMappingURL=language-model-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-model-bridge.js","sourceRoot":"","sources":["../../../src/agent/session/language-model-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Type-only surface lifted from the dashboard's pre-Phase-4 `BaseAdapter`
3
+ * abstract class. Used by `LanguageModelBridge` to expose
4
+ * `capabilities` / `markCacheBreakpoint` / `countTokens` to prompt-construction
5
+ * code (dashboard's `prompt-envelope.ts`, `token-util.ts`).
6
+ *
7
+ * The abstract `BaseAdapter` class is gone — `LanguageModelBridge` is the
8
+ * single concrete implementation. These types describe its public surface.
9
+ */
10
+ /**
11
+ * Provider-agnostic capability descriptor used by prompt-construction
12
+ * machinery to make caching/output-ceiling/structured-output decisions.
13
+ *
14
+ * Mapped from `agent-core`'s `ProviderCapabilities` via the bridge's
15
+ * internal `mapCapabilities()`.
16
+ */
17
+ export interface AdapterCapabilities {
18
+ /**
19
+ * - 'auto' — provider caches stable prefixes silently (e.g., OpenAI ≥1024 tok).
20
+ * - 'explicit' — caller must place markers (e.g., Anthropic cache_control).
21
+ * - 'none' — no caching benefit; markers are no-ops.
22
+ */
23
+ promptCache: 'auto' | 'explicit' | 'none';
24
+ /** Whether countTokens uses the model's exact tokenizer or an estimator. */
25
+ countTokens: 'exact' | 'heuristic';
26
+ /** Structured-output support level. */
27
+ structuredOutput: 'strict' | 'tool-shim' | 'best-effort' | 'none';
28
+ /** Cache TTL in seconds when promptCache !== 'none'. Informational only. */
29
+ cacheTtlSeconds?: number;
30
+ /** Adapter knows how to enforce a max-output ceiling. */
31
+ maxOutputTokens: boolean;
32
+ }
33
+ /**
34
+ * Cost block emitted with the bridge's `result` event. Identical fields to
35
+ * the agent-core `CostInfo` type (which lives in session/types.ts) — kept
36
+ * separate here because the bridge's `result` event payload uses this name
37
+ * historically.
38
+ */
39
+ export interface AdapterCostInfo {
40
+ totalUsd: number;
41
+ inputTokens: number;
42
+ outputTokens: number;
43
+ cacheReadTokens: number;
44
+ cacheWriteTokens: number;
45
+ durationMs: number;
46
+ /**
47
+ * Provider's stop reason. Common values:
48
+ * - 'end_turn' / 'stop' — natural completion
49
+ * - 'max_tokens' / 'length' — output ceiling hit (TRUNCATION)
50
+ * - 'tool_use' — agent paused for a tool call
51
+ */
52
+ stopReason?: string;
53
+ }
54
+ /**
55
+ * Structural type describing what `prompt-envelope` and `token-util` need
56
+ * from an adapter. The bridge satisfies it; tests can also stub it.
57
+ */
58
+ export interface PromptAwareAdapter {
59
+ readonly capabilities: AdapterCapabilities;
60
+ countTokens(text: string): number;
61
+ markCacheBreakpoint(prompt: string, position: number): string;
62
+ }
63
+ //# sourceMappingURL=legacy-adapter-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-adapter-types.d.ts","sourceRoot":"","sources":["../../../src/agent/session/legacy-adapter-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,WAAW,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;IAC1C,4EAA4E;IAC5E,WAAW,EAAE,OAAO,GAAG,WAAW,CAAC;IACnC,uCAAuC;IACvC,gBAAgB,EAAE,QAAQ,GAAG,WAAW,GAAG,aAAa,GAAG,MAAM,CAAC;IAClE,4EAA4E;IAC5E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yDAAyD;IACzD,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;IAC3C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;CAC/D"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Type-only surface lifted from the dashboard's pre-Phase-4 `BaseAdapter`
3
+ * abstract class. Used by `LanguageModelBridge` to expose
4
+ * `capabilities` / `markCacheBreakpoint` / `countTokens` to prompt-construction
5
+ * code (dashboard's `prompt-envelope.ts`, `token-util.ts`).
6
+ *
7
+ * The abstract `BaseAdapter` class is gone — `LanguageModelBridge` is the
8
+ * single concrete implementation. These types describe its public surface.
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=legacy-adapter-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-adapter-types.js","sourceRoot":"","sources":["../../../src/agent/session/legacy-adapter-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}