attocode 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 (488) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/LICENSE +21 -0
  3. package/README.md +164 -0
  4. package/dist/src/adapters.d.ts +83 -0
  5. package/dist/src/adapters.d.ts.map +1 -0
  6. package/dist/src/adapters.js +221 -0
  7. package/dist/src/adapters.js.map +1 -0
  8. package/dist/src/agent-tools/index.d.ts +7 -0
  9. package/dist/src/agent-tools/index.d.ts.map +1 -0
  10. package/dist/src/agent-tools/index.js +8 -0
  11. package/dist/src/agent-tools/index.js.map +1 -0
  12. package/dist/src/agent-tools/lsp-file-tools.d.ts +33 -0
  13. package/dist/src/agent-tools/lsp-file-tools.d.ts.map +1 -0
  14. package/dist/src/agent-tools/lsp-file-tools.js +200 -0
  15. package/dist/src/agent-tools/lsp-file-tools.js.map +1 -0
  16. package/dist/src/agent.d.ts +667 -0
  17. package/dist/src/agent.d.ts.map +1 -0
  18. package/dist/src/agent.js +2824 -0
  19. package/dist/src/agent.js.map +1 -0
  20. package/dist/src/cli.d.ts +36 -0
  21. package/dist/src/cli.d.ts.map +1 -0
  22. package/dist/src/cli.js +176 -0
  23. package/dist/src/cli.js.map +1 -0
  24. package/dist/src/commands/handler.d.ts +22 -0
  25. package/dist/src/commands/handler.d.ts.map +1 -0
  26. package/dist/src/commands/handler.js +1320 -0
  27. package/dist/src/commands/handler.js.map +1 -0
  28. package/dist/src/commands/init.d.ts +7 -0
  29. package/dist/src/commands/init.d.ts.map +1 -0
  30. package/dist/src/commands/init.js +153 -0
  31. package/dist/src/commands/init.js.map +1 -0
  32. package/dist/src/commands/types.d.ts +70 -0
  33. package/dist/src/commands/types.d.ts.map +1 -0
  34. package/dist/src/commands/types.js +8 -0
  35. package/dist/src/commands/types.js.map +1 -0
  36. package/dist/src/config.d.ts +22 -0
  37. package/dist/src/config.d.ts.map +1 -0
  38. package/dist/src/config.js +25 -0
  39. package/dist/src/config.js.map +1 -0
  40. package/dist/src/core/index.d.ts +32 -0
  41. package/dist/src/core/index.d.ts.map +1 -0
  42. package/dist/src/core/index.js +35 -0
  43. package/dist/src/core/index.js.map +1 -0
  44. package/dist/src/core/process-handlers.d.ts +43 -0
  45. package/dist/src/core/process-handlers.d.ts.map +1 -0
  46. package/dist/src/core/process-handlers.js +117 -0
  47. package/dist/src/core/process-handlers.js.map +1 -0
  48. package/dist/src/core/protocol/bridge.d.ts +117 -0
  49. package/dist/src/core/protocol/bridge.d.ts.map +1 -0
  50. package/dist/src/core/protocol/bridge.js +149 -0
  51. package/dist/src/core/protocol/bridge.js.map +1 -0
  52. package/dist/src/core/protocol/index.d.ts +8 -0
  53. package/dist/src/core/protocol/index.d.ts.map +1 -0
  54. package/dist/src/core/protocol/index.js +8 -0
  55. package/dist/src/core/protocol/index.js.map +1 -0
  56. package/dist/src/core/protocol/types.d.ts +539 -0
  57. package/dist/src/core/protocol/types.d.ts.map +1 -0
  58. package/dist/src/core/protocol/types.js +149 -0
  59. package/dist/src/core/protocol/types.js.map +1 -0
  60. package/dist/src/core/queues/atomic-counter.d.ts +36 -0
  61. package/dist/src/core/queues/atomic-counter.d.ts.map +1 -0
  62. package/dist/src/core/queues/atomic-counter.js +46 -0
  63. package/dist/src/core/queues/atomic-counter.js.map +1 -0
  64. package/dist/src/core/queues/event-queue.d.ts +126 -0
  65. package/dist/src/core/queues/event-queue.d.ts.map +1 -0
  66. package/dist/src/core/queues/event-queue.js +208 -0
  67. package/dist/src/core/queues/event-queue.js.map +1 -0
  68. package/dist/src/core/queues/index.d.ts +12 -0
  69. package/dist/src/core/queues/index.d.ts.map +1 -0
  70. package/dist/src/core/queues/index.js +15 -0
  71. package/dist/src/core/queues/index.js.map +1 -0
  72. package/dist/src/core/queues/submission-queue.d.ts +116 -0
  73. package/dist/src/core/queues/submission-queue.d.ts.map +1 -0
  74. package/dist/src/core/queues/submission-queue.js +236 -0
  75. package/dist/src/core/queues/submission-queue.js.map +1 -0
  76. package/dist/src/costs/index.d.ts +22 -0
  77. package/dist/src/costs/index.d.ts.map +1 -0
  78. package/dist/src/costs/index.js +22 -0
  79. package/dist/src/costs/index.js.map +1 -0
  80. package/dist/src/costs/model-registry.d.ts +80 -0
  81. package/dist/src/costs/model-registry.d.ts.map +1 -0
  82. package/dist/src/costs/model-registry.js +237 -0
  83. package/dist/src/costs/model-registry.js.map +1 -0
  84. package/dist/src/costs/types.d.ts +50 -0
  85. package/dist/src/costs/types.d.ts.map +1 -0
  86. package/dist/src/costs/types.js +2 -0
  87. package/dist/src/costs/types.js.map +1 -0
  88. package/dist/src/defaults.d.ts +114 -0
  89. package/dist/src/defaults.d.ts.map +1 -0
  90. package/dist/src/defaults.js +457 -0
  91. package/dist/src/defaults.js.map +1 -0
  92. package/dist/src/first-run.d.ts +35 -0
  93. package/dist/src/first-run.d.ts.map +1 -0
  94. package/dist/src/first-run.js +94 -0
  95. package/dist/src/first-run.js.map +1 -0
  96. package/dist/src/hello.d.ts +2 -0
  97. package/dist/src/hello.d.ts.map +1 -0
  98. package/dist/src/hello.js +4 -0
  99. package/dist/src/hello.js.map +1 -0
  100. package/dist/src/integrations/agent-registry.d.ts +160 -0
  101. package/dist/src/integrations/agent-registry.d.ts.map +1 -0
  102. package/dist/src/integrations/agent-registry.js +446 -0
  103. package/dist/src/integrations/agent-registry.js.map +1 -0
  104. package/dist/src/integrations/auto-compaction.d.ts +177 -0
  105. package/dist/src/integrations/auto-compaction.d.ts.map +1 -0
  106. package/dist/src/integrations/auto-compaction.js +428 -0
  107. package/dist/src/integrations/auto-compaction.js.map +1 -0
  108. package/dist/src/integrations/cancellation.d.ts +162 -0
  109. package/dist/src/integrations/cancellation.d.ts.map +1 -0
  110. package/dist/src/integrations/cancellation.js +339 -0
  111. package/dist/src/integrations/cancellation.js.map +1 -0
  112. package/dist/src/integrations/codebase-context.d.ts +319 -0
  113. package/dist/src/integrations/codebase-context.d.ts.map +1 -0
  114. package/dist/src/integrations/codebase-context.js +816 -0
  115. package/dist/src/integrations/codebase-context.js.map +1 -0
  116. package/dist/src/integrations/compaction.d.ts +192 -0
  117. package/dist/src/integrations/compaction.d.ts.map +1 -0
  118. package/dist/src/integrations/compaction.js +376 -0
  119. package/dist/src/integrations/compaction.js.map +1 -0
  120. package/dist/src/integrations/context-engineering.d.ts +246 -0
  121. package/dist/src/integrations/context-engineering.d.ts.map +1 -0
  122. package/dist/src/integrations/context-engineering.js +394 -0
  123. package/dist/src/integrations/context-engineering.js.map +1 -0
  124. package/dist/src/integrations/diff-utils.d.ts +105 -0
  125. package/dist/src/integrations/diff-utils.d.ts.map +1 -0
  126. package/dist/src/integrations/diff-utils.js +497 -0
  127. package/dist/src/integrations/diff-utils.js.map +1 -0
  128. package/dist/src/integrations/economics.d.ts +192 -0
  129. package/dist/src/integrations/economics.d.ts.map +1 -0
  130. package/dist/src/integrations/economics.js +431 -0
  131. package/dist/src/integrations/economics.js.map +1 -0
  132. package/dist/src/integrations/execution-policy.d.ts +189 -0
  133. package/dist/src/integrations/execution-policy.d.ts.map +1 -0
  134. package/dist/src/integrations/execution-policy.js +352 -0
  135. package/dist/src/integrations/execution-policy.js.map +1 -0
  136. package/dist/src/integrations/file-change-tracker.d.ts +161 -0
  137. package/dist/src/integrations/file-change-tracker.d.ts.map +1 -0
  138. package/dist/src/integrations/file-change-tracker.js +520 -0
  139. package/dist/src/integrations/file-change-tracker.js.map +1 -0
  140. package/dist/src/integrations/hierarchical-config.d.ts +212 -0
  141. package/dist/src/integrations/hierarchical-config.d.ts.map +1 -0
  142. package/dist/src/integrations/hierarchical-config.js +484 -0
  143. package/dist/src/integrations/hierarchical-config.js.map +1 -0
  144. package/dist/src/integrations/hooks.d.ts +114 -0
  145. package/dist/src/integrations/hooks.d.ts.map +1 -0
  146. package/dist/src/integrations/hooks.js +326 -0
  147. package/dist/src/integrations/hooks.js.map +1 -0
  148. package/dist/src/integrations/ignore.d.ts +143 -0
  149. package/dist/src/integrations/ignore.d.ts.map +1 -0
  150. package/dist/src/integrations/ignore.js +417 -0
  151. package/dist/src/integrations/ignore.js.map +1 -0
  152. package/dist/src/integrations/image-renderer.d.ts +119 -0
  153. package/dist/src/integrations/image-renderer.d.ts.map +1 -0
  154. package/dist/src/integrations/image-renderer.js +306 -0
  155. package/dist/src/integrations/image-renderer.js.map +1 -0
  156. package/dist/src/integrations/index.d.ts +42 -0
  157. package/dist/src/integrations/index.d.ts.map +1 -0
  158. package/dist/src/integrations/index.js +73 -0
  159. package/dist/src/integrations/index.js.map +1 -0
  160. package/dist/src/integrations/lsp.d.ts +196 -0
  161. package/dist/src/integrations/lsp.d.ts.map +1 -0
  162. package/dist/src/integrations/lsp.js +582 -0
  163. package/dist/src/integrations/lsp.js.map +1 -0
  164. package/dist/src/integrations/mcp-client.d.ts +270 -0
  165. package/dist/src/integrations/mcp-client.d.ts.map +1 -0
  166. package/dist/src/integrations/mcp-client.js +698 -0
  167. package/dist/src/integrations/mcp-client.js.map +1 -0
  168. package/dist/src/integrations/mcp-tool-search.d.ts +77 -0
  169. package/dist/src/integrations/mcp-tool-search.d.ts.map +1 -0
  170. package/dist/src/integrations/mcp-tool-search.js +220 -0
  171. package/dist/src/integrations/mcp-tool-search.js.map +1 -0
  172. package/dist/src/integrations/memory.d.ts +108 -0
  173. package/dist/src/integrations/memory.d.ts.map +1 -0
  174. package/dist/src/integrations/memory.js +288 -0
  175. package/dist/src/integrations/memory.js.map +1 -0
  176. package/dist/src/integrations/multi-agent.d.ts +150 -0
  177. package/dist/src/integrations/multi-agent.d.ts.map +1 -0
  178. package/dist/src/integrations/multi-agent.js +306 -0
  179. package/dist/src/integrations/multi-agent.js.map +1 -0
  180. package/dist/src/integrations/observability.d.ts +162 -0
  181. package/dist/src/integrations/observability.d.ts.map +1 -0
  182. package/dist/src/integrations/observability.js +406 -0
  183. package/dist/src/integrations/observability.js.map +1 -0
  184. package/dist/src/integrations/openrouter-pricing.d.ts +42 -0
  185. package/dist/src/integrations/openrouter-pricing.d.ts.map +1 -0
  186. package/dist/src/integrations/openrouter-pricing.js +124 -0
  187. package/dist/src/integrations/openrouter-pricing.js.map +1 -0
  188. package/dist/src/integrations/pending-plan.d.ts +171 -0
  189. package/dist/src/integrations/pending-plan.d.ts.map +1 -0
  190. package/dist/src/integrations/pending-plan.js +244 -0
  191. package/dist/src/integrations/pending-plan.js.map +1 -0
  192. package/dist/src/integrations/persistence.d.ts +48 -0
  193. package/dist/src/integrations/persistence.d.ts.map +1 -0
  194. package/dist/src/integrations/persistence.js +196 -0
  195. package/dist/src/integrations/persistence.js.map +1 -0
  196. package/dist/src/integrations/planning.d.ts +96 -0
  197. package/dist/src/integrations/planning.d.ts.map +1 -0
  198. package/dist/src/integrations/planning.js +338 -0
  199. package/dist/src/integrations/planning.js.map +1 -0
  200. package/dist/src/integrations/pty-shell.d.ts +169 -0
  201. package/dist/src/integrations/pty-shell.d.ts.map +1 -0
  202. package/dist/src/integrations/pty-shell.js +367 -0
  203. package/dist/src/integrations/pty-shell.js.map +1 -0
  204. package/dist/src/integrations/react.d.ts +139 -0
  205. package/dist/src/integrations/react.d.ts.map +1 -0
  206. package/dist/src/integrations/react.js +273 -0
  207. package/dist/src/integrations/react.js.map +1 -0
  208. package/dist/src/integrations/resources.d.ts +177 -0
  209. package/dist/src/integrations/resources.d.ts.map +1 -0
  210. package/dist/src/integrations/resources.js +311 -0
  211. package/dist/src/integrations/resources.js.map +1 -0
  212. package/dist/src/integrations/result-synthesizer.d.ts +389 -0
  213. package/dist/src/integrations/result-synthesizer.d.ts.map +1 -0
  214. package/dist/src/integrations/result-synthesizer.js +951 -0
  215. package/dist/src/integrations/result-synthesizer.js.map +1 -0
  216. package/dist/src/integrations/routing.d.ts +117 -0
  217. package/dist/src/integrations/routing.d.ts.map +1 -0
  218. package/dist/src/integrations/routing.js +347 -0
  219. package/dist/src/integrations/routing.js.map +1 -0
  220. package/dist/src/integrations/rules.d.ts +131 -0
  221. package/dist/src/integrations/rules.d.ts.map +1 -0
  222. package/dist/src/integrations/rules.js +284 -0
  223. package/dist/src/integrations/rules.js.map +1 -0
  224. package/dist/src/integrations/safety.d.ts +142 -0
  225. package/dist/src/integrations/safety.d.ts.map +1 -0
  226. package/dist/src/integrations/safety.js +342 -0
  227. package/dist/src/integrations/safety.js.map +1 -0
  228. package/dist/src/integrations/sandbox/basic.d.ts +74 -0
  229. package/dist/src/integrations/sandbox/basic.d.ts.map +1 -0
  230. package/dist/src/integrations/sandbox/basic.js +310 -0
  231. package/dist/src/integrations/sandbox/basic.js.map +1 -0
  232. package/dist/src/integrations/sandbox/docker.d.ts +94 -0
  233. package/dist/src/integrations/sandbox/docker.d.ts.map +1 -0
  234. package/dist/src/integrations/sandbox/docker.js +293 -0
  235. package/dist/src/integrations/sandbox/docker.js.map +1 -0
  236. package/dist/src/integrations/sandbox/index.d.ts +182 -0
  237. package/dist/src/integrations/sandbox/index.d.ts.map +1 -0
  238. package/dist/src/integrations/sandbox/index.js +382 -0
  239. package/dist/src/integrations/sandbox/index.js.map +1 -0
  240. package/dist/src/integrations/sandbox/landlock.d.ts +59 -0
  241. package/dist/src/integrations/sandbox/landlock.d.ts.map +1 -0
  242. package/dist/src/integrations/sandbox/landlock.js +326 -0
  243. package/dist/src/integrations/sandbox/landlock.js.map +1 -0
  244. package/dist/src/integrations/sandbox/seatbelt.d.ts +68 -0
  245. package/dist/src/integrations/sandbox/seatbelt.d.ts.map +1 -0
  246. package/dist/src/integrations/sandbox/seatbelt.js +298 -0
  247. package/dist/src/integrations/sandbox/seatbelt.js.map +1 -0
  248. package/dist/src/integrations/semantic-cache.d.ts +178 -0
  249. package/dist/src/integrations/semantic-cache.d.ts.map +1 -0
  250. package/dist/src/integrations/semantic-cache.js +372 -0
  251. package/dist/src/integrations/semantic-cache.js.map +1 -0
  252. package/dist/src/integrations/session-store.d.ts +183 -0
  253. package/dist/src/integrations/session-store.d.ts.map +1 -0
  254. package/dist/src/integrations/session-store.js +345 -0
  255. package/dist/src/integrations/session-store.js.map +1 -0
  256. package/dist/src/integrations/shared-blackboard.d.ts +403 -0
  257. package/dist/src/integrations/shared-blackboard.d.ts.map +1 -0
  258. package/dist/src/integrations/shared-blackboard.js +710 -0
  259. package/dist/src/integrations/shared-blackboard.js.map +1 -0
  260. package/dist/src/integrations/skills.d.ts +171 -0
  261. package/dist/src/integrations/skills.d.ts.map +1 -0
  262. package/dist/src/integrations/skills.js +403 -0
  263. package/dist/src/integrations/skills.js.map +1 -0
  264. package/dist/src/integrations/smart-decomposer.d.ts +322 -0
  265. package/dist/src/integrations/smart-decomposer.d.ts.map +1 -0
  266. package/dist/src/integrations/smart-decomposer.js +856 -0
  267. package/dist/src/integrations/smart-decomposer.js.map +1 -0
  268. package/dist/src/integrations/sourcegraph.d.ts +169 -0
  269. package/dist/src/integrations/sourcegraph.d.ts.map +1 -0
  270. package/dist/src/integrations/sourcegraph.js +379 -0
  271. package/dist/src/integrations/sourcegraph.js.map +1 -0
  272. package/dist/src/integrations/sqlite-store.d.ts +518 -0
  273. package/dist/src/integrations/sqlite-store.d.ts.map +1 -0
  274. package/dist/src/integrations/sqlite-store.js +1423 -0
  275. package/dist/src/integrations/sqlite-store.js.map +1 -0
  276. package/dist/src/integrations/streaming.d.ts +102 -0
  277. package/dist/src/integrations/streaming.d.ts.map +1 -0
  278. package/dist/src/integrations/streaming.js +362 -0
  279. package/dist/src/integrations/streaming.js.map +1 -0
  280. package/dist/src/integrations/thread-manager.d.ts +199 -0
  281. package/dist/src/integrations/thread-manager.d.ts.map +1 -0
  282. package/dist/src/integrations/thread-manager.js +357 -0
  283. package/dist/src/integrations/thread-manager.js.map +1 -0
  284. package/dist/src/main.d.ts +26 -0
  285. package/dist/src/main.d.ts.map +1 -0
  286. package/dist/src/main.js +170 -0
  287. package/dist/src/main.js.map +1 -0
  288. package/dist/src/modes/index.d.ts +10 -0
  289. package/dist/src/modes/index.d.ts.map +1 -0
  290. package/dist/src/modes/index.js +10 -0
  291. package/dist/src/modes/index.js.map +1 -0
  292. package/dist/src/modes/repl.d.ts +19 -0
  293. package/dist/src/modes/repl.d.ts.map +1 -0
  294. package/dist/src/modes/repl.js +393 -0
  295. package/dist/src/modes/repl.js.map +1 -0
  296. package/dist/src/modes/tui.d.ts +29 -0
  297. package/dist/src/modes/tui.d.ts.map +1 -0
  298. package/dist/src/modes/tui.js +272 -0
  299. package/dist/src/modes/tui.js.map +1 -0
  300. package/dist/src/modes.d.ts +179 -0
  301. package/dist/src/modes.d.ts.map +1 -0
  302. package/dist/src/modes.js +385 -0
  303. package/dist/src/modes.js.map +1 -0
  304. package/dist/src/observability/tracer.d.ts +111 -0
  305. package/dist/src/observability/tracer.d.ts.map +1 -0
  306. package/dist/src/observability/tracer.js +300 -0
  307. package/dist/src/observability/tracer.js.map +1 -0
  308. package/dist/src/observability/types.d.ts +271 -0
  309. package/dist/src/observability/types.d.ts.map +1 -0
  310. package/dist/src/observability/types.js +24 -0
  311. package/dist/src/observability/types.js.map +1 -0
  312. package/dist/src/paths.d.ts +101 -0
  313. package/dist/src/paths.d.ts.map +1 -0
  314. package/dist/src/paths.js +148 -0
  315. package/dist/src/paths.js.map +1 -0
  316. package/dist/src/persistence/index.d.ts +38 -0
  317. package/dist/src/persistence/index.d.ts.map +1 -0
  318. package/dist/src/persistence/index.js +48 -0
  319. package/dist/src/persistence/index.js.map +1 -0
  320. package/dist/src/persistence/migrator.d.ts +135 -0
  321. package/dist/src/persistence/migrator.d.ts.map +1 -0
  322. package/dist/src/persistence/migrator.js +303 -0
  323. package/dist/src/persistence/migrator.js.map +1 -0
  324. package/dist/src/persistence/schema.d.ts +101 -0
  325. package/dist/src/persistence/schema.d.ts.map +1 -0
  326. package/dist/src/persistence/schema.js +395 -0
  327. package/dist/src/persistence/schema.js.map +1 -0
  328. package/dist/src/providers/adapters/anthropic.d.ts +20 -0
  329. package/dist/src/providers/adapters/anthropic.d.ts.map +1 -0
  330. package/dist/src/providers/adapters/anthropic.js +124 -0
  331. package/dist/src/providers/adapters/anthropic.js.map +1 -0
  332. package/dist/src/providers/adapters/mock.d.ts +25 -0
  333. package/dist/src/providers/adapters/mock.d.ts.map +1 -0
  334. package/dist/src/providers/adapters/mock.js +133 -0
  335. package/dist/src/providers/adapters/mock.js.map +1 -0
  336. package/dist/src/providers/adapters/openai.d.ts +21 -0
  337. package/dist/src/providers/adapters/openai.d.ts.map +1 -0
  338. package/dist/src/providers/adapters/openai.js +126 -0
  339. package/dist/src/providers/adapters/openai.js.map +1 -0
  340. package/dist/src/providers/adapters/openrouter.d.ts +49 -0
  341. package/dist/src/providers/adapters/openrouter.d.ts.map +1 -0
  342. package/dist/src/providers/adapters/openrouter.js +363 -0
  343. package/dist/src/providers/adapters/openrouter.js.map +1 -0
  344. package/dist/src/providers/provider.d.ts +54 -0
  345. package/dist/src/providers/provider.d.ts.map +1 -0
  346. package/dist/src/providers/provider.js +111 -0
  347. package/dist/src/providers/provider.js.map +1 -0
  348. package/dist/src/providers/resilient-fetch.d.ts +99 -0
  349. package/dist/src/providers/resilient-fetch.d.ts.map +1 -0
  350. package/dist/src/providers/resilient-fetch.js +208 -0
  351. package/dist/src/providers/resilient-fetch.js.map +1 -0
  352. package/dist/src/providers/types.d.ts +227 -0
  353. package/dist/src/providers/types.d.ts.map +1 -0
  354. package/dist/src/providers/types.js +24 -0
  355. package/dist/src/providers/types.js.map +1 -0
  356. package/dist/src/session-picker.d.ts +28 -0
  357. package/dist/src/session-picker.d.ts.map +1 -0
  358. package/dist/src/session-picker.js +256 -0
  359. package/dist/src/session-picker.js.map +1 -0
  360. package/dist/src/test-sqlite.d.ts +2 -0
  361. package/dist/src/test-sqlite.d.ts.map +1 -0
  362. package/dist/src/test-sqlite.js +114 -0
  363. package/dist/src/test-sqlite.js.map +1 -0
  364. package/dist/src/tools/agent.d.ts +44 -0
  365. package/dist/src/tools/agent.d.ts.map +1 -0
  366. package/dist/src/tools/agent.js +110 -0
  367. package/dist/src/tools/agent.js.map +1 -0
  368. package/dist/src/tools/bash.d.ts +52 -0
  369. package/dist/src/tools/bash.d.ts.map +1 -0
  370. package/dist/src/tools/bash.js +141 -0
  371. package/dist/src/tools/bash.js.map +1 -0
  372. package/dist/src/tools/file.d.ts +47 -0
  373. package/dist/src/tools/file.d.ts.map +1 -0
  374. package/dist/src/tools/file.js +263 -0
  375. package/dist/src/tools/file.js.map +1 -0
  376. package/dist/src/tools/permission.d.ts +43 -0
  377. package/dist/src/tools/permission.d.ts.map +1 -0
  378. package/dist/src/tools/permission.js +216 -0
  379. package/dist/src/tools/permission.js.map +1 -0
  380. package/dist/src/tools/registry.d.ts +63 -0
  381. package/dist/src/tools/registry.d.ts.map +1 -0
  382. package/dist/src/tools/registry.js +250 -0
  383. package/dist/src/tools/registry.js.map +1 -0
  384. package/dist/src/tools/standard.d.ts +57 -0
  385. package/dist/src/tools/standard.d.ts.map +1 -0
  386. package/dist/src/tools/standard.js +113 -0
  387. package/dist/src/tools/standard.js.map +1 -0
  388. package/dist/src/tools/types.d.ts +146 -0
  389. package/dist/src/tools/types.d.ts.map +1 -0
  390. package/dist/src/tools/types.js +28 -0
  391. package/dist/src/tools/types.js.map +1 -0
  392. package/dist/src/tools/undo.d.ts +71 -0
  393. package/dist/src/tools/undo.d.ts.map +1 -0
  394. package/dist/src/tools/undo.js +123 -0
  395. package/dist/src/tools/undo.js.map +1 -0
  396. package/dist/src/tracing/cache-boundary-tracker.d.ts +189 -0
  397. package/dist/src/tracing/cache-boundary-tracker.d.ts.map +1 -0
  398. package/dist/src/tracing/cache-boundary-tracker.js +411 -0
  399. package/dist/src/tracing/cache-boundary-tracker.js.map +1 -0
  400. package/dist/src/tracing/trace-collector.d.ts +274 -0
  401. package/dist/src/tracing/trace-collector.d.ts.map +1 -0
  402. package/dist/src/tracing/trace-collector.js +727 -0
  403. package/dist/src/tracing/trace-collector.js.map +1 -0
  404. package/dist/src/tracing/types.d.ts +657 -0
  405. package/dist/src/tracing/types.d.ts.map +1 -0
  406. package/dist/src/tracing/types.js +39 -0
  407. package/dist/src/tracing/types.js.map +1 -0
  408. package/dist/src/tricks/failure-evidence.d.ts +268 -0
  409. package/dist/src/tricks/failure-evidence.d.ts.map +1 -0
  410. package/dist/src/tricks/failure-evidence.js +544 -0
  411. package/dist/src/tricks/failure-evidence.js.map +1 -0
  412. package/dist/src/tricks/json-utils.d.ts +77 -0
  413. package/dist/src/tricks/json-utils.d.ts.map +1 -0
  414. package/dist/src/tricks/json-utils.js +247 -0
  415. package/dist/src/tricks/json-utils.js.map +1 -0
  416. package/dist/src/tricks/kv-cache-context.d.ts +227 -0
  417. package/dist/src/tricks/kv-cache-context.d.ts.map +1 -0
  418. package/dist/src/tricks/kv-cache-context.js +377 -0
  419. package/dist/src/tricks/kv-cache-context.js.map +1 -0
  420. package/dist/src/tricks/recitation.d.ts +208 -0
  421. package/dist/src/tricks/recitation.d.ts.map +1 -0
  422. package/dist/src/tricks/recitation.js +374 -0
  423. package/dist/src/tricks/recitation.js.map +1 -0
  424. package/dist/src/tricks/reversible-compaction.d.ts +251 -0
  425. package/dist/src/tricks/reversible-compaction.d.ts.map +1 -0
  426. package/dist/src/tricks/reversible-compaction.js +555 -0
  427. package/dist/src/tricks/reversible-compaction.js.map +1 -0
  428. package/dist/src/tricks/serialization-diversity.d.ts +197 -0
  429. package/dist/src/tricks/serialization-diversity.d.ts.map +1 -0
  430. package/dist/src/tricks/serialization-diversity.js +460 -0
  431. package/dist/src/tricks/serialization-diversity.js.map +1 -0
  432. package/dist/src/tui/app.d.ts +42 -0
  433. package/dist/src/tui/app.d.ts.map +1 -0
  434. package/dist/src/tui/app.js +1076 -0
  435. package/dist/src/tui/app.js.map +1 -0
  436. package/dist/src/tui/components/ApprovalDialog.d.ts +28 -0
  437. package/dist/src/tui/components/ApprovalDialog.d.ts.map +1 -0
  438. package/dist/src/tui/components/ApprovalDialog.js +59 -0
  439. package/dist/src/tui/components/ApprovalDialog.js.map +1 -0
  440. package/dist/src/tui/components/InputArea.d.ts +35 -0
  441. package/dist/src/tui/components/InputArea.d.ts.map +1 -0
  442. package/dist/src/tui/components/InputArea.js +144 -0
  443. package/dist/src/tui/components/InputArea.js.map +1 -0
  444. package/dist/src/tui/components/MessageItem.d.ts +28 -0
  445. package/dist/src/tui/components/MessageItem.d.ts.map +1 -0
  446. package/dist/src/tui/components/MessageItem.js +27 -0
  447. package/dist/src/tui/components/MessageItem.js.map +1 -0
  448. package/dist/src/tui/components/ScrollableBox.d.ts +41 -0
  449. package/dist/src/tui/components/ScrollableBox.d.ts.map +1 -0
  450. package/dist/src/tui/components/ScrollableBox.js +101 -0
  451. package/dist/src/tui/components/ScrollableBox.js.map +1 -0
  452. package/dist/src/tui/components/ToolCallItem.d.ts +33 -0
  453. package/dist/src/tui/components/ToolCallItem.d.ts.map +1 -0
  454. package/dist/src/tui/components/ToolCallItem.js +91 -0
  455. package/dist/src/tui/components/ToolCallItem.js.map +1 -0
  456. package/dist/src/tui/components/index.d.ts +13 -0
  457. package/dist/src/tui/components/index.d.ts.map +1 -0
  458. package/dist/src/tui/components/index.js +15 -0
  459. package/dist/src/tui/components/index.js.map +1 -0
  460. package/dist/src/tui/event-display.d.ts +19 -0
  461. package/dist/src/tui/event-display.d.ts.map +1 -0
  462. package/dist/src/tui/event-display.js +178 -0
  463. package/dist/src/tui/event-display.js.map +1 -0
  464. package/dist/src/tui/index.d.ts +105 -0
  465. package/dist/src/tui/index.d.ts.map +1 -0
  466. package/dist/src/tui/index.js +214 -0
  467. package/dist/src/tui/index.js.map +1 -0
  468. package/dist/src/tui/input/CommandPalette.d.ts +55 -0
  469. package/dist/src/tui/input/CommandPalette.d.ts.map +1 -0
  470. package/dist/src/tui/input/CommandPalette.js +135 -0
  471. package/dist/src/tui/input/CommandPalette.js.map +1 -0
  472. package/dist/src/tui/input/index.d.ts +7 -0
  473. package/dist/src/tui/input/index.d.ts.map +1 -0
  474. package/dist/src/tui/input/index.js +7 -0
  475. package/dist/src/tui/input/index.js.map +1 -0
  476. package/dist/src/tui/theme/index.d.ts +45 -0
  477. package/dist/src/tui/theme/index.d.ts.map +1 -0
  478. package/dist/src/tui/theme/index.js +215 -0
  479. package/dist/src/tui/theme/index.js.map +1 -0
  480. package/dist/src/tui/types.d.ts +214 -0
  481. package/dist/src/tui/types.d.ts.map +1 -0
  482. package/dist/src/tui/types.js +27 -0
  483. package/dist/src/tui/types.js.map +1 -0
  484. package/dist/src/types.d.ts +905 -0
  485. package/dist/src/types.d.ts.map +1 -0
  486. package/dist/src/types.js +9 -0
  487. package/dist/src/types.js.map +1 -0
  488. package/package.json +89 -0
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Lesson 8: Tool Re-exports and Schema Conversion
3
+ *
4
+ * Re-exports tools from Lesson 3 and provides conversion utilities
5
+ * for OpenRouter's native tool use format.
6
+ */
7
+ import { ToolRegistry, defineTool } from './registry.js';
8
+ import { readFileTool, writeFileTool, editFileTool, listFilesTool } from './file.js';
9
+ import { bashTool, grepTool, globTool } from './bash.js';
10
+ // =============================================================================
11
+ // RE-EXPORTS
12
+ // =============================================================================
13
+ export {
14
+ // Registry
15
+ ToolRegistry, defineTool,
16
+ // File tools
17
+ readFileTool, writeFileTool, editFileTool, listFilesTool,
18
+ // Bash tools
19
+ bashTool, grepTool, globTool, };
20
+ // =============================================================================
21
+ // SCHEMA CONVERSION
22
+ // =============================================================================
23
+ /**
24
+ * ═══════════════════════════════════════════════════════════════════════════
25
+ * Converting Tool Schemas: Anthropic vs OpenAI Format
26
+ * ═══════════════════════════════════════════════════════════════════════════
27
+ *
28
+ * Anthropic format (what Lesson 3 uses):
29
+ * { name, description, input_schema: { type: 'object', properties, required } }
30
+ *
31
+ * OpenAI/OpenRouter format (what native tool use needs):
32
+ * { type: 'function', function: { name, description, parameters: {...} } }
33
+ *
34
+ * The actual schema structure is similar - it's just wrapped differently.
35
+ * This conversion enables native tool calling instead of JSON text parsing.
36
+ * ═══════════════════════════════════════════════════════════════════════════
37
+ */
38
+ /**
39
+ * Convert a single ToolDescription to OpenRouter format.
40
+ */
41
+ export function toOpenRouterSchema(tool) {
42
+ return {
43
+ type: 'function',
44
+ function: {
45
+ name: tool.name,
46
+ description: tool.description,
47
+ // Type assertion needed because JSONSchema is a stricter type
48
+ parameters: tool.input_schema,
49
+ },
50
+ };
51
+ }
52
+ /**
53
+ * Convert multiple tool descriptions to OpenRouter format.
54
+ */
55
+ export function toOpenRouterSchemas(tools) {
56
+ return tools.map(toOpenRouterSchema);
57
+ }
58
+ // =============================================================================
59
+ // PRESET REGISTRY
60
+ // =============================================================================
61
+ /**
62
+ * Create a pre-configured tool registry with all standard tools.
63
+ *
64
+ * @param permissionMode - How to handle dangerous operations
65
+ * @returns Configured ToolRegistry with all tools registered
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * const registry = createStandardRegistry('interactive');
70
+ * const result = await registry.execute('read_file', { path: 'README.md' });
71
+ * ```
72
+ */
73
+ export function createStandardRegistry(permissionMode = 'interactive') {
74
+ const registry = new ToolRegistry(permissionMode);
75
+ // File operations
76
+ registry.register(readFileTool);
77
+ registry.register(writeFileTool);
78
+ registry.register(editFileTool);
79
+ registry.register(listFilesTool);
80
+ // Bash operations
81
+ registry.register(bashTool);
82
+ registry.register(grepTool);
83
+ registry.register(globTool);
84
+ return registry;
85
+ }
86
+ /**
87
+ * Get OpenRouter-compatible tool schemas for all standard tools.
88
+ */
89
+ export function getStandardToolSchemas() {
90
+ const registry = createStandardRegistry('yolo'); // Mode doesn't matter for schemas
91
+ return toOpenRouterSchemas(registry.getDescriptions());
92
+ }
93
+ // =============================================================================
94
+ // TOOL SUMMARY (for documentation/logging)
95
+ // =============================================================================
96
+ /**
97
+ * Get a human-readable summary of available tools.
98
+ */
99
+ export function getToolsSummary() {
100
+ const tools = [
101
+ { name: 'read_file', desc: 'Read file contents', safe: true },
102
+ { name: 'write_file', desc: 'Create/overwrite files', safe: false },
103
+ { name: 'edit_file', desc: 'Make surgical edits (find & replace)', safe: false },
104
+ { name: 'list_files', desc: 'List directory contents', safe: true },
105
+ { name: 'bash', desc: 'Execute shell commands', safe: false },
106
+ { name: 'grep', desc: 'Search for patterns in files', safe: true },
107
+ { name: 'glob', desc: 'Find files by pattern', safe: true },
108
+ ];
109
+ return tools
110
+ .map(t => ` • ${t.name}: ${t.desc}${t.safe ? '' : ' ⚠️'}`)
111
+ .join('\n');
112
+ }
113
+ //# sourceMappingURL=standard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standard.js","sourceRoot":"","sources":["../../../src/tools/standard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Lesson 3: Tool System Types
3
+ *
4
+ * Type definitions for the tool registry and permission system.
5
+ */
6
+ import { z } from 'zod';
7
+ /**
8
+ * Schema for a tool parameter.
9
+ * Uses Zod for runtime validation.
10
+ */
11
+ export type ParameterSchema = z.ZodTypeAny;
12
+ /**
13
+ * Tool definition that includes schema and metadata.
14
+ */
15
+ export interface ToolDefinition<TInput extends z.ZodTypeAny = z.ZodTypeAny> {
16
+ /** Unique identifier */
17
+ name: string;
18
+ /** Human-readable description (shown to LLM) */
19
+ description: string;
20
+ /** Input parameter schema */
21
+ parameters: TInput;
22
+ /** Danger level for permission checking */
23
+ dangerLevel: DangerLevel;
24
+ /** Execute the tool */
25
+ execute: (input: z.infer<TInput>) => Promise<ToolResult>;
26
+ }
27
+ /**
28
+ * Result of tool execution.
29
+ */
30
+ export interface ToolResult {
31
+ success: boolean;
32
+ output: string;
33
+ metadata?: Record<string, unknown>;
34
+ }
35
+ /**
36
+ * Danger levels for tools and operations.
37
+ */
38
+ export type DangerLevel = 'safe' | 'moderate' | 'dangerous' | 'critical';
39
+ /**
40
+ * Permission modes.
41
+ */
42
+ export type PermissionMode = 'strict' | 'interactive' | 'auto-safe' | 'yolo';
43
+ /**
44
+ * Request for permission to perform an operation.
45
+ */
46
+ export interface PermissionRequest {
47
+ tool: string;
48
+ operation: string;
49
+ target: string;
50
+ dangerLevel: DangerLevel;
51
+ context?: string;
52
+ }
53
+ /**
54
+ * Response to a permission request.
55
+ */
56
+ export interface PermissionResponse {
57
+ granted: boolean;
58
+ reason?: string;
59
+ remember?: boolean;
60
+ }
61
+ /**
62
+ * Interface for permission checkers.
63
+ */
64
+ export interface PermissionChecker {
65
+ check(request: PermissionRequest): Promise<PermissionResponse>;
66
+ }
67
+ /**
68
+ * JSON Schema representation for LLM tool descriptions.
69
+ */
70
+ export interface JSONSchema {
71
+ type: 'object';
72
+ properties: Record<string, JSONSchemaProperty>;
73
+ required?: string[];
74
+ }
75
+ export interface JSONSchemaProperty {
76
+ type: string;
77
+ description?: string;
78
+ enum?: string[];
79
+ items?: JSONSchemaProperty;
80
+ properties?: Record<string, JSONSchemaProperty>;
81
+ }
82
+ /**
83
+ * Tool description in format suitable for LLM APIs.
84
+ */
85
+ export interface ToolDescription {
86
+ name: string;
87
+ description: string;
88
+ input_schema: JSONSchema;
89
+ }
90
+ /**
91
+ * Options for tool execution.
92
+ */
93
+ export interface ExecuteOptions {
94
+ /** Permission mode to use */
95
+ permissionMode?: PermissionMode;
96
+ /** Working directory for file operations */
97
+ cwd?: string;
98
+ /** Timeout in milliseconds */
99
+ timeout?: number;
100
+ }
101
+ /**
102
+ * Events emitted during tool execution.
103
+ */
104
+ export type ToolEvent = {
105
+ type: 'start';
106
+ tool: string;
107
+ input: unknown;
108
+ } | {
109
+ type: 'permission_requested';
110
+ request: PermissionRequest;
111
+ } | {
112
+ type: 'permission_granted';
113
+ request: PermissionRequest;
114
+ } | {
115
+ type: 'permission_denied';
116
+ request: PermissionRequest;
117
+ reason: string;
118
+ } | {
119
+ type: 'executing';
120
+ tool: string;
121
+ } | {
122
+ type: 'complete';
123
+ tool: string;
124
+ result: ToolResult;
125
+ } | {
126
+ type: 'error';
127
+ tool: string;
128
+ error: Error;
129
+ };
130
+ /**
131
+ * Listener for tool events.
132
+ */
133
+ export type ToolEventListener = (event: ToolEvent) => void;
134
+ /**
135
+ * Patterns that indicate dangerous operations.
136
+ */
137
+ export interface DangerPattern {
138
+ pattern: RegExp;
139
+ level: DangerLevel;
140
+ description: string;
141
+ }
142
+ /**
143
+ * Default dangerous patterns for bash commands.
144
+ */
145
+ export declare const DANGEROUS_PATTERNS: DangerPattern[];
146
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tools/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Lesson 3: Tool System Types
3
+ *
4
+ * Type definitions for the tool registry and permission system.
5
+ */
6
+ /**
7
+ * Default dangerous patterns for bash commands.
8
+ */
9
+ export const DANGEROUS_PATTERNS = [
10
+ // Critical - system operations
11
+ { pattern: /\bsudo\b/, level: 'critical', description: 'Superuser command' },
12
+ { pattern: /\bsu\b/, level: 'critical', description: 'Switch user' },
13
+ { pattern: /\bchmod\s+[0-7]*7/, level: 'critical', description: 'World-writable permission' },
14
+ { pattern: /\bchown\b/, level: 'critical', description: 'Change ownership' },
15
+ // Dangerous - destructive operations
16
+ { pattern: /\brm\s+(-[rf]+\s+)*\//, level: 'dangerous', description: 'Remove from root' },
17
+ { pattern: /\brm\s+-rf\b/, level: 'dangerous', description: 'Recursive force delete' },
18
+ { pattern: />\s*\/dev\/(?!null)/, level: 'dangerous', description: 'Write to device (excludes /dev/null)' },
19
+ { pattern: /\bdd\b.*if=/, level: 'dangerous', description: 'Low-level disk operation' },
20
+ { pattern: /\bmkfs\b/, level: 'dangerous', description: 'Format filesystem' },
21
+ { pattern: /\bkill\s+-9\b/, level: 'dangerous', description: 'Force kill process' },
22
+ // Moderate - network and potentially harmful
23
+ { pattern: /\bcurl\b.*\|\s*(ba)?sh/, level: 'dangerous', description: 'Pipe URL to shell' },
24
+ { pattern: /\bwget\b.*\|\s*(ba)?sh/, level: 'dangerous', description: 'Pipe URL to shell' },
25
+ { pattern: /\bnpm\s+install\s+-g\b/, level: 'moderate', description: 'Global npm install' },
26
+ { pattern: /\bpip\s+install\b/, level: 'moderate', description: 'Python package install' },
27
+ ];
28
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tools/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA0KH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAoB;IACjD,+BAA+B;IAC/B,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE;IAC5E,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE;IACpE,EAAE,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,2BAA2B,EAAE;IAC7F,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,kBAAkB,EAAE;IAE5E,qCAAqC;IACrC,EAAE,OAAO,EAAE,uBAAuB,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE;IACzF,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,wBAAwB,EAAE;IACtF,EAAE,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,sCAAsC,EAAE;IAC3G,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,0BAA0B,EAAE;IACvF,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,mBAAmB,EAAE;IAC7E,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE;IAEnF,6CAA6C;IAC7C,EAAE,OAAO,EAAE,wBAAwB,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,mBAAmB,EAAE;IAC3F,EAAE,OAAO,EAAE,wBAAwB,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,mBAAmB,EAAE;IAC3F,EAAE,OAAO,EAAE,wBAAwB,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,oBAAoB,EAAE;IAC3F,EAAE,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,wBAAwB,EAAE;CAC3F,CAAC"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Undo Tools
3
+ *
4
+ * Tools for undoing file changes and viewing file history.
5
+ * These tools use the FileChangeTracker to provide undo capability
6
+ * for file operations within an agent session.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { undoTools } from './tools/undo.js';
11
+ *
12
+ * // Register undo tools with agent
13
+ * for (const tool of undoTools) {
14
+ * registry.register(tool);
15
+ * }
16
+ * ```
17
+ */
18
+ import { z } from 'zod';
19
+ import type { ToolDefinition, ToolResult, DangerLevel } from './types.js';
20
+ import type { FileChangeTracker } from '../integrations/file-change-tracker.js';
21
+ /**
22
+ * Context passed to tool execution that provides access to agent features.
23
+ */
24
+ export interface ToolExecutionContext {
25
+ /** Reference to the agent (if available) */
26
+ agent?: {
27
+ getFileChangeTracker?: () => FileChangeTracker | null;
28
+ };
29
+ }
30
+ /**
31
+ * Extended tool definition that accepts execution context.
32
+ */
33
+ export interface ContextAwareToolDefinition<TInput extends z.ZodTypeAny = z.ZodTypeAny> {
34
+ /** Unique identifier */
35
+ name: string;
36
+ /** Human-readable description (shown to LLM) */
37
+ description: string;
38
+ /** Input parameter schema */
39
+ parameters: TInput;
40
+ /** Danger level for permission checking */
41
+ dangerLevel: DangerLevel;
42
+ /** Execute the tool with context */
43
+ execute: (input: z.infer<TInput>, context?: ToolExecutionContext) => Promise<ToolResult>;
44
+ }
45
+ /**
46
+ * Tool to undo the last change to a specific file.
47
+ */
48
+ export declare const undoFileChangeTool: ContextAwareToolDefinition;
49
+ /**
50
+ * Tool to show change history for a file.
51
+ */
52
+ export declare const showFileHistoryTool: ContextAwareToolDefinition;
53
+ /**
54
+ * Tool to show session change summary.
55
+ */
56
+ export declare const showSessionChangesTool: ContextAwareToolDefinition;
57
+ /**
58
+ * All undo-related tools.
59
+ *
60
+ * These tools require the agent to pass a ToolExecutionContext
61
+ * that provides access to the FileChangeTracker via
62
+ * context.agent.getFileChangeTracker().
63
+ */
64
+ export declare const undoTools: ContextAwareToolDefinition[];
65
+ /**
66
+ * Cast undo tools to standard ToolDefinition format.
67
+ * Use this when registering with a registry that doesn't support context.
68
+ * Note: The tools will return "tracking not enabled" if context is not passed.
69
+ */
70
+ export declare const undoToolsAsStandard: ToolDefinition[];
71
+ //# sourceMappingURL=undo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"undo.d.ts","sourceRoot":"","sources":["../../../src/tools/undo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAMhF;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,4CAA4C;IAC5C,KAAK,CAAC,EAAE;QACN,oBAAoB,CAAC,EAAE,MAAM,iBAAiB,GAAG,IAAI,CAAC;KACvD,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B,CAAC,MAAM,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;IACpF,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,WAAW,EAAE,WAAW,CAAC;IACzB,oCAAoC;IACpC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CAC1F;AAMD;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,0BAmBhC,CAAC;AAMF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,0BA0BjC,CAAC;AAMF;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,0BAyBpC,CAAC;AAMF;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,EAAE,0BAA0B,EAIjD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,cAAc,EAA6C,CAAC"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Undo Tools
3
+ *
4
+ * Tools for undoing file changes and viewing file history.
5
+ * These tools use the FileChangeTracker to provide undo capability
6
+ * for file operations within an agent session.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { undoTools } from './tools/undo.js';
11
+ *
12
+ * // Register undo tools with agent
13
+ * for (const tool of undoTools) {
14
+ * registry.register(tool);
15
+ * }
16
+ * ```
17
+ */
18
+ import { z } from 'zod';
19
+ // =============================================================================
20
+ // UNDO FILE CHANGE TOOL
21
+ // =============================================================================
22
+ /**
23
+ * Tool to undo the last change to a specific file.
24
+ */
25
+ export const undoFileChangeTool = {
26
+ name: 'undo_file_change',
27
+ description: 'Undo the last change to a specific file, restoring its previous content',
28
+ parameters: z.object({
29
+ path: z.string().describe('The file path to undo changes for'),
30
+ }),
31
+ dangerLevel: 'moderate',
32
+ execute: async (args, context) => {
33
+ const tracker = context?.agent?.getFileChangeTracker?.();
34
+ if (!tracker) {
35
+ return { success: false, output: 'File change tracking is not enabled' };
36
+ }
37
+ const result = await tracker.undoLastChange(args.path);
38
+ return {
39
+ success: result.success,
40
+ output: result.message,
41
+ };
42
+ },
43
+ };
44
+ // =============================================================================
45
+ // SHOW FILE HISTORY TOOL
46
+ // =============================================================================
47
+ /**
48
+ * Tool to show change history for a file.
49
+ */
50
+ export const showFileHistoryTool = {
51
+ name: 'show_file_history',
52
+ description: 'Show the change history for a file in this session',
53
+ parameters: z.object({
54
+ path: z.string().describe('The file path to show history for'),
55
+ }),
56
+ dangerLevel: 'safe',
57
+ execute: async (args, context) => {
58
+ const tracker = context?.agent?.getFileChangeTracker?.();
59
+ if (!tracker) {
60
+ return { success: false, output: 'File change tracking is not enabled' };
61
+ }
62
+ const history = tracker.getFileHistory(args.path);
63
+ if (history.length === 0) {
64
+ return { success: true, output: `No changes recorded for ${args.path}` };
65
+ }
66
+ const formatted = history.map((change, i) => `${i + 1}. [${change.operation}] Turn ${change.turnNumber} - ${change.createdAt}` +
67
+ `\n Before: ${change.bytesBefore} bytes, After: ${change.bytesAfter} bytes` +
68
+ (change.isUndone ? ' (UNDONE)' : '')).join('\n');
69
+ return { success: true, output: `File history for ${args.path}:\n${formatted}` };
70
+ },
71
+ };
72
+ // =============================================================================
73
+ // SHOW SESSION CHANGES TOOL
74
+ // =============================================================================
75
+ /**
76
+ * Tool to show session change summary.
77
+ */
78
+ export const showSessionChangesTool = {
79
+ name: 'show_session_changes',
80
+ description: 'Show a summary of all file changes in this session',
81
+ parameters: z.object({}),
82
+ dangerLevel: 'safe',
83
+ execute: async (_args, context) => {
84
+ const tracker = context?.agent?.getFileChangeTracker?.();
85
+ if (!tracker) {
86
+ return { success: false, output: 'File change tracking is not enabled' };
87
+ }
88
+ const summary = tracker.getSessionChangeSummary();
89
+ const output = [
90
+ `Session Change Summary:`,
91
+ ` Total changes: ${summary.totalChanges}`,
92
+ ` Files modified: ${summary.filesModified.length}`,
93
+ ` Creates: ${summary.byOperation.create}`,
94
+ ` Writes: ${summary.byOperation.write}`,
95
+ ` Edits: ${summary.byOperation.edit}`,
96
+ ` Deletes: ${summary.byOperation.delete}`,
97
+ ` Undone: ${summary.undoneChanges}`,
98
+ ].join('\n');
99
+ return { success: true, output };
100
+ },
101
+ };
102
+ // =============================================================================
103
+ // EXPORTS
104
+ // =============================================================================
105
+ /**
106
+ * All undo-related tools.
107
+ *
108
+ * These tools require the agent to pass a ToolExecutionContext
109
+ * that provides access to the FileChangeTracker via
110
+ * context.agent.getFileChangeTracker().
111
+ */
112
+ export const undoTools = [
113
+ undoFileChangeTool,
114
+ showFileHistoryTool,
115
+ showSessionChangesTool,
116
+ ];
117
+ /**
118
+ * Cast undo tools to standard ToolDefinition format.
119
+ * Use this when registering with a registry that doesn't support context.
120
+ * Note: The tools will return "tracking not enabled" if context is not passed.
121
+ */
122
+ export const undoToolsAsStandard = undoTools;
123
+ //# sourceMappingURL=undo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"undo.js","sourceRoot":"","sources":["../../../src/tools/undo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAkCxB,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA+B;IAC5D,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,yEAAyE;IACtF,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;KAC/D,CAAC;IACF,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,KAAK,EAAE,IAAsB,EAAE,OAA8B,EAAuB,EAAE;QAC7F,MAAM,OAAO,GAAG,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,CAAC;QACzD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,qCAAqC,EAAE,CAAC;QAC3E,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,OAAO;SACvB,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,gFAAgF;AAChF,yBAAyB;AACzB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA+B;IAC7D,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,oDAAoD;IACjE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;KAC/D,CAAC;IACF,WAAW,EAAE,MAAM;IACnB,OAAO,EAAE,KAAK,EAAE,IAAsB,EAAE,OAA8B,EAAuB,EAAE;QAC7F,MAAM,OAAO,GAAG,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,CAAC;QACzD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,qCAAqC,EAAE,CAAC;QAC3E,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,2BAA2B,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAC3E,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAC1C,GAAG,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,UAAU,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,SAAS,EAAE;YACjF,gBAAgB,MAAM,CAAC,WAAW,kBAAkB,MAAM,CAAC,UAAU,QAAQ;YAC7E,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CACrC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,IAAI,CAAC,IAAI,MAAM,SAAS,EAAE,EAAE,CAAC;IACnF,CAAC;CACF,CAAC;AAEF,gFAAgF;AAChF,4BAA4B;AAC5B,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAA+B;IAChE,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,oDAAoD;IACjE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM;IACnB,OAAO,EAAE,KAAK,EAAE,KAA4B,EAAE,OAA8B,EAAuB,EAAE;QACnG,MAAM,OAAO,GAAG,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,CAAC;QACzD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,qCAAqC,EAAE,CAAC;QAC3E,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG;YACb,yBAAyB;YACzB,oBAAoB,OAAO,CAAC,YAAY,EAAE;YAC1C,qBAAqB,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE;YACnD,cAAc,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE;YAC1C,aAAa,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE;YACxC,YAAY,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE;YACtC,cAAc,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE;YAC1C,aAAa,OAAO,CAAC,aAAa,EAAE;SACrC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACnC,CAAC;CACF,CAAC;AAEF,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAiC;IACrD,kBAAkB;IAClB,mBAAmB;IACnB,sBAAsB;CACvB,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAqB,SAAwC,CAAC"}