@travisennis/acai 0.0.7 → 0.0.8

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 (471) hide show
  1. package/README.md +42 -25
  2. package/dist/agent/index.d.ts +21 -25
  3. package/dist/agent/index.d.ts.map +1 -1
  4. package/dist/agent/index.js +115 -104
  5. package/dist/cli.d.ts +2 -2
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +21 -16
  8. package/dist/commands/add-directory/index.d.ts +3 -0
  9. package/dist/commands/add-directory/index.d.ts.map +1 -0
  10. package/dist/commands/{add-directory-command.js → add-directory/index.js} +6 -10
  11. package/dist/commands/add-directory/types.d.ts +6 -0
  12. package/dist/commands/add-directory/types.d.ts.map +1 -0
  13. package/dist/commands/add-directory/types.js +1 -0
  14. package/dist/commands/add-directory/utils.d.ts +3 -0
  15. package/dist/commands/add-directory/utils.d.ts.map +1 -0
  16. package/dist/commands/add-directory/utils.js +15 -0
  17. package/dist/commands/clear/index.d.ts +3 -0
  18. package/dist/commands/clear/index.d.ts.map +1 -0
  19. package/dist/commands/{clear-command.js → clear/index.js} +0 -2
  20. package/dist/commands/copy/index.d.ts +3 -0
  21. package/dist/commands/copy/index.d.ts.map +1 -0
  22. package/dist/commands/{copy-command.js → copy/index.js} +4 -26
  23. package/dist/commands/copy/types.d.ts +3 -0
  24. package/dist/commands/copy/types.d.ts.map +1 -0
  25. package/dist/commands/copy/types.js +1 -0
  26. package/dist/commands/copy/utils.d.ts +3 -0
  27. package/dist/commands/copy/utils.d.ts.map +1 -0
  28. package/dist/commands/copy/utils.js +22 -0
  29. package/dist/commands/{exit-command.d.ts → exit/index.d.ts} +4 -4
  30. package/dist/commands/exit/index.d.ts.map +1 -0
  31. package/dist/commands/exit/index.js +21 -0
  32. package/dist/commands/exit/types.d.ts +8 -0
  33. package/dist/commands/exit/types.d.ts.map +1 -0
  34. package/dist/commands/exit/types.js +1 -0
  35. package/dist/commands/exit/utils.d.ts +2 -0
  36. package/dist/commands/exit/utils.d.ts.map +1 -0
  37. package/dist/commands/exit/utils.js +13 -0
  38. package/dist/commands/generate-rules/index.d.ts +3 -0
  39. package/dist/commands/generate-rules/index.d.ts.map +1 -0
  40. package/dist/commands/{generate-rules-command.js → generate-rules/index.js} +55 -95
  41. package/dist/commands/generate-rules/utils.d.ts +5 -0
  42. package/dist/commands/generate-rules/utils.d.ts.map +1 -0
  43. package/dist/commands/generate-rules/utils.js +25 -0
  44. package/dist/commands/handoff/index.d.ts +3 -0
  45. package/dist/commands/handoff/index.d.ts.map +1 -0
  46. package/dist/commands/handoff/index.js +97 -0
  47. package/dist/commands/handoff/utils.d.ts +4 -0
  48. package/dist/commands/handoff/utils.d.ts.map +1 -0
  49. package/dist/commands/{handoff-command.js → handoff/utils.js} +24 -92
  50. package/dist/commands/health/index.d.ts +3 -0
  51. package/dist/commands/health/index.d.ts.map +1 -0
  52. package/dist/commands/health/index.js +56 -0
  53. package/dist/commands/health/utils.d.ts +15 -0
  54. package/dist/commands/health/utils.d.ts.map +1 -0
  55. package/dist/commands/health/utils.js +52 -0
  56. package/dist/commands/{help-command.d.ts → help/index.d.ts} +2 -2
  57. package/dist/commands/help/index.d.ts.map +1 -0
  58. package/dist/commands/{help-command.js → help/index.js} +1 -1
  59. package/dist/commands/history/index.d.ts +3 -0
  60. package/dist/commands/history/index.d.ts.map +1 -0
  61. package/dist/commands/{history-command.js → history/index.js} +16 -100
  62. package/dist/commands/history/types.d.ts +11 -0
  63. package/dist/commands/history/types.d.ts.map +1 -0
  64. package/dist/commands/history/types.js +1 -0
  65. package/dist/commands/history/utils.d.ts +4 -0
  66. package/dist/commands/history/utils.d.ts.map +1 -0
  67. package/dist/commands/history/utils.js +86 -0
  68. package/dist/commands/init/index.d.ts +3 -0
  69. package/dist/commands/init/index.d.ts.map +1 -0
  70. package/dist/commands/{init-command.js → init/index.js} +16 -7
  71. package/dist/commands/init-project/index.d.ts +3 -0
  72. package/dist/commands/init-project/index.d.ts.map +1 -0
  73. package/dist/commands/init-project/index.js +51 -0
  74. package/dist/commands/init-project/utils.d.ts +9 -0
  75. package/dist/commands/init-project/utils.d.ts.map +1 -0
  76. package/dist/commands/init-project/utils.js +43 -0
  77. package/dist/commands/list-directories/index.d.ts +3 -0
  78. package/dist/commands/list-directories/index.d.ts.map +1 -0
  79. package/dist/commands/{list-directories-command.js → list-directories/index.js} +1 -1
  80. package/dist/commands/list-tools/index.d.ts +3 -0
  81. package/dist/commands/list-tools/index.d.ts.map +1 -0
  82. package/dist/commands/{list-tools-command.js → list-tools/index.js} +4 -16
  83. package/dist/commands/manager.d.ts +2 -2
  84. package/dist/commands/manager.d.ts.map +1 -1
  85. package/dist/commands/manager.js +33 -43
  86. package/dist/commands/model/index.d.ts +3 -0
  87. package/dist/commands/model/index.d.ts.map +1 -0
  88. package/dist/commands/{model-command.js → model/index.js} +15 -52
  89. package/dist/commands/model/utils.d.ts +3 -0
  90. package/dist/commands/model/utils.d.ts.map +1 -0
  91. package/dist/commands/model/utils.js +5 -0
  92. package/dist/commands/{paste-command.d.ts → paste/index.d.ts} +2 -2
  93. package/dist/commands/paste/index.d.ts.map +1 -0
  94. package/dist/commands/{paste-command.js → paste/index.js} +6 -111
  95. package/dist/commands/paste/utils.d.ts +5 -0
  96. package/dist/commands/paste/utils.d.ts.map +1 -0
  97. package/dist/commands/paste/utils.js +86 -0
  98. package/dist/commands/pickup/index.d.ts +3 -0
  99. package/dist/commands/pickup/index.d.ts.map +1 -0
  100. package/dist/commands/pickup/index.js +138 -0
  101. package/dist/commands/pickup/types.d.ts +6 -0
  102. package/dist/commands/pickup/types.d.ts.map +1 -0
  103. package/dist/commands/pickup/types.js +1 -0
  104. package/dist/commands/pickup/utils.d.ts +7 -0
  105. package/dist/commands/pickup/utils.d.ts.map +1 -0
  106. package/dist/commands/pickup/utils.js +56 -0
  107. package/dist/commands/prompt/index.d.ts +5 -0
  108. package/dist/commands/prompt/index.d.ts.map +1 -0
  109. package/dist/commands/prompt/index.js +126 -0
  110. package/dist/commands/prompt/types.d.ts +15 -0
  111. package/dist/commands/prompt/types.d.ts.map +1 -0
  112. package/dist/commands/prompt/types.js +1 -0
  113. package/dist/commands/prompt/utils.d.ts +12 -0
  114. package/dist/commands/prompt/utils.d.ts.map +1 -0
  115. package/dist/commands/prompt/utils.js +107 -0
  116. package/dist/commands/remove-directory/index.d.ts +3 -0
  117. package/dist/commands/remove-directory/index.d.ts.map +1 -0
  118. package/dist/commands/{remove-directory-command.js → remove-directory/index.js} +2 -2
  119. package/dist/commands/reset/index.d.ts +3 -0
  120. package/dist/commands/reset/index.d.ts.map +1 -0
  121. package/dist/commands/{reset-command.js → reset/index.js} +7 -2
  122. package/dist/commands/reset/types.d.ts +1 -0
  123. package/dist/commands/reset/types.d.ts.map +1 -0
  124. package/dist/commands/reset/types.js +3 -0
  125. package/dist/commands/resources/index.d.ts +3 -0
  126. package/dist/commands/resources/index.d.ts.map +1 -0
  127. package/dist/commands/resources/index.js +84 -0
  128. package/dist/commands/review/index.d.ts +3 -0
  129. package/dist/commands/review/index.d.ts.map +1 -0
  130. package/dist/commands/review/index.js +126 -0
  131. package/dist/commands/review/types.d.ts +12 -0
  132. package/dist/commands/review/types.d.ts.map +1 -0
  133. package/dist/commands/review/types.js +1 -0
  134. package/dist/commands/review/utils.d.ts +4 -0
  135. package/dist/commands/review/utils.d.ts.map +1 -0
  136. package/dist/commands/review/utils.js +87 -0
  137. package/dist/commands/save/index.d.ts +3 -0
  138. package/dist/commands/save/index.d.ts.map +1 -0
  139. package/dist/commands/{save-command.js → save/index.js} +3 -3
  140. package/dist/commands/session/index.d.ts +3 -0
  141. package/dist/commands/session/index.d.ts.map +1 -0
  142. package/dist/commands/session/index.js +197 -0
  143. package/dist/commands/session/types.d.ts +13 -0
  144. package/dist/commands/session/types.d.ts.map +1 -0
  145. package/dist/commands/session/types.js +7 -0
  146. package/dist/commands/shell/index.d.ts +3 -0
  147. package/dist/commands/shell/index.d.ts.map +1 -0
  148. package/dist/commands/{shell-command.js → shell/index.js} +3 -3
  149. package/dist/commands/types.d.ts +2 -2
  150. package/dist/commands/types.d.ts.map +1 -1
  151. package/dist/config.d.ts +25 -7
  152. package/dist/config.d.ts.map +1 -1
  153. package/dist/config.js +45 -20
  154. package/dist/dedent.d.ts.map +1 -1
  155. package/dist/dedent.js +7 -7
  156. package/dist/execution/index.d.ts +1 -0
  157. package/dist/execution/index.d.ts.map +1 -1
  158. package/dist/execution/index.js +60 -64
  159. package/dist/formatting.d.ts +27 -0
  160. package/dist/formatting.d.ts.map +1 -1
  161. package/dist/formatting.js +40 -0
  162. package/dist/index.d.ts.map +1 -1
  163. package/dist/index.js +138 -75
  164. package/dist/logger.d.ts.map +1 -1
  165. package/dist/logger.js +4 -11
  166. package/dist/mentions.d.ts.map +1 -1
  167. package/dist/mentions.js +3 -53
  168. package/dist/middleware/audit-message.d.ts +2 -2
  169. package/dist/middleware/audit-message.d.ts.map +1 -1
  170. package/dist/middleware/audit-message.js +40 -2
  171. package/dist/middleware/cache.d.ts +2 -2
  172. package/dist/middleware/cache.d.ts.map +1 -1
  173. package/dist/middleware/cache.js +111 -27
  174. package/dist/middleware/rate-limit.d.ts +2 -2
  175. package/dist/middleware/rate-limit.d.ts.map +1 -1
  176. package/dist/middleware/rate-limit.js +1 -0
  177. package/dist/models/ai-config.d.ts.map +1 -1
  178. package/dist/models/ai-config.js +46 -29
  179. package/dist/models/anthropic-provider.d.ts +14 -13
  180. package/dist/models/anthropic-provider.d.ts.map +1 -1
  181. package/dist/models/deepseek-provider.d.ts +9 -8
  182. package/dist/models/deepseek-provider.d.ts.map +1 -1
  183. package/dist/models/google-provider.d.ts +10 -9
  184. package/dist/models/google-provider.d.ts.map +1 -1
  185. package/dist/models/groq-provider.d.ts +8 -7
  186. package/dist/models/groq-provider.d.ts.map +1 -1
  187. package/dist/models/manager.d.ts +7 -4
  188. package/dist/models/manager.d.ts.map +1 -1
  189. package/dist/models/manager.js +5 -25
  190. package/dist/models/openai-provider.d.ts +11 -10
  191. package/dist/models/openai-provider.d.ts.map +1 -1
  192. package/dist/models/opencode-zen-provider.d.ts +23 -0
  193. package/dist/models/opencode-zen-provider.d.ts.map +1 -0
  194. package/dist/models/opencode-zen-provider.js +76 -0
  195. package/dist/models/openrouter-provider.d.ts +34 -29
  196. package/dist/models/openrouter-provider.d.ts.map +1 -1
  197. package/dist/models/openrouter-provider.js +95 -80
  198. package/dist/models/providers.d.ts +4 -4
  199. package/dist/models/providers.d.ts.map +1 -1
  200. package/dist/models/providers.js +7 -1
  201. package/dist/models/xai-provider.d.ts +9 -8
  202. package/dist/models/xai-provider.d.ts.map +1 -1
  203. package/dist/prompts/manager.d.ts +1 -1
  204. package/dist/prompts/manager.d.ts.map +1 -1
  205. package/dist/prompts/manager.js +1 -1
  206. package/dist/prompts.d.ts +0 -1
  207. package/dist/prompts.d.ts.map +1 -1
  208. package/dist/prompts.js +56 -406
  209. package/dist/repl/project-status.d.ts +19 -0
  210. package/dist/repl/project-status.d.ts.map +1 -0
  211. package/dist/repl/project-status.js +78 -0
  212. package/dist/repl-new.d.ts +15 -4
  213. package/dist/repl-new.d.ts.map +1 -1
  214. package/dist/repl-new.js +245 -42
  215. package/dist/{messages.d.ts → sessions/manager.d.ts} +10 -4
  216. package/dist/sessions/manager.d.ts.map +1 -0
  217. package/dist/{messages.js → sessions/manager.js} +60 -14
  218. package/dist/skills.d.ts +0 -4
  219. package/dist/skills.d.ts.map +1 -1
  220. package/dist/skills.js +100 -59
  221. package/dist/terminal/control.d.ts +1 -0
  222. package/dist/terminal/control.d.ts.map +1 -1
  223. package/dist/terminal/control.js +2 -0
  224. package/dist/terminal/formatting.d.ts +1 -2
  225. package/dist/terminal/formatting.d.ts.map +1 -1
  226. package/dist/terminal/formatting.js +1 -2
  227. package/dist/terminal/keys.d.ts +211 -0
  228. package/dist/terminal/keys.d.ts.map +1 -0
  229. package/dist/terminal/keys.js +546 -0
  230. package/dist/terminal/segmenter.d.ts +6 -0
  231. package/dist/terminal/segmenter.d.ts.map +1 -0
  232. package/dist/terminal/segmenter.js +11 -0
  233. package/dist/terminal/select-prompt.d.ts.map +1 -1
  234. package/dist/terminal/select-prompt.js +9 -21
  235. package/dist/terminal/string-width.d.ts.map +1 -1
  236. package/dist/terminal/string-width.js +40 -21
  237. package/dist/terminal/strip-ansi.d.ts.map +1 -1
  238. package/dist/terminal/strip-ansi.js +9 -15
  239. package/dist/tokens/tracker.d.ts.map +1 -1
  240. package/dist/tokens/tracker.js +58 -16
  241. package/dist/tools/bash.d.ts +9 -11
  242. package/dist/tools/bash.d.ts.map +1 -1
  243. package/dist/tools/bash.js +69 -123
  244. package/dist/tools/directory-tree.d.ts +9 -7
  245. package/dist/tools/directory-tree.d.ts.map +1 -1
  246. package/dist/tools/directory-tree.js +89 -70
  247. package/dist/tools/dynamic-tool-loader.d.ts +22 -4
  248. package/dist/tools/dynamic-tool-loader.d.ts.map +1 -1
  249. package/dist/tools/dynamic-tool-loader.js +39 -44
  250. package/dist/tools/edit-file.d.ts +6 -16
  251. package/dist/tools/edit-file.d.ts.map +1 -1
  252. package/dist/tools/edit-file.js +19 -76
  253. package/dist/tools/glob.d.ts +15 -16
  254. package/dist/tools/glob.d.ts.map +1 -1
  255. package/dist/tools/glob.js +77 -119
  256. package/dist/tools/grep.d.ts +19 -22
  257. package/dist/tools/grep.d.ts.map +1 -1
  258. package/dist/tools/grep.js +61 -108
  259. package/dist/tools/index.d.ts +200 -179
  260. package/dist/tools/index.d.ts.map +1 -1
  261. package/dist/tools/index.js +17 -315
  262. package/dist/tools/ls.d.ts +26 -0
  263. package/dist/tools/ls.d.ts.map +1 -0
  264. package/dist/tools/ls.js +80 -0
  265. package/dist/tools/read-file.d.ts +15 -15
  266. package/dist/tools/read-file.d.ts.map +1 -1
  267. package/dist/tools/read-file.js +49 -82
  268. package/dist/tools/save-file.d.ts +4 -4
  269. package/dist/tools/save-file.d.ts.map +1 -1
  270. package/dist/tools/save-file.js +37 -66
  271. package/dist/tools/think.d.ts +4 -4
  272. package/dist/tools/think.d.ts.map +1 -1
  273. package/dist/tools/think.js +9 -38
  274. package/dist/tools/types.d.ts +5 -25
  275. package/dist/tools/types.d.ts.map +1 -1
  276. package/dist/tools/types.js +0 -9
  277. package/dist/tui/autocomplete/attachment-provider.d.ts +18 -0
  278. package/dist/tui/autocomplete/attachment-provider.d.ts.map +1 -0
  279. package/dist/tui/autocomplete/attachment-provider.js +159 -0
  280. package/dist/tui/autocomplete/base-provider.d.ts +17 -0
  281. package/dist/tui/autocomplete/base-provider.d.ts.map +1 -0
  282. package/dist/tui/autocomplete/base-provider.js +1 -0
  283. package/dist/tui/autocomplete/combined-provider.d.ts +20 -0
  284. package/dist/tui/autocomplete/combined-provider.d.ts.map +1 -0
  285. package/dist/tui/autocomplete/combined-provider.js +61 -0
  286. package/dist/tui/autocomplete/command-provider.d.ts +20 -0
  287. package/dist/tui/autocomplete/command-provider.d.ts.map +1 -0
  288. package/dist/tui/autocomplete/command-provider.js +90 -0
  289. package/dist/tui/autocomplete/file-search-provider.d.ts +16 -0
  290. package/dist/tui/autocomplete/file-search-provider.d.ts.map +1 -0
  291. package/dist/tui/autocomplete/file-search-provider.js +123 -0
  292. package/dist/tui/autocomplete/path-provider.d.ts +21 -0
  293. package/dist/tui/autocomplete/path-provider.d.ts.map +1 -0
  294. package/dist/tui/autocomplete/path-provider.js +164 -0
  295. package/dist/tui/autocomplete/utils.d.ts +16 -0
  296. package/dist/tui/autocomplete/utils.d.ts.map +1 -0
  297. package/dist/tui/autocomplete/utils.js +137 -0
  298. package/dist/tui/autocomplete.d.ts +12 -43
  299. package/dist/tui/autocomplete.d.ts.map +1 -1
  300. package/dist/tui/autocomplete.js +20 -465
  301. package/dist/tui/components/box.d.ts.map +1 -1
  302. package/dist/tui/components/box.js +16 -10
  303. package/dist/tui/components/editor.d.ts +1 -2
  304. package/dist/tui/components/editor.d.ts.map +1 -1
  305. package/dist/tui/components/editor.js +148 -107
  306. package/dist/tui/components/footer.d.ts +20 -7
  307. package/dist/tui/components/footer.d.ts.map +1 -1
  308. package/dist/tui/components/footer.js +89 -196
  309. package/dist/tui/components/input.d.ts.map +1 -1
  310. package/dist/tui/components/input.js +8 -7
  311. package/dist/tui/components/loader.d.ts +2 -1
  312. package/dist/tui/components/loader.d.ts.map +1 -1
  313. package/dist/tui/components/loader.js +7 -2
  314. package/dist/tui/components/markdown.d.ts +5 -4
  315. package/dist/tui/components/markdown.d.ts.map +1 -1
  316. package/dist/tui/components/markdown.js +51 -40
  317. package/dist/tui/components/modal.d.ts.map +1 -1
  318. package/dist/tui/components/modal.js +9 -8
  319. package/dist/tui/components/notification.d.ts +28 -0
  320. package/dist/tui/components/notification.d.ts.map +1 -0
  321. package/dist/tui/components/notification.js +63 -0
  322. package/dist/tui/components/progress-bar.d.ts.map +1 -1
  323. package/dist/tui/components/progress-bar.js +3 -15
  324. package/dist/tui/components/select-list.d.ts +0 -15
  325. package/dist/tui/components/select-list.d.ts.map +1 -1
  326. package/dist/tui/components/select-list.js +5 -28
  327. package/dist/tui/components/tool-execution.d.ts +3 -6
  328. package/dist/tui/components/tool-execution.d.ts.map +1 -1
  329. package/dist/tui/components/tool-execution.js +26 -38
  330. package/dist/tui/components/welcome.d.ts +8 -1
  331. package/dist/tui/components/welcome.d.ts.map +1 -1
  332. package/dist/tui/components/welcome.js +45 -6
  333. package/dist/tui/index.d.ts +4 -2
  334. package/dist/tui/index.d.ts.map +1 -1
  335. package/dist/tui/index.js +2 -2
  336. package/dist/tui/terminal.d.ts +2 -2
  337. package/dist/tui/terminal.d.ts.map +1 -1
  338. package/dist/tui/terminal.js +23 -19
  339. package/dist/tui/tui.d.ts +1 -0
  340. package/dist/tui/tui.d.ts.map +1 -1
  341. package/dist/tui/tui.js +24 -29
  342. package/dist/tui/utils.d.ts.map +1 -1
  343. package/dist/tui/utils.js +2 -3
  344. package/dist/utils/yaml.d.ts +11 -0
  345. package/dist/utils/yaml.d.ts.map +1 -0
  346. package/dist/utils/yaml.js +207 -0
  347. package/dist/utils/zod.d.ts +1 -0
  348. package/dist/utils/zod.d.ts.map +1 -1
  349. package/dist/utils/zod.js +17 -0
  350. package/package.json +31 -29
  351. package/bin/acai-wrapper.js +0 -26
  352. package/dist/api/exa/index.d.ts +0 -177
  353. package/dist/api/exa/index.d.ts.map +0 -1
  354. package/dist/api/exa/index.js +0 -439
  355. package/dist/commands/add-directory-command.d.ts +0 -3
  356. package/dist/commands/add-directory-command.d.ts.map +0 -1
  357. package/dist/commands/application-log-command.d.ts +0 -3
  358. package/dist/commands/application-log-command.d.ts.map +0 -1
  359. package/dist/commands/application-log-command.js +0 -43
  360. package/dist/commands/clear-command.d.ts +0 -3
  361. package/dist/commands/clear-command.d.ts.map +0 -1
  362. package/dist/commands/compact-command.d.ts +0 -3
  363. package/dist/commands/compact-command.d.ts.map +0 -1
  364. package/dist/commands/compact-command.js +0 -55
  365. package/dist/commands/context-command.d.ts +0 -3
  366. package/dist/commands/context-command.d.ts.map +0 -1
  367. package/dist/commands/context-command.js +0 -124
  368. package/dist/commands/copy-command.d.ts +0 -3
  369. package/dist/commands/copy-command.d.ts.map +0 -1
  370. package/dist/commands/edit-command.d.ts +0 -3
  371. package/dist/commands/edit-command.d.ts.map +0 -1
  372. package/dist/commands/edit-command.js +0 -42
  373. package/dist/commands/edit-prompt-command.d.ts +0 -3
  374. package/dist/commands/edit-prompt-command.d.ts.map +0 -1
  375. package/dist/commands/edit-prompt-command.js +0 -36
  376. package/dist/commands/exit-command.d.ts.map +0 -1
  377. package/dist/commands/exit-command.js +0 -30
  378. package/dist/commands/files-command.d.ts +0 -3
  379. package/dist/commands/files-command.d.ts.map +0 -1
  380. package/dist/commands/files-command.js +0 -68
  381. package/dist/commands/generate-rules-command.d.ts +0 -3
  382. package/dist/commands/generate-rules-command.d.ts.map +0 -1
  383. package/dist/commands/handoff-command.d.ts +0 -3
  384. package/dist/commands/handoff-command.d.ts.map +0 -1
  385. package/dist/commands/health-command.d.ts +0 -4
  386. package/dist/commands/health-command.d.ts.map +0 -1
  387. package/dist/commands/health-command.js +0 -118
  388. package/dist/commands/help-command.d.ts.map +0 -1
  389. package/dist/commands/history-command.d.ts +0 -3
  390. package/dist/commands/history-command.d.ts.map +0 -1
  391. package/dist/commands/init-command.d.ts +0 -3
  392. package/dist/commands/init-command.d.ts.map +0 -1
  393. package/dist/commands/last-log-command.d.ts +0 -3
  394. package/dist/commands/last-log-command.d.ts.map +0 -1
  395. package/dist/commands/last-log-command.js +0 -71
  396. package/dist/commands/list-directories-command.d.ts +0 -3
  397. package/dist/commands/list-directories-command.d.ts.map +0 -1
  398. package/dist/commands/list-tools-command.d.ts +0 -3
  399. package/dist/commands/list-tools-command.d.ts.map +0 -1
  400. package/dist/commands/model-command.d.ts +0 -3
  401. package/dist/commands/model-command.d.ts.map +0 -1
  402. package/dist/commands/paste-command.d.ts.map +0 -1
  403. package/dist/commands/pickup-command.d.ts +0 -3
  404. package/dist/commands/pickup-command.d.ts.map +0 -1
  405. package/dist/commands/pickup-command.js +0 -109
  406. package/dist/commands/prompt-command.d.ts +0 -21
  407. package/dist/commands/prompt-command.d.ts.map +0 -1
  408. package/dist/commands/prompt-command.js +0 -258
  409. package/dist/commands/remove-directory-command.d.ts +0 -3
  410. package/dist/commands/remove-directory-command.d.ts.map +0 -1
  411. package/dist/commands/reset-command.d.ts +0 -3
  412. package/dist/commands/reset-command.d.ts.map +0 -1
  413. package/dist/commands/rules-command.d.ts +0 -3
  414. package/dist/commands/rules-command.d.ts.map +0 -1
  415. package/dist/commands/rules-command.js +0 -73
  416. package/dist/commands/save-command.d.ts +0 -3
  417. package/dist/commands/save-command.d.ts.map +0 -1
  418. package/dist/commands/shell-command.d.ts +0 -3
  419. package/dist/commands/shell-command.d.ts.map +0 -1
  420. package/dist/commands/usage-command.d.ts +0 -3
  421. package/dist/commands/usage-command.d.ts.map +0 -1
  422. package/dist/commands/usage-command.js +0 -31
  423. package/dist/messages.d.ts.map +0 -1
  424. package/dist/repl/project-status-line.d.ts +0 -3
  425. package/dist/repl/project-status-line.d.ts.map +0 -1
  426. package/dist/repl/project-status-line.js +0 -61
  427. package/dist/repl/tool-call-repair.d.ts +0 -4
  428. package/dist/repl/tool-call-repair.d.ts.map +0 -1
  429. package/dist/repl/tool-call-repair.js +0 -54
  430. package/dist/terminal/markdown.d.ts +0 -2
  431. package/dist/terminal/markdown.d.ts.map +0 -1
  432. package/dist/terminal/markdown.js +0 -120
  433. package/dist/tokens/threshold.d.ts +0 -20
  434. package/dist/tokens/threshold.d.ts.map +0 -1
  435. package/dist/tokens/threshold.js +0 -67
  436. package/dist/tools/advanced-edit-file.d.ts +0 -69
  437. package/dist/tools/advanced-edit-file.d.ts.map +0 -1
  438. package/dist/tools/advanced-edit-file.js +0 -285
  439. package/dist/tools/agent.d.ts +0 -29
  440. package/dist/tools/agent.d.ts.map +0 -1
  441. package/dist/tools/agent.js +0 -117
  442. package/dist/tools/batch.d.ts +0 -34
  443. package/dist/tools/batch.d.ts.map +0 -1
  444. package/dist/tools/batch.js +0 -174
  445. package/dist/tools/code-interpreter.d.ts +0 -25
  446. package/dist/tools/code-interpreter.d.ts.map +0 -1
  447. package/dist/tools/code-interpreter.js +0 -183
  448. package/dist/tools/delete-file.d.ts +0 -24
  449. package/dist/tools/delete-file.d.ts.map +0 -1
  450. package/dist/tools/delete-file.js +0 -77
  451. package/dist/tools/dynamic-tool-parser.d.ts +0 -21
  452. package/dist/tools/dynamic-tool-parser.d.ts.map +0 -1
  453. package/dist/tools/dynamic-tool-parser.js +0 -22
  454. package/dist/tools/llm-edit-fixer.d.ts +0 -24
  455. package/dist/tools/llm-edit-fixer.d.ts.map +0 -1
  456. package/dist/tools/llm-edit-fixer.js +0 -136
  457. package/dist/tools/move-file.d.ts +0 -26
  458. package/dist/tools/move-file.d.ts.map +0 -1
  459. package/dist/tools/move-file.js +0 -65
  460. package/dist/tools/read-multiple-files.d.ts +0 -26
  461. package/dist/tools/read-multiple-files.d.ts.map +0 -1
  462. package/dist/tools/read-multiple-files.js +0 -196
  463. package/dist/tools/web-fetch.d.ts +0 -56
  464. package/dist/tools/web-fetch.d.ts.map +0 -1
  465. package/dist/tools/web-fetch.js +0 -247
  466. package/dist/tools/web-search.d.ts +0 -23
  467. package/dist/tools/web-search.d.ts.map +0 -1
  468. package/dist/tools/web-search.js +0 -148
  469. package/dist/tui/components/prompt-status.d.ts +0 -17
  470. package/dist/tui/components/prompt-status.d.ts.map +0 -1
  471. package/dist/tui/components/prompt-status.js +0 -26
@@ -1,46 +1,128 @@
1
+ import { isCtrlC, isEnter, isEscape, isNavigationKey, isTab, } from "../../terminal/keys.js";
2
+ import { getSegmenter } from "../../terminal/segmenter.js";
1
3
  import style from "../../terminal/style.js";
2
4
  import { visibleWidth } from "../utils.js";
3
- import { isNavigationKey, isTab, SelectList } from "./select-list.js";
4
- // Grapheme segmenter for proper Unicode iteration (handles emojis, etc.)
5
- const segmenter = new Intl.Segmenter();
6
- // Cache for line metrics to avoid repeated segmentation
5
+ import { SelectList } from "./select-list.js";
6
+ // Cache for line metrics to avoid repeated segmentation (LRU-style)
7
7
  const lineMetricsCache = {
8
8
  maxSize: 1000,
9
9
  cache: new Map(),
10
10
  get(line) {
11
- let cached = this.cache.get(line);
12
- if (!cached) {
13
- // Fast path for ASCII-only lines (common case)
14
- if (/^[\x20-\x7E\t]*$/.test(line)) {
15
- // ASCII characters (including tabs)
16
- const graphemes = line.split(""); // Simple split for ASCII
17
- const widths = graphemes.map((char) => (char === "\t" ? 3 : 1));
18
- const totalWidth = widths.reduce((sum, w) => sum + w, 0);
19
- cached = { graphemes, widths, totalWidth };
20
- }
21
- else {
22
- // Complex Unicode line, use full segmentation
23
- const graphemes = [...segmenter.segment(line)].map((seg) => seg.segment);
24
- const widths = graphemes.map((g) => visibleWidth(g));
25
- const totalWidth = widths.reduce((sum, w) => sum + w, 0);
26
- cached = { graphemes, widths, totalWidth };
27
- }
11
+ const cached = this.cache.get(line);
12
+ if (cached) {
13
+ // Move to end for LRU behavior (most recently used)
14
+ this.cache.delete(line);
28
15
  this.cache.set(line, cached);
29
- // Enforce size limit
30
- if (this.cache.size > this.maxSize) {
31
- // Delete first (oldest) entry - simple but not LRU; okay for our use case
32
- const firstKey = this.cache.keys().next().value;
33
- if (firstKey !== undefined) {
34
- this.cache.delete(firstKey);
35
- }
16
+ return cached;
17
+ }
18
+ // Compute metrics
19
+ let result;
20
+ // Fast path for ASCII-only lines (common case)
21
+ if (/^[\x20-\x7E\t]*$/.test(line)) {
22
+ const graphemes = line.split("");
23
+ const widths = graphemes.map((char) => (char === "\t" ? 3 : 1));
24
+ const totalWidth = widths.reduce((sum, w) => sum + w, 0);
25
+ result = { graphemes, widths, totalWidth };
26
+ }
27
+ else {
28
+ // Complex Unicode line, use shared segmenter
29
+ const graphemes = [...getSegmenter().segment(line)].map((seg) => seg.segment);
30
+ const widths = graphemes.map((g) => visibleWidth(g));
31
+ const totalWidth = widths.reduce((sum, w) => sum + w, 0);
32
+ result = { graphemes, widths, totalWidth };
33
+ }
34
+ // Enforce size limit before adding (evict oldest = first entry)
35
+ if (this.cache.size >= this.maxSize) {
36
+ const firstKey = this.cache.keys().next().value;
37
+ if (firstKey !== undefined) {
38
+ this.cache.delete(firstKey);
36
39
  }
37
40
  }
38
- return cached;
41
+ this.cache.set(line, result);
42
+ return result;
39
43
  },
40
44
  clear() {
41
45
  this.cache.clear();
42
46
  },
43
47
  };
48
+ /**
49
+ * Compute word-wrapped chunks for a line that exceeds the given width.
50
+ * Shared between layoutText() and buildVisualLineMap() to avoid duplication.
51
+ */
52
+ function computeLineChunks(line, maxWidth) {
53
+ const chunks = [];
54
+ let currentChunk = "";
55
+ let currentWidth = 0;
56
+ let chunkStartIndex = 0;
57
+ let currentIndex = 0;
58
+ // Split into words (separated by whitespace) while preserving separators
59
+ const wordPattern = /(\s+)|(\S+\s*)|(\S)/g;
60
+ const parts = [];
61
+ let match = wordPattern.exec(line);
62
+ let pos = 0;
63
+ while (match !== null) {
64
+ const matchedText = match[0];
65
+ const isWhitespace = /^\s*$/.test(matchedText);
66
+ const width = matchedText
67
+ .split("")
68
+ .reduce((sum, c) => sum + (c === "\t" ? 3 : 1), 0);
69
+ parts.push({ text: matchedText, isWord: !isWhitespace, width });
70
+ pos = match.index + matchedText.length;
71
+ match = wordPattern.exec(line);
72
+ }
73
+ // Handle remaining text after last match
74
+ if (pos < line.length) {
75
+ const remaining = line.slice(pos);
76
+ const width = remaining
77
+ .split("")
78
+ .reduce((sum, c) => sum + (c === "\t" ? 3 : 1), 0);
79
+ parts.push({ text: remaining, isWord: true, width });
80
+ }
81
+ for (const part of parts) {
82
+ const wouldExceed = currentWidth + part.width > maxWidth;
83
+ const isWordPart = part.isWord && currentChunk.length > 0 && !currentChunk.endsWith(" ");
84
+ if (wouldExceed && isWordPart && currentChunk.trimEnd().length > 0) {
85
+ // Current word would overflow - break before this word
86
+ chunks.push({
87
+ text: currentChunk,
88
+ startIndex: chunkStartIndex,
89
+ endIndex: currentIndex,
90
+ width: currentWidth,
91
+ });
92
+ currentChunk = part.text;
93
+ currentWidth = part.width;
94
+ chunkStartIndex = currentIndex;
95
+ }
96
+ else if (wouldExceed && currentChunk !== "") {
97
+ // Non-word or start of line overflow - break here
98
+ chunks.push({
99
+ text: currentChunk,
100
+ startIndex: chunkStartIndex,
101
+ endIndex: currentIndex,
102
+ width: currentWidth,
103
+ });
104
+ currentChunk = part.text;
105
+ currentWidth = part.width;
106
+ chunkStartIndex = currentIndex;
107
+ }
108
+ else {
109
+ // Add to current chunk
110
+ currentChunk += part.text;
111
+ currentWidth += part.width;
112
+ }
113
+ currentIndex += part.text.length;
114
+ }
115
+ // Push the last chunk
116
+ if (currentChunk !== "") {
117
+ chunks.push({
118
+ text: currentChunk,
119
+ startIndex: chunkStartIndex,
120
+ endIndex: currentIndex,
121
+ width: currentWidth,
122
+ });
123
+ }
124
+ return chunks;
125
+ }
44
126
  /**
45
127
  * Text editor component with support for multi-line input and autocomplete.
46
128
  *
@@ -91,7 +173,6 @@ export class Editor {
91
173
  disableSubmit = false;
92
174
  // Custom key handlers for coding-agent
93
175
  onEscape;
94
- onCtrlC;
95
176
  onRenderRequested;
96
177
  constructor(theme) {
97
178
  // Default theme if none provided (backward compatibility)
@@ -181,7 +262,7 @@ export class Editor {
181
262
  if (after.length > 0) {
182
263
  // Cursor is on a character (grapheme) - replace it with highlighted version
183
264
  // Get the first grapheme from 'after'
184
- const afterGraphemes = [...segmenter.segment(after)];
265
+ const afterGraphemes = [...getSegmenter().segment(after)];
185
266
  const firstGrapheme = afterGraphemes[0]?.segment || "";
186
267
  const restAfter = after.slice(firstGrapheme.length);
187
268
  const cursor = `\x1b[7m${firstGrapheme}\x1b[0m`;
@@ -200,7 +281,7 @@ export class Editor {
200
281
  else {
201
282
  // Line is at full width - use reverse video on last grapheme if possible
202
283
  // or just show cursor at the end without adding space
203
- const beforeGraphemes = [...segmenter.segment(before)];
284
+ const beforeGraphemes = [...getSegmenter().segment(before)];
204
285
  if (beforeGraphemes.length > 0) {
205
286
  const lastGrapheme = beforeGraphemes[beforeGraphemes.length - 1]?.segment || "";
206
287
  const cursor = `\x1b[7m${lastGrapheme}\x1b[0m`;
@@ -269,13 +350,12 @@ export class Editor {
269
350
  }
270
351
  // Intercept Escape key - but only if autocomplete is NOT active
271
352
  // (let parent handle escape for autocomplete cancellation)
272
- if (data === "\x1b" && this.onEscape && !this.isShowingAutocomplete()) {
353
+ if (isEscape(data) && this.onEscape && !this.isShowingAutocomplete()) {
273
354
  this.onEscape();
274
355
  return;
275
356
  }
276
357
  // Intercept Ctrl+C
277
- if (data === "\x03" && this.onCtrlC) {
278
- this.onCtrlC();
358
+ if (isCtrlC(data)) {
279
359
  return;
280
360
  }
281
361
  // Process regular input data
@@ -290,12 +370,12 @@ export class Editor {
290
370
  // Handle autocomplete special keys first (but don't block other input)
291
371
  if (this.isAutocompleting && this.autocompleteList) {
292
372
  // Escape - cancel autocomplete
293
- if (data === "\x1b") {
373
+ if (isEscape(data)) {
294
374
  this.cancelAutocomplete();
295
375
  return;
296
376
  }
297
377
  // Enter - apply selection
298
- if (data === "\r") {
378
+ if (isEnter(data)) {
299
379
  const selected = this.autocompleteList.getSelectedItem();
300
380
  if (selected && this.autocompleteProvider) {
301
381
  const result = this.autocompleteProvider.applyCompletion(this.state.lines, this.state.cursorLine, this.state.cursorCol, selected, this.autocompletePrefix);
@@ -488,43 +568,8 @@ export class Editor {
488
568
  }
489
569
  }
490
570
  else {
491
- // Line needs wrapping - use cached graphemes and widths
492
- const chunks = [];
493
- let currentChunk = "";
494
- let currentWidth = 0;
495
- let chunkStartIndex = 0;
496
- let currentIndex = 0;
497
- for (let g = 0; g < metrics.graphemes.length; g++) {
498
- const grapheme = metrics.graphemes[g];
499
- const graphemeWidth = metrics.widths[g];
500
- if (currentWidth + graphemeWidth > contentWidth &&
501
- currentChunk !== "") {
502
- // Start a new chunk
503
- chunks.push({
504
- text: currentChunk,
505
- startIndex: chunkStartIndex,
506
- endIndex: currentIndex,
507
- width: currentWidth,
508
- });
509
- currentChunk = grapheme;
510
- currentWidth = graphemeWidth;
511
- chunkStartIndex = currentIndex;
512
- }
513
- else {
514
- currentChunk += grapheme;
515
- currentWidth += graphemeWidth;
516
- }
517
- currentIndex += grapheme.length;
518
- }
519
- // Push the last chunk
520
- if (currentChunk !== "") {
521
- chunks.push({
522
- text: currentChunk,
523
- startIndex: chunkStartIndex,
524
- endIndex: currentIndex,
525
- width: currentWidth,
526
- });
527
- }
571
+ // Line needs wrapping - use shared helper
572
+ const chunks = computeLineChunks(line, contentWidth);
528
573
  for (let chunkIndex = 0; chunkIndex < chunks.length; chunkIndex++) {
529
574
  const chunk = chunks[chunkIndex];
530
575
  if (!chunk)
@@ -593,6 +638,18 @@ export class Editor {
593
638
  void this.tryTriggerAutocomplete();
594
639
  }
595
640
  }
641
+ // Auto-trigger for "#" file search
642
+ else if (char === "#") {
643
+ const currentLine = this.state.lines[this.state.cursorLine] || "";
644
+ const textBeforeCursor = currentLine.slice(0, this.state.cursorCol);
645
+ // Only trigger if # is after whitespace or at start of line
646
+ const charBeforeHash = textBeforeCursor[textBeforeCursor.length - 2];
647
+ if (textBeforeCursor.length === 1 ||
648
+ charBeforeHash === " " ||
649
+ charBeforeHash === "\t") {
650
+ void this.tryTriggerAutocomplete();
651
+ }
652
+ }
596
653
  // Also auto-trigger when typing letters in a slash command context
597
654
  else if (/[a-zA-Z0-9]/.test(char)) {
598
655
  const currentLine = this.state.lines[this.state.cursorLine] || "";
@@ -605,6 +662,10 @@ export class Editor {
605
662
  else if (textBeforeCursor.match(/(?:^|[\s])@[^\s]*$/)) {
606
663
  void this.tryTriggerAutocomplete();
607
664
  }
665
+ // Check if we're in a # file search context
666
+ else if (textBeforeCursor.match(/(?:^|[\s])#[^\s]*$/)) {
667
+ void this.tryTriggerAutocomplete();
668
+ }
608
669
  }
609
670
  }
610
671
  else {
@@ -857,35 +918,13 @@ export class Editor {
857
918
  visualLines.push({ logicalLine: i, startCol: 0, length: line.length });
858
919
  }
859
920
  else {
860
- // Line needs wrapping - use cached graphemes and widths
861
- let currentWidth = 0;
862
- let chunkStartIndex = 0;
863
- let currentIndex = 0;
864
- for (let g = 0; g < metrics.graphemes.length; g++) {
865
- const grapheme = metrics.graphemes[g];
866
- const graphemeWidth = metrics.widths[g];
867
- if (currentWidth + graphemeWidth > width &&
868
- currentIndex > chunkStartIndex) {
869
- // Start a new chunk
870
- visualLines.push({
871
- logicalLine: i,
872
- startCol: chunkStartIndex,
873
- length: currentIndex - chunkStartIndex,
874
- });
875
- chunkStartIndex = currentIndex;
876
- currentWidth = graphemeWidth;
877
- }
878
- else {
879
- currentWidth += graphemeWidth;
880
- }
881
- currentIndex += grapheme.length;
882
- }
883
- // Push the last chunk
884
- if (currentIndex > chunkStartIndex) {
921
+ // Line needs wrapping - use shared helper
922
+ const chunks = computeLineChunks(line, width);
923
+ for (const chunk of chunks) {
885
924
  visualLines.push({
886
925
  logicalLine: i,
887
- startCol: chunkStartIndex,
888
- length: currentIndex - chunkStartIndex,
926
+ startCol: chunk.startIndex,
927
+ length: chunk.endIndex - chunk.startIndex,
889
928
  });
890
929
  }
891
930
  }
@@ -1127,14 +1166,16 @@ export class Editor {
1127
1166
  const currentLine = this.state.lines[this.state.cursorLine] || "";
1128
1167
  const textBeforeCursor = currentLine.slice(0, this.state.cursorCol);
1129
1168
  // If we're no longer in the context that triggered autocomplete, cancel it
1130
- // For slash commands, check if we're still in slash command context
1131
- // For file paths, check if we're still in the same path context
1132
- if (textBeforeCursor.startsWith("/")) {
1133
- // For slash commands, we should continue autocomplete as long as we're in slash command context
1134
- // Don't cancel based on prefix matching for progressive typing
1169
+ // For slash commands, @ file attachments, and # file search, allow progressive typing
1170
+ // For other file paths, check if we're still in the same path context
1171
+ if (textBeforeCursor.startsWith("/") ||
1172
+ textBeforeCursor.match(/(?:^|[\s])@[^\s]*$/) ||
1173
+ textBeforeCursor.match(/(?:^|[\s])#[^\s]*$/)) {
1174
+ // For slash commands, @ file attachments, and # file search,
1175
+ // continue autocomplete as long as we're in the right context
1135
1176
  }
1136
1177
  else {
1137
- // For file paths, check if we're still in the same path context
1178
+ // For other file paths, check if we're still in the same path context
1138
1179
  if (!textBeforeCursor.endsWith(this.autocompletePrefix)) {
1139
1180
  this.cancelAutocomplete();
1140
1181
  return;
@@ -1,12 +1,25 @@
1
+ import type { LanguageModelUsage } from "ai";
1
2
  import type { AgentState } from "../../agent/index.ts";
2
- import { Container } from "../tui.ts";
3
- /**
4
- * Footer component that shows pwd, token stats, and context usage
5
- */
6
- export declare class FooterComponent extends Container {
3
+ import type { ModelManager } from "../../models/manager.ts";
4
+ import type { ProjectStatusData } from "../../repl/project-status.ts";
5
+ import { type Component } from "../tui.ts";
6
+ type State = {
7
+ projectStatus: ProjectStatusData;
8
+ currentContextWindow: number;
9
+ contextWindow: number;
10
+ usage?: LanguageModelUsage;
11
+ agentState?: AgentState;
12
+ };
13
+ export declare class FooterComponent implements Component {
14
+ private modelManager;
7
15
  private state;
8
- constructor(state: AgentState);
9
- updateState(state: AgentState): void;
16
+ private progressBar;
17
+ private usage?;
18
+ private agentState?;
19
+ constructor(modelManager: ModelManager, state: State);
20
+ setState(state: State): void;
21
+ resetState(): void;
10
22
  render(width: number): string[];
11
23
  }
24
+ export {};
12
25
  //# sourceMappingURL=footer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"footer.d.ts","sourceRoot":"","sources":["../../../source/tui/components/footer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIvD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC;;GAEG;AACH,qBAAa,eAAgB,SAAQ,SAAS;IAC5C,OAAO,CAAC,KAAK,CAAa;gBAEd,KAAK,EAAE,UAAU;IAK7B,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAI3B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CA+IzC"}
1
+ {"version":3,"file":"footer.d.ts","sourceRoot":"","sources":["../../../source/tui/components/footer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,IAAI,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGtE,OAAO,EAAE,KAAK,SAAS,EAAgB,MAAM,WAAW,CAAC;AAGzD,KAAK,KAAK,GAAG;IACX,aAAa,EAAE,iBAAiB,CAAC;IACjC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,CAAC;AAqCF,qBAAa,eAAgB,YAAW,SAAS;IAC/C,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,KAAK,CAAC,CAAqB;IACnC,OAAO,CAAC,UAAU,CAAC,CAAa;gBACpB,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK;IAWpD,QAAQ,CAAC,KAAK,EAAE,KAAK;IAYrB,UAAU;IAKV,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CA+DhC"}