@akiojin/gwt 4.10.0 → 4.12.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 (630) hide show
  1. package/README.ja.md +4 -4
  2. package/README.md +4 -4
  3. package/bin/gwt.js +1 -1
  4. package/dist/claude.d.ts +2 -0
  5. package/dist/claude.d.ts.map +1 -1
  6. package/dist/claude.js +97 -68
  7. package/dist/claude.js.map +1 -1
  8. package/dist/cli/ui/App.solid.d.ts +29 -0
  9. package/dist/cli/ui/App.solid.d.ts.map +1 -0
  10. package/dist/cli/ui/App.solid.js +1395 -0
  11. package/dist/cli/ui/App.solid.js.map +1 -0
  12. package/dist/cli/ui/components/solid/Footer.d.ts +10 -0
  13. package/dist/cli/ui/components/solid/Footer.d.ts.map +1 -0
  14. package/dist/cli/ui/components/solid/Footer.js +10 -0
  15. package/dist/cli/ui/components/solid/Footer.js.map +1 -0
  16. package/dist/cli/ui/components/{parts → solid}/Header.d.ts +1 -6
  17. package/dist/cli/ui/components/solid/Header.d.ts.map +1 -0
  18. package/dist/cli/ui/components/solid/Header.js +13 -0
  19. package/dist/cli/ui/components/solid/Header.js.map +1 -0
  20. package/dist/cli/ui/components/solid/HelpOverlay.d.ts +8 -0
  21. package/dist/cli/ui/components/solid/HelpOverlay.d.ts.map +1 -0
  22. package/dist/cli/ui/components/solid/HelpOverlay.js +118 -0
  23. package/dist/cli/ui/components/solid/HelpOverlay.js.map +1 -0
  24. package/dist/cli/ui/components/solid/QuickStartStep.d.ts +17 -0
  25. package/dist/cli/ui/components/solid/QuickStartStep.d.ts.map +1 -0
  26. package/dist/cli/ui/components/solid/QuickStartStep.js +152 -0
  27. package/dist/cli/ui/components/solid/QuickStartStep.js.map +1 -0
  28. package/dist/cli/ui/components/solid/SelectInput.d.ts +22 -0
  29. package/dist/cli/ui/components/solid/SelectInput.d.ts.map +1 -0
  30. package/dist/cli/ui/components/solid/SelectInput.js +45 -0
  31. package/dist/cli/ui/components/solid/SelectInput.js.map +1 -0
  32. package/dist/cli/ui/components/solid/TextInput.d.ts +12 -0
  33. package/dist/cli/ui/components/solid/TextInput.d.ts.map +1 -0
  34. package/dist/cli/ui/components/solid/TextInput.js +9 -0
  35. package/dist/cli/ui/components/solid/TextInput.js.map +1 -0
  36. package/dist/cli/ui/components/solid/WizardController.d.ts +34 -0
  37. package/dist/cli/ui/components/solid/WizardController.d.ts.map +1 -0
  38. package/dist/cli/ui/components/solid/WizardController.js +223 -0
  39. package/dist/cli/ui/components/solid/WizardController.js.map +1 -0
  40. package/dist/cli/ui/components/solid/WizardPopup.d.ts +26 -0
  41. package/dist/cli/ui/components/solid/WizardPopup.d.ts.map +1 -0
  42. package/dist/cli/ui/components/solid/WizardPopup.js +68 -0
  43. package/dist/cli/ui/components/solid/WizardPopup.js.map +1 -0
  44. package/dist/cli/ui/components/solid/WizardSteps.d.ts +52 -0
  45. package/dist/cli/ui/components/solid/WizardSteps.d.ts.map +1 -0
  46. package/dist/cli/ui/components/solid/WizardSteps.js +419 -0
  47. package/dist/cli/ui/components/solid/WizardSteps.js.map +1 -0
  48. package/dist/cli/ui/core/index.d.ts +12 -0
  49. package/dist/cli/ui/core/index.d.ts.map +1 -0
  50. package/dist/cli/ui/core/index.js +15 -0
  51. package/dist/cli/ui/core/index.js.map +1 -0
  52. package/dist/cli/ui/core/keybindings.d.ts +106 -0
  53. package/dist/cli/ui/core/keybindings.d.ts.map +1 -0
  54. package/dist/cli/ui/core/keybindings.js +270 -0
  55. package/dist/cli/ui/core/keybindings.js.map +1 -0
  56. package/dist/cli/ui/core/theme.d.ts +123 -0
  57. package/dist/cli/ui/core/theme.d.ts.map +1 -0
  58. package/dist/cli/ui/core/theme.js +191 -0
  59. package/dist/cli/ui/core/theme.js.map +1 -0
  60. package/dist/cli/ui/core/types.d.ts +156 -0
  61. package/dist/cli/ui/core/types.d.ts.map +1 -0
  62. package/dist/cli/ui/core/types.js +10 -0
  63. package/dist/cli/ui/core/types.js.map +1 -0
  64. package/dist/cli/ui/hooks/solid/useScrollableList.d.ts +26 -0
  65. package/dist/cli/ui/hooks/solid/useScrollableList.d.ts.map +1 -0
  66. package/dist/cli/ui/hooks/solid/useScrollableList.js +89 -0
  67. package/dist/cli/ui/hooks/solid/useScrollableList.js.map +1 -0
  68. package/dist/cli/ui/hooks/solid/useTerminalSize.d.ts +10 -0
  69. package/dist/cli/ui/hooks/solid/useTerminalSize.d.ts.map +1 -0
  70. package/dist/cli/ui/hooks/solid/useTerminalSize.js +16 -0
  71. package/dist/cli/ui/hooks/solid/useTerminalSize.js.map +1 -0
  72. package/dist/cli/ui/index.solid.d.ts +5 -0
  73. package/dist/cli/ui/index.solid.d.ts.map +1 -0
  74. package/dist/cli/ui/index.solid.js +21 -0
  75. package/dist/cli/ui/index.solid.js.map +1 -0
  76. package/dist/cli/ui/screens/solid/BranchListScreen.d.ts +53 -0
  77. package/dist/cli/ui/screens/solid/BranchListScreen.d.ts.map +1 -0
  78. package/dist/cli/ui/screens/solid/BranchListScreen.js +829 -0
  79. package/dist/cli/ui/screens/solid/BranchListScreen.js.map +1 -0
  80. package/dist/cli/ui/screens/solid/ConfirmScreen.d.ts +11 -0
  81. package/dist/cli/ui/screens/solid/ConfirmScreen.d.ts.map +1 -0
  82. package/dist/cli/ui/screens/solid/ConfirmScreen.js +45 -0
  83. package/dist/cli/ui/screens/solid/ConfirmScreen.js.map +1 -0
  84. package/dist/cli/ui/screens/solid/EnvironmentScreen.d.ts +14 -0
  85. package/dist/cli/ui/screens/solid/EnvironmentScreen.d.ts.map +1 -0
  86. package/dist/cli/ui/screens/solid/EnvironmentScreen.js +90 -0
  87. package/dist/cli/ui/screens/solid/EnvironmentScreen.js.map +1 -0
  88. package/dist/cli/ui/screens/solid/ErrorScreen.d.ts +8 -0
  89. package/dist/cli/ui/screens/solid/ErrorScreen.d.ts.map +1 -0
  90. package/dist/cli/ui/screens/solid/ErrorScreen.js +18 -0
  91. package/dist/cli/ui/screens/solid/ErrorScreen.js.map +1 -0
  92. package/dist/cli/ui/screens/solid/InputScreen.d.ts +13 -0
  93. package/dist/cli/ui/screens/solid/InputScreen.d.ts.map +1 -0
  94. package/dist/cli/ui/screens/solid/InputScreen.js +17 -0
  95. package/dist/cli/ui/screens/solid/InputScreen.js.map +1 -0
  96. package/dist/cli/ui/screens/solid/LoadingIndicator.d.ts +9 -0
  97. package/dist/cli/ui/screens/solid/LoadingIndicator.d.ts.map +1 -0
  98. package/dist/cli/ui/screens/solid/LoadingIndicator.js +43 -0
  99. package/dist/cli/ui/screens/solid/LoadingIndicator.js.map +1 -0
  100. package/dist/cli/ui/{components/screens → screens/solid}/LogDetailScreen.d.ts +2 -2
  101. package/dist/cli/ui/screens/solid/LogDetailScreen.d.ts.map +1 -0
  102. package/dist/cli/ui/screens/solid/LogDetailScreen.js +34 -0
  103. package/dist/cli/ui/screens/solid/LogDetailScreen.js.map +1 -0
  104. package/dist/cli/ui/{components/screens/LogListScreen.d.ts → screens/solid/LogScreen.d.ts} +10 -4
  105. package/dist/cli/ui/screens/solid/LogScreen.d.ts.map +1 -0
  106. package/dist/cli/ui/screens/solid/LogScreen.js +333 -0
  107. package/dist/cli/ui/screens/solid/LogScreen.js.map +1 -0
  108. package/dist/cli/ui/screens/solid/ProfileEnvScreen.d.ts +17 -0
  109. package/dist/cli/ui/screens/solid/ProfileEnvScreen.d.ts.map +1 -0
  110. package/dist/cli/ui/screens/solid/ProfileEnvScreen.js +115 -0
  111. package/dist/cli/ui/screens/solid/ProfileEnvScreen.js.map +1 -0
  112. package/dist/cli/ui/screens/solid/ProfileScreen.d.ts +17 -0
  113. package/dist/cli/ui/screens/solid/ProfileScreen.d.ts.map +1 -0
  114. package/dist/cli/ui/screens/solid/ProfileScreen.js +50 -0
  115. package/dist/cli/ui/screens/solid/ProfileScreen.js.map +1 -0
  116. package/dist/cli/ui/screens/solid/SelectorScreen.d.ts +20 -0
  117. package/dist/cli/ui/screens/solid/SelectorScreen.d.ts.map +1 -0
  118. package/dist/cli/ui/screens/solid/SelectorScreen.js +98 -0
  119. package/dist/cli/ui/screens/solid/SelectorScreen.js.map +1 -0
  120. package/dist/cli/ui/screens/solid/WorktreeCreateScreen.d.ts +13 -0
  121. package/dist/cli/ui/screens/solid/WorktreeCreateScreen.d.ts.map +1 -0
  122. package/dist/cli/ui/screens/solid/WorktreeCreateScreen.js +59 -0
  123. package/dist/cli/ui/screens/solid/WorktreeCreateScreen.js.map +1 -0
  124. package/dist/cli/ui/stores/appStore.d.ts +143 -0
  125. package/dist/cli/ui/stores/appStore.d.ts.map +1 -0
  126. package/dist/cli/ui/stores/appStore.js +158 -0
  127. package/dist/cli/ui/stores/appStore.js.map +1 -0
  128. package/dist/cli/ui/stores/branchStore.d.ts +159 -0
  129. package/dist/cli/ui/stores/branchStore.d.ts.map +1 -0
  130. package/dist/cli/ui/stores/branchStore.js +275 -0
  131. package/dist/cli/ui/stores/branchStore.js.map +1 -0
  132. package/dist/cli/ui/stores/index.d.ts +11 -0
  133. package/dist/cli/ui/stores/index.d.ts.map +1 -0
  134. package/dist/cli/ui/stores/index.js +14 -0
  135. package/dist/cli/ui/stores/index.js.map +1 -0
  136. package/dist/cli/ui/stores/uiStore.d.ts +146 -0
  137. package/dist/cli/ui/stores/uiStore.d.ts.map +1 -0
  138. package/dist/cli/ui/stores/uiStore.js +166 -0
  139. package/dist/cli/ui/stores/uiStore.js.map +1 -0
  140. package/dist/cli/ui/types.d.ts +17 -1
  141. package/dist/cli/ui/types.d.ts.map +1 -1
  142. package/dist/cli/ui/utils/branchFormatter.d.ts +1 -0
  143. package/dist/cli/ui/utils/branchFormatter.d.ts.map +1 -1
  144. package/dist/cli/ui/utils/branchFormatter.js +36 -217
  145. package/dist/cli/ui/utils/branchFormatter.js.map +1 -1
  146. package/dist/cli/ui/utils/continueSession.d.ts +18 -0
  147. package/dist/cli/ui/utils/continueSession.d.ts.map +1 -1
  148. package/dist/cli/ui/utils/continueSession.js +90 -2
  149. package/dist/cli/ui/utils/continueSession.js.map +1 -1
  150. package/dist/cli/ui/utils/versionCache.d.ts +37 -0
  151. package/dist/cli/ui/utils/versionCache.d.ts.map +1 -0
  152. package/dist/cli/ui/utils/versionCache.js +70 -0
  153. package/dist/cli/ui/utils/versionCache.js.map +1 -0
  154. package/dist/cli/ui/utils/versionFetcher.d.ts +41 -0
  155. package/dist/cli/ui/utils/versionFetcher.d.ts.map +1 -0
  156. package/dist/cli/ui/utils/versionFetcher.js +89 -0
  157. package/dist/cli/ui/utils/versionFetcher.js.map +1 -0
  158. package/dist/client/assets/{index-ChHC-Puh.css → index-BbfV7Wuj.css} +1 -1
  159. package/dist/client/assets/index-CoAyq5x1.js +78 -0
  160. package/dist/client/index.html +2 -2
  161. package/dist/codex.d.ts +2 -0
  162. package/dist/codex.d.ts.map +1 -1
  163. package/dist/codex.js +109 -39
  164. package/dist/codex.js.map +1 -1
  165. package/dist/config/builtin-coding-agents.js +4 -4
  166. package/dist/config/builtin-coding-agents.js.map +1 -1
  167. package/dist/config/index.d.ts +2 -0
  168. package/dist/config/index.d.ts.map +1 -1
  169. package/dist/config/index.js +11 -0
  170. package/dist/config/index.js.map +1 -1
  171. package/dist/gemini.d.ts +2 -0
  172. package/dist/gemini.d.ts.map +1 -1
  173. package/dist/gemini.js +77 -39
  174. package/dist/gemini.js.map +1 -1
  175. package/dist/index.d.ts +1 -1
  176. package/dist/index.d.ts.map +1 -1
  177. package/dist/index.js +153 -103
  178. package/dist/index.js.map +1 -1
  179. package/dist/launcher.d.ts.map +1 -1
  180. package/dist/launcher.js +56 -6
  181. package/dist/launcher.js.map +1 -1
  182. package/dist/logging/agentOutput.d.ts +21 -0
  183. package/dist/logging/agentOutput.d.ts.map +1 -0
  184. package/dist/logging/agentOutput.js +164 -0
  185. package/dist/logging/agentOutput.js.map +1 -0
  186. package/dist/logging/formatter.d.ts.map +1 -1
  187. package/dist/logging/formatter.js +18 -4
  188. package/dist/logging/formatter.js.map +1 -1
  189. package/dist/logging/logger.d.ts.map +1 -1
  190. package/dist/logging/logger.js +28 -9
  191. package/dist/logging/logger.js.map +1 -1
  192. package/dist/logging/reader.d.ts +21 -0
  193. package/dist/logging/reader.d.ts.map +1 -1
  194. package/dist/logging/reader.js +79 -0
  195. package/dist/logging/reader.js.map +1 -1
  196. package/dist/opentui/highlights-eq9cgrbb.scm +604 -0
  197. package/dist/opentui/highlights-ghv9g403.scm +205 -0
  198. package/dist/opentui/highlights-hk7bwhj4.scm +284 -0
  199. package/dist/opentui/highlights-r812a2qc.scm +150 -0
  200. package/dist/opentui/highlights-x6tmsnaa.scm +115 -0
  201. package/dist/opentui/index.solid.d.ts +2 -0
  202. package/dist/opentui/index.solid.d.ts.map +1 -0
  203. package/dist/opentui/index.solid.js +53687 -0
  204. package/dist/opentui/index.solid.js.map +1 -0
  205. package/dist/opentui/injections-73j83es3.scm +27 -0
  206. package/dist/opentui/tree-sitter-javascript-nd0q4pe9.wasm +0 -0
  207. package/dist/opentui/tree-sitter-markdown-411r6y9b.wasm +0 -0
  208. package/dist/opentui/tree-sitter-markdown_inline-j5349f42.wasm +0 -0
  209. package/dist/opentui/tree-sitter-typescript-zxjzwt75.wasm +0 -0
  210. package/dist/opentui/tree-sitter-zig-e78zbjpm.wasm +0 -0
  211. package/dist/repositories/worktree.repository.d.ts +1 -0
  212. package/dist/repositories/worktree.repository.d.ts.map +1 -1
  213. package/dist/repositories/worktree.repository.js +7 -0
  214. package/dist/repositories/worktree.repository.js.map +1 -1
  215. package/dist/services/codingAgentResolver.d.ts +2 -0
  216. package/dist/services/codingAgentResolver.d.ts.map +1 -1
  217. package/dist/services/codingAgentResolver.js +30 -4
  218. package/dist/services/codingAgentResolver.js.map +1 -1
  219. package/dist/services/dependency-installer.d.ts.map +1 -1
  220. package/dist/services/dependency-installer.js +2 -7
  221. package/dist/services/dependency-installer.js.map +1 -1
  222. package/dist/types/api.d.ts +3 -0
  223. package/dist/types/api.d.ts.map +1 -1
  224. package/dist/types/coding-agent.d.ts +62 -0
  225. package/dist/types/coding-agent.d.ts.map +1 -0
  226. package/dist/types/coding-agent.js +29 -0
  227. package/dist/types/coding-agent.js.map +1 -0
  228. package/dist/types/tools.d.ts +17 -0
  229. package/dist/types/tools.d.ts.map +1 -1
  230. package/dist/utils/coding-agent-colors.d.ts +88 -0
  231. package/dist/utils/coding-agent-colors.d.ts.map +1 -0
  232. package/dist/utils/coding-agent-colors.js +137 -0
  233. package/dist/utils/coding-agent-colors.js.map +1 -0
  234. package/dist/utils/command.d.ts +1 -1
  235. package/dist/utils/command.js +1 -1
  236. package/dist/utils/error-utils.d.ts +27 -0
  237. package/dist/utils/error-utils.d.ts.map +1 -0
  238. package/dist/utils/error-utils.js +98 -0
  239. package/dist/utils/error-utils.js.map +1 -0
  240. package/dist/utils/npmRegistry.d.ts +61 -0
  241. package/dist/utils/npmRegistry.d.ts.map +1 -0
  242. package/dist/utils/npmRegistry.js +180 -0
  243. package/dist/utils/npmRegistry.js.map +1 -0
  244. package/dist/utils/prompt.d.ts +1 -1
  245. package/dist/utils/prompt.js +1 -1
  246. package/dist/utils/session/common.d.ts +8 -0
  247. package/dist/utils/session/common.d.ts.map +1 -1
  248. package/dist/utils/session/common.js +22 -0
  249. package/dist/utils/session/common.js.map +1 -1
  250. package/dist/utils/session/parsers/claude.d.ts +10 -4
  251. package/dist/utils/session/parsers/claude.d.ts.map +1 -1
  252. package/dist/utils/session/parsers/claude.js +64 -18
  253. package/dist/utils/session/parsers/claude.js.map +1 -1
  254. package/dist/utils/session/parsers/codex.d.ts.map +1 -1
  255. package/dist/utils/session/parsers/codex.js +47 -20
  256. package/dist/utils/session/parsers/codex.js.map +1 -1
  257. package/dist/utils/session/parsers/gemini.d.ts.map +1 -1
  258. package/dist/utils/session/parsers/gemini.js +43 -6
  259. package/dist/utils/session/parsers/gemini.js.map +1 -1
  260. package/dist/utils/session/parsers/opencode.d.ts.map +1 -1
  261. package/dist/utils/session/parsers/opencode.js +43 -6
  262. package/dist/utils/session/parsers/opencode.js.map +1 -1
  263. package/dist/utils/session/types.d.ts +7 -0
  264. package/dist/utils/session/types.d.ts.map +1 -1
  265. package/dist/utils/terminal.d.ts +1 -0
  266. package/dist/utils/terminal.d.ts.map +1 -1
  267. package/dist/utils/terminal.js +20 -0
  268. package/dist/utils/terminal.js.map +1 -1
  269. package/dist/utils.d.ts +9 -0
  270. package/dist/utils.d.ts.map +1 -1
  271. package/dist/utils.js +33 -2
  272. package/dist/utils.js.map +1 -1
  273. package/dist/web/client/src/components/CodingAgentLaunchModal.d.ts.map +1 -1
  274. package/dist/web/client/src/components/CodingAgentLaunchModal.js +7 -16
  275. package/dist/web/client/src/components/CodingAgentLaunchModal.js.map +1 -1
  276. package/dist/web/client/src/components/branch-detail/BranchInfoCards.d.ts.map +1 -1
  277. package/dist/web/client/src/components/branch-detail/BranchInfoCards.js +7 -2
  278. package/dist/web/client/src/components/branch-detail/BranchInfoCards.js.map +1 -1
  279. package/dist/web/client/src/components/branch-detail/SessionHistoryTable.d.ts.map +1 -1
  280. package/dist/web/client/src/components/branch-detail/SessionHistoryTable.js +2 -1
  281. package/dist/web/client/src/components/branch-detail/SessionHistoryTable.js.map +1 -1
  282. package/dist/web/client/src/components/branch-detail/ToolLauncher.d.ts +2 -2
  283. package/dist/web/client/src/components/branch-detail/ToolLauncher.d.ts.map +1 -1
  284. package/dist/web/client/src/components/branch-detail/ToolLauncher.js +5 -5
  285. package/dist/web/client/src/components/branch-detail/ToolLauncher.js.map +1 -1
  286. package/dist/web/client/src/components/ui/alert.d.ts +1 -1
  287. package/dist/web/client/src/lib/coding-agent-colors.d.ts +86 -0
  288. package/dist/web/client/src/lib/coding-agent-colors.d.ts.map +1 -0
  289. package/dist/web/client/src/lib/coding-agent-colors.js +135 -0
  290. package/dist/web/client/src/lib/coding-agent-colors.js.map +1 -0
  291. package/dist/web/client/src/pages/BranchDetailPage.js +10 -10
  292. package/dist/web/client/src/pages/BranchDetailPage.js.map +1 -1
  293. package/dist/web/server/pty/manager.d.ts +2 -0
  294. package/dist/web/server/pty/manager.d.ts.map +1 -1
  295. package/dist/web/server/pty/manager.js +104 -0
  296. package/dist/web/server/pty/manager.js.map +1 -1
  297. package/dist/web/server/routes/sessions.d.ts.map +1 -1
  298. package/dist/web/server/routes/sessions.js +5 -1
  299. package/dist/web/server/routes/sessions.js.map +1 -1
  300. package/dist/web/server/services/branches.d.ts.map +1 -1
  301. package/dist/web/server/services/branches.js +10 -8
  302. package/dist/web/server/services/branches.js.map +1 -1
  303. package/dist/web/server/services/worktrees.js +2 -2
  304. package/dist/web/server/services/worktrees.js.map +1 -1
  305. package/dist/worktree.d.ts +50 -1
  306. package/dist/worktree.d.ts.map +1 -1
  307. package/dist/worktree.js +292 -100
  308. package/dist/worktree.js.map +1 -1
  309. package/package.json +13 -14
  310. package/src/claude.ts +129 -95
  311. package/src/cli/ui/App.solid.tsx +2096 -0
  312. package/src/cli/ui/__tests__/solid/AppSolid.cleanup.test.tsx +1084 -0
  313. package/src/cli/ui/__tests__/solid/BranchListScreen.test.tsx +343 -0
  314. package/src/cli/ui/__tests__/solid/ConfirmScreen.test.tsx +77 -0
  315. package/src/cli/ui/__tests__/solid/LogScreen.test.tsx +351 -0
  316. package/src/cli/ui/__tests__/solid/components/QuickStartStep.test.tsx +308 -0
  317. package/src/cli/ui/__tests__/solid/components/WizardPopup.test.tsx +231 -0
  318. package/src/cli/ui/__tests__/solid/components/WizardSteps.test.tsx +241 -0
  319. package/src/cli/ui/__tests__/utils/branchFormatter.test.ts +79 -334
  320. package/src/cli/ui/__tests__/utils/clipboard.test.ts +3 -3
  321. package/src/cli/ui/__tests__/utils/statisticsCalculator.test.ts +1 -1
  322. package/src/cli/ui/components/solid/Footer.tsx +36 -0
  323. package/src/cli/ui/components/{parts → solid}/Header.tsx +17 -28
  324. package/src/cli/ui/components/solid/HelpOverlay.tsx +194 -0
  325. package/src/cli/ui/components/solid/QuickStartStep.tsx +209 -0
  326. package/src/cli/ui/components/{parts → solid}/ScrollableList.tsx +7 -8
  327. package/src/cli/ui/components/solid/SearchInput.tsx +42 -0
  328. package/src/cli/ui/components/solid/SelectInput.tsx +88 -0
  329. package/src/cli/ui/components/solid/Stats.tsx +92 -0
  330. package/src/cli/ui/components/solid/TextInput.tsx +49 -0
  331. package/src/cli/ui/components/solid/WizardController.tsx +393 -0
  332. package/src/cli/ui/components/solid/WizardPopup.tsx +135 -0
  333. package/src/cli/ui/components/solid/WizardSteps.tsx +736 -0
  334. package/src/cli/ui/core/index.ts +17 -0
  335. package/src/cli/ui/core/keybindings.ts +367 -0
  336. package/src/cli/ui/core/theme.ts +266 -0
  337. package/src/cli/ui/core/types.ts +235 -0
  338. package/src/cli/ui/hooks/solid/useAsyncOperation.ts +78 -0
  339. package/src/cli/ui/hooks/solid/useFilter.ts +86 -0
  340. package/src/cli/ui/hooks/solid/useGitOperations.ts +81 -0
  341. package/src/cli/ui/hooks/solid/useKeyHandler.ts +103 -0
  342. package/src/cli/ui/hooks/solid/useScrollableList.ts +149 -0
  343. package/src/cli/ui/hooks/solid/useSelection.ts +77 -0
  344. package/src/cli/ui/hooks/solid/useTerminalSize.ts +22 -0
  345. package/src/cli/ui/index.solid.ts +28 -0
  346. package/src/cli/ui/screens/solid/BranchListScreen.tsx +1153 -0
  347. package/src/cli/ui/screens/solid/ConfirmScreen.tsx +86 -0
  348. package/src/cli/ui/screens/solid/EnvironmentScreen.tsx +161 -0
  349. package/src/cli/ui/screens/solid/ErrorScreen.tsx +42 -0
  350. package/src/cli/ui/screens/solid/InputScreen.tsx +55 -0
  351. package/src/cli/ui/screens/solid/LoadingIndicator.tsx +77 -0
  352. package/src/cli/ui/screens/solid/LogDetailScreen.tsx +75 -0
  353. package/src/cli/ui/screens/solid/LogScreen.tsx +504 -0
  354. package/src/cli/ui/screens/solid/ProfileEnvScreen.tsx +196 -0
  355. package/src/cli/ui/screens/solid/ProfileScreen.tsx +98 -0
  356. package/src/cli/ui/screens/solid/SelectorScreen.tsx +181 -0
  357. package/src/cli/ui/screens/solid/SettingsScreen.tsx +52 -0
  358. package/src/cli/ui/screens/solid/WorktreeCreateScreen.tsx +136 -0
  359. package/src/cli/ui/screens/solid/WorktreeDeleteScreen.tsx +40 -0
  360. package/src/cli/ui/stores/appStore.ts +208 -0
  361. package/src/cli/ui/stores/branchStore.ts +357 -0
  362. package/src/cli/ui/stores/index.ts +31 -0
  363. package/src/cli/ui/stores/uiStore.ts +226 -0
  364. package/src/cli/ui/types.ts +21 -3
  365. package/src/cli/ui/utils/__tests__/branchFormatter.test.ts +227 -0
  366. package/src/cli/ui/utils/branchFormatter.ts +43 -222
  367. package/src/cli/ui/utils/continueSession.ts +133 -2
  368. package/src/cli/ui/utils/modelOptions.test.ts +1 -1
  369. package/src/cli/ui/utils/versionCache.ts +93 -0
  370. package/src/cli/ui/utils/versionFetcher.ts +120 -0
  371. package/src/codex.ts +138 -39
  372. package/src/config/__tests__/saveSession.test.ts +143 -0
  373. package/src/config/builtin-coding-agents.ts +4 -4
  374. package/src/config/index.ts +14 -0
  375. package/src/gemini.ts +107 -46
  376. package/src/index.test.ts +25 -19
  377. package/src/index.ts +202 -143
  378. package/src/launcher.ts +66 -6
  379. package/src/logging/agentOutput.ts +216 -0
  380. package/src/logging/formatter.ts +23 -4
  381. package/src/logging/logger.ts +34 -10
  382. package/src/logging/reader.ts +117 -0
  383. package/src/opentui/index.solid.ts +1 -0
  384. package/src/repositories/worktree.repository.ts +8 -0
  385. package/src/services/__tests__/BatchMergeService.test.ts +83 -67
  386. package/src/services/__tests__/WorktreeOrchestrator.test.ts +8 -7
  387. package/src/services/codingAgentResolver.ts +30 -4
  388. package/src/services/dependency-installer.ts +2 -9
  389. package/src/types/api.ts +3 -0
  390. package/src/types/coding-agent.ts +85 -0
  391. package/src/types/tools.ts +19 -0
  392. package/src/utils/__tests__/npmRegistry.test.ts +250 -0
  393. package/src/utils/__tests__/prompt.test.ts +4 -5
  394. package/src/utils/coding-agent-colors.ts +165 -0
  395. package/src/utils/command.ts +1 -1
  396. package/src/utils/error-utils.ts +133 -0
  397. package/src/utils/npmRegistry.ts +249 -0
  398. package/src/utils/prompt.ts +1 -1
  399. package/src/utils/session/common.ts +28 -0
  400. package/src/utils/session/parsers/claude.ts +79 -29
  401. package/src/utils/session/parsers/codex.ts +50 -18
  402. package/src/utils/session/parsers/gemini.ts +46 -5
  403. package/src/utils/session/parsers/opencode.ts +46 -5
  404. package/src/utils/session/types.ts +4 -0
  405. package/src/utils/terminal.ts +24 -0
  406. package/src/utils.test.ts +1 -1
  407. package/src/utils.ts +37 -4
  408. package/src/web/client/src/components/CodingAgentLaunchModal.tsx +12 -21
  409. package/src/web/client/src/components/branch-detail/BranchInfoCards.tsx +16 -1
  410. package/src/web/client/src/components/branch-detail/SessionHistoryTable.tsx +7 -1
  411. package/src/web/client/src/components/branch-detail/ToolLauncher.tsx +11 -6
  412. package/src/web/client/src/lib/coding-agent-colors.ts +149 -0
  413. package/src/web/client/src/pages/BranchDetailPage.tsx +11 -11
  414. package/src/web/server/pty/manager.ts +139 -0
  415. package/src/web/server/routes/sessions.ts +6 -0
  416. package/src/web/server/services/branches.ts +11 -8
  417. package/src/web/server/services/worktrees.ts +2 -2
  418. package/src/worktree.ts +386 -114
  419. package/dist/cli/ui/components/App.d.ts +0 -25
  420. package/dist/cli/ui/components/App.d.ts.map +0 -1
  421. package/dist/cli/ui/components/App.js +0 -1006
  422. package/dist/cli/ui/components/App.js.map +0 -1
  423. package/dist/cli/ui/components/common/Confirm.d.ts +0 -13
  424. package/dist/cli/ui/components/common/Confirm.d.ts.map +0 -1
  425. package/dist/cli/ui/components/common/Confirm.js +0 -20
  426. package/dist/cli/ui/components/common/Confirm.js.map +0 -1
  427. package/dist/cli/ui/components/common/ErrorBoundary.d.ts +0 -23
  428. package/dist/cli/ui/components/common/ErrorBoundary.d.ts.map +0 -1
  429. package/dist/cli/ui/components/common/ErrorBoundary.js +0 -37
  430. package/dist/cli/ui/components/common/ErrorBoundary.js.map +0 -1
  431. package/dist/cli/ui/components/common/Input.d.ts +0 -19
  432. package/dist/cli/ui/components/common/Input.d.ts.map +0 -1
  433. package/dist/cli/ui/components/common/Input.js +0 -22
  434. package/dist/cli/ui/components/common/Input.js.map +0 -1
  435. package/dist/cli/ui/components/common/LoadingIndicator.d.ts +0 -19
  436. package/dist/cli/ui/components/common/LoadingIndicator.d.ts.map +0 -1
  437. package/dist/cli/ui/components/common/LoadingIndicator.js +0 -61
  438. package/dist/cli/ui/components/common/LoadingIndicator.js.map +0 -1
  439. package/dist/cli/ui/components/common/Select.d.ts +0 -38
  440. package/dist/cli/ui/components/common/Select.d.ts.map +0 -1
  441. package/dist/cli/ui/components/common/Select.js +0 -151
  442. package/dist/cli/ui/components/common/Select.js.map +0 -1
  443. package/dist/cli/ui/components/common/SpinnerIcon.d.ts +0 -20
  444. package/dist/cli/ui/components/common/SpinnerIcon.d.ts.map +0 -1
  445. package/dist/cli/ui/components/common/SpinnerIcon.js +0 -61
  446. package/dist/cli/ui/components/common/SpinnerIcon.js.map +0 -1
  447. package/dist/cli/ui/components/parts/Footer.d.ts +0 -15
  448. package/dist/cli/ui/components/parts/Footer.d.ts.map +0 -1
  449. package/dist/cli/ui/components/parts/Footer.js +0 -20
  450. package/dist/cli/ui/components/parts/Footer.js.map +0 -1
  451. package/dist/cli/ui/components/parts/Header.d.ts.map +0 -1
  452. package/dist/cli/ui/components/parts/Header.js +0 -24
  453. package/dist/cli/ui/components/parts/Header.js.map +0 -1
  454. package/dist/cli/ui/components/parts/MergeStatusList.d.ts +0 -13
  455. package/dist/cli/ui/components/parts/MergeStatusList.d.ts.map +0 -1
  456. package/dist/cli/ui/components/parts/MergeStatusList.js +0 -52
  457. package/dist/cli/ui/components/parts/MergeStatusList.js.map +0 -1
  458. package/dist/cli/ui/components/parts/ProgressBar.d.ts +0 -13
  459. package/dist/cli/ui/components/parts/ProgressBar.d.ts.map +0 -1
  460. package/dist/cli/ui/components/parts/ProgressBar.js +0 -53
  461. package/dist/cli/ui/components/parts/ProgressBar.js.map +0 -1
  462. package/dist/cli/ui/components/parts/ScrollableList.d.ts +0 -12
  463. package/dist/cli/ui/components/parts/ScrollableList.d.ts.map +0 -1
  464. package/dist/cli/ui/components/parts/ScrollableList.js +0 -11
  465. package/dist/cli/ui/components/parts/ScrollableList.js.map +0 -1
  466. package/dist/cli/ui/components/parts/Stats.d.ts +0 -10
  467. package/dist/cli/ui/components/parts/Stats.d.ts.map +0 -1
  468. package/dist/cli/ui/components/parts/Stats.js +0 -55
  469. package/dist/cli/ui/components/parts/Stats.js.map +0 -1
  470. package/dist/cli/ui/components/screens/BatchMergeProgressScreen.d.ts +0 -17
  471. package/dist/cli/ui/components/screens/BatchMergeProgressScreen.d.ts.map +0 -1
  472. package/dist/cli/ui/components/screens/BatchMergeProgressScreen.js +0 -42
  473. package/dist/cli/ui/components/screens/BatchMergeProgressScreen.js.map +0 -1
  474. package/dist/cli/ui/components/screens/BatchMergeResultScreen.d.ts +0 -17
  475. package/dist/cli/ui/components/screens/BatchMergeResultScreen.d.ts.map +0 -1
  476. package/dist/cli/ui/components/screens/BatchMergeResultScreen.js +0 -72
  477. package/dist/cli/ui/components/screens/BatchMergeResultScreen.js.map +0 -1
  478. package/dist/cli/ui/components/screens/BranchCreatorScreen.d.ts +0 -18
  479. package/dist/cli/ui/components/screens/BranchCreatorScreen.d.ts.map +0 -1
  480. package/dist/cli/ui/components/screens/BranchCreatorScreen.js +0 -151
  481. package/dist/cli/ui/components/screens/BranchCreatorScreen.js.map +0 -1
  482. package/dist/cli/ui/components/screens/BranchListScreen.d.ts +0 -60
  483. package/dist/cli/ui/components/screens/BranchListScreen.d.ts.map +0 -1
  484. package/dist/cli/ui/components/screens/BranchListScreen.js +0 -476
  485. package/dist/cli/ui/components/screens/BranchListScreen.js.map +0 -1
  486. package/dist/cli/ui/components/screens/BranchQuickStartScreen.d.ts +0 -30
  487. package/dist/cli/ui/components/screens/BranchQuickStartScreen.d.ts.map +0 -1
  488. package/dist/cli/ui/components/screens/BranchQuickStartScreen.js +0 -148
  489. package/dist/cli/ui/components/screens/BranchQuickStartScreen.js.map +0 -1
  490. package/dist/cli/ui/components/screens/CodingAgentSelectorScreen.d.ts +0 -27
  491. package/dist/cli/ui/components/screens/CodingAgentSelectorScreen.d.ts.map +0 -1
  492. package/dist/cli/ui/components/screens/CodingAgentSelectorScreen.js +0 -93
  493. package/dist/cli/ui/components/screens/CodingAgentSelectorScreen.js.map +0 -1
  494. package/dist/cli/ui/components/screens/EnvironmentProfileScreen.d.ts +0 -19
  495. package/dist/cli/ui/components/screens/EnvironmentProfileScreen.d.ts.map +0 -1
  496. package/dist/cli/ui/components/screens/EnvironmentProfileScreen.js +0 -577
  497. package/dist/cli/ui/components/screens/EnvironmentProfileScreen.js.map +0 -1
  498. package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.d.ts +0 -45
  499. package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.d.ts.map +0 -1
  500. package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.js +0 -95
  501. package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.js.map +0 -1
  502. package/dist/cli/ui/components/screens/LogDatePickerScreen.d.ts +0 -10
  503. package/dist/cli/ui/components/screens/LogDatePickerScreen.d.ts.map +0 -1
  504. package/dist/cli/ui/components/screens/LogDatePickerScreen.js +0 -44
  505. package/dist/cli/ui/components/screens/LogDatePickerScreen.js.map +0 -1
  506. package/dist/cli/ui/components/screens/LogDetailScreen.d.ts.map +0 -1
  507. package/dist/cli/ui/components/screens/LogDetailScreen.js +0 -34
  508. package/dist/cli/ui/components/screens/LogDetailScreen.js.map +0 -1
  509. package/dist/cli/ui/components/screens/LogListScreen.d.ts.map +0 -1
  510. package/dist/cli/ui/components/screens/LogListScreen.js +0 -107
  511. package/dist/cli/ui/components/screens/LogListScreen.js.map +0 -1
  512. package/dist/cli/ui/components/screens/ModelSelectorScreen.d.ts +0 -24
  513. package/dist/cli/ui/components/screens/ModelSelectorScreen.d.ts.map +0 -1
  514. package/dist/cli/ui/components/screens/ModelSelectorScreen.js +0 -197
  515. package/dist/cli/ui/components/screens/ModelSelectorScreen.js.map +0 -1
  516. package/dist/cli/ui/components/screens/PRCleanupScreen.d.ts +0 -29
  517. package/dist/cli/ui/components/screens/PRCleanupScreen.d.ts.map +0 -1
  518. package/dist/cli/ui/components/screens/PRCleanupScreen.js +0 -92
  519. package/dist/cli/ui/components/screens/PRCleanupScreen.js.map +0 -1
  520. package/dist/cli/ui/components/screens/SessionSelectorScreen.d.ts +0 -31
  521. package/dist/cli/ui/components/screens/SessionSelectorScreen.d.ts.map +0 -1
  522. package/dist/cli/ui/components/screens/SessionSelectorScreen.js +0 -67
  523. package/dist/cli/ui/components/screens/SessionSelectorScreen.js.map +0 -1
  524. package/dist/cli/ui/hooks/useAppInput.d.ts +0 -21
  525. package/dist/cli/ui/hooks/useAppInput.d.ts.map +0 -1
  526. package/dist/cli/ui/hooks/useAppInput.js +0 -138
  527. package/dist/cli/ui/hooks/useAppInput.js.map +0 -1
  528. package/dist/cli/ui/hooks/useBatchMerge.d.ts +0 -17
  529. package/dist/cli/ui/hooks/useBatchMerge.d.ts.map +0 -1
  530. package/dist/cli/ui/hooks/useBatchMerge.js +0 -77
  531. package/dist/cli/ui/hooks/useBatchMerge.js.map +0 -1
  532. package/dist/cli/ui/hooks/useGitData.d.ts +0 -21
  533. package/dist/cli/ui/hooks/useGitData.d.ts.map +0 -1
  534. package/dist/cli/ui/hooks/useGitData.js +0 -229
  535. package/dist/cli/ui/hooks/useGitData.js.map +0 -1
  536. package/dist/cli/ui/hooks/useProfiles.d.ts +0 -41
  537. package/dist/cli/ui/hooks/useProfiles.d.ts.map +0 -1
  538. package/dist/cli/ui/hooks/useProfiles.js +0 -136
  539. package/dist/cli/ui/hooks/useProfiles.js.map +0 -1
  540. package/dist/cli/ui/hooks/useScreenState.d.ts +0 -12
  541. package/dist/cli/ui/hooks/useScreenState.d.ts.map +0 -1
  542. package/dist/cli/ui/hooks/useScreenState.js +0 -30
  543. package/dist/cli/ui/hooks/useScreenState.js.map +0 -1
  544. package/dist/cli/ui/hooks/useTerminalSize.d.ts +0 -9
  545. package/dist/cli/ui/hooks/useTerminalSize.d.ts.map +0 -1
  546. package/dist/cli/ui/hooks/useTerminalSize.js +0 -24
  547. package/dist/cli/ui/hooks/useTerminalSize.js.map +0 -1
  548. package/dist/cli/ui/hooks/useToolStatus.d.ts +0 -30
  549. package/dist/cli/ui/hooks/useToolStatus.d.ts.map +0 -1
  550. package/dist/cli/ui/hooks/useToolStatus.js +0 -49
  551. package/dist/cli/ui/hooks/useToolStatus.js.map +0 -1
  552. package/dist/cli/ui/screens/BranchActionSelectorScreen.d.ts +0 -24
  553. package/dist/cli/ui/screens/BranchActionSelectorScreen.d.ts.map +0 -1
  554. package/dist/cli/ui/screens/BranchActionSelectorScreen.js +0 -65
  555. package/dist/cli/ui/screens/BranchActionSelectorScreen.js.map +0 -1
  556. package/dist/client/assets/index-LNPtOrn3.js +0 -78
  557. package/src/cli/ui/__tests__/SKIPPED_TESTS.md +0 -119
  558. package/src/cli/ui/__tests__/acceptance/branchList.acceptance.test.tsx.skip +0 -239
  559. package/src/cli/ui/__tests__/acceptance/navigation.acceptance.test.tsx +0 -225
  560. package/src/cli/ui/__tests__/acceptance/realtimeUpdate.acceptance.test.tsx.skip +0 -219
  561. package/src/cli/ui/__tests__/components/App.protected-branch.test.tsx +0 -212
  562. package/src/cli/ui/__tests__/components/App.shortcuts.test.tsx +0 -440
  563. package/src/cli/ui/__tests__/components/App.test.tsx +0 -365
  564. package/src/cli/ui/__tests__/components/ModelSelectorScreen.initial.test.tsx +0 -91
  565. package/src/cli/ui/__tests__/components/common/Confirm.test.tsx +0 -80
  566. package/src/cli/ui/__tests__/components/common/ErrorBoundary.test.tsx +0 -104
  567. package/src/cli/ui/__tests__/components/common/Input.test.tsx +0 -100
  568. package/src/cli/ui/__tests__/components/common/LoadingIndicator.test.tsx +0 -148
  569. package/src/cli/ui/__tests__/components/common/Select.memo.test.tsx +0 -255
  570. package/src/cli/ui/__tests__/components/common/Select.test.tsx +0 -335
  571. package/src/cli/ui/__tests__/components/parts/Footer.test.tsx +0 -65
  572. package/src/cli/ui/__tests__/components/parts/Header.test.tsx +0 -55
  573. package/src/cli/ui/__tests__/components/parts/ScrollableList.test.tsx +0 -69
  574. package/src/cli/ui/__tests__/components/parts/Stats.test.tsx +0 -148
  575. package/src/cli/ui/__tests__/components/screens/BranchCreatorScreen.test.tsx +0 -253
  576. package/src/cli/ui/__tests__/components/screens/BranchListScreen.test.tsx +0 -1070
  577. package/src/cli/ui/__tests__/components/screens/BranchQuickStartScreen.test.tsx +0 -142
  578. package/src/cli/ui/__tests__/components/screens/CodingAgentSelectorScreen.test.tsx +0 -174
  579. package/src/cli/ui/__tests__/components/screens/ExecutionModeSelectorScreen.test.tsx +0 -182
  580. package/src/cli/ui/__tests__/components/screens/LogDetailScreen.test.tsx +0 -57
  581. package/src/cli/ui/__tests__/components/screens/LogListScreen.test.tsx +0 -102
  582. package/src/cli/ui/__tests__/components/screens/PRCleanupScreen.test.tsx +0 -216
  583. package/src/cli/ui/__tests__/components/screens/SessionSelectorScreen.test.tsx +0 -147
  584. package/src/cli/ui/__tests__/hooks/useGitData.nonblocking.test.tsx +0 -206
  585. package/src/cli/ui/__tests__/hooks/useGitData.test.ts +0 -197
  586. package/src/cli/ui/__tests__/hooks/useGitData.test.ts.skip +0 -228
  587. package/src/cli/ui/__tests__/hooks/useScreenState.test.ts +0 -147
  588. package/src/cli/ui/__tests__/hooks/useTerminalSize.test.ts +0 -99
  589. package/src/cli/ui/__tests__/integration/branchList.test.tsx.skip +0 -253
  590. package/src/cli/ui/__tests__/integration/edgeCases.test.tsx +0 -436
  591. package/src/cli/ui/__tests__/integration/navigation.test.tsx +0 -514
  592. package/src/cli/ui/__tests__/integration/realtimeUpdate.test.tsx +0 -509
  593. package/src/cli/ui/__tests__/integration/realtimeUpdate.test.tsx.skip +0 -216
  594. package/src/cli/ui/__tests__/performance/branchList.performance.test.tsx +0 -193
  595. package/src/cli/ui/__tests__/performance/useMemoOptimization.test.tsx +0 -234
  596. package/src/cli/ui/components/App.tsx +0 -1478
  597. package/src/cli/ui/components/common/Confirm.tsx +0 -44
  598. package/src/cli/ui/components/common/ErrorBoundary.tsx +0 -60
  599. package/src/cli/ui/components/common/Input.tsx +0 -58
  600. package/src/cli/ui/components/common/LoadingIndicator.tsx +0 -98
  601. package/src/cli/ui/components/common/Select.tsx +0 -247
  602. package/src/cli/ui/components/common/SpinnerIcon.tsx +0 -86
  603. package/src/cli/ui/components/parts/Footer.tsx +0 -41
  604. package/src/cli/ui/components/parts/Header.test.tsx +0 -75
  605. package/src/cli/ui/components/parts/MergeStatusList.tsx +0 -75
  606. package/src/cli/ui/components/parts/ProgressBar.tsx +0 -73
  607. package/src/cli/ui/components/parts/Stats.tsx +0 -88
  608. package/src/cli/ui/components/screens/BatchMergeProgressScreen.tsx +0 -74
  609. package/src/cli/ui/components/screens/BatchMergeResultScreen.tsx +0 -108
  610. package/src/cli/ui/components/screens/BranchCreatorScreen.tsx +0 -242
  611. package/src/cli/ui/components/screens/BranchListScreen.tsx +0 -744
  612. package/src/cli/ui/components/screens/BranchQuickStartScreen.tsx +0 -244
  613. package/src/cli/ui/components/screens/CodingAgentSelectorScreen.tsx +0 -159
  614. package/src/cli/ui/components/screens/EnvironmentProfileScreen.tsx +0 -928
  615. package/src/cli/ui/components/screens/ExecutionModeSelectorScreen.tsx +0 -176
  616. package/src/cli/ui/components/screens/LogDatePickerScreen.tsx +0 -83
  617. package/src/cli/ui/components/screens/LogDetailScreen.tsx +0 -67
  618. package/src/cli/ui/components/screens/LogListScreen.tsx +0 -192
  619. package/src/cli/ui/components/screens/ModelSelectorScreen.tsx +0 -320
  620. package/src/cli/ui/components/screens/PRCleanupScreen.tsx +0 -171
  621. package/src/cli/ui/components/screens/SessionSelectorScreen.tsx +0 -135
  622. package/src/cli/ui/hooks/useAppInput.ts +0 -172
  623. package/src/cli/ui/hooks/useBatchMerge.ts +0 -96
  624. package/src/cli/ui/hooks/useGitData.ts +0 -347
  625. package/src/cli/ui/hooks/useProfiles.ts +0 -211
  626. package/src/cli/ui/hooks/useScreenState.ts +0 -44
  627. package/src/cli/ui/hooks/useTerminalSize.ts +0 -33
  628. package/src/cli/ui/hooks/useToolStatus.ts +0 -68
  629. package/src/cli/ui/screens/BranchActionSelectorScreen.tsx +0 -111
  630. package/src/cli/ui/screens/__tests__/BranchActionSelectorScreen.test.tsx +0 -264
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akiojin/gwt",
3
- "version": "4.10.0",
3
+ "version": "4.12.0",
4
4
  "description": "Interactive Git worktree manager with Coding Agent selection (Claude Code / Codex CLI / Gemini CLI)",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -10,7 +10,8 @@
10
10
  "packageManager": "bun@latest",
11
11
  "scripts": {
12
12
  "build": "bun run build:cli && bun run build:web",
13
- "build:cli": "tsc",
13
+ "build:cli": "tsc && bun run build:opentui",
14
+ "build:opentui": "bun scripts/build-opentui.ts",
14
15
  "build:server": "tsc",
15
16
  "build:client": "vite build src/web/client",
16
17
  "build:web": "bun run build:client",
@@ -22,10 +23,9 @@
22
23
  "start:web": "node ./dist/index.js serve",
23
24
  "prepare": "husky",
24
25
  "pretest": "bun run build:cli",
25
- "test": "NODE_OPTIONS=--max-old-space-size=6144 vitest run --maxWorkers=1",
26
- "test:watch": "vitest",
27
- "test:ui": "vitest --ui",
28
- "test:coverage": "vitest run --coverage",
26
+ "test": "bun test tests/unit tests/logging tests/quality tests/web src",
27
+ "test:watch": "bun test --watch",
28
+ "test:coverage": "bun test --coverage",
29
29
  "test:e2e": "playwright test",
30
30
  "lint": "eslint src/**/*.ts src/**/*.tsx",
31
31
  "format": "prettier --write \"src/**/*.ts\" \"src/**/*.tsx\" \"tests/**/*.ts\"",
@@ -57,6 +57,8 @@
57
57
  "dependencies": {
58
58
  "@fastify/static": "^9.0.0",
59
59
  "@fastify/websocket": "^11.2.0",
60
+ "@opentui/core": "^0.1.68",
61
+ "@opentui/solid": "^0.1.68",
60
62
  "@radix-ui/react-dialog": "^1.1.15",
61
63
  "@radix-ui/react-label": "^2.1.8",
62
64
  "@radix-ui/react-select": "^2.2.6",
@@ -69,15 +71,13 @@
69
71
  "d3-force": "^3.0.0",
70
72
  "execa": "^9.6.0",
71
73
  "fastify": "^5.2.1",
72
- "ink": "^6.3.1",
73
- "ink-select-input": "^6.2.0",
74
- "ink-text-input": "^6.0.0",
75
74
  "node-pty": "1.1.0",
76
75
  "pino": "^10.1.0",
77
76
  "react": "^19.2.0",
78
77
  "react-dom": "^19.2.0",
79
78
  "react-router": "^7.2.0",
80
79
  "react-router-dom": "^7.2.0",
80
+ "solid-js": "^1.9.10",
81
81
  "string-width": "^8.1.0",
82
82
  "systray2": "^2.1.4",
83
83
  "tailwindcss": "^4.1.18",
@@ -90,6 +90,7 @@
90
90
  "devDependencies": {
91
91
  "@commitlint/cli": "^20.1.0",
92
92
  "@commitlint/config-conventional": "^20.0.0",
93
+ "@happy-dom/global-registrator": "^20.0.11",
93
94
  "@playwright/test": "^1.51.0",
94
95
  "@testing-library/jest-dom": "^6.9.1",
95
96
  "@testing-library/react": "^16.3.0",
@@ -101,8 +102,7 @@
101
102
  "@typescript-eslint/eslint-plugin": "^8.38.0",
102
103
  "@typescript-eslint/parser": "^8.38.0",
103
104
  "@vitejs/plugin-react": "^5.1.1",
104
- "@vitest/coverage-v8": "^4.0.8",
105
- "@vitest/ui": "^4.0.8",
105
+ "bun-types": "^1.3.5",
106
106
  "class-variance-authority": "^0.7.1",
107
107
  "clsx": "^2.1.1",
108
108
  "concurrently": "^9.1.2",
@@ -110,7 +110,6 @@
110
110
  "eslint": "^9.31.0",
111
111
  "happy-dom": "^20.0.8",
112
112
  "husky": "^9.1.7",
113
- "ink-testing-library": "^4.0.0",
114
113
  "jsdom": "^27.0.1",
115
114
  "lint-staged": "^16.2.7",
116
115
  "lucide-react": "^0.562.0",
@@ -119,8 +118,8 @@
119
118
  "tailwind-merge": "^3.4.0",
120
119
  "tailwindcss-animate": "^1.0.7",
121
120
  "typescript": "^5.8.3",
122
- "vite": "^7.2.4",
123
- "vitest": "^4.0.8"
121
+ "typescript-language-server": "^5.1.3",
122
+ "vite": "^7.2.4"
124
123
  },
125
124
  "lint-staged": {
126
125
  "**/*.md": "bunx --bun markdownlint-cli -c .markdownlint.json --ignore CHANGELOG.md --ignore node_modules",
package/src/claude.ts CHANGED
@@ -5,9 +5,14 @@ import {
5
5
  createChildStdio,
6
6
  getTerminalStreams,
7
7
  resetTerminalModes,
8
+ writeTerminalLine,
8
9
  } from "./utils/terminal.js";
9
10
  import { findCommand } from "./utils/command.js";
10
11
  import { findLatestClaudeSession } from "./utils/session.js";
12
+ import {
13
+ runAgentWithPty,
14
+ shouldCaptureAgentOutput,
15
+ } from "./logging/agentOutput.js";
11
16
 
12
17
  const CLAUDE_CLI_PACKAGE = "@anthropic-ai/claude-code@latest";
13
18
 
@@ -49,6 +54,8 @@ export async function launchClaudeCode(
49
54
  model?: string;
50
55
  sessionId?: string | null;
51
56
  chrome?: boolean;
57
+ branch?: string | null;
58
+ version?: string | null;
52
59
  } = {},
53
60
  ): Promise<{ sessionId?: string | null }> {
54
61
  const terminal = getTerminalStreams();
@@ -60,16 +67,16 @@ export async function launchClaudeCode(
60
67
  throw new Error(`Worktree path does not exist: ${worktreePath}`);
61
68
  }
62
69
 
63
- console.log(chalk.blue("šŸš€ Launching Claude Code..."));
64
- console.log(chalk.gray(` Working directory: ${worktreePath}`));
70
+ writeTerminalLine(chalk.blue("šŸš€ Launching Claude Code..."));
71
+ writeTerminalLine(chalk.gray(` Working directory: ${worktreePath}`));
65
72
 
66
73
  const args: string[] = [];
67
74
 
68
75
  if (options.model && options.model !== "opus") {
69
76
  args.push("--model", options.model);
70
- console.log(chalk.green(` šŸŽÆ Model: ${options.model}`));
77
+ writeTerminalLine(chalk.green(` šŸŽÆ Model: ${options.model}`));
71
78
  } else if (options.model === "opus") {
72
- console.log(chalk.green(` šŸŽÆ Model: ${options.model} (Default)`));
79
+ writeTerminalLine(chalk.green(` šŸŽÆ Model: ${options.model} (Default)`));
73
80
  }
74
81
 
75
82
  const resumeSessionId =
@@ -85,11 +92,11 @@ export async function launchClaudeCode(
85
92
  case "continue":
86
93
  if (resumeSessionId) {
87
94
  args.push("--resume", resumeSessionId);
88
- console.log(
95
+ writeTerminalLine(
89
96
  chalk.cyan(` šŸ“± Continuing specific session: ${resumeSessionId}`),
90
97
  );
91
98
  } else {
92
- console.log(
99
+ writeTerminalLine(
93
100
  chalk.yellow(
94
101
  " ā„¹ļø No saved session ID for this branch/tool. Starting new session.",
95
102
  ),
@@ -97,14 +104,14 @@ export async function launchClaudeCode(
97
104
  }
98
105
  break;
99
106
  case "resume":
100
- // TODO: Implement conversation selection with Ink UI
107
+ // TODO: Implement conversation selection in the OpenTUI UI
101
108
  // Legacy UI removed - this feature needs to be reimplemented
102
- console.log(
109
+ writeTerminalLine(
103
110
  chalk.yellow(
104
- " āš ļø Resume conversation feature temporarily disabled (Ink UI migration)",
111
+ " āš ļø Resume conversation feature temporarily disabled (UI migration)",
105
112
  ),
106
113
  );
107
- console.log(
114
+ writeTerminalLine(
108
115
  chalk.cyan(" ā„¹ļø Using default Claude Code resume behavior"),
109
116
  );
110
117
 
@@ -116,14 +123,14 @@ export async function launchClaudeCode(
116
123
  await selectClaudeConversation(worktreePath);
117
124
 
118
125
  if (selectedConversation) {
119
- console.log(
126
+ writeTerminalLine(
120
127
  chalk.green(` ✨ Resuming: ${selectedConversation.title}`),
121
128
  );
122
129
 
123
130
  // Use specific session ID if available
124
131
  if (selectedConversation.sessionId) {
125
132
  args.push("--resume", selectedConversation.sessionId);
126
- console.log(
133
+ writeTerminalLine(
127
134
  chalk.cyan(
128
135
  ` šŸ†” Using session ID: ${selectedConversation.sessionId}`,
129
136
  ),
@@ -131,7 +138,7 @@ export async function launchClaudeCode(
131
138
  } else {
132
139
  // Fallback: try to use filename as session identifier
133
140
  const fileName = selectedConversation.id;
134
- console.log(
141
+ writeTerminalLine(
135
142
  chalk.yellow(
136
143
  ` āš ļø No session ID found, trying filename: ${fileName}`,
137
144
  ),
@@ -140,7 +147,7 @@ export async function launchClaudeCode(
140
147
  }
141
148
  } else {
142
149
  // User cancelled - return without launching Claude
143
- console.log(
150
+ writeTerminalLine(
144
151
  chalk.gray(" ā†©ļø Selection cancelled, returning to menu"),
145
152
  );
146
153
  return;
@@ -157,7 +164,7 @@ export async function launchClaudeCode(
157
164
  // Use standard Claude Code resume for now
158
165
  if (resumeSessionId) {
159
166
  args.push("--resume", resumeSessionId);
160
- console.log(
167
+ writeTerminalLine(
161
168
  chalk.cyan(` šŸ”„ Resuming Claude session: ${resumeSessionId}`),
162
169
  );
163
170
  } else {
@@ -166,16 +173,16 @@ export async function launchClaudeCode(
166
173
  break;
167
174
  case "normal":
168
175
  default:
169
- console.log(chalk.green(" ✨ Starting new session"));
176
+ writeTerminalLine(chalk.green(" ✨ Starting new session"));
170
177
  break;
171
178
  }
172
179
 
173
180
  // Handle Chrome extension integration
174
181
  if (options.chrome && isChromeIntegrationSupported()) {
175
182
  args.push("--chrome");
176
- console.log(chalk.green(" 🌐 Chrome integration enabled"));
183
+ writeTerminalLine(chalk.green(" 🌐 Chrome integration enabled"));
177
184
  } else if (options.chrome) {
178
- console.log(
185
+ writeTerminalLine(
179
186
  chalk.yellow(
180
187
  " āš ļø Chrome integration is not supported on this platform. Skipping --chrome.",
181
188
  ),
@@ -193,11 +200,11 @@ export async function launchClaudeCode(
193
200
  // Handle skip permissions
194
201
  if (options.skipPermissions) {
195
202
  args.push("--dangerously-skip-permissions");
196
- console.log(chalk.yellow(" āš ļø Skipping permissions check"));
203
+ writeTerminalLine(chalk.yellow(" āš ļø Skipping permissions check"));
197
204
 
198
205
  // Show additional warning for root users in Docker/sandbox environments
199
206
  if (isRoot) {
200
- console.log(
207
+ writeTerminalLine(
201
208
  chalk.yellow(
202
209
  " āš ļø Running as Docker/sandbox environment (IS_SANDBOX=1)",
203
210
  ),
@@ -209,7 +216,7 @@ export async function launchClaudeCode(
209
216
  args.push(...options.extraArgs);
210
217
  }
211
218
 
212
- console.log(chalk.gray(` šŸ“‹ Args: ${args.join(" ")}`));
219
+ writeTerminalLine(chalk.gray(` šŸ“‹ Args: ${args.join(" ")}`));
213
220
 
214
221
  terminal.exitRawMode();
215
222
  resetTerminalModes(terminal.stdout);
@@ -229,7 +236,8 @@ export async function launchClaudeCode(
229
236
  ),
230
237
  );
231
238
 
232
- const childStdio = createChildStdio();
239
+ const captureOutput = shouldCaptureAgentOutput(launchEnv);
240
+ const childStdio = captureOutput ? null : createChildStdio();
233
241
 
234
242
  // Auto-detect locally installed claude command
235
243
  const claudeLookup = await findCommand("claude");
@@ -259,95 +267,112 @@ export async function launchClaudeCode(
259
267
  }
260
268
  };
261
269
 
262
- try {
263
- if (claudeLookup.source === "installed" && claudeLookup.path) {
264
- // Use the full path to avoid PATH issues in non-interactive shells
265
- console.log(
266
- chalk.green(" ✨ Using locally installed claude command"),
267
- );
268
- await execInteractive(claudeLookup.path, args, {
270
+ // Treat SIGHUP (1), SIGINT (2), SIGTERM (15) as normal exit signals
271
+ // SIGHUP can occur when the PTY closes, SIGINT/SIGTERM are user interrupts
272
+ const isNormalExitSignal = (signal?: number | null) =>
273
+ signal === 1 || signal === 2 || signal === 15;
274
+
275
+ const runCommand = async (file: string, fileArgs: string[]) => {
276
+ if (captureOutput) {
277
+ const result = await runAgentWithPty({
278
+ command: file,
279
+ args: fileArgs,
269
280
  cwd: worktreePath,
270
- stdin: childStdio.stdin,
271
- stdout: childStdio.stdout,
272
- stderr: childStdio.stderr,
273
281
  env: launchEnv,
282
+ agentId: "claude-code",
274
283
  });
284
+ // Treat normal exit signals (SIGHUP, SIGINT, SIGTERM) as successful exit
285
+ if (isNormalExitSignal(result.signal)) {
286
+ return;
287
+ }
288
+ if (result.exitCode !== null && result.exitCode !== 0) {
289
+ throw new Error(`Claude Code exited with code ${result.exitCode}`);
290
+ }
291
+ return;
292
+ }
293
+
294
+ if (!childStdio) {
295
+ return;
296
+ }
297
+
298
+ await execInteractive(file, fileArgs, {
299
+ cwd: worktreePath,
300
+ stdin: childStdio.stdin,
301
+ stdout: childStdio.stdout,
302
+ stderr: childStdio.stderr,
303
+ env: launchEnv,
304
+ });
305
+ };
306
+
307
+ // Determine execution strategy based on version selection
308
+ // FR-063b: "installed" option only appears when local command exists
309
+ const requestedVersion = options.version ?? "latest";
310
+ let selectedVersion = requestedVersion;
311
+
312
+ if (requestedVersion === "installed" && !claudeLookup.path) {
313
+ writeTerminalLine(
314
+ chalk.yellow(
315
+ " āš ļø Installed claude command not found. Falling back to latest.",
316
+ ),
317
+ );
318
+ selectedVersion = "latest";
319
+ }
320
+
321
+ // Log version information (FR-072)
322
+ if (selectedVersion === "installed") {
323
+ writeTerminalLine(chalk.green(` šŸ“¦ Version: installed`));
324
+ } else {
325
+ writeTerminalLine(chalk.green(` šŸ“¦ Version: @${selectedVersion}`));
326
+ }
327
+
328
+ try {
329
+ if (selectedVersion === "installed" && claudeLookup.path) {
330
+ // FR-066: Use locally installed command when "installed" is selected
331
+ // FR-063b guarantees local command exists when this option is shown
332
+ writeTerminalLine(
333
+ chalk.green(" ✨ Using locally installed claude command"),
334
+ );
335
+ await runCommand(claudeLookup.path, args);
275
336
  } else {
337
+ // FR-067, FR-068: Use bunx with version suffix for latest/specific versions
338
+ const packageWithVersion = `@anthropic-ai/claude-code@${selectedVersion}`;
339
+
276
340
  const useNpx = npxLookup?.source === "installed" && npxLookup?.path;
277
341
  if (useNpx) {
278
- console.log(
279
- chalk.cyan(
280
- " šŸ”„ Falling back to npx @anthropic-ai/claude-code@latest",
281
- ),
342
+ writeTerminalLine(
343
+ chalk.cyan(` šŸ”„ Using npx ${packageWithVersion}`),
282
344
  );
283
345
  } else {
284
- console.log(
285
- chalk.cyan(
286
- " šŸ”„ Falling back to bunx @anthropic-ai/claude-code@latest",
287
- ),
346
+ writeTerminalLine(
347
+ chalk.cyan(` šŸ”„ Using bunx ${packageWithVersion}`),
288
348
  );
289
349
  }
290
- console.log(
291
- chalk.yellow(
292
- " šŸ’” Recommended: Install Claude Code via official method for faster startup",
293
- ),
294
- );
295
- console.log(
296
- chalk.yellow(" macOS/Linux: brew install --cask claude-code"),
297
- );
298
- console.log(
299
- chalk.yellow(
300
- " or: curl -fsSL https://claude.ai/install.sh | bash",
301
- ),
302
- );
303
- console.log(
304
- chalk.yellow(
305
- " Windows: irm https://claude.ai/install.ps1 | iex",
306
- ),
307
- );
308
- console.log("");
309
- const shouldSkipDelay =
310
- typeof process !== "undefined" &&
311
- (process.env?.NODE_ENV === "test" || Boolean(process.env?.VITEST));
312
- if (!shouldSkipDelay) {
313
- await new Promise((resolve) => setTimeout(resolve, 2000));
314
- }
350
+
315
351
  if (useNpx && npxLookup?.path) {
316
- await execInteractive(
317
- npxLookup.path,
318
- ["-y", CLAUDE_CLI_PACKAGE, ...args],
319
- {
320
- cwd: worktreePath,
321
- stdin: childStdio.stdin,
322
- stdout: childStdio.stdout,
323
- stderr: childStdio.stderr,
324
- env: launchEnv,
325
- },
326
- );
352
+ await runCommand(npxLookup.path, ["-y", packageWithVersion, ...args]);
327
353
  } else {
328
- await execInteractive("bunx", [CLAUDE_CLI_PACKAGE, ...args], {
329
- cwd: worktreePath,
330
- stdin: childStdio.stdin,
331
- stdout: childStdio.stdout,
332
- stderr: childStdio.stderr,
333
- env: launchEnv,
334
- });
354
+ await runCommand("bunx", [packageWithVersion, ...args]);
335
355
  }
336
356
  }
337
357
  } finally {
338
- childStdio.cleanup();
358
+ childStdio?.cleanup();
339
359
  }
340
360
 
341
361
  // File-based session detection only - no stdout capture
342
362
  // Use only findLatestClaudeSession with short timeout, skip sessionProbe to avoid hanging
343
363
  let capturedSessionId: string | null = null;
344
364
  const finishedAt = Date.now();
365
+ const branchWorktrees = options.branch
366
+ ? [{ path: worktreePath, branch: options.branch }]
367
+ : null;
345
368
  try {
346
369
  const latest = await findLatestClaudeSession(worktreePath, {
347
370
  since: startedAt,
348
371
  until: finishedAt + 30_000,
349
372
  preferClosestTo: finishedAt,
350
373
  windowMs: 10 * 60 * 1000,
374
+ branch: options.branch ?? null,
375
+ worktrees: branchWorktrees,
351
376
  });
352
377
  const detectedSessionId = latest?.id ?? null;
353
378
  // When we explicitly resumed a specific session, keep that ID as the source of truth.
@@ -359,12 +384,12 @@ export async function launchClaudeCode(
359
384
  }
360
385
 
361
386
  if (capturedSessionId) {
362
- console.log(chalk.cyan(`\n šŸ†” Session ID: ${capturedSessionId}`));
363
- console.log(
387
+ writeTerminalLine(chalk.cyan(`\n šŸ†” Session ID: ${capturedSessionId}`));
388
+ writeTerminalLine(
364
389
  chalk.gray(` Resume command: claude --resume ${capturedSessionId}`),
365
390
  );
366
391
  } else {
367
- console.log(
392
+ writeTerminalLine(
368
393
  chalk.yellow(
369
394
  "\n ā„¹ļø Could not determine Claude session ID automatically.",
370
395
  ),
@@ -393,30 +418,38 @@ export async function launchClaudeCode(
393
418
  }
394
419
 
395
420
  if (process.platform === "win32") {
396
- console.error(chalk.red("\nšŸ’” Windows troubleshooting tips:"));
421
+ writeTerminalLine(
422
+ chalk.red("\nšŸ’” Windows troubleshooting tips:"),
423
+ "stderr",
424
+ );
397
425
  if (hasLocalClaude) {
398
- console.error(
426
+ writeTerminalLine(
399
427
  chalk.yellow(
400
428
  " 1. Confirm that Claude Code is installed and the 'claude' command is on PATH",
401
429
  ),
430
+ "stderr",
402
431
  );
403
- console.error(
432
+ writeTerminalLine(
404
433
  chalk.yellow(' 2. Run "claude --version" to verify the setup'),
434
+ "stderr",
405
435
  );
406
436
  } else {
407
- console.error(
437
+ writeTerminalLine(
408
438
  chalk.yellow(
409
439
  " 1. Confirm that Bun is installed and bunx is available",
410
440
  ),
441
+ "stderr",
411
442
  );
412
- console.error(
443
+ writeTerminalLine(
413
444
  chalk.yellow(
414
445
  ' 2. Run "bunx @anthropic-ai/claude-code@latest -- --version" to verify the setup',
415
446
  ),
447
+ "stderr",
416
448
  );
417
449
  }
418
- console.error(
450
+ writeTerminalLine(
419
451
  chalk.yellow(" 3. Restart your terminal or IDE to refresh PATH"),
452
+ "stderr",
420
453
  );
421
454
  }
422
455
 
@@ -439,11 +472,12 @@ export async function isClaudeCodeAvailable(): Promise<boolean> {
439
472
  } catch (error: unknown) {
440
473
  const err = error as NodeJS.ErrnoException;
441
474
  if (err.code === "ENOENT") {
442
- console.error(chalk.yellow("\nāš ļø bunx command not found"));
443
- console.error(
475
+ writeTerminalLine(chalk.yellow("\nāš ļø bunx command not found"), "stderr");
476
+ writeTerminalLine(
444
477
  chalk.gray(
445
478
  " Install Bun and confirm that bunx is available before continuing",
446
479
  ),
480
+ "stderr",
447
481
  );
448
482
  }
449
483
  return false;