@pentoshi/clai 2.0.62 → 3.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (475) hide show
  1. package/README.md +262 -368
  2. package/dist/agent/classic-renderer.js +9 -1
  3. package/dist/agent/classic-renderer.js.map +1 -1
  4. package/dist/agent/context-manager.d.ts +5 -0
  5. package/dist/agent/context-manager.js +14 -2
  6. package/dist/agent/context-manager.js.map +1 -1
  7. package/dist/agent/events.d.ts +9 -1
  8. package/dist/agent/plan-tool.js +80 -8
  9. package/dist/agent/plan-tool.js.map +1 -1
  10. package/dist/agent/runner.js +261 -122
  11. package/dist/agent/runner.js.map +1 -1
  12. package/dist/agent/tool-call-parser.d.ts +20 -0
  13. package/dist/agent/tool-call-parser.js +186 -2
  14. package/dist/agent/tool-call-parser.js.map +1 -1
  15. package/dist/app/adapters/agent-event-adapter.d.ts +29 -0
  16. package/dist/app/adapters/agent-event-adapter.js +148 -0
  17. package/dist/app/adapters/agent-event-adapter.js.map +1 -0
  18. package/dist/app/adapters/current-agent-adapter.d.ts +7 -0
  19. package/dist/app/adapters/current-agent-adapter.js +27 -0
  20. package/dist/app/adapters/current-agent-adapter.js.map +1 -0
  21. package/dist/app/adapters/current-jobs-adapter.d.ts +4 -0
  22. package/dist/app/adapters/current-jobs-adapter.js +13 -0
  23. package/dist/app/adapters/current-jobs-adapter.js.map +1 -0
  24. package/dist/app/adapters/current-store-adapter.d.ts +3 -0
  25. package/dist/app/adapters/current-store-adapter.js +22 -0
  26. package/dist/app/adapters/current-store-adapter.js.map +1 -0
  27. package/dist/app/adapters/current-terminal-adapter.d.ts +9 -0
  28. package/dist/app/adapters/current-terminal-adapter.js +31 -0
  29. package/dist/app/adapters/current-terminal-adapter.js.map +1 -0
  30. package/dist/app/adapters/current-updates-adapter.d.ts +7 -0
  31. package/dist/app/adapters/current-updates-adapter.js +31 -0
  32. package/dist/app/adapters/current-updates-adapter.js.map +1 -0
  33. package/dist/app/adapters/in-memory-clipboard-adapter.d.ts +10 -0
  34. package/dist/app/adapters/in-memory-clipboard-adapter.js +20 -0
  35. package/dist/app/adapters/in-memory-clipboard-adapter.js.map +1 -0
  36. package/dist/app/commands/command.d.ts +24 -0
  37. package/dist/app/commands/command.js +4 -0
  38. package/dist/app/commands/command.js.map +1 -0
  39. package/dist/app/commands/registry.d.ts +45 -0
  40. package/dist/app/commands/registry.js +164 -0
  41. package/dist/app/commands/registry.js.map +1 -0
  42. package/dist/app/controllers/disposable.d.ts +15 -0
  43. package/dist/app/controllers/disposable.js +38 -0
  44. package/dist/app/controllers/disposable.js.map +1 -0
  45. package/dist/app/controllers/job-controller.d.ts +22 -0
  46. package/dist/app/controllers/job-controller.js +35 -0
  47. package/dist/app/controllers/job-controller.js.map +1 -0
  48. package/dist/app/controllers/plan-controller.d.ts +31 -0
  49. package/dist/app/controllers/plan-controller.js +69 -0
  50. package/dist/app/controllers/plan-controller.js.map +1 -0
  51. package/dist/app/controllers/session-controller.d.ts +167 -0
  52. package/dist/app/controllers/session-controller.js +467 -0
  53. package/dist/app/controllers/session-controller.js.map +1 -0
  54. package/dist/app/controllers/turn-controller.d.ts +52 -0
  55. package/dist/app/controllers/turn-controller.js +118 -0
  56. package/dist/app/controllers/turn-controller.js.map +1 -0
  57. package/dist/app/events/app-event.d.ts +122 -0
  58. package/dist/app/events/app-event.js +25 -0
  59. package/dist/app/events/app-event.js.map +1 -0
  60. package/dist/app/events/event-buffer.d.ts +51 -0
  61. package/dist/app/events/event-buffer.js +109 -0
  62. package/dist/app/events/event-buffer.js.map +1 -0
  63. package/dist/app/events/sequencer.d.ts +32 -0
  64. package/dist/app/events/sequencer.js +55 -0
  65. package/dist/app/events/sequencer.js.map +1 -0
  66. package/dist/app/ports/agent-port.d.ts +29 -0
  67. package/dist/app/ports/agent-port.js +2 -0
  68. package/dist/app/ports/agent-port.js.map +1 -0
  69. package/dist/app/ports/clipboard-port.d.ts +9 -0
  70. package/dist/app/ports/clipboard-port.js +2 -0
  71. package/dist/app/ports/clipboard-port.js.map +1 -0
  72. package/dist/app/ports/confirm-port.d.ts +17 -0
  73. package/dist/app/ports/confirm-port.js +2 -0
  74. package/dist/app/ports/confirm-port.js.map +1 -0
  75. package/dist/app/ports/jobs-port.d.ts +18 -0
  76. package/dist/app/ports/jobs-port.js +2 -0
  77. package/dist/app/ports/jobs-port.js.map +1 -0
  78. package/dist/app/ports/persistence-port.d.ts +21 -0
  79. package/dist/app/ports/persistence-port.js +2 -0
  80. package/dist/app/ports/persistence-port.js.map +1 -0
  81. package/dist/app/ports/secret-port.d.ts +12 -0
  82. package/dist/app/ports/secret-port.js +2 -0
  83. package/dist/app/ports/secret-port.js.map +1 -0
  84. package/dist/app/ports/terminal-port.d.ts +18 -0
  85. package/dist/app/ports/terminal-port.js +2 -0
  86. package/dist/app/ports/terminal-port.js.map +1 -0
  87. package/dist/app/ports/updates-port.d.ts +12 -0
  88. package/dist/app/ports/updates-port.js +2 -0
  89. package/dist/app/ports/updates-port.js.map +1 -0
  90. package/dist/commands/doctor.js +19 -0
  91. package/dist/commands/doctor.js.map +1 -1
  92. package/dist/commands/update.js +1 -1
  93. package/dist/commands/update.js.map +1 -1
  94. package/dist/index.js +47 -12
  95. package/dist/index.js.map +1 -1
  96. package/dist/llm/router.js +4 -2
  97. package/dist/llm/router.js.map +1 -1
  98. package/dist/prompts/index.d.ts +1 -1
  99. package/dist/prompts/index.js +11 -8
  100. package/dist/prompts/index.js.map +1 -1
  101. package/dist/repl/slash-commands.js +1 -1
  102. package/dist/repl/slash-commands.js.map +1 -1
  103. package/dist/repl.js +35 -107
  104. package/dist/repl.js.map +1 -1
  105. package/dist/store/config.js +3 -1
  106. package/dist/store/config.js.map +1 -1
  107. package/dist/store/history.d.ts +26 -2
  108. package/dist/store/history.js +383 -72
  109. package/dist/store/history.js.map +1 -1
  110. package/dist/store/logs.js +3 -3
  111. package/dist/store/logs.js.map +1 -1
  112. package/dist/store/paths.d.ts +6 -0
  113. package/dist/store/paths.js +38 -0
  114. package/dist/store/paths.js.map +1 -0
  115. package/dist/store/plan.js +8 -5
  116. package/dist/store/plan.js.map +1 -1
  117. package/dist/tools/fs.d.ts +6 -0
  118. package/dist/tools/fs.js +56 -6
  119. package/dist/tools/fs.js.map +1 -1
  120. package/dist/tools/jobs.js +2 -2
  121. package/dist/tools/jobs.js.map +1 -1
  122. package/dist/tools/registry.js +189 -67
  123. package/dist/tools/registry.js.map +1 -1
  124. package/dist/tools/shell.js +2 -2
  125. package/dist/tools/shell.js.map +1 -1
  126. package/dist/tui/runtime.d.ts +19 -0
  127. package/dist/tui/runtime.js +92 -0
  128. package/dist/tui/runtime.js.map +1 -0
  129. package/dist/tui/state.js +22 -17
  130. package/dist/tui/state.js.map +1 -1
  131. package/dist/tui-v2/actions/action-id.d.ts +14 -0
  132. package/dist/tui-v2/actions/action-id.js +109 -0
  133. package/dist/tui-v2/actions/action-id.js.map +1 -0
  134. package/dist/tui-v2/actions/action-router.d.ts +18 -0
  135. package/dist/tui-v2/actions/action-router.js +62 -0
  136. package/dist/tui-v2/actions/action-router.js.map +1 -0
  137. package/dist/tui-v2/actions/chord-from-key.d.ts +26 -0
  138. package/dist/tui-v2/actions/chord-from-key.js +45 -0
  139. package/dist/tui-v2/actions/chord-from-key.js.map +1 -0
  140. package/dist/tui-v2/actions/keymap.d.ts +24 -0
  141. package/dist/tui-v2/actions/keymap.js +134 -0
  142. package/dist/tui-v2/actions/keymap.js.map +1 -0
  143. package/dist/tui-v2/app/App.d.ts +13 -0
  144. package/dist/tui-v2/app/App.js +332 -0
  145. package/dist/tui-v2/app/App.js.map +1 -0
  146. package/dist/tui-v2/app/command-handlers.d.ts +8 -0
  147. package/dist/tui-v2/app/command-handlers.js +66 -0
  148. package/dist/tui-v2/app/command-handlers.js.map +1 -0
  149. package/dist/tui-v2/app/commands/config-commands.d.ts +14 -0
  150. package/dist/tui-v2/app/commands/config-commands.js +161 -0
  151. package/dist/tui-v2/app/commands/config-commands.js.map +1 -0
  152. package/dist/tui-v2/app/commands/key-commands.d.ts +9 -0
  153. package/dist/tui-v2/app/commands/key-commands.js +263 -0
  154. package/dist/tui-v2/app/commands/key-commands.js.map +1 -0
  155. package/dist/tui-v2/app/commands/picker-commands.d.ts +24 -0
  156. package/dist/tui-v2/app/commands/picker-commands.js +423 -0
  157. package/dist/tui-v2/app/commands/picker-commands.js.map +1 -0
  158. package/dist/tui-v2/app/commands/session-commands.d.ts +19 -0
  159. package/dist/tui-v2/app/commands/session-commands.js +162 -0
  160. package/dist/tui-v2/app/commands/session-commands.js.map +1 -0
  161. package/dist/tui-v2/app/plan-lifecycle.d.ts +22 -0
  162. package/dist/tui-v2/app/plan-lifecycle.js +95 -0
  163. package/dist/tui-v2/app/plan-lifecycle.js.map +1 -0
  164. package/dist/tui-v2/app/providers.d.ts +17 -0
  165. package/dist/tui-v2/app/providers.js +32 -0
  166. package/dist/tui-v2/app/providers.js.map +1 -0
  167. package/dist/tui-v2/bootstrap/capabilities.d.ts +35 -0
  168. package/dist/tui-v2/bootstrap/capabilities.js +93 -0
  169. package/dist/tui-v2/bootstrap/capabilities.js.map +1 -0
  170. package/dist/tui-v2/bootstrap/composition-root.d.ts +85 -0
  171. package/dist/tui-v2/bootstrap/composition-root.js +131 -0
  172. package/dist/tui-v2/bootstrap/composition-root.js.map +1 -0
  173. package/dist/tui-v2/bootstrap/disable-native-selection.d.ts +11 -0
  174. package/dist/tui-v2/bootstrap/disable-native-selection.js +13 -0
  175. package/dist/tui-v2/bootstrap/disable-native-selection.js.map +1 -0
  176. package/dist/tui-v2/bootstrap/lifecycle.d.ts +62 -0
  177. package/dist/tui-v2/bootstrap/lifecycle.js +123 -0
  178. package/dist/tui-v2/bootstrap/lifecycle.js.map +1 -0
  179. package/dist/tui-v2/bootstrap/osc52-clipboard.d.ts +28 -0
  180. package/dist/tui-v2/bootstrap/osc52-clipboard.js +44 -0
  181. package/dist/tui-v2/bootstrap/osc52-clipboard.js.map +1 -0
  182. package/dist/tui-v2/bootstrap/overlay-ports.d.ts +12 -0
  183. package/dist/{tui/confirm.js → tui-v2/bootstrap/overlay-ports.js} +17 -25
  184. package/dist/tui-v2/bootstrap/overlay-ports.js.map +1 -0
  185. package/dist/tui-v2/bootstrap/pager-export.d.ts +24 -0
  186. package/dist/tui-v2/bootstrap/pager-export.js +87 -0
  187. package/dist/tui-v2/bootstrap/pager-export.js.map +1 -0
  188. package/dist/tui-v2/bootstrap/start-tui-v2.d.ts +15 -0
  189. package/dist/tui-v2/bootstrap/start-tui-v2.js +95 -0
  190. package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -0
  191. package/dist/tui-v2/bootstrap/ui-selection.d.ts +30 -0
  192. package/dist/tui-v2/bootstrap/ui-selection.js +59 -0
  193. package/dist/tui-v2/bootstrap/ui-selection.js.map +1 -0
  194. package/dist/tui-v2/components/completion/completion-menu.d.ts +23 -0
  195. package/dist/tui-v2/components/completion/completion-menu.js +84 -0
  196. package/dist/tui-v2/components/completion/completion-menu.js.map +1 -0
  197. package/dist/tui-v2/components/jobs/jobs-panel.d.ts +16 -0
  198. package/dist/tui-v2/components/jobs/jobs-panel.js +92 -0
  199. package/dist/tui-v2/components/jobs/jobs-panel.js.map +1 -0
  200. package/dist/tui-v2/components/modal/confirm-modal.d.ts +20 -0
  201. package/dist/tui-v2/components/modal/confirm-modal.js +110 -0
  202. package/dist/tui-v2/components/modal/confirm-modal.js.map +1 -0
  203. package/dist/tui-v2/components/modal/prompt-actions-modal.d.ts +15 -0
  204. package/dist/tui-v2/components/modal/prompt-actions-modal.js +80 -0
  205. package/dist/tui-v2/components/modal/prompt-actions-modal.js.map +1 -0
  206. package/dist/tui-v2/components/modal/secret-modal.d.ts +18 -0
  207. package/dist/tui-v2/components/modal/secret-modal.js +50 -0
  208. package/dist/tui-v2/components/modal/secret-modal.js.map +1 -0
  209. package/dist/tui-v2/components/overlay/overlay-host.d.ts +26 -0
  210. package/dist/tui-v2/components/overlay/overlay-host.js +43 -0
  211. package/dist/tui-v2/components/overlay/overlay-host.js.map +1 -0
  212. package/dist/tui-v2/components/pager/pager.d.ts +20 -0
  213. package/dist/tui-v2/components/pager/pager.js +396 -0
  214. package/dist/tui-v2/components/pager/pager.js.map +1 -0
  215. package/dist/tui-v2/components/picker/picker.d.ts +17 -0
  216. package/dist/tui-v2/components/picker/picker.js +222 -0
  217. package/dist/tui-v2/components/picker/picker.js.map +1 -0
  218. package/dist/tui-v2/components/plan/plan-view.d.ts +20 -0
  219. package/dist/tui-v2/components/plan/plan-view.js +120 -0
  220. package/dist/tui-v2/components/plan/plan-view.js.map +1 -0
  221. package/dist/tui-v2/components/queue/queue-panel.d.ts +23 -0
  222. package/dist/tui-v2/components/queue/queue-panel.js +58 -0
  223. package/dist/tui-v2/components/queue/queue-panel.js.map +1 -0
  224. package/dist/tui-v2/components/status/status-line.d.ts +27 -0
  225. package/dist/tui-v2/components/status/status-line.js +167 -0
  226. package/dist/tui-v2/components/status/status-line.js.map +1 -0
  227. package/dist/tui-v2/components/toast/toast-host.d.ts +15 -0
  228. package/dist/tui-v2/components/toast/toast-host.js +48 -0
  229. package/dist/tui-v2/components/toast/toast-host.js.map +1 -0
  230. package/dist/tui-v2/components/transcript/assistant-message.d.ts +20 -0
  231. package/dist/tui-v2/components/transcript/assistant-message.js +41 -0
  232. package/dist/tui-v2/components/transcript/assistant-message.js.map +1 -0
  233. package/dist/tui-v2/components/transcript/compacted-row.d.ts +19 -0
  234. package/dist/tui-v2/components/transcript/compacted-row.js +69 -0
  235. package/dist/tui-v2/components/transcript/compacted-row.js.map +1 -0
  236. package/dist/tui-v2/components/transcript/intro-card.d.ts +19 -0
  237. package/dist/tui-v2/components/transcript/intro-card.js +50 -0
  238. package/dist/tui-v2/components/transcript/intro-card.js.map +1 -0
  239. package/dist/tui-v2/components/transcript/linkable-text.d.ts +21 -0
  240. package/dist/tui-v2/components/transcript/linkable-text.js +46 -0
  241. package/dist/tui-v2/components/transcript/linkable-text.js.map +1 -0
  242. package/dist/tui-v2/components/transcript/notice-row.d.ts +14 -0
  243. package/dist/tui-v2/components/transcript/notice-row.js +40 -0
  244. package/dist/tui-v2/components/transcript/notice-row.js.map +1 -0
  245. package/dist/tui-v2/components/transcript/search-bar.d.ts +19 -0
  246. package/dist/tui-v2/components/transcript/search-bar.js +7 -0
  247. package/dist/tui-v2/components/transcript/search-bar.js.map +1 -0
  248. package/dist/tui-v2/components/transcript/thinking-block.d.ts +22 -0
  249. package/dist/tui-v2/components/transcript/thinking-block.js +27 -0
  250. package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -0
  251. package/dist/tui-v2/components/transcript/tool-card.d.ts +26 -0
  252. package/dist/tui-v2/components/transcript/tool-card.js +205 -0
  253. package/dist/tui-v2/components/transcript/tool-card.js.map +1 -0
  254. package/dist/tui-v2/components/transcript/transcript-row.d.ts +25 -0
  255. package/dist/tui-v2/components/transcript/transcript-row.js +37 -0
  256. package/dist/tui-v2/components/transcript/transcript-row.js.map +1 -0
  257. package/dist/tui-v2/components/transcript/transcript-scroll-port.d.ts +52 -0
  258. package/dist/tui-v2/components/transcript/transcript-scroll-port.js +86 -0
  259. package/dist/tui-v2/components/transcript/transcript-scroll-port.js.map +1 -0
  260. package/dist/tui-v2/components/transcript/transcript-view.d.ts +24 -0
  261. package/dist/tui-v2/components/transcript/transcript-view.js +403 -0
  262. package/dist/tui-v2/components/transcript/transcript-view.js.map +1 -0
  263. package/dist/tui-v2/components/transcript/use-click-without-drag.d.ts +13 -0
  264. package/dist/tui-v2/components/transcript/use-click-without-drag.js +35 -0
  265. package/dist/tui-v2/components/transcript/use-click-without-drag.js.map +1 -0
  266. package/dist/tui-v2/components/transcript/use-native-selection-copy.d.ts +10 -0
  267. package/dist/tui-v2/components/transcript/use-native-selection-copy.js +37 -0
  268. package/dist/tui-v2/components/transcript/use-native-selection-copy.js.map +1 -0
  269. package/dist/tui-v2/components/transcript/use-transcript-selection.d.ts +23 -0
  270. package/dist/tui-v2/components/transcript/use-transcript-selection.js +136 -0
  271. package/dist/tui-v2/components/transcript/use-transcript-selection.js.map +1 -0
  272. package/dist/tui-v2/components/transcript/user-message.d.ts +10 -0
  273. package/dist/tui-v2/components/transcript/user-message.js +23 -0
  274. package/dist/tui-v2/components/transcript/user-message.js.map +1 -0
  275. package/dist/tui-v2/composer/arrow-intent.d.ts +23 -0
  276. package/dist/tui-v2/composer/arrow-intent.js +35 -0
  277. package/dist/tui-v2/composer/arrow-intent.js.map +1 -0
  278. package/dist/tui-v2/composer/completion.d.ts +37 -0
  279. package/dist/tui-v2/composer/completion.js +67 -0
  280. package/dist/tui-v2/composer/completion.js.map +1 -0
  281. package/dist/tui-v2/composer/composer-editor.d.ts +33 -0
  282. package/dist/tui-v2/composer/composer-editor.js +620 -0
  283. package/dist/tui-v2/composer/composer-editor.js.map +1 -0
  284. package/dist/tui-v2/composer/composer-height.d.ts +21 -0
  285. package/dist/tui-v2/composer/composer-height.js +29 -0
  286. package/dist/tui-v2/composer/composer-height.js.map +1 -0
  287. package/dist/tui-v2/composer/composer-meta.d.ts +9 -0
  288. package/dist/tui-v2/composer/composer-meta.js +38 -0
  289. package/dist/tui-v2/composer/composer-meta.js.map +1 -0
  290. package/dist/tui-v2/composer/history-nav.d.ts +15 -0
  291. package/dist/tui-v2/composer/history-nav.js +16 -0
  292. package/dist/tui-v2/composer/history-nav.js.map +1 -0
  293. package/dist/tui-v2/composer/newline-hint.d.ts +13 -0
  294. package/dist/tui-v2/composer/newline-hint.js +13 -0
  295. package/dist/tui-v2/composer/newline-hint.js.map +1 -0
  296. package/dist/tui-v2/composer/paste-placeholder.d.ts +35 -0
  297. package/dist/tui-v2/composer/paste-placeholder.js +55 -0
  298. package/dist/tui-v2/composer/paste-placeholder.js.map +1 -0
  299. package/dist/tui-v2/composer/prompt-history.d.ts +22 -0
  300. package/dist/tui-v2/composer/prompt-history.js +51 -0
  301. package/dist/tui-v2/composer/prompt-history.js.map +1 -0
  302. package/dist/tui-v2/composer/secret-buffer.d.ts +20 -0
  303. package/dist/tui-v2/composer/secret-buffer.js +42 -0
  304. package/dist/tui-v2/composer/secret-buffer.js.map +1 -0
  305. package/dist/tui-v2/composer/textarea-keybindings.d.ts +22 -0
  306. package/dist/tui-v2/composer/textarea-keybindings.js +27 -0
  307. package/dist/tui-v2/composer/textarea-keybindings.js.map +1 -0
  308. package/dist/tui-v2/controllers/focus-controller.d.ts +30 -0
  309. package/dist/tui-v2/controllers/focus-controller.js +80 -0
  310. package/dist/tui-v2/controllers/focus-controller.js.map +1 -0
  311. package/dist/tui-v2/controllers/overlay-controller.d.ts +99 -0
  312. package/dist/tui-v2/controllers/overlay-controller.js +195 -0
  313. package/dist/tui-v2/controllers/overlay-controller.js.map +1 -0
  314. package/dist/tui-v2/controllers/selection-controller.d.ts +76 -0
  315. package/dist/tui-v2/controllers/selection-controller.js +238 -0
  316. package/dist/tui-v2/controllers/selection-controller.js.map +1 -0
  317. package/dist/tui-v2/controllers/toast-controller.d.ts +35 -0
  318. package/dist/tui-v2/controllers/toast-controller.js +88 -0
  319. package/dist/tui-v2/controllers/toast-controller.js.map +1 -0
  320. package/dist/tui-v2/layout/compute-layout.d.ts +59 -0
  321. package/dist/tui-v2/layout/compute-layout.js +170 -0
  322. package/dist/tui-v2/layout/compute-layout.js.map +1 -0
  323. package/dist/tui-v2/rendering/ansi-to-styled.d.ts +17 -0
  324. package/dist/tui-v2/rendering/ansi-to-styled.js +217 -0
  325. package/dist/tui-v2/rendering/ansi-to-styled.js.map +1 -0
  326. package/dist/tui-v2/rendering/batch-sections.d.ts +57 -0
  327. package/dist/tui-v2/rendering/batch-sections.js +177 -0
  328. package/dist/tui-v2/rendering/batch-sections.js.map +1 -0
  329. package/dist/tui-v2/rendering/link-detector.d.ts +16 -0
  330. package/dist/tui-v2/rendering/link-detector.js +43 -0
  331. package/dist/tui-v2/rendering/link-detector.js.map +1 -0
  332. package/dist/tui-v2/rendering/open-tool-output.d.ts +28 -0
  333. package/dist/tui-v2/rendering/open-tool-output.js +138 -0
  334. package/dist/tui-v2/rendering/open-tool-output.js.map +1 -0
  335. package/dist/tui-v2/rendering/picker-filter.d.ts +22 -0
  336. package/dist/tui-v2/rendering/picker-filter.js +68 -0
  337. package/dist/tui-v2/rendering/picker-filter.js.map +1 -0
  338. package/dist/tui-v2/rendering/plan-view.d.ts +32 -0
  339. package/dist/tui-v2/rendering/plan-view.js +196 -0
  340. package/dist/tui-v2/rendering/plan-view.js.map +1 -0
  341. package/dist/tui-v2/rendering/render-markdown-lines.d.ts +29 -0
  342. package/dist/tui-v2/rendering/render-markdown-lines.js +46 -0
  343. package/dist/tui-v2/rendering/render-markdown-lines.js.map +1 -0
  344. package/dist/tui-v2/rendering/sanitize-display.d.ts +13 -0
  345. package/dist/tui-v2/rendering/sanitize-display.js +24 -0
  346. package/dist/tui-v2/rendering/sanitize-display.js.map +1 -0
  347. package/dist/tui-v2/rendering/strip-tool-surfaces.d.ts +10 -0
  348. package/dist/tui-v2/rendering/strip-tool-surfaces.js +32 -0
  349. package/dist/tui-v2/rendering/strip-tool-surfaces.js.map +1 -0
  350. package/dist/tui-v2/rendering/theme.d.ts +67 -0
  351. package/dist/tui-v2/rendering/theme.js +74 -0
  352. package/dist/tui-v2/rendering/theme.js.map +1 -0
  353. package/dist/tui-v2/rendering/tool-presenter.d.ts +39 -0
  354. package/dist/tui-v2/rendering/tool-presenter.js +209 -0
  355. package/dist/tui-v2/rendering/tool-presenter.js.map +1 -0
  356. package/dist/tui-v2/rendering/transcript-export.d.ts +11 -0
  357. package/dist/tui-v2/rendering/transcript-export.js +18 -0
  358. package/dist/tui-v2/rendering/transcript-export.js.map +1 -0
  359. package/dist/tui-v2/rendering/transcript-semantic.d.ts +17 -0
  360. package/dist/tui-v2/rendering/transcript-semantic.js +67 -0
  361. package/dist/tui-v2/rendering/transcript-semantic.js.map +1 -0
  362. package/dist/tui-v2/state/pager-search.d.ts +22 -0
  363. package/dist/tui-v2/state/pager-search.js +78 -0
  364. package/dist/tui-v2/state/pager-search.js.map +1 -0
  365. package/dist/tui-v2/state/semantic-document.d.ts +34 -0
  366. package/dist/tui-v2/state/semantic-document.js +201 -0
  367. package/dist/tui-v2/state/semantic-document.js.map +1 -0
  368. package/dist/tui-v2/state/transcript-compaction.d.ts +24 -0
  369. package/dist/tui-v2/state/transcript-compaction.js +79 -0
  370. package/dist/tui-v2/state/transcript-compaction.js.map +1 -0
  371. package/dist/tui-v2/state/transcript-hydrate.d.ts +27 -0
  372. package/dist/tui-v2/state/transcript-hydrate.js +276 -0
  373. package/dist/tui-v2/state/transcript-hydrate.js.map +1 -0
  374. package/dist/tui-v2/state/transcript-reducer.d.ts +10 -0
  375. package/dist/tui-v2/state/transcript-reducer.js +339 -0
  376. package/dist/tui-v2/state/transcript-reducer.js.map +1 -0
  377. package/dist/tui-v2/state/transcript-search.d.ts +17 -0
  378. package/dist/tui-v2/state/transcript-search.js +38 -0
  379. package/dist/tui-v2/state/transcript-search.js.map +1 -0
  380. package/dist/tui-v2/state/transcript-store.d.ts +32 -0
  381. package/dist/tui-v2/state/transcript-store.js +66 -0
  382. package/dist/tui-v2/state/transcript-store.js.map +1 -0
  383. package/dist/tui-v2/state/transcript-struct.d.ts +15 -0
  384. package/dist/tui-v2/state/transcript-struct.js +133 -0
  385. package/dist/tui-v2/state/transcript-struct.js.map +1 -0
  386. package/dist/tui-v2/state/transcript-types.d.ts +76 -0
  387. package/dist/tui-v2/state/transcript-types.js +65 -0
  388. package/dist/tui-v2/state/transcript-types.js.map +1 -0
  389. package/dist/tui-v2/state/use-overlay.d.ts +3 -0
  390. package/dist/tui-v2/state/use-overlay.js +6 -0
  391. package/dist/tui-v2/state/use-overlay.js.map +1 -0
  392. package/dist/tui-v2/state/use-plan.d.ts +4 -0
  393. package/dist/tui-v2/state/use-plan.js +6 -0
  394. package/dist/tui-v2/state/use-plan.js.map +1 -0
  395. package/dist/tui-v2/state/use-session-state.d.ts +2 -0
  396. package/dist/tui-v2/state/use-session-state.js +7 -0
  397. package/dist/tui-v2/state/use-session-state.js.map +1 -0
  398. package/dist/tui-v2/state/use-toast.d.ts +3 -0
  399. package/dist/tui-v2/state/use-toast.js +15 -0
  400. package/dist/tui-v2/state/use-toast.js.map +1 -0
  401. package/dist/tui-v2/state/use-transcript-store.d.ts +10 -0
  402. package/dist/tui-v2/state/use-transcript-store.js +12 -0
  403. package/dist/tui-v2/state/use-transcript-store.js.map +1 -0
  404. package/dist/ui/intro-card.js +3 -3
  405. package/dist/ui/intro-card.js.map +1 -1
  406. package/dist/ui/intro-header.d.ts +23 -0
  407. package/dist/ui/intro-header.js +232 -0
  408. package/dist/ui/intro-header.js.map +1 -0
  409. package/dist/ui/markdown.js +0 -1
  410. package/dist/ui/markdown.js.map +1 -1
  411. package/dist/ui/mentions.d.ts +9 -2
  412. package/dist/ui/mentions.js +102 -4
  413. package/dist/ui/mentions.js.map +1 -1
  414. package/dist/ui/output-pane.js +1 -1
  415. package/dist/ui/output-pane.js.map +1 -1
  416. package/dist/ui/plan-pane.d.ts +8 -0
  417. package/dist/ui/plan-pane.js +38 -0
  418. package/dist/ui/plan-pane.js.map +1 -1
  419. package/dist/ui/wordmark.d.ts +5 -0
  420. package/dist/ui/wordmark.js +6 -1
  421. package/dist/ui/wordmark.js.map +1 -1
  422. package/package.json +25 -12
  423. package/dist/tui/App.d.ts +0 -12
  424. package/dist/tui/App.js +0 -2174
  425. package/dist/tui/App.js.map +0 -1
  426. package/dist/tui/components/ConfirmModal.d.ts +0 -9
  427. package/dist/tui/components/ConfirmModal.js +0 -55
  428. package/dist/tui/components/ConfirmModal.js.map +0 -1
  429. package/dist/tui/components/JobsPanel.d.ts +0 -11
  430. package/dist/tui/components/JobsPanel.js +0 -55
  431. package/dist/tui/components/JobsPanel.js.map +0 -1
  432. package/dist/tui/components/Pager.d.ts +0 -14
  433. package/dist/tui/components/Pager.js +0 -56
  434. package/dist/tui/components/Pager.js.map +0 -1
  435. package/dist/tui/components/PickerPanel.d.ts +0 -15
  436. package/dist/tui/components/PickerPanel.js +0 -126
  437. package/dist/tui/components/PickerPanel.js.map +0 -1
  438. package/dist/tui/components/PlanSidebar.d.ts +0 -6
  439. package/dist/tui/components/PlanSidebar.js +0 -99
  440. package/dist/tui/components/PlanSidebar.js.map +0 -1
  441. package/dist/tui/components/SecretInputPanel.d.ts +0 -7
  442. package/dist/tui/components/SecretInputPanel.js +0 -38
  443. package/dist/tui/components/SecretInputPanel.js.map +0 -1
  444. package/dist/tui/confirm.d.ts +0 -16
  445. package/dist/tui/confirm.js.map +0 -1
  446. package/dist/tui/default.d.ts +0 -6
  447. package/dist/tui/default.js +0 -11
  448. package/dist/tui/default.js.map +0 -1
  449. package/dist/tui/hooks/useAgentRunner.d.ts +0 -73
  450. package/dist/tui/hooks/useAgentRunner.js +0 -277
  451. package/dist/tui/hooks/useAgentRunner.js.map +0 -1
  452. package/dist/tui/hooks/useJobs.d.ts +0 -7
  453. package/dist/tui/hooks/useJobs.js +0 -39
  454. package/dist/tui/hooks/useJobs.js.map +0 -1
  455. package/dist/tui/hooks/useSpinner.d.ts +0 -5
  456. package/dist/tui/hooks/useSpinner.js +0 -21
  457. package/dist/tui/hooks/useSpinner.js.map +0 -1
  458. package/dist/tui/hooks/useTerminalSize.d.ts +0 -9
  459. package/dist/tui/hooks/useTerminalSize.js +0 -26
  460. package/dist/tui/hooks/useTerminalSize.js.map +0 -1
  461. package/dist/tui/index.d.ts +0 -10
  462. package/dist/tui/index.js +0 -37
  463. package/dist/tui/index.js.map +0 -1
  464. package/dist/tui/key-intent.d.ts +0 -36
  465. package/dist/tui/key-intent.js +0 -54
  466. package/dist/tui/key-intent.js.map +0 -1
  467. package/dist/tui/mouse.d.ts +0 -8
  468. package/dist/tui/mouse.js +0 -34
  469. package/dist/tui/mouse.js.map +0 -1
  470. package/dist/tui/plan-sidebar-lines.d.ts +0 -2
  471. package/dist/tui/plan-sidebar-lines.js +0 -140
  472. package/dist/tui/plan-sidebar-lines.js.map +0 -1
  473. package/dist/tui/render-lines.d.ts +0 -22
  474. package/dist/tui/render-lines.js +0 -611
  475. package/dist/tui/render-lines.js.map +0 -1
@@ -0,0 +1,136 @@
1
+ /** @jsxImportSource @opentui/react */
2
+ /** Renderer adapter for the pure pane-scoped selection controller. */
3
+ import { useEffect, useRef } from "react";
4
+ import { documentEnd, documentStart, } from "../../state/semantic-document.js";
5
+ import { isItemExpanded } from "../../state/transcript-types.js";
6
+ import { extractTranscriptSemanticDocument } from "../../rendering/transcript-semantic.js";
7
+ const MULTI_CLICK_WINDOW_MS = 450;
8
+ export function useTranscriptSelection(options) {
9
+ const { services, state, spool, scrollRef, focused } = options;
10
+ const documentRef = useRef({ blocks: [] });
11
+ const pointerRef = useRef(undefined);
12
+ const clickRef = useRef(undefined);
13
+ useEffect(() => {
14
+ const document = extractTranscriptSemanticDocument(state, {
15
+ toolOutput: (item) => visibleToolOutput(state, spool, item.id, item.toolCallId),
16
+ });
17
+ documentRef.current = document;
18
+ services.selection.setDocument("transcript", document);
19
+ }, [services.selection, spool, state]);
20
+ useEffect(() => {
21
+ const scroll = scrollRef.current;
22
+ if (!scroll)
23
+ return;
24
+ return services.selection.registerScrollPort("transcript", {
25
+ startAutoScroll: (x, y) => scroll.startAutoScroll(x, y),
26
+ updateAutoScroll: (x, y) => scroll.updateAutoScroll(x, y),
27
+ stopAutoScroll: () => scroll.stopAutoScroll(),
28
+ });
29
+ }, [services.selection, scrollRef]);
30
+ function onMouseDown(event) {
31
+ if (event.button !== 0)
32
+ return;
33
+ // Keep keyboard with the transcript so ↑/↓ scroll the chat, not history.
34
+ services.focus.focusRegion("transcript");
35
+ // If a child (YOU bubble / tool card) already handled the click, do not
36
+ // start a selection drag that would swallow open-modal handlers.
37
+ if (event.defaultPrevented)
38
+ return;
39
+ const anchor = anchorAtPointer(documentRef.current, scrollRef.current, event.x, event.y);
40
+ if (!anchor)
41
+ return;
42
+ const clicks = nextClickCount(clickRef.current, anchor);
43
+ clickRef.current = { at: Date.now(), anchor, count: clicks };
44
+ pointerRef.current = { clicks, moved: false };
45
+ services.selection.beginDrag("transcript", anchor, event);
46
+ }
47
+ function onMouseDrag(event) {
48
+ const pointer = pointerRef.current;
49
+ if (!pointer)
50
+ return;
51
+ const anchor = anchorAtPointer(documentRef.current, scrollRef.current, event.x, event.y);
52
+ if (anchor)
53
+ services.selection.dragTo("transcript", anchor, event);
54
+ pointerRef.current = { ...pointer, moved: true };
55
+ }
56
+ function onMouseUp(event) {
57
+ if (event.defaultPrevented) {
58
+ pointerRef.current = undefined;
59
+ services.selection.finishDrag();
60
+ return;
61
+ }
62
+ const pointer = pointerRef.current;
63
+ if (!pointer)
64
+ return;
65
+ const anchor = anchorAtPointer(documentRef.current, scrollRef.current, event.x, event.y);
66
+ if (!pointer.moved && anchor) {
67
+ const granularity = pointer.clicks === 1 ? "character" : pointer.clicks === 2 ? "word" : "line";
68
+ services.selection.click("transcript", anchor, granularity);
69
+ }
70
+ services.selection.finishDrag();
71
+ pointerRef.current = undefined;
72
+ }
73
+ function onMouseDragEnd(_event) {
74
+ if (!pointerRef.current)
75
+ return;
76
+ services.selection.finishDrag();
77
+ pointerRef.current = undefined;
78
+ }
79
+ function handleKey(key, chord) {
80
+ if (!focused || services.focus.activeContext() !== "transcript")
81
+ return false;
82
+ const action = services.router.resolve(chord, "transcript");
83
+ if (!action || !services.selection.handleAction(action, "transcript"))
84
+ return false;
85
+ key.preventDefault();
86
+ return true;
87
+ }
88
+ return { onMouseDown, onMouseDrag, onMouseUp, onMouseDragEnd, handleKey };
89
+ }
90
+ function visibleToolOutput(state, spool, itemId, toolCallId) {
91
+ const tail = spool.tail(toolCallId);
92
+ if (!tail)
93
+ return undefined;
94
+ const item = state.byId.get(itemId);
95
+ if (item?.kind === "tool" && isItemExpanded(state, item))
96
+ return tail;
97
+ return tail.split("\n").slice(-4).join("\n");
98
+ }
99
+ function anchorAtPointer(document, scroll, x, y) {
100
+ const visible = document.blocks
101
+ .map((block) => ({ block, renderable: scroll?.findDescendantById(block.id) }))
102
+ .filter((entry) => Boolean(entry.renderable && entry.renderable.visible))
103
+ .sort((left, right) => left.renderable.screenY - right.renderable.screenY);
104
+ for (const entry of visible) {
105
+ const { renderable } = entry;
106
+ if (y >= renderable.screenY && y < renderable.screenY + renderable.height) {
107
+ return anchorForPoint(entry.block, renderable, x, y);
108
+ }
109
+ }
110
+ if (visible.length === 0)
111
+ return documentStart(document);
112
+ const first = visible[0];
113
+ const last = visible.at(-1);
114
+ if (y < first.renderable.screenY)
115
+ return { blockId: first.block.id, offset: 0 };
116
+ if (y >= last.renderable.screenY + last.renderable.height) {
117
+ return { blockId: last.block.id, offset: last.block.text.length };
118
+ }
119
+ return documentEnd(document);
120
+ }
121
+ function anchorForPoint(block, renderable, x, y) {
122
+ const line = Math.max(0, Math.floor(y - renderable.screenY));
123
+ const column = Math.max(0, Math.floor(x - renderable.screenX));
124
+ const lines = block.text.split("\n");
125
+ const selectedLine = Math.min(line, Math.max(0, lines.length - 1));
126
+ const before = lines.slice(0, selectedLine).reduce((total, value) => total + value.length + 1, 0);
127
+ const offset = Math.min(before + column, before + (lines[selectedLine]?.length ?? 0));
128
+ return { blockId: block.id, offset };
129
+ }
130
+ function nextClickCount(previous, anchor) {
131
+ const samePoint = previous?.anchor.blockId === anchor.blockId && previous.anchor.offset === anchor.offset;
132
+ if (!samePoint || !previous || Date.now() - previous.at > MULTI_CLICK_WINDOW_MS)
133
+ return 1;
134
+ return Math.min(3, previous.count + 1);
135
+ }
136
+ //# sourceMappingURL=use-transcript-selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-transcript-selection.js","sourceRoot":"","sources":["../../../../src/tui-v2/components/transcript/use-transcript-selection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /** @jsxImportSource @opentui/react */
2
+ /** Renders a `UserItem` (CHAT-001, V2-051). */
3
+ import type { ReactNode } from "react";
4
+ import type { UserItem } from "../../state/transcript-types.js";
5
+ import type { Theme } from "../../rendering/theme.js";
6
+ export declare function UserMessage(props: {
7
+ item: UserItem;
8
+ theme: Theme;
9
+ onOpen: (prompt: string) => void;
10
+ }): ReactNode;
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
2
+ import { TextAttributes } from "@opentui/core";
3
+ import { LinkableText } from "./linkable-text.js";
4
+ import { useClickWithoutDrag } from "./use-click-without-drag.js";
5
+ export function UserMessage(props) {
6
+ const { item, theme, onOpen } = props;
7
+ // Text is selectable for drag-copy; click (no drag) opens prompt actions.
8
+ const click = useClickWithoutDrag(() => onOpen(item.text));
9
+ return (_jsxs("box", { id: item.id, border: true, borderStyle: "rounded", style: {
10
+ flexDirection: "row",
11
+ marginBottom: 1,
12
+ borderColor: theme.userBorder,
13
+ backgroundColor: theme.statusBackground,
14
+ paddingLeft: 1,
15
+ paddingRight: 1,
16
+ width: "100%",
17
+ }, onMouseDown: click.onMouseDown, onMouseUp: click.onMouseUp, children: [_jsx("text", { selectable: true, style: {
18
+ fg: theme.white,
19
+ bg: theme.prompt,
20
+ attributes: TextAttributes.BOLD,
21
+ }, children: " YOU " }), _jsx("text", { content: " ", selectable: true }), _jsx("box", { style: { flexGrow: 1 }, children: _jsx(LinkableText, { text: item.text, theme: theme, selectable: true }) })] }));
22
+ }
23
+ //# sourceMappingURL=user-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-message.js","sourceRoot":"","sources":["../../../../src/tui-v2/components/transcript/user-message.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,UAAU,WAAW,CAAC,KAI3B;IACC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACtC,0EAA0E;IAC1E,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAE3D,OAAO,CACL,eACE,EAAE,EAAE,IAAI,CAAC,EAAE,EACX,MAAM,QACN,WAAW,EAAC,SAAS,EACrB,KAAK,EAAE;YACL,aAAa,EAAE,KAAK;YACpB,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,KAAK,CAAC,UAAU;YAC7B,eAAe,EAAE,KAAK,CAAC,gBAAgB;YACvC,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;YACf,KAAK,EAAE,MAAM;SACd,EACD,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,SAAS,EAAE,KAAK,CAAC,SAAS,aAE1B,eACE,UAAU,QACV,KAAK,EAAE;oBACL,EAAE,EAAE,KAAK,CAAC,KAAK;oBACf,EAAE,EAAE,KAAK,CAAC,MAAM;oBAChB,UAAU,EAAE,cAAc,CAAC,IAAI;iBAChC,YAEA,OAAO,GACH,EACP,eAAM,OAAO,EAAC,GAAG,EAAC,UAAU,SAAG,EAC/B,cAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,YACzB,KAAC,YAAY,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,SAAG,GACtD,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Decide whether ↑/↓ in the composer should recall prompts or scroll chat.
3
+ *
4
+ * Classic CLAI: bare ↑/↓ at the line boundary walks prompt history (including
5
+ * empty input). Wheel/trackpad still scrolls the transcript via mouse handlers.
6
+ * Only rapid arrow *bursts* (trackpad emulating keys without mouse reporting)
7
+ * are treated as chat scroll so history remains the default for deliberate keys.
8
+ */
9
+ export interface ArrowIntentInput {
10
+ readonly chord: string;
11
+ readonly plainText: string;
12
+ readonly line: number;
13
+ readonly lineCount: number;
14
+ readonly menuOpen: boolean;
15
+ readonly isBrowsingHistory: boolean;
16
+ /** Count of ↑/↓ presses in a short window (trackpad→arrow emulation). */
17
+ readonly burstCount: number;
18
+ }
19
+ export type ArrowIntent = "scroll-chat" | "history" | "ignore";
20
+ /** Trackpad-as-arrows often fires several key repeats within ~100ms. */
21
+ export declare const ARROW_BURST_THRESHOLD = 3;
22
+ export declare const ARROW_BURST_WINDOW_MS = 80;
23
+ export declare function resolveArrowIntent(input: ArrowIntentInput): ArrowIntent;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Decide whether ↑/↓ in the composer should recall prompts or scroll chat.
3
+ *
4
+ * Classic CLAI: bare ↑/↓ at the line boundary walks prompt history (including
5
+ * empty input). Wheel/trackpad still scrolls the transcript via mouse handlers.
6
+ * Only rapid arrow *bursts* (trackpad emulating keys without mouse reporting)
7
+ * are treated as chat scroll so history remains the default for deliberate keys.
8
+ */
9
+ /** Trackpad-as-arrows often fires several key repeats within ~100ms. */
10
+ export const ARROW_BURST_THRESHOLD = 3;
11
+ export const ARROW_BURST_WINDOW_MS = 80;
12
+ export function resolveArrowIntent(input) {
13
+ if (input.menuOpen)
14
+ return "ignore";
15
+ const isUp = input.chord === "up" || input.chord.endsWith("+up");
16
+ const isDown = input.chord === "down" || input.chord.endsWith("+down");
17
+ if (!isUp && !isDown)
18
+ return "ignore";
19
+ // Bare up/down only for normal path; modifier chords still count as history.
20
+ const bare = input.chord === "up" || input.chord === "down";
21
+ // Rapid repeats ≈ trackpad without mouse reporting → scroll chat, not history.
22
+ if (bare && input.burstCount >= ARROW_BURST_THRESHOLD)
23
+ return "scroll-chat";
24
+ // Multi-line edit: only at the top/bottom line boundary may history take over
25
+ // (otherwise let the textarea move the cursor between lines).
26
+ if (bare) {
27
+ if (input.chord === "up" && input.line > 0)
28
+ return "ignore";
29
+ if (input.chord === "down" && input.line < input.lineCount - 1)
30
+ return "ignore";
31
+ }
32
+ // Classic: ↑/↓ at boundary (empty or not) walks prompt history.
33
+ return "history";
34
+ }
35
+ //# sourceMappingURL=arrow-intent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrow-intent.js","sourceRoot":"","sources":["../../../src/tui-v2/composer/arrow-intent.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH,wEAAwE;AACxE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AACvC,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAExC,MAAM,UAAU,kBAAkB,CAAC,KAAuB;IACxD,IAAI,KAAK,CAAC,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAEpC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACvE,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IAEtC,6EAA6E;IAC7E,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC;IAE5D,+EAA+E;IAC/E,IAAI,IAAI,IAAI,KAAK,CAAC,UAAU,IAAI,qBAAqB;QAAE,OAAO,aAAa,CAAC;IAE5E,8EAA8E;IAC9E,8DAA8D;IAC9D,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAC;QAC5D,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAC;IAClF,CAAC;IAED,gEAAgE;IAChE,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Cursor-aware slash and file-mention completion (INPUT-008, V2-044/045).
3
+ *
4
+ * Slash commands are recognized through the command token and its trailing
5
+ * whitespace on the first line. File mentions reuse the existing
6
+ * renderer-independent detector (`src/ui/mentions.ts`).
7
+ */
8
+ import { type FileSuggestion } from "../../ui/mentions.js";
9
+ import type { CommandRegistry } from "../../app/commands/registry.js";
10
+ import type { CommandDefinition } from "../../app/commands/command.js";
11
+ export interface SlashToken {
12
+ readonly token: string;
13
+ readonly start: number;
14
+ readonly end: number;
15
+ }
16
+ export declare function detectSlashToken(value: string, cursorOffset: number): SlashToken | undefined;
17
+ export declare function slashSuggestions(registry: CommandRegistry, value: string, cursorOffset: number): CommandDefinition[];
18
+ export interface MentionMatch {
19
+ readonly start: number;
20
+ readonly query: string;
21
+ readonly suggestions: readonly FileSuggestion[];
22
+ }
23
+ export declare function mentionSuggestions(value: string, cursorOffset: number, baseDir?: string, limit?: number): MentionMatch | undefined;
24
+ export type CompletionMenu = {
25
+ readonly kind: "slash";
26
+ readonly start: number;
27
+ readonly end: number;
28
+ readonly items: readonly CommandDefinition[];
29
+ } | {
30
+ readonly kind: "mention";
31
+ readonly start: number;
32
+ readonly items: readonly FileSuggestion[];
33
+ } | {
34
+ readonly kind: "none";
35
+ };
36
+ /** Slash takes priority since a mention cannot start a line with "/". */
37
+ export declare function resolveCompletionMenu(registry: CommandRegistry, value: string, cursorOffset: number, baseDir?: string): CompletionMenu;
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Cursor-aware slash and file-mention completion (INPUT-008, V2-044/045).
3
+ *
4
+ * Slash commands are recognized through the command token and its trailing
5
+ * whitespace on the first line. File mentions reuse the existing
6
+ * renderer-independent detector (`src/ui/mentions.ts`).
7
+ */
8
+ import { getMentionQuery, findFileSuggestions } from "../../ui/mentions.js";
9
+ export function detectSlashToken(value, cursorOffset) {
10
+ if (!value.startsWith("/"))
11
+ return undefined;
12
+ const firstLineEnd = value.indexOf("\n");
13
+ const lineEnd = firstLineEnd === -1 ? value.length : firstLineEnd;
14
+ if (cursorOffset > lineEnd)
15
+ return undefined;
16
+ const line = value.slice(0, lineEnd);
17
+ const boundary = line.search(/\s/);
18
+ const tokenEnd = boundary === -1 ? line.length : boundary;
19
+ if (cursorOffset > tokenEnd && /\S/.test(line.slice(tokenEnd)))
20
+ return undefined;
21
+ const token = line.slice(0, tokenEnd);
22
+ // Absolute/relative path drops (`/Users/...`, `/\...`) are not commands —
23
+ // leave the menu free for normal prompt + @-mention flow.
24
+ const name = token.slice(1);
25
+ if (name.includes("/") || name.includes("\\"))
26
+ return undefined;
27
+ return { token, start: 0, end: tokenEnd };
28
+ }
29
+ export function slashSuggestions(registry, value, cursorOffset) {
30
+ const token = detectSlashToken(value, cursorOffset);
31
+ if (!token)
32
+ return [];
33
+ return registry.suggestions(token.token);
34
+ }
35
+ export function mentionSuggestions(value, cursorOffset, baseDir, limit = 12) {
36
+ const mention = getMentionQuery(value, cursorOffset);
37
+ if (!mention)
38
+ return undefined;
39
+ const suggestions = findFileSuggestions(mention.query, baseDir, limit);
40
+ return { start: mention.start, query: mention.query, suggestions };
41
+ }
42
+ /** Slash takes priority since a mention cannot start a line with "/". */
43
+ export function resolveCompletionMenu(registry, value, cursorOffset, baseDir) {
44
+ const slashToken = detectSlashToken(value, cursorOffset);
45
+ if (slashToken) {
46
+ const items = registry.suggestions(slashToken.token);
47
+ // Always surface the slash menu while the token is active — including a
48
+ // bare `/` (full catalogue) — so the user never loses command discovery
49
+ // after a focus glitch or an @-mention session.
50
+ if (items.length > 0 || slashToken.token === "/") {
51
+ return {
52
+ kind: "slash",
53
+ start: slashToken.start,
54
+ end: slashToken.end,
55
+ items: items.length > 0
56
+ ? items
57
+ : registry.suggestions(""), // full catalogue fallback
58
+ };
59
+ }
60
+ }
61
+ const mention = mentionSuggestions(value, cursorOffset, baseDir);
62
+ if (mention && mention.suggestions.length > 0) {
63
+ return { kind: "mention", start: mention.start, items: mention.suggestions };
64
+ }
65
+ return { kind: "none" };
66
+ }
67
+ //# sourceMappingURL=completion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.js","sourceRoot":"","sources":["../../../src/tui-v2/composer/completion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /** @jsxImportSource @opentui/react */
2
+ /**
3
+ * Composer: completion menu above input; provider/model/permissions on the
4
+ * top border. Focus is region-aware so transcript scroll is not stolen.
5
+ */
6
+ import { type ReactNode } from "react";
7
+ import type { AppServices } from "../bootstrap/composition-root.js";
8
+ import type { Theme } from "../rendering/theme.js";
9
+ export interface ComposerEditorProps {
10
+ readonly services: AppServices;
11
+ readonly theme: Theme;
12
+ readonly width: number;
13
+ /**
14
+ * Maximum editable text rows (not including the rounded border).
15
+ * The box starts at 1 row and grows with content up to this cap.
16
+ */
17
+ readonly height: number;
18
+ /** The command window gets denser on tall terminals, never a one-row list. */
19
+ readonly maxSuggestions?: number | undefined;
20
+ /** Mirrors the legacy composer hint while a turn is active. */
21
+ readonly running?: boolean | undefined;
22
+ /** Visual region focus from the shell (Tab cycle). */
23
+ readonly focused: boolean;
24
+ /**
25
+ * When set (e.g. Edit on a queued prompt), replace the input with this
26
+ * draft. `token` must change each time so the same text can be re-applied.
27
+ */
28
+ readonly seedDraft?: {
29
+ readonly token: number;
30
+ readonly text: string;
31
+ } | undefined;
32
+ }
33
+ export declare function ComposerEditor(props: ComposerEditorProps): ReactNode;