@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,516 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Nexus Cortex Unified Launcher
4
+ *
5
+ * Starts server as child process and launches CLI
6
+ * Server shuts down when CLI exits (Ctrl+C)
7
+ *
8
+ * Usage:
9
+ * cortex # Normal mode
10
+ * cortex --dev # Dev mode with hot reload
11
+ * cortex [command] # Forward to CLI
12
+ */
13
+
14
+ import { spawn } from 'child_process';
15
+ import { fileURLToPath } from 'url';
16
+ import { dirname, join } from 'path';
17
+ import { existsSync, realpathSync } from 'fs';
18
+ import http from 'http';
19
+ import { config } from 'dotenv';
20
+
21
+ const __filename = fileURLToPath(import.meta.url);
22
+ // Resolve symlinks to get actual path (important for npm link)
23
+ const __dirname = dirname(realpathSync(__filename));
24
+
25
+ // Paths - resolved from actual location, not symlink
26
+ const CLI_DIR = join(__dirname, '..');
27
+ const SERVER_DIR = join(CLI_DIR, '..', 'server');
28
+ const PKG_ROOT = join(CLI_DIR, '..', '..');
29
+
30
+ // Anchor the install root so .cortex/ config (agents, MCP, etc.) is discoverable
31
+ // regardless of the cwd the user launches from. Honors a pre-set CORTEX_ROOT.
32
+ // Spawned children inherit this via process.env.
33
+ process.env.CORTEX_ROOT = process.env.CORTEX_ROOT || PKG_ROOT;
34
+
35
+ // Load .env: cwd first (user's project), then package root (dev/monorepo).
36
+ // dotenv's default is "first wins" — cwd values take priority.
37
+ const cwdEnv = join(process.cwd(), '.env');
38
+ const pkgEnv = join(PKG_ROOT, '.env');
39
+ const cwdEnvLocal = join(process.cwd(), '.env.local');
40
+ const pkgEnvLocal = join(PKG_ROOT, '.env.local');
41
+
42
+ if (existsSync(cwdEnv)) config({ path: cwdEnv, quiet: true });
43
+ if (existsSync(pkgEnv)) config({ path: pkgEnv, quiet: true });
44
+ if (existsSync(cwdEnvLocal)) config({ path: cwdEnvLocal, override: true, quiet: true });
45
+ if (existsSync(pkgEnvLocal)) config({ path: pkgEnvLocal, override: true, quiet: true });
46
+
47
+ // Parse arguments
48
+ const args = process.argv.slice(2);
49
+ const isDevMode = args.includes('--dev');
50
+
51
+ // Parse --server and --prompt flags
52
+ let serverMode = false;
53
+ let serverUrl = null;
54
+ let promptArg = null;
55
+ let cliArgs = [];
56
+
57
+ for (let i = 0; i < args.length; i++) {
58
+ const arg = args[i];
59
+ if (arg === '--server') {
60
+ serverMode = true;
61
+ // Check if next arg is a URL
62
+ if (i + 1 < args.length && args[i + 1].startsWith('http')) {
63
+ serverUrl = args[i + 1];
64
+ i++; // Skip the URL arg
65
+ }
66
+ } else if (arg === '--prompt' || arg === '-P') {
67
+ if (i + 1 < args.length) {
68
+ promptArg = args[i + 1];
69
+ i++; // Skip the prompt value
70
+ }
71
+ } else if (arg !== '--dev') {
72
+ cliArgs.push(arg);
73
+ }
74
+ }
75
+
76
+ // Configuration
77
+ const PORT = process.env.PORT || 4000;
78
+ const DEFAULT_SERVER_URL = `http://localhost:${PORT}`;
79
+
80
+ // Determine mode
81
+ const mode = serverMode ? 'server' : 'direct';
82
+ const finalServerUrl = serverUrl || DEFAULT_SERVER_URL;
83
+
84
+ // Colors and ANSI codes
85
+ const colors = {
86
+ reset: '\x1b[0m',
87
+ cyan: '\x1b[36m',
88
+ green: '\x1b[32m',
89
+ yellow: '\x1b[33m',
90
+ red: '\x1b[31m',
91
+ magenta: '\x1b[35m',
92
+ dim: '\x1b[2m',
93
+ bold: '\x1b[1m',
94
+ };
95
+
96
+ function log(message, color = 'reset') {
97
+ console.log(`${colors[color]}${message}${colors.reset}`);
98
+ }
99
+
100
+ /**
101
+ * Reset terminal to clean state before writing shutdown messages
102
+ *
103
+ * The CLI uses cursor save/restore for the input frame, which can leave
104
+ * the terminal in a state where writes go to the saved position (top of screen).
105
+ * Clear the screen entirely to avoid interleaving with CLI output.
106
+ */
107
+ function resetTerminal() {
108
+ process.stdout.write(
109
+ '\x1b[?25h' + // Show cursor
110
+ '\x1b[0m' + // Reset text attributes
111
+ '\x1b[r' + // Reset scroll region to full screen
112
+ '\x1b[2J' + // Clear entire screen
113
+ '\x1b[H' + // Move cursor to home position (top-left)
114
+ '\n' // Add spacing
115
+ );
116
+ }
117
+
118
+ // Track child processes
119
+ let serverProcess = null;
120
+ let cliProcess = null;
121
+
122
+ /**
123
+ * Graceful shutdown handler
124
+ */
125
+ function setupShutdownHandler() {
126
+ let shuttingDown = false;
127
+
128
+ const shutdown = (signal) => {
129
+ // Prevent multiple shutdown attempts
130
+ if (shuttingDown) return;
131
+ shuttingDown = true;
132
+
133
+ // Don't print anything here - let the CLI clean up its own terminal state
134
+ // The 'exit' handler on cliProcess will print the exit message
135
+
136
+ // Kill CLI (it will clean up its own terminal)
137
+ if (cliProcess && !cliProcess.killed) {
138
+ cliProcess.kill('SIGTERM');
139
+ }
140
+
141
+ // Kill server
142
+ if (serverProcess && !serverProcess.killed) {
143
+ serverProcess.kill('SIGTERM');
144
+
145
+ // Force kill after 3 seconds if still running
146
+ setTimeout(() => {
147
+ if (serverProcess && !serverProcess.killed) {
148
+ serverProcess.kill('SIGKILL');
149
+ }
150
+ }, 3000);
151
+ }
152
+
153
+ // Exit after brief delay to let processes clean up
154
+ setTimeout(() => {
155
+ process.exit(0);
156
+ }, 500);
157
+ };
158
+
159
+ // Handle Ctrl+C and termination signals
160
+ process.on('SIGINT', () => shutdown('SIGINT'));
161
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
162
+
163
+ // Handle CLI exit
164
+ process.on('exit', () => {
165
+ if (serverProcess && !serverProcess.killed) {
166
+ serverProcess.kill('SIGKILL');
167
+ }
168
+ });
169
+ }
170
+
171
+ /**
172
+ * Check if server is running
173
+ */
174
+ async function isServerRunning() {
175
+ return new Promise((resolve) => {
176
+ const req = http.get(`${finalServerUrl}/health`, (res) => {
177
+ resolve(res.statusCode === 200);
178
+ });
179
+
180
+ req.on('error', () => resolve(false));
181
+ req.setTimeout(1000, () => {
182
+ req.destroy();
183
+ resolve(false);
184
+ });
185
+ });
186
+ }
187
+
188
+ /**
189
+ * Wait for server to be ready
190
+ */
191
+ async function waitForServer(maxAttempts = 30) {
192
+ for (let i = 0; i < maxAttempts; i++) {
193
+ if (await isServerRunning()) {
194
+ return true;
195
+ }
196
+ await new Promise(resolve => setTimeout(resolve, 1000));
197
+ }
198
+ return false;
199
+ }
200
+
201
+ /**
202
+ * Start server in production mode
203
+ */
204
+ async function startServerProduction() {
205
+ log('[INIT] Starting server...', 'cyan');
206
+
207
+ const serverEntry = join(SERVER_DIR, 'dist', 'index.js');
208
+ if (!existsSync(serverEntry)) {
209
+ log('[ERROR]Server not built. Run: cd packages/server && npm run build', 'red');
210
+ process.exit(1);
211
+ }
212
+
213
+ // Start server as CHILD process (not detached)
214
+ serverProcess = spawn('node', [serverEntry], {
215
+ cwd: SERVER_DIR,
216
+ env: {
217
+ ...process.env,
218
+ PORT: String(PORT),
219
+ },
220
+ stdio: ['ignore', 'pipe', 'pipe'], // Capture output
221
+ });
222
+
223
+ // Log server output with prefix
224
+ serverProcess.stdout?.on('data', (data) => {
225
+ const lines = data.toString().trim().split('\n');
226
+ lines.forEach(line => {
227
+ if (line) log(` [server] ${line}`, 'dim');
228
+ });
229
+ });
230
+
231
+ serverProcess.stderr?.on('data', (data) => {
232
+ const lines = data.toString().trim().split('\n');
233
+ lines.forEach(line => {
234
+ if (line) log(` [server] ${line}`, 'red');
235
+ });
236
+ });
237
+
238
+ serverProcess.on('exit', (code) => {
239
+ if (code !== 0 && code !== null) {
240
+ log(`[ERROR]Server exited with code ${code}`, 'red');
241
+ process.exit(code);
242
+ }
243
+ });
244
+
245
+ // Wait for server to be ready
246
+ const ready = await waitForServer();
247
+ if (!ready) {
248
+ log('[ERROR]Server failed to start', 'red');
249
+ process.exit(1);
250
+ }
251
+
252
+ log('[OK]Server ready', 'green');
253
+ }
254
+
255
+ /**
256
+ * Start server in dev mode with hot reload
257
+ */
258
+ async function startServerDev() {
259
+ log('[INIT] Starting server in DEV MODE (hot reload enabled)...', 'magenta');
260
+
261
+ // Check if tsx is available
262
+ const serverSrc = join(SERVER_DIR, 'src', 'index.ts');
263
+ if (!existsSync(serverSrc)) {
264
+ log('[ERROR]Server source not found', 'red');
265
+ process.exit(1);
266
+ }
267
+
268
+ // Start server with tsx watch
269
+ serverProcess = spawn('npx', ['tsx', 'watch', serverSrc], {
270
+ cwd: SERVER_DIR,
271
+ env: {
272
+ ...process.env,
273
+ PORT: String(PORT),
274
+ DEBUG: 'true',
275
+ NODE_ENV: 'development',
276
+ },
277
+ stdio: ['ignore', 'pipe', 'pipe'],
278
+ });
279
+
280
+ // Log server output
281
+ serverProcess.stdout?.on('data', (data) => {
282
+ const lines = data.toString().trim().split('\n');
283
+ lines.forEach(line => {
284
+ if (line) log(` ${colors.magenta}[SERVER]${colors.reset} ${line}`, 'dim');
285
+ });
286
+ });
287
+
288
+ serverProcess.stderr?.on('data', (data) => {
289
+ const lines = data.toString().trim().split('\n');
290
+ lines.forEach(line => {
291
+ if (line) log(` ${colors.magenta}[SERVER]${colors.reset} ${line}`, 'red');
292
+ });
293
+ });
294
+
295
+ serverProcess.on('exit', (code) => {
296
+ if (code !== 0 && code !== null) {
297
+ log(`[ERROR]Server exited with code ${code}`, 'red');
298
+ process.exit(code);
299
+ }
300
+ });
301
+
302
+ // Wait for server
303
+ const ready = await waitForServer();
304
+ if (!ready) {
305
+ log('[ERROR]Server failed to start', 'red');
306
+ process.exit(1);
307
+ }
308
+
309
+ log('[OK]Server ready (watching for changes)', 'green');
310
+ }
311
+
312
+ /**
313
+ * Create a new session on the server
314
+ */
315
+ async function createNewSession() {
316
+ return new Promise((resolve, reject) => {
317
+ const postData = JSON.stringify({
318
+ modelId: process.env.DEFAULT_MODEL_ID,
319
+ projectPath: process.cwd()
320
+ });
321
+
322
+ const options = {
323
+ hostname: 'localhost',
324
+ port: PORT,
325
+ path: '/sessions/new',
326
+ method: 'POST',
327
+ headers: {
328
+ 'Content-Type': 'application/json',
329
+ 'Content-Length': Buffer.byteLength(postData)
330
+ },
331
+ timeout: 5000
332
+ };
333
+
334
+ const req = http.request(options, (res) => {
335
+ let data = '';
336
+ res.on('data', (chunk) => { data += chunk; });
337
+ res.on('end', () => {
338
+ try {
339
+ const response = JSON.parse(data);
340
+ if (response.success) {
341
+ log(`[OK]New session created: ${response.sessionId}`, 'green');
342
+ log(` Model: ${response.model.name} (${response.model.contextWindow} tokens)`, 'dim');
343
+ resolve(response);
344
+ } else {
345
+ reject(new Error(response.error?.message || 'Failed to create session'));
346
+ }
347
+ } catch (e) {
348
+ reject(new Error(`Invalid response from server: ${data}`));
349
+ }
350
+ });
351
+ });
352
+
353
+ req.on('error', (err) => {
354
+ reject(new Error(`Failed to create session: ${err.message}`));
355
+ });
356
+
357
+ req.on('timeout', () => {
358
+ req.destroy();
359
+ reject(new Error('Session creation timed out'));
360
+ });
361
+
362
+ req.write(postData);
363
+ req.end();
364
+ });
365
+ }
366
+
367
+ /**
368
+ * Launch CLI
369
+ */
370
+ async function launchCLI() {
371
+ if (isDevMode) {
372
+ const modeLabel = mode === 'direct' ? 'DIRECT MODE' : 'SERVER MODE';
373
+ log(`\n[LAUNCH] CLI (${modeLabel} DEV)`, 'cyan');
374
+ if (mode === 'direct') {
375
+ log(' Using core library directly', 'dim');
376
+ } else {
377
+ log(` Connecting to: ${finalServerUrl}`, 'dim');
378
+ }
379
+ }
380
+
381
+ const cliEntry = isDevMode
382
+ ? join(CLI_DIR, 'src', 'index.ts')
383
+ : join(CLI_DIR, 'dist', 'index.js');
384
+
385
+ if (!existsSync(cliEntry)) {
386
+ const hint = isDevMode
387
+ ? 'Source files missing'
388
+ : 'CLI not built. Run: cd packages/cli && npm run build';
389
+ log(`[ERROR]${hint}`, 'red');
390
+ process.exit(1);
391
+ }
392
+
393
+ // Build command args
394
+ const command = isDevMode ? 'npx' : 'node';
395
+ const baseArgs = isDevMode ? ['tsx', cliEntry] : [cliEntry];
396
+
397
+ // Add command (default to chat, or 'message' if --prompt was provided)
398
+ let cliCommand;
399
+ if (promptArg && cliArgs.length === 0) {
400
+ cliCommand = ['message', promptArg];
401
+ } else {
402
+ cliCommand = cliArgs.length > 0 ? cliArgs : ['chat'];
403
+ }
404
+ const cmdArgs = [...baseArgs, ...cliCommand];
405
+
406
+ // Add --server flag if in server mode
407
+ if (mode === 'server') {
408
+ cmdArgs.push('--server', finalServerUrl);
409
+ }
410
+
411
+ // Add --debug in dev mode
412
+ if (isDevMode && !cmdArgs.includes('--debug')) {
413
+ cmdArgs.push('--debug');
414
+ }
415
+
416
+ // Start CLI
417
+ // Set CORTEX_* env for the spawned CLI process
418
+ cliProcess = spawn(command, cmdArgs, {
419
+ stdio: 'inherit',
420
+ env: {
421
+ ...process.env,
422
+ CORTEX_MODE: mode,
423
+ CORTEX_SERVER_URL: mode === 'server' ? finalServerUrl : '',
424
+ CORTEX_ROOT: PKG_ROOT,
425
+ NODE_ENV: isDevMode ? 'development' : 'production',
426
+ },
427
+ });
428
+
429
+ cliProcess.on('exit', (code) => {
430
+ // Brief delay to let CLI finish any final terminal cleanup
431
+ setTimeout(() => {
432
+ // Reset terminal state before writing exit messages
433
+ resetTerminal();
434
+
435
+ // CLI exited, shut down server
436
+ log('[OK] Session ended', 'dim');
437
+ if (serverProcess && !serverProcess.killed) {
438
+ serverProcess.kill('SIGTERM');
439
+ }
440
+ setTimeout(() => process.exit(code || 0), 300);
441
+ }, 100);
442
+ });
443
+ }
444
+
445
+ /**
446
+ * Main launcher
447
+ */
448
+ async function main() {
449
+ // Setup shutdown handlers
450
+ setupShutdownHandler();
451
+
452
+ // Banner (verbose in dev mode only)
453
+ if (isDevMode) {
454
+ const modeStr = mode === 'direct' ? 'Direct Core' : 'Server';
455
+ log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━', 'cyan');
456
+ log(` Nexus Cortex - ${modeStr} DEV`, mode === 'direct' ? 'cyan' : 'magenta');
457
+ log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n', 'cyan');
458
+
459
+ if (existsSync(cwdEnv)) {
460
+ log(`[OK] Configuration loaded from: ${cwdEnv}`, 'dim');
461
+ } else if (existsSync(pkgEnv)) {
462
+ log(`[OK] Configuration loaded from: ${pkgEnv}`, 'dim');
463
+ } else {
464
+ log(`[WARN] No .env file found`, 'yellow');
465
+ }
466
+ } else if (!existsSync(cwdEnv) && !existsSync(pkgEnv)) {
467
+ log(`[WARN] No .env file found`, 'yellow');
468
+ }
469
+
470
+ // Server mode: Start server or connect to remote
471
+ if (mode === 'server') {
472
+ // Check if connecting to remote server
473
+ if (serverUrl) {
474
+ log(`\n[INIT] Connecting to remote server: ${serverUrl}`, 'cyan');
475
+ // No need to start local server
476
+ } else {
477
+ // Check for existing local server
478
+ const alreadyRunning = await isServerRunning();
479
+ if (alreadyRunning) {
480
+ log('[WARN]Server already running (external instance)', 'yellow');
481
+ log(' This launcher will NOT manage that server.', 'dim');
482
+ log(' Stop it with: pkill -f "server/dist/index.js"\n', 'dim');
483
+ } else {
484
+ // Start our managed local server
485
+ if (isDevMode) {
486
+ await startServerDev();
487
+ } else {
488
+ await startServerProduction();
489
+ }
490
+
491
+ // Create a new session
492
+ try {
493
+ log('\n[INIT] Creating new session...', 'cyan');
494
+ await createNewSession();
495
+ } catch (error) {
496
+ log(`[WARN]Warning: ${error.message}`, 'yellow');
497
+ log(' Continuing with existing session...', 'dim');
498
+ }
499
+ }
500
+ }
501
+ } else if (isDevMode) {
502
+ log('\n[INIT] Direct mode: core library loaded on CLI startup', 'cyan');
503
+ }
504
+
505
+ // Launch CLI
506
+ await launchCLI();
507
+ }
508
+
509
+ // Run
510
+ main().catch((err) => {
511
+ log(`\n[ERROR]Error: ${err.message}`, 'red');
512
+ if (serverProcess && !serverProcess.killed) {
513
+ serverProcess.kill('SIGKILL');
514
+ }
515
+ process.exit(1);
516
+ });
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Interactive Agent Menu
3
+ *
4
+ * Ink-based terminal UI for managing Task Agent profiles.
5
+ * Provides list view, navigation, CRUD operations, and AI-powered agent creation.
6
+ */
7
+ import React from 'react';
8
+ import { AgentStore } from '@nexus-cortex/core';
9
+ /**
10
+ * Conversation message for multi-turn agent creation
11
+ */
12
+ export interface ConversationMessage {
13
+ role: 'user' | 'assistant';
14
+ content: string;
15
+ }
16
+ /**
17
+ * Generated agent profile (from conversational creator)
18
+ */
19
+ export interface GeneratedAgentProfile {
20
+ name: string;
21
+ description: string;
22
+ tools: string[] | 'all';
23
+ systemPrompt: string;
24
+ }
25
+ /**
26
+ * Model info from registry
27
+ */
28
+ export interface ModelInfo {
29
+ id: string;
30
+ displayName?: string;
31
+ owned_by?: string;
32
+ contextWindow?: number;
33
+ inputCostPer1M?: number;
34
+ outputCostPer1M?: number;
35
+ supportsTools?: boolean;
36
+ reasoning?: {
37
+ supported: boolean;
38
+ };
39
+ }
40
+ /**
41
+ * Model listing function type
42
+ */
43
+ export type ModelListFn = () => Promise<ModelInfo[]>;
44
+ /**
45
+ * One-shot agent profile generator function type (legacy)
46
+ */
47
+ export type AgentProfileGenerator = (description: string, model: string) => Promise<GeneratedAgentProfile>;
48
+ /**
49
+ * Conversational response from AI during agent creation
50
+ */
51
+ export interface ConversationalAgentResponse {
52
+ /** Response type */
53
+ type: 'question' | 'profile';
54
+ /** Clarifying question to ask the user */
55
+ question?: string;
56
+ /** Final generated profile */
57
+ profile?: GeneratedAgentProfile;
58
+ }
59
+ /**
60
+ * Conversational agent creator function type
61
+ *
62
+ * Takes the full conversation history and returns either:
63
+ * - A clarifying question (type: 'question')
64
+ * - A final profile (type: 'profile')
65
+ */
66
+ export type ConversationalAgentCreator = (messages: ConversationMessage[], model: string) => Promise<ConversationalAgentResponse>;
67
+ /**
68
+ * Edit assistant function type
69
+ * Takes current content and edit request, returns updated content
70
+ */
71
+ export type EditAssistantFn = (currentContent: string, editRequest: string, agentName: string) => Promise<{
72
+ content: string;
73
+ summary: string;
74
+ }>;
75
+ /**
76
+ * Props for InteractiveAgentMenu
77
+ */
78
+ export interface InteractiveAgentMenuProps {
79
+ /** Agent store instance */
80
+ store: AgentStore;
81
+ /** Optional initial agent name to select */
82
+ initialAgentName?: string;
83
+ /** Current model ID for inherit option */
84
+ currentModel?: string;
85
+ /** Function to generate agent profile using AI (legacy one-shot) */
86
+ generateAgentProfile?: AgentProfileGenerator;
87
+ /** Function for conversational agent creation with clarifying questions */
88
+ conversationalCreator?: ConversationalAgentCreator;
89
+ /** Function to list available models from registry */
90
+ listModels?: ModelListFn;
91
+ /** Function for AI-assisted editing of existing agents */
92
+ editAssistant?: EditAssistantFn;
93
+ /** Callback when user exits the menu (enables graceful return to CLI) */
94
+ onExit?: () => void;
95
+ }
96
+ /**
97
+ * Interactive Agent Menu Component
98
+ */
99
+ export declare const InteractiveAgentMenu: React.FC<InteractiveAgentMenuProps>;
100
+ //# sourceMappingURL=InteractiveAgentMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InteractiveAgentMenu.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/InteractiveAgentMenu.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAuC,MAAM,OAAO,CAAC;AAK5D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAsBhD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB;AASD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAClC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,KACV,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAEpC;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,oBAAoB;IACpB,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7B,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC;AAED;;;;;;GAMG;AACH,MAAM,MAAM,0BAA0B,GAAG,CACvC,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,KAAK,EAAE,MAAM,KACV,OAAO,CAAC,2BAA2B,CAAC,CAAC;AAE1C;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,CAC5B,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,KACd,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,2BAA2B;IAC3B,KAAK,EAAE,UAAU,CAAC;IAElB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,oEAAoE;IACpE,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAE7C,2EAA2E;IAC3E,qBAAqB,CAAC,EAAE,0BAA0B,CAAC;IAEnD,sDAAsD;IACtD,UAAU,CAAC,EAAE,WAAW,CAAC;IAEzB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,eAAe,CAAC;IAEhC,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CA+/CpE,CAAC"}