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,256 @@
1
+ /**
2
+ * Session Resume Picker
3
+ *
4
+ * Displays recent sessions and allows user to select one to resume.
5
+ * Works with both SQLite and JSONL session stores.
6
+ */
7
+ // =============================================================================
8
+ // RAW INPUT HELPER
9
+ // =============================================================================
10
+ /**
11
+ * Read a line from stdin without using readline.
12
+ * Uses raw mode and removes ALL existing stdin listeners to prevent
13
+ * double-echo issues from other parts of the application.
14
+ */
15
+ async function readLineRaw(prompt, debug = false) {
16
+ const stdin = process.stdin;
17
+ const stdout = process.stdout;
18
+ // Save and remove ALL existing stdin listeners
19
+ const savedListeners = {
20
+ data: stdin.rawListeners('data'),
21
+ readable: stdin.rawListeners('readable'),
22
+ keypress: stdin.rawListeners('keypress'),
23
+ };
24
+ if (debug) {
25
+ console.error(`[DEBUG] stdin listeners before: data=${savedListeners.data.length}, readable=${savedListeners.readable.length}, keypress=${savedListeners.keypress.length}`);
26
+ }
27
+ stdin.removeAllListeners('data');
28
+ stdin.removeAllListeners('readable');
29
+ stdin.removeAllListeners('keypress');
30
+ // Save current state
31
+ const wasRaw = stdin.isRaw ?? false;
32
+ const wasPaused = stdin.isPaused?.() ?? true;
33
+ if (debug) {
34
+ console.error(`[DEBUG] stdin state before: isRaw=${wasRaw}, isPaused=${wasPaused}, isTTY=${stdin.isTTY}`);
35
+ }
36
+ // Configure stdin for raw character input
37
+ if (stdin.isTTY && typeof stdin.setRawMode === 'function') {
38
+ stdin.setRawMode(true);
39
+ if (debug) {
40
+ console.error(`[DEBUG] setRawMode(true) called, isRaw now=${stdin.isRaw}`);
41
+ }
42
+ }
43
+ stdin.resume();
44
+ stdin.setEncoding('utf8');
45
+ // Write prompt
46
+ stdout.write(prompt);
47
+ return new Promise((resolve) => {
48
+ let buffer = '';
49
+ const onData = (chunk) => {
50
+ const chars = typeof chunk === 'string' ? chunk : chunk.toString('utf8');
51
+ for (const c of chars) {
52
+ if (c === '\r' || c === '\n') {
53
+ // Enter pressed - done
54
+ stdout.write('\n');
55
+ cleanup();
56
+ resolve(buffer);
57
+ return;
58
+ }
59
+ else if (c === '\x03') {
60
+ // Ctrl+C
61
+ cleanup();
62
+ process.exit(0);
63
+ }
64
+ else if (c === '\x7f' || c === '\b') {
65
+ // Backspace
66
+ if (buffer.length > 0) {
67
+ buffer = buffer.slice(0, -1);
68
+ stdout.write('\b \b'); // Erase character
69
+ }
70
+ }
71
+ else if (c >= ' ' && c <= '~') {
72
+ // Printable ASCII character
73
+ buffer += c;
74
+ stdout.write(c); // Echo the character
75
+ }
76
+ }
77
+ };
78
+ const cleanup = () => {
79
+ stdin.removeListener('data', onData);
80
+ // Restore raw mode state
81
+ if (stdin.isTTY && typeof stdin.setRawMode === 'function') {
82
+ stdin.setRawMode(wasRaw);
83
+ }
84
+ // Restore paused state
85
+ if (wasPaused) {
86
+ stdin.pause();
87
+ }
88
+ // Restore all saved listeners
89
+ savedListeners.data.forEach(l => stdin.on('data', l));
90
+ savedListeners.readable.forEach(l => stdin.on('readable', l));
91
+ savedListeners.keypress.forEach(l => stdin.on('keypress', l));
92
+ };
93
+ stdin.on('data', onData);
94
+ });
95
+ }
96
+ // =============================================================================
97
+ // FORMATTING HELPERS
98
+ // =============================================================================
99
+ /**
100
+ * Format a date as relative time (e.g., "2 hours ago", "yesterday").
101
+ * Handles invalid/missing dates gracefully.
102
+ */
103
+ function formatRelativeTime(dateStr) {
104
+ if (!dateStr)
105
+ return 'unknown';
106
+ const date = new Date(dateStr);
107
+ // Check for invalid date
108
+ if (isNaN(date.getTime())) {
109
+ return 'unknown';
110
+ }
111
+ const now = new Date();
112
+ const diffMs = now.getTime() - date.getTime();
113
+ const diffMins = Math.floor(diffMs / 60000);
114
+ const diffHours = Math.floor(diffMs / 3600000);
115
+ const diffDays = Math.floor(diffMs / 86400000);
116
+ if (diffMins < 1)
117
+ return 'just now';
118
+ if (diffMins < 60)
119
+ return `${diffMins}m ago`;
120
+ if (diffHours < 24)
121
+ return `${diffHours}h ago`;
122
+ if (diffDays === 1)
123
+ return 'yesterday';
124
+ if (diffDays < 7)
125
+ return `${diffDays}d ago`;
126
+ // Format as date for older sessions
127
+ return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });
128
+ }
129
+ /**
130
+ * Truncate string with ellipsis.
131
+ */
132
+ function truncate(str, maxLen) {
133
+ if (str.length <= maxLen)
134
+ return str;
135
+ return str.slice(0, maxLen - 3) + '...';
136
+ }
137
+ /**
138
+ * Format session ID for display (shorter form).
139
+ */
140
+ function formatSessionId(id) {
141
+ // session-abc123def456 -> abc123de
142
+ const match = id.match(/session-([a-z0-9]+)/);
143
+ if (match) {
144
+ return match[1].slice(0, 8);
145
+ }
146
+ return id.slice(0, 12);
147
+ }
148
+ /**
149
+ * Get display name for session (summary > name > short ID).
150
+ */
151
+ function getSessionDisplayName(session) {
152
+ // Prefer summary if available (first user message)
153
+ if (session.summary) {
154
+ return session.summary;
155
+ }
156
+ // Fall back to name
157
+ if (session.name) {
158
+ return session.name;
159
+ }
160
+ // Last resort: formatted ID
161
+ return formatSessionId(session.id);
162
+ }
163
+ /**
164
+ * Display sessions and let user pick one.
165
+ */
166
+ export async function showSessionPicker(sessions, options = {}) {
167
+ const { maxSessions = 10 } = options;
168
+ const recentSessions = sessions.slice(0, maxSessions);
169
+ if (recentSessions.length === 0) {
170
+ return { action: 'new' };
171
+ }
172
+ console.log('\n┌────────────────────────────────────────────────────────────────────┐');
173
+ console.log('│ Resume Session? │');
174
+ console.log('├────────────────────────────────────────────────────────────────────┤');
175
+ // Display sessions
176
+ recentSessions.forEach((session, idx) => {
177
+ const num = (idx + 1).toString().padStart(2, ' ');
178
+ const name = truncate(getSessionDisplayName(session), 30).padEnd(30);
179
+ const msgs = `${session.messageCount} msgs`.padEnd(10);
180
+ const time = formatRelativeTime(session.lastActiveAt).padEnd(12);
181
+ console.log(`│ ${num}) ${name} ${msgs} ${time} │`);
182
+ });
183
+ console.log('├────────────────────────────────────────────────────────────────────┤');
184
+ console.log('│ n) Start new session │');
185
+ console.log('│ q) Quit │');
186
+ console.log('└────────────────────────────────────────────────────────────────────┘');
187
+ // Use raw input to avoid conflicts with other readline instances
188
+ const answer = await readLineRaw('\nChoice: ');
189
+ const trimmed = answer.trim().toLowerCase();
190
+ if (trimmed === 'n' || trimmed === 'new') {
191
+ return { action: 'new' };
192
+ }
193
+ if (trimmed === 'q' || trimmed === 'quit' || trimmed === 'exit') {
194
+ return { action: 'cancel' };
195
+ }
196
+ const num = parseInt(trimmed, 10);
197
+ if (num >= 1 && num <= recentSessions.length) {
198
+ return {
199
+ action: 'resume',
200
+ sessionId: recentSessions[num - 1].id
201
+ };
202
+ }
203
+ // Default to new session on invalid input
204
+ console.log('Starting new session...');
205
+ return { action: 'new' };
206
+ }
207
+ /**
208
+ * Simple inline session picker (single line prompt).
209
+ */
210
+ export async function showQuickPicker(sessions) {
211
+ if (sessions.length === 0) {
212
+ return { action: 'new' };
213
+ }
214
+ const mostRecent = sessions[0];
215
+ const name = truncate(getSessionDisplayName(mostRecent), 40);
216
+ const time = formatRelativeTime(mostRecent.lastActiveAt);
217
+ console.log(`\nMost recent: "${name}" (${mostRecent.messageCount} msgs, ${time})`);
218
+ // Use raw input to avoid conflicts with other readline instances
219
+ // Enable debug logging to diagnose double character issue
220
+ const answer = await readLineRaw('Resume? [Y/n/list]: ', true);
221
+ const trimmed = answer.trim().toLowerCase();
222
+ if (trimmed === '' || trimmed === 'y' || trimmed === 'yes') {
223
+ return { action: 'resume', sessionId: mostRecent.id };
224
+ }
225
+ if (trimmed === 'n' || trimmed === 'no') {
226
+ return { action: 'new' };
227
+ }
228
+ // For 'list', caller should show full picker
229
+ return { action: 'cancel' }; // Signal to show full picker
230
+ }
231
+ /**
232
+ * Format sessions for display (used by /sessions command).
233
+ */
234
+ export function formatSessionsTable(sessions, maxRows = 10) {
235
+ if (sessions.length === 0) {
236
+ return 'No saved sessions.';
237
+ }
238
+ const rows = sessions.slice(0, maxRows);
239
+ const lines = [];
240
+ lines.push('┌────┬────────────────────────────────┬──────────┬────────────┐');
241
+ lines.push('│ # │ Session │ Messages │ Last Active│');
242
+ lines.push('├────┼────────────────────────────────┼──────────┼────────────┤');
243
+ rows.forEach((session, idx) => {
244
+ const num = (idx + 1).toString().padStart(2, ' ');
245
+ const name = truncate(getSessionDisplayName(session), 30).padEnd(30);
246
+ const msgs = session.messageCount.toString().padStart(6) + ' ';
247
+ const time = formatRelativeTime(session.lastActiveAt).padEnd(10);
248
+ lines.push(`│ ${num} │ ${name} │ ${msgs} │ ${time} │`);
249
+ });
250
+ lines.push('└────┴────────────────────────────────┴──────────┴────────────┘');
251
+ if (sessions.length > maxRows) {
252
+ lines.push(` ... and ${sessions.length - maxRows} more (use /load <id> to load specific session)`);
253
+ }
254
+ return lines.join('\n');
255
+ }
256
+ //# sourceMappingURL=session-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-picker.js","sourceRoot":"","sources":["../../src/session-picker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test-sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-sqlite.d.ts","sourceRoot":"","sources":["../../src/test-sqlite.ts"],"names":[],"mappings":""}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Quick test script to debug SQLite session persistence
3
+ */
4
+ import { createSQLiteStore } from './integrations/sqlite-store.js';
5
+ import { createSessionStore } from './integrations/session-store.js';
6
+ async function testSQLitePersistence() {
7
+ console.log('=== SQLite Persistence Test ===\n');
8
+ try {
9
+ // 1. Create SQLite store
10
+ console.log('1. Creating SQLite store...');
11
+ const store = await createSQLiteStore({ baseDir: '.agent/sessions' });
12
+ console.log(' ✓ Store created');
13
+ // 2. Check current state
14
+ console.log('\n2. Current store stats:');
15
+ const stats = store.getStats();
16
+ console.log(` Sessions: ${stats.sessionCount}`);
17
+ console.log(` Entries: ${stats.entryCount}`);
18
+ console.log(` Checkpoints: ${stats.checkpointCount}`);
19
+ console.log(` DB Size: ${stats.dbSizeBytes} bytes`);
20
+ // 3. Create a new session
21
+ console.log('\n3. Creating new session...');
22
+ const sessionId = store.createSession('test-session');
23
+ console.log(` Session ID: ${sessionId}`);
24
+ console.log(` Current Session ID in store: ${store.getCurrentSessionId()}`);
25
+ // 4. Check if currentSessionId is set correctly
26
+ if (store.getCurrentSessionId() !== sessionId) {
27
+ console.log(' ❌ ERROR: currentSessionId mismatch!');
28
+ }
29
+ else {
30
+ console.log(' ✓ currentSessionId matches');
31
+ }
32
+ // 5. Try to save a checkpoint
33
+ console.log('\n4. Saving checkpoint...');
34
+ try {
35
+ const checkpointData = {
36
+ id: 'test-ckpt-1',
37
+ label: 'test-checkpoint',
38
+ messages: [{ role: 'user', content: 'test' }],
39
+ iteration: 1,
40
+ };
41
+ const ckptId = store.saveCheckpoint(checkpointData, 'test-checkpoint');
42
+ console.log(` ✓ Checkpoint saved with ID: ${ckptId}`);
43
+ }
44
+ catch (err) {
45
+ console.log(` ❌ ERROR saving checkpoint: ${err.message}`);
46
+ console.log(` Stack: ${err.stack}`);
47
+ }
48
+ // 6. Verify checkpoint was saved
49
+ console.log('\n5. Verifying checkpoint...');
50
+ const statsAfter = store.getStats();
51
+ console.log(` Checkpoints before: ${stats.checkpointCount}`);
52
+ console.log(` Checkpoints after: ${statsAfter.checkpointCount}`);
53
+ if (statsAfter.checkpointCount > stats.checkpointCount) {
54
+ console.log(' ✓ Checkpoint count increased!');
55
+ }
56
+ else {
57
+ console.log(' ❌ Checkpoint count did NOT increase!');
58
+ }
59
+ // 7. Try to load the checkpoint
60
+ console.log('\n6. Loading checkpoint...');
61
+ const loaded = store.loadLatestCheckpoint(sessionId);
62
+ if (loaded) {
63
+ console.log(` ✓ Loaded checkpoint: ${loaded.id}`);
64
+ console.log(` State keys: ${Object.keys(loaded.state).join(', ')}`);
65
+ }
66
+ else {
67
+ console.log(' ❌ No checkpoint found for session');
68
+ }
69
+ // 8. List all sessions
70
+ console.log('\n7. Listing sessions...');
71
+ const sessions = store.listSessions();
72
+ console.log(` Total sessions: ${sessions.length}`);
73
+ if (sessions.length > 0) {
74
+ console.log(` Most recent: ${sessions[0].id}`);
75
+ }
76
+ // Cleanup
77
+ store.close();
78
+ console.log('\n=== Test Complete ===');
79
+ }
80
+ catch (err) {
81
+ console.error('\n❌ Test failed:', err.message);
82
+ console.error(err.stack);
83
+ }
84
+ }
85
+ async function testStoreTypeDetection() {
86
+ console.log('\n=== Store Type Detection Test ===\n');
87
+ const sqliteStore = await createSQLiteStore({ baseDir: '.agent/sessions' });
88
+ const jsonlStore = await createSessionStore({ baseDir: '.agent/sessions' });
89
+ console.log('SQLite store checks:');
90
+ console.log(' "saveCheckpoint" in store:', 'saveCheckpoint' in sqliteStore);
91
+ console.log(' typeof store.saveCheckpoint:', typeof sqliteStore.saveCheckpoint);
92
+ console.log(' "appendEntry" in store:', 'appendEntry' in sqliteStore);
93
+ console.log('\nJSONL store checks:');
94
+ console.log(' "saveCheckpoint" in store:', 'saveCheckpoint' in jsonlStore);
95
+ console.log(' typeof (store as any).saveCheckpoint:', typeof jsonlStore.saveCheckpoint);
96
+ console.log(' "appendEntry" in store:', 'appendEntry' in jsonlStore);
97
+ // Test the actual condition used in saveCheckpointToStore
98
+ console.log('\n=== saveCheckpointToStore detection ===');
99
+ function detectStoreType(store) {
100
+ if ('saveCheckpoint' in store && typeof store.saveCheckpoint === 'function') {
101
+ return 'SQLite (will use saveCheckpoint)';
102
+ }
103
+ else if ('appendEntry' in store && typeof store.appendEntry === 'function') {
104
+ return 'JSONL (will use appendEntry)';
105
+ }
106
+ return 'Unknown';
107
+ }
108
+ console.log('SQLite store detected as:', detectStoreType(sqliteStore));
109
+ console.log('JSONL store detected as:', detectStoreType(jsonlStore));
110
+ sqliteStore.close();
111
+ await jsonlStore.cleanup();
112
+ }
113
+ testSQLitePersistence().then(() => testStoreTypeDetection());
114
+ //# sourceMappingURL=test-sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-sqlite.js","sourceRoot":"","sources":["../../src/test-sqlite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Spawn Agent Tool
3
+ *
4
+ * Allows the LLM to autonomously spawn specialized subagents
5
+ * to handle tasks. This bridges the gap between the AgentRegistry
6
+ * (which defines available agents) and the LLM's ability to delegate work.
7
+ */
8
+ import type { ToolDefinition } from '../types.js';
9
+ import type { SpawnResult } from '../integrations/agent-registry.js';
10
+ /**
11
+ * Available agent types that can be spawned.
12
+ */
13
+ export declare const SPAWNABLE_AGENTS: readonly ["researcher", "coder", "reviewer", "architect", "debugger", "documenter"];
14
+ export type SpawnableAgent = typeof SPAWNABLE_AGENTS[number];
15
+ /**
16
+ * Input type for spawn_agent tool.
17
+ */
18
+ export interface SpawnAgentInput {
19
+ agent: SpawnableAgent;
20
+ task: string;
21
+ }
22
+ /**
23
+ * Type for the spawn function provided by ProductionAgent.
24
+ */
25
+ export type SpawnFunction = (agentName: string, task: string) => Promise<SpawnResult>;
26
+ /**
27
+ * Create a spawn_agent tool bound to a specific agent's spawnAgent method.
28
+ *
29
+ * @param spawnFn - The agent's spawnAgent method
30
+ * @returns A ToolDefinition that can be registered and used by the LLM
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * // In ProductionAgent.initializeFeatures():
35
+ * if (this.agentRegistry) {
36
+ * const boundTool = createBoundSpawnAgentTool(
37
+ * (name, task) => this.spawnAgent(name, task)
38
+ * );
39
+ * this.tools.set(boundTool.name, boundTool);
40
+ * }
41
+ * ```
42
+ */
43
+ export declare function createBoundSpawnAgentTool(spawnFn: SpawnFunction): ToolDefinition;
44
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/tools/agent.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAMrE;;GAEG;AACH,eAAO,MAAM,gBAAgB,qFAOnB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,cAAc,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AA6CD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AAEtF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,aAAa,GAAG,cAAc,CAsChF"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Spawn Agent Tool
3
+ *
4
+ * Allows the LLM to autonomously spawn specialized subagents
5
+ * to handle tasks. This bridges the gap between the AgentRegistry
6
+ * (which defines available agents) and the LLM's ability to delegate work.
7
+ */
8
+ // =============================================================================
9
+ // CONSTANTS
10
+ // =============================================================================
11
+ /**
12
+ * Available agent types that can be spawned.
13
+ */
14
+ export const SPAWNABLE_AGENTS = [
15
+ 'researcher',
16
+ 'coder',
17
+ 'reviewer',
18
+ 'architect',
19
+ 'debugger',
20
+ 'documenter',
21
+ ];
22
+ // =============================================================================
23
+ // TOOL DEFINITION
24
+ // =============================================================================
25
+ /**
26
+ * JSON Schema parameters for the spawn_agent tool.
27
+ */
28
+ const spawnAgentParameters = {
29
+ type: 'object',
30
+ properties: {
31
+ agent: {
32
+ type: 'string',
33
+ enum: SPAWNABLE_AGENTS,
34
+ description: 'The specialized agent to spawn',
35
+ },
36
+ task: {
37
+ type: 'string',
38
+ description: 'The specific task for the agent to complete',
39
+ },
40
+ },
41
+ required: ['agent', 'task'],
42
+ };
43
+ /**
44
+ * Description for the spawn_agent tool.
45
+ */
46
+ const SPAWN_AGENT_DESCRIPTION = `Spawn a specialized subagent to handle a specific task autonomously.
47
+
48
+ Available agents:
49
+ - researcher: Explores codebases, finds files, gathers information
50
+ - coder: Writes and modifies code
51
+ - reviewer: Reviews code for quality, bugs, and best practices
52
+ - architect: Makes system design decisions
53
+ - debugger: Troubleshoots issues and investigates bugs
54
+ - documenter: Writes documentation
55
+
56
+ The subagent runs with its own context, executes the task, and returns results.
57
+ Use this for tasks that benefit from specialized focus or parallel work.`;
58
+ /**
59
+ * Create a spawn_agent tool bound to a specific agent's spawnAgent method.
60
+ *
61
+ * @param spawnFn - The agent's spawnAgent method
62
+ * @returns A ToolDefinition that can be registered and used by the LLM
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * // In ProductionAgent.initializeFeatures():
67
+ * if (this.agentRegistry) {
68
+ * const boundTool = createBoundSpawnAgentTool(
69
+ * (name, task) => this.spawnAgent(name, task)
70
+ * );
71
+ * this.tools.set(boundTool.name, boundTool);
72
+ * }
73
+ * ```
74
+ */
75
+ export function createBoundSpawnAgentTool(spawnFn) {
76
+ return {
77
+ name: 'spawn_agent',
78
+ description: SPAWN_AGENT_DESCRIPTION,
79
+ parameters: spawnAgentParameters,
80
+ dangerLevel: 'moderate',
81
+ execute: async (args) => {
82
+ const input = args;
83
+ // Validate agent name
84
+ if (!SPAWNABLE_AGENTS.includes(input.agent)) {
85
+ return {
86
+ success: false,
87
+ output: `Invalid agent: ${input.agent}. Available agents: ${SPAWNABLE_AGENTS.join(', ')}`,
88
+ };
89
+ }
90
+ // Validate task
91
+ if (!input.task || typeof input.task !== 'string') {
92
+ return {
93
+ success: false,
94
+ output: 'Task is required and must be a string',
95
+ };
96
+ }
97
+ const result = await spawnFn(input.agent, input.task);
98
+ return {
99
+ success: result.success,
100
+ output: result.output,
101
+ metadata: {
102
+ agent: input.agent,
103
+ task: input.task,
104
+ metrics: result.metrics,
105
+ },
106
+ };
107
+ },
108
+ };
109
+ }
110
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/tools/agent.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,YAAY;IACZ,OAAO;IACP,UAAU;IACV,WAAW;IACX,UAAU;IACV,YAAY;CACJ,CAAC;AAYX,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,oBAAoB,GAA4B;IACpD,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,gBAAgB;YACtB,WAAW,EAAE,gCAAgC;SAC9C;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,6CAA6C;SAC3D;KACF;IACD,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,uBAAuB,GAAG;;;;;;;;;;;yEAWyC,CAAC;AAW1E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAsB;IAC9D,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,uBAAuB;QACpC,UAAU,EAAE,oBAAoB;QAChC,WAAW,EAAE,UAAU;QACvB,OAAO,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE;YAC/C,MAAM,KAAK,GAAG,IAAkC,CAAC;YAEjD,sBAAsB;YACtB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAuB,CAAC,EAAE,CAAC;gBAC9D,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,kBAAkB,KAAK,CAAC,KAAK,uBAAuB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBAC1F,CAAC;YACJ,CAAC;YAED,gBAAgB;YAChB,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAClD,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,uCAAuC;iBAChD,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAEtD,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE;oBACR,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,OAAO,EAAE,MAAM,CAAC,OAAO;iBACxB;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Lesson 3: Bash Tool
3
+ *
4
+ * Tool for executing shell commands with safety checks.
5
+ */
6
+ import { z } from 'zod';
7
+ /**
8
+ * Execute a bash command.
9
+ *
10
+ * Key safety features:
11
+ * 1. Danger classification for permission checking
12
+ * 2. Timeout to prevent hanging
13
+ * 3. Output capture with size limits
14
+ * 4. Non-interactive execution
15
+ */
16
+ export declare const bashTool: import("./types.js").ToolDefinition<z.ZodObject<{
17
+ command: z.ZodString;
18
+ cwd: z.ZodOptional<z.ZodString>;
19
+ timeout: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
20
+ }, "strip", z.ZodTypeAny, {
21
+ command: string;
22
+ timeout: number;
23
+ cwd?: string | undefined;
24
+ }, {
25
+ command: string;
26
+ timeout?: number | undefined;
27
+ cwd?: string | undefined;
28
+ }>>;
29
+ export declare const grepTool: import("./types.js").ToolDefinition<z.ZodObject<{
30
+ pattern: z.ZodString;
31
+ path: z.ZodString;
32
+ recursive: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
33
+ }, "strip", z.ZodTypeAny, {
34
+ path: string;
35
+ pattern: string;
36
+ recursive: boolean;
37
+ }, {
38
+ path: string;
39
+ pattern: string;
40
+ recursive?: boolean | undefined;
41
+ }>>;
42
+ export declare const globTool: import("./types.js").ToolDefinition<z.ZodObject<{
43
+ pattern: z.ZodString;
44
+ path: z.ZodDefault<z.ZodOptional<z.ZodString>>;
45
+ }, "strip", z.ZodTypeAny, {
46
+ path: string;
47
+ pattern: string;
48
+ }, {
49
+ pattern: string;
50
+ path?: string | undefined;
51
+ }>>;
52
+ //# sourceMappingURL=bash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../../src/tools/bash.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAgBxB;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;GA6GpB,CAAC;AAYF,eAAO,MAAM,QAAQ;;;;;;;;;;;;GAWpB,CAAC;AAOF,eAAO,MAAM,QAAQ;;;;;;;;;GAUpB,CAAC"}