@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,49 @@
1
+ /**
2
+ * Skill loader — scans a directory for `<name>/SKILL.md` files and parses each.
3
+ *
4
+ * Malformed SKILL.md files are logged to stderr and skipped (non-fatal),
5
+ * matching ADR acceptance.
6
+ */
7
+ import { readdirSync, readFileSync, statSync, existsSync } from 'node:fs';
8
+ import { join } from 'node:path';
9
+ import { parseSkillMarkdown } from './parser.js';
10
+ export function loadSkills(opts) {
11
+ const { dir } = opts;
12
+ if (!existsSync(dir))
13
+ return [];
14
+ let entries;
15
+ try {
16
+ entries = readdirSync(dir);
17
+ }
18
+ catch (err) {
19
+ process.stderr.write(`[anvil-skills] WARN: cannot read ${dir}: ${err.message}\n`);
20
+ return [];
21
+ }
22
+ const out = [];
23
+ for (const entry of entries) {
24
+ const skillDir = join(dir, entry);
25
+ let isDir = false;
26
+ try {
27
+ isDir = statSync(skillDir).isDirectory();
28
+ }
29
+ catch {
30
+ continue;
31
+ }
32
+ if (!isDir)
33
+ continue;
34
+ const skillFile = join(skillDir, 'SKILL.md');
35
+ if (!existsSync(skillFile))
36
+ continue;
37
+ try {
38
+ const raw = readFileSync(skillFile, 'utf-8');
39
+ const { frontmatter, body } = parseSkillMarkdown(raw);
40
+ const resources = readdirSync(skillDir).filter((f) => f !== 'SKILL.md');
41
+ out.push({ path: skillFile, frontmatter, body, resources });
42
+ }
43
+ catch (err) {
44
+ process.stderr.write(`[anvil-skills] WARN: skipping ${skillFile}: ${err.message}\n`);
45
+ }
46
+ }
47
+ return out;
48
+ }
49
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,MAAM,UAAU,UAAU,CAAC,IAAsB;IAC/C,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,GAAG,KAAM,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;QAC7F,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,GAAG,GAAY,EAAE,CAAC;IACxB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAClC,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC;YACH,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,SAAS;QAErC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACtD,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC;YACxE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,iCAAiC,SAAS,KAAM,GAAa,CAAC,OAAO,IAAI,CAC1E,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * SKILL.md parser — frontmatter + body splitter.
3
+ *
4
+ * Per ADR §3.3, accepts both kebab-case (spec) and camelCase frontmatter
5
+ * keys and normalizes to camelCase internally.
6
+ */
7
+ import type { SkillFrontmatter } from './types.js';
8
+ export interface ParsedSkill {
9
+ frontmatter: SkillFrontmatter;
10
+ body: string;
11
+ }
12
+ export declare function parseSkillMarkdown(raw: string): ParsedSkill;
13
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/skills/parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAInD,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,gBAAgB,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CA0B3D"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * SKILL.md parser — frontmatter + body splitter.
3
+ *
4
+ * Per ADR §3.3, accepts both kebab-case (spec) and camelCase frontmatter
5
+ * keys and normalizes to camelCase internally.
6
+ */
7
+ import { parse as parseYaml } from 'yaml';
8
+ const FRONTMATTER_RE = /^---\r?\n([\s\S]+?)\r?\n---\r?\n?([\s\S]*)$/;
9
+ export function parseSkillMarkdown(raw) {
10
+ const m = FRONTMATTER_RE.exec(raw);
11
+ if (!m) {
12
+ throw new Error('SKILL.md missing frontmatter (--- ... ---)');
13
+ }
14
+ const fmRaw = parseYaml(m[1]);
15
+ if (!fmRaw || typeof fmRaw !== 'object') {
16
+ throw new Error('SKILL.md frontmatter is not a YAML mapping');
17
+ }
18
+ const fm = fmRaw;
19
+ const name = pickString(fm, 'name');
20
+ const description = pickString(fm, 'description');
21
+ if (!name)
22
+ throw new Error('SKILL.md frontmatter missing required `name`');
23
+ if (!description)
24
+ throw new Error('SKILL.md frontmatter missing required `description`');
25
+ return {
26
+ frontmatter: {
27
+ name,
28
+ description,
29
+ allowedTools: pickStringArray(fm, 'allowedTools', 'allowed-tools'),
30
+ disableModelInvocation: pickBool(fm, 'disableModelInvocation', 'disable-model-invocation'),
31
+ version: pickString(fm, 'version'),
32
+ },
33
+ body: m[2].trim(),
34
+ };
35
+ }
36
+ function pickString(fm, ...keys) {
37
+ for (const k of keys) {
38
+ const v = fm[k];
39
+ if (typeof v === 'string' && v.length > 0)
40
+ return v;
41
+ }
42
+ return undefined;
43
+ }
44
+ function pickStringArray(fm, ...keys) {
45
+ for (const k of keys) {
46
+ const v = fm[k];
47
+ if (Array.isArray(v) && v.every((x) => typeof x === 'string'))
48
+ return v;
49
+ }
50
+ return undefined;
51
+ }
52
+ function pickBool(fm, ...keys) {
53
+ for (const k of keys) {
54
+ const v = fm[k];
55
+ if (typeof v === 'boolean')
56
+ return v;
57
+ }
58
+ return undefined;
59
+ }
60
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/skills/parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAG1C,MAAM,cAAc,GAAG,6CAA6C,CAAC;AAOrE,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,EAAE,GAAG,KAAgC,CAAC;IAE5C,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACpC,MAAM,WAAW,GAAG,UAAU,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAClD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC3E,IAAI,CAAC,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IAEzF,OAAO;QACL,WAAW,EAAE;YACX,IAAI;YACJ,WAAW;YACX,YAAY,EAAE,eAAe,CAAC,EAAE,EAAE,cAAc,EAAE,eAAe,CAAC;YAClE,sBAAsB,EAAE,QAAQ,CAAC,EAAE,EAAE,wBAAwB,EAAE,0BAA0B,CAAC;YAC1F,OAAO,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,CAAC;SACnC;QACD,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;KAClB,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,EAA2B,EAAE,GAAG,IAAc;IAChE,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,EAA2B,EAAE,GAAG,IAAc;IACrE,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;YAAE,OAAO,CAAa,CAAC;IACtF,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,QAAQ,CAAC,EAA2B,EAAE,GAAG,IAAc;IAC9D,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,OAAO,CAAC,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Skills → system prompt renderer.
3
+ *
4
+ * Output format follows ADR §H1 (Anthropic-OpenAI SKILL.md spec). The
5
+ * "## Available Skills" anchor + the per-skill "### <name>" + description
6
+ * pattern is what both Claude Code and Codex CLI emit.
7
+ */
8
+ import type { ActivatedSkills } from './activator.js';
9
+ export declare function renderSkillsForPrompt(activated: ActivatedSkills): string;
10
+ export declare const SKILLS_PROMPT_HEADER = "## Available Skills";
11
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/skills/render.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAStD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,eAAe,GAAG,MAAM,CAMxE;AAED,eAAO,MAAM,oBAAoB,wBAAgB,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Skills → system prompt renderer.
3
+ *
4
+ * Output format follows ADR §H1 (Anthropic-OpenAI SKILL.md spec). The
5
+ * "## Available Skills" anchor + the per-skill "### <name>" + description
6
+ * pattern is what both Claude Code and Codex CLI emit.
7
+ */
8
+ const SKILLS_HEADER = '## Available Skills';
9
+ const SKILLS_PREAMBLE = [
10
+ 'You have access to the following skills. Each skill provides procedural',
11
+ "knowledge for a specific task. Read the skill's instructions when its",
12
+ "description matches the user's request.",
13
+ ].join('\n');
14
+ export function renderSkillsForPrompt(activated) {
15
+ if (activated.skills.length === 0)
16
+ return '';
17
+ const sections = activated.skills.map((s) => `### ${s.frontmatter.name}\n${s.frontmatter.description}\n\n${s.body}`);
18
+ return [SKILLS_HEADER, '', SKILLS_PREAMBLE, '', ...sections].join('\n');
19
+ }
20
+ export const SKILLS_PROMPT_HEADER = SKILLS_HEADER;
21
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/skills/render.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,aAAa,GAAG,qBAAqB,CAAC;AAC5C,MAAM,eAAe,GAAG;IACtB,yEAAyE;IACzE,uEAAuE;IACvE,yCAAyC;CAC1C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,UAAU,qBAAqB,CAAC,SAA0B;IAC9D,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,CAAC,WAAW,OAAO,CAAC,CAAC,IAAI,EAAE,CAC9E,CAAC;IACF,OAAO,CAAC,aAAa,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Skills directory resolution — locked search order per ADR §8.
3
+ *
4
+ * 1. process.env.ANVIL_SKILLS_DIR (full-path override)
5
+ * 2. <workspaceRoot>/.claude/skills/
6
+ * 3. $HOME/.claude/skills/
7
+ *
8
+ * Returns the first existing path, or undefined when none of the candidates
9
+ * exist (in which case `loadSkills` returns []).
10
+ */
11
+ export interface ResolveSkillsDirOptions {
12
+ /** Absolute workspace root; .claude/skills under this is checked second. */
13
+ workspaceRoot?: string;
14
+ /** Override for env-var lookup (test seam). */
15
+ env?: NodeJS.ProcessEnv;
16
+ /** Override for $HOME lookup (test seam). */
17
+ homeDir?: string;
18
+ }
19
+ export declare function resolveSkillsDir(opts?: ResolveSkillsDirOptions): string | undefined;
20
+ //# sourceMappingURL=resolve-dir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-dir.d.ts","sourceRoot":"","sources":["../../src/skills/resolve-dir.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,MAAM,WAAW,uBAAuB;IACtC,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,uBAA4B,GAAG,MAAM,GAAG,SAAS,CAgBvF"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Skills directory resolution — locked search order per ADR §8.
3
+ *
4
+ * 1. process.env.ANVIL_SKILLS_DIR (full-path override)
5
+ * 2. <workspaceRoot>/.claude/skills/
6
+ * 3. $HOME/.claude/skills/
7
+ *
8
+ * Returns the first existing path, or undefined when none of the candidates
9
+ * exist (in which case `loadSkills` returns []).
10
+ */
11
+ import { existsSync } from 'node:fs';
12
+ import { join } from 'node:path';
13
+ import { homedir } from 'node:os';
14
+ export function resolveSkillsDir(opts = {}) {
15
+ const env = opts.env ?? process.env;
16
+ const home = opts.homeDir ?? homedir();
17
+ const override = env.ANVIL_SKILLS_DIR;
18
+ if (override && existsSync(override))
19
+ return override;
20
+ if (opts.workspaceRoot) {
21
+ const ws = join(opts.workspaceRoot, '.claude', 'skills');
22
+ if (existsSync(ws))
23
+ return ws;
24
+ }
25
+ const userGlobal = join(home, '.claude', 'skills');
26
+ if (existsSync(userGlobal))
27
+ return userGlobal;
28
+ return undefined;
29
+ }
30
+ //# sourceMappingURL=resolve-dir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-dir.js","sourceRoot":"","sources":["../../src/skills/resolve-dir.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAWlC,MAAM,UAAU,gBAAgB,CAAC,OAAgC,EAAE;IACjE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;IAEvC,MAAM,QAAQ,GAAG,GAAG,CAAC,gBAAgB,CAAC;IACtC,IAAI,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAEtD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QACzD,IAAI,UAAU,CAAC,EAAE,CAAC;YAAE,OAAO,EAAE,CAAC;IAChC,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnD,IAAI,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IAE9C,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Tool-policy reconciliation between caller-allowed tools and skill-declared
3
+ * `allowed-tools` constraints.
4
+ *
5
+ * Per ADR §H1 + plan §2.4:
6
+ * - Skills can constrain (subtract from caller's wide list) but never expand.
7
+ * - If no activated skill declares `allowed-tools`, caller's policy passes
8
+ * through unchanged.
9
+ * - Otherwise the result is `(union of all skill allowed-tools) ∩ caller`.
10
+ * - If caller is undefined ("any tool"), the result is the union itself.
11
+ */
12
+ import type { Skill } from './types.js';
13
+ export interface ToolPolicyResult {
14
+ /**
15
+ * Resolved tool list. `undefined` means "no constraint" (caller's
16
+ * pre-existing semantics for unrestricted tool access).
17
+ */
18
+ allowedTools: string[] | undefined;
19
+ /**
20
+ * True iff at least one activated skill declared an allowed-tools list,
21
+ * i.e. the caller's policy was actually narrowed.
22
+ */
23
+ constrained: boolean;
24
+ }
25
+ export declare function applyToolPolicy(callerAllowed: string[] | undefined, activatedSkills: Skill[]): ToolPolicyResult;
26
+ //# sourceMappingURL=tool-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-policy.d.ts","sourceRoot":"","sources":["../../src/skills/tool-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,YAAY,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACnC;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,eAAe,CAC7B,aAAa,EAAE,MAAM,EAAE,GAAG,SAAS,EACnC,eAAe,EAAE,KAAK,EAAE,GACvB,gBAAgB,CAsBlB"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Tool-policy reconciliation between caller-allowed tools and skill-declared
3
+ * `allowed-tools` constraints.
4
+ *
5
+ * Per ADR §H1 + plan §2.4:
6
+ * - Skills can constrain (subtract from caller's wide list) but never expand.
7
+ * - If no activated skill declares `allowed-tools`, caller's policy passes
8
+ * through unchanged.
9
+ * - Otherwise the result is `(union of all skill allowed-tools) ∩ caller`.
10
+ * - If caller is undefined ("any tool"), the result is the union itself.
11
+ */
12
+ export function applyToolPolicy(callerAllowed, activatedSkills) {
13
+ const skillUnion = new Set();
14
+ let anySkillConstraint = false;
15
+ for (const s of activatedSkills) {
16
+ const at = s.frontmatter.allowedTools;
17
+ if (at && at.length > 0) {
18
+ anySkillConstraint = true;
19
+ for (const tool of at)
20
+ skillUnion.add(tool);
21
+ }
22
+ }
23
+ if (!anySkillConstraint) {
24
+ return { allowedTools: callerAllowed, constrained: false };
25
+ }
26
+ if (callerAllowed === undefined) {
27
+ return { allowedTools: [...skillUnion].sort(), constrained: true };
28
+ }
29
+ const callerSet = new Set(callerAllowed);
30
+ const intersection = [...skillUnion].filter((t) => callerSet.has(t)).sort();
31
+ return { allowedTools: intersection, constrained: true };
32
+ }
33
+ //# sourceMappingURL=tool-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-policy.js","sourceRoot":"","sources":["../../src/skills/tool-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAiBH,MAAM,UAAU,eAAe,CAC7B,aAAmC,EACnC,eAAwB;IAExB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QAChC,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC;QACtC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,kBAAkB,GAAG,IAAI,CAAC;YAC1B,KAAK,MAAM,IAAI,IAAI,EAAE;gBAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAC7D,CAAC;IAED,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,EAAE,YAAY,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACrE,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Skill types — Anthropic-OpenAI SKILL.md open standard.
3
+ *
4
+ * See AGENT-HARNESS-ADR.md §3 for the locked schema (required vs optional
5
+ * fields, key normalization rules).
6
+ */
7
+ export interface SkillFrontmatter {
8
+ /** Slug-safe identifier; used in registry + namespacing. */
9
+ name: string;
10
+ /** One-sentence hook the model uses to decide whether to load the skill. */
11
+ description: string;
12
+ /**
13
+ * Constrains the caller's tool list while the skill is active.
14
+ * Semantics: intersection with caller's allowed tools — skills can subtract,
15
+ * never expand.
16
+ */
17
+ allowedTools?: string[];
18
+ /**
19
+ * If true, skill is loaded only on explicit selection, not auto-routed
20
+ * via description matching. Default: false.
21
+ */
22
+ disableModelInvocation?: boolean;
23
+ /** Free-form (semver suggested) for cache busting. */
24
+ version?: string;
25
+ }
26
+ export interface Skill {
27
+ /** Filesystem path of the SKILL.md file. */
28
+ path: string;
29
+ /** Parsed + normalized frontmatter. */
30
+ frontmatter: SkillFrontmatter;
31
+ /** Markdown body (after the frontmatter block, trimmed). */
32
+ body: string;
33
+ /** Sibling files under the skill's directory (e.g. scripts, templates). */
34
+ resources: string[];
35
+ }
36
+ export interface SkillLoadOptions {
37
+ /** Absolute path to the skills directory. */
38
+ dir: string;
39
+ /** Maximum total body bytes to inject; defaults to 32 KB. */
40
+ maxBytes?: number;
41
+ }
42
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/skills/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;OAGG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,KAAK;IACpB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,WAAW,EAAE,gBAAgB,CAAC;IAC9B,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,6CAA6C;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Skill types — Anthropic-OpenAI SKILL.md open standard.
3
+ *
4
+ * See AGENT-HARNESS-ADR.md §3 for the locked schema (required vs optional
5
+ * fields, key normalization rules).
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/skills/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Anvil Stream Format helpers.
3
+ *
4
+ * Every non-Claude adapter uses these functions to produce NDJSON output that
5
+ * matches `claude --output-format stream-json`, so all existing parsers
6
+ * (run-feature.ts, agent-process.ts, spawn.ts) work without modification.
7
+ *
8
+ * Line format reference:
9
+ * Content: {"type":"assistant","message":{"content":[{"type":"text","text":"..."}]}}
10
+ * Tool use: {"type":"assistant","message":{"content":[{"type":"tool_use","name":"...","input":{...}}]}}
11
+ * Thinking: {"type":"assistant","message":{"content":[{"type":"thinking","text":"..."}]}}
12
+ * Result: {"type":"result","result":"...","total_cost_usd":0.123,"usage":{...},"duration_ms":5000,"session_id":"..."}
13
+ */
14
+ export interface TextContentBlock {
15
+ type: 'text';
16
+ text: string;
17
+ }
18
+ export interface ToolUseContentBlock {
19
+ type: 'tool_use';
20
+ /** Pairing id consumed by `LanguageModelBridge` to match tool_result. */
21
+ id?: string;
22
+ name: string;
23
+ input: Record<string, unknown>;
24
+ }
25
+ export interface ToolResultContentBlock {
26
+ type: 'tool_result';
27
+ tool_use_id: string;
28
+ content: string;
29
+ is_error?: boolean;
30
+ }
31
+ export interface UserMessage {
32
+ type: 'user';
33
+ message: {
34
+ content: ToolResultContentBlock[];
35
+ };
36
+ }
37
+ export interface ThinkingContentBlock {
38
+ type: 'thinking';
39
+ text: string;
40
+ }
41
+ export type ContentBlock = TextContentBlock | ToolUseContentBlock | ThinkingContentBlock;
42
+ export interface AssistantMessage {
43
+ type: 'assistant';
44
+ message: {
45
+ content: ContentBlock[];
46
+ };
47
+ }
48
+ export interface ResultUsage {
49
+ input_tokens: number;
50
+ output_tokens: number;
51
+ cache_read_input_tokens: number;
52
+ cache_creation_input_tokens: number;
53
+ }
54
+ export interface ResultMessage {
55
+ type: 'result';
56
+ result: string;
57
+ total_cost_usd: number;
58
+ usage: ResultUsage;
59
+ duration_ms: number;
60
+ session_id?: string;
61
+ }
62
+ export type StreamLine = AssistantMessage | UserMessage | ResultMessage;
63
+ /** Emit a text content block. */
64
+ export declare function emitContent(out: NodeJS.WritableStream, text: string): void;
65
+ /**
66
+ * Emit a tool_use content block.
67
+ *
68
+ * `id` is the pairing identifier the bridge uses to match this call to
69
+ * its eventual `tool_result`. Adapters that drive their own agentic
70
+ * loop (Ollama, future OpenAI/Gemini agentic paths) MUST pass an id;
71
+ * legacy single-shot callers may omit it.
72
+ */
73
+ export declare function emitToolUse(out: NodeJS.WritableStream, name: string, input: Record<string, unknown>, id?: string): void;
74
+ /**
75
+ * Emit a tool_result content block (user-role message).
76
+ *
77
+ * Used by adapters that own their agentic loop and need to feed tool
78
+ * outputs back to the model. `LanguageModelBridge` pairs `tool_use_id`
79
+ * to the open span and closes it on receipt — same pairing logic as
80
+ * Claude CLI's native stream.
81
+ */
82
+ export declare function emitToolResult(out: NodeJS.WritableStream, opts: {
83
+ toolUseId: string;
84
+ content: string;
85
+ isError?: boolean;
86
+ }): void;
87
+ /** Emit a thinking content block. */
88
+ export declare function emitThinking(out: NodeJS.WritableStream, text: string): void;
89
+ /** Emit the final result line. */
90
+ export declare function emitResult(out: NodeJS.WritableStream, opts: {
91
+ text: string;
92
+ costUsd: number;
93
+ inputTokens: number;
94
+ outputTokens: number;
95
+ durationMs: number;
96
+ sessionId?: string;
97
+ cacheReadTokens?: number;
98
+ cacheWriteTokens?: number;
99
+ }): void;
100
+ //# sourceMappingURL=stream-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-format.d.ts","sourceRoot":"","sources":["../src/stream-format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Anvil Stream Format helpers.
3
+ *
4
+ * Every non-Claude adapter uses these functions to produce NDJSON output that
5
+ * matches `claude --output-format stream-json`, so all existing parsers
6
+ * (run-feature.ts, agent-process.ts, spawn.ts) work without modification.
7
+ *
8
+ * Line format reference:
9
+ * Content: {"type":"assistant","message":{"content":[{"type":"text","text":"..."}]}}
10
+ * Tool use: {"type":"assistant","message":{"content":[{"type":"tool_use","name":"...","input":{...}}]}}
11
+ * Thinking: {"type":"assistant","message":{"content":[{"type":"thinking","text":"..."}]}}
12
+ * Result: {"type":"result","result":"...","total_cost_usd":0.123,"usage":{...},"duration_ms":5000,"session_id":"..."}
13
+ */
14
+ // ---------------------------------------------------------------------------
15
+ // Emit helpers — each writes exactly one NDJSON line (JSON + '\n')
16
+ // ---------------------------------------------------------------------------
17
+ /** Emit a text content block. */
18
+ export function emitContent(out, text) {
19
+ const line = {
20
+ type: 'assistant',
21
+ message: {
22
+ content: [{ type: 'text', text }],
23
+ },
24
+ };
25
+ out.write(JSON.stringify(line) + '\n');
26
+ }
27
+ /**
28
+ * Emit a tool_use content block.
29
+ *
30
+ * `id` is the pairing identifier the bridge uses to match this call to
31
+ * its eventual `tool_result`. Adapters that drive their own agentic
32
+ * loop (Ollama, future OpenAI/Gemini agentic paths) MUST pass an id;
33
+ * legacy single-shot callers may omit it.
34
+ */
35
+ export function emitToolUse(out, name, input, id) {
36
+ const block = id !== undefined
37
+ ? { type: 'tool_use', id, name, input }
38
+ : { type: 'tool_use', name, input };
39
+ const line = {
40
+ type: 'assistant',
41
+ message: { content: [block] },
42
+ };
43
+ out.write(JSON.stringify(line) + '\n');
44
+ }
45
+ /**
46
+ * Emit a tool_result content block (user-role message).
47
+ *
48
+ * Used by adapters that own their agentic loop and need to feed tool
49
+ * outputs back to the model. `LanguageModelBridge` pairs `tool_use_id`
50
+ * to the open span and closes it on receipt — same pairing logic as
51
+ * Claude CLI's native stream.
52
+ */
53
+ export function emitToolResult(out, opts) {
54
+ const block = {
55
+ type: 'tool_result',
56
+ tool_use_id: opts.toolUseId,
57
+ content: opts.content,
58
+ ...(opts.isError !== undefined ? { is_error: opts.isError } : {}),
59
+ };
60
+ const line = { type: 'user', message: { content: [block] } };
61
+ out.write(JSON.stringify(line) + '\n');
62
+ }
63
+ /** Emit a thinking content block. */
64
+ export function emitThinking(out, text) {
65
+ const line = {
66
+ type: 'assistant',
67
+ message: {
68
+ content: [{ type: 'thinking', text }],
69
+ },
70
+ };
71
+ out.write(JSON.stringify(line) + '\n');
72
+ }
73
+ /** Emit the final result line. */
74
+ export function emitResult(out, opts) {
75
+ const line = {
76
+ type: 'result',
77
+ result: opts.text,
78
+ total_cost_usd: opts.costUsd,
79
+ usage: {
80
+ input_tokens: opts.inputTokens,
81
+ output_tokens: opts.outputTokens,
82
+ cache_read_input_tokens: opts.cacheReadTokens ?? 0,
83
+ cache_creation_input_tokens: opts.cacheWriteTokens ?? 0,
84
+ },
85
+ duration_ms: opts.durationMs,
86
+ ...(opts.sessionId != null ? { session_id: opts.sessionId } : {}),
87
+ };
88
+ out.write(JSON.stringify(line) + '\n');
89
+ }
90
+ //# sourceMappingURL=stream-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-format.js","sourceRoot":"","sources":["../src/stream-format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * GenAI semantic-convention attribute keys.
3
+ *
4
+ * Mirrors the OpenTelemetry GenAI SIG spec
5
+ * (https://opentelemetry.io/docs/specs/semconv/gen-ai/llm-spans/) plus
6
+ * Anvil-specific extensions for cost USD, cache tokens, and tool argument
7
+ * size. Anvil-extension attributes follow the same `gen_ai.*` namespace so
8
+ * backends without LLM-specific UIs still render them as plain attributes.
9
+ */
10
+ export declare const GenAi: {
11
+ readonly SYSTEM: "gen_ai.system";
12
+ readonly REQUEST_MODEL: "gen_ai.request.model";
13
+ readonly REQUEST_MAX_TOKENS: "gen_ai.request.max_tokens";
14
+ readonly REQUEST_TEMPERATURE: "gen_ai.request.temperature";
15
+ readonly RESPONSE_FINISH_REASONS: "gen_ai.response.finish_reasons";
16
+ readonly RESPONSE_MODEL: "gen_ai.response.model";
17
+ readonly RESPONSE_ID: "gen_ai.response.id";
18
+ readonly USAGE_INPUT_TOKENS: "gen_ai.usage.input_tokens";
19
+ readonly USAGE_OUTPUT_TOKENS: "gen_ai.usage.output_tokens";
20
+ readonly TOOL_NAME: "gen_ai.tool.name";
21
+ readonly USAGE_CACHE_READ_TOKENS: "gen_ai.usage.cache_read_tokens";
22
+ readonly USAGE_CACHE_WRITE_TOKENS: "gen_ai.usage.cache_write_tokens";
23
+ readonly USAGE_CACHE_HIT_RATIO: "gen_ai.usage.cache_hit_ratio";
24
+ readonly USAGE_COST_USD: "gen_ai.usage.cost_usd";
25
+ readonly USAGE_COST_INPUT_USD: "gen_ai.usage.cost_input_usd";
26
+ readonly USAGE_COST_OUTPUT_USD: "gen_ai.usage.cost_output_usd";
27
+ readonly USAGE_COST_CACHE_READ_USD: "gen_ai.usage.cost_cache_read_usd";
28
+ readonly USAGE_COST_CACHE_WRITE_USD: "gen_ai.usage.cost_cache_write_usd";
29
+ readonly TOOL_ARGUMENTS_SIZE: "gen_ai.tool.arguments_size_bytes";
30
+ readonly REASONING_TOKENS: "gen_ai.reasoning.tokens";
31
+ readonly REASONING_TEXT: "gen_ai.reasoning.text";
32
+ readonly MESSAGES_COUNT: "gen_ai.messages.count";
33
+ readonly TOOLS_COUNT: "gen_ai.tools.count";
34
+ readonly PROMPT: "gen_ai.prompt";
35
+ readonly COMPLETION: "gen_ai.completion";
36
+ };
37
+ export type GenAiAttribute = (typeof GenAi)[keyof typeof GenAi];
38
+ //# sourceMappingURL=attributes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../../src/telemetry/attributes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BR,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,OAAO,KAAK,CAAC,CAAC"}