@travisennis/acai 0.0.9 → 0.0.11

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 (403) hide show
  1. package/README.md +51 -760
  2. package/bin/acai +52 -0
  3. package/dist/agent/index.d.ts +12 -2
  4. package/dist/agent/index.d.ts.map +1 -1
  5. package/dist/agent/index.js +380 -199
  6. package/dist/agent/sub-agent.d.ts +23 -0
  7. package/dist/agent/sub-agent.d.ts.map +1 -0
  8. package/dist/agent/sub-agent.js +109 -0
  9. package/dist/cli/index.d.ts +26 -0
  10. package/dist/cli/index.d.ts.map +1 -0
  11. package/dist/{cli.js → cli/index.js} +84 -77
  12. package/dist/{stdin.d.ts → cli/stdin.d.ts} +2 -1
  13. package/dist/cli/stdin.d.ts.map +1 -0
  14. package/dist/{stdin.js → cli/stdin.js} +11 -0
  15. package/dist/commands/copy/index.js +2 -2
  16. package/dist/commands/copy/utils.d.ts.map +1 -1
  17. package/dist/commands/copy/utils.js +15 -13
  18. package/dist/commands/generate-rules/index.d.ts +1 -1
  19. package/dist/commands/generate-rules/index.d.ts.map +1 -1
  20. package/dist/commands/generate-rules/index.js +16 -101
  21. package/dist/commands/generate-rules/service.d.ts +22 -0
  22. package/dist/commands/generate-rules/service.d.ts.map +1 -0
  23. package/dist/commands/generate-rules/service.js +103 -0
  24. package/dist/commands/handoff/index.js +2 -2
  25. package/dist/commands/health/index.js +1 -1
  26. package/dist/commands/health/utils.d.ts +3 -2
  27. package/dist/commands/health/utils.d.ts.map +1 -1
  28. package/dist/commands/health/utils.js +6 -0
  29. package/dist/commands/history/index.d.ts +1 -1
  30. package/dist/commands/history/index.d.ts.map +1 -1
  31. package/dist/commands/history/index.js +17 -18
  32. package/dist/commands/history/types.d.ts +38 -0
  33. package/dist/commands/history/types.d.ts.map +1 -1
  34. package/dist/commands/history/utils.d.ts.map +1 -1
  35. package/dist/commands/history/utils.js +63 -58
  36. package/dist/commands/init/index.d.ts.map +1 -1
  37. package/dist/commands/init/index.js +3 -8
  38. package/dist/commands/init-project/index.d.ts.map +1 -1
  39. package/dist/commands/init-project/index.js +3 -3
  40. package/dist/commands/init-project/utils.d.ts +2 -1
  41. package/dist/commands/init-project/utils.d.ts.map +1 -1
  42. package/dist/commands/init-project/utils.js +10 -2
  43. package/dist/commands/list-tools/index.d.ts.map +1 -1
  44. package/dist/commands/list-tools/index.js +7 -31
  45. package/dist/commands/manager.d.ts +2 -2
  46. package/dist/commands/manager.d.ts.map +1 -1
  47. package/dist/commands/manager.js +55 -33
  48. package/dist/commands/model/index.d.ts.map +1 -1
  49. package/dist/commands/model/index.js +20 -151
  50. package/dist/commands/model/model-panel.d.ts +4 -0
  51. package/dist/commands/model/model-panel.d.ts.map +1 -0
  52. package/dist/commands/model/model-panel.js +144 -0
  53. package/dist/commands/paste/index.d.ts.map +1 -1
  54. package/dist/commands/paste/index.js +59 -62
  55. package/dist/commands/paste/utils.d.ts.map +1 -1
  56. package/dist/commands/paste/utils.js +88 -58
  57. package/dist/commands/pickup/index.d.ts.map +1 -1
  58. package/dist/commands/pickup/index.js +6 -3
  59. package/dist/commands/pickup/utils.js +3 -3
  60. package/dist/commands/resources/index.d.ts.map +1 -1
  61. package/dist/commands/resources/index.js +33 -50
  62. package/dist/commands/review/index.d.ts.map +1 -1
  63. package/dist/commands/review/index.js +3 -117
  64. package/dist/commands/review/review-panel.d.ts +3 -0
  65. package/dist/commands/review/review-panel.d.ts.map +1 -0
  66. package/dist/commands/review/review-panel.js +186 -0
  67. package/dist/commands/review/utils.d.ts +15 -1
  68. package/dist/commands/review/utils.d.ts.map +1 -1
  69. package/dist/commands/review/utils.js +127 -68
  70. package/dist/commands/session/index.d.ts +1 -1
  71. package/dist/commands/session/index.d.ts.map +1 -1
  72. package/dist/commands/session/index.js +124 -135
  73. package/dist/commands/shell/index.d.ts.map +1 -1
  74. package/dist/commands/shell/index.js +16 -1
  75. package/dist/commands/types.d.ts +2 -2
  76. package/dist/commands/types.d.ts.map +1 -1
  77. package/dist/{config.d.ts → config/index.d.ts} +20 -9
  78. package/dist/config/index.d.ts.map +1 -0
  79. package/dist/{config.js → config/index.js} +43 -42
  80. package/dist/execution/index.d.ts.map +1 -1
  81. package/dist/execution/index.js +75 -55
  82. package/dist/index.d.ts +1 -0
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +148 -141
  85. package/dist/middleware/cache.d.ts.map +1 -1
  86. package/dist/middleware/cache.js +18 -36
  87. package/dist/models/ai-config.d.ts +1 -0
  88. package/dist/models/ai-config.d.ts.map +1 -1
  89. package/dist/models/ai-config.js +4 -3
  90. package/dist/models/anthropic-provider.d.ts +2 -5
  91. package/dist/models/anthropic-provider.d.ts.map +1 -1
  92. package/dist/models/anthropic-provider.js +3 -70
  93. package/dist/models/deepseek-provider.d.ts +1 -0
  94. package/dist/models/deepseek-provider.d.ts.map +1 -1
  95. package/dist/models/google-provider.d.ts +2 -3
  96. package/dist/models/google-provider.d.ts.map +1 -1
  97. package/dist/models/google-provider.js +0 -26
  98. package/dist/models/groq-provider.d.ts +1 -0
  99. package/dist/models/groq-provider.d.ts.map +1 -1
  100. package/dist/models/manager.d.ts +13 -2
  101. package/dist/models/manager.d.ts.map +1 -1
  102. package/dist/models/manager.js +20 -8
  103. package/dist/models/openai-provider.d.ts +2 -5
  104. package/dist/models/openai-provider.d.ts.map +1 -1
  105. package/dist/models/openai-provider.js +0 -52
  106. package/dist/models/opencode-go-provider.d.ts +25 -0
  107. package/dist/models/opencode-go-provider.d.ts.map +1 -0
  108. package/dist/models/opencode-go-provider.js +78 -0
  109. package/dist/models/opencode-zen-provider.d.ts +7 -3
  110. package/dist/models/opencode-zen-provider.d.ts.map +1 -1
  111. package/dist/models/opencode-zen-provider.js +49 -10
  112. package/dist/models/openrouter-provider.d.ts +27 -31
  113. package/dist/models/openrouter-provider.d.ts.map +1 -1
  114. package/dist/models/openrouter-provider.js +121 -180
  115. package/dist/models/providers.d.ts +3 -3
  116. package/dist/models/providers.d.ts.map +1 -1
  117. package/dist/models/providers.js +6 -0
  118. package/dist/models/xai-provider.d.ts +4 -3
  119. package/dist/models/xai-provider.d.ts.map +1 -1
  120. package/dist/models/xai-provider.js +18 -18
  121. package/dist/modes/manager.d.ts +24 -0
  122. package/dist/modes/manager.d.ts.map +1 -0
  123. package/dist/modes/manager.js +77 -0
  124. package/dist/modes/prompts.d.ts +2 -0
  125. package/dist/modes/prompts.d.ts.map +1 -0
  126. package/dist/modes/prompts.js +142 -0
  127. package/dist/prompts/mentions.d.ts +11 -0
  128. package/dist/prompts/mentions.d.ts.map +1 -0
  129. package/dist/{mentions.js → prompts/mentions.js} +55 -85
  130. package/dist/{prompts.d.ts → prompts/system-prompt.d.ts} +7 -2
  131. package/dist/prompts/system-prompt.d.ts.map +1 -0
  132. package/dist/{prompts.js → prompts/system-prompt.js} +31 -16
  133. package/dist/repl/index.d.ts +174 -0
  134. package/dist/repl/index.d.ts.map +1 -0
  135. package/dist/{repl-new.js → repl/index.js} +397 -76
  136. package/dist/repl/project-status.d.ts +1 -0
  137. package/dist/repl/project-status.d.ts.map +1 -1
  138. package/dist/repl/project-status.js +4 -1
  139. package/dist/sessions/manager.d.ts +92 -0
  140. package/dist/sessions/manager.d.ts.map +1 -1
  141. package/dist/sessions/manager.js +262 -9
  142. package/dist/sessions/summary.d.ts +4 -0
  143. package/dist/sessions/summary.d.ts.map +1 -0
  144. package/dist/sessions/summary.js +30 -0
  145. package/dist/skills/index.d.ts +29 -0
  146. package/dist/skills/index.d.ts.map +1 -0
  147. package/dist/skills/index.js +294 -0
  148. package/dist/subagents/index.d.ts +16 -0
  149. package/dist/subagents/index.d.ts.map +1 -0
  150. package/dist/subagents/index.js +231 -0
  151. package/dist/terminal/control.d.ts +1 -1
  152. package/dist/terminal/control.d.ts.map +1 -1
  153. package/dist/terminal/control.js +3 -3
  154. package/dist/terminal/east-asian-width.d.ts.map +1 -1
  155. package/dist/terminal/east-asian-width.js +404 -351
  156. package/dist/terminal/keys.d.ts +17 -0
  157. package/dist/terminal/keys.d.ts.map +1 -1
  158. package/dist/terminal/keys.js +37 -0
  159. package/dist/terminal/select-prompt.d.ts.map +1 -1
  160. package/dist/terminal/select-prompt.js +24 -12
  161. package/dist/terminal/string-width.d.ts.map +1 -1
  162. package/dist/terminal/string-width.js +25 -27
  163. package/dist/terminal/style.d.ts.map +1 -1
  164. package/dist/terminal/style.js +4 -7
  165. package/dist/terminal/supports-color.d.ts.map +1 -1
  166. package/dist/terminal/supports-color.js +41 -27
  167. package/dist/terminal/table/cell.d.ts +12 -0
  168. package/dist/terminal/table/cell.d.ts.map +1 -1
  169. package/dist/terminal/table/cell.js +40 -25
  170. package/dist/terminal/table/layout-manager.d.ts.map +1 -1
  171. package/dist/terminal/table/layout-manager.js +100 -68
  172. package/dist/terminal/table/utils.d.ts +1 -1
  173. package/dist/terminal/table/utils.d.ts.map +1 -1
  174. package/dist/terminal/table/utils.js +17 -10
  175. package/dist/terminal/wrap-ansi.d.ts.map +1 -1
  176. package/dist/terminal/wrap-ansi.js +174 -105
  177. package/dist/tokens/tracker.d.ts +1 -0
  178. package/dist/tokens/tracker.d.ts.map +1 -1
  179. package/dist/tokens/tracker.js +3 -0
  180. package/dist/tools/agent.d.ts +27 -0
  181. package/dist/tools/agent.d.ts.map +1 -0
  182. package/dist/tools/agent.js +81 -0
  183. package/dist/tools/apply-patch.d.ts +62 -0
  184. package/dist/tools/apply-patch.d.ts.map +1 -0
  185. package/dist/tools/apply-patch.js +377 -0
  186. package/dist/tools/bash.d.ts +4 -3
  187. package/dist/tools/bash.d.ts.map +1 -1
  188. package/dist/tools/bash.js +349 -141
  189. package/dist/tools/directory-tree.d.ts +3 -3
  190. package/dist/tools/directory-tree.d.ts.map +1 -1
  191. package/dist/tools/directory-tree.js +8 -5
  192. package/dist/tools/dynamic-tool-loader.d.ts +3 -6
  193. package/dist/tools/dynamic-tool-loader.d.ts.map +1 -1
  194. package/dist/tools/dynamic-tool-loader.js +20 -4
  195. package/dist/tools/edit-file.d.ts +7 -7
  196. package/dist/tools/edit-file.d.ts.map +1 -1
  197. package/dist/tools/edit-file.js +292 -85
  198. package/dist/tools/glob.d.ts +6 -6
  199. package/dist/tools/glob.d.ts.map +1 -1
  200. package/dist/tools/glob.js +110 -63
  201. package/dist/tools/grep.d.ts +15 -12
  202. package/dist/tools/grep.d.ts.map +1 -1
  203. package/dist/tools/grep.js +315 -193
  204. package/dist/tools/index.d.ts +114 -9
  205. package/dist/tools/index.d.ts.map +1 -1
  206. package/dist/tools/index.js +39 -24
  207. package/dist/tools/ls.d.ts +2 -2
  208. package/dist/tools/ls.d.ts.map +1 -1
  209. package/dist/tools/ls.js +7 -5
  210. package/dist/tools/read-file.d.ts +4 -6
  211. package/dist/tools/read-file.d.ts.map +1 -1
  212. package/dist/tools/read-file.js +84 -39
  213. package/dist/tools/save-file.d.ts +3 -3
  214. package/dist/tools/save-file.d.ts.map +1 -1
  215. package/dist/tools/save-file.js +36 -31
  216. package/dist/tools/skill.d.ts +23 -0
  217. package/dist/tools/skill.d.ts.map +1 -0
  218. package/dist/tools/skill.js +65 -0
  219. package/dist/tools/think.d.ts.map +1 -1
  220. package/dist/tools/think.js +2 -9
  221. package/dist/tools/utils.d.ts +2 -0
  222. package/dist/tools/utils.d.ts.map +1 -1
  223. package/dist/tools/utils.js +12 -0
  224. package/dist/tools/web-fetch.d.ts +50 -0
  225. package/dist/tools/web-fetch.d.ts.map +1 -0
  226. package/dist/tools/web-fetch.js +446 -0
  227. package/dist/tools/web-search.d.ts +44 -0
  228. package/dist/tools/web-search.d.ts.map +1 -0
  229. package/dist/tools/web-search.js +226 -0
  230. package/dist/tui/autocomplete/attachment-provider.d.ts +3 -6
  231. package/dist/tui/autocomplete/attachment-provider.d.ts.map +1 -1
  232. package/dist/tui/autocomplete/attachment-provider.js +25 -78
  233. package/dist/tui/autocomplete/base-provider.d.ts +1 -0
  234. package/dist/tui/autocomplete/base-provider.d.ts.map +1 -1
  235. package/dist/tui/autocomplete/combined-provider.d.ts +1 -4
  236. package/dist/tui/autocomplete/combined-provider.d.ts.map +1 -1
  237. package/dist/tui/autocomplete/combined-provider.js +3 -17
  238. package/dist/tui/autocomplete/command-provider.d.ts +1 -0
  239. package/dist/tui/autocomplete/command-provider.d.ts.map +1 -1
  240. package/dist/tui/autocomplete/command-provider.js +3 -0
  241. package/dist/tui/autocomplete/file-search-provider.d.ts +2 -1
  242. package/dist/tui/autocomplete/file-search-provider.d.ts.map +1 -1
  243. package/dist/tui/autocomplete/file-search-provider.js +37 -17
  244. package/dist/tui/autocomplete/skill-provider.d.ts +17 -0
  245. package/dist/tui/autocomplete/skill-provider.d.ts.map +1 -0
  246. package/dist/tui/autocomplete/skill-provider.js +49 -0
  247. package/dist/tui/autocomplete/utils.d.ts +2 -1
  248. package/dist/tui/autocomplete/utils.d.ts.map +1 -1
  249. package/dist/tui/autocomplete/utils.js +25 -23
  250. package/dist/tui/autocomplete.d.ts +2 -2
  251. package/dist/tui/autocomplete.d.ts.map +1 -1
  252. package/dist/tui/autocomplete.js +3 -5
  253. package/dist/tui/components/assistant-message.d.ts.map +1 -1
  254. package/dist/tui/components/assistant-message.js +0 -4
  255. package/dist/tui/components/editor.d.ts +18 -3
  256. package/dist/tui/components/editor.d.ts.map +1 -1
  257. package/dist/tui/components/editor.js +211 -237
  258. package/dist/tui/components/footer.d.ts +6 -4
  259. package/dist/tui/components/footer.d.ts.map +1 -1
  260. package/dist/tui/components/footer.js +49 -25
  261. package/dist/tui/components/markdown.d.ts +10 -7
  262. package/dist/tui/components/markdown.d.ts.map +1 -1
  263. package/dist/tui/components/markdown.js +57 -39
  264. package/dist/tui/components/modal.d.ts.map +1 -1
  265. package/dist/tui/components/modal.js +35 -33
  266. package/dist/tui/components/notification.d.ts +13 -2
  267. package/dist/tui/components/notification.d.ts.map +1 -1
  268. package/dist/tui/components/notification.js +36 -2
  269. package/dist/tui/components/progress-bar.js +1 -1
  270. package/dist/tui/components/select-list.d.ts +1 -0
  271. package/dist/tui/components/select-list.d.ts.map +1 -1
  272. package/dist/tui/components/select-list.js +14 -11
  273. package/dist/tui/components/text.d.ts +16 -0
  274. package/dist/tui/components/text.d.ts.map +1 -1
  275. package/dist/tui/components/text.js +72 -57
  276. package/dist/tui/components/thinking-block.d.ts +9 -0
  277. package/dist/tui/components/thinking-block.d.ts.map +1 -1
  278. package/dist/tui/components/thinking-block.js +43 -11
  279. package/dist/tui/components/tool-execution.d.ts +5 -1
  280. package/dist/tui/components/tool-execution.d.ts.map +1 -1
  281. package/dist/tui/components/tool-execution.js +19 -10
  282. package/dist/tui/components/user-message.d.ts.map +1 -1
  283. package/dist/tui/components/user-message.js +0 -3
  284. package/dist/tui/components/welcome.d.ts +2 -1
  285. package/dist/tui/components/welcome.d.ts.map +1 -1
  286. package/dist/tui/components/welcome.js +2 -2
  287. package/dist/tui/editor-launcher.d.ts +3 -2
  288. package/dist/tui/editor-launcher.d.ts.map +1 -1
  289. package/dist/tui/index.d.ts +0 -1
  290. package/dist/tui/index.d.ts.map +1 -1
  291. package/dist/tui/terminal.d.ts.map +1 -1
  292. package/dist/tui/terminal.js +10 -2
  293. package/dist/tui/tui.d.ts +43 -0
  294. package/dist/tui/tui.d.ts.map +1 -1
  295. package/dist/tui/tui.js +166 -41
  296. package/dist/tui/utils.d.ts +1 -5
  297. package/dist/tui/utils.d.ts.map +1 -1
  298. package/dist/tui/utils.js +271 -44
  299. package/dist/utils/bash/parse.d.ts +19 -0
  300. package/dist/utils/bash/parse.d.ts.map +1 -0
  301. package/dist/utils/bash/parse.js +223 -0
  302. package/dist/utils/bash/quote.d.ts +6 -0
  303. package/dist/utils/bash/quote.d.ts.map +1 -0
  304. package/dist/utils/bash/quote.js +23 -0
  305. package/dist/utils/bash.d.ts.map +1 -1
  306. package/dist/utils/bash.js +211 -126
  307. package/dist/utils/command-protection.d.ts +28 -0
  308. package/dist/utils/command-protection.d.ts.map +1 -0
  309. package/dist/utils/command-protection.js +324 -0
  310. package/dist/utils/dedent.d.ts.map +1 -0
  311. package/dist/utils/env-expand.d.ts +2 -0
  312. package/dist/utils/env-expand.d.ts.map +1 -0
  313. package/dist/utils/env-expand.js +8 -0
  314. package/dist/utils/filesystem/path-display.d.ts +11 -0
  315. package/dist/utils/filesystem/path-display.d.ts.map +1 -0
  316. package/dist/utils/filesystem/path-display.js +32 -0
  317. package/dist/utils/filesystem/security.d.ts +2 -2
  318. package/dist/utils/filesystem/security.d.ts.map +1 -1
  319. package/dist/utils/filesystem/security.js +28 -30
  320. package/dist/utils/formatting.d.ts.map +1 -0
  321. package/dist/{formatting.js → utils/formatting.js} +1 -1
  322. package/dist/utils/git.d.ts +4 -0
  323. package/dist/utils/git.d.ts.map +1 -1
  324. package/dist/utils/git.js +30 -0
  325. package/dist/utils/glob.d.ts +1 -1
  326. package/dist/utils/glob.d.ts.map +1 -1
  327. package/dist/utils/logger.d.ts.map +1 -0
  328. package/dist/{logger.js → utils/logger.js} +1 -1
  329. package/dist/utils/parsing.d.ts.map +1 -0
  330. package/dist/utils/process.d.ts.map +1 -1
  331. package/dist/utils/process.js +90 -37
  332. package/dist/utils/templates.d.ts +2 -0
  333. package/dist/utils/templates.d.ts.map +1 -0
  334. package/dist/utils/templates.js +24 -0
  335. package/dist/utils/version.d.ts.map +1 -0
  336. package/dist/{version.js → utils/version.js} +1 -1
  337. package/package.json +35 -26
  338. package/dist/cli.d.ts +0 -23
  339. package/dist/cli.d.ts.map +0 -1
  340. package/dist/commands/add-directory/types.d.ts +0 -6
  341. package/dist/commands/add-directory/types.d.ts.map +0 -1
  342. package/dist/commands/add-directory/types.js +0 -1
  343. package/dist/commands/copy/types.d.ts +0 -3
  344. package/dist/commands/copy/types.d.ts.map +0 -1
  345. package/dist/commands/copy/types.js +0 -1
  346. package/dist/commands/exit/index.d.ts +0 -10
  347. package/dist/commands/exit/index.d.ts.map +0 -1
  348. package/dist/commands/exit/index.js +0 -21
  349. package/dist/commands/exit/types.d.ts +0 -8
  350. package/dist/commands/exit/types.d.ts.map +0 -1
  351. package/dist/commands/exit/types.js +0 -1
  352. package/dist/commands/exit/utils.d.ts +0 -2
  353. package/dist/commands/exit/utils.d.ts.map +0 -1
  354. package/dist/commands/exit/utils.js +0 -13
  355. package/dist/commands/prompt/index.d.ts +0 -5
  356. package/dist/commands/prompt/index.d.ts.map +0 -1
  357. package/dist/commands/prompt/index.js +0 -122
  358. package/dist/commands/prompt/types.d.ts +0 -15
  359. package/dist/commands/prompt/types.d.ts.map +0 -1
  360. package/dist/commands/prompt/types.js +0 -1
  361. package/dist/commands/prompt/utils.d.ts +0 -12
  362. package/dist/commands/prompt/utils.d.ts.map +0 -1
  363. package/dist/commands/prompt/utils.js +0 -107
  364. package/dist/commands/reset/index.d.ts +0 -3
  365. package/dist/commands/reset/index.d.ts.map +0 -1
  366. package/dist/commands/reset/index.js +0 -25
  367. package/dist/commands/reset/types.d.ts +0 -1
  368. package/dist/commands/reset/types.d.ts.map +0 -1
  369. package/dist/commands/reset/types.js +0 -3
  370. package/dist/commands/review/types.d.ts +0 -12
  371. package/dist/commands/review/types.d.ts.map +0 -1
  372. package/dist/commands/review/types.js +0 -1
  373. package/dist/commands/save/index.d.ts +0 -3
  374. package/dist/commands/save/index.d.ts.map +0 -1
  375. package/dist/commands/save/index.js +0 -19
  376. package/dist/config.d.ts.map +0 -1
  377. package/dist/dedent.d.ts.map +0 -1
  378. package/dist/formatting.d.ts.map +0 -1
  379. package/dist/logger.d.ts.map +0 -1
  380. package/dist/mentions.d.ts +0 -14
  381. package/dist/mentions.d.ts.map +0 -1
  382. package/dist/parsing.d.ts.map +0 -1
  383. package/dist/prompts.d.ts.map +0 -1
  384. package/dist/repl-new.d.ts +0 -65
  385. package/dist/repl-new.d.ts.map +0 -1
  386. package/dist/skills.d.ts +0 -16
  387. package/dist/skills.d.ts.map +0 -1
  388. package/dist/skills.js +0 -233
  389. package/dist/stdin.d.ts.map +0 -1
  390. package/dist/tui/autocomplete/path-provider.d.ts +0 -21
  391. package/dist/tui/autocomplete/path-provider.d.ts.map +0 -1
  392. package/dist/tui/autocomplete/path-provider.js +0 -164
  393. package/dist/utils/iterables.d.ts +0 -2
  394. package/dist/utils/iterables.d.ts.map +0 -1
  395. package/dist/utils/iterables.js +0 -6
  396. package/dist/version.d.ts.map +0 -1
  397. /package/dist/{dedent.d.ts → utils/dedent.d.ts} +0 -0
  398. /package/dist/{dedent.js → utils/dedent.js} +0 -0
  399. /package/dist/{formatting.d.ts → utils/formatting.d.ts} +0 -0
  400. /package/dist/{logger.d.ts → utils/logger.d.ts} +0 -0
  401. /package/dist/{parsing.d.ts → utils/parsing.d.ts} +0 -0
  402. /package/dist/{parsing.js → utils/parsing.js} +0 -0
  403. /package/dist/{version.d.ts → utils/version.d.ts} +0 -0
@@ -21,6 +21,22 @@ export declare class Text implements Component {
21
21
  g: number;
22
22
  b: number;
23
23
  }): void;
24
+ /**
25
+ * Apply background color to a line if customBgRgb is set
26
+ */
27
+ private applyBackground;
28
+ /**
29
+ * Create an empty padded line (for top/bottom padding)
30
+ */
31
+ private createEmptyPaddedLine;
32
+ /**
33
+ * Wrap a single line of text to fit within contentWidth
34
+ */
35
+ private wrapLine;
36
+ /**
37
+ * Truncate a word to fit within contentWidth
38
+ */
39
+ private truncateWord;
24
40
  render(width: number): string[];
25
41
  }
26
42
  //# sourceMappingURL=text.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../source/tui/components/text.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C;;GAEG;AACH,qBAAa,IAAK,YAAW,SAAS;IACpC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAC,CAAsC;IAG1D,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAC,CAAW;gBAG7B,IAAI,SAAK,EACT,QAAQ,SAAI,EACZ,QAAQ,SAAI,EACZ,WAAW,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAQnD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ3B,cAAc,CAAC,WAAW,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAQvE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CA4IhC"}
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../source/tui/components/text.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C;;GAEG;AACH,qBAAa,IAAK,YAAW,SAAS;IACpC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAC,CAAsC;IAG1D,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAC,CAAW;gBAG7B,IAAI,SAAK,EACT,QAAQ,SAAI,EACZ,QAAQ,SAAI,EACZ,WAAW,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAQnD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ3B,cAAc,CAAC,WAAW,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAQvE;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAK7B;;OAEG;IACH,OAAO,CAAC,QAAQ;IAoChB;;OAEG;IACH,OAAO,CAAC,YAAY;IAgBpB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CAwEhC"}
@@ -32,6 +32,72 @@ export class Text {
32
32
  this.cachedWidth = undefined;
33
33
  this.cachedLines = undefined;
34
34
  }
35
+ /**
36
+ * Apply background color to a line if customBgRgb is set
37
+ */
38
+ applyBackground(line) {
39
+ if (!this.customBgRgb) {
40
+ return line;
41
+ }
42
+ return style.bgRgb(this.customBgRgb.r, this.customBgRgb.g, this.customBgRgb.b)(line);
43
+ }
44
+ /**
45
+ * Create an empty padded line (for top/bottom padding)
46
+ */
47
+ createEmptyPaddedLine(width) {
48
+ const emptyLine = " ".repeat(width);
49
+ return this.applyBackground(emptyLine);
50
+ }
51
+ /**
52
+ * Wrap a single line of text to fit within contentWidth
53
+ */
54
+ wrapLine(line, contentWidth) {
55
+ const lines = [];
56
+ const visibleLineLength = visibleWidth(line);
57
+ if (visibleLineLength <= contentWidth) {
58
+ lines.push(line);
59
+ return lines;
60
+ }
61
+ // Word wrap
62
+ const words = line.split(" ");
63
+ let currentLine = "";
64
+ for (const word of words) {
65
+ const currentVisible = visibleWidth(currentLine);
66
+ // If word is too long, truncate it
67
+ const finalWord = this.truncateWord(word, contentWidth);
68
+ if (currentVisible === 0) {
69
+ currentLine = finalWord;
70
+ }
71
+ else if (currentVisible + 1 + visibleWidth(finalWord) <= contentWidth) {
72
+ currentLine += ` ${finalWord}`;
73
+ }
74
+ else {
75
+ lines.push(currentLine);
76
+ currentLine = finalWord;
77
+ }
78
+ }
79
+ if (currentLine.length > 0) {
80
+ lines.push(currentLine);
81
+ }
82
+ return lines;
83
+ }
84
+ /**
85
+ * Truncate a word to fit within contentWidth
86
+ */
87
+ truncateWord(word, contentWidth) {
88
+ const wordVisible = visibleWidth(word);
89
+ if (wordVisible <= contentWidth) {
90
+ return word;
91
+ }
92
+ let truncated = "";
93
+ for (const char of word) {
94
+ if (visibleWidth(truncated + char) > contentWidth) {
95
+ break;
96
+ }
97
+ truncated += char;
98
+ }
99
+ return truncated;
100
+ }
35
101
  render(width) {
36
102
  // Check cache
37
103
  if (this.cachedLines &&
@@ -55,47 +121,8 @@ export class Text {
55
121
  const lines = [];
56
122
  const textLines = normalizedText.split("\n");
57
123
  for (const line of textLines) {
58
- // Measure visible length (strip ANSI codes)
59
- const visibleLineLength = visibleWidth(line);
60
- if (visibleLineLength <= contentWidth) {
61
- lines.push(line);
62
- }
63
- else {
64
- // Word wrap
65
- const words = line.split(" ");
66
- let currentLine = "";
67
- for (const word of words) {
68
- const currentVisible = visibleWidth(currentLine);
69
- const wordVisible = visibleWidth(word);
70
- // If word is too long, truncate it
71
- let finalWord = word;
72
- if (wordVisible > contentWidth) {
73
- // Truncate word to fit
74
- let truncated = "";
75
- for (const char of word) {
76
- if (visibleWidth(truncated + char) > contentWidth) {
77
- break;
78
- }
79
- truncated += char;
80
- }
81
- finalWord = truncated;
82
- }
83
- if (currentVisible === 0) {
84
- currentLine = finalWord;
85
- }
86
- else if (currentVisible + 1 + visibleWidth(finalWord) <=
87
- contentWidth) {
88
- currentLine += ` ${finalWord}`;
89
- }
90
- else {
91
- lines.push(currentLine);
92
- currentLine = finalWord;
93
- }
94
- }
95
- if (currentLine.length > 0) {
96
- lines.push(currentLine);
97
- }
98
- }
124
+ const wrappedLines = this.wrapLine(line, contentWidth);
125
+ lines.push(...wrappedLines);
99
126
  }
100
127
  // Add padding to each line
101
128
  const leftPad = " ".repeat(this.paddingX);
@@ -106,31 +133,19 @@ export class Text {
106
133
  // Right padding to fill to width (accounting for left padding and content)
107
134
  const rightPadLength = Math.max(0, width - this.paddingX - visibleLength);
108
135
  const rightPad = " ".repeat(rightPadLength);
109
- let paddedLine = leftPad + line + rightPad;
136
+ const paddedLine = leftPad + line + rightPad;
110
137
  // Apply background color if specified
111
- if (this.customBgRgb) {
112
- paddedLine = style.bgRgb(this.customBgRgb.r, this.customBgRgb.g, this.customBgRgb.b)(paddedLine);
113
- }
114
- paddedLines.push(paddedLine);
138
+ paddedLines.push(this.applyBackground(paddedLine));
115
139
  }
116
140
  // Add top padding (empty lines)
117
- const emptyLine = " ".repeat(width);
118
141
  const topPadding = [];
119
142
  for (let i = 0; i < this.paddingY; i++) {
120
- let emptyPaddedLine = emptyLine;
121
- if (this.customBgRgb) {
122
- emptyPaddedLine = style.bgRgb(this.customBgRgb.r, this.customBgRgb.g, this.customBgRgb.b)(emptyPaddedLine);
123
- }
124
- topPadding.push(emptyPaddedLine);
143
+ topPadding.push(this.createEmptyPaddedLine(width));
125
144
  }
126
145
  // Add bottom padding (empty lines)
127
146
  const bottomPadding = [];
128
147
  for (let i = 0; i < this.paddingY; i++) {
129
- let emptyPaddedLine = emptyLine;
130
- if (this.customBgRgb) {
131
- emptyPaddedLine = style.bgRgb(this.customBgRgb.r, this.customBgRgb.g, this.customBgRgb.b)(emptyPaddedLine);
132
- }
133
- bottomPadding.push(emptyPaddedLine);
148
+ bottomPadding.push(this.createEmptyPaddedLine(width));
134
149
  }
135
150
  // Combine top padding, content, and bottom padding
136
151
  const result = [...topPadding, ...paddedLines, ...bottomPadding];
@@ -4,11 +4,20 @@ import { Container } from "../tui.ts";
4
4
  */
5
5
  export declare class ThinkingBlockComponent extends Container {
6
6
  private contentContainer;
7
+ private verboseMode;
8
+ private lastContent;
9
+ private isThinking;
10
+ private thinkingComplete;
7
11
  constructor(message?: {
8
12
  content: string;
13
+ }, options?: {
14
+ verboseMode?: boolean;
9
15
  });
10
16
  updateContent(message: {
11
17
  content: string;
12
18
  }): void;
19
+ endThinking(): void;
20
+ setVerboseMode(verboseMode: boolean): void;
21
+ private renderContent;
13
22
  }
14
23
  //# sourceMappingURL=thinking-block.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"thinking-block.d.ts","sourceRoot":"","sources":["../../../source/tui/components/thinking-block.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAItC;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,SAAS;IACnD,OAAO,CAAC,gBAAgB,CAAY;gBAExB,OAAO,CAAC,EAAE;QACpB,OAAO,EAAE,MAAM,CAAC;KACjB;IAYD,aAAa,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAkBlD"}
1
+ {"version":3,"file":"thinking-block.d.ts","sourceRoot":"","sources":["../../../source/tui/components/thinking-block.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAItC;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,SAAS;IACnD,OAAO,CAAC,gBAAgB,CAAY;IACpC,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAS;gBAG/B,OAAO,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,EAC7B,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE;IAcrC,aAAa,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAMjD,WAAW,IAAI,IAAI;IAMnB,cAAc,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;IAK1C,OAAO,CAAC,aAAa;CA6BtB"}
@@ -1,14 +1,19 @@
1
1
  import style from "../../terminal/style.js";
2
2
  import { Container } from "../tui.js";
3
3
  import { Markdown } from "./markdown.js";
4
- import { Spacer } from "./spacer.js";
4
+ import { Text } from "./text.js";
5
5
  /**
6
6
  * Component that renders a thinking block
7
7
  */
8
8
  export class ThinkingBlockComponent extends Container {
9
9
  contentContainer;
10
- constructor(message) {
10
+ verboseMode;
11
+ lastContent = "";
12
+ isThinking = false;
13
+ thinkingComplete = false;
14
+ constructor(message, options) {
11
15
  super();
16
+ this.verboseMode = options?.verboseMode ?? false;
12
17
  // Container for text/thinking content
13
18
  this.contentContainer = new Container();
14
19
  this.addChild(this.contentContainer);
@@ -17,17 +22,44 @@ export class ThinkingBlockComponent extends Container {
17
22
  }
18
23
  }
19
24
  updateContent(message) {
25
+ this.lastContent = message.content;
26
+ this.isThinking = true;
27
+ this.renderContent();
28
+ }
29
+ endThinking() {
30
+ this.isThinking = false;
31
+ this.thinkingComplete = true;
32
+ this.renderContent();
33
+ }
34
+ setVerboseMode(verboseMode) {
35
+ this.verboseMode = verboseMode;
36
+ this.renderContent();
37
+ }
38
+ renderContent() {
20
39
  // Clear content container
21
40
  this.contentContainer.clear();
22
- if (message.content.length > 0) {
23
- this.contentContainer.addChild(new Spacer(1));
41
+ const content = this.lastContent;
42
+ if (this.verboseMode) {
43
+ // Verbose mode: show full thinking content
44
+ this.contentContainer.addChild(new Markdown(style.dim(content.trim()), {
45
+ paddingX: 1,
46
+ paddingY: 0,
47
+ }));
24
48
  }
25
- const content = message.content;
26
- // Assistant text messages with no background - trim the text
27
- // Set paddingY=0 to avoid extra spacing before tool executions
28
- this.contentContainer.addChild(new Markdown(style.dim(content.trim()), {
29
- paddingX: 1,
30
- paddingY: 0,
31
- }));
49
+ else if (this.isThinking) {
50
+ // Non-verbose mode: show animated "Thinking"
51
+ this.contentContainer.addChild(new Text(style.dim(`Thinking ${generateRandomChars(10, lowercase)}`), 1, 0));
52
+ }
53
+ else if (this.thinkingComplete) {
54
+ // Non-verbose mode: show "Thinking ✓" when complete
55
+ this.contentContainer.addChild(new Text(style.dim("Thinking ✓"), 1, 0));
56
+ }
57
+ // If not verbose and not thinking, show nothing
32
58
  }
33
59
  }
60
+ // const uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
61
+ const lowercase = "abcdefghijklmnopqrstuvwxyz";
62
+ function generateRandomChars(length, charset) {
63
+ const chars = charset ?? "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
64
+ return Array.from({ length }, () => chars[Math.floor(Math.random() * chars.length)]).join("");
65
+ }
@@ -5,8 +5,12 @@ export declare class ToolExecutionComponent extends Container {
5
5
  private loaderComponent;
6
6
  private toolName;
7
7
  private events;
8
- constructor(events: ToolEvent[]);
8
+ private verboseMode;
9
+ constructor(events: ToolEvent[], options?: {
10
+ verboseMode?: boolean;
11
+ });
9
12
  update(events: ToolEvent[]): void;
13
+ setVerboseMode(verboseMode: boolean): void;
10
14
  private renderDisplay;
11
15
  private getToolCallStartComponent;
12
16
  private handleToolStartMessage;
@@ -1 +1 @@
1
- {"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../source/tui/components/tool-execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAE,SAAS,EAA6B,MAAM,aAAa,CAAC;AAWnE,qBAAa,sBAAuB,SAAQ,SAAS;IACnD,OAAO,CAAC,gBAAgB,CAAY;IACpC,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAc;gBAEhB,MAAM,EAAE,SAAS,EAAE;IAa/B,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE;IAS1B,OAAO,CAAC,aAAa;IA2CrB,OAAO,CAAC,yBAAyB;IA6CjC,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,mBAAmB;IA0B3B,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,oBAAoB;IAgC5B,OAAO,CAAC,aAAa;CActB"}
1
+ {"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../source/tui/components/tool-execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAE,SAAS,EAA6B,MAAM,aAAa,CAAC;AAWnE,qBAAa,sBAAuB,SAAQ,SAAS;IACnD,OAAO,CAAC,gBAAgB,CAAY;IACpC,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,WAAW,CAAU;gBAEjB,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE;IAcpE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE;IAK1B,cAAc,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;IAK1C,OAAO,CAAC,aAAa;IAiDrB,OAAO,CAAC,yBAAyB;IA6CjC,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,mBAAmB;IA0B3B,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,oBAAoB;IAgC5B,OAAO,CAAC,aAAa;CActB"}
@@ -1,5 +1,5 @@
1
- import { capitalize } from "../../formatting.js";
2
1
  import style from "../../terminal/style.js";
2
+ import { capitalize } from "../../utils/formatting.js";
3
3
  import { Container, Spacer, Text } from "../index.js";
4
4
  const bgColor = {
5
5
  r: 52,
@@ -11,11 +11,13 @@ export class ToolExecutionComponent extends Container {
11
11
  loaderComponent;
12
12
  toolName;
13
13
  events;
14
- constructor(events) {
14
+ verboseMode;
15
+ constructor(events, options) {
15
16
  super();
16
17
  this.loaderComponent = null;
17
18
  this.toolName = events[0].name;
18
19
  this.events = events;
20
+ this.verboseMode = options?.verboseMode ?? false;
19
21
  // Container for text/thinking content
20
22
  this.contentContainer = new Container();
21
23
  this.addChild(this.contentContainer);
@@ -23,16 +25,20 @@ export class ToolExecutionComponent extends Container {
23
25
  }
24
26
  update(events) {
25
27
  this.events = events;
26
- // Clear content container
27
- this.contentContainer.clear();
28
+ this.renderDisplay();
29
+ }
30
+ setVerboseMode(verboseMode) {
31
+ this.verboseMode = verboseMode;
28
32
  this.renderDisplay();
29
33
  }
30
34
  renderDisplay() {
35
+ // Clear content container before rendering
36
+ this.contentContainer.clear();
37
+ // Add spacer with background color for visual separation
38
+ this.contentContainer.addChild(new Spacer(1, bgColor));
31
39
  // Build display from complete event history with proper ordering
32
40
  const processedEvents = this.processEventsInOrder();
33
41
  const currentStatus = processedEvents.at(-1)?.type ?? "tool-call-start";
34
- this.contentContainer.addChild(new Spacer(1));
35
- this.contentContainer.addChild(new Spacer(1, bgColor));
36
42
  for (let i = 0; i < processedEvents.length; i++) {
37
43
  const event = processedEvents[i];
38
44
  const eventType = event.type;
@@ -41,21 +47,24 @@ export class ToolExecutionComponent extends Container {
41
47
  this.getToolCallStartComponent(event, currentStatus);
42
48
  break;
43
49
  case "tool-call-end":
44
- // Render the actual tool output with truncation
45
- if (event.msg) {
50
+ // Only render output in verbose mode
51
+ if (this.verboseMode && event.msg) {
46
52
  this.contentContainer.addChild(this.renderOutputDisplay(event.msg));
47
53
  }
48
54
  break;
49
55
  case "tool-call-error":
50
- this.contentContainer.addChild(new Text(`└ ${this.handleToolErrorMessage(event.msg)}`, 1, 0, bgColor));
56
+ // Only render error in verbose mode
57
+ if (this.verboseMode) {
58
+ this.contentContainer.addChild(new Text(`└ ${this.handleToolErrorMessage(event.msg)}`, 1, 0, bgColor));
59
+ }
51
60
  break;
52
61
  default: {
53
62
  eventType;
54
63
  }
55
64
  }
56
65
  }
66
+ // Add trailing spacer with background color
57
67
  this.contentContainer.addChild(new Spacer(1, bgColor));
58
- this.contentContainer.addChild(new Spacer(1));
59
68
  }
60
69
  getToolCallStartComponent(event, currentStatus) {
61
70
  switch (currentStatus) {
@@ -1 +1 @@
1
- {"version":3,"file":"user-message.d.ts","sourceRoot":"","sources":["../../../source/tui/components/user-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAItC;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,SAAS;IACjD,OAAO,CAAC,QAAQ,CAAW;gBAEf,IAAI,EAAE,MAAM;CAiBzB"}
1
+ {"version":3,"file":"user-message.d.ts","sourceRoot":"","sources":["../../../source/tui/components/user-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,SAAS;IACjD,OAAO,CAAC,QAAQ,CAAW;gBAEf,IAAI,EAAE,MAAM;CAazB"}
@@ -1,6 +1,5 @@
1
1
  import { Container } from "../tui.js";
2
2
  import { Markdown } from "./markdown.js";
3
- import { Spacer } from "./spacer.js";
4
3
  /**
5
4
  * Component that renders a user message
6
5
  */
@@ -8,7 +7,6 @@ export class UserMessageComponent extends Container {
8
7
  markdown;
9
8
  constructor(text) {
10
9
  super();
11
- this.addChild(new Spacer(1));
12
10
  // User messages with dark gray background
13
11
  this.markdown = new Markdown(text, {
14
12
  customBgRgb: {
@@ -18,6 +16,5 @@ export class UserMessageComponent extends Container {
18
16
  },
19
17
  });
20
18
  this.addChild(this.markdown);
21
- this.addChild(new Spacer(1));
22
19
  }
23
20
  }
@@ -1,5 +1,5 @@
1
1
  import type { Component } from "../tui.ts";
2
- export interface WelcomeOptions {
2
+ interface WelcomeOptions {
3
3
  type?: "default" | "simple";
4
4
  }
5
5
  export declare class Welcome implements Component {
@@ -10,4 +10,5 @@ export declare class Welcome implements Component {
10
10
  private renderDefault;
11
11
  private getLogo;
12
12
  }
13
+ export {};
13
14
  //# sourceMappingURL=welcome.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"welcome.d.ts","sourceRoot":"","sources":["../../../source/tui/components/welcome.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC7B;AAED,qBAAa,OAAQ,YAAW,SAAS;IACvC,OAAO,CAAC,OAAO,CAAiB;gBAEpB,OAAO,GAAE,cAAmB;IAIxC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAQ/B,OAAO,CAAC,YAAY;IA8BpB,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,OAAO;CAUhB"}
1
+ {"version":3,"file":"welcome.d.ts","sourceRoot":"","sources":["../../../source/tui/components/welcome.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC7B;AAED,qBAAa,OAAQ,YAAW,SAAS;IACvC,OAAO,CAAC,OAAO,CAAiB;gBAEpB,OAAO,GAAE,cAAmB;IAIxC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAQ/B,OAAO,CAAC,YAAY;IA8BpB,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,OAAO;CAUhB"}
@@ -1,6 +1,6 @@
1
- import { dedent } from "../../dedent.js";
2
1
  import style from "../../terminal/style.js";
3
- import { getPackageVersion } from "../../version.js";
2
+ import { dedent } from "../../utils/dedent.js";
3
+ import { getPackageVersion } from "../../utils/version.js";
4
4
  import { BoxComponent } from "./box.js";
5
5
  export class Welcome {
6
6
  options;
@@ -1,13 +1,14 @@
1
1
  import type { Terminal } from "./terminal.ts";
2
- export interface EditorLaunchOptions {
2
+ interface EditorLaunchOptions {
3
3
  initialContent?: string;
4
4
  postfix?: string;
5
5
  terminal: Terminal;
6
6
  signal?: AbortSignal;
7
7
  }
8
- export interface EditorLaunchResult {
8
+ interface EditorLaunchResult {
9
9
  content: string;
10
10
  aborted: boolean;
11
11
  }
12
12
  export declare function launchEditor(options: EditorLaunchOptions): Promise<EditorLaunchResult>;
13
+ export {};
13
14
  //# sourceMappingURL=editor-launcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"editor-launcher.d.ts","sourceRoot":"","sources":["../../source/tui/editor-launcher.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,WAAW,mBAAmB;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CA0C7B"}
1
+ {"version":3,"file":"editor-launcher.d.ts","sourceRoot":"","sources":["../../source/tui/editor-launcher.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,UAAU,mBAAmB;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,UAAU,kBAAkB;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CA0C7B"}
@@ -14,7 +14,6 @@ export { Spacer } from "./components/spacer.ts";
14
14
  export { TableComponent } from "./components/table.ts";
15
15
  export { Text } from "./components/text.ts";
16
16
  export { UserMessageComponent } from "./components/user-message.ts";
17
- export type { EditorLaunchOptions, EditorLaunchResult, } from "./editor-launcher.ts";
18
17
  export { launchEditor } from "./editor-launcher.ts";
19
18
  export { ProcessTerminal, type ProcessTerminalOptions } from "./terminal.ts";
20
19
  export { Container, TUI } from "./tui.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/tui/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,IAAI,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AAEvG,YAAY,EACV,gBAAgB,EAChB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,YAAY,EACV,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/tui/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,IAAI,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AAEvG,YAAY,EACV,gBAAgB,EAChB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../source/tui/terminal.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,QAAQ;IAEvB,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAGnE,IAAI,IAAI,IAAI,CAAC;IAGb,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAG1B,IAAI,OAAO,IAAI,MAAM,CAAC;IACtB,IAAI,IAAI,IAAI,MAAM,CAAC;IAGnB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAG5B,UAAU,IAAI,IAAI,CAAC;IACnB,UAAU,IAAI,IAAI,CAAC;IAGnB,SAAS,IAAI,IAAI,CAAC;IAClB,eAAe,IAAI,IAAI,CAAC;IACxB,WAAW,IAAI,IAAI,CAAC;IAGpB,iBAAiB,IAAI,IAAI,CAAC;IAC1B,gBAAgB,IAAI,IAAI,CAAC;IACzB,UAAU,IAAI,IAAI,CAAC;IACnB,gBAAgB,IAAI,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;GAKG;AACH,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAC,CAAa;IACnC,OAAO,CAAC,kBAAkB,CAAC,CAAkC;IAC7D,OAAO,CAAC,mBAAmB,CAAC,CAAa;IACzC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,cAAc,CAAC,CAAa;IACpC,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,MAAM,CAAU;gBAEZ,OAAO,GAAE,sBAA2B;IAKhD,OAAO,CAAC,aAAa,CAInB;IAEF,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAiDlE,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,UAAU;IAWlB,IAAI,IAAI,IAAI;IAgCZ,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIzB,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAW3B,UAAU,IAAI,IAAI;IAIlB,UAAU,IAAI,IAAI;IAIlB,SAAS,IAAI,IAAI;IAIjB,eAAe,IAAI,IAAI;IAIvB,WAAW,IAAI,IAAI;IAInB,iBAAiB,IAAI,IAAI;IAiBzB,gBAAgB,IAAI,IAAI;IAqBxB,UAAU,IAAI,IAAI;IAKlB,gBAAgB,IAAI,OAAO;IAI3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;CAGrC"}
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../source/tui/terminal.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,QAAQ;IAEvB,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAGnE,IAAI,IAAI,IAAI,CAAC;IAGb,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAG1B,IAAI,OAAO,IAAI,MAAM,CAAC;IACtB,IAAI,IAAI,IAAI,MAAM,CAAC;IAGnB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAG5B,UAAU,IAAI,IAAI,CAAC;IACnB,UAAU,IAAI,IAAI,CAAC;IAGnB,SAAS,IAAI,IAAI,CAAC;IAClB,eAAe,IAAI,IAAI,CAAC;IACxB,WAAW,IAAI,IAAI,CAAC;IAGpB,iBAAiB,IAAI,IAAI,CAAC;IAC1B,gBAAgB,IAAI,IAAI,CAAC;IACzB,UAAU,IAAI,IAAI,CAAC;IACnB,gBAAgB,IAAI,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;GAKG;AACH,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAC,CAAa;IACnC,OAAO,CAAC,kBAAkB,CAAC,CAAkC;IAC7D,OAAO,CAAC,mBAAmB,CAAC,CAAa;IACzC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,cAAc,CAAC,CAAa;IACpC,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,MAAM,CAAU;gBAEZ,OAAO,GAAE,sBAA2B;IAKhD,OAAO,CAAC,aAAa,CAInB;IAEF,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAqDlE,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,iBAAiB;IAyBzB,OAAO,CAAC,UAAU;IAWlB,IAAI,IAAI,IAAI;IAiCZ,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIzB,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAW3B,UAAU,IAAI,IAAI;IAIlB,UAAU,IAAI,IAAI;IAIlB,SAAS,IAAI,IAAI;IAIjB,eAAe,IAAI,IAAI;IAIvB,WAAW,IAAI,IAAI;IAInB,iBAAiB,IAAI,IAAI;IAkBzB,gBAAgB,IAAI,IAAI;IAsBxB,UAAU,IAAI,IAAI;IAKlB,gBAAgB,IAAI,OAAO;IAI3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;CAGrC"}
@@ -50,6 +50,9 @@ export class ProcessTerminal {
50
50
  this.inputStream.resume();
51
51
  // Enable bracketed paste mode - terminal will wrap pastes in \x1b[200~ ... \x1b[201~
52
52
  process.stdout.write("\x1b[?2004h");
53
+ // Enable mouse tracking (SGR mode) so trackpad scroll sends mouse events
54
+ // instead of being translated into arrow key sequences
55
+ process.stdout.write("\x1b[?1000h\x1b[?1006h");
53
56
  // Create bound listeners so we can properly remove them later
54
57
  this.boundInputListener = (data) => {
55
58
  onInput(typeof data === "string" ? data : data.toString("utf8"));
@@ -59,7 +62,7 @@ export class ProcessTerminal {
59
62
  };
60
63
  this.attachListeners();
61
64
  this.sigintHandler = () => {
62
- // Let the custom editor.onCtrlC handler in NewRepl handle Ctrl+C
65
+ // Let the custom editor.onCtrlC handler in Repl handle Ctrl+C
63
66
  // This prevents a race condition where stop() gets called without the exit message
64
67
  };
65
68
  process.on("SIGINT", this.sigintHandler);
@@ -88,6 +91,7 @@ export class ProcessTerminal {
88
91
  process.on("exit", () => {
89
92
  process.stdout.write("\x1b[?25h");
90
93
  process.stdout.write("\x1b[?2004l");
94
+ process.stdout.write("\x1b[?1000l\x1b[?1006l");
91
95
  process.stdout.write("\x1b[0m");
92
96
  if (this.inputStream.setRawMode) {
93
97
  this.inputStream.setRawMode(this.wasRaw);
@@ -97,6 +101,7 @@ export class ProcessTerminal {
97
101
  process.on("uncaughtException", (error) => {
98
102
  process.stdout.write("\x1b[?25h");
99
103
  process.stdout.write("\x1b[?2004l");
104
+ process.stdout.write("\x1b[?1000l\x1b[?1006l");
100
105
  process.stdout.write("\x1b[0m");
101
106
  if (this.inputStream.setRawMode) {
102
107
  this.inputStream.setRawMode(this.wasRaw);
@@ -124,8 +129,9 @@ export class ProcessTerminal {
124
129
  process.off("SIGINT", this.sigintHandler);
125
130
  this.sigintHandler = undefined;
126
131
  }
127
- // Disable bracketed paste mode
132
+ // Disable bracketed paste mode and mouse tracking
128
133
  process.stdout.write("\x1b[?2004l");
134
+ process.stdout.write("\x1b[?1000l\x1b[?1006l");
129
135
  // Remove event handlers using the exact references that were added
130
136
  if (this.boundInputListener) {
131
137
  this.inputStream.removeListener("data", this.boundInputListener);
@@ -189,6 +195,7 @@ export class ProcessTerminal {
189
195
  process.stdout.write("\x1b[0m");
190
196
  process.stdout.write("\x1b[?25h");
191
197
  process.stdout.write("\x1b[?2004l");
198
+ process.stdout.write("\x1b[?1000l\x1b[?1006l");
192
199
  }
193
200
  exitExternalMode() {
194
201
  if (!this.inExternalMode || this.stopped)
@@ -200,6 +207,7 @@ export class ProcessTerminal {
200
207
  this.inputStream.setEncoding("utf8");
201
208
  this.inputStream.resume();
202
209
  process.stdout.write("\x1b[?2004h");
210
+ process.stdout.write("\x1b[?1000h\x1b[?1006h");
203
211
  process.stdout.write("\x1b[?25l");
204
212
  this.attachListeners();
205
213
  if (this.resumeCallback) {
package/dist/tui/tui.d.ts CHANGED
@@ -24,6 +24,11 @@ export interface Component {
24
24
  * and col is 0-indexed column position
25
25
  */
26
26
  getCursorPosition?(): [number, number] | null;
27
+ /**
28
+ * Optional method to indicate the component wants to handle Tab/Shift+Tab
29
+ * navigation keys itself, preventing the TUI from intercepting them.
30
+ */
31
+ wantsNavigationKeys?(): boolean;
27
32
  }
28
33
  export { visibleWidth };
29
34
  /**
@@ -33,11 +38,20 @@ export declare class Container implements Component {
33
38
  children: Component[];
34
39
  addChild(component: Component): void;
35
40
  removeChild(component: Component): void;
41
+ insertChildBefore(beforeComponent: Component, newComponent: Component): void;
36
42
  clear(): void;
37
43
  render(width: number): string[];
38
44
  }
39
45
  /**
40
46
  * TUI - Main class for managing terminal UI with differential rendering
47
+ *
48
+ * The TUI splits its children into two regions:
49
+ * - Scrollable content: children added before setFixedFooterStart()
50
+ * - Fixed footer: children added after setFixedFooterStart()
51
+ *
52
+ * The scrollable content region supports virtual scrolling via trackpad/mouse
53
+ * wheel. The fixed footer (editor, footer bar, notifications) is always
54
+ * pinned to the bottom of the terminal.
41
55
  */
42
56
  export declare class TUI extends Container {
43
57
  private terminal;
@@ -46,14 +60,43 @@ export declare class TUI extends Container {
46
60
  private isRendering;
47
61
  private renderAgain;
48
62
  private activeModal;
63
+ private scrollOffset;
64
+ private lastScrollableHeight;
65
+ private fixedFooterIndex;
66
+ private isUserScrolledUp;
49
67
  onCtrlC?: () => void;
68
+ onCtrlD?: () => void;
69
+ onReconstructSession?: () => void;
70
+ onCtrlN?: () => void;
71
+ onCtrlO?: () => void;
72
+ /** Callback invoked when Ctrl+M is pressed - opens model selector. */
73
+ onCtrlM?: () => void;
74
+ onCtrlR?: () => void;
75
+ onShiftTab?: () => void;
50
76
  constructor(terminal: Terminal);
77
+ /**
78
+ * Mark the boundary between scrollable content and fixed footer.
79
+ * All children added after this call will be rendered as fixed
80
+ * footer content pinned to the bottom of the terminal.
81
+ */
82
+ setFixedFooterStart(): void;
51
83
  setFocus(component: Component | null): void;
84
+ /**
85
+ * Get the underlying terminal instance for external mode operations.
86
+ * Used primarily for spawning external editors.
87
+ */
88
+ getTerminal(): Terminal;
52
89
  start(): void;
53
90
  stop(): void;
54
91
  requestRender(): void;
55
92
  private inBracketedPaste;
93
+ private focusedComponentWantsNavigation;
56
94
  private handleInput;
95
+ private handleMouseEvent;
96
+ scrollToBottom(): void;
97
+ private getFixedFooterHeight;
98
+ private renderScrollableContent;
99
+ private renderFixedFooter;
57
100
  private doRender;
58
101
  /**
59
102
  * Show a modal dialog
@@ -1 +1 @@
1
- {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../source/tui/tui.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAEhC;;OAEG;IACH,WAAW,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC;;;;OAIG;IACH,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CAC/C;AAED,OAAO,EAAE,YAAY,EAAE,CAAC;AAExB;;GAEG;AACH,qBAAa,SAAU,YAAW,SAAS;IACzC,QAAQ,EAAE,SAAS,EAAE,CAAM;IAE3B,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAIpC,WAAW,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAOvC,KAAK,IAAI,IAAI;IAIb,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CAGhC;AAED;;GAEG;AAGH,qBAAa,GAAI,SAAQ,SAAS;IAChC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAsB;IAElC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;gBAEhB,QAAQ,EAAE,QAAQ;IAK9B,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAI3C,KAAK,IAAI,IAAI;IAUb,IAAI,IAAI,IAAI;IAKZ,aAAa,IAAI,IAAI;IAarB,OAAO,CAAC,gBAAgB,CAAS;IAEjC,OAAO,CAAC,WAAW;IA6CnB,OAAO,CAAC,QAAQ;IA0FhB;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAK7B;;OAEG;IACH,SAAS,IAAI,IAAI;IAKjB;;OAEG;IACH,aAAa,IAAI,OAAO;CAGzB"}
1
+ {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../source/tui/tui.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAEhC;;OAEG;IACH,WAAW,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC;;;;OAIG;IACH,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAE9C;;;OAGG;IACH,mBAAmB,CAAC,IAAI,OAAO,CAAC;CACjC;AAED,OAAO,EAAE,YAAY,EAAE,CAAC;AAExB;;GAEG;AACH,qBAAa,SAAU,YAAW,SAAS;IACzC,QAAQ,EAAE,SAAS,EAAE,CAAM;IAE3B,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAIpC,WAAW,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAOvC,iBAAiB,CAAC,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,GAAG,IAAI;IAS5E,KAAK,IAAI,IAAI;IAIb,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CAGhC;AAED;;;;;;;;;;GAUG;AAGH,qBAAa,GAAI,SAAQ,SAAS;IAChC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,gBAAgB,CAAS;IAE1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,sEAAsE;IAC/D,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;gBAEnB,QAAQ,EAAE,QAAQ;IAK9B;;;;OAIG;IACH,mBAAmB,IAAI,IAAI;IAI3B,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAI3C;;;OAGG;IACH,WAAW,IAAI,QAAQ;IAIvB,KAAK,IAAI,IAAI;IAUb,IAAI,IAAI,IAAI;IAKZ,aAAa,IAAI,IAAI;IAarB,OAAO,CAAC,gBAAgB,CAAS;IAEjC,OAAO,CAAC,+BAA+B;IAIvC,OAAO,CAAC,WAAW;IAyFnB,OAAO,CAAC,gBAAgB;IAiCxB,cAAc,IAAI,IAAI;IAWtB,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,QAAQ;IAoFhB;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAK7B;;OAEG;IACH,SAAS,IAAI,IAAI;IAKjB;;OAEG;IACH,aAAa,IAAI,OAAO;CAGzB"}