@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,135 @@
1
+ /**
2
+ * Phase 6 of AGENT-PROCESS-CONSOLIDATION — verify `defaultAdapterFactory`
3
+ * surfaces skill + MCP discovery as attributes on the active session span.
4
+ *
5
+ * Three cases:
6
+ * 1. workspace with .claude/skills/foo/SKILL.md → session span carries
7
+ * anvil.skills.activated.count + .names.
8
+ * 2. workspace with no skills + no mcp.json → no attrs (absence-stays-
9
+ * absent per observability ADR §O7).
10
+ * 3. workspace with mcp.json → anvil.mcp.servers.count set.
11
+ */
12
+ import { describe, it, beforeEach, afterEach } from 'node:test';
13
+ import assert from 'node:assert/strict';
14
+ import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from 'node:fs';
15
+ import { tmpdir } from 'node:os';
16
+ import { join } from 'node:path';
17
+ import { trace, context as otelContext } from '@opentelemetry/api';
18
+ import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
19
+ import { InMemorySpanExporter, SimpleSpanProcessor, } from '@opentelemetry/sdk-trace-base';
20
+ import { resourceFromAttributes } from '@opentelemetry/resources';
21
+ import { ATTR_SERVICE_NAME } from '@opentelemetry/semantic-conventions';
22
+ import { resetTracer, getTracer } from '../../../telemetry/tracer.js';
23
+ import { enrichRequestWithWorkspace } from '../default-adapter-factory.js';
24
+ let exporter;
25
+ let provider;
26
+ async function installInMemoryExporter() {
27
+ await resetTracer();
28
+ exporter = new InMemorySpanExporter();
29
+ provider = new NodeTracerProvider({
30
+ resource: resourceFromAttributes({ [ATTR_SERVICE_NAME]: 'anvil-spawn-telemetry-test' }),
31
+ spanProcessors: [new SimpleSpanProcessor(exporter)],
32
+ });
33
+ provider.register();
34
+ }
35
+ async function uninstallInMemoryExporter() {
36
+ try {
37
+ await provider.forceFlush();
38
+ await provider.shutdown();
39
+ }
40
+ catch {
41
+ /* best-effort */
42
+ }
43
+ exporter.reset();
44
+ trace.disable();
45
+ }
46
+ function makeRequest(overrides = {}) {
47
+ return {
48
+ prompt: 'do thing',
49
+ model: 'qwen2.5-coder:7b',
50
+ sessionId: 'sess-test',
51
+ cwd: '/tmp',
52
+ ...overrides,
53
+ };
54
+ }
55
+ function makeWorkspaceWithSkill() {
56
+ const dir = mkdtempSync(join(tmpdir(), 'anvil-skill-tel-'));
57
+ const skillDir = join(dir, '.claude', 'skills', 'tel-skill');
58
+ mkdirSync(skillDir, { recursive: true });
59
+ writeFileSync(join(skillDir, 'SKILL.md'), '---\nname: tel-skill\ndescription: Telemetry test skill.\n---\n\n# Body\n');
60
+ return { dir, cleanup: () => rmSync(dir, { recursive: true, force: true }) };
61
+ }
62
+ function makeWorkspaceWithMcp() {
63
+ const dir = mkdtempSync(join(tmpdir(), 'anvil-mcp-tel-'));
64
+ writeFileSync(join(dir, 'mcp.json'), JSON.stringify({ mcpServers: { tel: { command: 'echo', args: ['hi'] } } }));
65
+ return { dir, cleanup: () => rmSync(dir, { recursive: true, force: true }) };
66
+ }
67
+ function makeEmptyWorkspace() {
68
+ const dir = mkdtempSync(join(tmpdir(), 'anvil-empty-tel-'));
69
+ return { dir, cleanup: () => rmSync(dir, { recursive: true, force: true }) };
70
+ }
71
+ /**
72
+ * Run `enrichRequestWithWorkspace` inside a parent span so the factory can
73
+ * observe an active span via `trace.getActiveSpan()`. Returns the recorded
74
+ * span by name.
75
+ */
76
+ function runUnderParentSpan(name, fn) {
77
+ const tracer = getTracer();
78
+ const span = tracer.startSpan(name);
79
+ const ctx = trace.setSpan(otelContext.active(), span);
80
+ otelContext.with(ctx, fn);
81
+ span.end();
82
+ const found = exporter.getFinishedSpans().find((s) => s.name === name);
83
+ if (!found) {
84
+ throw new Error(`Expected to find span "${name}"; got ${exporter.getFinishedSpans().map((s) => s.name).join(', ')}`);
85
+ }
86
+ return found;
87
+ }
88
+ describe('defaultAdapterFactory telemetry', () => {
89
+ beforeEach(installInMemoryExporter);
90
+ afterEach(uninstallInMemoryExporter);
91
+ it('skills present: anvil.skills.activated.count + .names on active span', () => {
92
+ const ws = makeWorkspaceWithSkill();
93
+ try {
94
+ const span = runUnderParentSpan('test.session', () => {
95
+ enrichRequestWithWorkspace(makeRequest({ workspaceDir: ws.dir, model: 'qwen2.5-coder:7b' }), 'ollama');
96
+ });
97
+ assert.equal(span.attributes['anvil.skills.activated.count'], 1);
98
+ const names = span.attributes['anvil.skills.activated.names'];
99
+ assert.ok(names && names.includes('tel-skill'), `expected names attr to include 'tel-skill', got "${names}"`);
100
+ }
101
+ finally {
102
+ ws.cleanup();
103
+ }
104
+ });
105
+ it('empty workspace: no skill attrs (absence stays absent)', () => {
106
+ const ws = makeEmptyWorkspace();
107
+ try {
108
+ const span = runUnderParentSpan('test.session', () => {
109
+ enrichRequestWithWorkspace(makeRequest({ workspaceDir: ws.dir, model: 'qwen2.5-coder:7b' }), 'ollama');
110
+ });
111
+ assert.equal(span.attributes['anvil.skills.activated.count'], undefined);
112
+ assert.equal(span.attributes['anvil.skills.activated.names'], undefined);
113
+ // Note: anvil.mcp.servers.count may still appear if the user has a
114
+ // global ~/.claude/mcp.json (rank-5 fallback in findMcpConfigPath).
115
+ // We assert only on per-workspace skill-absence to keep the test
116
+ // robust across machines.
117
+ }
118
+ finally {
119
+ ws.cleanup();
120
+ }
121
+ });
122
+ it('mcp present: anvil.mcp.servers.count surfaces on active span', () => {
123
+ const ws = makeWorkspaceWithMcp();
124
+ try {
125
+ const span = runUnderParentSpan('test.session', () => {
126
+ enrichRequestWithWorkspace(makeRequest({ workspaceDir: ws.dir, model: 'claude-sonnet-4-6' }), 'claude');
127
+ });
128
+ assert.equal(span.attributes['anvil.mcp.servers.count'], 1);
129
+ }
130
+ finally {
131
+ ws.cleanup();
132
+ }
133
+ });
134
+ });
135
+ //# sourceMappingURL=spawn-telemetry.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-telemetry.test.js","sourceRoot":"","sources":["../../../../src/agent/session/__tests__/spawn-telemetry.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Type-shape lock for agent-core's canonical agent-lifecycle surface.
3
+ *
4
+ * Asserts (compile time + a thin runtime shim) that the public types match
5
+ * the dashboard's pre-Phase-4 shapes — every legacy field has a destination
6
+ * — so dashboard's call sites compile after dropping their re-export shims.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.test.d.ts","sourceRoot":"","sources":["../../../../src/agent/session/__tests__/types.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,220 @@
1
+ /**
2
+ * Type-shape lock for agent-core's canonical agent-lifecycle surface.
3
+ *
4
+ * Asserts (compile time + a thin runtime shim) that the public types match
5
+ * the dashboard's pre-Phase-4 shapes — every legacy field has a destination
6
+ * — so dashboard's call sites compile after dropping their re-export shims.
7
+ */
8
+ import { describe, it } from 'node:test';
9
+ import assert from 'node:assert/strict';
10
+ import { EventEmitter } from 'node:events';
11
+ import { AgentManager, AgentNotFoundError, AgentProcess, SessionResumeNotSupportedError, emptyCost, } from '../index.js';
12
+ // Minimal fake adapter for the type-shape locks. Not exercised; only
13
+ // satisfies the `adapterFactory` constructor argument.
14
+ class NoopAdapter extends EventEmitter {
15
+ start() { }
16
+ kill() { }
17
+ }
18
+ const noopFactory = () => new NoopAdapter();
19
+ // ── 1. SpawnConfig parity ───────────────────────────────────────────────
20
+ describe('SpawnConfig — dashboard parity', () => {
21
+ it('accepts every field dashboard sets today', () => {
22
+ const spec = {
23
+ name: 'engineer-build-backend',
24
+ persona: 'engineer',
25
+ project: 'demo',
26
+ stage: 'build',
27
+ prompt: 'Implement the new auth flow',
28
+ model: 'claude-3-5-sonnet',
29
+ cwd: '/tmp/workspace',
30
+ projectPrompt: 'You are working on Anvil.',
31
+ permissionMode: 'auto',
32
+ disallowedTools: ['Write', 'Edit'],
33
+ allowedTools: ['Read', 'Grep'],
34
+ maxOutputTokens: 16000,
35
+ runId: 'run-123',
36
+ runFamily: 'run-123',
37
+ };
38
+ assert.equal(spec.name, 'engineer-build-backend');
39
+ assert.equal(spec.cwd, '/tmp/workspace');
40
+ assert.equal(spec.maxOutputTokens, 16000);
41
+ });
42
+ it('accepts cli-shape options (restart + timeout + binaryPath)', () => {
43
+ const spec = {
44
+ name: 'cli-stage',
45
+ persona: 'cli',
46
+ project: '',
47
+ stage: 'build',
48
+ prompt: '...',
49
+ model: 'gpt-4',
50
+ cwd: '/tmp',
51
+ restart: { maxAttempts: 2 },
52
+ timeoutMs: 600_000,
53
+ binaryPath: '/usr/local/bin/claude',
54
+ args: ['-p', 'extra'],
55
+ };
56
+ assert.equal(spec.restart?.maxAttempts, 2);
57
+ assert.equal(spec.timeoutMs, 600_000);
58
+ });
59
+ });
60
+ // ── 2. AgentState parity ────────────────────────────────────────────────
61
+ describe('AgentState — dashboard parity', () => {
62
+ it('exposes the same 5-state status union', () => {
63
+ const states = [
64
+ 'pending',
65
+ 'running',
66
+ 'done',
67
+ 'error',
68
+ 'killed',
69
+ ];
70
+ assert.equal(states.length, 5);
71
+ });
72
+ it('shape matches dashboard AgentState field-for-field', () => {
73
+ const state = {
74
+ id: 'a',
75
+ name: 'b',
76
+ persona: 'c',
77
+ sessionId: 'd',
78
+ model: 'e',
79
+ status: 'pending',
80
+ cost: emptyCost(),
81
+ output: '',
82
+ activities: [],
83
+ startedAt: null,
84
+ finishedAt: null,
85
+ error: null,
86
+ };
87
+ assert.equal(state.status, 'pending');
88
+ assert.equal(state.cost.totalUsd, 0);
89
+ });
90
+ });
91
+ // ── 3. Hooks accept the dashboard's existing hook shapes ────────────────
92
+ describe('AgentCostHook + AgentCheckpointHook — dashboard parity', () => {
93
+ it('accepts dashboard-shaped cost hook', () => {
94
+ const hook = (info) => {
95
+ assert.ok(typeof info.usd === 'number');
96
+ };
97
+ hook({
98
+ runId: 'r',
99
+ project: 'p',
100
+ stage: 's',
101
+ agent: 'a',
102
+ persona: 'pe',
103
+ model: 'm',
104
+ tokensIn: 1,
105
+ tokensOut: 2,
106
+ cacheReadTokens: 0,
107
+ cacheWriteTokens: 0,
108
+ usd: 0.01,
109
+ });
110
+ });
111
+ it('accepts dashboard-shaped checkpoint hook', () => {
112
+ const hook = {
113
+ lookup() {
114
+ return { hit: false };
115
+ },
116
+ };
117
+ const result = hook.lookup({
118
+ project: 'p',
119
+ stage: 's',
120
+ persona: 'pe',
121
+ model: 'm',
122
+ prompt: 'hi',
123
+ });
124
+ assert.equal(result.hit, false);
125
+ });
126
+ });
127
+ // ── 4. Activity + cost types ────────────────────────────────────────────
128
+ describe('AgentActivity + CostInfo', () => {
129
+ it('AgentActivity matches the dashboard shape', () => {
130
+ const activity = {
131
+ id: 'x',
132
+ kind: 'tool_use',
133
+ tool: 'Read',
134
+ summary: 'Read foo.ts',
135
+ timestamp: Date.now(),
136
+ };
137
+ assert.equal(activity.kind, 'tool_use');
138
+ });
139
+ it('emptyCost() returns zeroed CostInfo', () => {
140
+ const c = emptyCost();
141
+ assert.equal(c.totalUsd, 0);
142
+ assert.equal(c.inputTokens, 0);
143
+ assert.equal(c.outputTokens, 0);
144
+ assert.equal(c.cacheReadTokens, 0);
145
+ assert.equal(c.cacheWriteTokens, 0);
146
+ assert.equal(c.durationMs, 0);
147
+ });
148
+ });
149
+ // ── 5. Event shapes ─────────────────────────────────────────────────────
150
+ describe('Event shapes', () => {
151
+ it('AgentProcessEvents has the 5 dashboard AgentProcessEvents', () => {
152
+ const events = [
153
+ 'content',
154
+ 'activity',
155
+ 'result',
156
+ 'error-output',
157
+ 'exit',
158
+ ];
159
+ assert.equal(events.length, 5);
160
+ });
161
+ it('AgentManagerEvents has the 4 dashboard AgentManagerEvents', () => {
162
+ const events = [
163
+ 'agent-output',
164
+ 'agent-activity',
165
+ 'agent-done',
166
+ 'agent-error',
167
+ ];
168
+ assert.equal(events.length, 4);
169
+ });
170
+ });
171
+ // ── 6. Class construction ───────────────────────────────────────────────
172
+ describe('AgentProcess construction', () => {
173
+ const spec = {
174
+ name: 't',
175
+ persona: 'p',
176
+ project: 'pr',
177
+ stage: 's',
178
+ prompt: '',
179
+ model: 'm',
180
+ cwd: '/tmp',
181
+ };
182
+ it('constructs with a pending state', () => {
183
+ const proc = new AgentProcess(spec, { adapterFactory: noopFactory });
184
+ assert.equal(proc.status, 'pending');
185
+ assert.equal(proc.output, '');
186
+ });
187
+ it('honors id override', () => {
188
+ const proc = new AgentProcess(spec, { adapterFactory: noopFactory, id: 'custom-id' });
189
+ assert.equal(proc.id, 'custom-id');
190
+ assert.equal(proc.sessionId, 'custom-id');
191
+ });
192
+ it('id defaults to a UUID v4', () => {
193
+ const proc = new AgentProcess(spec, { adapterFactory: noopFactory });
194
+ assert.match(proc.id, /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/);
195
+ });
196
+ });
197
+ describe('AgentManager construction', () => {
198
+ it('constructs and accepts hook setters', () => {
199
+ const mgr = new AgentManager({ adapterFactory: noopFactory });
200
+ mgr.setCostHook(() => { });
201
+ mgr.setCheckpointHook({ lookup: () => ({ hit: false }) });
202
+ assert.equal(mgr.getAgent('missing'), undefined);
203
+ });
204
+ });
205
+ // ── 7. Errors carry the right metadata ──────────────────────────────────
206
+ describe('Errors', () => {
207
+ it('SessionResumeNotSupportedError carries provider + model', () => {
208
+ const err = new SessionResumeNotSupportedError('openai', 'gpt-4');
209
+ assert.equal(err.provider, 'openai');
210
+ assert.equal(err.model, 'gpt-4');
211
+ assert.match(err.message, /openai/);
212
+ assert.match(err.message, /gpt-4/);
213
+ });
214
+ it('AgentNotFoundError carries the agentId', () => {
215
+ const err = new AgentNotFoundError('agent-xyz');
216
+ assert.equal(err.agentId, 'agent-xyz');
217
+ assert.match(err.message, /agent-xyz/);
218
+ });
219
+ });
220
+ //# sourceMappingURL=types.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.test.js","sourceRoot":"","sources":["../../../../src/agent/session/__tests__/types.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * `AgentAdapter` — minimal adapter contract `AgentSession` consumes.
3
+ *
4
+ * Mirrors the public surface of dashboard's `BaseAdapter` (EventEmitter +
5
+ * `start()` / `kill()` / `setMaxOutputTokens()`). Defining it in agent-core
6
+ * lets both consumers wire their own adapters:
7
+ *
8
+ * - Dashboard injects its existing `BaseAdapter`-derived adapters
9
+ * (claude / openai / etc.) which already satisfy this shape.
10
+ * - cli (Phase 5) injects a thin wrapper that drives agent-core's
11
+ * `LanguageModel.invokeStream()` and re-emits the same 5 events.
12
+ *
13
+ * The structural interface (vs a class) avoids forcing consumers to inherit
14
+ * from agent-core just to plug in.
15
+ */
16
+ import type { EventEmitter } from 'node:events';
17
+ import type { AgentActivity, CostInfo, SpawnConfig } from './types.js';
18
+ /**
19
+ * The 5 events an adapter emits during a run. Same shape as dashboard's
20
+ * `AdapterEvents` (and dashboard's `AgentProcessEvents`).
21
+ */
22
+ export interface AgentAdapterEvents {
23
+ content: (text: string) => void;
24
+ activity: (activity: AgentActivity) => void;
25
+ result: (data: {
26
+ result: string;
27
+ cost: CostInfo;
28
+ sessionId: string;
29
+ }) => void;
30
+ 'error-output': (text: string) => void;
31
+ exit: (code: number | null) => void;
32
+ }
33
+ /**
34
+ * Public surface of an adapter `AgentSession` knows how to drive. We depend
35
+ * structurally on `EventEmitter` so consumers can subclass `EventEmitter`
36
+ * directly (the dashboard already does).
37
+ */
38
+ export interface AgentAdapter extends EventEmitter {
39
+ /** Begin running. May spawn a subprocess, open a stream, etc. */
40
+ start(): void;
41
+ /** Stop running and release resources. Idempotent. */
42
+ kill(signal?: string): void;
43
+ /** Optional output-token ceiling. Adapters that don't honor it ignore it. */
44
+ setMaxOutputTokens?(n: number): void;
45
+ readonly pid?: number;
46
+ readonly killed?: boolean;
47
+ }
48
+ /**
49
+ * Options forwarded to the adapter factory when `AgentSession` builds its
50
+ * underlying adapter. Mirrors dashboard's `AgentProcessConfig` — a flattened
51
+ * subset of `SpawnConfig` plus a `resume` flag.
52
+ */
53
+ export interface AdapterRequest {
54
+ prompt: string;
55
+ model: string;
56
+ sessionId: string;
57
+ cwd: string;
58
+ /** When true, the adapter resumes the prior session rather than starting fresh. */
59
+ resume?: boolean;
60
+ projectPrompt?: string;
61
+ permissionMode?: string;
62
+ disallowedTools?: string[];
63
+ allowedTools?: string[];
64
+ maxOutputTokens?: number;
65
+ /** Pipeline stage (e.g. 'requirements', 'build', 'spike'). Surfaces on
66
+ * every span and metric so dashboards can slice by stage. */
67
+ stage?: string;
68
+ /** Agent persona (e.g. 'analyst', 'engineer'). Same. */
69
+ persona?: string;
70
+ /** Project the spawn belongs to. */
71
+ project?: string;
72
+ /** Run id grouping multiple spawns into one logical pipeline run. */
73
+ runId?: string;
74
+ /** When true, the adapter routes the call through the LocalExecutor's
75
+ * single-slot FIFO. Set automatically by the SpawnConfig→AdapterRequest
76
+ * mapping when the resolved model has `exclusive_slot:true` in
77
+ * `~/.anvil/models.yaml`. */
78
+ exclusiveSlot?: boolean;
79
+ /** Workspace root forwarded from `SpawnConfig.workspaceDir`. Used by
80
+ * `defaultAdapterFactory` to discover skills + MCP. Per AGENT-PROCESS-
81
+ * CONSOLIDATION-ADR §C4. */
82
+ workspaceDir?: string;
83
+ /** Internal — populated by `defaultAdapterFactory` for the Claude path
84
+ * when an `mcp.json` is discovered under `workspaceDir`. The bridge
85
+ * forwards it to `ModelAdapterConfig.mcpConfigPath` so claude-cli
86
+ * reads it via `--mcp-config <path>`. Not user-facing. */
87
+ claudeMcpConfigPath?: string;
88
+ }
89
+ /**
90
+ * Factory the registry uses to construct adapters per spawn. Keeps the
91
+ * adapter family out of agent-core's dependency graph.
92
+ *
93
+ * Consumers wire this once when constructing the registry:
94
+ *
95
+ * const registry = new AgentSessionRegistry({
96
+ * adapterFactory: (req) => createAdapter(req),
97
+ * });
98
+ */
99
+ export type AgentAdapterFactory = (req: AdapterRequest) => AgentAdapter;
100
+ /**
101
+ * Convenience helper — constructs an `AdapterRequest` from a `SpawnConfig`
102
+ * plus a generated session id.
103
+ */
104
+ export declare function buildAdapterRequest(spec: SpawnConfig, sessionId: string, opts?: {
105
+ resume?: boolean;
106
+ cwdOverride?: string;
107
+ }): AdapterRequest;
108
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/agent/session/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEvE;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,QAAQ,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;IAC5C,MAAM,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC9E,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACrC;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD,iEAAiE;IACjE,KAAK,IAAI,IAAI,CAAC;IACd,sDAAsD;IACtD,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,6EAA6E;IAC7E,kBAAkB,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,mFAAmF;IACnF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;kEAC8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;kCAG8B;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;iCAE6B;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;+DAG2D;IAC3D,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,cAAc,KAAK,YAAY,CAAC;AAExE;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD,cAAc,CAkBhB"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * `AgentAdapter` — minimal adapter contract `AgentSession` consumes.
3
+ *
4
+ * Mirrors the public surface of dashboard's `BaseAdapter` (EventEmitter +
5
+ * `start()` / `kill()` / `setMaxOutputTokens()`). Defining it in agent-core
6
+ * lets both consumers wire their own adapters:
7
+ *
8
+ * - Dashboard injects its existing `BaseAdapter`-derived adapters
9
+ * (claude / openai / etc.) which already satisfy this shape.
10
+ * - cli (Phase 5) injects a thin wrapper that drives agent-core's
11
+ * `LanguageModel.invokeStream()` and re-emits the same 5 events.
12
+ *
13
+ * The structural interface (vs a class) avoids forcing consumers to inherit
14
+ * from agent-core just to plug in.
15
+ */
16
+ /**
17
+ * Convenience helper — constructs an `AdapterRequest` from a `SpawnConfig`
18
+ * plus a generated session id.
19
+ */
20
+ export function buildAdapterRequest(spec, sessionId, opts) {
21
+ return {
22
+ prompt: spec.prompt,
23
+ model: spec.model,
24
+ sessionId,
25
+ cwd: opts?.cwdOverride ?? spec.cwd,
26
+ resume: opts?.resume,
27
+ projectPrompt: spec.projectPrompt,
28
+ permissionMode: spec.permissionMode,
29
+ disallowedTools: spec.disallowedTools,
30
+ allowedTools: spec.allowedTools,
31
+ maxOutputTokens: spec.maxOutputTokens,
32
+ stage: spec.stage,
33
+ persona: spec.persona,
34
+ project: spec.project,
35
+ runId: spec.runId,
36
+ workspaceDir: spec.workspaceDir,
37
+ };
38
+ }
39
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/agent/session/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAuFH;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAiB,EACjB,SAAiB,EACjB,IAAiD;IAEjD,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,SAAS;QACT,GAAG,EAAE,IAAI,EAAE,WAAW,IAAI,IAAI,CAAC,GAAG;QAClC,MAAM,EAAE,IAAI,EAAE,MAAM;QACpB,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,YAAY,EAAE,IAAI,CAAC,YAAY;KAChC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * `collectTrajectory` — eval-facing entry point. Spawns an `AgentProcess`,
3
+ * listens to its 5-event surface, and aggregates an Inspect-AI-shaped
4
+ * `AgentTrajectory`.
5
+ *
6
+ * Replaces the headless `runAgent` entry. Same trajectory contract, but
7
+ * routed through the production execution path (`AgentProcess` +
8
+ * `defaultAdapterFactory`) so eval runs exercise the same code the
9
+ * dashboard and cli do — including skills + MCP discovery via
10
+ * `workspace.rootDir`.
11
+ *
12
+ * Per AGENT-PROCESS-CONSOLIDATION-ADR §C1.
13
+ */
14
+ import { type AgentProcessOpts } from './session.js';
15
+ import type { AgentTask, AgentTrajectory, WorkspaceConfig } from './headless-types.js';
16
+ export interface CollectTrajectoryOptions {
17
+ /** Abort-by-signal. When fired, calls `proc.kill()` and resolves with
18
+ * `finishReason: 'error'`, `error: 'aborted'`. */
19
+ signal?: AbortSignal;
20
+ /** Wall-clock timeout in ms (default 600_000 — 10 minutes). */
21
+ timeoutMs?: number;
22
+ /**
23
+ * Optional override for the `AgentProcess` opts (factory injection,
24
+ * test seams). Production callers omit; tests use to inject scripted
25
+ * adapters.
26
+ */
27
+ processOpts?: Partial<AgentProcessOpts>;
28
+ }
29
+ /**
30
+ * Run a task to completion and return its Inspect-AI-shaped trajectory.
31
+ *
32
+ * Listener-first ordering: every event handler is attached BEFORE
33
+ * `proc.start()` so the first `content` chunk doesn't slip through.
34
+ */
35
+ export declare function collectTrajectory(task: AgentTask, workspace: WorkspaceConfig, opts?: CollectTrajectoryOptions): Promise<AgentTrajectory>;
36
+ //# sourceMappingURL=collect-trajectory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collect-trajectory.d.ts","sourceRoot":"","sources":["../../../src/agent/session/collect-trajectory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGnE,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EAGf,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,wBAAwB;IACvC;uDACmD;IACnD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACzC;AAKD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,eAAe,EAC1B,IAAI,GAAE,wBAA6B,GAClC,OAAO,CAAC,eAAe,CAAC,CAmK1B"}