@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,186 @@
1
+ /**
2
+ * GenAI metrics — emits OTel metrics on every adapter call alongside the
3
+ * existing trace span. Mirrors the OTel GenAI semconv counters/histograms
4
+ * so dashboards built against any compliant collector keep working.
5
+ *
6
+ * Instruments:
7
+ * - gen_ai.client.token.usage (counter, by io_type ∈ input|output|cache_read|cache_write|reasoning)
8
+ * - gen_ai.client.cost_usd (counter, by component ∈ input|output|cache_read|cache_write|total)
9
+ * - gen_ai.client.operation.duration (histogram, ms)
10
+ * - gen_ai.cache.hit_ratio (gauge per call, 0–1)
11
+ *
12
+ * All instruments inherit the shared resource (service.name, anvil.run_id,
13
+ * etc.) registered in tracer.ts. Metrics shipping is gated on the same
14
+ * TelemetryConfig as traces — disabled telemetry produces no-op meters.
15
+ */
16
+ import { metrics, diag, } from '@opentelemetry/api';
17
+ import { resourceFromAttributes } from '@opentelemetry/resources';
18
+ import { MeterProvider, PeriodicExportingMetricReader, } from '@opentelemetry/sdk-metrics';
19
+ import { OTLPMetricExporter, AggregationTemporalityPreference, } from '@opentelemetry/exporter-metrics-otlp-http';
20
+ import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION, } from '@opentelemetry/semantic-conventions';
21
+ import { hostname } from 'node:os';
22
+ import { loadTelemetryConfig } from './config.js';
23
+ import { VERSION } from '../version.js';
24
+ const METER_NAME = 'anvil.agent-core';
25
+ const EXPORT_INTERVAL_MS = 5_000;
26
+ let _meter = null;
27
+ let _provider = null;
28
+ let _reader = null;
29
+ let _tokenCounter = null;
30
+ let _costCounter = null;
31
+ let _durationHist = null;
32
+ let _cacheHitGauge = null;
33
+ function buildResourceAttrs(config) {
34
+ const host = hostname();
35
+ return {
36
+ [ATTR_SERVICE_NAME]: config.serviceName,
37
+ [ATTR_SERVICE_VERSION]: VERSION,
38
+ 'service.namespace': 'anvil',
39
+ 'service.instance.id': process.env.ANVIL_INSTANCE_ID ?? `${host}-${process.pid}`,
40
+ 'host.name': host,
41
+ 'deployment.environment': process.env.ANVIL_ENV ?? process.env.DEPLOYMENT_ENVIRONMENT ?? 'local',
42
+ };
43
+ }
44
+ function normalizeMetricsEndpoint(endpoint) {
45
+ if (!endpoint)
46
+ return endpoint;
47
+ try {
48
+ const url = new URL(endpoint);
49
+ if (url.pathname === '' || url.pathname === '/') {
50
+ url.pathname = '/v1/metrics';
51
+ return url.toString();
52
+ }
53
+ return endpoint;
54
+ }
55
+ catch {
56
+ return endpoint;
57
+ }
58
+ }
59
+ function ensureMeter() {
60
+ if (_meter)
61
+ return _meter;
62
+ const config = loadTelemetryConfig();
63
+ // ANVIL_OTEL_METRICS_DISABLED=1 → keep traces but skip metrics export.
64
+ // Useful when the OTLP backend is traces-only (e.g. Langfuse), where
65
+ // POSTing metrics produces a periodic AggregateError every export tick.
66
+ const metricsDisabled = process.env.ANVIL_OTEL_METRICS_DISABLED === '1';
67
+ if (!config.enabled || config.exporterMode !== 'otlp' || metricsDisabled) {
68
+ // Use the global no-op MeterProvider when telemetry is disabled or in
69
+ // console mode (no metrics console exporter wired today).
70
+ _meter = metrics.getMeter(METER_NAME, VERSION);
71
+ return _meter;
72
+ }
73
+ // Prometheus only accepts CUMULATIVE temporality. The SDK's default
74
+ // (LOWMEMORY) emits histograms as DELTA, which Prometheus rejects with
75
+ // "invalid temporality and type combination".
76
+ const exporter = new OTLPMetricExporter({
77
+ url: normalizeMetricsEndpoint(config.endpoint),
78
+ headers: config.headers,
79
+ temporalityPreference: AggregationTemporalityPreference.CUMULATIVE,
80
+ });
81
+ _reader = new PeriodicExportingMetricReader({
82
+ exporter,
83
+ exportIntervalMillis: EXPORT_INTERVAL_MS,
84
+ });
85
+ _provider = new MeterProvider({
86
+ resource: resourceFromAttributes(buildResourceAttrs(config)),
87
+ readers: [_reader],
88
+ });
89
+ metrics.setGlobalMeterProvider(_provider);
90
+ _meter = _provider.getMeter(METER_NAME, VERSION);
91
+ diag.debug(`[telemetry] meter initialised — endpoint=${config.endpoint ?? 'n/a'} `
92
+ + `interval=${EXPORT_INTERVAL_MS}ms`);
93
+ return _meter;
94
+ }
95
+ function instruments() {
96
+ const meter = ensureMeter();
97
+ if (!_tokenCounter) {
98
+ _tokenCounter = meter.createCounter('gen_ai.client.token.usage', {
99
+ description: 'Tokens consumed by GenAI calls, broken down by io_type',
100
+ unit: '{token}',
101
+ });
102
+ }
103
+ if (!_costCounter) {
104
+ _costCounter = meter.createCounter('gen_ai.client.cost_usd', {
105
+ description: 'Estimated USD cost of GenAI calls, by component',
106
+ unit: 'USD',
107
+ });
108
+ }
109
+ if (!_durationHist) {
110
+ _durationHist = meter.createHistogram('gen_ai.client.operation.duration', {
111
+ description: 'Wall-clock duration of GenAI client operations',
112
+ unit: 'ms',
113
+ });
114
+ }
115
+ if (!_cacheHitGauge) {
116
+ _cacheHitGauge = meter.createGauge('gen_ai.cache.hit_ratio', {
117
+ description: 'Per-call prompt-cache hit ratio (0..1)',
118
+ unit: '1',
119
+ });
120
+ }
121
+ return {
122
+ tokens: _tokenCounter,
123
+ cost: _costCounter,
124
+ duration: _durationHist,
125
+ cacheHit: _cacheHitGauge,
126
+ };
127
+ }
128
+ /** Record one adapter call — emits all 4 instruments with consistent labels.
129
+ * Safe to call when telemetry is disabled (no-op meter eats the writes). */
130
+ export function recordGenAiCall(m) {
131
+ const inst = instruments();
132
+ const baseAttrs = {
133
+ 'gen_ai.system': m.system,
134
+ 'gen_ai.request.model': m.requestModel,
135
+ };
136
+ if (m.responseModel)
137
+ baseAttrs['gen_ai.response.model'] = m.responseModel;
138
+ if (m.stage)
139
+ baseAttrs['anvil.stage'] = m.stage;
140
+ if (m.persona)
141
+ baseAttrs['anvil.persona'] = m.persona;
142
+ // Tokens — one data point per io_type so dashboards can slice.
143
+ inst.tokens.add(m.inputTokens, { ...baseAttrs, io_type: 'input' });
144
+ inst.tokens.add(m.outputTokens, { ...baseAttrs, io_type: 'output' });
145
+ if (m.cacheReadTokens > 0) {
146
+ inst.tokens.add(m.cacheReadTokens, { ...baseAttrs, io_type: 'cache_read' });
147
+ }
148
+ if (m.cacheWriteTokens > 0) {
149
+ inst.tokens.add(m.cacheWriteTokens, { ...baseAttrs, io_type: 'cache_write' });
150
+ }
151
+ if (m.reasoningTokens && m.reasoningTokens > 0) {
152
+ inst.tokens.add(m.reasoningTokens, { ...baseAttrs, io_type: 'reasoning' });
153
+ }
154
+ // Cost — separated per component so dashboards can stack a cost graph.
155
+ inst.cost.add(m.costInputUsd, { ...baseAttrs, component: 'input' });
156
+ inst.cost.add(m.costOutputUsd, { ...baseAttrs, component: 'output' });
157
+ inst.cost.add(m.costCacheReadUsd, { ...baseAttrs, component: 'cache_read' });
158
+ inst.cost.add(m.costCacheWriteUsd, { ...baseAttrs, component: 'cache_write' });
159
+ inst.cost.add(m.costTotalUsd, { ...baseAttrs, component: 'total' });
160
+ // Latency.
161
+ inst.duration.record(m.durationMs, baseAttrs);
162
+ // Cache hit ratio — denominator is input + cache_read tokens.
163
+ const denom = m.inputTokens + m.cacheReadTokens;
164
+ if (denom > 0) {
165
+ inst.cacheHit.record(m.cacheReadTokens / denom, baseAttrs);
166
+ }
167
+ }
168
+ /** Force-flush any pending metric data and tear down the provider. */
169
+ export async function shutdownMetrics() {
170
+ if (!_provider)
171
+ return;
172
+ try {
173
+ await _provider.forceFlush();
174
+ await _provider.shutdown();
175
+ }
176
+ finally {
177
+ _provider = null;
178
+ _reader = null;
179
+ _meter = null;
180
+ _tokenCounter = null;
181
+ _costCounter = null;
182
+ _durationHist = null;
183
+ _cacheHitGauge = null;
184
+ }
185
+ }
186
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/telemetry/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Tracer initialization — lazily registers an OTel TracerProvider on first
3
+ * call. When telemetry is disabled, returns the API's no-op tracer (zero
4
+ * overhead, no global state mutation).
5
+ *
6
+ * Resource enrichment:
7
+ * - service.name / service.version from TelemetryConfig
8
+ * - service.namespace = "anvil"
9
+ * - service.instance.id = `${hostname}-${pid}` (overridable)
10
+ * - host.name from os.hostname()
11
+ * - process.pid / process.runtime.{name,version}
12
+ * - deployment.environment from ANVIL_ENV (default "local")
13
+ * - extra attrs parsed from OTEL_RESOURCE_ATTRIBUTES (k1=v1,k2=v2)
14
+ *
15
+ * Graceful shutdown: SIGINT/SIGTERM/beforeExit hooks call `forceFlush()`
16
+ * + `shutdown()` so trailing spans/metrics aren't lost on `pkill`.
17
+ */
18
+ import { type Tracer } from '@opentelemetry/api';
19
+ import { type TelemetryConfig } from './config.js';
20
+ export declare function getTracer(): Tracer;
21
+ /** Force-flush any pending spans and tear down the provider. Call once at
22
+ * graceful shutdown if you can't rely on the auto-installed hooks (e.g.
23
+ * Lambda runtimes, bespoke shutdown sequences). Also drains the metrics
24
+ * pipeline so per-run cost/token counters land before exit. Safe to call
25
+ * multiple times. */
26
+ export declare function shutdownTracer(): Promise<void>;
27
+ /** Test seam — clears the cached tracer + shuts down the provider so the
28
+ * next getTracer() call rebuilds from a fresh config. Awaitable so tests
29
+ * can ensure all spans flush before assertion. */
30
+ export declare function resetTracer(): Promise<void>;
31
+ /** Diagnostic — exposes the active TelemetryConfig used at registration time. */
32
+ export declare function getTelemetryConfig(): TelemetryConfig;
33
+ //# sourceMappingURL=tracer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../src/telemetry/tracer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAML,KAAK,MAAM,EACZ,MAAM,oBAAoB,CAAC;AAa5B,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AA2ExE,wBAAgB,SAAS,IAAI,MAAM,CAoClC;AAED;;;;qBAIqB;AACrB,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAWpD;AAED;;kDAEkD;AAClD,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAYjD;AAED,iFAAiF;AACjF,wBAAgB,kBAAkB,IAAI,eAAe,CAEpD"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Tracer initialization — lazily registers an OTel TracerProvider on first
3
+ * call. When telemetry is disabled, returns the API's no-op tracer (zero
4
+ * overhead, no global state mutation).
5
+ *
6
+ * Resource enrichment:
7
+ * - service.name / service.version from TelemetryConfig
8
+ * - service.namespace = "anvil"
9
+ * - service.instance.id = `${hostname}-${pid}` (overridable)
10
+ * - host.name from os.hostname()
11
+ * - process.pid / process.runtime.{name,version}
12
+ * - deployment.environment from ANVIL_ENV (default "local")
13
+ * - extra attrs parsed from OTEL_RESOURCE_ATTRIBUTES (k1=v1,k2=v2)
14
+ *
15
+ * Graceful shutdown: SIGINT/SIGTERM/beforeExit hooks call `forceFlush()`
16
+ * + `shutdown()` so trailing spans/metrics aren't lost on `pkill`.
17
+ */
18
+ import { trace, diag, DiagConsoleLogger, DiagLogLevel, } from '@opentelemetry/api';
19
+ import { resourceFromAttributes } from '@opentelemetry/resources';
20
+ import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
21
+ import { BatchSpanProcessor, SimpleSpanProcessor, } from '@opentelemetry/sdk-trace-base';
22
+ import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION, } from '@opentelemetry/semantic-conventions';
23
+ import { hostname } from 'node:os';
24
+ import { loadTelemetryConfig } from './config.js';
25
+ import { buildExporter } from './exporters.js';
26
+ import { shutdownMetrics } from './metrics.js';
27
+ import { VERSION } from '../version.js';
28
+ const TRACER_NAME = 'anvil.agent-core';
29
+ let _tracer = null;
30
+ let _provider = null;
31
+ let _shutdownHooked = false;
32
+ function parseResourceAttrs(raw) {
33
+ if (!raw)
34
+ return {};
35
+ const out = {};
36
+ for (const pair of raw.split(',')) {
37
+ const idx = pair.indexOf('=');
38
+ if (idx <= 0)
39
+ continue;
40
+ const key = pair.slice(0, idx).trim();
41
+ const value = pair.slice(idx + 1).trim();
42
+ if (key)
43
+ out[key] = value;
44
+ }
45
+ return out;
46
+ }
47
+ function buildResource(config) {
48
+ const host = hostname();
49
+ const pid = process.pid;
50
+ const env = process.env.ANVIL_ENV ?? process.env.DEPLOYMENT_ENVIRONMENT ?? 'local';
51
+ return {
52
+ [ATTR_SERVICE_NAME]: config.serviceName,
53
+ [ATTR_SERVICE_VERSION]: VERSION,
54
+ 'service.namespace': 'anvil',
55
+ 'service.instance.id': process.env.ANVIL_INSTANCE_ID ?? `${host}-${pid}`,
56
+ 'host.name': host,
57
+ 'process.pid': pid,
58
+ 'process.runtime.name': 'nodejs',
59
+ 'process.runtime.version': process.versions.node,
60
+ 'deployment.environment': env,
61
+ ...parseResourceAttrs(process.env.OTEL_RESOURCE_ATTRIBUTES),
62
+ };
63
+ }
64
+ function installShutdownHook() {
65
+ if (_shutdownHooked)
66
+ return;
67
+ _shutdownHooked = true;
68
+ const flush = async () => {
69
+ try {
70
+ if (_provider) {
71
+ await _provider.forceFlush();
72
+ await _provider.shutdown();
73
+ }
74
+ await shutdownMetrics();
75
+ }
76
+ catch (err) {
77
+ diag.warn(`[telemetry] shutdown failed: ${err instanceof Error ? err.message : String(err)}`);
78
+ }
79
+ };
80
+ // beforeExit fires when the event loop empties — best place for clean
81
+ // shutdown. SIGINT/SIGTERM cover ctrl-c and pkill.
82
+ process.once('beforeExit', () => { void flush(); });
83
+ for (const sig of ['SIGINT', 'SIGTERM']) {
84
+ process.once(sig, () => {
85
+ void flush().finally(() => {
86
+ // Re-raise the signal so the process actually exits with the
87
+ // right code instead of hanging on a successful flush.
88
+ process.kill(process.pid, sig);
89
+ });
90
+ });
91
+ }
92
+ }
93
+ export function getTracer() {
94
+ if (_tracer)
95
+ return _tracer;
96
+ const config = loadTelemetryConfig();
97
+ if (!config.enabled) {
98
+ _tracer = trace.getTracer(TRACER_NAME, VERSION);
99
+ return _tracer;
100
+ }
101
+ // OTEL_LOG_LEVEL surfaces SDK errors (OTLP POST failures etc.) at the
102
+ // requested level. ERROR is the right default for steady-state ops;
103
+ // bump to DEBUG/INFO when diagnosing.
104
+ const logLevel = (process.env.OTEL_LOG_LEVEL ?? 'ERROR').toUpperCase();
105
+ diag.setLogger(new DiagConsoleLogger(), DiagLogLevel[logLevel] ?? DiagLogLevel.ERROR);
106
+ // SimpleSpanProcessor ships per-span (instant Jaeger/Tempo arrival) for
107
+ // dev. Production should set ANVIL_OTEL_BATCH=1 to amortise network IO.
108
+ const exporter = buildExporter(config);
109
+ const processor = process.env.ANVIL_OTEL_BATCH === '1'
110
+ ? new BatchSpanProcessor(exporter)
111
+ : new SimpleSpanProcessor(exporter);
112
+ _provider = new NodeTracerProvider({
113
+ resource: resourceFromAttributes(buildResource(config)),
114
+ spanProcessors: [processor],
115
+ });
116
+ _provider.register();
117
+ _tracer = trace.getTracer(TRACER_NAME, VERSION);
118
+ installShutdownHook();
119
+ diag.debug(`[telemetry] tracer initialised — service=${config.serviceName} `
120
+ + `mode=${config.exporterMode} endpoint=${config.endpoint ?? 'n/a'}`);
121
+ return _tracer;
122
+ }
123
+ /** Force-flush any pending spans and tear down the provider. Call once at
124
+ * graceful shutdown if you can't rely on the auto-installed hooks (e.g.
125
+ * Lambda runtimes, bespoke shutdown sequences). Also drains the metrics
126
+ * pipeline so per-run cost/token counters land before exit. Safe to call
127
+ * multiple times. */
128
+ export async function shutdownTracer() {
129
+ try {
130
+ if (_provider) {
131
+ await _provider.forceFlush();
132
+ await _provider.shutdown();
133
+ }
134
+ await shutdownMetrics();
135
+ }
136
+ finally {
137
+ _provider = null;
138
+ _tracer = null;
139
+ }
140
+ }
141
+ /** Test seam — clears the cached tracer + shuts down the provider so the
142
+ * next getTracer() call rebuilds from a fresh config. Awaitable so tests
143
+ * can ensure all spans flush before assertion. */
144
+ export async function resetTracer() {
145
+ if (_provider) {
146
+ try {
147
+ await _provider.forceFlush();
148
+ await _provider.shutdown();
149
+ }
150
+ catch {
151
+ // ignore — best effort
152
+ }
153
+ _provider = null;
154
+ }
155
+ _tracer = null;
156
+ trace.disable();
157
+ }
158
+ /** Diagnostic — exposes the active TelemetryConfig used at registration time. */
159
+ export function getTelemetryConfig() {
160
+ return loadTelemetryConfig();
161
+ }
162
+ //# sourceMappingURL=tracer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracer.js","sourceRoot":"","sources":["../../src/telemetry/tracer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Adversarial tests for `BuiltinToolExecutor`. These tools form a
3
+ * security boundary — every test here is a known escape vector that
4
+ * must stay closed.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=builtin.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/builtin.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}