@nexus-cortex/tui 4.47.0

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 (409) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +2 -0
  3. package/README.md +13 -0
  4. package/bin/cli-full.js +23 -0
  5. package/bin/cortex-ui.js +26 -0
  6. package/bin/ink-ui.js +108 -0
  7. package/bin/launcher-dev.js +266 -0
  8. package/bin/launcher.js +516 -0
  9. package/dist/commands/agent/InteractiveAgentMenu.d.ts +100 -0
  10. package/dist/commands/agent/InteractiveAgentMenu.d.ts.map +1 -0
  11. package/dist/commands/agent/InteractiveAgentMenu.js +909 -0
  12. package/dist/commands/agent/InteractiveAgentMenu.js.map +1 -0
  13. package/dist/commands/agent/index.d.ts +55 -0
  14. package/dist/commands/agent/index.d.ts.map +1 -0
  15. package/dist/commands/agent/index.js +714 -0
  16. package/dist/commands/agent/index.js.map +1 -0
  17. package/dist/commands/chat/interactive.d.ts +13 -0
  18. package/dist/commands/chat/interactive.d.ts.map +1 -0
  19. package/dist/commands/chat/interactive.js +2055 -0
  20. package/dist/commands/chat/interactive.js.map +1 -0
  21. package/dist/commands/system-message/EditorLauncher.d.ts +65 -0
  22. package/dist/commands/system-message/EditorLauncher.d.ts.map +1 -0
  23. package/dist/commands/system-message/EditorLauncher.js +143 -0
  24. package/dist/commands/system-message/EditorLauncher.js.map +1 -0
  25. package/dist/commands/system-message/InlineEditor.d.ts +23 -0
  26. package/dist/commands/system-message/InlineEditor.d.ts.map +1 -0
  27. package/dist/commands/system-message/InlineEditor.js +225 -0
  28. package/dist/commands/system-message/InlineEditor.js.map +1 -0
  29. package/dist/commands/system-message/InteractiveMenu.d.ts +76 -0
  30. package/dist/commands/system-message/InteractiveMenu.d.ts.map +1 -0
  31. package/dist/commands/system-message/InteractiveMenu.js +979 -0
  32. package/dist/commands/system-message/InteractiveMenu.js.map +1 -0
  33. package/dist/commands/system-message/index.d.ts +56 -0
  34. package/dist/commands/system-message/index.d.ts.map +1 -0
  35. package/dist/commands/system-message/index.js +694 -0
  36. package/dist/commands/system-message/index.js.map +1 -0
  37. package/dist/commands/ui/artifacts.d.ts +14 -0
  38. package/dist/commands/ui/artifacts.d.ts.map +1 -0
  39. package/dist/commands/ui/artifacts.js +22 -0
  40. package/dist/commands/ui/artifacts.js.map +1 -0
  41. package/dist/commands/ui/config.d.ts +12 -0
  42. package/dist/commands/ui/config.d.ts.map +1 -0
  43. package/dist/commands/ui/config.js +26 -0
  44. package/dist/commands/ui/config.js.map +1 -0
  45. package/dist/commands/ui/context.d.ts +16 -0
  46. package/dist/commands/ui/context.d.ts.map +1 -0
  47. package/dist/commands/ui/context.js +28 -0
  48. package/dist/commands/ui/context.js.map +1 -0
  49. package/dist/commands/ui/middleware.d.ts +14 -0
  50. package/dist/commands/ui/middleware.d.ts.map +1 -0
  51. package/dist/commands/ui/middleware.js +22 -0
  52. package/dist/commands/ui/middleware.js.map +1 -0
  53. package/dist/commands/ui/models.d.ts +14 -0
  54. package/dist/commands/ui/models.d.ts.map +1 -0
  55. package/dist/commands/ui/models.js +50 -0
  56. package/dist/commands/ui/models.js.map +1 -0
  57. package/dist/commands/ui/permissions.d.ts +14 -0
  58. package/dist/commands/ui/permissions.d.ts.map +1 -0
  59. package/dist/commands/ui/permissions.js +22 -0
  60. package/dist/commands/ui/permissions.js.map +1 -0
  61. package/dist/commands/ui/sessions.d.ts +13 -0
  62. package/dist/commands/ui/sessions.d.ts.map +1 -0
  63. package/dist/commands/ui/sessions.js +45 -0
  64. package/dist/commands/ui/sessions.js.map +1 -0
  65. package/dist/commands/ui/system-messages.d.ts +5 -0
  66. package/dist/commands/ui/system-messages.d.ts.map +1 -0
  67. package/dist/commands/ui/system-messages.js +19 -0
  68. package/dist/commands/ui/system-messages.js.map +1 -0
  69. package/dist/commands/ui/themes.d.ts +12 -0
  70. package/dist/commands/ui/themes.d.ts.map +1 -0
  71. package/dist/commands/ui/themes.js +40 -0
  72. package/dist/commands/ui/themes.js.map +1 -0
  73. package/dist/commands/ui/tmux.d.ts +5 -0
  74. package/dist/commands/ui/tmux.d.ts.map +1 -0
  75. package/dist/commands/ui/tmux.js +19 -0
  76. package/dist/commands/ui/tmux.js.map +1 -0
  77. package/dist/cortex.d.ts +12 -0
  78. package/dist/cortex.d.ts.map +1 -0
  79. package/dist/cortex.js +320 -0
  80. package/dist/cortex.js.map +1 -0
  81. package/dist/index.d.ts +3 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +112 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/ink-ui/CortexApp.d.ts +28 -0
  86. package/dist/ink-ui/CortexApp.d.ts.map +1 -0
  87. package/dist/ink-ui/CortexApp.js +2291 -0
  88. package/dist/ink-ui/CortexApp.js.map +1 -0
  89. package/dist/ink-ui/SimpleInputBuffer.d.ts +63 -0
  90. package/dist/ink-ui/SimpleInputBuffer.d.ts.map +1 -0
  91. package/dist/ink-ui/SimpleInputBuffer.js +369 -0
  92. package/dist/ink-ui/SimpleInputBuffer.js.map +1 -0
  93. package/dist/ink-ui/commands/slashCommands.d.ts +40 -0
  94. package/dist/ink-ui/commands/slashCommands.d.ts.map +1 -0
  95. package/dist/ink-ui/commands/slashCommands.js +111 -0
  96. package/dist/ink-ui/commands/slashCommands.js.map +1 -0
  97. package/dist/ink-ui/commands/types.d.ts +161 -0
  98. package/dist/ink-ui/commands/types.d.ts.map +1 -0
  99. package/dist/ink-ui/commands/types.js +12 -0
  100. package/dist/ink-ui/commands/types.js.map +1 -0
  101. package/dist/ink-ui/components/ApprovalDialog.d.ts +21 -0
  102. package/dist/ink-ui/components/ApprovalDialog.d.ts.map +1 -0
  103. package/dist/ink-ui/components/ApprovalDialog.js +81 -0
  104. package/dist/ink-ui/components/ApprovalDialog.js.map +1 -0
  105. package/dist/ink-ui/components/CommandSuggestions.d.ts +19 -0
  106. package/dist/ink-ui/components/CommandSuggestions.d.ts.map +1 -0
  107. package/dist/ink-ui/components/CommandSuggestions.js +36 -0
  108. package/dist/ink-ui/components/CommandSuggestions.js.map +1 -0
  109. package/dist/ink-ui/components/DiffPreview.d.ts +60 -0
  110. package/dist/ink-ui/components/DiffPreview.d.ts.map +1 -0
  111. package/dist/ink-ui/components/DiffPreview.js +195 -0
  112. package/dist/ink-ui/components/DiffPreview.js.map +1 -0
  113. package/dist/ink-ui/components/DocumentPreview.d.ts +50 -0
  114. package/dist/ink-ui/components/DocumentPreview.d.ts.map +1 -0
  115. package/dist/ink-ui/components/DocumentPreview.js +92 -0
  116. package/dist/ink-ui/components/DocumentPreview.js.map +1 -0
  117. package/dist/ink-ui/components/MarkdownText.d.ts +27 -0
  118. package/dist/ink-ui/components/MarkdownText.d.ts.map +1 -0
  119. package/dist/ink-ui/components/MarkdownText.js +342 -0
  120. package/dist/ink-ui/components/MarkdownText.js.map +1 -0
  121. package/dist/ink-ui/components/MenuRenderer.d.ts +26 -0
  122. package/dist/ink-ui/components/MenuRenderer.d.ts.map +1 -0
  123. package/dist/ink-ui/components/MenuRenderer.js +264 -0
  124. package/dist/ink-ui/components/MenuRenderer.js.map +1 -0
  125. package/dist/ink-ui/components/ModelPickerDialog.d.ts +33 -0
  126. package/dist/ink-ui/components/ModelPickerDialog.d.ts.map +1 -0
  127. package/dist/ink-ui/components/ModelPickerDialog.js +98 -0
  128. package/dist/ink-ui/components/ModelPickerDialog.js.map +1 -0
  129. package/dist/ink-ui/components/StreamDisplay.d.ts +31 -0
  130. package/dist/ink-ui/components/StreamDisplay.d.ts.map +1 -0
  131. package/dist/ink-ui/components/StreamDisplay.js +573 -0
  132. package/dist/ink-ui/components/StreamDisplay.js.map +1 -0
  133. package/dist/ink-ui/components/SubAgentPanel.d.ts +98 -0
  134. package/dist/ink-ui/components/SubAgentPanel.d.ts.map +1 -0
  135. package/dist/ink-ui/components/SubAgentPanel.js +155 -0
  136. package/dist/ink-ui/components/SubAgentPanel.js.map +1 -0
  137. package/dist/ink-ui/components/ThinkingDisplay.d.ts +46 -0
  138. package/dist/ink-ui/components/ThinkingDisplay.d.ts.map +1 -0
  139. package/dist/ink-ui/components/ThinkingDisplay.js +176 -0
  140. package/dist/ink-ui/components/ThinkingDisplay.js.map +1 -0
  141. package/dist/ink-ui/components/ToolCallDisplay.d.ts +51 -0
  142. package/dist/ink-ui/components/ToolCallDisplay.d.ts.map +1 -0
  143. package/dist/ink-ui/components/ToolCallDisplay.js +378 -0
  144. package/dist/ink-ui/components/ToolCallDisplay.js.map +1 -0
  145. package/dist/ink-ui/components/WritePreview.d.ts +42 -0
  146. package/dist/ink-ui/components/WritePreview.d.ts.map +1 -0
  147. package/dist/ink-ui/components/WritePreview.js +100 -0
  148. package/dist/ink-ui/components/WritePreview.js.map +1 -0
  149. package/dist/ink-ui/contexts/KeypressContext.d.ts +32 -0
  150. package/dist/ink-ui/contexts/KeypressContext.d.ts.map +1 -0
  151. package/dist/ink-ui/contexts/KeypressContext.js +529 -0
  152. package/dist/ink-ui/contexts/KeypressContext.js.map +1 -0
  153. package/dist/ink-ui/contexts/SessionContext.d.ts +46 -0
  154. package/dist/ink-ui/contexts/SessionContext.d.ts.map +1 -0
  155. package/dist/ink-ui/contexts/SessionContext.js +162 -0
  156. package/dist/ink-ui/contexts/SessionContext.js.map +1 -0
  157. package/dist/ink-ui/core-stubs.d.ts +270 -0
  158. package/dist/ink-ui/core-stubs.d.ts.map +1 -0
  159. package/dist/ink-ui/core-stubs.js +276 -0
  160. package/dist/ink-ui/core-stubs.js.map +1 -0
  161. package/dist/ink-ui/cortex-types.d.ts +214 -0
  162. package/dist/ink-ui/cortex-types.d.ts.map +1 -0
  163. package/dist/ink-ui/cortex-types.js +52 -0
  164. package/dist/ink-ui/cortex-types.js.map +1 -0
  165. package/dist/ink-ui/hooks/useCortexStream.d.ts +75 -0
  166. package/dist/ink-ui/hooks/useCortexStream.d.ts.map +1 -0
  167. package/dist/ink-ui/hooks/useCortexStream.js +518 -0
  168. package/dist/ink-ui/hooks/useCortexStream.js.map +1 -0
  169. package/dist/ink-ui/hooks/useFocus.d.ts +11 -0
  170. package/dist/ink-ui/hooks/useFocus.d.ts.map +1 -0
  171. package/dist/ink-ui/hooks/useFocus.js +51 -0
  172. package/dist/ink-ui/hooks/useFocus.js.map +1 -0
  173. package/dist/ink-ui/hooks/useHistoryManager.d.ts +23 -0
  174. package/dist/ink-ui/hooks/useHistoryManager.d.ts.map +1 -0
  175. package/dist/ink-ui/hooks/useHistoryManager.js +63 -0
  176. package/dist/ink-ui/hooks/useHistoryManager.js.map +1 -0
  177. package/dist/ink-ui/hooks/useKeypress.d.ts +18 -0
  178. package/dist/ink-ui/hooks/useKeypress.d.ts.map +1 -0
  179. package/dist/ink-ui/hooks/useKeypress.js +27 -0
  180. package/dist/ink-ui/hooks/useKeypress.js.map +1 -0
  181. package/dist/ink-ui/hooks/useReactApprovalHandler.d.ts +74 -0
  182. package/dist/ink-ui/hooks/useReactApprovalHandler.d.ts.map +1 -0
  183. package/dist/ink-ui/hooks/useReactApprovalHandler.js +83 -0
  184. package/dist/ink-ui/hooks/useReactApprovalHandler.js.map +1 -0
  185. package/dist/ink-ui/hooks/useTerminalSize.d.ts +10 -0
  186. package/dist/ink-ui/hooks/useTerminalSize.d.ts.map +1 -0
  187. package/dist/ink-ui/hooks/useTerminalSize.js +28 -0
  188. package/dist/ink-ui/hooks/useTerminalSize.js.map +1 -0
  189. package/dist/ink-ui/semantic-colors.d.ts +8 -0
  190. package/dist/ink-ui/semantic-colors.d.ts.map +1 -0
  191. package/dist/ink-ui/semantic-colors.js +24 -0
  192. package/dist/ink-ui/semantic-colors.js.map +1 -0
  193. package/dist/ink-ui/state/extensions.d.ts +68 -0
  194. package/dist/ink-ui/state/extensions.d.ts.map +1 -0
  195. package/dist/ink-ui/state/extensions.js +97 -0
  196. package/dist/ink-ui/state/extensions.js.map +1 -0
  197. package/dist/ink-ui/themes/ansi-light.d.ts +8 -0
  198. package/dist/ink-ui/themes/ansi-light.d.ts.map +1 -0
  199. package/dist/ink-ui/themes/ansi-light.js +143 -0
  200. package/dist/ink-ui/themes/ansi-light.js.map +1 -0
  201. package/dist/ink-ui/themes/ansi.d.ts +8 -0
  202. package/dist/ink-ui/themes/ansi.d.ts.map +1 -0
  203. package/dist/ink-ui/themes/ansi.js +153 -0
  204. package/dist/ink-ui/themes/ansi.js.map +1 -0
  205. package/dist/ink-ui/themes/atom-one-dark.d.ts +8 -0
  206. package/dist/ink-ui/themes/atom-one-dark.d.ts.map +1 -0
  207. package/dist/ink-ui/themes/atom-one-dark.js +140 -0
  208. package/dist/ink-ui/themes/atom-one-dark.js.map +1 -0
  209. package/dist/ink-ui/themes/ayu-light.d.ts +8 -0
  210. package/dist/ink-ui/themes/ayu-light.d.ts.map +1 -0
  211. package/dist/ink-ui/themes/ayu-light.js +132 -0
  212. package/dist/ink-ui/themes/ayu-light.js.map +1 -0
  213. package/dist/ink-ui/themes/ayu.d.ts +8 -0
  214. package/dist/ink-ui/themes/ayu.d.ts.map +1 -0
  215. package/dist/ink-ui/themes/ayu.js +106 -0
  216. package/dist/ink-ui/themes/ayu.js.map +1 -0
  217. package/dist/ink-ui/themes/color-utils.d.ts +23 -0
  218. package/dist/ink-ui/themes/color-utils.d.ts.map +1 -0
  219. package/dist/ink-ui/themes/color-utils.js +237 -0
  220. package/dist/ink-ui/themes/color-utils.js.map +1 -0
  221. package/dist/ink-ui/themes/default-light.d.ts +8 -0
  222. package/dist/ink-ui/themes/default-light.d.ts.map +1 -0
  223. package/dist/ink-ui/themes/default-light.js +100 -0
  224. package/dist/ink-ui/themes/default-light.js.map +1 -0
  225. package/dist/ink-ui/themes/default.d.ts +8 -0
  226. package/dist/ink-ui/themes/default.d.ts.map +1 -0
  227. package/dist/ink-ui/themes/default.js +143 -0
  228. package/dist/ink-ui/themes/default.js.map +1 -0
  229. package/dist/ink-ui/themes/dracula.d.ts +8 -0
  230. package/dist/ink-ui/themes/dracula.d.ts.map +1 -0
  231. package/dist/ink-ui/themes/dracula.js +117 -0
  232. package/dist/ink-ui/themes/dracula.js.map +1 -0
  233. package/dist/ink-ui/themes/github-dark.d.ts +8 -0
  234. package/dist/ink-ui/themes/github-dark.d.ts.map +1 -0
  235. package/dist/ink-ui/themes/github-dark.js +140 -0
  236. package/dist/ink-ui/themes/github-dark.js.map +1 -0
  237. package/dist/ink-ui/themes/github-light.d.ts +8 -0
  238. package/dist/ink-ui/themes/github-light.d.ts.map +1 -0
  239. package/dist/ink-ui/themes/github-light.js +142 -0
  240. package/dist/ink-ui/themes/github-light.js.map +1 -0
  241. package/dist/ink-ui/themes/googlecode.d.ts +8 -0
  242. package/dist/ink-ui/themes/googlecode.d.ts.map +1 -0
  243. package/dist/ink-ui/themes/googlecode.js +139 -0
  244. package/dist/ink-ui/themes/googlecode.js.map +1 -0
  245. package/dist/ink-ui/themes/no-color.d.ts +8 -0
  246. package/dist/ink-ui/themes/no-color.d.ts.map +1 -0
  247. package/dist/ink-ui/themes/no-color.js +118 -0
  248. package/dist/ink-ui/themes/no-color.js.map +1 -0
  249. package/dist/ink-ui/themes/semantic-tokens.d.ts +40 -0
  250. package/dist/ink-ui/themes/semantic-tokens.d.ts.map +1 -0
  251. package/dist/ink-ui/themes/semantic-tokens.js +100 -0
  252. package/dist/ink-ui/themes/semantic-tokens.js.map +1 -0
  253. package/dist/ink-ui/themes/shades-of-purple.d.ts +12 -0
  254. package/dist/ink-ui/themes/shades-of-purple.d.ts.map +1 -0
  255. package/dist/ink-ui/themes/shades-of-purple.js +306 -0
  256. package/dist/ink-ui/themes/shades-of-purple.js.map +1 -0
  257. package/dist/ink-ui/themes/theme-manager.d.ts +67 -0
  258. package/dist/ink-ui/themes/theme-manager.d.ts.map +1 -0
  259. package/dist/ink-ui/themes/theme-manager.js +263 -0
  260. package/dist/ink-ui/themes/theme-manager.js.map +1 -0
  261. package/dist/ink-ui/themes/theme.d.ts +134 -0
  262. package/dist/ink-ui/themes/theme.d.ts.map +1 -0
  263. package/dist/ink-ui/themes/theme.js +390 -0
  264. package/dist/ink-ui/themes/theme.js.map +1 -0
  265. package/dist/ink-ui/themes/xcode.d.ts +8 -0
  266. package/dist/ink-ui/themes/xcode.d.ts.map +1 -0
  267. package/dist/ink-ui/themes/xcode.js +147 -0
  268. package/dist/ink-ui/themes/xcode.js.map +1 -0
  269. package/dist/ink-ui/types.d.ts +306 -0
  270. package/dist/ink-ui/types.d.ts.map +1 -0
  271. package/dist/ink-ui/types.js +65 -0
  272. package/dist/ink-ui/types.js.map +1 -0
  273. package/dist/ink-ui/utils/input.d.ts +18 -0
  274. package/dist/ink-ui/utils/input.d.ts.map +1 -0
  275. package/dist/ink-ui/utils/input.js +51 -0
  276. package/dist/ink-ui/utils/input.js.map +1 -0
  277. package/dist/ink-ui/utils/mouse.d.ts +33 -0
  278. package/dist/ink-ui/utils/mouse.d.ts.map +1 -0
  279. package/dist/ink-ui/utils/mouse.js +182 -0
  280. package/dist/ink-ui/utils/mouse.js.map +1 -0
  281. package/dist/services/BuiltinCommandLoader.d.ts +21 -0
  282. package/dist/services/BuiltinCommandLoader.d.ts.map +1 -0
  283. package/dist/services/BuiltinCommandLoader.js +182 -0
  284. package/dist/services/BuiltinCommandLoader.js.map +1 -0
  285. package/dist/services/CommandService.d.ts +39 -0
  286. package/dist/services/CommandService.d.ts.map +1 -0
  287. package/dist/services/CommandService.js +49 -0
  288. package/dist/services/CommandService.js.map +1 -0
  289. package/dist/services/FileCommandLoader.d.ts +16 -0
  290. package/dist/services/FileCommandLoader.d.ts.map +1 -0
  291. package/dist/services/FileCommandLoader.js +19 -0
  292. package/dist/services/FileCommandLoader.js.map +1 -0
  293. package/dist/services/McpPromptLoader.d.ts +16 -0
  294. package/dist/services/McpPromptLoader.d.ts.map +1 -0
  295. package/dist/services/McpPromptLoader.js +19 -0
  296. package/dist/services/McpPromptLoader.js.map +1 -0
  297. package/dist/services/index.d.ts +8 -0
  298. package/dist/services/index.d.ts.map +1 -0
  299. package/dist/services/index.js +8 -0
  300. package/dist/services/index.js.map +1 -0
  301. package/dist/ui/ChalkMenuRenderer.d.ts +22 -0
  302. package/dist/ui/ChalkMenuRenderer.d.ts.map +1 -0
  303. package/dist/ui/ChalkMenuRenderer.js +478 -0
  304. package/dist/ui/ChalkMenuRenderer.js.map +1 -0
  305. package/dist/ui/ChalkModelPicker.d.ts +20 -0
  306. package/dist/ui/ChalkModelPicker.d.ts.map +1 -0
  307. package/dist/ui/ChalkModelPicker.js +363 -0
  308. package/dist/ui/ChalkModelPicker.js.map +1 -0
  309. package/dist/ui/ChalkThemePicker.d.ts +20 -0
  310. package/dist/ui/ChalkThemePicker.d.ts.map +1 -0
  311. package/dist/ui/ChalkThemePicker.js +370 -0
  312. package/dist/ui/ChalkThemePicker.js.map +1 -0
  313. package/dist/ui/InkApprovalDialog.d.ts +8 -0
  314. package/dist/ui/InkApprovalDialog.d.ts.map +1 -0
  315. package/dist/ui/InkApprovalDialog.js +25 -0
  316. package/dist/ui/InkApprovalDialog.js.map +1 -0
  317. package/dist/ui/InkCommandPalette.d.ts +43 -0
  318. package/dist/ui/InkCommandPalette.d.ts.map +1 -0
  319. package/dist/ui/InkCommandPalette.js +105 -0
  320. package/dist/ui/InkCommandPalette.js.map +1 -0
  321. package/dist/ui/InkConfigMenu.d.ts +24 -0
  322. package/dist/ui/InkConfigMenu.d.ts.map +1 -0
  323. package/dist/ui/InkConfigMenu.js +259 -0
  324. package/dist/ui/InkConfigMenu.js.map +1 -0
  325. package/dist/ui/InkHelp.d.ts +25 -0
  326. package/dist/ui/InkHelp.d.ts.map +1 -0
  327. package/dist/ui/InkHelp.js +55 -0
  328. package/dist/ui/InkHelp.js.map +1 -0
  329. package/dist/ui/InkMenuPicker.d.ts +19 -0
  330. package/dist/ui/InkMenuPicker.d.ts.map +1 -0
  331. package/dist/ui/InkMenuPicker.js +33 -0
  332. package/dist/ui/InkMenuPicker.js.map +1 -0
  333. package/dist/ui/InkModelPicker.d.ts +23 -0
  334. package/dist/ui/InkModelPicker.d.ts.map +1 -0
  335. package/dist/ui/InkModelPicker.js +53 -0
  336. package/dist/ui/InkModelPicker.js.map +1 -0
  337. package/dist/ui/PersistentInput.d.ts +91 -0
  338. package/dist/ui/PersistentInput.d.ts.map +1 -0
  339. package/dist/ui/PersistentInput.js +283 -0
  340. package/dist/ui/PersistentInput.js.map +1 -0
  341. package/dist/ui/RawInput.d.ts +27 -0
  342. package/dist/ui/RawInput.d.ts.map +1 -0
  343. package/dist/ui/RawInput.js +731 -0
  344. package/dist/ui/RawInput.js.map +1 -0
  345. package/dist/ui/SlashCommandAutocomplete.d.ts +94 -0
  346. package/dist/ui/SlashCommandAutocomplete.d.ts.map +1 -0
  347. package/dist/ui/SlashCommandAutocomplete.js +274 -0
  348. package/dist/ui/SlashCommandAutocomplete.js.map +1 -0
  349. package/dist/ui/SplashScreen.d.ts +76 -0
  350. package/dist/ui/SplashScreen.d.ts.map +1 -0
  351. package/dist/ui/SplashScreen.js +316 -0
  352. package/dist/ui/SplashScreen.js.map +1 -0
  353. package/dist/ui/components/ArtifactDashboard.d.ts +16 -0
  354. package/dist/ui/components/ArtifactDashboard.d.ts.map +1 -0
  355. package/dist/ui/components/ArtifactDashboard.js +102 -0
  356. package/dist/ui/components/ArtifactDashboard.js.map +1 -0
  357. package/dist/ui/components/ChatInput.d.ts +36 -0
  358. package/dist/ui/components/ChatInput.d.ts.map +1 -0
  359. package/dist/ui/components/ChatInput.js +11 -0
  360. package/dist/ui/components/ChatInput.js.map +1 -0
  361. package/dist/ui/components/ConfigWizard.d.ts +17 -0
  362. package/dist/ui/components/ConfigWizard.d.ts.map +1 -0
  363. package/dist/ui/components/ConfigWizard.js +134 -0
  364. package/dist/ui/components/ConfigWizard.js.map +1 -0
  365. package/dist/ui/components/ContextViewer.d.ts +18 -0
  366. package/dist/ui/components/ContextViewer.d.ts.map +1 -0
  367. package/dist/ui/components/ContextViewer.js +85 -0
  368. package/dist/ui/components/ContextViewer.js.map +1 -0
  369. package/dist/ui/components/MiddlewareDashboard.d.ts +16 -0
  370. package/dist/ui/components/MiddlewareDashboard.d.ts.map +1 -0
  371. package/dist/ui/components/MiddlewareDashboard.js +98 -0
  372. package/dist/ui/components/MiddlewareDashboard.js.map +1 -0
  373. package/dist/ui/components/ModelPicker.d.ts +24 -0
  374. package/dist/ui/components/ModelPicker.d.ts.map +1 -0
  375. package/dist/ui/components/ModelPicker.js +96 -0
  376. package/dist/ui/components/ModelPicker.js.map +1 -0
  377. package/dist/ui/components/MultiLineInput.d.ts +27 -0
  378. package/dist/ui/components/MultiLineInput.d.ts.map +1 -0
  379. package/dist/ui/components/MultiLineInput.js +182 -0
  380. package/dist/ui/components/MultiLineInput.js.map +1 -0
  381. package/dist/ui/components/PermissionsBrowser.d.ts +16 -0
  382. package/dist/ui/components/PermissionsBrowser.d.ts.map +1 -0
  383. package/dist/ui/components/PermissionsBrowser.js +110 -0
  384. package/dist/ui/components/PermissionsBrowser.js.map +1 -0
  385. package/dist/ui/components/SessionBrowser.d.ts +19 -0
  386. package/dist/ui/components/SessionBrowser.d.ts.map +1 -0
  387. package/dist/ui/components/SessionBrowser.js +66 -0
  388. package/dist/ui/components/SessionBrowser.js.map +1 -0
  389. package/dist/ui/components/StatusBar.d.ts +32 -0
  390. package/dist/ui/components/StatusBar.d.ts.map +1 -0
  391. package/dist/ui/components/StatusBar.js +27 -0
  392. package/dist/ui/components/StatusBar.js.map +1 -0
  393. package/dist/ui/components/SystemMessageBrowser.d.ts +11 -0
  394. package/dist/ui/components/SystemMessageBrowser.d.ts.map +1 -0
  395. package/dist/ui/components/SystemMessageBrowser.js +106 -0
  396. package/dist/ui/components/SystemMessageBrowser.js.map +1 -0
  397. package/dist/ui/components/ThemePicker.d.ts +11 -0
  398. package/dist/ui/components/ThemePicker.d.ts.map +1 -0
  399. package/dist/ui/components/ThemePicker.js +62 -0
  400. package/dist/ui/components/ThemePicker.js.map +1 -0
  401. package/dist/ui/components/TmuxBrowser.d.ts +11 -0
  402. package/dist/ui/components/TmuxBrowser.d.ts.map +1 -0
  403. package/dist/ui/components/TmuxBrowser.js +85 -0
  404. package/dist/ui/components/TmuxBrowser.js.map +1 -0
  405. package/dist/ui/components/index.d.ts +22 -0
  406. package/dist/ui/components/index.d.ts.map +1 -0
  407. package/dist/ui/components/index.js +21 -0
  408. package/dist/ui/components/index.js.map +1 -0
  409. package/package.json +70 -0
@@ -0,0 +1,518 @@
1
+ /**
2
+ * useCortexStream - Bridge between Nexus Cortex core and Gemini CLI UI
3
+ *
4
+ * This hook provides the same interface as useGeminiStream but wires to our
5
+ * @nexus-cortex/core orchestrator instead of Google's Gemini client.
6
+ *
7
+ * Key responsibilities:
8
+ * 1. Convert OrchestratorClient.streamMessage() chunks to UI history items
9
+ * 2. Handle tool call scheduling and confirmation flow
10
+ * 3. Manage streaming state for UI components
11
+ * 4. Support slash commands and shell mode
12
+ */
13
+ import { useState, useRef, useCallback, useMemo } from 'react';
14
+ import { StreamingState, MessageType, StreamEventType, ToolCallStatus } from '../cortex-types.js';
15
+ /**
16
+ * Main streaming hook - bridges Cortex core to Gemini UI
17
+ */
18
+ export const useCortexStream = (orchestratorClient, _history, addItem, _config, settings, onDebugMessage, handleSlashCommand, _shellModeActive, onCancelSubmit, _terminalWidth, _terminalHeight, refreshHistory) => {
19
+ // State
20
+ const [streamingState, setStreamingState] = useState(StreamingState.Idle);
21
+ const [initError, setInitError] = useState(null);
22
+ const [thought, setThought] = useState(null);
23
+ const [_pendingHistoryItem, setPendingHistoryItem] = useState(null);
24
+ const pendingHistoryItemRef = useRef(null);
25
+ const [loopDetectionConfirmationRequest, _setLoopDetectionConfirmationRequest] = useState(null);
26
+ const [activePtyId, _setActivePtyId] = useState(null);
27
+ const [lastShellOutputTime, _setLastShellOutputTime] = useState(0);
28
+ // Track current thinking block ID for interleaving
29
+ const currentThinkingBlockIdRef = useRef(null);
30
+ // Keep ref in sync with state
31
+ const updatePendingHistoryItem = useCallback((item) => {
32
+ pendingHistoryItemRef.current = item;
33
+ setPendingHistoryItem(item);
34
+ }, []);
35
+ // Refs
36
+ const abortControllerRef = useRef(null);
37
+ const turnCancelledRef = useRef(false);
38
+ const activeQueryIdRef = useRef(null);
39
+ // Simplified tool tracking (full scheduler will be integrated later)
40
+ const [toolCalls, setToolCalls] = useState([]);
41
+ const [toolInputArgs, setToolInputArgs] = useState(new Map());
42
+ const [lastToolOutputTime, _setLastToolOutputTime] = useState(0);
43
+ // Turn summary & next-action prediction (set at end of turn when TURN_SUMMARY_PREDICTION=true)
44
+ const [turnSummary, setTurnSummary] = useState(null);
45
+ const [nextActionPrediction, setNextActionPrediction] = useState(null);
46
+ // Turn usage data from orchestrator (set on message_stop)
47
+ const [turnUsage, setTurnUsage] = useState(null);
48
+ // Stream start timestamp for elapsed timer
49
+ const [streamStartTime, setStreamStartTime] = useState(0);
50
+ // Stream events for interleaved display - tracks all content in order
51
+ const [streamEvents, setStreamEvents] = useState([]);
52
+ const streamEventsRef = useRef([]);
53
+ // Helper to add a stream event
54
+ const addStreamEvent = useCallback((event) => {
55
+ const newEvent = {
56
+ ...event,
57
+ id: `event-${Date.now()}-${Math.random().toString(36).substr(2, 5)}`,
58
+ timestamp: Date.now(),
59
+ };
60
+ streamEventsRef.current = [...streamEventsRef.current, newEvent];
61
+ setStreamEvents(streamEventsRef.current);
62
+ return newEvent.id;
63
+ }, []);
64
+ // Helper to update an existing stream event
65
+ const updateStreamEvent = useCallback((eventId, updates) => {
66
+ streamEventsRef.current = streamEventsRef.current.map(e => e.id === eventId ? { ...e, ...updates } : e);
67
+ setStreamEvents(streamEventsRef.current);
68
+ }, []);
69
+ const cancelAllToolCalls = useCallback(() => {
70
+ setToolCalls([]);
71
+ setToolInputArgs(new Map());
72
+ setStreamEvents([]);
73
+ streamEventsRef.current = [];
74
+ }, []);
75
+ /**
76
+ * Cancel ongoing request
77
+ */
78
+ const cancelOngoingRequest = useCallback(() => {
79
+ if (abortControllerRef.current) {
80
+ abortControllerRef.current.abort();
81
+ turnCancelledRef.current = true;
82
+ }
83
+ cancelAllToolCalls();
84
+ setStreamingState(StreamingState.Idle);
85
+ onCancelSubmit(true);
86
+ }, [cancelAllToolCalls, onCancelSubmit]);
87
+ /**
88
+ * Handle approval mode changes (auto-approve whitelist + graylist)
89
+ * Note: This is NOT YOLO mode - blacklist actions still require manual approval
90
+ */
91
+ const handleApprovalModeChange = useCallback((autoApprove) => {
92
+ if (orchestratorClient) {
93
+ // Update orchestrator approval mode (graylist will be auto-approved)
94
+ orchestratorClient.setApprovalMode(autoApprove);
95
+ }
96
+ onDebugMessage(`Auto-approve mode: ${autoApprove ? 'ON' : 'OFF'}`);
97
+ }, [orchestratorClient, onDebugMessage]);
98
+ /**
99
+ * Helper to update thinking state with proper block tracking
100
+ */
101
+ const updateThinkingState = useCallback((thinkingText, isComplete, accumulatedThinkingBlocks) => {
102
+ if (!settings.showThinking)
103
+ return;
104
+ // Get or create current block ID
105
+ if (!currentThinkingBlockIdRef.current) {
106
+ currentThinkingBlockIdRef.current = `thinking-${Date.now()}-${Math.random().toString(36).substr(2, 5)}`;
107
+ }
108
+ const blockId = currentThinkingBlockIdRef.current;
109
+ // Find or create block
110
+ let blockIndex = accumulatedThinkingBlocks.current.findIndex(b => b.id === blockId);
111
+ if (blockIndex === -1) {
112
+ accumulatedThinkingBlocks.current.push({
113
+ id: blockId,
114
+ text: '',
115
+ isComplete: false,
116
+ startedAt: Date.now(),
117
+ });
118
+ blockIndex = accumulatedThinkingBlocks.current.length - 1;
119
+ }
120
+ // Update block
121
+ const block = accumulatedThinkingBlocks.current[blockIndex];
122
+ if (block) {
123
+ block.text = thinkingText;
124
+ block.isComplete = isComplete;
125
+ if (isComplete) {
126
+ block.completedAt = Date.now();
127
+ // Reset for next thinking block
128
+ currentThinkingBlockIdRef.current = null;
129
+ }
130
+ }
131
+ // Update thought state
132
+ setThought({
133
+ text: thinkingText,
134
+ isComplete,
135
+ blocks: [...accumulatedThinkingBlocks.current],
136
+ });
137
+ }, [settings.showThinking]);
138
+ /**
139
+ * Process streaming chunk and update UI state
140
+ *
141
+ * SIMPLE APPROACH: Just store chunks as stream events in order.
142
+ * The core library provides chunks in the correct interleaved order.
143
+ * We just need to render them.
144
+ */
145
+ const processStreamChunk = useCallback((chunk, accumulatedText, accumulatedThinking, accumulatedThinkingBlocks) => {
146
+ // Debug: log all chunk types to understand what's coming through
147
+ onDebugMessage(`Chunk: ${chunk.type}${chunk.delta ? ` (delta: ${chunk.delta.slice(0, 30)}...)` : ''}${chunk.thinking ? ' (has thinking)' : ''}${chunk.toolUse ? ` (tool: ${chunk.toolUse.name})` : ''}`);
148
+ switch (chunk.type) {
149
+ case 'text_delta':
150
+ if (chunk.delta) {
151
+ accumulatedText.current += chunk.delta;
152
+ // Add text chunk as stream event - core provides these in correct order
153
+ addStreamEvent({
154
+ type: StreamEventType.Text,
155
+ text: chunk.delta,
156
+ });
157
+ // Also update pending history item for overall text
158
+ updatePendingHistoryItem({
159
+ type: MessageType.Model,
160
+ modelContent: accumulatedText.current,
161
+ thought: accumulatedThinking.current || undefined,
162
+ });
163
+ }
164
+ break;
165
+ case 'thinking_delta':
166
+ if (chunk.delta) {
167
+ accumulatedThinking.current += chunk.delta;
168
+ updateThinkingState(accumulatedThinking.current, false, accumulatedThinkingBlocks);
169
+ }
170
+ break;
171
+ case 'thinking':
172
+ // Direct thinking chunk (some providers send full thinking at once)
173
+ if (chunk.thinking) {
174
+ accumulatedThinking.current = chunk.thinking;
175
+ updateThinkingState(accumulatedThinking.current, chunk.isComplete || false, accumulatedThinkingBlocks);
176
+ }
177
+ break;
178
+ case 'thinking_start':
179
+ // New thinking block started - already handled by updateThinkingState creating new block
180
+ onDebugMessage('Thinking block started');
181
+ break;
182
+ case 'thinking_stop':
183
+ // Current thinking block completed
184
+ if (accumulatedThinking.current) {
185
+ updateThinkingState(accumulatedThinking.current, true, accumulatedThinkingBlocks);
186
+ // Reset for next thinking block
187
+ accumulatedThinking.current = '';
188
+ }
189
+ break;
190
+ case 'content_block_delta':
191
+ const data = chunk.data;
192
+ const deltaType = data?.delta?.type || chunk.data?.type;
193
+ // Check for input_json_delta (tool input streaming) - IGNORE these
194
+ // They are already handled by content_block_start with full input
195
+ if (deltaType === 'input_json_delta') {
196
+ // Tool input JSON delta - skip, don't add to text
197
+ break;
198
+ }
199
+ if (data?.reasoning && chunk.delta) {
200
+ // Interleaved thinking (Grok, Claude) or OpenAI reasoning tokens
201
+ // ALWAYS show interleaved thinking - it's part of the model's natural output
202
+ // The Tab toggle only controls front/rear-loaded extended thinking (Claude <thinking> tags)
203
+ accumulatedThinking.current += chunk.delta;
204
+ // Always add to stream events - interleaved thinking should always be visible
205
+ addStreamEvent({
206
+ type: StreamEventType.Thinking,
207
+ thinking: chunk.delta,
208
+ thinkingComplete: false,
209
+ });
210
+ // Also update thinking state (for the separate thinking indicator if enabled)
211
+ updateThinkingState(accumulatedThinking.current, false, accumulatedThinkingBlocks);
212
+ }
213
+ else if (!data?.reasoning && chunk.delta) {
214
+ // Regular text - add as text event
215
+ accumulatedText.current += chunk.delta;
216
+ addStreamEvent({
217
+ type: StreamEventType.Text,
218
+ text: chunk.delta,
219
+ });
220
+ updatePendingHistoryItem({
221
+ type: MessageType.Model,
222
+ modelContent: accumulatedText.current,
223
+ thought: accumulatedThinking.current || undefined,
224
+ });
225
+ }
226
+ break;
227
+ case 'content_block_start':
228
+ // Check block type from chunk.data or chunk.content_block
229
+ const startData = chunk.data;
230
+ const contentBlock = startData?.content_block || startData;
231
+ if (contentBlock?.type === 'thinking') {
232
+ onDebugMessage('Thinking content block started');
233
+ }
234
+ // Note: tool_use blocks are handled by tool_use_complete event
235
+ break;
236
+ case 'content_block_stop':
237
+ // Check if this is a thinking block end
238
+ const stopData = chunk.data;
239
+ if (stopData?.type === 'thinking' && accumulatedThinking.current) {
240
+ updateThinkingState(accumulatedThinking.current, true, accumulatedThinkingBlocks);
241
+ // Reset for next thinking block
242
+ accumulatedThinking.current = '';
243
+ }
244
+ break;
245
+ case 'tool_use_complete':
246
+ // Tool call completed - add to stream events AND history
247
+ // Core library provides this in correct order relative to text
248
+ if (chunk.toolUse) {
249
+ const toolUse = chunk.toolUse;
250
+ onDebugMessage(`Tool use: ${toolUse.name}`);
251
+ // Debug: Log input keys to understand what data we have
252
+ if (toolUse.input) {
253
+ onDebugMessage(`Tool input keys: ${Object.keys(toolUse.input).join(', ')}`);
254
+ if (toolUse.name === 'Edit') {
255
+ onDebugMessage(`Edit tool has old_string: ${toolUse.input.old_string !== undefined}, new_string: ${toolUse.input.new_string !== undefined}`);
256
+ }
257
+ }
258
+ else {
259
+ onDebugMessage(`Tool input is undefined`);
260
+ }
261
+ const callId = toolUse.id || `tool-${Date.now()}`;
262
+ // Create tool call display entry
263
+ const newToolCall = {
264
+ callId,
265
+ name: toolUse.name,
266
+ description: '',
267
+ status: ToolCallStatus.Executing,
268
+ resultDisplay: undefined,
269
+ confirmationDetails: undefined,
270
+ };
271
+ setToolCalls(prev => [...prev, newToolCall]);
272
+ // Store input args for tool display
273
+ if (toolUse.input) {
274
+ setToolInputArgs(prev => {
275
+ const newMap = new Map(prev);
276
+ newMap.set(callId, toolUse.input);
277
+ return newMap;
278
+ });
279
+ }
280
+ // Add stream event for interleaved display during streaming
281
+ addStreamEvent({
282
+ type: StreamEventType.ToolCall,
283
+ toolCall: newToolCall,
284
+ toolInputArgs: toolUse.input,
285
+ });
286
+ }
287
+ break;
288
+ case 'tool_result':
289
+ // Tool completed - toolResult field contains the result data
290
+ if (chunk.toolResult) {
291
+ const toolResult = chunk.toolResult;
292
+ onDebugMessage(`Tool result for ${toolResult.tool_name}: ${toolResult.is_error ? 'error' : 'success'}`);
293
+ // Update tool call with result
294
+ const resultCallId = toolResult.tool_use_id;
295
+ if (resultCallId) {
296
+ // Build result display with metadata (includes diff for Edit tool)
297
+ const resultDisplay = {
298
+ output: typeof toolResult.content === 'string'
299
+ ? toolResult.content
300
+ : JSON.stringify(toolResult.content),
301
+ isError: toolResult.is_error,
302
+ error: toolResult.is_error ? toolResult.content : undefined,
303
+ // IMPORTANT: Pass through metadata which contains diff, fileStats, etc.
304
+ metadata: toolResult.metadata,
305
+ };
306
+ // Debug: log if we have diff data for Edit tool
307
+ if (toolResult.tool_name === 'Edit' && toolResult.metadata?.diff) {
308
+ onDebugMessage(`Edit tool has diff metadata (${toolResult.metadata.diff.length} chars)`);
309
+ // Diff is shown inline by StreamDisplay during streaming
310
+ // History refresh at end syncs from orchestrator
311
+ }
312
+ setToolCalls(prev => prev.map(tc => {
313
+ if (tc.callId === resultCallId) {
314
+ return {
315
+ ...tc,
316
+ status: toolResult.is_error ? ToolCallStatus.Error : ToolCallStatus.Success,
317
+ resultDisplay,
318
+ };
319
+ }
320
+ return tc;
321
+ }));
322
+ // Update corresponding stream event with result
323
+ const eventToUpdate = streamEventsRef.current.find(e => e.type === StreamEventType.ToolCall && e.toolCall?.callId === resultCallId);
324
+ if (eventToUpdate) {
325
+ updateStreamEvent(eventToUpdate.id, {
326
+ toolCall: {
327
+ ...eventToUpdate.toolCall,
328
+ status: toolResult.is_error ? ToolCallStatus.Error : ToolCallStatus.Success,
329
+ resultDisplay,
330
+ },
331
+ });
332
+ }
333
+ }
334
+ }
335
+ break;
336
+ case 'turn_summary':
337
+ if (chunk.data) {
338
+ const { summary, prediction } = chunk.data;
339
+ if (summary)
340
+ setTurnSummary(summary);
341
+ if (prediction)
342
+ setNextActionPrediction(prediction);
343
+ onDebugMessage(`Turn summary: ${summary || '(none)'} | Prediction: ${prediction || '(none)'}`);
344
+ }
345
+ break;
346
+ case 'message_stop':
347
+ // Stream complete - finalize any open thinking block
348
+ if (accumulatedThinking.current && !thought?.isComplete) {
349
+ updateThinkingState(accumulatedThinking.current, true, accumulatedThinkingBlocks);
350
+ }
351
+ // Capture usage data from orchestrator for turn summary display
352
+ if (chunk.data?.usage) {
353
+ setTurnUsage(chunk.data.usage);
354
+ }
355
+ break;
356
+ }
357
+ }, [updatePendingHistoryItem, onDebugMessage, updateThinkingState, thought?.isComplete, addStreamEvent, updateStreamEvent]);
358
+ /**
359
+ * Submit a query to the orchestrator
360
+ */
361
+ const submitQuery = useCallback(async (userInput, options = {}) => {
362
+ if (!orchestratorClient) {
363
+ setInitError('Orchestrator not initialized');
364
+ return;
365
+ }
366
+ if (streamingState !== StreamingState.Idle) {
367
+ onDebugMessage('Cannot submit while streaming');
368
+ return;
369
+ }
370
+ const trimmedInput = userInput.trim();
371
+ if (!trimmedInput)
372
+ return;
373
+ // Check for slash commands
374
+ let effectiveInput = trimmedInput;
375
+ if (trimmedInput.startsWith('/')) {
376
+ const result = await handleSlashCommand(trimmedInput);
377
+ if (result !== false) {
378
+ if (result && result.type === 'submit_prompt' && typeof result.content === 'string') {
379
+ effectiveInput = result.content;
380
+ }
381
+ else {
382
+ return;
383
+ }
384
+ }
385
+ }
386
+ // Generate query ID for tracking
387
+ const queryId = `query-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
388
+ activeQueryIdRef.current = queryId;
389
+ // Before starting new query, save any pending response to history
390
+ // This handles the case where previous response had tool calls and text was kept pending
391
+ if (pendingHistoryItemRef.current) {
392
+ const pending = pendingHistoryItemRef.current;
393
+ if (pending.modelContent) {
394
+ addItem({
395
+ type: MessageType.Model,
396
+ modelContent: pending.modelContent,
397
+ thought: pending.thought,
398
+ }, Date.now());
399
+ }
400
+ }
401
+ // Start streaming - clear all pending state
402
+ setStreamingState(StreamingState.Streaming);
403
+ setStreamStartTime(Date.now());
404
+ updatePendingHistoryItem(null);
405
+ setThought(null);
406
+ setToolCalls([]);
407
+ setToolInputArgs(new Map());
408
+ setStreamEvents([]);
409
+ streamEventsRef.current = [];
410
+ setTurnSummary(null);
411
+ setNextActionPrediction(null);
412
+ setTurnUsage(null);
413
+ turnCancelledRef.current = false;
414
+ abortControllerRef.current = new AbortController();
415
+ currentThinkingBlockIdRef.current = null;
416
+ // Accumulators for streaming content
417
+ const accumulatedText = { current: '' };
418
+ const accumulatedThinking = { current: '' };
419
+ const accumulatedThinkingBlocks = { current: [] };
420
+ try {
421
+ // Add user message to stream events FIRST (before any model response)
422
+ // This shows the user's input immediately without refreshing history
423
+ addStreamEvent({
424
+ type: StreamEventType.UserMessage,
425
+ userMessage: effectiveInput,
426
+ });
427
+ // Stream message through orchestrator
428
+ const stream = orchestratorClient.streamMessage(effectiveInput, {
429
+ model: options.model,
430
+ reasoningEffort: options.reasoningEffort,
431
+ prefillProvenance: options.prefillProvenance,
432
+ });
433
+ // Process chunks through React state (pure Ink rendering, no stdout)
434
+ // NOTE: We do NOT refresh history during streaming to avoid scroll reset
435
+ // The user message is shown via StreamDisplay's accumulated content
436
+ // History is refreshed ONLY after streaming completes
437
+ for await (const chunk of stream) {
438
+ // Check for abort
439
+ if (abortControllerRef.current?.signal.aborted || turnCancelledRef.current) {
440
+ onDebugMessage('Stream aborted by user');
441
+ break;
442
+ }
443
+ // Check if this is still the active query
444
+ if (activeQueryIdRef.current !== queryId) {
445
+ onDebugMessage('Query superseded by newer query');
446
+ break;
447
+ }
448
+ // Process chunk through React state - updates streamEvents for Ink rendering
449
+ processStreamChunk(chunk, accumulatedText, accumulatedThinking, accumulatedThinkingBlocks);
450
+ }
451
+ // Refresh UI from orchestrator's canonical history
452
+ // The orchestrator already has the complete message with all content blocks
453
+ // Just trigger a refresh - orchestrator is the single source of truth
454
+ if (refreshHistory) {
455
+ refreshHistory();
456
+ onDebugMessage(`History refreshed from orchestrator`);
457
+ }
458
+ }
459
+ catch (error) {
460
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
461
+ onDebugMessage(`Stream error: ${errorMessage}`);
462
+ // Add error message to history
463
+ addItem({
464
+ type: MessageType.Error,
465
+ errorContent: errorMessage,
466
+ }, Date.now());
467
+ }
468
+ finally {
469
+ // Clean up
470
+ setStreamingState(StreamingState.Idle);
471
+ updatePendingHistoryItem(null);
472
+ abortControllerRef.current = null;
473
+ activeQueryIdRef.current = null;
474
+ }
475
+ }, [
476
+ orchestratorClient,
477
+ streamingState,
478
+ handleSlashCommand,
479
+ addItem,
480
+ processStreamChunk,
481
+ onDebugMessage,
482
+ updatePendingHistoryItem,
483
+ ]);
484
+ // Compute pending history items for UI
485
+ const pendingHistoryItems = useMemo(() => {
486
+ const items = [];
487
+ if (pendingHistoryItemRef.current) {
488
+ items.push(pendingHistoryItemRef.current);
489
+ }
490
+ return items;
491
+ }, [pendingHistoryItemRef.current]);
492
+ // Compute last output time
493
+ const lastOutputTime = Math.max(lastToolOutputTime, lastShellOutputTime);
494
+ return {
495
+ streamingState,
496
+ submitQuery,
497
+ initError,
498
+ pendingHistoryItems,
499
+ thought,
500
+ cancelOngoingRequest,
501
+ pendingToolCalls: toolCalls,
502
+ pendingToolInputArgs: toolInputArgs,
503
+ handleApprovalModeChange,
504
+ activePtyId,
505
+ loopDetectionConfirmationRequest,
506
+ lastOutputTime,
507
+ // New: interleaved stream events for display
508
+ streamEvents,
509
+ // Turn summary & prediction (post-turn helper model output)
510
+ turnSummary,
511
+ nextActionPrediction,
512
+ // Turn usage from orchestrator (set on message_stop)
513
+ turnUsage,
514
+ // Streaming timer
515
+ streamStartTime,
516
+ };
517
+ };
518
+ //# sourceMappingURL=useCortexStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCortexStream.js","sourceRoot":"","sources":["../../../src/ink-ui/hooks/useCortexStream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export declare const ENABLE_FOCUS_REPORTING = "\u001B[?1004h";
7
+ export declare const DISABLE_FOCUS_REPORTING = "\u001B[?1004l";
8
+ export declare const FOCUS_IN = "\u001B[I";
9
+ export declare const FOCUS_OUT = "\u001B[O";
10
+ export declare const useFocus: () => boolean;
11
+ //# sourceMappingURL=useFocus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFocus.d.ts","sourceRoot":"","sources":["../../../src/ink-ui/hooks/useFocus.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,eAAO,MAAM,sBAAsB,kBAAgB,CAAC;AACpD,eAAO,MAAM,uBAAuB,kBAAgB,CAAC;AAGrD,eAAO,MAAM,QAAQ,aAAW,CAAC;AACjC,eAAO,MAAM,SAAS,aAAW,CAAC;AAElC,eAAO,MAAM,QAAQ,eA2CpB,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { useStdin, useStdout } from 'ink';
7
+ import { useEffect, useState } from 'react';
8
+ import { useKeypress } from './useKeypress.js';
9
+ // ANSI escape codes to enable/disable terminal focus reporting
10
+ export const ENABLE_FOCUS_REPORTING = '\x1b[?1004h';
11
+ export const DISABLE_FOCUS_REPORTING = '\x1b[?1004l';
12
+ // ANSI escape codes for focus events
13
+ export const FOCUS_IN = '\x1b[I';
14
+ export const FOCUS_OUT = '\x1b[O';
15
+ export const useFocus = () => {
16
+ const { stdin } = useStdin();
17
+ const { stdout } = useStdout();
18
+ const [isFocused, setIsFocused] = useState(true);
19
+ useEffect(() => {
20
+ const handleData = (data) => {
21
+ const sequence = data.toString();
22
+ const lastFocusIn = sequence.lastIndexOf(FOCUS_IN);
23
+ const lastFocusOut = sequence.lastIndexOf(FOCUS_OUT);
24
+ if (lastFocusIn > lastFocusOut) {
25
+ setIsFocused(true);
26
+ }
27
+ else if (lastFocusOut > lastFocusIn) {
28
+ setIsFocused(false);
29
+ }
30
+ };
31
+ // Enable focus reporting
32
+ stdout?.write(ENABLE_FOCUS_REPORTING);
33
+ stdin?.on('data', handleData);
34
+ return () => {
35
+ // Disable focus reporting on cleanup
36
+ stdout?.write(DISABLE_FOCUS_REPORTING);
37
+ stdin?.removeListener('data', handleData);
38
+ };
39
+ }, [stdin, stdout]);
40
+ useKeypress((_) => {
41
+ if (!isFocused) {
42
+ // If the user has typed a key, and we cannot possibly be focused out.
43
+ // This is a workaround for some tmux use cases. It is still useful to
44
+ // listen for the true FOCUS_IN event as well as that will update the
45
+ // focus state earlier than waiting for a keypress.
46
+ setIsFocused(true);
47
+ }
48
+ }, { isActive: true });
49
+ return isFocused;
50
+ };
51
+ //# sourceMappingURL=useFocus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFocus.js","sourceRoot":"","sources":["../../../src/ink-ui/hooks/useFocus.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,+DAA+D;AAC/D,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAAC;AACpD,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAAC;AAErD,qCAAqC;AACrC,MAAM,CAAC,MAAM,QAAQ,GAAG,QAAQ,CAAC;AACjC,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAC;AAElC,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,EAAE;IAC3B,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAC/B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEjD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjC,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAErD,IAAI,WAAW,GAAG,YAAY,EAAE,CAAC;gBAC/B,YAAY,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;iBAAM,IAAI,YAAY,GAAG,WAAW,EAAE,CAAC;gBACtC,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC,CAAC;QAEF,yBAAyB;QACzB,MAAM,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACtC,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAE9B,OAAO,GAAG,EAAE;YACV,qCAAqC;YACrC,MAAM,EAAE,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACvC,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC5C,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAEpB,WAAW,CACT,CAAC,CAAC,EAAE,EAAE;QACJ,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,sEAAsE;YACtE,sEAAsE;YACtE,qEAAqE;YACrE,mDAAmD;YACnD,YAAY,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB,CAAC;IAEF,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * useHistoryManager - Manages conversation history for the UI
3
+ *
4
+ * Simplified version for Cortex that doesn't depend on @google/gemini-cli-core.
5
+ */
6
+ import type { HistoryItem, HistoryItemWithoutId } from '../cortex-types.js';
7
+ type HistoryItemUpdater = (prevItem: HistoryItem) => Partial<Omit<HistoryItem, 'id'>>;
8
+ export interface UseHistoryManagerReturn {
9
+ history: HistoryItem[];
10
+ addItem: (itemData: HistoryItemWithoutId, baseTimestamp: number, isResuming?: boolean) => string;
11
+ updateItem: (id: string, updates: Partial<Omit<HistoryItem, 'id'>> | HistoryItemUpdater) => void;
12
+ clearHistory: () => void;
13
+ loadHistory: (newHistory: HistoryItem[]) => void;
14
+ }
15
+ /**
16
+ * Custom hook to manage the chat history state.
17
+ *
18
+ * Encapsulates the history array, message ID generation, adding items,
19
+ * updating items, and clearing the history.
20
+ */
21
+ export declare function useHistory(): UseHistoryManagerReturn;
22
+ export {};
23
+ //# sourceMappingURL=useHistoryManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHistoryManager.d.ts","sourceRoot":"","sources":["../../../src/ink-ui/hooks/useHistoryManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG5E,KAAK,kBAAkB,GAAG,CACxB,QAAQ,EAAE,WAAW,KAClB,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;AAEtC,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,EAAE,CACP,QAAQ,EAAE,oBAAoB,EAC9B,aAAa,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,OAAO,KACjB,MAAM,CAAC;IACZ,UAAU,EAAE,CACV,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,GAAG,kBAAkB,KAC3D,IAAI,CAAC;IACV,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;CAClD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,uBAAuB,CA4EpD"}