@travisennis/acai 0.0.4 → 0.0.6

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 (433) hide show
  1. package/README.md +229 -8
  2. package/dist/agent/index.d.ts +119 -0
  3. package/dist/agent/index.d.ts.map +1 -0
  4. package/dist/agent/index.js +406 -0
  5. package/dist/agent/manual-loop.d.ts +41 -0
  6. package/dist/agent/manual-loop.d.ts.map +1 -0
  7. package/dist/agent/manual-loop.js +278 -0
  8. package/dist/api/exa/index.d.ts +177 -0
  9. package/dist/api/exa/index.d.ts.map +1 -0
  10. package/dist/api/exa/index.js +439 -0
  11. package/dist/cli.d.ts +5 -2
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +27 -33
  14. package/dist/commands/add-directory-command.d.ts +3 -0
  15. package/dist/commands/add-directory-command.d.ts.map +1 -0
  16. package/dist/commands/add-directory-command.js +85 -0
  17. package/dist/commands/application-log-command.d.ts +1 -0
  18. package/dist/commands/application-log-command.d.ts.map +1 -0
  19. package/dist/commands/application-log-command.js +39 -3
  20. package/dist/commands/clear-command.d.ts +1 -0
  21. package/dist/commands/clear-command.d.ts.map +1 -0
  22. package/dist/commands/clear-command.js +10 -3
  23. package/dist/commands/compact-command.d.ts +1 -0
  24. package/dist/commands/compact-command.d.ts.map +1 -0
  25. package/dist/commands/compact-command.js +16 -3
  26. package/dist/commands/context-command.d.ts +3 -0
  27. package/dist/commands/context-command.d.ts.map +1 -0
  28. package/dist/commands/context-command.js +183 -0
  29. package/dist/commands/copy-command.d.ts +1 -0
  30. package/dist/commands/copy-command.d.ts.map +1 -0
  31. package/dist/commands/copy-command.js +31 -2
  32. package/dist/commands/edit-command.d.ts +1 -0
  33. package/dist/commands/edit-command.d.ts.map +1 -0
  34. package/dist/commands/edit-command.js +40 -5
  35. package/dist/commands/edit-prompt-command.d.ts +2 -1
  36. package/dist/commands/edit-prompt-command.d.ts.map +1 -0
  37. package/dist/commands/edit-prompt-command.js +43 -7
  38. package/dist/commands/exit-command.d.ts +13 -2
  39. package/dist/commands/exit-command.d.ts.map +1 -0
  40. package/dist/commands/exit-command.js +34 -2
  41. package/dist/commands/files-command.d.ts +1 -0
  42. package/dist/commands/files-command.d.ts.map +1 -0
  43. package/dist/commands/files-command.js +66 -8
  44. package/dist/commands/generate-rules-command.d.ts +1 -0
  45. package/dist/commands/generate-rules-command.d.ts.map +1 -0
  46. package/dist/commands/generate-rules-command.js +315 -4
  47. package/dist/commands/handoff-command.d.ts +3 -0
  48. package/dist/commands/handoff-command.d.ts.map +1 -0
  49. package/dist/commands/handoff-command.js +202 -0
  50. package/dist/commands/health-command.d.ts +3 -1
  51. package/dist/commands/health-command.d.ts.map +1 -0
  52. package/dist/commands/health-command.js +160 -6
  53. package/dist/commands/help-command.d.ts +1 -0
  54. package/dist/commands/help-command.d.ts.map +1 -0
  55. package/dist/commands/help-command.js +30 -3
  56. package/dist/commands/history-command.d.ts +3 -0
  57. package/dist/commands/history-command.d.ts.map +1 -0
  58. package/dist/commands/history-command.js +534 -0
  59. package/dist/commands/init-command.d.ts +2 -1
  60. package/dist/commands/init-command.d.ts.map +1 -0
  61. package/dist/commands/init-command.js +56 -20
  62. package/dist/commands/last-log-command.d.ts +1 -0
  63. package/dist/commands/last-log-command.d.ts.map +1 -0
  64. package/dist/commands/last-log-command.js +39 -17
  65. package/dist/commands/list-directories-command.d.ts +3 -0
  66. package/dist/commands/list-directories-command.d.ts.map +1 -0
  67. package/dist/commands/list-directories-command.js +48 -0
  68. package/dist/commands/list-tools-command.d.ts +3 -0
  69. package/dist/commands/list-tools-command.d.ts.map +1 -0
  70. package/dist/commands/list-tools-command.js +124 -0
  71. package/dist/commands/manager.d.ts +20 -3
  72. package/dist/commands/manager.d.ts.map +1 -0
  73. package/dist/commands/manager.js +123 -26
  74. package/dist/commands/model-command.d.ts +23 -0
  75. package/dist/commands/model-command.d.ts.map +1 -0
  76. package/dist/commands/model-command.js +261 -5
  77. package/dist/commands/paste-command.d.ts +1 -0
  78. package/dist/commands/paste-command.d.ts.map +1 -0
  79. package/dist/commands/paste-command.js +98 -5
  80. package/dist/commands/pickup-command.d.ts +3 -0
  81. package/dist/commands/pickup-command.d.ts.map +1 -0
  82. package/dist/commands/pickup-command.js +161 -0
  83. package/dist/commands/prompt-command.d.ts +2 -1
  84. package/dist/commands/prompt-command.d.ts.map +1 -0
  85. package/dist/commands/prompt-command.js +178 -9
  86. package/dist/commands/remove-directory-command.d.ts +3 -0
  87. package/dist/commands/remove-directory-command.d.ts.map +1 -0
  88. package/dist/commands/remove-directory-command.js +87 -0
  89. package/dist/commands/reset-command.d.ts +2 -1
  90. package/dist/commands/reset-command.d.ts.map +1 -0
  91. package/dist/commands/reset-command.js +14 -3
  92. package/dist/commands/rules-command.d.ts +1 -0
  93. package/dist/commands/rules-command.d.ts.map +1 -0
  94. package/dist/commands/rules-command.js +70 -3
  95. package/dist/commands/save-command.d.ts +1 -0
  96. package/dist/commands/save-command.d.ts.map +1 -0
  97. package/dist/commands/save-command.js +13 -1
  98. package/dist/commands/shell-command.d.ts +3 -0
  99. package/dist/commands/shell-command.d.ts.map +1 -0
  100. package/dist/commands/shell-command.js +128 -0
  101. package/dist/commands/types.d.ts +16 -8
  102. package/dist/commands/types.d.ts.map +1 -0
  103. package/dist/commands/usage-command.d.ts +1 -0
  104. package/dist/commands/usage-command.d.ts.map +1 -0
  105. package/dist/commands/usage-command.js +24 -3
  106. package/dist/config.d.ts +21 -34
  107. package/dist/config.d.ts.map +1 -0
  108. package/dist/config.js +55 -15
  109. package/dist/dedent.d.ts +1 -0
  110. package/dist/dedent.d.ts.map +1 -0
  111. package/dist/execution/index.d.ts +112 -0
  112. package/dist/execution/index.d.ts.map +1 -0
  113. package/dist/execution/index.js +432 -0
  114. package/dist/formatting.d.ts +107 -10
  115. package/dist/formatting.d.ts.map +1 -0
  116. package/dist/formatting.js +150 -62
  117. package/dist/index.d.ts +8 -2
  118. package/dist/index.d.ts.map +1 -0
  119. package/dist/index.js +150 -38
  120. package/dist/logger.d.ts +1 -0
  121. package/dist/logger.d.ts.map +1 -0
  122. package/dist/logger.js +47 -18
  123. package/dist/mentions.d.ts +6 -1
  124. package/dist/mentions.d.ts.map +1 -0
  125. package/dist/mentions.js +58 -11
  126. package/dist/messages.d.ts +16 -20
  127. package/dist/messages.d.ts.map +1 -0
  128. package/dist/messages.js +89 -72
  129. package/dist/middleware/audit-message.d.ts +1 -0
  130. package/dist/middleware/audit-message.d.ts.map +1 -0
  131. package/dist/middleware/cache.d.ts +3 -0
  132. package/dist/middleware/cache.d.ts.map +1 -0
  133. package/dist/middleware/cache.js +53 -0
  134. package/dist/middleware/index.d.ts +2 -0
  135. package/dist/middleware/index.d.ts.map +1 -0
  136. package/dist/middleware/index.js +1 -0
  137. package/dist/middleware/rate-limit.d.ts +1 -0
  138. package/dist/middleware/rate-limit.d.ts.map +1 -0
  139. package/dist/models/ai-config.d.ts +5 -2
  140. package/dist/models/ai-config.d.ts.map +1 -0
  141. package/dist/models/ai-config.js +12 -2
  142. package/dist/models/anthropic-provider.d.ts +1 -0
  143. package/dist/models/anthropic-provider.d.ts.map +1 -0
  144. package/dist/models/anthropic-provider.js +3 -60
  145. package/dist/models/deepseek-provider.d.ts +1 -0
  146. package/dist/models/deepseek-provider.d.ts.map +1 -0
  147. package/dist/models/google-provider.d.ts +1 -0
  148. package/dist/models/google-provider.d.ts.map +1 -0
  149. package/dist/models/groq-provider.d.ts +20 -0
  150. package/dist/models/groq-provider.d.ts.map +1 -0
  151. package/dist/models/groq-provider.js +31 -0
  152. package/dist/models/manager.d.ts +3 -1
  153. package/dist/models/manager.d.ts.map +1 -0
  154. package/dist/models/manager.js +26 -2
  155. package/dist/models/openai-provider.d.ts +2 -1
  156. package/dist/models/openai-provider.d.ts.map +1 -0
  157. package/dist/models/openrouter-provider.d.ts +25 -23
  158. package/dist/models/openrouter-provider.d.ts.map +1 -0
  159. package/dist/models/openrouter-provider.js +181 -122
  160. package/dist/models/providers.d.ts +4 -5
  161. package/dist/models/providers.d.ts.map +1 -0
  162. package/dist/models/providers.js +7 -3
  163. package/dist/models/xai-provider.d.ts +1 -0
  164. package/dist/models/xai-provider.d.ts.map +1 -0
  165. package/dist/parsing.d.ts +2 -1
  166. package/dist/parsing.d.ts.map +1 -0
  167. package/dist/prompts/manager.d.ts +14 -2
  168. package/dist/prompts/manager.d.ts.map +1 -0
  169. package/dist/prompts.d.ts +2 -0
  170. package/dist/prompts.d.ts.map +1 -0
  171. package/dist/prompts.js +65 -12
  172. package/dist/repl/display-tool-messages.d.ts +4 -0
  173. package/dist/repl/display-tool-messages.d.ts.map +1 -0
  174. package/dist/repl/display-tool-messages.js +58 -0
  175. package/dist/repl/display-tool-use.d.ts +14 -0
  176. package/dist/repl/display-tool-use.d.ts.map +1 -0
  177. package/dist/repl/display-tool-use.js +63 -0
  178. package/dist/repl/get-prompt-header.d.ts +8 -0
  179. package/dist/repl/get-prompt-header.d.ts.map +1 -0
  180. package/dist/repl/get-prompt-header.js +9 -0
  181. package/dist/repl/project-status-line.d.ts +2 -0
  182. package/dist/repl/project-status-line.d.ts.map +1 -0
  183. package/dist/repl/project-status-line.js +31 -0
  184. package/dist/repl/prompt.d.ts +21 -0
  185. package/dist/repl/prompt.d.ts.map +1 -0
  186. package/dist/{repl-prompt.js → repl/prompt.js} +119 -22
  187. package/dist/repl/tool-call-repair.d.ts +4 -0
  188. package/dist/repl/tool-call-repair.d.ts.map +1 -0
  189. package/dist/repl/tool-call-repair.js +54 -0
  190. package/dist/repl-new.d.ts +53 -0
  191. package/dist/repl-new.d.ts.map +1 -0
  192. package/dist/repl-new.js +374 -0
  193. package/dist/repl.d.ts +9 -7
  194. package/dist/repl.d.ts.map +1 -0
  195. package/dist/repl.js +142 -378
  196. package/dist/terminal/ansi-styles.d.ts +77 -0
  197. package/dist/terminal/ansi-styles.d.ts.map +1 -0
  198. package/dist/terminal/ansi-styles.js +215 -0
  199. package/dist/terminal/checkbox-prompt.d.ts +36 -0
  200. package/dist/terminal/checkbox-prompt.d.ts.map +1 -0
  201. package/dist/terminal/checkbox-prompt.js +368 -0
  202. package/dist/terminal/default-theme.d.ts +6 -0
  203. package/dist/terminal/default-theme.d.ts.map +1 -0
  204. package/dist/terminal/default-theme.js +182 -0
  205. package/dist/terminal/east-asian-width.d.ts +8 -0
  206. package/dist/terminal/east-asian-width.d.ts.map +1 -0
  207. package/dist/terminal/east-asian-width.js +409 -0
  208. package/dist/terminal/editor-prompt.d.ts +10 -0
  209. package/dist/terminal/editor-prompt.d.ts.map +1 -0
  210. package/dist/terminal/editor-prompt.js +61 -0
  211. package/dist/terminal/errors.d.ts +19 -0
  212. package/dist/terminal/errors.d.ts.map +1 -0
  213. package/dist/terminal/errors.js +37 -0
  214. package/dist/terminal/formatting.d.ts +1 -11
  215. package/dist/terminal/formatting.d.ts.map +1 -0
  216. package/dist/terminal/formatting.js +4 -20
  217. package/dist/terminal/highlight/index.d.ts +53 -0
  218. package/dist/terminal/highlight/index.d.ts.map +1 -0
  219. package/dist/terminal/highlight/index.js +90 -0
  220. package/dist/terminal/highlight/theme.d.ts +233 -0
  221. package/dist/terminal/highlight/theme.d.ts.map +1 -0
  222. package/dist/terminal/highlight/theme.js +83 -0
  223. package/dist/terminal/index.d.ts +23 -9
  224. package/dist/terminal/index.d.ts.map +1 -0
  225. package/dist/terminal/index.js +136 -126
  226. package/dist/terminal/input-prompt.d.ts +17 -0
  227. package/dist/terminal/input-prompt.d.ts.map +1 -0
  228. package/dist/terminal/input-prompt.js +181 -0
  229. package/dist/terminal/markdown-utils.d.ts +1 -0
  230. package/dist/terminal/markdown-utils.d.ts.map +1 -0
  231. package/dist/terminal/markdown.d.ts +1 -0
  232. package/dist/terminal/markdown.d.ts.map +1 -0
  233. package/dist/terminal/markdown.js +20 -12
  234. package/dist/terminal/search-prompt.d.ts +20 -0
  235. package/dist/terminal/search-prompt.d.ts.map +1 -0
  236. package/dist/terminal/search-prompt.js +280 -0
  237. package/dist/terminal/select-prompt.d.ts +26 -0
  238. package/dist/terminal/select-prompt.d.ts.map +1 -0
  239. package/dist/terminal/select-prompt.js +306 -0
  240. package/dist/terminal/string-width.d.ts +7 -0
  241. package/dist/terminal/string-width.d.ts.map +1 -0
  242. package/dist/terminal/string-width.js +61 -0
  243. package/dist/terminal/strip-ansi.d.ts +2 -0
  244. package/dist/terminal/strip-ansi.d.ts.map +1 -0
  245. package/dist/terminal/strip-ansi.js +20 -0
  246. package/dist/terminal/style.d.ts +191 -0
  247. package/dist/terminal/style.d.ts.map +1 -0
  248. package/dist/terminal/style.js +259 -0
  249. package/dist/terminal/supports-color.d.ts +1 -0
  250. package/dist/terminal/supports-color.d.ts.map +1 -0
  251. package/dist/terminal/supports-hyperlinks.d.ts +1 -3
  252. package/dist/terminal/supports-hyperlinks.d.ts.map +1 -0
  253. package/dist/terminal/supports-hyperlinks.js +1 -1
  254. package/dist/terminal/types.d.ts +1 -37
  255. package/dist/terminal/types.d.ts.map +1 -0
  256. package/dist/terminal/wrap-ansi.d.ts +8 -0
  257. package/dist/terminal/wrap-ansi.d.ts.map +1 -0
  258. package/dist/terminal/wrap-ansi.js +190 -0
  259. package/dist/{token-utils.d.ts → tokens/counter.d.ts} +1 -0
  260. package/dist/tokens/counter.d.ts.map +1 -0
  261. package/dist/{token-utils.js → tokens/counter.js} +1 -1
  262. package/dist/tokens/threshold.d.ts +35 -0
  263. package/dist/tokens/threshold.d.ts.map +1 -0
  264. package/dist/tokens/threshold.js +85 -0
  265. package/dist/{token-tracker.d.ts → tokens/tracker.d.ts} +1 -0
  266. package/dist/tokens/tracker.d.ts.map +1 -0
  267. package/dist/tools/advanced-edit-file.d.ts +69 -0
  268. package/dist/tools/advanced-edit-file.d.ts.map +1 -0
  269. package/dist/tools/advanced-edit-file.js +281 -0
  270. package/dist/tools/agent.d.ts +19 -7
  271. package/dist/tools/agent.d.ts.map +1 -0
  272. package/dist/tools/agent.js +70 -54
  273. package/dist/tools/bash-utils.d.ts +7 -0
  274. package/dist/tools/bash-utils.d.ts.map +1 -0
  275. package/dist/tools/bash-utils.js +220 -0
  276. package/dist/tools/bash.d.ts +25 -14
  277. package/dist/tools/bash.d.ts.map +1 -0
  278. package/dist/tools/bash.js +87 -251
  279. package/dist/tools/code-interpreter.d.ts +22 -10
  280. package/dist/tools/code-interpreter.d.ts.map +1 -0
  281. package/dist/tools/code-interpreter.js +146 -210
  282. package/dist/tools/delete-file.d.ts +18 -9
  283. package/dist/tools/delete-file.d.ts.map +1 -0
  284. package/dist/tools/delete-file.js +55 -85
  285. package/dist/tools/directory-tree.d.ts +26 -6
  286. package/dist/tools/directory-tree.d.ts.map +1 -0
  287. package/dist/tools/directory-tree.js +109 -28
  288. package/dist/tools/dynamic-tool-loader.d.ts +22 -0
  289. package/dist/tools/dynamic-tool-loader.d.ts.map +1 -0
  290. package/dist/tools/dynamic-tool-loader.js +272 -0
  291. package/dist/tools/dynamic-tool-parser.d.ts +21 -0
  292. package/dist/tools/dynamic-tool-parser.d.ts.map +1 -0
  293. package/dist/tools/dynamic-tool-parser.js +22 -0
  294. package/dist/tools/edit-file.d.ts +41 -13
  295. package/dist/tools/edit-file.d.ts.map +1 -0
  296. package/dist/tools/edit-file.js +173 -96
  297. package/dist/tools/filesystem-utils.d.ts +7 -21
  298. package/dist/tools/filesystem-utils.d.ts.map +1 -0
  299. package/dist/tools/filesystem-utils.js +111 -149
  300. package/dist/tools/git-utils.d.ts +1 -0
  301. package/dist/tools/git-utils.d.ts.map +1 -0
  302. package/dist/tools/glob.d.ts +36 -0
  303. package/dist/tools/glob.d.ts.map +1 -0
  304. package/dist/tools/glob.js +143 -0
  305. package/dist/tools/grep.d.ts +76 -13
  306. package/dist/tools/grep.d.ts.map +1 -0
  307. package/dist/tools/grep.js +420 -135
  308. package/dist/tools/index.d.ts +207 -133
  309. package/dist/tools/index.d.ts.map +1 -0
  310. package/dist/tools/index.js +245 -127
  311. package/dist/tools/llm-edit-fixer.d.ts +25 -0
  312. package/dist/tools/llm-edit-fixer.d.ts.map +1 -0
  313. package/dist/tools/llm-edit-fixer.js +150 -0
  314. package/dist/tools/move-file.d.ts +20 -7
  315. package/dist/tools/move-file.d.ts.map +1 -0
  316. package/dist/tools/move-file.js +43 -29
  317. package/dist/tools/read-file.d.ts +49 -10
  318. package/dist/tools/read-file.d.ts.map +1 -0
  319. package/dist/tools/read-file.js +79 -67
  320. package/dist/tools/read-multiple-files.d.ts +19 -7
  321. package/dist/tools/read-multiple-files.d.ts.map +1 -0
  322. package/dist/tools/read-multiple-files.js +117 -33
  323. package/dist/tools/save-file.d.ts +46 -11
  324. package/dist/tools/save-file.d.ts.map +1 -0
  325. package/dist/tools/save-file.js +63 -78
  326. package/dist/tools/think.d.ts +16 -7
  327. package/dist/tools/think.d.ts.map +1 -0
  328. package/dist/tools/think.js +34 -22
  329. package/dist/tools/types.d.ts +18 -11
  330. package/dist/tools/types.d.ts.map +1 -0
  331. package/dist/tools/types.js +9 -0
  332. package/dist/tools/utils.d.ts +14 -0
  333. package/dist/tools/utils.d.ts.map +1 -0
  334. package/dist/tools/utils.js +16 -0
  335. package/dist/tools/web-fetch.d.ts +15 -6
  336. package/dist/tools/web-fetch.d.ts.map +1 -0
  337. package/dist/tools/web-fetch.js +40 -39
  338. package/dist/tools/web-search.d.ts +17 -7
  339. package/dist/tools/web-search.d.ts.map +1 -0
  340. package/dist/tools/web-search.js +86 -33
  341. package/dist/tui/autocomplete.d.ts +44 -0
  342. package/dist/tui/autocomplete.d.ts.map +1 -0
  343. package/dist/tui/autocomplete.js +466 -0
  344. package/dist/tui/components/assistant-message.d.ts +18 -0
  345. package/dist/tui/components/assistant-message.d.ts.map +1 -0
  346. package/dist/tui/components/assistant-message.js +29 -0
  347. package/dist/tui/components/editor.d.ts +51 -0
  348. package/dist/tui/components/editor.d.ts.map +1 -0
  349. package/dist/tui/components/editor.js +758 -0
  350. package/dist/tui/components/footer.d.ts +24 -0
  351. package/dist/tui/components/footer.d.ts.map +1 -0
  352. package/dist/tui/components/footer.js +197 -0
  353. package/dist/tui/components/input.d.ts +14 -0
  354. package/dist/tui/components/input.d.ts.map +1 -0
  355. package/dist/tui/components/input.js +122 -0
  356. package/dist/tui/components/loader.d.ts +19 -0
  357. package/dist/tui/components/loader.d.ts.map +1 -0
  358. package/dist/tui/components/loader.js +45 -0
  359. package/dist/tui/components/markdown.d.ts +103 -0
  360. package/dist/tui/components/markdown.d.ts.map +1 -0
  361. package/dist/tui/components/markdown.js +533 -0
  362. package/dist/tui/components/modal.d.ts +40 -0
  363. package/dist/tui/components/modal.d.ts.map +1 -0
  364. package/dist/tui/components/modal.js +292 -0
  365. package/dist/tui/components/prompt-status.d.ts +16 -0
  366. package/dist/tui/components/prompt-status.d.ts.map +1 -0
  367. package/dist/tui/components/prompt-status.js +21 -0
  368. package/dist/tui/components/select-list.d.ts +22 -0
  369. package/dist/tui/components/select-list.d.ts.map +1 -0
  370. package/dist/tui/components/select-list.js +143 -0
  371. package/dist/tui/components/spacer.d.ts +16 -0
  372. package/dist/tui/components/spacer.d.ts.map +1 -0
  373. package/dist/tui/components/spacer.js +27 -0
  374. package/dist/tui/components/text.d.ts +26 -0
  375. package/dist/tui/components/text.d.ts.map +1 -0
  376. package/dist/tui/components/text.js +143 -0
  377. package/dist/tui/components/thinking-block.d.ts +14 -0
  378. package/dist/tui/components/thinking-block.d.ts.map +1 -0
  379. package/dist/tui/components/thinking-block.js +30 -0
  380. package/dist/tui/components/tool-execution.d.ts +17 -0
  381. package/dist/tui/components/tool-execution.d.ts.map +1 -0
  382. package/dist/tui/components/tool-execution.js +153 -0
  383. package/dist/tui/components/user-message.d.ts +9 -0
  384. package/dist/tui/components/user-message.d.ts.map +1 -0
  385. package/dist/tui/components/user-message.js +21 -0
  386. package/dist/tui/components/welcome.d.ts +6 -0
  387. package/dist/tui/components/welcome.d.ts.map +1 -0
  388. package/dist/tui/components/welcome.js +30 -0
  389. package/dist/tui/index.d.ts +14 -0
  390. package/dist/tui/index.d.ts.map +1 -0
  391. package/dist/tui/index.js +18 -0
  392. package/dist/tui/terminal.d.ts +37 -0
  393. package/dist/tui/terminal.d.ts.map +1 -0
  394. package/dist/tui/terminal.js +104 -0
  395. package/dist/tui/tui.d.ts +67 -0
  396. package/dist/tui/tui.d.ts.map +1 -0
  397. package/dist/tui/tui.js +184 -0
  398. package/dist/tui/utils.d.ts +19 -0
  399. package/dist/tui/utils.d.ts.map +1 -0
  400. package/dist/tui/utils.js +31 -0
  401. package/dist/utils/filesystem.d.ts +23 -0
  402. package/dist/utils/filesystem.d.ts.map +1 -0
  403. package/dist/utils/filesystem.js +140 -0
  404. package/dist/utils/filetype-detection.d.ts +3 -0
  405. package/dist/utils/filetype-detection.d.ts.map +1 -0
  406. package/dist/utils/filetype-detection.js +112 -0
  407. package/dist/utils/generators.d.ts +3 -0
  408. package/dist/utils/generators.d.ts.map +1 -0
  409. package/dist/utils/generators.js +25 -0
  410. package/dist/utils/glob.d.ts +52 -0
  411. package/dist/utils/glob.d.ts.map +1 -0
  412. package/dist/utils/glob.js +376 -0
  413. package/dist/utils/ignore.d.ts +104 -0
  414. package/dist/utils/ignore.d.ts.map +1 -0
  415. package/dist/utils/ignore.js +649 -0
  416. package/dist/utils/iterables.d.ts +2 -0
  417. package/dist/utils/iterables.d.ts.map +1 -0
  418. package/dist/utils/iterables.js +6 -0
  419. package/dist/utils/process.d.ts +3 -2
  420. package/dist/utils/process.d.ts.map +1 -0
  421. package/dist/utils/process.js +17 -2
  422. package/dist/utils/zod-utils.d.ts +4 -0
  423. package/dist/utils/zod-utils.d.ts.map +1 -0
  424. package/dist/utils/zod-utils.js +7 -0
  425. package/dist/version.d.ts +1 -0
  426. package/dist/version.d.ts.map +1 -0
  427. package/package.json +34 -32
  428. package/dist/conversation-analyzer.d.ts +0 -10
  429. package/dist/conversation-analyzer.js +0 -88
  430. package/dist/repl-prompt.d.ts +0 -14
  431. package/dist/tools/command-validation.d.ts +0 -11
  432. package/dist/tools/command-validation.js +0 -45
  433. /package/dist/{token-tracker.js → tokens/tracker.js} +0 -0
@@ -0,0 +1,281 @@
1
+ import { execSync } from "node:child_process";
2
+ import { readFile, writeFile } from "node:fs/promises";
3
+ import { createTwoFilesPatch } from "diff";
4
+ import { z } from "zod";
5
+ import style from "../terminal/style.js";
6
+ import { joinWorkingDir, validatePath } from "./filesystem-utils.js";
7
+ export const AdvancedEditFileTool = {
8
+ name: "advancedEditFile",
9
+ };
10
+ const inputSchema = z.object({
11
+ path: z.string().describe("The path of the file to edit."),
12
+ mode: z
13
+ .enum(["exact", "regex", "ast"])
14
+ .default("exact")
15
+ .describe("Editing mode: exact (literal text), regex (pattern matching), or ast (AST-aware)"),
16
+ operations: z.array(z.object({
17
+ type: z
18
+ .enum(["replace", "insert-before", "insert-after", "delete"])
19
+ .describe("Type of operation to perform"),
20
+ pattern: z
21
+ .string()
22
+ .describe("Pattern to match (text, regex, or AST pattern depending on mode)"),
23
+ replacement: z
24
+ .string()
25
+ .optional()
26
+ .describe("Replacement text (required for replace operations)"),
27
+ flags: z
28
+ .string()
29
+ .optional()
30
+ .describe("Regex flags for regex mode (e.g., 'g', 'i', 'm')"),
31
+ })),
32
+ astPattern: z
33
+ .string()
34
+ .optional()
35
+ .describe("AST-grep search pattern for AST mode (e.g., 'var $V = $VAL')"),
36
+ astReplacement: z
37
+ .string()
38
+ .optional()
39
+ .describe("AST-grep replacement pattern for AST mode (e.g., 'let $V = $VAL')"),
40
+ dryRun: z.boolean().default(false).describe("Show changes without writing"),
41
+ });
42
+ export const createAdvancedEditFileTool = async ({ workingDir, allowedDirs, }) => {
43
+ const allowedDirectory = allowedDirs ?? [workingDir];
44
+ return {
45
+ toolDef: {
46
+ description: "Advanced file editing with multiple modes: exact text matching, regex pattern matching, and AST-aware editing. " +
47
+ "Supports replace, insert-before, insert-after, and delete operations. AST mode requires ast-grep to be installed.",
48
+ inputSchema,
49
+ },
50
+ async *execute({ path, mode, operations, astPattern, astReplacement, dryRun, }, { toolCallId, abortSignal }) {
51
+ try {
52
+ if (abortSignal?.aborted) {
53
+ throw new Error("File editing aborted");
54
+ }
55
+ yield {
56
+ name: AdvancedEditFileTool.name,
57
+ id: toolCallId,
58
+ event: "tool-init",
59
+ data: `${style.cyan(path)} (mode: ${mode})`,
60
+ };
61
+ const validPath = await validatePath(joinWorkingDir(path, workingDir), allowedDirectory, { abortSignal });
62
+ const result = await applyAdvancedFileEdits(validPath, mode, operations, astPattern, astReplacement, dryRun, abortSignal);
63
+ yield {
64
+ name: AdvancedEditFileTool.name,
65
+ id: toolCallId,
66
+ event: "tool-completion",
67
+ data: `Applied ${operations.length} edits`,
68
+ };
69
+ yield result;
70
+ }
71
+ catch (error) {
72
+ yield {
73
+ name: AdvancedEditFileTool.name,
74
+ event: "tool-error",
75
+ id: toolCallId,
76
+ data: error.message,
77
+ };
78
+ yield `Failed to edit file: ${error.message}`;
79
+ }
80
+ },
81
+ };
82
+ };
83
+ // file editing and diffing utilities
84
+ function normalizeLineEndings(text) {
85
+ return text.replace(/\r\n/g, "\n");
86
+ }
87
+ function createUnifiedDiff(originalContent, newContent, filepath = "file") {
88
+ // Ensure consistent line endings for diff
89
+ const normalizedOriginal = normalizeLineEndings(originalContent);
90
+ const normalizedNew = normalizeLineEndings(newContent);
91
+ return createTwoFilesPatch(filepath, filepath, normalizedOriginal, normalizedNew, "original", "modified");
92
+ }
93
+ function applyExactModeEdits(content, operations) {
94
+ let modifiedContent = content;
95
+ for (const op of operations) {
96
+ switch (op.type) {
97
+ case "replace": {
98
+ if (!op.replacement) {
99
+ throw new Error("Replacement text required for replace operation");
100
+ }
101
+ // Exact text replacement (global)
102
+ let currentIndex = 0;
103
+ let matchCount = 0;
104
+ while (currentIndex < modifiedContent.length) {
105
+ const matchIndex = modifiedContent.indexOf(op.pattern, currentIndex);
106
+ if (matchIndex === -1) {
107
+ break;
108
+ }
109
+ matchCount++;
110
+ modifiedContent =
111
+ modifiedContent.slice(0, matchIndex) +
112
+ op.replacement +
113
+ modifiedContent.slice(matchIndex + op.pattern.length);
114
+ currentIndex = matchIndex + op.replacement.length;
115
+ }
116
+ if (matchCount === 0) {
117
+ throw new Error(`Pattern not found in content: ${op.pattern}`);
118
+ }
119
+ break;
120
+ }
121
+ case "insert-before": {
122
+ if (!op.replacement) {
123
+ throw new Error("Replacement text required for insert-before operation");
124
+ }
125
+ const beforeIndex = modifiedContent.indexOf(op.pattern);
126
+ if (beforeIndex === -1) {
127
+ throw new Error(`Pattern not found for insert-before: ${op.pattern}`);
128
+ }
129
+ modifiedContent =
130
+ modifiedContent.slice(0, beforeIndex) +
131
+ op.replacement +
132
+ "\n" +
133
+ modifiedContent.slice(beforeIndex);
134
+ break;
135
+ }
136
+ case "insert-after": {
137
+ if (!op.replacement) {
138
+ throw new Error("Replacement text required for insert-after operation");
139
+ }
140
+ const afterIndex = modifiedContent.indexOf(op.pattern);
141
+ if (afterIndex === -1) {
142
+ throw new Error(`Pattern not found for insert-after: ${op.pattern}`);
143
+ }
144
+ const insertPosition = afterIndex + op.pattern.length;
145
+ modifiedContent =
146
+ modifiedContent.slice(0, insertPosition) +
147
+ "\n" +
148
+ op.replacement +
149
+ modifiedContent.slice(insertPosition);
150
+ break;
151
+ }
152
+ case "delete": {
153
+ // For delete operations, use line-based approach to handle newlines properly
154
+ const lines = modifiedContent.split("\n");
155
+ const filteredLines = lines.filter((line) => !line.includes(op.pattern));
156
+ if (filteredLines.length === lines.length) {
157
+ throw new Error(`Pattern not found for delete: ${op.pattern}`);
158
+ }
159
+ modifiedContent = filteredLines.join("\n");
160
+ break;
161
+ }
162
+ }
163
+ }
164
+ return modifiedContent;
165
+ }
166
+ function applyRegexModeEdits(content, operations) {
167
+ let modifiedContent = content;
168
+ for (const op of operations) {
169
+ const flags = op.flags || "g";
170
+ const regex = new RegExp(op.pattern, flags);
171
+ switch (op.type) {
172
+ case "replace":
173
+ if (!op.replacement) {
174
+ throw new Error("Replacement text required for replace operation");
175
+ }
176
+ modifiedContent = modifiedContent.replace(regex, op.replacement);
177
+ break;
178
+ case "insert-before":
179
+ if (!op.replacement) {
180
+ throw new Error("Replacement text required for insert-before operation");
181
+ }
182
+ modifiedContent = modifiedContent.replace(regex, `${op.replacement}\n$&`);
183
+ break;
184
+ case "insert-after":
185
+ if (!op.replacement) {
186
+ throw new Error("Replacement text required for insert-after operation");
187
+ }
188
+ modifiedContent = modifiedContent.replace(regex, `$&\n${op.replacement}`);
189
+ break;
190
+ case "delete":
191
+ modifiedContent = modifiedContent.replace(regex, "");
192
+ break;
193
+ }
194
+ }
195
+ return modifiedContent;
196
+ }
197
+ function applyAstModeEdits(filePath, astPattern, astReplacement, dryRun) {
198
+ if (!astPattern || !astReplacement) {
199
+ throw new Error("AST mode requires both astPattern and astReplacement");
200
+ }
201
+ try {
202
+ const cmd = [
203
+ "ast-grep",
204
+ "--pattern",
205
+ `"${astPattern}"`,
206
+ "--rewrite",
207
+ `"${astReplacement}"`,
208
+ dryRun ? "--dry-run" : "--write",
209
+ filePath,
210
+ ].join(" ");
211
+ if (dryRun) {
212
+ const output = execSync(cmd, { encoding: "utf-8" });
213
+ return `AST edit preview:\n${output}`;
214
+ }
215
+ execSync(cmd, { stdio: "inherit" });
216
+ return `AST edit applied to ${filePath}`;
217
+ }
218
+ catch (err) {
219
+ throw new Error(`AST edit failed: ${err.message}`);
220
+ }
221
+ }
222
+ export async function applyAdvancedFileEdits(filePath, mode, operations, astPattern, astReplacement, dryRun = false, abortSignal) {
223
+ if (abortSignal?.aborted) {
224
+ throw new Error("File edit operation aborted");
225
+ }
226
+ // Read file content literally with signal
227
+ const originalContent = await readFile(filePath, {
228
+ encoding: "utf-8",
229
+ signal: abortSignal,
230
+ });
231
+ let modifiedContent = originalContent;
232
+ let resultMessage = "";
233
+ if (mode === "ast") {
234
+ // AST mode uses external ast-grep tool
235
+ if (!astPattern || !astReplacement) {
236
+ throw new Error("AST mode requires both astPattern and astReplacement");
237
+ }
238
+ resultMessage = applyAstModeEdits(filePath, astPattern, astReplacement, dryRun);
239
+ if (dryRun) {
240
+ return resultMessage;
241
+ }
242
+ // For actual AST edits, read the modified content back
243
+ modifiedContent = await readFile(filePath, {
244
+ encoding: "utf-8",
245
+ signal: abortSignal,
246
+ });
247
+ }
248
+ else {
249
+ // Text-based modes (exact and regex)
250
+ if (operations.length === 0) {
251
+ throw new Error("No operations specified for text-based editing mode");
252
+ }
253
+ switch (mode) {
254
+ case "exact":
255
+ modifiedContent = applyExactModeEdits(originalContent, operations);
256
+ break;
257
+ case "regex":
258
+ modifiedContent = applyRegexModeEdits(originalContent, operations);
259
+ break;
260
+ }
261
+ // Create unified diff
262
+ const diff = createUnifiedDiff(originalContent, modifiedContent, filePath);
263
+ // Format diff with appropriate number of backticks
264
+ let numBackticks = 3;
265
+ while (diff.includes("`".repeat(numBackticks))) {
266
+ numBackticks++;
267
+ }
268
+ resultMessage = `${"`".repeat(numBackticks)}diff\n${diff}${"`".repeat(numBackticks)}\n\n`;
269
+ if (!dryRun) {
270
+ if (abortSignal?.aborted) {
271
+ throw new Error("File edit operation aborted before writing");
272
+ }
273
+ // Write the modified content with signal
274
+ await writeFile(filePath, modifiedContent, {
275
+ encoding: "utf-8",
276
+ signal: abortSignal,
277
+ });
278
+ }
279
+ }
280
+ return resultMessage;
281
+ }
@@ -1,17 +1,29 @@
1
+ import { type ToolCallOptions } from "ai";
2
+ import { z } from "zod";
3
+ import type { WorkspaceContext } from "../index.ts";
1
4
  import type { ModelManager } from "../models/manager.ts";
2
- import type { TokenTracker } from "../token-tracker.ts";
3
- import type { TokenCounter } from "../token-utils.ts";
4
- import type { SendData } from "./types.ts";
5
+ import type { TokenCounter } from "../tokens/counter.ts";
6
+ import type { TokenTracker } from "../tokens/tracker.ts";
7
+ import type { ToolResult } from "./types.ts";
5
8
  export declare const AgentTool: {
6
9
  name: "agent";
7
10
  };
11
+ declare const inputSchema: z.ZodObject<{
12
+ prompt: z.ZodString;
13
+ }, z.core.$strip>;
8
14
  export declare const createAgentTools: (options: {
9
15
  modelManager: ModelManager;
10
16
  tokenTracker: TokenTracker;
11
17
  tokenCounter: TokenCounter;
12
- sendData?: SendData | undefined;
18
+ workspace: WorkspaceContext;
13
19
  }) => {
14
- agent: import("ai").Tool<{
15
- prompt: string;
16
- }, string>;
20
+ toolDef: {
21
+ description: string;
22
+ inputSchema: z.ZodObject<{
23
+ prompt: z.ZodString;
24
+ }, z.core.$strip>;
25
+ };
26
+ execute: ({ prompt }: z.infer<typeof inputSchema>, { toolCallId, abortSignal }: ToolCallOptions) => AsyncGenerator<ToolResult>;
17
27
  };
28
+ export {};
29
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../source/tools/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,eAAe,EAAE,MAAM,IAAI,CAAC;AACrE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAOzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,eAAO,MAAM,SAAS;;CAErB,CAAC;AAiCF,QAAA,MAAM,WAAW;;iBAEf,CAAC;AAEH,eAAO,MAAM,gBAAgB,GAAI,SAAS;IACxC,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,gBAAgB,CAAC;CAC7B;;;;;;;0BASe,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,+BACV,eAAe,KAC3C,cAAc,CAAC,UAAU,CAAC;CA8D9B,CAAC"}
@@ -1,9 +1,9 @@
1
- import { generateText, stepCountIs, tool } from "ai";
2
- import chalk from "chalk";
1
+ import { generateText, stepCountIs } from "ai";
3
2
  import { z } from "zod";
4
3
  import { AiConfig } from "../models/ai-config.js";
5
- import { BashTool } from "./bash.js";
4
+ import style from "../terminal/style.js";
6
5
  import { DirectoryTreeTool } from "./directory-tree.js";
6
+ import { GlobTool } from "./glob.js";
7
7
  import { GrepTool } from "./grep.js";
8
8
  import { initCliTools } from "./index.js";
9
9
  import { ReadFileTool } from "./read-file.js";
@@ -13,18 +13,24 @@ export const AgentTool = {
13
13
  };
14
14
  const TOOLS = [
15
15
  GrepTool.name,
16
- BashTool.name,
16
+ GlobTool.name,
17
17
  ReadFileTool.name,
18
18
  ReadMultipleFilesTool.name,
19
19
  DirectoryTreeTool.name,
20
20
  ];
21
21
  function getToolDescription() {
22
22
  const toolNames = TOOLS.join(", ");
23
- return `Launch a new agent that has access to the following tools: ${toolNames}. When you are searching for a keyword or file and are not confident that you will find the right match on the first try, use the ${AgentTool.name} tool to perform the search for you. For example:
23
+ return `Launch a new agent that has access to the following tools: ${toolNames}. This agent is specifically designed for file discovery and code search tasks. Use the ${AgentTool.name} tool when you need to search for files or code patterns across the codebase.
24
24
 
25
- - If you are searching for a keyword like "config" or "logger", the ${AgentTool.name} tool is appropriate
26
- - If you want to read a specific file path, use the ${ReadFileTool.name} or appropriate command via the ${BashTool.name} tool instead of this tool, to find the match more quickly
27
- - If you are searching for a specific class definition like "class Foo", use the ${GrepTool.name} tool instead, to find the match more quickly
25
+ Use cases:
26
+ - Search for files matching specific patterns (e.g., "*.ts", "**/*.test.ts") using ${GlobTool.name}
27
+ - Find code patterns or text within files using ${GrepTool.name}
28
+ - Read specific files or multiple files using ${ReadFileTool.name} and ${ReadMultipleFilesTool.name}
29
+
30
+ Important limitations:
31
+ - This agent cannot execute shell commands or run external tools
32
+ - It is focused purely on file discovery and content reading
33
+ - For complex operations or command execution, use the main assistant directly
28
34
 
29
35
  Usage notes:
30
36
  1. Launch multiple agents concurrently whenever possible, to maximize performance; to do that, use a single message with multiple tool uses
@@ -36,52 +42,62 @@ const inputSchema = z.object({
36
42
  prompt: z.string().describe("The task for the agent to perform"),
37
43
  });
38
44
  export const createAgentTools = (options) => {
39
- const { modelManager, tokenTracker, tokenCounter, sendData } = options;
45
+ const { modelManager, tokenTracker, tokenCounter } = options;
46
+ const toolDef = {
47
+ description: getToolDescription(),
48
+ inputSchema,
49
+ };
50
+ async function* execute({ prompt }, { toolCallId, abortSignal }) {
51
+ if (abortSignal?.aborted) {
52
+ throw new Error("Agent execution aborted");
53
+ }
54
+ yield {
55
+ name: AgentTool.name,
56
+ event: "tool-init",
57
+ id: toolCallId,
58
+ data: `\n${style.cyan(prompt)}`,
59
+ };
60
+ try {
61
+ const modelConfig = modelManager.getModelMetadata("task-agent");
62
+ const aiConfig = new AiConfig({
63
+ modelMetadata: modelConfig,
64
+ prompt: prompt,
65
+ });
66
+ const { text, usage } = await generateText({
67
+ model: modelManager.getModel("task-agent"),
68
+ maxOutputTokens: aiConfig.maxOutputTokens(),
69
+ system: "You are a code search assistant that will be given a task that will require you to search a code base to find relevant code and files.",
70
+ prompt: prompt,
71
+ temperature: aiConfig.temperature(),
72
+ topP: aiConfig.topP(),
73
+ stopWhen: stepCountIs(30),
74
+ providerOptions: aiConfig.providerOptions(),
75
+ tools: (await initCliTools({ tokenCounter, workspace: options.workspace })).toolDefs,
76
+ abortSignal: abortSignal,
77
+ // biome-ignore lint/style/useNamingConvention: third-party code
78
+ experimental_activeTools: [...TOOLS],
79
+ });
80
+ tokenTracker.trackUsage("task-agent", usage);
81
+ yield {
82
+ name: AgentTool.name,
83
+ event: "tool-completion",
84
+ id: toolCallId,
85
+ data: `Finished running the agent tool (${usage.totalTokens} tokens)`,
86
+ };
87
+ yield text;
88
+ }
89
+ catch (error) {
90
+ yield {
91
+ name: AgentTool.name,
92
+ event: "tool-error",
93
+ id: toolCallId,
94
+ data: error.message,
95
+ };
96
+ yield error.message;
97
+ }
98
+ }
40
99
  return {
41
- [AgentTool.name]: tool({
42
- description: getToolDescription(),
43
- inputSchema: inputSchema,
44
- execute: async ({ prompt }, { abortSignal, toolCallId }) => {
45
- sendData?.({
46
- event: "tool-init",
47
- id: toolCallId,
48
- data: `Initializing agent with prompt: ${chalk.cyan(prompt)}`,
49
- });
50
- try {
51
- const modelConfig = modelManager.getModelMetadata("task-agent");
52
- const aiConfig = new AiConfig({
53
- modelMetadata: modelConfig,
54
- prompt: prompt,
55
- });
56
- const { text, usage } = await generateText({
57
- model: modelManager.getModel("task-agent"),
58
- maxOutputTokens: aiConfig.getMaxTokens(),
59
- system: "You are a code search assistant that will be given a task that will require you to search a code base to find relevant code and files.",
60
- prompt: prompt,
61
- stopWhen: stepCountIs(30),
62
- providerOptions: aiConfig.getProviderOptions(),
63
- tools: await initCliTools({ tokenCounter }),
64
- abortSignal: abortSignal,
65
- // biome-ignore lint/style/useNamingConvention: third-party code
66
- experimental_activeTools: [...TOOLS],
67
- });
68
- tokenTracker.trackUsage("task-agent", usage);
69
- sendData?.({
70
- event: "tool-completion",
71
- id: toolCallId,
72
- data: "Finished running the agent tool.",
73
- });
74
- return text;
75
- }
76
- catch (error) {
77
- sendData?.({
78
- event: "tool-error",
79
- id: toolCallId,
80
- data: "Error running agent tool.",
81
- });
82
- return Promise.resolve(error.message);
83
- }
84
- },
85
- }),
100
+ toolDef,
101
+ execute,
86
102
  };
87
103
  };
@@ -0,0 +1,7 @@
1
+ export declare function validatePaths(command: string, allowedDirs: string[], cwd: string, allowedPaths?: string[]): {
2
+ isValid: boolean;
3
+ error?: string;
4
+ };
5
+ export declare const resolveCwd: (cwdInput: string | null | undefined, workingDir: string) => string;
6
+ export declare const isMutatingCommand: (rawCommand: string) => boolean;
7
+ //# sourceMappingURL=bash-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash-utils.d.ts","sourceRoot":"","sources":["../../source/tools/bash-utils.ts"],"names":[],"mappings":"AAMA,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EAAE,EACrB,GAAG,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAgFtC;AAED,eAAO,MAAM,UAAU,GACrB,UAAU,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,YAAY,MAAM,KACjB,MAiDF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,YAAY,MAAM,KAAG,OAmHtD,CAAC"}