@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,327 @@
1
+ /**
2
+ * `AgentProcess` — one logical agent.
3
+ *
4
+ * Owns the spawn → resume → resume → done lifecycle for a single agent. Pipes
5
+ * adapter events through to its own EventEmitter surface so consumers (the
6
+ * dashboard's WebSocket layer; cli's await-result loop) wire once and
7
+ * survive multiple resume calls.
8
+ */
9
+ import { EventEmitter } from 'node:events';
10
+ import { randomBytes } from 'node:crypto';
11
+ import { context as otelContext, trace, SpanStatusCode, } from '@opentelemetry/api';
12
+ import { buildAdapterRequest } from './adapter.js';
13
+ import { getTracer } from '../../telemetry/tracer.js';
14
+ // ── Tunables ────────────────────────────────────────────────────────────
15
+ /** Cap in-memory output to 500KB, keeping the tail. */
16
+ const MAX_OUTPUT_BYTES = 500 * 1024;
17
+ /** Cap in-memory activities to 500 entries. */
18
+ const MAX_ACTIVITIES = 500;
19
+ /** Grace window after a 0-exit before treating the session as failed-empty. */
20
+ const POST_EXIT_GRACE_MS = 500;
21
+ /** "Empty exit" detector window — runs shorter than this with no output → error. */
22
+ const EMPTY_EXIT_THRESHOLD_MS = 5000;
23
+ export class AgentProcess extends EventEmitter {
24
+ id;
25
+ spec;
26
+ sessionId;
27
+ adapter = null;
28
+ state;
29
+ factory;
30
+ now;
31
+ setTimeoutImpl;
32
+ /** Parent span covering the agent's whole lifetime — initial run +
33
+ * every resume. Each adapter.run() span becomes a child via
34
+ * AsyncLocalStorage propagation when start()/sendInput run inside
35
+ * `sessionContext`. */
36
+ sessionSpan = null;
37
+ sessionContext = null;
38
+ sessionEnded = false;
39
+ constructor(spec, opts) {
40
+ super();
41
+ this.spec = spec;
42
+ this.factory = opts.adapterFactory;
43
+ this.now = opts.now ?? Date.now;
44
+ this.setTimeoutImpl = opts.setTimeoutImpl ?? ((fn, ms) => { setTimeout(fn, ms); });
45
+ this.sessionId = opts.id ?? generateSessionId();
46
+ this.id = this.sessionId;
47
+ this.state = createPendingState(spec, this.id);
48
+ }
49
+ // ── Typed event helpers ──────────────────────────────────────────────
50
+ on(event, listener) {
51
+ return super.on(event, listener);
52
+ }
53
+ emit(event, ...args) {
54
+ return super.emit(event, ...args);
55
+ }
56
+ // ── Lifecycle ────────────────────────────────────────────────────────
57
+ /** Start the process. Spawns the underlying adapter and begins streaming. */
58
+ start() {
59
+ this.openSessionSpan();
60
+ const req = buildAdapterRequest(this.spec, this.sessionId);
61
+ // Run the factory inside the session-span's context so any setAttribute
62
+ // calls inside `defaultAdapterFactory` (e.g. `anvil.skills.activated.*`,
63
+ // `anvil.mcp.*` from Phase 6) land on the session span. Without the
64
+ // wrapper the factory runs with no active span and the attrs go nowhere.
65
+ const adapter = this.runWithSessionContext(() => this.factory(req));
66
+ if (typeof this.spec.maxOutputTokens === 'number'
67
+ && this.spec.maxOutputTokens > 0
68
+ && typeof adapter.setMaxOutputTokens === 'function') {
69
+ adapter.setMaxOutputTokens(this.spec.maxOutputTokens);
70
+ }
71
+ this.adapter = adapter;
72
+ this.wireAdapter(adapter);
73
+ // Run the adapter inside the session-span's context so every
74
+ // adapter.run() span becomes a child of the session.
75
+ this.runWithSessionContext(() => adapter.start());
76
+ this.state.status = 'running';
77
+ this.state.startedAt = this.now();
78
+ }
79
+ /**
80
+ * Send input to a running process — spawns a NEW adapter with `resume:
81
+ * true` and the same `sessionId`, re-wires events through this process.
82
+ */
83
+ sendInput(text) {
84
+ // Show user message in output stream
85
+ const userChunk = `\n\n> User: ${text}\n\n`;
86
+ appendOutput(this.state, userChunk);
87
+ this.emit('content', userChunk);
88
+ // Update agent status back to running
89
+ this.state.status = 'running';
90
+ this.state.finishedAt = null;
91
+ const req = buildAdapterRequest({ ...this.spec, prompt: text }, this.sessionId,
92
+ // No cwdOverride — Claude's session storage is keyed by cwd, so a
93
+ // resume MUST use the same working directory as the original spawn.
94
+ // Forcing process.cwd() here breaks `claude --resume <id>` with
95
+ // "No conversation found" whenever the dashboard's cwd differs
96
+ // from the project workspace it spawned the agent in.
97
+ { resume: true });
98
+ const resumeAdapter = this.factory(req);
99
+ if (typeof this.spec.maxOutputTokens === 'number'
100
+ && this.spec.maxOutputTokens > 0
101
+ && typeof resumeAdapter.setMaxOutputTokens === 'function') {
102
+ resumeAdapter.setMaxOutputTokens(this.spec.maxOutputTokens);
103
+ }
104
+ this.adapter = resumeAdapter;
105
+ this.wireAdapter(resumeAdapter);
106
+ // Resume runs inside the same session span as the initial start —
107
+ // both adapter calls are children of one trace, so a multi-turn
108
+ // session shows up as a single waterfall.
109
+ this.runWithSessionContext(() => resumeAdapter.start());
110
+ }
111
+ /** Kill the underlying adapter and mark the process as `killed`. */
112
+ kill(signal) {
113
+ if (this.adapter) {
114
+ try {
115
+ this.adapter.kill(signal);
116
+ }
117
+ catch { /* already dead */ }
118
+ }
119
+ this.state.status = 'killed';
120
+ this.state.finishedAt = this.now();
121
+ this.closeSessionSpan('killed');
122
+ }
123
+ // ── State queries ────────────────────────────────────────────────────
124
+ /** Read-only snapshot of the process's runtime state. */
125
+ getState() {
126
+ return this.state;
127
+ }
128
+ get status() {
129
+ return this.state.status;
130
+ }
131
+ get cost() {
132
+ return this.state.cost;
133
+ }
134
+ get activities() {
135
+ return this.state.activities;
136
+ }
137
+ get output() {
138
+ return this.state.output;
139
+ }
140
+ // ── Internals ────────────────────────────────────────────────────────
141
+ /** Open a `anvil.agent.session` span scoped to this AgentProcess. Idempotent
142
+ * — once opened, lives until kill() / done / error. */
143
+ openSessionSpan() {
144
+ if (this.sessionSpan)
145
+ return;
146
+ const tracer = getTracer();
147
+ this.sessionSpan = tracer.startSpan('anvil.agent.session', {
148
+ attributes: {
149
+ 'anvil.agent.id': this.id,
150
+ 'anvil.agent.name': this.spec.name,
151
+ 'anvil.persona': this.spec.persona,
152
+ 'anvil.project': this.spec.project,
153
+ 'anvil.stage': this.spec.stage,
154
+ 'anvil.session.session_id': this.sessionId,
155
+ 'anvil.run.id': this.spec.runId ?? '',
156
+ 'gen_ai.system': 'anvil',
157
+ 'gen_ai.request.model': this.spec.model,
158
+ },
159
+ });
160
+ this.sessionContext = trace.setSpan(otelContext.active(), this.sessionSpan);
161
+ }
162
+ /** End the session span exactly once. Idempotent. */
163
+ closeSessionSpan(outcome) {
164
+ if (this.sessionEnded || !this.sessionSpan)
165
+ return;
166
+ this.sessionEnded = true;
167
+ this.sessionSpan.setAttribute('anvil.agent.outcome', outcome);
168
+ if (outcome === 'error' || outcome === 'killed') {
169
+ this.sessionSpan.setStatus({
170
+ code: SpanStatusCode.ERROR,
171
+ message: outcome === 'killed' ? 'agent killed' : 'agent errored',
172
+ });
173
+ }
174
+ else {
175
+ this.sessionSpan.setStatus({ code: SpanStatusCode.OK });
176
+ }
177
+ this.sessionSpan.end();
178
+ this.sessionSpan = null;
179
+ this.sessionContext = null;
180
+ }
181
+ /** Run a callback inside the session span's context. Adapter calls made
182
+ * inside this run with active context propagated via AsyncLocalStorage,
183
+ * so every gen_ai.invoke + tool span lands as a child of the session. */
184
+ runWithSessionContext(fn) {
185
+ if (!this.sessionContext)
186
+ return fn();
187
+ return otelContext.with(this.sessionContext, fn);
188
+ }
189
+ wireAdapter(adapter) {
190
+ adapter.on('content', (chunk) => {
191
+ appendOutput(this.state, chunk);
192
+ this.emit('content', chunk);
193
+ });
194
+ adapter.on('activity', (activity) => {
195
+ pushActivity(this.state, activity);
196
+ this.emit('activity', activity);
197
+ });
198
+ adapter.on('result', (data) => {
199
+ this.state.status = 'done';
200
+ this.state.finishedAt = this.now();
201
+ this.state.sessionId = data.sessionId;
202
+ // Accumulate cost across resume calls — same semantics as dashboard
203
+ // (cost.stopReason prefers the freshly reported value).
204
+ this.state.cost = accumulateCost(this.state.cost, data.cost);
205
+ if (data.result) {
206
+ appendOutput(this.state, data.result);
207
+ }
208
+ // Stamp the running aggregate cost on the session span so a single
209
+ // trace shows total token / USD spend without re-summing children.
210
+ if (this.sessionSpan) {
211
+ this.sessionSpan.setAttribute('anvil.agent.total_cost_usd', this.state.cost.totalUsd);
212
+ this.sessionSpan.setAttribute('anvil.agent.total_input_tokens', this.state.cost.inputTokens);
213
+ this.sessionSpan.setAttribute('anvil.agent.total_output_tokens', this.state.cost.outputTokens);
214
+ this.sessionSpan.setAttribute('anvil.agent.total_cache_read_tokens', this.state.cost.cacheReadTokens);
215
+ }
216
+ this.emit('result', data);
217
+ this.closeSessionSpan('done');
218
+ });
219
+ adapter.on('error-output', (text) => {
220
+ if (!this.state.error)
221
+ this.state.error = '';
222
+ this.state.error += text;
223
+ this.emit('error-output', text);
224
+ });
225
+ adapter.on('exit', (code) => {
226
+ // Don't override `done` or `killed` terminal states.
227
+ if (this.state.status === 'done' || this.state.status === 'killed') {
228
+ this.emit('exit', code);
229
+ return;
230
+ }
231
+ if (code !== null && code !== 0) {
232
+ this.state.status = 'error';
233
+ this.state.finishedAt = this.now();
234
+ if (!this.state.error) {
235
+ this.state.error = `Process exited with code ${code}`;
236
+ }
237
+ this.emit('exit', code);
238
+ this.closeSessionSpan('error');
239
+ return;
240
+ }
241
+ // Code 0 but no result — wait briefly for late events, else flag
242
+ // empty-output runs as an error (matches dashboard semantics).
243
+ this.setTimeoutImpl(() => {
244
+ if (this.state.status !== 'running')
245
+ return;
246
+ const elapsed = this.now() - (this.state.startedAt ?? this.now());
247
+ if (elapsed < EMPTY_EXIT_THRESHOLD_MS
248
+ && !this.state.output.trim()
249
+ && this.state.cost.totalUsd === 0) {
250
+ this.state.status = 'error';
251
+ this.state.finishedAt = this.now();
252
+ this.state.error = this.state.error
253
+ || 'Agent exited immediately with no output. Check workspace directory and adapter configuration.';
254
+ this.emit('exit', code);
255
+ this.closeSessionSpan('error');
256
+ }
257
+ else {
258
+ this.state.status = 'done';
259
+ this.state.finishedAt = this.now();
260
+ this.emit('exit', code);
261
+ this.closeSessionSpan('done');
262
+ }
263
+ }, POST_EXIT_GRACE_MS);
264
+ });
265
+ }
266
+ }
267
+ // ── Factories + helpers (exported for cross-file reuse) ─────────────────
268
+ export function createPendingState(spec, id) {
269
+ return {
270
+ id,
271
+ name: spec.name,
272
+ persona: spec.persona,
273
+ sessionId: id,
274
+ model: spec.model,
275
+ status: 'pending',
276
+ cost: emptyCost(),
277
+ output: '',
278
+ activities: [],
279
+ startedAt: null,
280
+ finishedAt: null,
281
+ error: null,
282
+ };
283
+ }
284
+ export function emptyCost() {
285
+ return {
286
+ totalUsd: 0,
287
+ inputTokens: 0,
288
+ outputTokens: 0,
289
+ cacheReadTokens: 0,
290
+ cacheWriteTokens: 0,
291
+ durationMs: 0,
292
+ };
293
+ }
294
+ export function appendOutput(state, chunk) {
295
+ state.output += chunk;
296
+ if (state.output.length > MAX_OUTPUT_BYTES) {
297
+ state.output = state.output.slice(-MAX_OUTPUT_BYTES);
298
+ }
299
+ }
300
+ export function pushActivity(state, activity) {
301
+ state.activities.push(activity);
302
+ if (state.activities.length > MAX_ACTIVITIES) {
303
+ state.activities = state.activities.slice(-MAX_ACTIVITIES);
304
+ }
305
+ }
306
+ export function accumulateCost(prev, next) {
307
+ return {
308
+ totalUsd: prev.totalUsd + next.totalUsd,
309
+ inputTokens: prev.inputTokens + next.inputTokens,
310
+ outputTokens: prev.outputTokens + next.outputTokens,
311
+ cacheReadTokens: prev.cacheReadTokens + next.cacheReadTokens,
312
+ cacheWriteTokens: prev.cacheWriteTokens + next.cacheWriteTokens,
313
+ durationMs: prev.durationMs + next.durationMs,
314
+ stopReason: next.stopReason ?? prev.stopReason,
315
+ };
316
+ }
317
+ /**
318
+ * Generate a UUID v4. Claude CLI requires a valid v4 for `--session-id`.
319
+ */
320
+ export function generateSessionId() {
321
+ const bytes = randomBytes(16);
322
+ bytes[6] = (bytes[6] & 0x0f) | 0x40;
323
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
324
+ const hex = bytes.toString('hex');
325
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}`;
326
+ }
327
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/agent/session/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Type surface for `@esankhan3/anvil-agent-core`'s agent-lifecycle layer.
3
+ *
4
+ * `AgentProcess` (one logical agent, EventEmitter, supports `sendInput` for
5
+ * resume) and `AgentManager` (Map<id, AgentProcess>) are the canonical
6
+ * agent-runtime types — agent-core is the source of truth. Dashboard and
7
+ * cli both consume these directly without aliasing.
8
+ *
9
+ * History: an earlier extract phase shipped a single-shot `AgentManager`
10
+ * class at `agent/agent-manager.ts` that never got wired up. The current
11
+ * stateful surface lifted dashboard's pre-Phase-4 `AgentManager` into this
12
+ * package and reclaimed the canonical name. See
13
+ * `AGENT-MANAGER-CONSOLIDATION-ADR.md`.
14
+ */
15
+ /**
16
+ * The 5-state lifecycle a single agent passes through.
17
+ *
18
+ * - `pending` — created but not yet started (rare; only between `spawn()`
19
+ * call and constructor return).
20
+ * - `running` — adapter process is live; can be killed or sent input.
21
+ * - `done` — adapter exited cleanly with a final result.
22
+ * - `error` — adapter failed with a typed error.
23
+ * - `killed` — caller invoked `kill()` while the adapter was running.
24
+ */
25
+ export type AgentStatus = 'pending' | 'running' | 'done' | 'error' | 'killed';
26
+ /**
27
+ * One activity event emitted by an adapter — tool use, thinking block, or
28
+ * a text-only completion segment. Dashboard surfaces these in the UI; cli
29
+ * ignores them.
30
+ */
31
+ export interface AgentActivity {
32
+ id: string;
33
+ kind: 'tool_use' | 'thinking' | 'text' | 'tool_result';
34
+ tool?: string;
35
+ summary: string;
36
+ content?: string;
37
+ timestamp: number;
38
+ }
39
+ /**
40
+ * Cost / usage block — populated when the adapter reports its `usage` event.
41
+ * `agent-core/types.ts:InvokeUsage` is the *streaming* analog (token counts
42
+ * only); `CostInfo` adds USD + durationMs + the provider-side `stopReason`
43
+ * so callers can detect output truncation.
44
+ */
45
+ export interface CostInfo {
46
+ totalUsd: number;
47
+ inputTokens: number;
48
+ outputTokens: number;
49
+ cacheReadTokens: number;
50
+ cacheWriteTokens: number;
51
+ durationMs: number;
52
+ /** Provider stop reason — `'max_tokens'` indicates output truncation. */
53
+ stopReason?: string;
54
+ }
55
+ /**
56
+ * Snapshot of one agent's state. Returned by `AgentManager.getAgent(id)`
57
+ * and `AgentProcess.getState()`. The `output` field is the running text
58
+ * accumulator (capped at 500KB, tail-kept).
59
+ */
60
+ export interface AgentState {
61
+ id: string;
62
+ name: string;
63
+ persona: string;
64
+ sessionId: string;
65
+ model: string;
66
+ status: AgentStatus;
67
+ cost: CostInfo;
68
+ output: string;
69
+ activities: AgentActivity[];
70
+ startedAt: number | null;
71
+ finishedAt: number | null;
72
+ error: string | null;
73
+ }
74
+ /**
75
+ * The canonical agent-launch shape. Passed to `AgentManager.spawn()`.
76
+ */
77
+ export interface SpawnConfig {
78
+ /** Display name — appears in dashboard UI and logs. */
79
+ name: string;
80
+ /** Persona id — drives prompt-template selection (e.g. `'engineer'`). */
81
+ persona: string;
82
+ /** Project key — used for cost grouping + checkpoint cache namespacing. */
83
+ project: string;
84
+ /** Pipeline stage name (e.g. `'clarify'`, `'build'`). */
85
+ stage: string;
86
+ /** User-side prompt the agent runs against. */
87
+ prompt: string;
88
+ /** Model id (e.g. `'claude-3-5-sonnet'`, `'gpt-4'`). */
89
+ model: string;
90
+ /** Working directory for the adapter process. */
91
+ cwd: string;
92
+ /** Optional system prompt prefix injected before the user prompt. */
93
+ projectPrompt?: string;
94
+ permissionMode?: string;
95
+ disallowedTools?: string[];
96
+ allowedTools?: string[];
97
+ /** Output-token ceiling, forwarded to adapters whose
98
+ * `capabilities.maxOutputTokens === true`. */
99
+ maxOutputTokens?: number;
100
+ /** Pipeline runId — groups cost/checkpoint records. */
101
+ runId?: string;
102
+ /** Stable cross-retry id for the checkpoint cache. Defaults to `runId`. */
103
+ runFamily?: string;
104
+ /** Restart policy on subprocess crash. cli sets `{ maxAttempts: 2 }` by
105
+ * default; dashboard sets `{ maxAttempts: 0 }` (no auto-restart). */
106
+ restart?: {
107
+ maxAttempts: number;
108
+ };
109
+ /** Per-call timeout in ms. `0` = no timeout (dashboard default). cli
110
+ * sets it from per-stage defaults. */
111
+ timeoutMs?: number;
112
+ /** Override the binary used to spawn the adapter. Defaults to
113
+ * `ANVIL_AGENT_CMD` env / `'claude'`. Used by tests. */
114
+ binaryPath?: string;
115
+ /** Escape hatch for arbitrary CLI args. cli uses; dashboard never sets. */
116
+ args?: string[];
117
+ /**
118
+ * Workspace root for skills + MCP discovery. Distinct from `cwd` (the
119
+ * subprocess working directory) so tests can run with cwd === '/tmp'
120
+ * while loading skills from the repo root. When undefined, skills + MCP
121
+ * are skipped (back-compat with existing spawn sites).
122
+ *
123
+ * Per AGENT-PROCESS-CONSOLIDATION-ADR §C4.
124
+ */
125
+ workspaceDir?: string;
126
+ }
127
+ /**
128
+ * Events emitted by a single `AgentProcess`. 5-event surface piped through
129
+ * from the underlying `AgentAdapter`.
130
+ */
131
+ export interface AgentProcessEvents {
132
+ content: (text: string) => void;
133
+ activity: (activity: AgentActivity) => void;
134
+ result: (data: {
135
+ result: string;
136
+ cost: CostInfo;
137
+ sessionId: string;
138
+ }) => void;
139
+ 'error-output': (text: string) => void;
140
+ exit: (code: number | null) => void;
141
+ }
142
+ /**
143
+ * Events emitted by `AgentManager`. 4-event registry-level surface (the
144
+ * dashboard's WebSocket layer subscribes to these to broadcast to clients).
145
+ */
146
+ export interface AgentManagerEvents {
147
+ 'agent-output': (data: {
148
+ agentId: string;
149
+ chunk: string;
150
+ }) => void;
151
+ 'agent-activity': (data: {
152
+ agentId: string;
153
+ activity: AgentActivity;
154
+ }) => void;
155
+ 'agent-done': (data: {
156
+ agent: AgentState;
157
+ }) => void;
158
+ 'agent-error': (data: {
159
+ agentId: string;
160
+ error: string;
161
+ }) => void;
162
+ }
163
+ /**
164
+ * Cost hook — invoked after every agent result so a ledger (dashboard's
165
+ * `CostLedger` and/or agent-core's `SpendLedger`) can record token usage
166
+ * and trigger breach flows. Fire-and-forget; hook impls must never throw
167
+ * back into the manager.
168
+ */
169
+ export interface AgentCostHook {
170
+ (info: {
171
+ runId?: string;
172
+ project?: string;
173
+ stage?: string;
174
+ agent: string;
175
+ persona: string;
176
+ model: string;
177
+ tokensIn: number;
178
+ tokensOut: number;
179
+ cacheReadTokens: number;
180
+ cacheWriteTokens: number;
181
+ usd: number;
182
+ }): void | Promise<void>;
183
+ }
184
+ /**
185
+ * Checkpoint hook — consulted BEFORE spawning. If it returns a cached
186
+ * output, the manager synthesizes a done-event and skips the spawn.
187
+ */
188
+ export interface AgentCheckpointHook {
189
+ lookup(input: {
190
+ project: string;
191
+ stage: string;
192
+ persona: string;
193
+ model: string;
194
+ prompt: string;
195
+ runFamily?: string;
196
+ }): {
197
+ hit: true;
198
+ output: string;
199
+ cost?: CostInfo;
200
+ } | {
201
+ hit: false;
202
+ };
203
+ record?(input: {
204
+ project: string;
205
+ stage: string;
206
+ persona: string;
207
+ model: string;
208
+ prompt: string;
209
+ runFamily?: string;
210
+ output: string;
211
+ cost: CostInfo;
212
+ }): void;
213
+ }
214
+ /**
215
+ * Thrown when `AgentProcess.sendInput()` is called against an adapter whose
216
+ * `LanguageModel.capabilities.sessionResume === false`.
217
+ */
218
+ export declare class SessionResumeNotSupportedError extends Error {
219
+ readonly provider: string;
220
+ readonly model: string;
221
+ constructor(provider: string, model: string);
222
+ }
223
+ /**
224
+ * Thrown when `AgentManager` can't find an agent by id (e.g. `kill('unknown')`).
225
+ */
226
+ export declare class AgentNotFoundError extends Error {
227
+ readonly agentId: string;
228
+ constructor(agentId: string);
229
+ }
230
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/agent/session/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Type surface for `@esankhan3/anvil-agent-core`'s agent-lifecycle layer.
3
+ *
4
+ * `AgentProcess` (one logical agent, EventEmitter, supports `sendInput` for
5
+ * resume) and `AgentManager` (Map<id, AgentProcess>) are the canonical
6
+ * agent-runtime types — agent-core is the source of truth. Dashboard and
7
+ * cli both consume these directly without aliasing.
8
+ *
9
+ * History: an earlier extract phase shipped a single-shot `AgentManager`
10
+ * class at `agent/agent-manager.ts` that never got wired up. The current
11
+ * stateful surface lifted dashboard's pre-Phase-4 `AgentManager` into this
12
+ * package and reclaimed the canonical name. See
13
+ * `AGENT-MANAGER-CONSOLIDATION-ADR.md`.
14
+ */
15
+ // ────────────────────────────────────────────────────────────────────────────
16
+ // Errors
17
+ // ────────────────────────────────────────────────────────────────────────────
18
+ /**
19
+ * Thrown when `AgentProcess.sendInput()` is called against an adapter whose
20
+ * `LanguageModel.capabilities.sessionResume === false`.
21
+ */
22
+ export class SessionResumeNotSupportedError extends Error {
23
+ provider;
24
+ model;
25
+ constructor(provider, model) {
26
+ super(`Adapter '${provider}' (model '${model}') does not support session resume — ` +
27
+ `cannot sendInput on an existing AgentProcess.`);
28
+ this.name = 'SessionResumeNotSupportedError';
29
+ this.provider = provider;
30
+ this.model = model;
31
+ }
32
+ }
33
+ /**
34
+ * Thrown when `AgentManager` can't find an agent by id (e.g. `kill('unknown')`).
35
+ */
36
+ export class AgentNotFoundError extends Error {
37
+ agentId;
38
+ constructor(agentId) {
39
+ super(`Agent ${agentId} not found`);
40
+ this.name = 'AgentNotFoundError';
41
+ this.agentId = agentId;
42
+ }
43
+ }
44
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agent/session/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAiNH,+EAA+E;AAC/E,SAAS;AACT,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IAC9C,QAAQ,CAAS;IACjB,KAAK,CAAS;IACvB,YAAY,QAAgB,EAAE,KAAa;QACzC,KAAK,CACH,YAAY,QAAQ,aAAa,KAAK,uCAAuC;YAC3E,+CAA+C,CAClD,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,gCAAgC,CAAC;QAC7C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,OAAO,CAAS;IACzB,YAAY,OAAe;QACzB,KAAK,CAAC,SAAS,OAAO,YAAY,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for BlobStore — content-addressed blob storage.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=blob-store.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blob-store.test.d.ts","sourceRoot":"","sources":["../../../src/checkpoint/__tests__/blob-store.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}