dmux 3.2.0 → 3.3.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 (635) hide show
  1. package/dist/DmuxApp.d.ts.map +1 -1
  2. package/dist/DmuxApp.js +221 -1596
  3. package/dist/DmuxApp.js.map +1 -1
  4. package/dist/actions/implementations/closeAction.d.ts +10 -0
  5. package/dist/actions/implementations/closeAction.d.ts.map +1 -0
  6. package/dist/actions/implementations/closeAction.js +197 -0
  7. package/dist/actions/implementations/closeAction.js.map +1 -0
  8. package/dist/actions/implementations/copyPathAction.d.ts +10 -0
  9. package/dist/actions/implementations/copyPathAction.d.ts.map +1 -0
  10. package/dist/actions/implementations/copyPathAction.js +34 -0
  11. package/dist/actions/implementations/copyPathAction.js.map +1 -0
  12. package/dist/actions/implementations/duplicateAction.d.ts +10 -0
  13. package/dist/actions/implementations/duplicateAction.d.ts.map +1 -0
  14. package/dist/actions/implementations/duplicateAction.js +25 -0
  15. package/dist/actions/implementations/duplicateAction.js.map +1 -0
  16. package/dist/actions/implementations/index.d.ts +14 -0
  17. package/dist/actions/implementations/index.d.ts.map +1 -0
  18. package/dist/actions/implementations/index.js +14 -0
  19. package/dist/actions/implementations/index.js.map +1 -0
  20. package/dist/actions/implementations/mergeAction.d.ts +14 -0
  21. package/dist/actions/implementations/mergeAction.d.ts.map +1 -0
  22. package/dist/actions/implementations/mergeAction.js +84 -0
  23. package/dist/actions/implementations/mergeAction.js.map +1 -0
  24. package/dist/actions/implementations/openInEditorAction.d.ts +12 -0
  25. package/dist/actions/implementations/openInEditorAction.d.ts.map +1 -0
  26. package/dist/actions/implementations/openInEditorAction.js +33 -0
  27. package/dist/actions/implementations/openInEditorAction.js.map +1 -0
  28. package/dist/actions/implementations/renameAction.d.ts +13 -0
  29. package/dist/actions/implementations/renameAction.d.ts.map +1 -0
  30. package/dist/actions/implementations/renameAction.js +18 -0
  31. package/dist/actions/implementations/renameAction.js.map +1 -0
  32. package/dist/actions/implementations/toggleAutopilotAction.d.ts +10 -0
  33. package/dist/actions/implementations/toggleAutopilotAction.d.ts.map +1 -0
  34. package/dist/actions/implementations/toggleAutopilotAction.js +33 -0
  35. package/dist/actions/implementations/toggleAutopilotAction.js.map +1 -0
  36. package/dist/actions/implementations/viewAction.d.ts +10 -0
  37. package/dist/actions/implementations/viewAction.d.ts.map +1 -0
  38. package/dist/actions/implementations/viewAction.js +26 -0
  39. package/dist/actions/implementations/viewAction.js.map +1 -0
  40. package/dist/actions/merge/commitMessageHandler.d.ts +27 -0
  41. package/dist/actions/merge/commitMessageHandler.d.ts.map +1 -0
  42. package/dist/actions/merge/commitMessageHandler.js +131 -0
  43. package/dist/actions/merge/commitMessageHandler.js.map +1 -0
  44. package/dist/actions/merge/conflictResolution.d.ts +13 -0
  45. package/dist/actions/merge/conflictResolution.d.ts.map +1 -0
  46. package/dist/actions/merge/conflictResolution.js +134 -0
  47. package/dist/actions/merge/conflictResolution.js.map +1 -0
  48. package/dist/actions/merge/issueHandlers/index.d.ts +11 -0
  49. package/dist/actions/merge/issueHandlers/index.d.ts.map +1 -0
  50. package/dist/actions/merge/issueHandlers/index.js +8 -0
  51. package/dist/actions/merge/issueHandlers/index.js.map +1 -0
  52. package/dist/actions/merge/issueHandlers/mainDirtyHandler.d.ts +13 -0
  53. package/dist/actions/merge/issueHandlers/mainDirtyHandler.d.ts.map +1 -0
  54. package/dist/actions/merge/issueHandlers/mainDirtyHandler.js +72 -0
  55. package/dist/actions/merge/issueHandlers/mainDirtyHandler.js.map +1 -0
  56. package/dist/actions/merge/issueHandlers/mergeConflictHandler.d.ts +13 -0
  57. package/dist/actions/merge/issueHandlers/mergeConflictHandler.d.ts.map +1 -0
  58. package/dist/actions/merge/issueHandlers/mergeConflictHandler.js +52 -0
  59. package/dist/actions/merge/issueHandlers/mergeConflictHandler.js.map +1 -0
  60. package/dist/actions/merge/issueHandlers/nothingToMergeHandler.d.ts +7 -0
  61. package/dist/actions/merge/issueHandlers/nothingToMergeHandler.d.ts.map +1 -0
  62. package/dist/actions/merge/issueHandlers/nothingToMergeHandler.js +12 -0
  63. package/dist/actions/merge/issueHandlers/nothingToMergeHandler.js.map +1 -0
  64. package/dist/actions/merge/issueHandlers/worktreeUncommittedHandler.d.ts +13 -0
  65. package/dist/actions/merge/issueHandlers/worktreeUncommittedHandler.d.ts.map +1 -0
  66. package/dist/actions/merge/issueHandlers/worktreeUncommittedHandler.js +49 -0
  67. package/dist/actions/merge/issueHandlers/worktreeUncommittedHandler.js.map +1 -0
  68. package/dist/actions/merge/mergeExecution.d.ts +22 -0
  69. package/dist/actions/merge/mergeExecution.d.ts.map +1 -0
  70. package/dist/actions/merge/mergeExecution.js +180 -0
  71. package/dist/actions/merge/mergeExecution.js.map +1 -0
  72. package/dist/actions/paneActions.d.ts +3 -40
  73. package/dist/actions/paneActions.d.ts.map +1 -1
  74. package/dist/actions/paneActions.js +4 -1038
  75. package/dist/actions/paneActions.js.map +1 -1
  76. package/dist/actions/types.d.ts +1 -0
  77. package/dist/actions/types.d.ts.map +1 -1
  78. package/dist/actions/types.js.map +1 -1
  79. package/dist/components/{ActionChoiceDialog.d.ts → dialogs/ActionChoiceDialog.d.ts} +1 -1
  80. package/dist/components/dialogs/ActionChoiceDialog.d.ts.map +1 -0
  81. package/dist/components/dialogs/ActionChoiceDialog.js.map +1 -0
  82. package/dist/components/dialogs/ActionConfirmDialog.d.ts.map +1 -0
  83. package/dist/components/dialogs/ActionConfirmDialog.js.map +1 -0
  84. package/dist/components/dialogs/ActionInputDialog.d.ts.map +1 -0
  85. package/dist/components/{ActionInputDialog.js → dialogs/ActionInputDialog.js} +2 -2
  86. package/dist/components/dialogs/ActionInputDialog.js.map +1 -0
  87. package/dist/components/dialogs/ActionProgressDialog.d.ts.map +1 -0
  88. package/dist/components/dialogs/ActionProgressDialog.js.map +1 -0
  89. package/dist/components/dialogs/AgentChoiceDialog.d.ts.map +1 -0
  90. package/dist/components/dialogs/AgentChoiceDialog.js.map +1 -0
  91. package/dist/components/{CloseOptionsDialog.d.ts → dialogs/CloseOptionsDialog.d.ts} +1 -1
  92. package/dist/components/dialogs/CloseOptionsDialog.d.ts.map +1 -0
  93. package/dist/components/dialogs/CloseOptionsDialog.js.map +1 -0
  94. package/dist/components/dialogs/CommandPromptDialog.d.ts.map +1 -0
  95. package/dist/components/{CommandPromptDialog.js → dialogs/CommandPromptDialog.js} +1 -1
  96. package/dist/components/dialogs/CommandPromptDialog.js.map +1 -0
  97. package/dist/components/dialogs/DialogBox.d.ts.map +1 -0
  98. package/dist/components/dialogs/DialogBox.js.map +1 -0
  99. package/dist/components/dialogs/HooksDialog.d.ts.map +1 -0
  100. package/dist/components/dialogs/HooksDialog.js.map +1 -0
  101. package/dist/components/{MergeConfirmationDialog.d.ts → dialogs/MergeConfirmationDialog.d.ts} +1 -1
  102. package/dist/components/dialogs/MergeConfirmationDialog.d.ts.map +1 -0
  103. package/dist/components/dialogs/MergeConfirmationDialog.js.map +1 -0
  104. package/dist/components/{SettingsDialog.d.ts → dialogs/SettingsDialog.d.ts} +1 -1
  105. package/dist/components/dialogs/SettingsDialog.d.ts.map +1 -0
  106. package/dist/components/dialogs/SettingsDialog.js.map +1 -0
  107. package/dist/components/dialogs/UpdateDialog.d.ts.map +1 -0
  108. package/dist/components/dialogs/UpdateDialog.js.map +1 -0
  109. package/dist/components/indicators/CreatingIndicator.d.ts.map +1 -0
  110. package/dist/components/indicators/CreatingIndicator.js.map +1 -0
  111. package/dist/components/indicators/LoadingIndicator.d.ts.map +1 -0
  112. package/dist/components/indicators/LoadingIndicator.js.map +1 -0
  113. package/dist/components/indicators/RunningIndicator.d.ts.map +1 -0
  114. package/dist/components/indicators/RunningIndicator.js.map +1 -0
  115. package/dist/components/indicators/Spinner.d.ts.map +1 -0
  116. package/dist/components/indicators/Spinner.js.map +1 -0
  117. package/dist/components/indicators/UpdatingIndicator.d.ts.map +1 -0
  118. package/dist/components/indicators/UpdatingIndicator.js.map +1 -0
  119. package/dist/components/indicators/index.d.ts +6 -0
  120. package/dist/components/indicators/index.d.ts.map +1 -0
  121. package/dist/components/indicators/index.js +6 -0
  122. package/dist/components/indicators/index.js.map +1 -0
  123. package/dist/components/inputs/CleanTextInput.d.ts.map +1 -0
  124. package/dist/{CleanTextInput.js → components/inputs/CleanTextInput.js} +2 -144
  125. package/dist/components/inputs/CleanTextInput.js.map +1 -0
  126. package/dist/components/inputs/StyledTextInput.d.ts.map +1 -0
  127. package/dist/components/inputs/StyledTextInput.js.map +1 -0
  128. package/dist/components/inputs/index.d.ts +3 -0
  129. package/dist/components/inputs/index.d.ts.map +1 -0
  130. package/dist/components/inputs/index.js +3 -0
  131. package/dist/components/inputs/index.js.map +1 -0
  132. package/dist/components/{KebabMenu.d.ts → panes/KebabMenu.d.ts} +1 -1
  133. package/dist/components/panes/KebabMenu.d.ts.map +1 -0
  134. package/dist/components/panes/KebabMenu.js.map +1 -0
  135. package/dist/components/panes/MergePane.d.ts.map +1 -0
  136. package/dist/{MergePane.js → components/panes/MergePane.js} +1 -1
  137. package/dist/components/panes/MergePane.js.map +1 -0
  138. package/dist/components/{PaneCard.d.ts → panes/PaneCard.d.ts} +1 -1
  139. package/dist/components/panes/PaneCard.d.ts.map +1 -0
  140. package/dist/components/{PaneCard.js → panes/PaneCard.js} +1 -1
  141. package/dist/components/panes/PaneCard.js.map +1 -0
  142. package/dist/components/{PanesGrid.d.ts → panes/PanesGrid.d.ts} +2 -2
  143. package/dist/components/panes/PanesGrid.d.ts.map +1 -0
  144. package/dist/components/{PanesGrid.js → panes/PanesGrid.js} +1 -1
  145. package/dist/components/panes/PanesGrid.js.map +1 -0
  146. package/dist/components/panes/index.d.ts +5 -0
  147. package/dist/components/panes/index.d.ts.map +1 -0
  148. package/dist/components/panes/index.js +5 -0
  149. package/dist/components/panes/index.js.map +1 -0
  150. package/dist/components/popups/agentChoicePopup.d.ts.map +1 -0
  151. package/dist/{popups → components/popups}/agentChoicePopup.js +1 -1
  152. package/dist/components/popups/agentChoicePopup.js.map +1 -0
  153. package/dist/components/popups/choicePopup.d.ts.map +1 -0
  154. package/dist/{popups → components/popups}/choicePopup.js +3 -3
  155. package/dist/components/popups/choicePopup.js.map +1 -0
  156. package/dist/components/popups/config.d.ts.map +1 -0
  157. package/dist/{popups → components/popups}/config.js +1 -1
  158. package/dist/components/popups/config.js.map +1 -0
  159. package/dist/components/popups/confirmPopup.d.ts.map +1 -0
  160. package/dist/{popups → components/popups}/confirmPopup.js +2 -3
  161. package/dist/components/popups/confirmPopup.js.map +1 -0
  162. package/dist/components/popups/hooksPopup.d.ts.map +1 -0
  163. package/dist/{popups → components/popups}/hooksPopup.js +1 -1
  164. package/dist/components/popups/hooksPopup.js.map +1 -0
  165. package/dist/components/popups/inputPopup.d.ts.map +1 -0
  166. package/dist/{popups → components/popups}/inputPopup.js +3 -4
  167. package/dist/components/popups/inputPopup.js.map +1 -0
  168. package/dist/components/popups/kebabMenuPopup.d.ts.map +1 -0
  169. package/dist/{popups → components/popups}/kebabMenuPopup.js +1 -1
  170. package/dist/components/popups/kebabMenuPopup.js.map +1 -0
  171. package/dist/components/popups/logsPopup.d.ts.map +1 -0
  172. package/dist/{popups → components/popups}/logsPopup.js +15 -7
  173. package/dist/components/popups/logsPopup.js.map +1 -0
  174. package/dist/components/popups/mergePopup.d.ts.map +1 -0
  175. package/dist/{popups → components/popups}/mergePopup.js +6 -6
  176. package/dist/components/popups/mergePopup.js.map +1 -0
  177. package/dist/components/popups/newPanePopup.d.ts.map +1 -0
  178. package/dist/{popups → components/popups}/newPanePopup.js +3 -3
  179. package/dist/components/popups/newPanePopup.js.map +1 -0
  180. package/dist/components/popups/progressPopup.d.ts.map +1 -0
  181. package/dist/{popups → components/popups}/progressPopup.js +1 -2
  182. package/dist/components/popups/progressPopup.js.map +1 -0
  183. package/dist/components/popups/remotePopup.d.ts.map +1 -0
  184. package/dist/{popups → components/popups}/remotePopup.js +1 -1
  185. package/dist/components/popups/remotePopup.js.map +1 -0
  186. package/dist/components/popups/settingsPopup.d.ts.map +1 -0
  187. package/dist/{popups → components/popups}/settingsPopup.js +1 -1
  188. package/dist/components/popups/settingsPopup.js.map +1 -0
  189. package/dist/components/popups/shared/FileList.d.ts.map +1 -0
  190. package/dist/components/popups/shared/FileList.js.map +1 -0
  191. package/dist/components/popups/shared/PopupContainer.d.ts.map +1 -0
  192. package/dist/components/popups/shared/PopupContainer.js.map +1 -0
  193. package/dist/components/popups/shared/PopupInputBox.d.ts.map +1 -0
  194. package/dist/components/popups/shared/PopupInputBox.js.map +1 -0
  195. package/dist/components/popups/shared/PopupWrapper.d.ts.map +1 -0
  196. package/dist/components/popups/shared/PopupWrapper.js.map +1 -0
  197. package/dist/components/popups/shared/index.d.ts.map +1 -0
  198. package/dist/components/popups/shared/index.js.map +1 -0
  199. package/dist/components/popups/shortcutsPopup.d.ts.map +1 -0
  200. package/dist/{popups → components/popups}/shortcutsPopup.js +1 -1
  201. package/dist/components/popups/shortcutsPopup.js.map +1 -0
  202. package/dist/components/popups/templates/SimpleInputPopup.d.ts.map +1 -0
  203. package/dist/{popups → components/popups}/templates/SimpleInputPopup.js +2 -2
  204. package/dist/components/popups/templates/SimpleInputPopup.js.map +1 -0
  205. package/dist/components/ui/FileCopyPrompt.d.ts.map +1 -0
  206. package/dist/components/ui/FileCopyPrompt.js.map +1 -0
  207. package/dist/components/ui/FooterHelp.d.ts.map +1 -0
  208. package/dist/components/ui/FooterHelp.js.map +1 -0
  209. package/dist/components/ui/QRCode.d.ts.map +1 -0
  210. package/dist/components/ui/QRCode.js.map +1 -0
  211. package/dist/components/ui/index.d.ts +4 -0
  212. package/dist/components/ui/index.d.ts.map +1 -0
  213. package/dist/components/ui/index.js +4 -0
  214. package/dist/components/ui/index.js.map +1 -0
  215. package/dist/constants/timing.d.ts +22 -0
  216. package/dist/constants/timing.d.ts.map +1 -0
  217. package/dist/constants/timing.js +26 -0
  218. package/dist/constants/timing.js.map +1 -0
  219. package/dist/hooks/useActionSystem.d.ts +5 -4
  220. package/dist/hooks/useActionSystem.d.ts.map +1 -1
  221. package/dist/hooks/useActionSystem.js +120 -114
  222. package/dist/hooks/useActionSystem.js.map +1 -1
  223. package/dist/hooks/useDebugInfo.d.ts +11 -0
  224. package/dist/hooks/useDebugInfo.d.ts.map +1 -0
  225. package/dist/hooks/useDebugInfo.js +34 -0
  226. package/dist/hooks/useDebugInfo.js.map +1 -0
  227. package/dist/hooks/useDialogState.d.ts +22 -0
  228. package/dist/hooks/useDialogState.d.ts.map +1 -0
  229. package/dist/hooks/useDialogState.js +62 -0
  230. package/dist/hooks/useDialogState.js.map +1 -0
  231. package/dist/hooks/useInputHandling.d.ts +60 -0
  232. package/dist/hooks/useInputHandling.d.ts.map +1 -0
  233. package/dist/hooks/useInputHandling.js +280 -0
  234. package/dist/hooks/useInputHandling.js.map +1 -0
  235. package/dist/hooks/useLayoutManagement.d.ts +12 -0
  236. package/dist/hooks/useLayoutManagement.d.ts.map +1 -0
  237. package/dist/hooks/useLayoutManagement.js +58 -0
  238. package/dist/hooks/useLayoutManagement.js.map +1 -0
  239. package/dist/hooks/usePaneCreation.d.ts.map +1 -1
  240. package/dist/hooks/usePaneCreation.js +4 -9
  241. package/dist/hooks/usePaneCreation.js.map +1 -1
  242. package/dist/hooks/usePaneLoading.d.ts +45 -0
  243. package/dist/hooks/usePaneLoading.d.ts.map +1 -0
  244. package/dist/hooks/usePaneLoading.js +188 -0
  245. package/dist/hooks/usePaneLoading.js.map +1 -0
  246. package/dist/hooks/usePaneRunner.d.ts.map +1 -1
  247. package/dist/hooks/usePaneRunner.js +9 -6
  248. package/dist/hooks/usePaneRunner.js.map +1 -1
  249. package/dist/hooks/usePaneSync.d.ts +34 -0
  250. package/dist/hooks/usePaneSync.d.ts.map +1 -0
  251. package/dist/hooks/usePaneSync.js +182 -0
  252. package/dist/hooks/usePaneSync.js.map +1 -0
  253. package/dist/hooks/usePanes.d.ts.map +1 -1
  254. package/dist/hooks/usePanes.js +55 -405
  255. package/dist/hooks/usePanes.js.map +1 -1
  256. package/dist/hooks/useServices.d.ts +24 -0
  257. package/dist/hooks/useServices.d.ts.map +1 -0
  258. package/dist/hooks/useServices.js +39 -0
  259. package/dist/hooks/useServices.js.map +1 -0
  260. package/dist/hooks/useShellDetection.d.ts +10 -0
  261. package/dist/hooks/useShellDetection.d.ts.map +1 -0
  262. package/dist/hooks/useShellDetection.js +53 -0
  263. package/dist/hooks/useShellDetection.js.map +1 -0
  264. package/dist/hooks/useStatusMessages.d.ts +11 -0
  265. package/dist/hooks/useStatusMessages.d.ts.map +1 -0
  266. package/dist/hooks/useStatusMessages.js +32 -0
  267. package/dist/hooks/useStatusMessages.js.map +1 -0
  268. package/dist/hooks/useTemporaryStatus.d.ts +13 -0
  269. package/dist/hooks/useTemporaryStatus.d.ts.map +1 -0
  270. package/dist/hooks/useTemporaryStatus.js +30 -0
  271. package/dist/hooks/useTemporaryStatus.js.map +1 -0
  272. package/dist/hooks/useTerminalWidth.d.ts.map +1 -1
  273. package/dist/hooks/useTerminalWidth.js +7 -12
  274. package/dist/hooks/useTerminalWidth.js.map +1 -1
  275. package/dist/hooks/useTunnelManagement.d.ts +18 -0
  276. package/dist/hooks/useTunnelManagement.d.ts.map +1 -0
  277. package/dist/hooks/useTunnelManagement.js +55 -0
  278. package/dist/hooks/useTunnelManagement.js.map +1 -0
  279. package/dist/hooks/useWorktreeActions.d.ts.map +1 -1
  280. package/dist/hooks/useWorktreeActions.js +18 -13
  281. package/dist/hooks/useWorktreeActions.js.map +1 -1
  282. package/dist/index.js +75 -57
  283. package/dist/index.js.map +1 -1
  284. package/dist/layout/LayoutCalculator.d.ts +62 -0
  285. package/dist/layout/LayoutCalculator.d.ts.map +1 -0
  286. package/dist/layout/LayoutCalculator.js +143 -0
  287. package/dist/layout/LayoutCalculator.js.map +1 -0
  288. package/dist/layout/SpacerManager.d.ts +64 -0
  289. package/dist/layout/SpacerManager.d.ts.map +1 -0
  290. package/dist/layout/SpacerManager.js +148 -0
  291. package/dist/layout/SpacerManager.js.map +1 -0
  292. package/dist/layout/TmuxLayoutApplier.d.ts +59 -0
  293. package/dist/layout/TmuxLayoutApplier.d.ts.map +1 -0
  294. package/dist/layout/TmuxLayoutApplier.js +135 -0
  295. package/dist/layout/TmuxLayoutApplier.js.map +1 -0
  296. package/dist/panes/decorative-pane.d.ts.map +1 -0
  297. package/dist/{decorative-pane.js → panes/decorative-pane.js} +1 -1
  298. package/dist/panes/decorative-pane.js.map +1 -0
  299. package/dist/panes/spacer-pane.d.ts.map +1 -0
  300. package/dist/panes/spacer-pane.js.map +1 -0
  301. package/dist/server/embedded-assets.d.ts.map +1 -1
  302. package/dist/server/embedded-assets.js +636 -5637
  303. package/dist/server/embedded-assets.js.map +1 -1
  304. package/dist/server/routes/actionsRoutes.d.ts +2 -0
  305. package/dist/server/routes/actionsRoutes.d.ts.map +1 -0
  306. package/dist/server/routes/actionsRoutes.js +110 -0
  307. package/dist/server/routes/actionsRoutes.js.map +1 -0
  308. package/dist/server/routes/healthRoutes.d.ts +13 -0
  309. package/dist/server/routes/healthRoutes.d.ts.map +1 -0
  310. package/dist/server/routes/healthRoutes.js +70 -0
  311. package/dist/server/routes/healthRoutes.js.map +1 -0
  312. package/dist/server/routes/index.d.ts +8 -0
  313. package/dist/server/routes/index.d.ts.map +1 -0
  314. package/dist/server/routes/index.js +67 -0
  315. package/dist/server/routes/index.js.map +1 -0
  316. package/dist/server/routes/keysRoutes.d.ts +20 -0
  317. package/dist/server/routes/keysRoutes.d.ts.map +1 -0
  318. package/dist/server/routes/keysRoutes.js +111 -0
  319. package/dist/server/routes/keysRoutes.js.map +1 -0
  320. package/dist/server/routes/panesRoutes.d.ts +2 -0
  321. package/dist/server/routes/panesRoutes.d.ts.map +1 -0
  322. package/dist/server/routes/panesRoutes.js +373 -0
  323. package/dist/server/routes/panesRoutes.js.map +1 -0
  324. package/dist/server/routes/settingsRoutes.d.ts +94 -0
  325. package/dist/server/routes/settingsRoutes.d.ts.map +1 -0
  326. package/dist/server/routes/settingsRoutes.js +159 -0
  327. package/dist/server/routes/settingsRoutes.js.map +1 -0
  328. package/dist/server/routes/streamRoutes.d.ts +18 -0
  329. package/dist/server/routes/streamRoutes.d.ts.map +1 -0
  330. package/dist/server/routes/streamRoutes.js +87 -0
  331. package/dist/server/routes/streamRoutes.js.map +1 -0
  332. package/dist/server/routes/tunnelRoutes.d.ts +11 -0
  333. package/dist/server/routes/tunnelRoutes.d.ts.map +1 -0
  334. package/dist/server/routes/tunnelRoutes.js +28 -0
  335. package/dist/server/routes/tunnelRoutes.js.map +1 -0
  336. package/dist/server/routes.d.ts +16 -2
  337. package/dist/server/routes.d.ts.map +1 -1
  338. package/dist/server/routes.js +16 -878
  339. package/dist/server/routes.js.map +1 -1
  340. package/dist/{AutoUpdater.d.ts → services/AutoUpdater.d.ts} +1 -0
  341. package/dist/services/AutoUpdater.d.ts.map +1 -0
  342. package/dist/{AutoUpdater.js → services/AutoUpdater.js} +42 -9
  343. package/dist/services/AutoUpdater.js.map +1 -0
  344. package/dist/services/PaneAnalyzer.d.ts.map +1 -0
  345. package/dist/{PaneAnalyzer.js → services/PaneAnalyzer.js} +1 -1
  346. package/dist/services/PaneAnalyzer.js.map +1 -0
  347. package/dist/services/PaneLifecycleManager.d.ts +60 -0
  348. package/dist/services/PaneLifecycleManager.d.ts.map +1 -0
  349. package/dist/services/PaneLifecycleManager.js +119 -0
  350. package/dist/services/PaneLifecycleManager.js.map +1 -0
  351. package/dist/services/PaneWorkerManager.d.ts.map +1 -1
  352. package/dist/services/PaneWorkerManager.js +6 -3
  353. package/dist/services/PaneWorkerManager.js.map +1 -1
  354. package/dist/services/PopupManager.d.ts +68 -0
  355. package/dist/services/PopupManager.d.ts.map +1 -0
  356. package/dist/services/PopupManager.js +415 -0
  357. package/dist/services/PopupManager.js.map +1 -0
  358. package/dist/services/StatusDetector.js +1 -1
  359. package/dist/services/StatusDetector.js.map +1 -1
  360. package/dist/services/TerminalStreamer.d.ts +1 -0
  361. package/dist/services/TerminalStreamer.d.ts.map +1 -1
  362. package/dist/services/TerminalStreamer.js +22 -16
  363. package/dist/services/TerminalStreamer.js.map +1 -1
  364. package/dist/services/TmuxService.d.ts +298 -0
  365. package/dist/services/TmuxService.d.ts.map +1 -0
  366. package/dist/services/TmuxService.js +768 -0
  367. package/dist/services/TmuxService.js.map +1 -0
  368. package/dist/services/TunnelService.d.ts.map +1 -1
  369. package/dist/services/TunnelService.js +2 -1
  370. package/dist/services/TunnelService.js.map +1 -1
  371. package/dist/types.d.ts +4 -0
  372. package/dist/types.d.ts.map +1 -1
  373. package/dist/utils/asciiArt.d.ts.map +1 -1
  374. package/dist/utils/asciiArt.js +6 -19
  375. package/dist/utils/asciiArt.js.map +1 -1
  376. package/dist/utils/conflictMonitor.d.ts +20 -0
  377. package/dist/utils/conflictMonitor.d.ts.map +1 -0
  378. package/dist/utils/conflictMonitor.js +113 -0
  379. package/dist/utils/conflictMonitor.js.map +1 -0
  380. package/dist/utils/conflictResolutionPane.d.ts.map +1 -1
  381. package/dist/utils/conflictResolutionPane.js +70 -79
  382. package/dist/utils/conflictResolutionPane.js.map +1 -1
  383. package/dist/utils/errorHandling.d.ts +37 -0
  384. package/dist/utils/errorHandling.d.ts.map +1 -0
  385. package/dist/utils/errorHandling.js +112 -0
  386. package/dist/utils/errorHandling.js.map +1 -0
  387. package/dist/utils/generated-agents-doc.d.ts +1 -1
  388. package/dist/utils/generated-agents-doc.js +1 -1
  389. package/dist/utils/git.d.ts +4 -0
  390. package/dist/utils/git.d.ts.map +1 -1
  391. package/dist/utils/git.js +15 -0
  392. package/dist/utils/git.js.map +1 -1
  393. package/dist/utils/hooksDocs.d.ts +1 -1
  394. package/dist/utils/layoutManager.d.ts +20 -16
  395. package/dist/utils/layoutManager.d.ts.map +1 -1
  396. package/dist/utils/layoutManager.js +116 -367
  397. package/dist/utils/layoutManager.js.map +1 -1
  398. package/dist/utils/mergeExecution.d.ts.map +1 -1
  399. package/dist/utils/mergeExecution.js +8 -1
  400. package/dist/utils/mergeExecution.js.map +1 -1
  401. package/dist/utils/mergeValidation.d.ts.map +1 -1
  402. package/dist/utils/mergeValidation.js +42 -13
  403. package/dist/utils/mergeValidation.js.map +1 -1
  404. package/dist/utils/paneCreation.d.ts.map +1 -1
  405. package/dist/utils/paneCreation.js +111 -103
  406. package/dist/utils/paneCreation.js.map +1 -1
  407. package/dist/utils/paneRebinding.d.ts +14 -0
  408. package/dist/utils/paneRebinding.d.ts.map +1 -0
  409. package/dist/utils/paneRebinding.js +28 -0
  410. package/dist/utils/paneRebinding.js.map +1 -0
  411. package/dist/utils/popup.d.ts.map +1 -1
  412. package/dist/utils/popup.js +11 -17
  413. package/dist/utils/popup.js.map +1 -1
  414. package/dist/utils/postPaneCleanup.d.ts.map +1 -1
  415. package/dist/utils/postPaneCleanup.js +4 -3
  416. package/dist/utils/postPaneCleanup.js.map +1 -1
  417. package/dist/utils/shellPaneDetection.d.ts +3 -3
  418. package/dist/utils/shellPaneDetection.d.ts.map +1 -1
  419. package/dist/utils/shellPaneDetection.js +10 -6
  420. package/dist/utils/shellPaneDetection.js.map +1 -1
  421. package/dist/utils/systemCheck.d.ts +19 -0
  422. package/dist/utils/systemCheck.d.ts.map +1 -0
  423. package/dist/utils/systemCheck.js +160 -0
  424. package/dist/utils/systemCheck.js.map +1 -0
  425. package/dist/utils/tmux.d.ts +26 -7
  426. package/dist/utils/tmux.d.ts.map +1 -1
  427. package/dist/utils/tmux.js +66 -64
  428. package/dist/utils/tmux.js.map +1 -1
  429. package/dist/utils/welcomePane.d.ts +2 -2
  430. package/dist/utils/welcomePane.d.ts.map +1 -1
  431. package/dist/utils/welcomePane.js +20 -28
  432. package/dist/utils/welcomePane.js.map +1 -1
  433. package/dist/utils/welcomePaneManager.js +1 -1
  434. package/dist/utils/welcomePaneManager.js.map +1 -1
  435. package/dist/workers/PaneWorker.js +7 -9
  436. package/dist/workers/PaneWorker.js.map +1 -1
  437. package/dist/workers/updateChecker.js +1 -1
  438. package/dist/workers/updateChecker.js.map +1 -1
  439. package/package.json +3 -1
  440. package/dist/AutoUpdater.d.ts.map +0 -1
  441. package/dist/AutoUpdater.js.map +0 -1
  442. package/dist/BetterTextInput.d.ts +0 -10
  443. package/dist/BetterTextInput.d.ts.map +0 -1
  444. package/dist/BetterTextInput.js +0 -177
  445. package/dist/BetterTextInput.js.map +0 -1
  446. package/dist/CleanTextInput.d.ts.map +0 -1
  447. package/dist/CleanTextInput.js.map +0 -1
  448. package/dist/EnhancedTextInput.d.ts +0 -13
  449. package/dist/EnhancedTextInput.d.ts.map +0 -1
  450. package/dist/EnhancedTextInput.js +0 -443
  451. package/dist/EnhancedTextInput.js.map +0 -1
  452. package/dist/GeminiTextInput.d.ts +0 -12
  453. package/dist/GeminiTextInput.d.ts.map +0 -1
  454. package/dist/GeminiTextInput.js +0 -210
  455. package/dist/GeminiTextInput.js.map +0 -1
  456. package/dist/MergePane.d.ts.map +0 -1
  457. package/dist/MergePane.js.map +0 -1
  458. package/dist/MultilineTextInput.d.ts +0 -10
  459. package/dist/MultilineTextInput.d.ts.map +0 -1
  460. package/dist/MultilineTextInput.js +0 -184
  461. package/dist/MultilineTextInput.js.map +0 -1
  462. package/dist/PaneAnalyzer.d.ts.map +0 -1
  463. package/dist/PaneAnalyzer.js.map +0 -1
  464. package/dist/SimpleEnhancedInput.d.ts +0 -13
  465. package/dist/SimpleEnhancedInput.d.ts.map +0 -1
  466. package/dist/SimpleEnhancedInput.js +0 -639
  467. package/dist/SimpleEnhancedInput.js.map +0 -1
  468. package/dist/SimpleGeminiInput.d.ts +0 -12
  469. package/dist/SimpleGeminiInput.d.ts.map +0 -1
  470. package/dist/SimpleGeminiInput.js +0 -223
  471. package/dist/SimpleGeminiInput.js.map +0 -1
  472. package/dist/StyledTextInput.d.ts.map +0 -1
  473. package/dist/StyledTextInput.js.map +0 -1
  474. package/dist/components/ActionChoiceDialog.d.ts.map +0 -1
  475. package/dist/components/ActionChoiceDialog.js.map +0 -1
  476. package/dist/components/ActionConfirmDialog.d.ts.map +0 -1
  477. package/dist/components/ActionConfirmDialog.js.map +0 -1
  478. package/dist/components/ActionInputDialog.d.ts.map +0 -1
  479. package/dist/components/ActionInputDialog.js.map +0 -1
  480. package/dist/components/ActionProgressDialog.d.ts.map +0 -1
  481. package/dist/components/ActionProgressDialog.js.map +0 -1
  482. package/dist/components/AgentChoiceDialog.d.ts.map +0 -1
  483. package/dist/components/AgentChoiceDialog.js.map +0 -1
  484. package/dist/components/CloseOptionsDialog.d.ts.map +0 -1
  485. package/dist/components/CloseOptionsDialog.js.map +0 -1
  486. package/dist/components/CommandPromptDialog.d.ts.map +0 -1
  487. package/dist/components/CommandPromptDialog.js.map +0 -1
  488. package/dist/components/CreatingIndicator.d.ts.map +0 -1
  489. package/dist/components/CreatingIndicator.js.map +0 -1
  490. package/dist/components/DialogBox.d.ts.map +0 -1
  491. package/dist/components/DialogBox.js.map +0 -1
  492. package/dist/components/FileCopyPrompt.d.ts.map +0 -1
  493. package/dist/components/FileCopyPrompt.js.map +0 -1
  494. package/dist/components/FooterHelp.d.ts.map +0 -1
  495. package/dist/components/FooterHelp.js.map +0 -1
  496. package/dist/components/HooksDialog.d.ts.map +0 -1
  497. package/dist/components/HooksDialog.js.map +0 -1
  498. package/dist/components/KebabMenu.d.ts.map +0 -1
  499. package/dist/components/KebabMenu.js.map +0 -1
  500. package/dist/components/LoadingIndicator.d.ts.map +0 -1
  501. package/dist/components/LoadingIndicator.js.map +0 -1
  502. package/dist/components/MergeConfirmationDialog.d.ts.map +0 -1
  503. package/dist/components/MergeConfirmationDialog.js.map +0 -1
  504. package/dist/components/PaneCard.d.ts.map +0 -1
  505. package/dist/components/PaneCard.js.map +0 -1
  506. package/dist/components/PanesGrid.d.ts.map +0 -1
  507. package/dist/components/PanesGrid.js.map +0 -1
  508. package/dist/components/QRCode.d.ts.map +0 -1
  509. package/dist/components/QRCode.js.map +0 -1
  510. package/dist/components/RunningIndicator.d.ts.map +0 -1
  511. package/dist/components/RunningIndicator.js.map +0 -1
  512. package/dist/components/SettingsDialog.d.ts.map +0 -1
  513. package/dist/components/SettingsDialog.js.map +0 -1
  514. package/dist/components/Spinner.d.ts.map +0 -1
  515. package/dist/components/Spinner.js.map +0 -1
  516. package/dist/components/UpdateDialog.d.ts.map +0 -1
  517. package/dist/components/UpdateDialog.js.map +0 -1
  518. package/dist/components/UpdatingIndicator.d.ts.map +0 -1
  519. package/dist/components/UpdatingIndicator.js.map +0 -1
  520. package/dist/decorative-pane.d.ts.map +0 -1
  521. package/dist/decorative-pane.js.map +0 -1
  522. package/dist/popups/agentChoicePopup.d.ts.map +0 -1
  523. package/dist/popups/agentChoicePopup.js.map +0 -1
  524. package/dist/popups/choicePopup.d.ts.map +0 -1
  525. package/dist/popups/choicePopup.js.map +0 -1
  526. package/dist/popups/components/FileList.d.ts.map +0 -1
  527. package/dist/popups/components/FileList.js.map +0 -1
  528. package/dist/popups/components/PopupContainer.d.ts.map +0 -1
  529. package/dist/popups/components/PopupContainer.js.map +0 -1
  530. package/dist/popups/components/PopupInputBox.d.ts.map +0 -1
  531. package/dist/popups/components/PopupInputBox.js.map +0 -1
  532. package/dist/popups/components/PopupWrapper.d.ts.map +0 -1
  533. package/dist/popups/components/PopupWrapper.js.map +0 -1
  534. package/dist/popups/components/index.d.ts.map +0 -1
  535. package/dist/popups/components/index.js.map +0 -1
  536. package/dist/popups/config.d.ts.map +0 -1
  537. package/dist/popups/config.js.map +0 -1
  538. package/dist/popups/confirmPopup.d.ts.map +0 -1
  539. package/dist/popups/confirmPopup.js.map +0 -1
  540. package/dist/popups/hooksPopup.d.ts.map +0 -1
  541. package/dist/popups/hooksPopup.js.map +0 -1
  542. package/dist/popups/inputPopup.d.ts.map +0 -1
  543. package/dist/popups/inputPopup.js.map +0 -1
  544. package/dist/popups/kebabMenuPopup.d.ts.map +0 -1
  545. package/dist/popups/kebabMenuPopup.js.map +0 -1
  546. package/dist/popups/logsPopup.d.ts.map +0 -1
  547. package/dist/popups/logsPopup.js.map +0 -1
  548. package/dist/popups/mergePopup.d.ts.map +0 -1
  549. package/dist/popups/mergePopup.js.map +0 -1
  550. package/dist/popups/newPanePopup.d.ts.map +0 -1
  551. package/dist/popups/newPanePopup.js.map +0 -1
  552. package/dist/popups/progressPopup.d.ts.map +0 -1
  553. package/dist/popups/progressPopup.js.map +0 -1
  554. package/dist/popups/remotePopup.d.ts.map +0 -1
  555. package/dist/popups/remotePopup.js.map +0 -1
  556. package/dist/popups/settingsPopup.d.ts.map +0 -1
  557. package/dist/popups/settingsPopup.js.map +0 -1
  558. package/dist/popups/shortcutsPopup.d.ts.map +0 -1
  559. package/dist/popups/shortcutsPopup.js.map +0 -1
  560. package/dist/popups/templates/SimpleInputPopup.d.ts.map +0 -1
  561. package/dist/popups/templates/SimpleInputPopup.js.map +0 -1
  562. package/dist/server/static.d.ts +0 -6
  563. package/dist/server/static.d.ts.map +0 -1
  564. package/dist/server/static.js +0 -3040
  565. package/dist/server/static.js.map +0 -1
  566. package/dist/spacer-pane.d.ts.map +0 -1
  567. package/dist/spacer-pane.js.map +0 -1
  568. /package/dist/components/{ActionChoiceDialog.js → dialogs/ActionChoiceDialog.js} +0 -0
  569. /package/dist/components/{ActionConfirmDialog.d.ts → dialogs/ActionConfirmDialog.d.ts} +0 -0
  570. /package/dist/components/{ActionConfirmDialog.js → dialogs/ActionConfirmDialog.js} +0 -0
  571. /package/dist/components/{ActionInputDialog.d.ts → dialogs/ActionInputDialog.d.ts} +0 -0
  572. /package/dist/components/{ActionProgressDialog.d.ts → dialogs/ActionProgressDialog.d.ts} +0 -0
  573. /package/dist/components/{ActionProgressDialog.js → dialogs/ActionProgressDialog.js} +0 -0
  574. /package/dist/components/{AgentChoiceDialog.d.ts → dialogs/AgentChoiceDialog.d.ts} +0 -0
  575. /package/dist/components/{AgentChoiceDialog.js → dialogs/AgentChoiceDialog.js} +0 -0
  576. /package/dist/components/{CloseOptionsDialog.js → dialogs/CloseOptionsDialog.js} +0 -0
  577. /package/dist/components/{CommandPromptDialog.d.ts → dialogs/CommandPromptDialog.d.ts} +0 -0
  578. /package/dist/components/{DialogBox.d.ts → dialogs/DialogBox.d.ts} +0 -0
  579. /package/dist/components/{DialogBox.js → dialogs/DialogBox.js} +0 -0
  580. /package/dist/components/{HooksDialog.d.ts → dialogs/HooksDialog.d.ts} +0 -0
  581. /package/dist/components/{HooksDialog.js → dialogs/HooksDialog.js} +0 -0
  582. /package/dist/components/{MergeConfirmationDialog.js → dialogs/MergeConfirmationDialog.js} +0 -0
  583. /package/dist/components/{SettingsDialog.js → dialogs/SettingsDialog.js} +0 -0
  584. /package/dist/components/{UpdateDialog.d.ts → dialogs/UpdateDialog.d.ts} +0 -0
  585. /package/dist/components/{UpdateDialog.js → dialogs/UpdateDialog.js} +0 -0
  586. /package/dist/components/{CreatingIndicator.d.ts → indicators/CreatingIndicator.d.ts} +0 -0
  587. /package/dist/components/{CreatingIndicator.js → indicators/CreatingIndicator.js} +0 -0
  588. /package/dist/components/{LoadingIndicator.d.ts → indicators/LoadingIndicator.d.ts} +0 -0
  589. /package/dist/components/{LoadingIndicator.js → indicators/LoadingIndicator.js} +0 -0
  590. /package/dist/components/{RunningIndicator.d.ts → indicators/RunningIndicator.d.ts} +0 -0
  591. /package/dist/components/{RunningIndicator.js → indicators/RunningIndicator.js} +0 -0
  592. /package/dist/components/{Spinner.d.ts → indicators/Spinner.d.ts} +0 -0
  593. /package/dist/components/{Spinner.js → indicators/Spinner.js} +0 -0
  594. /package/dist/components/{UpdatingIndicator.d.ts → indicators/UpdatingIndicator.d.ts} +0 -0
  595. /package/dist/components/{UpdatingIndicator.js → indicators/UpdatingIndicator.js} +0 -0
  596. /package/dist/{CleanTextInput.d.ts → components/inputs/CleanTextInput.d.ts} +0 -0
  597. /package/dist/{StyledTextInput.d.ts → components/inputs/StyledTextInput.d.ts} +0 -0
  598. /package/dist/{StyledTextInput.js → components/inputs/StyledTextInput.js} +0 -0
  599. /package/dist/components/{KebabMenu.js → panes/KebabMenu.js} +0 -0
  600. /package/dist/{MergePane.d.ts → components/panes/MergePane.d.ts} +0 -0
  601. /package/dist/{popups → components/popups}/agentChoicePopup.d.ts +0 -0
  602. /package/dist/{popups → components/popups}/choicePopup.d.ts +0 -0
  603. /package/dist/{popups → components/popups}/config.d.ts +0 -0
  604. /package/dist/{popups → components/popups}/confirmPopup.d.ts +0 -0
  605. /package/dist/{popups → components/popups}/hooksPopup.d.ts +0 -0
  606. /package/dist/{popups → components/popups}/inputPopup.d.ts +0 -0
  607. /package/dist/{popups → components/popups}/kebabMenuPopup.d.ts +0 -0
  608. /package/dist/{popups → components/popups}/logsPopup.d.ts +0 -0
  609. /package/dist/{popups → components/popups}/mergePopup.d.ts +0 -0
  610. /package/dist/{popups → components/popups}/newPanePopup.d.ts +0 -0
  611. /package/dist/{popups → components/popups}/progressPopup.d.ts +0 -0
  612. /package/dist/{popups → components/popups}/remotePopup.d.ts +0 -0
  613. /package/dist/{popups → components/popups}/settingsPopup.d.ts +0 -0
  614. /package/dist/{popups/components → components/popups/shared}/FileList.d.ts +0 -0
  615. /package/dist/{popups/components → components/popups/shared}/FileList.js +0 -0
  616. /package/dist/{popups/components → components/popups/shared}/PopupContainer.d.ts +0 -0
  617. /package/dist/{popups/components → components/popups/shared}/PopupContainer.js +0 -0
  618. /package/dist/{popups/components → components/popups/shared}/PopupInputBox.d.ts +0 -0
  619. /package/dist/{popups/components → components/popups/shared}/PopupInputBox.js +0 -0
  620. /package/dist/{popups/components → components/popups/shared}/PopupWrapper.d.ts +0 -0
  621. /package/dist/{popups/components → components/popups/shared}/PopupWrapper.js +0 -0
  622. /package/dist/{popups/components → components/popups/shared}/index.d.ts +0 -0
  623. /package/dist/{popups/components → components/popups/shared}/index.js +0 -0
  624. /package/dist/{popups → components/popups}/shortcutsPopup.d.ts +0 -0
  625. /package/dist/{popups → components/popups}/templates/SimpleInputPopup.d.ts +0 -0
  626. /package/dist/components/{FileCopyPrompt.d.ts → ui/FileCopyPrompt.d.ts} +0 -0
  627. /package/dist/components/{FileCopyPrompt.js → ui/FileCopyPrompt.js} +0 -0
  628. /package/dist/components/{FooterHelp.d.ts → ui/FooterHelp.d.ts} +0 -0
  629. /package/dist/components/{FooterHelp.js → ui/FooterHelp.js} +0 -0
  630. /package/dist/components/{QRCode.d.ts → ui/QRCode.d.ts} +0 -0
  631. /package/dist/components/{QRCode.js → ui/QRCode.js} +0 -0
  632. /package/dist/{decorative-pane.d.ts → panes/decorative-pane.d.ts} +0 -0
  633. /package/dist/{spacer-pane.d.ts → panes/spacer-pane.d.ts} +0 -0
  634. /package/dist/{spacer-pane.js → panes/spacer-pane.js} +0 -0
  635. /package/dist/{PaneAnalyzer.d.ts → services/PaneAnalyzer.d.ts} +0 -0
@@ -1,639 +0,0 @@
1
- import React, { useState, useEffect } from 'react';
2
- import { Box, Text, useInput, useStdout } from 'ink';
3
- import { execSync } from 'child_process';
4
- import path from 'path';
5
- import stringWidth from 'string-width';
6
- import chalk from 'chalk';
7
- const SimpleEnhancedInput = ({ value, onChange, placeholder = '', onSubmit, onCancel, isActive = true, workingDirectory = process.cwd() }) => {
8
- const [cursorPosition, setCursorPosition] = useState(0);
9
- const [showAutocomplete, setShowAutocomplete] = useState(false);
10
- const [autocompleteQuery, setAutocompleteQuery] = useState('');
11
- const [autocompleteStartPos, setAutocompleteStartPos] = useState(0);
12
- const [fileMatches, setFileMatches] = useState([]);
13
- const [selectedMatchIndex, setSelectedMatchIndex] = useState(0);
14
- const [displayValue, setDisplayValue] = useState(value);
15
- const { stdout } = useStdout();
16
- const terminalWidth = stdout?.columns || 80;
17
- const [pastedContent, setPastedContent] = useState(new Map());
18
- // Update cursor when value changes externally
19
- useEffect(() => {
20
- // Only update cursor to end if value actually changed and we're not already editing
21
- if (value.length > 0 && cursorPosition === 0) {
22
- // This is initial value, keep cursor at 0
23
- }
24
- else if (value === '') {
25
- setCursorPosition(0);
26
- }
27
- }, [value]);
28
- // Helper function to check if text looks like a paste that should be formatted
29
- const shouldFormatPaste = (text) => {
30
- // Only format if it's a large paste, not single newlines
31
- // Single newline = user pressing shift+enter
32
- // Multiple lines with content = likely a paste
33
- if (text === '\n')
34
- return false; // Single newline is never a paste
35
- const hasMultipleLines = text.includes('\n') && text.length > 1;
36
- const isVeryLong = text.length > 100;
37
- // Check for code-like patterns that might break display
38
- const hasSpecialChars = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/.test(text);
39
- const hasAnsiCodes = /\x1b\[[0-9;]*[a-zA-Z]/.test(text);
40
- return hasMultipleLines || isVeryLong || hasSpecialChars || hasAnsiCodes;
41
- };
42
- // Helper function to process pasted text
43
- const processPastedText = (text) => {
44
- if (!shouldFormatPaste(text)) {
45
- return text;
46
- }
47
- // Generate a unique ID for this paste
48
- const pasteId = pastedContent.size + 1;
49
- // Store the actual content
50
- const newPastedContent = new Map(pastedContent);
51
- newPastedContent.set(pasteId, text);
52
- setPastedContent(newPastedContent);
53
- // Count lines in the pasted content
54
- const lineCount = (text.match(/\n/g) || []).length + 1;
55
- // Return placeholder text
56
- return `[#${pasteId} pasted ${lineCount} lines]`;
57
- };
58
- // Helper function to get the actual value with pasted content restored
59
- const getActualValue = () => {
60
- let actualValue = displayValue;
61
- // Replace all placeholders with actual content
62
- pastedContent.forEach((content, id) => {
63
- const placeholder = `[#${id} pasted ${(content.match(/\n/g) || []).length + 1} lines]`;
64
- actualValue = actualValue.replace(placeholder, content);
65
- });
66
- return actualValue;
67
- };
68
- // Update display value when value prop changes
69
- useEffect(() => {
70
- setDisplayValue(value);
71
- // Clear pasted content when value is cleared
72
- if (value === '') {
73
- setPastedContent(new Map());
74
- }
75
- }, [value]);
76
- // Search for files when autocomplete query changes or when @ is typed
77
- useEffect(() => {
78
- if (showAutocomplete) {
79
- searchFiles(autocompleteQuery);
80
- }
81
- else {
82
- setFileMatches([]);
83
- }
84
- }, [autocompleteQuery, showAutocomplete]);
85
- const searchFiles = async (query) => {
86
- try {
87
- // Directories to exclude from search
88
- const excludeDirs = [
89
- 'node_modules',
90
- '.git',
91
- 'dist',
92
- 'build',
93
- '.next',
94
- '.nuxt',
95
- '.cache',
96
- 'coverage',
97
- '.vscode',
98
- '.idea',
99
- 'vendor',
100
- 'target',
101
- '.pnpm-store',
102
- '__pycache__',
103
- '.pytest_cache',
104
- '.tox',
105
- 'venv',
106
- '.venv',
107
- 'env',
108
- '.env'
109
- ];
110
- // Build exclude arguments for find command
111
- const excludeArgs = excludeDirs.map(dir => `-path "*/${dir}" -prune -o`).join(' ');
112
- // If query is empty, show root directory files
113
- let searchCmd;
114
- let dirSearchCmd;
115
- // Check if query is a directory path (ends with /)
116
- const isDirectoryPath = query.endsWith('/');
117
- if (query === '') {
118
- // Show files and directories in the root of the working directory (excluding common dirs)
119
- searchCmd = `find "${workingDirectory}" -maxdepth 1 \\( ${excludeArgs} -type f -print \\) 2>/dev/null | head -20`;
120
- dirSearchCmd = `find "${workingDirectory}" -maxdepth 1 \\( ${excludeArgs} -type d -print \\) 2>/dev/null | grep -v "^${workingDirectory}$" | head -10`;
121
- }
122
- else if (isDirectoryPath) {
123
- // Navigate into directory - show contents of the specified directory
124
- const dirPath = path.join(workingDirectory, query.slice(0, -1)); // Remove trailing slash
125
- searchCmd = `find "${dirPath}" -maxdepth 1 \\( ${excludeArgs} -type f -print \\) 2>/dev/null | head -20`;
126
- dirSearchCmd = `find "${dirPath}" -maxdepth 1 \\( ${excludeArgs} -type d -print \\) 2>/dev/null | grep -v "^${dirPath}$" | head -10`;
127
- }
128
- else {
129
- // Search for files matching the query (excluding common dirs)
130
- searchCmd = `find "${workingDirectory}" \\( ${excludeArgs} -type f -name "*${query}*" -print \\) 2>/dev/null | head -20`;
131
- dirSearchCmd = `find "${workingDirectory}" \\( ${excludeArgs} -type d -name "*${query}*" -print \\) 2>/dev/null | head -10`;
132
- }
133
- let fileResults = [];
134
- let dirResults = [];
135
- try {
136
- fileResults = execSync(searchCmd, { encoding: 'utf-8' }).trim().split('\n').filter(Boolean);
137
- }
138
- catch { }
139
- try {
140
- dirResults = execSync(dirSearchCmd, { encoding: 'utf-8' }).trim().split('\n').filter(Boolean);
141
- }
142
- catch { }
143
- const matches = [];
144
- // Helper to check if path contains excluded directories
145
- const isExcluded = (filepath) => {
146
- const excludedPatterns = [
147
- 'node_modules', '.git', 'dist', 'build', '.next', '.nuxt',
148
- '.cache', 'coverage', '.vscode', '.idea', 'vendor', 'target',
149
- '.pnpm-store', '__pycache__', '.pytest_cache', '.tox',
150
- 'venv', '.venv', 'env', '.env'
151
- ];
152
- return excludedPatterns.some(pattern => filepath.includes(`/${pattern}/`) || filepath.endsWith(`/${pattern}`));
153
- };
154
- // Process directory matches
155
- for (const dirPath of dirResults) {
156
- if (isExcluded(dirPath))
157
- continue;
158
- const relativePath = path.relative(workingDirectory, dirPath);
159
- if (relativePath && !relativePath.startsWith('..')) {
160
- // When browsing within a directory, adjust the display path
161
- let displayPath = relativePath;
162
- if (isDirectoryPath && query) {
163
- // We're inside a subdirectory, show just the item name
164
- displayPath = path.basename(dirPath);
165
- }
166
- matches.push({
167
- path: dirPath,
168
- displayPath: displayPath + '/',
169
- type: 'directory'
170
- });
171
- }
172
- }
173
- // Process file matches
174
- for (const filePath of fileResults) {
175
- if (isExcluded(filePath))
176
- continue;
177
- const relativePath = path.relative(workingDirectory, filePath);
178
- if (relativePath && !relativePath.startsWith('..')) {
179
- // When browsing within a directory, adjust the display path
180
- let displayPath = relativePath;
181
- if (isDirectoryPath && query) {
182
- // We're inside a subdirectory, show just the item name
183
- displayPath = path.basename(filePath);
184
- }
185
- matches.push({
186
- path: filePath,
187
- displayPath: displayPath,
188
- type: 'file'
189
- });
190
- }
191
- }
192
- // Sort by relevance
193
- matches.sort((a, b) => {
194
- const aScore = a.displayPath.length;
195
- const bScore = b.displayPath.length;
196
- return aScore - bScore;
197
- });
198
- setFileMatches(matches.slice(0, 10));
199
- setSelectedMatchIndex(0);
200
- }
201
- catch (error) {
202
- setFileMatches([]);
203
- }
204
- };
205
- const insertText = (text, position, isPaste = false) => {
206
- // Process text if it's a paste
207
- const processedText = isPaste ? processPastedText(text) : text;
208
- const before = displayValue.slice(0, position);
209
- const after = displayValue.slice(position);
210
- const newDisplayValue = before + processedText + after;
211
- setDisplayValue(newDisplayValue);
212
- // Update the actual value with processed text (placeholder for pastes)
213
- const newValue = before + processedText + after;
214
- onChange(newValue);
215
- // Update cursor position - just move by the length of inserted text
216
- // Don't add any special handling for wrapping
217
- const newCursorPos = position + processedText.length;
218
- setCursorPosition(newCursorPos);
219
- };
220
- const deleteText = (start, end) => {
221
- const before = displayValue.slice(0, start);
222
- const after = displayValue.slice(end);
223
- const newDisplayValue = before + after;
224
- setDisplayValue(newDisplayValue);
225
- onChange(newDisplayValue);
226
- setCursorPosition(start);
227
- };
228
- const moveCursor = (position) => {
229
- const clampedPosition = Math.max(0, Math.min(displayValue.length, position));
230
- setCursorPosition(clampedPosition);
231
- };
232
- // Gemini CLI-style buffer system with proper line tracking
233
- const getBuffer = (text, width) => {
234
- const lines = [];
235
- let charPosition = 0;
236
- const charToLineMap = [];
237
- // Split by actual newlines first
238
- const logicalLines = text.split('\n');
239
- for (let logicalIdx = 0; logicalIdx < logicalLines.length; logicalIdx++) {
240
- const logicalLine = logicalLines[logicalIdx];
241
- if (logicalLine.length === 0) {
242
- // Empty line
243
- lines.push('');
244
- charToLineMap[charPosition] = { line: lines.length - 1, col: 0 };
245
- charPosition += 1; // for the newline
246
- }
247
- else {
248
- // Break this logical line into visual lines
249
- let remaining = logicalLine;
250
- let isFirstWrap = true;
251
- while (remaining.length > 0) {
252
- let lineContent = '';
253
- let charsUsed = 0;
254
- // Try to fit as many complete words as possible
255
- const words = remaining.split(' ');
256
- let wordIndex = 0;
257
- while (wordIndex < words.length) {
258
- const word = words[wordIndex];
259
- const separator = (wordIndex === 0 || lineContent === '') ? '' : ' ';
260
- const testContent = lineContent + separator + word;
261
- if (stringWidth(testContent) <= width) {
262
- lineContent = testContent;
263
- charsUsed += (separator + word).length;
264
- wordIndex++;
265
- }
266
- else {
267
- // This word doesn't fit
268
- if (lineContent === '') {
269
- // Word is longer than line width, break it
270
- let charCount = 0;
271
- for (let i = 0; i < word.length; i++) {
272
- const testChar = word.slice(0, i + 1);
273
- if (stringWidth(testChar) <= width) {
274
- charCount = i + 1;
275
- }
276
- else {
277
- break;
278
- }
279
- }
280
- lineContent = word.slice(0, Math.max(1, charCount));
281
- charsUsed = lineContent.length;
282
- }
283
- break;
284
- }
285
- }
286
- // Add this visual line
287
- lines.push(lineContent);
288
- // Map character positions to line/col
289
- for (let i = 0; i < charsUsed; i++) {
290
- charToLineMap[charPosition + i] = {
291
- line: lines.length - 1,
292
- col: i
293
- };
294
- }
295
- // Move to next part
296
- remaining = remaining.slice(charsUsed).trimStart();
297
- charPosition += charsUsed;
298
- // Skip spaces that were trimmed
299
- const originalRemaining = logicalLine.slice(charPosition - (logicalIdx === 0 ? 0 : logicalIdx));
300
- const spacesToSkip = originalRemaining.length - remaining.length - charsUsed;
301
- if (spacesToSkip > 0 && !isFirstWrap) {
302
- charPosition += spacesToSkip;
303
- }
304
- isFirstWrap = false;
305
- }
306
- }
307
- // Add newline mapping if not last logical line
308
- if (logicalIdx < logicalLines.length - 1) {
309
- charToLineMap[charPosition] = {
310
- line: lines.length - 1,
311
- col: lines[lines.length - 1]?.length || 0
312
- };
313
- charPosition += 1;
314
- }
315
- }
316
- // Handle cursor at end
317
- if (charPosition <= text.length) {
318
- charToLineMap[text.length] = {
319
- line: Math.max(0, lines.length - 1),
320
- col: lines[lines.length - 1]?.length || 0
321
- };
322
- }
323
- return { lines, charToLineMap };
324
- };
325
- const findWordBoundary = (text, position, direction) => {
326
- const wordRegex = /\w/;
327
- let pos = position;
328
- if (direction === 'left') {
329
- // Skip any non-word chars
330
- while (pos > 0 && !wordRegex.test(text[pos - 1])) {
331
- pos--;
332
- }
333
- // Skip the word
334
- while (pos > 0 && wordRegex.test(text[pos - 1])) {
335
- pos--;
336
- }
337
- }
338
- else {
339
- // Skip any non-word chars
340
- while (pos < text.length && !wordRegex.test(text[pos])) {
341
- pos++;
342
- }
343
- // Skip the word
344
- while (pos < text.length && wordRegex.test(text[pos])) {
345
- pos++;
346
- }
347
- }
348
- return pos;
349
- };
350
- const completeFileReference = (match) => {
351
- const before = displayValue.slice(0, autocompleteStartPos);
352
- const after = displayValue.slice(cursorPosition);
353
- // Build the complete path to insert
354
- let completePath;
355
- if (autocompleteQuery.endsWith('/')) {
356
- // We're in a subdirectory, need to build the full path
357
- completePath = autocompleteQuery + match.displayPath.replace(/\/$/, ''); // Remove trailing slash from directories
358
- }
359
- else {
360
- // Use the relative path from working directory
361
- completePath = path.relative(workingDirectory, match.path);
362
- }
363
- const newDisplayValue = before + completePath + after;
364
- setDisplayValue(newDisplayValue);
365
- onChange(newDisplayValue);
366
- setCursorPosition(autocompleteStartPos + completePath.length);
367
- setShowAutocomplete(false);
368
- setAutocompleteQuery('');
369
- };
370
- useInput((input, key) => {
371
- // Only handle input when active
372
- if (!isActive)
373
- return;
374
- // Handle autocomplete navigation
375
- if (showAutocomplete) {
376
- if (key.escape) {
377
- setShowAutocomplete(false);
378
- setAutocompleteQuery('');
379
- return;
380
- }
381
- else if (key.upArrow) {
382
- setSelectedMatchIndex(Math.max(0, selectedMatchIndex - 1));
383
- return;
384
- }
385
- else if (key.downArrow) {
386
- setSelectedMatchIndex(Math.min(fileMatches.length - 1, selectedMatchIndex + 1));
387
- return;
388
- }
389
- else if (key.rightArrow) {
390
- // Navigate into directory with right arrow
391
- if (fileMatches.length > 0) {
392
- const selectedMatch = fileMatches[selectedMatchIndex];
393
- if (selectedMatch.type === 'directory') {
394
- // Build the full path for navigation
395
- let newQuery;
396
- if (autocompleteQuery.endsWith('/')) {
397
- // We're already in a directory, append the selected subdirectory
398
- newQuery = autocompleteQuery + selectedMatch.displayPath;
399
- }
400
- else if (autocompleteQuery) {
401
- // We have a search query, replace it with the full path
402
- const relativePath = path.relative(workingDirectory, selectedMatch.path);
403
- newQuery = relativePath + '/';
404
- }
405
- else {
406
- // We're at root, use the display path
407
- newQuery = selectedMatch.displayPath;
408
- }
409
- setAutocompleteQuery(newQuery);
410
- // Trigger a new search within this directory
411
- searchFiles(newQuery);
412
- }
413
- }
414
- return;
415
- }
416
- else if (key.leftArrow) {
417
- // Navigate back/up one directory level with left arrow
418
- if (autocompleteQuery.includes('/')) {
419
- // Remove the last directory segment
420
- const segments = autocompleteQuery.split('/');
421
- segments.pop(); // Remove last segment
422
- if (segments.length > 0) {
423
- segments.pop(); // Remove the directory we're going back from
424
- const newQuery = segments.length > 0 ? segments.join('/') + '/' : '';
425
- setAutocompleteQuery(newQuery);
426
- searchFiles(newQuery);
427
- }
428
- else {
429
- // Go back to root
430
- setAutocompleteQuery('');
431
- searchFiles('');
432
- }
433
- }
434
- else if (autocompleteQuery !== '') {
435
- // Go back to root if we have a query but no slashes
436
- setAutocompleteQuery('');
437
- searchFiles('');
438
- }
439
- return;
440
- }
441
- else if (key.return || key.tab) {
442
- if (fileMatches.length > 0) {
443
- completeFileReference(fileMatches[selectedMatchIndex]);
444
- }
445
- return;
446
- }
447
- }
448
- // Handle special keys
449
- if (key.escape) {
450
- onCancel?.();
451
- return;
452
- }
453
- if (key.shift && key.return) {
454
- // Insert newline for multiline input
455
- // Force insert a newline character directly into the value
456
- const before = displayValue.slice(0, cursorPosition);
457
- const after = displayValue.slice(cursorPosition);
458
- const newValue = before + '\n' + after;
459
- setDisplayValue(newValue);
460
- onChange(newValue);
461
- setCursorPosition(cursorPosition + 1);
462
- return;
463
- }
464
- if (key.return && !key.shift) {
465
- // Get the actual value with pasted content restored before submitting
466
- const actualValue = getActualValue();
467
- onChange(actualValue);
468
- onSubmit?.();
469
- return;
470
- }
471
- // Buffer-based navigation like Gemini CLI
472
- if (!showAutocomplete && key.upArrow) {
473
- const inputWidth = Math.max(1, terminalWidth - 4);
474
- const buffer = getBuffer(displayValue, inputWidth);
475
- const currentPos = buffer.charToLineMap[cursorPosition] || { line: 0, col: 0 };
476
- if (currentPos.line > 0) {
477
- const targetLine = currentPos.line - 1;
478
- const targetLineLength = buffer.lines[targetLine].length;
479
- const targetColumn = Math.min(currentPos.col, targetLineLength);
480
- // Find character position for this line/column
481
- let newCursorPos = 0;
482
- for (let charPos = 0; charPos < displayValue.length; charPos++) {
483
- const mapped = buffer.charToLineMap[charPos];
484
- if (mapped && mapped.line === targetLine && mapped.col === targetColumn) {
485
- newCursorPos = charPos;
486
- break;
487
- }
488
- }
489
- moveCursor(newCursorPos);
490
- }
491
- return;
492
- }
493
- if (!showAutocomplete && key.downArrow) {
494
- const inputWidth = Math.max(1, terminalWidth - 4);
495
- const buffer = getBuffer(displayValue, inputWidth);
496
- const currentPos = buffer.charToLineMap[cursorPosition] || { line: 0, col: 0 };
497
- if (currentPos.line < buffer.lines.length - 1) {
498
- const targetLine = currentPos.line + 1;
499
- const targetLineLength = buffer.lines[targetLine].length;
500
- const targetColumn = Math.min(currentPos.col, targetLineLength);
501
- // Find character position for this line/column
502
- let newCursorPos = displayValue.length;
503
- for (let charPos = 0; charPos <= displayValue.length; charPos++) {
504
- const mapped = buffer.charToLineMap[charPos];
505
- if (mapped && mapped.line === targetLine && mapped.col === targetColumn) {
506
- newCursorPos = charPos;
507
- break;
508
- }
509
- }
510
- moveCursor(newCursorPos);
511
- }
512
- else {
513
- // At last line, move to end
514
- moveCursor(displayValue.length);
515
- }
516
- return;
517
- }
518
- // Cursor movement
519
- if (key.leftArrow) {
520
- if (key.meta || key.alt || key.option) {
521
- // Move to previous word
522
- const newPos = findWordBoundary(displayValue, cursorPosition, 'left');
523
- moveCursor(newPos);
524
- }
525
- else {
526
- // Regular left movement - skip over newlines
527
- if (cursorPosition > 0) {
528
- moveCursor(cursorPosition - 1);
529
- }
530
- }
531
- return;
532
- }
533
- if (key.rightArrow) {
534
- if (key.meta || key.alt || key.option) {
535
- // Move to next word
536
- const newPos = findWordBoundary(displayValue, cursorPosition, 'right');
537
- moveCursor(newPos);
538
- }
539
- else {
540
- // Regular right movement - skip over newlines
541
- if (cursorPosition < displayValue.length) {
542
- moveCursor(cursorPosition + 1);
543
- }
544
- }
545
- return;
546
- }
547
- // Home/End keys - Ctrl+A / Ctrl+E
548
- if (key.ctrl && input === 'a') {
549
- moveCursor(0);
550
- return;
551
- }
552
- if (key.ctrl && input === 'e') {
553
- moveCursor(displayValue.length);
554
- return;
555
- }
556
- // Deletion
557
- if (key.backspace || key.delete) {
558
- if (key.meta || key.alt || key.option) {
559
- // Delete word
560
- const wordStart = findWordBoundary(displayValue, cursorPosition, 'left');
561
- deleteText(wordStart, cursorPosition);
562
- }
563
- else if (cursorPosition > 0) {
564
- deleteText(cursorPosition - 1, cursorPosition);
565
- }
566
- return;
567
- }
568
- // Text input
569
- if (input && !key.ctrl && !key.meta) {
570
- // Detect paste by checking if input is unusually long or contains special characters
571
- const isPaste = input.length > 1 && shouldFormatPaste(input);
572
- // Use input as-is - terminal wrapping is visual only, not actual newlines
573
- const filteredInput = input;
574
- // Check for @ symbol to trigger autocomplete
575
- if (filteredInput === '@') {
576
- setShowAutocomplete(true);
577
- setAutocompleteStartPos(cursorPosition + 1);
578
- setAutocompleteQuery('');
579
- insertText(filteredInput, cursorPosition, false);
580
- }
581
- else if (showAutocomplete) {
582
- // Update autocomplete query
583
- insertText(filteredInput, cursorPosition, isPaste);
584
- const newQuery = displayValue.slice(autocompleteStartPos, cursorPosition + 1) + filteredInput;
585
- setAutocompleteQuery(newQuery);
586
- }
587
- else {
588
- insertText(filteredInput, cursorPosition, isPaste);
589
- }
590
- }
591
- });
592
- // Gemini CLI-style display with proper buffer-based cursor calculation
593
- const getDisplayWithCursor = () => {
594
- const inputWidth = Math.max(1, terminalWidth - 4);
595
- const buffer = getBuffer(displayValue, inputWidth);
596
- // Get cursor position from the character map
597
- const cursorPos = buffer.charToLineMap[cursorPosition] || { line: 0, col: 0 };
598
- const cursorLine = cursorPos.line;
599
- const cursorColumn = cursorPos.col;
600
- // Handle empty input
601
- if (buffer.lines.length === 0 || (buffer.lines.length === 1 && buffer.lines[0] === '')) {
602
- return (React.createElement(Box, null,
603
- React.createElement(Text, null, chalk.inverse(' ')),
604
- placeholder && React.createElement(Text, { dimColor: true }, placeholder)));
605
- }
606
- return (React.createElement(Box, { flexDirection: "column" }, buffer.lines.map((line, idx) => {
607
- if (idx === cursorLine) {
608
- // Line with cursor - exact Gemini CLI approach
609
- const beforeCursor = line.slice(0, cursorColumn);
610
- const atCursor = line[cursorColumn] || ' ';
611
- const afterCursor = line.slice(cursorColumn + 1);
612
- return (React.createElement(Box, { key: idx },
613
- React.createElement(Text, null, beforeCursor),
614
- React.createElement(Text, null, chalk.inverse(atCursor)),
615
- React.createElement(Text, null, afterCursor)));
616
- }
617
- else {
618
- return React.createElement(Text, { key: idx }, line);
619
- }
620
- })));
621
- };
622
- return (React.createElement(Box, { flexDirection: "column" },
623
- React.createElement(Box, null, displayValue ? (getDisplayWithCursor()) : (React.createElement(React.Fragment, null,
624
- React.createElement(Text, { inverse: true }, " "),
625
- placeholder && React.createElement(Text, { dimColor: true }, placeholder)))),
626
- showAutocomplete && fileMatches.length > 0 && (React.createElement(Box, { flexDirection: "column", marginTop: 1, borderStyle: "single", borderColor: "cyan", paddingX: 1 },
627
- React.createElement(Text, { color: "cyan", dimColor: true }, autocompleteQuery.endsWith('/')
628
- ? `Browsing: @${autocompleteQuery}`
629
- : autocompleteQuery
630
- ? `Files matching: @${autocompleteQuery}`
631
- : 'Files in current directory:'),
632
- fileMatches.map((match, index) => (React.createElement(Box, { key: match.path },
633
- React.createElement(Text, { color: index === selectedMatchIndex ? 'cyan' : 'gray' },
634
- index === selectedMatchIndex ? '▶ ' : ' ',
635
- match.displayPath)))),
636
- React.createElement(Text, { dimColor: true, italic: true }, "\u2191\u2193 select \u2022 \u2192 enter directory \u2022 \u2190 go back \u2022 Tab/Enter complete \u2022 Esc cancel")))));
637
- };
638
- export default SimpleEnhancedInput;
639
- //# sourceMappingURL=SimpleEnhancedInput.js.map