@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,367 @@
1
+ /**
2
+ * Built-in tool executor used by non-Claude adapters (Ollama, future
3
+ * OpenAI/Gemini agentic paths). Mirrors the minimum subset of Claude
4
+ * CLI's tools that the pipeline build/validate/ship stages need.
5
+ *
6
+ * Permission model:
7
+ * - Construction takes an `allowedTools: Set<string>` that comes from
8
+ * the stage policy (see core-pipeline/src/routing/stage-permissions).
9
+ * - `listSchemas()` filters BEFORE returning so the model never even
10
+ * learns about denied tools.
11
+ * - `execute()` re-checks (defense in depth) and rejects denied calls
12
+ * with `isError: true` rather than throwing — the adapter feeds the
13
+ * rejection back to the model so it can recover.
14
+ */
15
+ import { spawn } from 'node:child_process';
16
+ import { mkdirSync, readFileSync, statSync, writeFileSync, readdirSync, existsSync } from 'node:fs';
17
+ import { dirname } from 'node:path';
18
+ import { PathEscapeError, resolveSafe } from './path-guard.js';
19
+ // Read truncation cap — keeps a stray `read_file` of a 50 MB log from
20
+ // blowing context. The model gets a clear marker; it can re-read with
21
+ // offset/limit if it needs more.
22
+ const MAX_READ_BYTES = 256 * 1024;
23
+ const DEFAULT_BASH_TIMEOUT_MS = 60_000;
24
+ const MAX_BASH_TIMEOUT_MS = 300_000;
25
+ // ───────────────────────────────────────────────────────────────────────
26
+ // Schema definitions — OpenAI-tools-compatible JSON Schema
27
+ // ───────────────────────────────────────────────────────────────────────
28
+ const SCHEMAS = {
29
+ read_file: {
30
+ class: 'read',
31
+ schema: {
32
+ name: 'read_file',
33
+ description: 'Read a file from the working directory. Optionally specify offset (1-indexed start line) and limit (max lines) to page through large files.',
34
+ inputSchema: {
35
+ type: 'object',
36
+ properties: {
37
+ path: { type: 'string', description: 'Relative or absolute path inside the working directory' },
38
+ offset: { type: 'integer', description: '1-indexed starting line (optional)' },
39
+ limit: { type: 'integer', description: 'Max number of lines to return (optional)' },
40
+ },
41
+ required: ['path'],
42
+ },
43
+ },
44
+ },
45
+ write_file: {
46
+ class: 'write',
47
+ schema: {
48
+ name: 'write_file',
49
+ description: 'Write content to a file (creating it if needed). Overwrites existing content. Parent directory is auto-created.',
50
+ inputSchema: {
51
+ type: 'object',
52
+ properties: {
53
+ path: { type: 'string' },
54
+ content: { type: 'string' },
55
+ },
56
+ required: ['path', 'content'],
57
+ },
58
+ },
59
+ },
60
+ edit: {
61
+ class: 'write',
62
+ schema: {
63
+ name: 'edit',
64
+ description: 'Replace exact text in an existing file. old_string MUST match exactly (whitespace included). Set replace_all to replace every occurrence.',
65
+ inputSchema: {
66
+ type: 'object',
67
+ properties: {
68
+ path: { type: 'string' },
69
+ old_string: { type: 'string' },
70
+ new_string: { type: 'string' },
71
+ replace_all: { type: 'boolean' },
72
+ },
73
+ required: ['path', 'old_string', 'new_string'],
74
+ },
75
+ },
76
+ },
77
+ bash: {
78
+ class: 'exec',
79
+ schema: {
80
+ name: 'bash',
81
+ description: 'Run a shell command in the working directory. Capped to 60s default, 300s max. Returns stdout, stderr, and exit code.',
82
+ inputSchema: {
83
+ type: 'object',
84
+ properties: {
85
+ command: { type: 'string', description: 'The command to execute' },
86
+ timeout_ms: { type: 'integer', description: 'Milliseconds before forced kill (max 300000)' },
87
+ },
88
+ required: ['command'],
89
+ },
90
+ },
91
+ },
92
+ grep: {
93
+ class: 'read',
94
+ schema: {
95
+ name: 'grep',
96
+ description: 'Search file contents using ripgrep-compatible regex. Returns matching lines with file:line prefixes.',
97
+ inputSchema: {
98
+ type: 'object',
99
+ properties: {
100
+ pattern: { type: 'string' },
101
+ path: { type: 'string', description: 'File or directory to search; defaults to working directory' },
102
+ glob: { type: 'string', description: 'File glob filter (e.g. "*.ts")' },
103
+ },
104
+ required: ['pattern'],
105
+ },
106
+ },
107
+ },
108
+ glob: {
109
+ class: 'read',
110
+ schema: {
111
+ name: 'glob',
112
+ description: 'List files matching a glob pattern. Returns absolute paths sorted by modification time (newest first).',
113
+ inputSchema: {
114
+ type: 'object',
115
+ properties: {
116
+ pattern: { type: 'string', description: 'Glob like "**/*.ts"' },
117
+ path: { type: 'string', description: 'Root to glob under; defaults to working directory' },
118
+ },
119
+ required: ['pattern'],
120
+ },
121
+ },
122
+ },
123
+ list: {
124
+ class: 'read',
125
+ schema: {
126
+ name: 'list',
127
+ description: 'List the contents of a directory (non-recursive). Returns one entry per line: kind size name.',
128
+ inputSchema: {
129
+ type: 'object',
130
+ properties: {
131
+ path: { type: 'string', description: 'Directory to list; defaults to working directory' },
132
+ },
133
+ },
134
+ },
135
+ },
136
+ };
137
+ export const TOOL_CLASS = Object.fromEntries(Object.entries(SCHEMAS).map(([name, { class: cls }]) => [name, cls]));
138
+ export class BuiltinToolExecutor {
139
+ allowed;
140
+ constructor(opts) {
141
+ this.allowed = new Set(opts.allowedTools);
142
+ }
143
+ listSchemas() {
144
+ const out = [];
145
+ for (const [name, def] of Object.entries(SCHEMAS)) {
146
+ if (this.allowed.has(name))
147
+ out.push(def.schema);
148
+ }
149
+ return out;
150
+ }
151
+ async execute(call, ctx) {
152
+ if (!this.allowed.has(call.name)) {
153
+ return { isError: true, content: `Tool "${call.name}" is not permitted in this stage.` };
154
+ }
155
+ const handler = HANDLERS[call.name];
156
+ if (!handler) {
157
+ return { isError: true, content: `Unknown tool "${call.name}".` };
158
+ }
159
+ try {
160
+ return await handler(call.arguments ?? {}, ctx);
161
+ }
162
+ catch (err) {
163
+ return { isError: true, content: errorMessage(err) };
164
+ }
165
+ }
166
+ }
167
+ const HANDLERS = {
168
+ read_file: async (args, ctx) => {
169
+ const path = requireString(args.path, 'path');
170
+ const safe = resolveSafe(path, ctx.workingDir);
171
+ const stat = statSync(safe);
172
+ if (!stat.isFile())
173
+ return { isError: true, content: `"${path}" is not a regular file.` };
174
+ if (stat.size > MAX_READ_BYTES * 16) {
175
+ return { isError: true, content: `"${path}" is ${stat.size} bytes — too large to read in one call. Use offset/limit.` };
176
+ }
177
+ const raw = readFileSync(safe, 'utf8');
178
+ const offset = optionalInteger(args.offset, 'offset');
179
+ const limit = optionalInteger(args.limit, 'limit');
180
+ let content;
181
+ if (offset !== undefined || limit !== undefined) {
182
+ const lines = raw.split('\n');
183
+ const start = Math.max(0, (offset ?? 1) - 1);
184
+ const end = limit !== undefined ? start + limit : lines.length;
185
+ content = lines.slice(start, end).join('\n');
186
+ }
187
+ else if (raw.length > MAX_READ_BYTES) {
188
+ content = raw.slice(0, MAX_READ_BYTES) + `\n\n[truncated — ${raw.length - MAX_READ_BYTES} more bytes]`;
189
+ }
190
+ else {
191
+ content = raw;
192
+ }
193
+ return { isError: false, content };
194
+ },
195
+ write_file: async (args, ctx) => {
196
+ const path = requireString(args.path, 'path');
197
+ const content = requireString(args.content, 'content', { allowEmpty: true });
198
+ const safe = resolveSafe(path, ctx.workingDir);
199
+ mkdirSync(dirname(safe), { recursive: true });
200
+ writeFileSync(safe, content, 'utf8');
201
+ return { isError: false, content: `Wrote ${content.length} bytes to ${safe}` };
202
+ },
203
+ edit: async (args, ctx) => {
204
+ const path = requireString(args.path, 'path');
205
+ const oldString = requireString(args.old_string, 'old_string', { allowEmpty: true });
206
+ const newString = requireString(args.new_string, 'new_string', { allowEmpty: true });
207
+ const replaceAll = args.replace_all === true;
208
+ const safe = resolveSafe(path, ctx.workingDir);
209
+ if (!existsSync(safe))
210
+ return { isError: true, content: `File not found: ${path}` };
211
+ const original = readFileSync(safe, 'utf8');
212
+ if (oldString === '') {
213
+ return { isError: true, content: 'old_string must not be empty for edit; use write_file to create new content.' };
214
+ }
215
+ if (!original.includes(oldString)) {
216
+ return { isError: true, content: `old_string not found in ${path}.` };
217
+ }
218
+ let updated;
219
+ if (replaceAll) {
220
+ updated = original.split(oldString).join(newString);
221
+ }
222
+ else {
223
+ const occurrences = original.split(oldString).length - 1;
224
+ if (occurrences > 1) {
225
+ return { isError: true, content: `old_string matched ${occurrences} times in ${path} — set replace_all:true or pick a more unique anchor.` };
226
+ }
227
+ updated = original.replace(oldString, newString);
228
+ }
229
+ writeFileSync(safe, updated, 'utf8');
230
+ return { isError: false, content: `Edited ${path} (${updated.length - original.length >= 0 ? '+' : ''}${updated.length - original.length} bytes)` };
231
+ },
232
+ bash: async (args, ctx) => {
233
+ const command = requireString(args.command, 'command');
234
+ const timeoutMs = clampInteger(optionalInteger(args.timeout_ms, 'timeout_ms') ?? DEFAULT_BASH_TIMEOUT_MS, 1, MAX_BASH_TIMEOUT_MS);
235
+ return runBash(command, ctx, timeoutMs);
236
+ },
237
+ grep: async (args, ctx) => {
238
+ const pattern = requireString(args.pattern, 'pattern');
239
+ const target = args.path !== undefined ? resolveSafe(requireString(args.path, 'path'), ctx.workingDir) : ctx.workingDir;
240
+ const globArg = optionalString(args.glob, 'glob');
241
+ const argv = ['--no-heading', '--line-number', '--color=never', '-e', pattern];
242
+ if (globArg)
243
+ argv.push('--glob', globArg);
244
+ argv.push(target);
245
+ return runProcess('rg', argv, ctx, DEFAULT_BASH_TIMEOUT_MS);
246
+ },
247
+ glob: async (args, ctx) => {
248
+ const pattern = requireString(args.pattern, 'pattern');
249
+ const target = args.path !== undefined ? resolveSafe(requireString(args.path, 'path'), ctx.workingDir) : ctx.workingDir;
250
+ // ripgrep's `--files --glob` is a portable globber that respects .gitignore.
251
+ return runProcess('rg', ['--files', '--glob', pattern, target], ctx, DEFAULT_BASH_TIMEOUT_MS);
252
+ },
253
+ list: async (args, ctx) => {
254
+ const target = args.path !== undefined ? resolveSafe(requireString(args.path, 'path'), ctx.workingDir) : ctx.workingDir;
255
+ const stat = statSync(target);
256
+ if (!stat.isDirectory())
257
+ return { isError: true, content: `"${target}" is not a directory.` };
258
+ const entries = readdirSync(target, { withFileTypes: true });
259
+ const lines = entries
260
+ .map((e) => {
261
+ try {
262
+ const full = `${target}/${e.name}`;
263
+ const s = statSync(full);
264
+ const kind = e.isDirectory() ? 'dir' : e.isSymbolicLink() ? 'symlink' : 'file';
265
+ return `${kind}\t${s.size}\t${e.name}`;
266
+ }
267
+ catch {
268
+ return `unknown\t0\t${e.name}`;
269
+ }
270
+ })
271
+ .sort();
272
+ return { isError: false, content: lines.join('\n') || '(empty)' };
273
+ },
274
+ };
275
+ // ───────────────────────────────────────────────────────────────────────
276
+ // Process runners
277
+ // ───────────────────────────────────────────────────────────────────────
278
+ async function runBash(command, ctx, timeoutMs) {
279
+ // Use `sh -c` so the model can pipe + redirect, but never invoke an
280
+ // interactive shell. Args are NOT interpolated by the agent — the
281
+ // entire command string comes from the model in one piece.
282
+ return runProcess('sh', ['-c', command], ctx, timeoutMs);
283
+ }
284
+ async function runProcess(cmd, argv, ctx, timeoutMs) {
285
+ return new Promise((resolve) => {
286
+ const child = spawn(cmd, argv, {
287
+ cwd: ctx.workingDir,
288
+ env: process.env,
289
+ stdio: ['ignore', 'pipe', 'pipe'],
290
+ shell: false, // never re-interpret cmd via /bin/sh
291
+ });
292
+ let stdout = '';
293
+ let stderr = '';
294
+ let finished = false;
295
+ const STDIO_CAP = 64 * 1024;
296
+ const finish = (content, isError) => {
297
+ if (finished)
298
+ return;
299
+ finished = true;
300
+ try {
301
+ child.kill('SIGKILL');
302
+ }
303
+ catch { /* already exited */ }
304
+ resolve({ isError, content });
305
+ };
306
+ const timer = setTimeout(() => finish(stdout + stderr + `\n\n[timed out after ${timeoutMs}ms]`, true), timeoutMs);
307
+ const onAbort = () => finish(stdout + stderr + '\n\n[aborted]', true);
308
+ if (ctx.abortSignal.aborted) {
309
+ clearTimeout(timer);
310
+ onAbort();
311
+ return;
312
+ }
313
+ ctx.abortSignal.addEventListener('abort', onAbort, { once: true });
314
+ child.stdout?.on('data', (b) => {
315
+ if (stdout.length < STDIO_CAP)
316
+ stdout += b.toString('utf8').slice(0, STDIO_CAP - stdout.length);
317
+ });
318
+ child.stderr?.on('data', (b) => {
319
+ if (stderr.length < STDIO_CAP)
320
+ stderr += b.toString('utf8').slice(0, STDIO_CAP - stderr.length);
321
+ });
322
+ child.on('error', (err) => {
323
+ clearTimeout(timer);
324
+ ctx.abortSignal.removeEventListener('abort', onAbort);
325
+ finish(`spawn error: ${err.message}`, true);
326
+ });
327
+ child.on('exit', (code, signal) => {
328
+ clearTimeout(timer);
329
+ ctx.abortSignal.removeEventListener('abort', onAbort);
330
+ const tail = stdout + (stderr ? `\n\n[stderr]\n${stderr}` : '');
331
+ const body = tail || '(no output)';
332
+ const exitLine = signal ? `\n\n[killed by ${signal}]` : code !== 0 ? `\n\n[exit ${code}]` : '';
333
+ finish(body + exitLine, code !== 0 || signal !== null);
334
+ });
335
+ });
336
+ }
337
+ // ───────────────────────────────────────────────────────────────────────
338
+ // Argument validation helpers
339
+ // ───────────────────────────────────────────────────────────────────────
340
+ function requireString(v, name, opts = {}) {
341
+ if (typeof v !== 'string')
342
+ throw new Error(`Argument "${name}" must be a string`);
343
+ if (!opts.allowEmpty && v.length === 0)
344
+ throw new Error(`Argument "${name}" must not be empty`);
345
+ return v;
346
+ }
347
+ function optionalString(v, name) {
348
+ if (v === undefined || v === null)
349
+ return undefined;
350
+ return requireString(v, name);
351
+ }
352
+ function optionalInteger(v, name) {
353
+ if (v === undefined || v === null)
354
+ return undefined;
355
+ if (typeof v !== 'number' || !Number.isInteger(v))
356
+ throw new Error(`Argument "${name}" must be an integer`);
357
+ return v;
358
+ }
359
+ function clampInteger(v, lo, hi) {
360
+ return Math.min(hi, Math.max(lo, v));
361
+ }
362
+ function errorMessage(err) {
363
+ if (err instanceof PathEscapeError)
364
+ return err.message;
365
+ return err instanceof Error ? err.message : String(err);
366
+ }
367
+ //# sourceMappingURL=builtin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin.js","sourceRoot":"","sources":["../../src/tools/builtin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { BuiltinToolExecutor, TOOL_CLASS } from './builtin.js';
2
+ export { PathEscapeError, resolveSafe } from './path-guard.js';
3
+ export type { ExecCtx, ToolClass, ToolExecutor, ToolResult } from './types.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC/D,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { BuiltinToolExecutor, TOOL_CLASS } from './builtin.js';
2
+ export { PathEscapeError, resolveSafe } from './path-guard.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Path guard — rejects any path argument that escapes the agent's
3
+ * working directory. Symlink resolution happens before the comparison so
4
+ * `cwd/link-to-/etc/passwd` can't slip past.
5
+ *
6
+ * SECURITY CRITICAL: every built-in tool that touches the filesystem
7
+ * MUST go through `resolveSafe`. A bug here means the agent can read or
8
+ * write arbitrary files on the host. Tests cover the known escape
9
+ * vectors (`..`, absolute paths outside cwd, symlinks).
10
+ */
11
+ export declare class PathEscapeError extends Error {
12
+ readonly attempted: string;
13
+ readonly workingDir: string;
14
+ constructor(attempted: string, workingDir: string);
15
+ }
16
+ /**
17
+ * Resolve `input` to an absolute, real path that is guaranteed to live
18
+ * inside `workingDir` (or be `workingDir` itself). Throws PathEscapeError
19
+ * otherwise. The path doesn't have to exist — for write_file/edit we
20
+ * resolve the parent and append the leaf.
21
+ */
22
+ export declare function resolveSafe(input: string, workingDir: string): string;
23
+ //# sourceMappingURL=path-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-guard.d.ts","sourceRoot":"","sources":["../../src/tools/path-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,qBAAa,eAAgB,SAAQ,KAAK;aACZ,SAAS,EAAE,MAAM;aAAkB,UAAU,EAAE,MAAM;gBAArD,SAAS,EAAE,MAAM,EAAkB,UAAU,EAAE,MAAM;CAIlF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAerE"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Path guard — rejects any path argument that escapes the agent's
3
+ * working directory. Symlink resolution happens before the comparison so
4
+ * `cwd/link-to-/etc/passwd` can't slip past.
5
+ *
6
+ * SECURITY CRITICAL: every built-in tool that touches the filesystem
7
+ * MUST go through `resolveSafe`. A bug here means the agent can read or
8
+ * write arbitrary files on the host. Tests cover the known escape
9
+ * vectors (`..`, absolute paths outside cwd, symlinks).
10
+ */
11
+ import { realpathSync } from 'node:fs';
12
+ import { isAbsolute, resolve, sep } from 'node:path';
13
+ export class PathEscapeError extends Error {
14
+ attempted;
15
+ workingDir;
16
+ constructor(attempted, workingDir) {
17
+ super(`Path "${attempted}" escapes workingDir "${workingDir}".`);
18
+ this.attempted = attempted;
19
+ this.workingDir = workingDir;
20
+ this.name = 'PathEscapeError';
21
+ }
22
+ }
23
+ /**
24
+ * Resolve `input` to an absolute, real path that is guaranteed to live
25
+ * inside `workingDir` (or be `workingDir` itself). Throws PathEscapeError
26
+ * otherwise. The path doesn't have to exist — for write_file/edit we
27
+ * resolve the parent and append the leaf.
28
+ */
29
+ export function resolveSafe(input, workingDir) {
30
+ if (typeof input !== 'string' || input.length === 0) {
31
+ throw new PathEscapeError(String(input), workingDir);
32
+ }
33
+ const wd = canonicalize(workingDir);
34
+ const candidate = isAbsolute(input) ? input : resolve(wd, input);
35
+ // For non-existent paths, walk up until we find an existing ancestor
36
+ // and canonicalize that, then re-attach the leaf segments.
37
+ const real = canonicalizeExistingPrefix(candidate);
38
+ if (real !== wd && !real.startsWith(wd + sep)) {
39
+ throw new PathEscapeError(input, workingDir);
40
+ }
41
+ return real;
42
+ }
43
+ function canonicalize(p) {
44
+ try {
45
+ return realpathSync(p);
46
+ }
47
+ catch {
48
+ return resolve(p);
49
+ }
50
+ }
51
+ function canonicalizeExistingPrefix(p) {
52
+ const parts = p.split(sep);
53
+ for (let i = parts.length; i > 0; i--) {
54
+ const ancestor = parts.slice(0, i).join(sep) || sep;
55
+ try {
56
+ const real = realpathSync(ancestor);
57
+ const tail = parts.slice(i).join(sep);
58
+ return tail ? resolve(real, tail) : real;
59
+ }
60
+ catch {
61
+ continue;
62
+ }
63
+ }
64
+ return p;
65
+ }
66
+ //# sourceMappingURL=path-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-guard.js","sourceRoot":"","sources":["../../src/tools/path-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAErD,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACZ;IAAmC;IAA/D,YAA4B,SAAiB,EAAkB,UAAkB;QAC/E,KAAK,CAAC,SAAS,SAAS,yBAAyB,UAAU,IAAI,CAAC,CAAC;QADvC,cAAS,GAAT,SAAS,CAAQ;QAAkB,eAAU,GAAV,UAAU,CAAQ;QAE/E,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,UAAkB;IAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,EAAE,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAEpC,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACjE,qEAAqE;IACrE,2DAA2D;IAC3D,MAAM,IAAI,GAAG,0BAA0B,CAAC,SAAS,CAAC,CAAC;IAEnD,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,CAAS;IAC7B,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B,CAAC,CAAS;IAC3C,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Built-in tool executor surface used by non-Claude adapters that need
3
+ * to drive an agentic loop themselves (Claude CLI ships its own tool
4
+ * runtime; everything else routes through this).
5
+ *
6
+ * Schemas are JSON Schema and OpenAI-tool-compatible — Ollama, OpenAI,
7
+ * Gemini, and OpenRouter all accept this shape with minor envelope
8
+ * differences handled by each adapter.
9
+ */
10
+ import type { ToolCall, ToolSchema } from '../types.js';
11
+ export interface ExecCtx {
12
+ /** Absolute workingDir; every path arg must resolve inside this directory. */
13
+ workingDir: string;
14
+ /** Cancels long-running operations (bash, large file ops) when fired. */
15
+ abortSignal: AbortSignal;
16
+ }
17
+ export interface ToolResult {
18
+ /** Free-form content the model sees. Truncated by the adapter if needed. */
19
+ content: string;
20
+ /** True when the call failed; the adapter still feeds it back so the
21
+ * model can recover instead of getting silently stuck. */
22
+ isError: boolean;
23
+ }
24
+ export interface ToolExecutor {
25
+ /**
26
+ * Schemas the adapter MAY advertise to the model. Permission-filtered
27
+ * BEFORE this call returns so the model never learns about denied tools.
28
+ */
29
+ listSchemas(): ToolSchema[];
30
+ /**
31
+ * Execute a single tool call. Implementations must:
32
+ * 1. Re-check permissions (defense in depth).
33
+ * 2. Re-validate path arguments against ctx.workingDir.
34
+ * 3. Honor ctx.abortSignal for any long-running work.
35
+ * 4. NEVER throw — surface failures via { isError: true, content }.
36
+ */
37
+ execute(call: ToolCall, ctx: ExecCtx): Promise<ToolResult>;
38
+ }
39
+ /**
40
+ * Permission classes for built-in tools. Stage policy maps stage name →
41
+ * set of allowed classes. The executor filters schemas + rejects calls
42
+ * whose tool falls outside the set.
43
+ */
44
+ export type ToolClass = 'read' | 'write' | 'exec';
45
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,WAAW,OAAO;IACtB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB;+DAC2D;IAC3D,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,WAAW,IAAI,UAAU,EAAE,CAAC;IAE5B;;;;;;OAMG;IACH,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC5D;AAED;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Built-in tool executor surface used by non-Claude adapters that need
3
+ * to drive an agentic loop themselves (Claude CLI ships its own tool
4
+ * runtime; everything else routes through this).
5
+ *
6
+ * Schemas are JSON Schema and OpenAI-tool-compatible — Ollama, OpenAI,
7
+ * Gemini, and OpenRouter all accept this shape with minor envelope
8
+ * differences handled by each adapter.
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}