lonny-agent 0.2.6 → 0.2.7

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 (475) hide show
  1. package/.github/workflows/ci.yml +21 -0
  2. package/AGENTS.md +106 -0
  3. package/CHANGELOG.md +24 -0
  4. package/dist/agent/__tests__/session-restore.test.d.ts +2 -0
  5. package/dist/agent/__tests__/session-restore.test.d.ts.map +1 -0
  6. package/dist/agent/__tests__/session-restore.test.js +260 -0
  7. package/dist/agent/__tests__/session-restore.test.js.map +1 -0
  8. package/dist/agent/commands.d.ts +26 -0
  9. package/dist/agent/commands.d.ts.map +1 -0
  10. package/dist/agent/commands.js +253 -0
  11. package/dist/agent/commands.js.map +1 -0
  12. package/dist/agent/compaction.js +8 -1
  13. package/dist/agent/compaction.js.map +1 -1
  14. package/dist/agent/index.d.ts +2 -1
  15. package/dist/agent/index.d.ts.map +1 -1
  16. package/dist/agent/index.js +2 -2
  17. package/dist/agent/index.js.map +1 -1
  18. package/dist/agent/memory.d.ts +12 -0
  19. package/dist/agent/memory.d.ts.map +1 -0
  20. package/dist/agent/memory.js +51 -0
  21. package/dist/agent/memory.js.map +1 -0
  22. package/dist/agent/prompt-builder.d.ts +6 -1
  23. package/dist/agent/prompt-builder.d.ts.map +1 -1
  24. package/dist/agent/prompt-builder.js +89 -26
  25. package/dist/agent/prompt-builder.js.map +1 -1
  26. package/dist/agent/providers/openai.d.ts +1 -0
  27. package/dist/agent/providers/openai.d.ts.map +1 -1
  28. package/dist/agent/providers/openai.js +16 -3
  29. package/dist/agent/providers/openai.js.map +1 -1
  30. package/dist/agent/session-chat.d.ts +3 -0
  31. package/dist/agent/session-chat.d.ts.map +1 -0
  32. package/dist/agent/session-chat.js +384 -0
  33. package/dist/agent/session-chat.js.map +1 -0
  34. package/dist/agent/session-display.d.ts +29 -0
  35. package/dist/agent/session-display.d.ts.map +1 -0
  36. package/dist/agent/session-display.js +179 -0
  37. package/dist/agent/session-display.js.map +1 -0
  38. package/dist/agent/session-persistence.d.ts +55 -0
  39. package/dist/agent/session-persistence.d.ts.map +1 -0
  40. package/dist/agent/session-persistence.js +101 -0
  41. package/dist/agent/session-persistence.js.map +1 -0
  42. package/dist/agent/session-utils.d.ts +5 -0
  43. package/dist/agent/session-utils.d.ts.map +1 -0
  44. package/dist/agent/session-utils.js +51 -0
  45. package/dist/agent/session-utils.js.map +1 -0
  46. package/dist/agent/session.d.ts +15 -17
  47. package/dist/agent/session.d.ts.map +1 -1
  48. package/dist/agent/session.js +226 -608
  49. package/dist/agent/session.js.map +1 -1
  50. package/dist/cli/index.d.ts +4 -0
  51. package/dist/cli/index.d.ts.map +1 -1
  52. package/dist/cli/index.js +67 -2
  53. package/dist/cli/index.js.map +1 -1
  54. package/dist/config/index.d.ts +2 -2
  55. package/dist/config/index.d.ts.map +1 -1
  56. package/dist/index.js +24 -3
  57. package/dist/index.js.map +1 -1
  58. package/dist/tools/__tests__/bash.test.js +168 -1
  59. package/dist/tools/__tests__/bash.test.js.map +1 -1
  60. package/dist/tools/__tests__/edit.test.js +253 -6
  61. package/dist/tools/__tests__/edit.test.js.map +1 -1
  62. package/dist/tools/__tests__/fetch.test.js +1 -1
  63. package/dist/tools/__tests__/fetch.test.js.map +1 -1
  64. package/dist/tools/__tests__/glob.test.js +1 -1
  65. package/dist/tools/__tests__/glob.test.js.map +1 -1
  66. package/dist/tools/__tests__/grep.test.js +1 -1
  67. package/dist/tools/__tests__/grep.test.js.map +1 -1
  68. package/dist/tools/__tests__/ls.test.js +1 -1
  69. package/dist/tools/__tests__/ls.test.js.map +1 -1
  70. package/dist/tools/__tests__/read.test.js +1 -1
  71. package/dist/tools/__tests__/read.test.js.map +1 -1
  72. package/dist/tools/__tests__/registry.test.js +313 -0
  73. package/dist/tools/__tests__/registry.test.js.map +1 -1
  74. package/dist/tools/__tests__/write_plan.test.js +1 -1
  75. package/dist/tools/__tests__/write_plan.test.js.map +1 -1
  76. package/dist/tools/bash.d.ts.map +1 -1
  77. package/dist/tools/bash.js +659 -39
  78. package/dist/tools/bash.js.map +1 -1
  79. package/dist/tools/codebase/ast/__tests__/ast-edit-demo.d.ts +2 -0
  80. package/dist/tools/codebase/ast/__tests__/ast-edit-demo.d.ts.map +1 -0
  81. package/dist/tools/codebase/ast/__tests__/ast-edit-demo.js +7 -0
  82. package/dist/tools/codebase/ast/__tests__/ast-edit-demo.js.map +1 -0
  83. package/dist/tools/codebase/ast/__tests__/ast-edit-final.d.ts +6 -0
  84. package/dist/tools/codebase/ast/__tests__/ast-edit-final.d.ts.map +1 -0
  85. package/dist/tools/codebase/ast/__tests__/ast-edit-final.js +11 -0
  86. package/dist/tools/codebase/ast/__tests__/ast-edit-final.js.map +1 -0
  87. package/dist/tools/codebase/ast/__tests__/ast-edit-test.d.ts +2 -0
  88. package/dist/tools/codebase/ast/__tests__/ast-edit-test.d.ts.map +1 -0
  89. package/dist/tools/codebase/ast/__tests__/ast-edit-test.js +9 -0
  90. package/dist/tools/codebase/ast/__tests__/ast-edit-test.js.map +1 -0
  91. package/dist/tools/codebase/ast/__tests__/integration.test.d.ts +2 -0
  92. package/dist/tools/codebase/ast/__tests__/integration.test.d.ts.map +1 -0
  93. package/dist/tools/codebase/ast/__tests__/integration.test.js +415 -0
  94. package/dist/tools/codebase/ast/__tests__/integration.test.js.map +1 -0
  95. package/dist/tools/codebase/ast/__tests__/tree-sitter.test.d.ts +2 -0
  96. package/dist/tools/codebase/ast/__tests__/tree-sitter.test.d.ts.map +1 -0
  97. package/dist/tools/codebase/ast/__tests__/tree-sitter.test.js +414 -0
  98. package/dist/tools/codebase/ast/__tests__/tree-sitter.test.js.map +1 -0
  99. package/dist/tools/codebase/ast/adapter.d.ts +23 -0
  100. package/dist/tools/codebase/ast/adapter.d.ts.map +1 -0
  101. package/dist/tools/codebase/ast/adapter.js +11 -0
  102. package/dist/tools/codebase/ast/adapter.js.map +1 -0
  103. package/dist/tools/codebase/ast/tools.d.ts +3 -0
  104. package/dist/tools/codebase/ast/tools.d.ts.map +1 -0
  105. package/dist/tools/codebase/ast/tools.js +286 -0
  106. package/dist/tools/codebase/ast/tools.js.map +1 -0
  107. package/dist/tools/codebase/ast/tree-sitter-adapter.d.ts +3 -0
  108. package/dist/tools/codebase/ast/tree-sitter-adapter.d.ts.map +1 -0
  109. package/dist/tools/codebase/ast/tree-sitter-adapter.js +412 -0
  110. package/dist/tools/codebase/ast/tree-sitter-adapter.js.map +1 -0
  111. package/dist/tools/codebase/ast/tree-sitter-converters.d.ts +4 -0
  112. package/dist/tools/codebase/ast/tree-sitter-converters.d.ts.map +1 -0
  113. package/dist/tools/codebase/ast/tree-sitter-converters.js +447 -0
  114. package/dist/tools/codebase/ast/tree-sitter-converters.js.map +1 -0
  115. package/dist/tools/codebase/ast/types.d.ts +103 -0
  116. package/dist/tools/codebase/ast/types.d.ts.map +1 -0
  117. package/dist/tools/codebase/ast/types.js +2 -0
  118. package/dist/tools/codebase/ast/types.js.map +1 -0
  119. package/dist/tools/codebase/ast/wasm/tree-sitter-python.wasm +0 -0
  120. package/dist/tools/codebase/ast/wasm/tree-sitter-tsx.wasm +0 -0
  121. package/dist/tools/codebase/ast/wasm/tree-sitter-typescript.wasm +0 -0
  122. package/dist/tools/codebase/ast/wasm/tree-sitter.wasm +0 -0
  123. package/dist/tools/codebase/ast/wasm/web-tree-sitter.wasm +0 -0
  124. package/dist/tools/codebase/find.d.ts +3 -0
  125. package/dist/tools/codebase/find.d.ts.map +1 -0
  126. package/dist/tools/codebase/find.js +61 -0
  127. package/dist/tools/codebase/find.js.map +1 -0
  128. package/dist/tools/codebase/glob.d.ts +3 -0
  129. package/dist/tools/codebase/glob.d.ts.map +1 -0
  130. package/dist/tools/codebase/glob.js +37 -0
  131. package/dist/tools/codebase/glob.js.map +1 -0
  132. package/dist/tools/codebase/grep.d.ts +3 -0
  133. package/dist/tools/codebase/grep.d.ts.map +1 -0
  134. package/dist/tools/codebase/grep.js +169 -0
  135. package/dist/tools/codebase/grep.js.map +1 -0
  136. package/dist/tools/codebase/ls.d.ts +3 -0
  137. package/dist/tools/codebase/ls.d.ts.map +1 -0
  138. package/dist/tools/codebase/ls.js +39 -0
  139. package/dist/tools/codebase/ls.js.map +1 -0
  140. package/dist/tools/codebase/read.d.ts +10 -0
  141. package/dist/tools/codebase/read.d.ts.map +1 -0
  142. package/dist/tools/codebase/read.js +81 -0
  143. package/dist/tools/codebase/read.js.map +1 -0
  144. package/dist/tools/delete_memory.d.ts +3 -0
  145. package/dist/tools/delete_memory.d.ts.map +1 -0
  146. package/dist/tools/delete_memory.js +46 -0
  147. package/dist/tools/delete_memory.js.map +1 -0
  148. package/dist/tools/edit/diff-compute.d.ts +4 -0
  149. package/dist/tools/edit/diff-compute.d.ts.map +1 -0
  150. package/dist/tools/edit/diff-compute.js +18 -0
  151. package/dist/tools/edit/diff-compute.js.map +1 -0
  152. package/dist/tools/edit/diff-render.d.ts +18 -0
  153. package/dist/tools/edit/diff-render.d.ts.map +1 -0
  154. package/dist/tools/edit/diff-render.js +128 -0
  155. package/dist/tools/edit/diff-render.js.map +1 -0
  156. package/dist/tools/edit/edit.d.ts +4 -0
  157. package/dist/tools/edit/edit.d.ts.map +1 -0
  158. package/dist/tools/edit/edit.js +440 -0
  159. package/dist/tools/edit/edit.js.map +1 -0
  160. package/dist/tools/edit/matcher.d.ts +24 -0
  161. package/dist/tools/edit/matcher.d.ts.map +1 -0
  162. package/dist/tools/edit/matcher.js +66 -0
  163. package/dist/tools/edit/matcher.js.map +1 -0
  164. package/dist/tools/edit/parser.d.ts +10 -0
  165. package/dist/tools/edit/parser.d.ts.map +1 -0
  166. package/dist/tools/edit/parser.js +120 -0
  167. package/dist/tools/edit/parser.js.map +1 -0
  168. package/dist/tools/edit/types.d.ts +16 -0
  169. package/dist/tools/edit/types.d.ts.map +1 -0
  170. package/dist/tools/edit/types.js +2 -0
  171. package/dist/tools/edit/types.js.map +1 -0
  172. package/dist/tools/edit/write_plan.d.ts +5 -0
  173. package/dist/tools/edit/write_plan.d.ts.map +1 -0
  174. package/dist/tools/edit/write_plan.js +98 -0
  175. package/dist/tools/edit/write_plan.js.map +1 -0
  176. package/dist/tools/edit.d.ts.map +1 -1
  177. package/dist/tools/edit.js +66 -1
  178. package/dist/tools/edit.js.map +1 -1
  179. package/dist/tools/execute/bash/constants.d.ts +24 -0
  180. package/dist/tools/execute/bash/constants.d.ts.map +1 -0
  181. package/dist/tools/execute/bash/constants.js +88 -0
  182. package/dist/tools/execute/bash/constants.js.map +1 -0
  183. package/dist/tools/execute/bash/errors.d.ts +39 -0
  184. package/dist/tools/execute/bash/errors.d.ts.map +1 -0
  185. package/dist/tools/execute/bash/errors.js +249 -0
  186. package/dist/tools/execute/bash/errors.js.map +1 -0
  187. package/dist/tools/execute/bash/execution.d.ts +18 -0
  188. package/dist/tools/execute/bash/execution.d.ts.map +1 -0
  189. package/dist/tools/execute/bash/execution.js +207 -0
  190. package/dist/tools/execute/bash/execution.js.map +1 -0
  191. package/dist/tools/execute/bash/index.d.ts +3 -0
  192. package/dist/tools/execute/bash/index.d.ts.map +1 -0
  193. package/dist/tools/execute/bash/index.js +117 -0
  194. package/dist/tools/execute/bash/index.js.map +1 -0
  195. package/dist/tools/execute/bash/platform.d.ts +6 -0
  196. package/dist/tools/execute/bash/platform.d.ts.map +1 -0
  197. package/dist/tools/execute/bash/platform.js +64 -0
  198. package/dist/tools/execute/bash/platform.js.map +1 -0
  199. package/dist/tools/execute/bash/security.d.ts +12 -0
  200. package/dist/tools/execute/bash/security.d.ts.map +1 -0
  201. package/dist/tools/execute/bash/security.js +26 -0
  202. package/dist/tools/execute/bash/security.js.map +1 -0
  203. package/dist/tools/execute/bash/validation.d.ts +16 -0
  204. package/dist/tools/execute/bash/validation.d.ts.map +1 -0
  205. package/dist/tools/execute/bash/validation.js +57 -0
  206. package/dist/tools/execute/bash/validation.js.map +1 -0
  207. package/dist/tools/execute/bash.d.ts +3 -0
  208. package/dist/tools/execute/bash.d.ts.map +1 -0
  209. package/dist/tools/execute/bash.js +728 -0
  210. package/dist/tools/execute/bash.js.map +1 -0
  211. package/dist/tools/execute/git.d.ts +3 -0
  212. package/dist/tools/execute/git.d.ts.map +1 -0
  213. package/dist/tools/execute/git.js +183 -0
  214. package/dist/tools/execute/git.js.map +1 -0
  215. package/dist/tools/execute/task_complete.d.ts +7 -0
  216. package/dist/tools/execute/task_complete.d.ts.map +1 -0
  217. package/dist/tools/execute/task_complete.js +38 -0
  218. package/dist/tools/execute/task_complete.js.map +1 -0
  219. package/dist/tools/fetch.d.ts.map +1 -1
  220. package/dist/tools/fetch.js +2 -0
  221. package/dist/tools/fetch.js.map +1 -1
  222. package/dist/tools/find.d.ts.map +1 -1
  223. package/dist/tools/find.js +2 -0
  224. package/dist/tools/find.js.map +1 -1
  225. package/dist/tools/git.d.ts.map +1 -1
  226. package/dist/tools/git.js +2 -0
  227. package/dist/tools/git.js.map +1 -1
  228. package/dist/tools/glob.d.ts.map +1 -1
  229. package/dist/tools/glob.js +2 -0
  230. package/dist/tools/glob.js.map +1 -1
  231. package/dist/tools/grep.d.ts.map +1 -1
  232. package/dist/tools/grep.js +2 -0
  233. package/dist/tools/grep.js.map +1 -1
  234. package/dist/tools/install/clawhub.d.ts +26 -0
  235. package/dist/tools/install/clawhub.d.ts.map +1 -0
  236. package/dist/tools/install/clawhub.js +182 -0
  237. package/dist/tools/install/clawhub.js.map +1 -0
  238. package/dist/tools/install/constants.d.ts +5 -0
  239. package/dist/tools/install/constants.d.ts.map +1 -0
  240. package/dist/tools/install/constants.js +5 -0
  241. package/dist/tools/install/constants.js.map +1 -0
  242. package/dist/tools/install/install_skill.d.ts +3 -0
  243. package/dist/tools/install/install_skill.d.ts.map +1 -0
  244. package/dist/tools/install/install_skill.js +132 -0
  245. package/dist/tools/install/install_skill.js.map +1 -0
  246. package/dist/tools/install/npm.d.ts +8 -0
  247. package/dist/tools/install/npm.d.ts.map +1 -0
  248. package/dist/tools/install/npm.js +52 -0
  249. package/dist/tools/install/npm.js.map +1 -0
  250. package/dist/tools/install/skill-content.d.ts +9 -0
  251. package/dist/tools/install/skill-content.d.ts.map +1 -0
  252. package/dist/tools/install/skill-content.js +89 -0
  253. package/dist/tools/install/skill-content.js.map +1 -0
  254. package/dist/tools/install_skill.d.ts.map +1 -1
  255. package/dist/tools/install_skill.js +2 -0
  256. package/dist/tools/install_skill.js.map +1 -1
  257. package/dist/tools/list_memory.d.ts +3 -0
  258. package/dist/tools/list_memory.d.ts.map +1 -0
  259. package/dist/tools/list_memory.js +55 -0
  260. package/dist/tools/list_memory.js.map +1 -0
  261. package/dist/tools/ls.d.ts.map +1 -1
  262. package/dist/tools/ls.js +2 -0
  263. package/dist/tools/ls.js.map +1 -1
  264. package/dist/tools/memory/delete_memory.d.ts +3 -0
  265. package/dist/tools/memory/delete_memory.d.ts.map +1 -0
  266. package/dist/tools/memory/delete_memory.js +46 -0
  267. package/dist/tools/memory/delete_memory.js.map +1 -0
  268. package/dist/tools/memory/list_memory.d.ts +3 -0
  269. package/dist/tools/memory/list_memory.d.ts.map +1 -0
  270. package/dist/tools/memory/list_memory.js +55 -0
  271. package/dist/tools/memory/list_memory.js.map +1 -0
  272. package/dist/tools/memory/save_memory.d.ts +3 -0
  273. package/dist/tools/memory/save_memory.d.ts.map +1 -0
  274. package/dist/tools/memory/save_memory.js +45 -0
  275. package/dist/tools/memory/save_memory.js.map +1 -0
  276. package/dist/tools/read.d.ts.map +1 -1
  277. package/dist/tools/read.js +2 -0
  278. package/dist/tools/read.js.map +1 -1
  279. package/dist/tools/registry.d.ts +7 -2
  280. package/dist/tools/registry.d.ts.map +1 -1
  281. package/dist/tools/registry.js +112 -17
  282. package/dist/tools/registry.js.map +1 -1
  283. package/dist/tools/save_memory.d.ts +3 -0
  284. package/dist/tools/save_memory.d.ts.map +1 -0
  285. package/dist/tools/save_memory.js +45 -0
  286. package/dist/tools/save_memory.js.map +1 -0
  287. package/dist/tools/search.d.ts.map +1 -1
  288. package/dist/tools/search.js +2 -0
  289. package/dist/tools/search.js.map +1 -1
  290. package/dist/tools/tree.d.ts +12 -0
  291. package/dist/tools/tree.d.ts.map +1 -0
  292. package/dist/tools/tree.js +87 -0
  293. package/dist/tools/tree.js.map +1 -0
  294. package/dist/tools/types.d.ts +12 -0
  295. package/dist/tools/types.d.ts.map +1 -1
  296. package/dist/tools/web/fetch.d.ts +3 -0
  297. package/dist/tools/web/fetch.d.ts.map +1 -0
  298. package/dist/tools/web/fetch.js +49 -0
  299. package/dist/tools/web/fetch.js.map +1 -0
  300. package/dist/tools/web/search.d.ts +3 -0
  301. package/dist/tools/web/search.d.ts.map +1 -0
  302. package/dist/tools/web/search.js +134 -0
  303. package/dist/tools/web/search.js.map +1 -0
  304. package/dist/tools/write_plan.d.ts.map +1 -1
  305. package/dist/tools/write_plan.js +2 -0
  306. package/dist/tools/write_plan.js.map +1 -1
  307. package/dist/tui/commands.d.ts +4 -0
  308. package/dist/tui/commands.d.ts.map +1 -0
  309. package/dist/tui/commands.js +118 -0
  310. package/dist/tui/commands.js.map +1 -0
  311. package/dist/tui/components/colors.d.ts +36 -0
  312. package/dist/tui/components/colors.d.ts.map +1 -0
  313. package/dist/tui/components/colors.js +48 -0
  314. package/dist/tui/components/colors.js.map +1 -0
  315. package/dist/tui/components/header-bar.d.ts +26 -0
  316. package/dist/tui/components/header-bar.d.ts.map +1 -0
  317. package/dist/tui/components/header-bar.js +78 -0
  318. package/dist/tui/components/header-bar.js.map +1 -0
  319. package/dist/tui/components/index.d.ts +9 -0
  320. package/dist/tui/components/index.d.ts.map +1 -0
  321. package/dist/tui/components/index.js +9 -0
  322. package/dist/tui/components/index.js.map +1 -0
  323. package/dist/tui/components/landing-screen.d.ts +12 -0
  324. package/dist/tui/components/landing-screen.d.ts.map +1 -0
  325. package/dist/tui/components/landing-screen.js +53 -0
  326. package/dist/tui/components/landing-screen.js.map +1 -0
  327. package/dist/tui/components/pixel-logo.d.ts +5 -0
  328. package/dist/tui/components/pixel-logo.d.ts.map +1 -0
  329. package/dist/tui/components/pixel-logo.js +27 -0
  330. package/dist/tui/components/pixel-logo.js.map +1 -0
  331. package/dist/tui/components/plan-utils.d.ts +11 -0
  332. package/dist/tui/components/plan-utils.d.ts.map +1 -0
  333. package/dist/tui/components/plan-utils.js +62 -0
  334. package/dist/tui/components/plan-utils.js.map +1 -0
  335. package/dist/tui/components/plans-list.d.ts +18 -0
  336. package/dist/tui/components/plans-list.d.ts.map +1 -0
  337. package/dist/tui/components/plans-list.js +46 -0
  338. package/dist/tui/components/plans-list.js.map +1 -0
  339. package/dist/tui/components/rich-footer.d.ts +29 -0
  340. package/dist/tui/components/rich-footer.d.ts.map +1 -0
  341. package/dist/tui/components/rich-footer.js +124 -0
  342. package/dist/tui/components/rich-footer.js.map +1 -0
  343. package/dist/tui/components/todo-panel.d.ts +14 -0
  344. package/dist/tui/components/todo-panel.d.ts.map +1 -0
  345. package/dist/tui/components/todo-panel.js +83 -0
  346. package/dist/tui/components/todo-panel.js.map +1 -0
  347. package/dist/tui/components.d.ts.map +1 -1
  348. package/dist/tui/components.js +14 -7
  349. package/dist/tui/components.js.map +1 -1
  350. package/dist/tui/index.d.ts +2 -1
  351. package/dist/tui/index.d.ts.map +1 -1
  352. package/dist/tui/index.js +99 -505
  353. package/dist/tui/index.js.map +1 -1
  354. package/dist/tui/overlays.d.ts +28 -0
  355. package/dist/tui/overlays.d.ts.map +1 -0
  356. package/dist/tui/overlays.js +154 -0
  357. package/dist/tui/overlays.js.map +1 -0
  358. package/dist/tui/themes.d.ts +5 -0
  359. package/dist/tui/themes.d.ts.map +1 -0
  360. package/dist/tui/themes.js +38 -0
  361. package/dist/tui/themes.js.map +1 -0
  362. package/dist/web/index.d.ts.map +1 -1
  363. package/dist/web/index.js +60 -122
  364. package/dist/web/index.js.map +1 -1
  365. package/dist/web/public/index.html +1 -1
  366. package/dist/web/public/messages.js +41 -25
  367. package/dist/web/public/state.js +72 -72
  368. package/dist/web/public/style.css +1126 -996
  369. package/dist/web/public/websocket.js +267 -267
  370. package/dist/web/session-bridge.d.ts.map +1 -1
  371. package/dist/web/session-bridge.js +82 -3
  372. package/dist/web/session-bridge.js.map +1 -1
  373. package/docs/ast-tools.md +117 -0
  374. package/package.json +60 -55
  375. package/scripts/check-line-count.mjs +53 -0
  376. package/scripts/copy-ast-wasm.mjs +32 -0
  377. package/src/agent/__tests__/session-restore.test.ts +284 -0
  378. package/src/agent/commands.ts +274 -0
  379. package/src/agent/compaction.ts +9 -2
  380. package/src/agent/index.ts +30 -25
  381. package/src/agent/memory.ts +60 -0
  382. package/src/agent/prompt-builder.ts +100 -26
  383. package/src/agent/providers/anthropic.ts +179 -179
  384. package/src/agent/providers/google.ts +210 -210
  385. package/src/agent/providers/ollama.ts +186 -186
  386. package/src/agent/providers/openai.ts +18 -3
  387. package/src/agent/session-chat.ts +480 -0
  388. package/src/agent/session-display.ts +195 -0
  389. package/src/agent/session-persistence.ts +146 -0
  390. package/src/agent/session-utils.ts +54 -0
  391. package/src/agent/session.ts +261 -718
  392. package/src/cli/index.ts +73 -4
  393. package/src/config/index.ts +342 -342
  394. package/src/index.ts +30 -3
  395. package/src/tools/__tests__/bash.test.ts +187 -1
  396. package/src/tools/__tests__/edit.test.ts +275 -11
  397. package/src/tools/__tests__/fetch.test.ts +1 -1
  398. package/src/tools/__tests__/glob.test.ts +1 -1
  399. package/src/tools/__tests__/grep.test.ts +1 -1
  400. package/src/tools/__tests__/ls.test.ts +1 -1
  401. package/src/tools/__tests__/read.test.ts +1 -1
  402. package/src/tools/__tests__/registry.test.ts +332 -0
  403. package/src/tools/__tests__/write_plan.test.ts +1 -1
  404. package/src/tools/codebase/ast/__tests__/integration.test.ts +452 -0
  405. package/src/tools/codebase/ast/__tests__/tree-sitter.test.ts +466 -0
  406. package/src/tools/codebase/ast/adapter.ts +44 -0
  407. package/src/tools/codebase/ast/tools.ts +322 -0
  408. package/src/tools/codebase/ast/tree-sitter-adapter.ts +468 -0
  409. package/src/tools/codebase/ast/tree-sitter-converters.ts +480 -0
  410. package/src/tools/codebase/ast/types.ts +102 -0
  411. package/src/tools/codebase/ast/wasm/tree-sitter-python.wasm +0 -0
  412. package/src/tools/codebase/ast/wasm/tree-sitter-tsx.wasm +0 -0
  413. package/src/tools/codebase/ast/wasm/tree-sitter-typescript.wasm +0 -0
  414. package/src/tools/codebase/ast/wasm/tree-sitter.wasm +0 -0
  415. package/src/tools/codebase/ast/wasm/web-tree-sitter.wasm +0 -0
  416. package/src/tools/{find.ts → codebase/find.ts} +4 -2
  417. package/src/tools/{glob.ts → codebase/glob.ts} +4 -2
  418. package/src/tools/{grep.ts → codebase/grep.ts} +4 -2
  419. package/src/tools/{ls.ts → codebase/ls.ts} +4 -2
  420. package/src/tools/{read.ts → codebase/read.ts} +5 -3
  421. package/src/tools/edit/diff-compute.ts +21 -0
  422. package/src/tools/edit/diff-render.ts +145 -0
  423. package/src/tools/edit/edit.ts +468 -0
  424. package/src/tools/edit/matcher.ts +70 -0
  425. package/src/tools/edit/parser.ts +131 -0
  426. package/src/tools/edit/types.ts +19 -0
  427. package/src/tools/{write_plan.ts → edit/write_plan.ts} +4 -2
  428. package/src/tools/execute/bash/constants.ts +93 -0
  429. package/src/tools/execute/bash/errors.ts +304 -0
  430. package/src/tools/execute/bash/execution.ts +211 -0
  431. package/src/tools/execute/bash/index.ts +131 -0
  432. package/src/tools/execute/bash/platform.ts +65 -0
  433. package/src/tools/execute/bash/security.ts +28 -0
  434. package/src/tools/execute/bash/validation.ts +78 -0
  435. package/src/tools/execute/git.ts +209 -0
  436. package/src/tools/execute/task_complete.ts +40 -0
  437. package/src/tools/install/clawhub.ts +222 -0
  438. package/src/tools/install/constants.ts +4 -0
  439. package/src/tools/install/install_skill.ts +150 -0
  440. package/src/tools/install/npm.ts +60 -0
  441. package/src/tools/install/skill-content.ts +108 -0
  442. package/src/tools/memory/delete_memory.ts +46 -0
  443. package/src/tools/memory/list_memory.ts +53 -0
  444. package/src/tools/memory/save_memory.ts +45 -0
  445. package/src/tools/registry.ts +119 -19
  446. package/src/tools/tree.ts +103 -0
  447. package/src/tools/types.ts +13 -0
  448. package/src/tools/{fetch.ts → web/fetch.ts} +4 -2
  449. package/src/tools/{search.ts → web/search.ts} +4 -2
  450. package/src/tui/commands.ts +135 -0
  451. package/src/tui/components/colors.ts +52 -0
  452. package/src/tui/components/header-bar.ts +88 -0
  453. package/src/tui/components/index.ts +8 -0
  454. package/src/tui/components/landing-screen.ts +67 -0
  455. package/src/tui/components/pixel-logo.ts +33 -0
  456. package/src/tui/components/plan-utils.ts +69 -0
  457. package/src/tui/components/plans-list.ts +55 -0
  458. package/src/tui/components/rich-footer.ts +146 -0
  459. package/src/tui/components/todo-panel.ts +95 -0
  460. package/src/tui/index.ts +335 -786
  461. package/src/tui/overlays.ts +203 -0
  462. package/src/tui/themes.ts +41 -0
  463. package/src/web/index.ts +64 -127
  464. package/src/web/public/index.html +1 -1
  465. package/src/web/public/messages.js +41 -25
  466. package/src/web/public/state.js +72 -72
  467. package/src/web/public/style.css +1126 -996
  468. package/src/web/public/websocket.js +267 -267
  469. package/src/web/session-bridge.ts +272 -193
  470. package/AGENT.md +0 -99
  471. package/src/tools/bash.ts +0 -125
  472. package/src/tools/edit.ts +0 -747
  473. package/src/tools/git.ts +0 -76
  474. package/src/tools/install_skill.ts +0 -539
  475. package/src/tui/components.ts +0 -635
@@ -0,0 +1,21 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ lint-and-test:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ - uses: actions/setup-node@v4
15
+ with:
16
+ node-version: 20
17
+ cache: npm
18
+ - run: npm ci
19
+ - run: npm run lint
20
+ - run: npm run check:lines
21
+ - run: npm t
package/AGENTS.md ADDED
@@ -0,0 +1,106 @@
1
+ # lonny-agent
2
+
3
+ AI coding agent optimized for per-call pricing. Supports three modes (`code`/`plan`/`ask`), multiple LLM providers, and TUI built with pi-tui.
4
+
5
+ ## Commands
6
+
7
+ ```bash
8
+ npm install # Install dependencies
9
+ npm run dev # Dev mode (tsx watch)
10
+ npm run build # Build (tsc + copy web/native assets)
11
+ npm start # Run built version
12
+ npm test # Run tests (vitest)
13
+ npm test:watch # Watch mode tests
14
+
15
+ # Lint & Format (Biome)
16
+ npm run lint # Check only
17
+ npm run lint:fix # Auto-fix
18
+ npm run format # Format all
19
+ npm run check # Lint + format check
20
+ npm run check:fix # Lint + format auto-fix
21
+ ```
22
+
23
+ ## Architecture
24
+
25
+ ```
26
+ src/
27
+ ├── agent/ # Session loop, LLM providers, event bus
28
+ ├── cli/ # CLI argument parsing (commander)
29
+ ├── config/ # Configuration loading (env, file, defaults)
30
+ ├── diff/ # File read tracking (prevents editing unread/external-modified files)
31
+ ├── tools/ # Tool implementations, organized by category
32
+ │ ├── codebase/ # read, glob, grep, find, ls
33
+ │ ├── edit/ # edit, write_plan
34
+ │ ├── execute/ # bash, git
35
+ │ ├── web/ # fetch, search
36
+ │ ├── memory/ # save_memory, list_memory, delete_memory
37
+ │ ├── install/ # install_skill
38
+ │ ├── tree.ts # Hierarchical tool tree builder
39
+ │ ├── types.ts # ToolDefinition, ToolTreeNode interfaces
40
+ │ ├── errors.ts # Error formatting utilities
41
+ │ └── registry.ts # ToolRegistry with registration & dispatch
42
+ ├── tui/ # Terminal UI components
43
+ ├── web/ # Web UI (WebSocket server + frontend)
44
+ └── pi-tui/ # Customized terminal UI library (copied, modified)
45
+ ```
46
+
47
+ ## Key constraints
48
+
49
+ - **Tool mode gating**: `ask` mode has only fetch/search; `plan` mode has read-only tools + write_plan; `code` mode has full edit capabilities
50
+ - **Tiered access**: core tools (read/edit/bash/glob/grep) passed directly to LLM API; extended tools accessible via `tool()` gateway proxy in `registry.ts`
51
+ - **File read tracking**: `edit` tool requires files to be read first (enforced by `FileReadTracker`)
52
+ - **Biome config**: 2-space indent, 100 line width, single quotes, as-needed semicolons; several lint rules are explicitly disabled
53
+
54
+ ## Tool tree hierarchy
55
+
56
+ Each tool definition has optional `category` (top-level) and `group` (second-level) metadata.
57
+ `prompt-builder.ts` uses `formatToolTreeForPrompt()` from `tools/tree.ts` to render a hierarchically
58
+ organized tool list in the system prompt (falls back to hardcoded lists if definitions not provided).
59
+
60
+ ### Tiered access (core vs gateway)
61
+
62
+ To reduce the LLM's tool selection burden, tools are split into two tiers:
63
+
64
+ - **Core tools** (direct access via API `tools` param): `read`, `edit`, `bash`, `glob`, `grep`
65
+ - **Extended tools** (invoked via `tool()` gateway): everything else
66
+
67
+ The LLM API only receives 6 tool definitions (5 core + `tool` gateway). The system prompt's
68
+ tool tree documents the full catalog, marking extended tools with `(via tool gateway)`.
69
+ When the model needs an extended tool, it calls `tool({ name: "...", params: {...} })`,
70
+ which proxies the call through `ToolRegistry.dispatch()`.
71
+
72
+ Current classification:
73
+
74
+ ```
75
+ Codebase
76
+ ├── Read → read
77
+ ├── Search
78
+ │ ├── By Pattern → glob, find
79
+ │ └── By Content → grep
80
+ └── List → ls
81
+ Edit
82
+ ├── File → edit
83
+ └── Plan → write_plan
84
+ Execute
85
+ ├── Shell → bash
86
+ └── Git → git
87
+ Web
88
+ ├── Fetch → fetch
89
+ └── Search Engine → search
90
+ Memory
91
+ ├── Save → save_memory
92
+ ├── Query → list_memory
93
+ └── Delete → delete_memory
94
+ Install
95
+ └── Skill → install_skill
96
+ ```
97
+
98
+ ## Git hooks
99
+
100
+ - `pre-commit`: lint-staged (auto-fix staged .ts/.js/.mjs with Biome)
101
+ - `commit-msg`: Conventional Commits required (`feat:`, `fix:`, `docs:`, `chore:`, etc.)
102
+
103
+ ## Testing
104
+
105
+ - Unit tests in `src/**/__tests__/*.test.ts`
106
+ - Run: `npm test` (vitest)
package/CHANGELOG.md ADDED
@@ -0,0 +1,24 @@
1
+ # Changelog
2
+
3
+ ## [Unreleased]
4
+
5
+ ### Added
6
+ - `ast_query` now supports `references` query type — finds all call sites of a
7
+ function in a file (e.g., `ast_query path=file.ts query=references nameFilter=foo`).
8
+ - `ast_edit` now supports `insert-method` edit type — inserts a method into an
9
+ existing class at the correct position with proper indentation.
10
+ (e.g., `ast_edit path=file.ts editType=insert-method className=MyClass methodCode="newMethod() { return 42 }"`).
11
+ - Added `Reference` type to AST types (line, column, context).
12
+ - Added `findReferences` method to `AstAdapter` interface.
13
+ - Added `insertMethodIntoClass` method to `AstAdapter` interface.
14
+ - Added multi-file batch edit integration test for `ast_edit`.
15
+ - Added CI workflow (`.github/workflows/ci.yml`) with lint, test, and
16
+ line-count check steps.
17
+ - Added `check:lines` npm script to detect source files exceeding 500 lines.
18
+ - Added `scripts/check-line-count.mjs` — scans `src/` (excluding `pi-tui`)
19
+ for `.ts` files over 500 lines.
20
+
21
+ ### Fixed
22
+ - Web UI and TUI now correctly parse todo items from plan files with
23
+ Chinese/emoji section headers (e.g., `## ✅ 已完成`, `## 🚧 待优化`).
24
+ Previously only English `## Todo` was recognized.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=session-restore.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-restore.test.d.ts","sourceRoot":"","sources":["../../../src/agent/__tests__/session-restore.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,260 @@
1
+ import * as crypto from 'node:crypto';
2
+ import * as fs from 'node:fs';
3
+ import * as os from 'node:os';
4
+ import * as path from 'node:path';
5
+ import { afterEach, beforeEach, describe, expect, test } from 'vitest';
6
+ import { Session } from '../session.js';
7
+ /**
8
+ * Helper: build a minimal Config with a project-subdir cwd for test session files.
9
+ * Using the project directory ensures detectPackageManager etc. find a valid cwd.
10
+ * Each test gets a fresh subdirectory that gets cleaned up after.
11
+ */
12
+ function testConfig() {
13
+ const testDir = path.join(process.cwd(), '.test-sessions', crypto.randomUUID().slice(0, 8));
14
+ fs.mkdirSync(testDir, { recursive: true });
15
+ // Create a package.json so detectPackageManager doesn't fail async
16
+ fs.writeFileSync(path.join(testDir, 'package.json'), JSON.stringify({ name: 'test' }), 'utf-8');
17
+ return {
18
+ mode: 'code',
19
+ model: 'test-model',
20
+ provider: 'openai',
21
+ apiKey: 'test-key',
22
+ baseUrl: 'http://test',
23
+ cwd: testDir,
24
+ autoApprove: true,
25
+ thinking: false,
26
+ reasoningEffort: 'medium',
27
+ enableCache: false,
28
+ strictTools: false,
29
+ contextWindow: 128_000,
30
+ };
31
+ }
32
+ /**
33
+ * Build the session file path matching what save() would write.
34
+ */
35
+ function sessionFilePath(cwd, sessionId) {
36
+ const { createHash } = require('node:crypto');
37
+ const absPath = path.resolve(cwd);
38
+ const hash = createHash('sha256').update(absPath, 'utf-8').digest('hex').slice(0, 12);
39
+ const dirName = path.basename(absPath);
40
+ const safeName = dirName.replace(/[<>:"/\\|?*]/g, '_');
41
+ const base = `${safeName}-${hash}`;
42
+ const sessionDir = path.join(os.homedir(), '.lonny', 'sessions');
43
+ return path.join(sessionDir, `${base}-${sessionId}.json`);
44
+ }
45
+ describe('Session save/load cycle', () => {
46
+ let config;
47
+ let sessionId;
48
+ let filePath;
49
+ beforeEach(() => {
50
+ config = testConfig();
51
+ const { randomUUID } = require('node:crypto');
52
+ sessionId = randomUUID().slice(0, 8);
53
+ filePath = sessionFilePath(config.cwd, sessionId);
54
+ // Ensure session directory exists
55
+ const dir = path.dirname(filePath);
56
+ if (!fs.existsSync(dir))
57
+ fs.mkdirSync(dir, { recursive: true });
58
+ });
59
+ afterEach(() => {
60
+ try {
61
+ if (fs.existsSync(filePath))
62
+ fs.unlinkSync(filePath);
63
+ }
64
+ catch {
65
+ /* ignore */
66
+ }
67
+ // Don't clean up .test-sessions dir — buildSystemPrompt fires async and may
68
+ // still be reading the cwd. The dir is gitignored and cleaned on restart.
69
+ });
70
+ test('restores assistant message with text + tool_calls + tool results', async () => {
71
+ const messages = [
72
+ { role: 'system', content: 'You are a helpful assistant.' },
73
+ { role: 'user', content: 'Fix the bug in the code.' },
74
+ {
75
+ role: 'assistant',
76
+ content: 'I see the root cause. Three fixes needed:\n\n1. Remove X\n2. Add Y',
77
+ tool_calls: [
78
+ { id: 'call_abc', name: 'edit', input: { file: 'test.ts', old: 'a', new: 'b' } },
79
+ { id: 'call_def', name: 'read', input: { file: 'test.ts' } },
80
+ ],
81
+ },
82
+ { role: 'tool', content: 'Edited test.ts', tool_call_id: 'call_abc', name: 'edit' },
83
+ { role: 'tool', content: 'File contents...', tool_call_id: 'call_def', name: 'read' },
84
+ { role: 'assistant', content: 'Done with fixes.' },
85
+ { role: 'user', content: 'Great, thanks!' },
86
+ ];
87
+ // Write session file (simulating what save() would produce)
88
+ const data = {
89
+ id: sessionId,
90
+ cwd: path.resolve(config.cwd),
91
+ messages,
92
+ totalInputTokens: 100,
93
+ totalOutputTokens: 50,
94
+ totalApiCalls: 2,
95
+ mode: 'code',
96
+ model: 'test-model',
97
+ provider: 'test-provider',
98
+ createdAt: new Date().toISOString(),
99
+ updatedAt: new Date().toISOString(),
100
+ };
101
+ fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');
102
+ // Load the session from disk
103
+ const session = await Session.load(config);
104
+ expect(session).not.toBeNull();
105
+ // Verify ALL messages are preserved
106
+ expect(session.messages.length).toBe(messages.length);
107
+ for (let i = 0; i < messages.length; i++) {
108
+ expect(session.messages[i].role).toBe(messages[i].role);
109
+ }
110
+ // Verify the critical assistant message (text + tool_calls)
111
+ const assistantWithTools = session.messages.find(m => m.role === 'assistant' && m.tool_calls && m.tool_calls.length > 0);
112
+ expect(assistantWithTools).toBeDefined();
113
+ expect(assistantWithTools.content).toContain('I see the root cause');
114
+ expect(assistantWithTools.tool_calls).toHaveLength(2);
115
+ // Verify tool results still reference the correct tool_call_ids
116
+ const toolMsgs = session.messages.filter(m => m.role === 'tool');
117
+ expect(toolMsgs).toHaveLength(2);
118
+ expect(toolMsgs[0].tool_call_id).toBe('call_abc');
119
+ expect(toolMsgs[1].tool_call_id).toBe('call_def');
120
+ });
121
+ test('preserves assistant message with text-only (no tool_calls)', async () => {
122
+ const messages = [
123
+ { role: 'system', content: 'system prompt' },
124
+ { role: 'user', content: 'Hello' },
125
+ { role: 'assistant', content: 'Hi there!' },
126
+ { role: 'user', content: 'How are you?' },
127
+ { role: 'assistant', content: "I'm great, thanks!" },
128
+ ];
129
+ const data = {
130
+ id: sessionId,
131
+ cwd: path.resolve(config.cwd),
132
+ messages,
133
+ totalInputTokens: 0,
134
+ totalOutputTokens: 0,
135
+ totalApiCalls: 0,
136
+ mode: 'code',
137
+ model: 'test-model',
138
+ provider: 'test-provider',
139
+ createdAt: new Date().toISOString(),
140
+ updatedAt: new Date().toISOString(),
141
+ };
142
+ fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');
143
+ const session = await Session.load(config);
144
+ expect(session).not.toBeNull();
145
+ expect(session.messages.length).toBe(messages.length);
146
+ expect(session.messages[2].content).toBe('Hi there!');
147
+ expect(session.messages[4].content).toBe("I'm great, thanks!");
148
+ });
149
+ test('loads session with most messages when multiple session files exist', async () => {
150
+ // Create a "newer but emptier" session file
151
+ const newSessionId = 'new_empty_' + require('node:crypto').randomUUID().slice(0, 4);
152
+ const newFilePath = sessionFilePath(config.cwd, newSessionId);
153
+ const emptyMessages = [
154
+ { role: 'system', content: 'system prompt' },
155
+ { role: 'user', content: 'Hello' },
156
+ ];
157
+ const newData = {
158
+ id: newSessionId,
159
+ cwd: path.resolve(config.cwd),
160
+ messages: emptyMessages,
161
+ totalInputTokens: 0,
162
+ totalOutputTokens: 0,
163
+ totalApiCalls: 0,
164
+ mode: 'code',
165
+ model: 'test-model',
166
+ provider: 'test-provider',
167
+ createdAt: new Date(Date.now() + 60_000).toISOString(), // 1 minute in the future
168
+ updatedAt: new Date(Date.now() + 60_000).toISOString(), // 1 minute in the future
169
+ };
170
+ fs.writeFileSync(newFilePath, JSON.stringify(newData, null, 2), 'utf-8');
171
+ // Create an "older but fuller" session file
172
+ const fullMessages = [
173
+ { role: 'system', content: 'system prompt' },
174
+ { role: 'user', content: 'Do the first thing.' },
175
+ {
176
+ role: 'assistant',
177
+ content: 'Working on it.',
178
+ tool_calls: [{ id: 't1', name: 'bash', input: { command: 'echo 1' } }],
179
+ },
180
+ { role: 'tool', content: '1', tool_call_id: 't1', name: 'bash' },
181
+ { role: 'user', content: 'Now the second thing.' },
182
+ { role: 'assistant', content: 'Doing it.' },
183
+ { role: 'user', content: 'Great!' },
184
+ ];
185
+ const data = {
186
+ id: sessionId,
187
+ cwd: path.resolve(config.cwd),
188
+ messages: fullMessages,
189
+ totalInputTokens: 0,
190
+ totalOutputTokens: 0,
191
+ totalApiCalls: 0,
192
+ mode: 'code',
193
+ model: 'test-model',
194
+ provider: 'test-provider',
195
+ createdAt: new Date().toISOString(),
196
+ updatedAt: new Date().toISOString(), // OLDER timestamp
197
+ };
198
+ fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');
199
+ // Load — should pick the FULL session (7 messages) over the NEWER but EMPTIER one (2 messages)
200
+ const session = await Session.load(config);
201
+ expect(session).not.toBeNull();
202
+ expect(session.messages.length).toBe(7);
203
+ expect(session.messages[1].content).toBe('Do the first thing.');
204
+ // Clean up the extra file
205
+ try {
206
+ fs.unlinkSync(newFilePath);
207
+ }
208
+ catch {
209
+ /* ignore */
210
+ }
211
+ });
212
+ test('sanitizeMessages keeps complete assistant+tool sequences', async () => {
213
+ // Two complete turns, each with tool_calls+results — should all survive
214
+ const messages = [
215
+ { role: 'system', content: 'system prompt' },
216
+ { role: 'user', content: 'Do the first thing.' },
217
+ {
218
+ role: 'assistant',
219
+ content: 'Working on it.',
220
+ tool_calls: [{ id: 't1', name: 'bash', input: { command: 'echo 1' } }],
221
+ },
222
+ { role: 'tool', content: '1', tool_call_id: 't1', name: 'bash' },
223
+ { role: 'user', content: 'Now the second thing.' },
224
+ {
225
+ role: 'assistant',
226
+ content: 'Doing it.',
227
+ tool_calls: [
228
+ { id: 't2', name: 'bash', input: { command: 'echo 2' } },
229
+ { id: 't3', name: 'edit', input: { file: 'x.ts', old: 'a', new: 'b' } },
230
+ ],
231
+ },
232
+ { role: 'tool', content: '2', tool_call_id: 't2', name: 'bash' },
233
+ { role: 'tool', content: 'Edited x.ts', tool_call_id: 't3', name: 'edit' },
234
+ { role: 'assistant', content: 'Done!' },
235
+ ];
236
+ const data = {
237
+ id: sessionId,
238
+ cwd: path.resolve(config.cwd),
239
+ messages,
240
+ totalInputTokens: 0,
241
+ totalOutputTokens: 0,
242
+ totalApiCalls: 0,
243
+ mode: 'code',
244
+ model: 'test-model',
245
+ provider: 'test-provider',
246
+ createdAt: new Date().toISOString(),
247
+ updatedAt: new Date().toISOString(),
248
+ };
249
+ fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');
250
+ const session = await Session.load(config);
251
+ expect(session).not.toBeNull();
252
+ expect(session.messages.length).toBe(messages.length);
253
+ // Both assistant messages with tool_calls should be present
254
+ const assistantWithTools = session.messages.filter(m => m.role === 'assistant' && m.tool_calls && m.tool_calls.length > 0);
255
+ expect(assistantWithTools).toHaveLength(2);
256
+ expect(assistantWithTools[0].content).toBe('Working on it.');
257
+ expect(assistantWithTools[1].content).toBe('Doing it.');
258
+ });
259
+ });
260
+ //# sourceMappingURL=session-restore.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-restore.test.js","sourceRoot":"","sources":["../../../src/agent/__tests__/session-restore.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { Config } from '../config/index.js';
2
+ import { Session } from './session.js';
3
+ export interface CommandUI {
4
+ write(text: string): void;
5
+ replaceContent(text: string): void;
6
+ onStateChange(): void;
7
+ onNewSession(session: Session): void;
8
+ }
9
+ export interface CommandEnv {
10
+ session: Session;
11
+ config: Config;
12
+ ui: CommandUI;
13
+ isRunning: boolean;
14
+ }
15
+ export declare function handleNew(env: CommandEnv): Session;
16
+ export declare function handleMode(env: CommandEnv, mode: string): Promise<boolean>;
17
+ export declare function handleModel(env: CommandEnv, model: string): boolean;
18
+ export declare function handlePrompts(env: CommandEnv): boolean;
19
+ export declare function handleSkills(env: CommandEnv): boolean;
20
+ export declare function handleSessions(env: CommandEnv): boolean;
21
+ export declare function handleSessionCommand(env: CommandEnv, arg: string): Promise<boolean>;
22
+ export declare function handleFork(env: CommandEnv): Promise<boolean>;
23
+ export declare function handleInit(env: CommandEnv): boolean;
24
+ export declare function handleStop(env: CommandEnv): boolean;
25
+ export declare function dispatchCommand(env: CommandEnv, cmd: string, arg: string): Promise<boolean>;
26
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/agent/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAMhD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,aAAa,IAAI,IAAI,CAAA;IACrB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;CACrC;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,EAAE,EAAE,SAAS,CAAA;IACb,SAAS,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAWlD;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAShF;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAWnE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CActD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAcrD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAqBvD;AAED,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAsFzF;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBlE;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAKnD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAQnD;AAUD,wBAAsB,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA0BjG"}