@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
@@ -1,119 +0,0 @@
1
- # Skipped Tests
2
-
3
- ## Overview
4
-
5
- Some tests have been temporarily renamed with `.skip` extension to exclude them from the test suite. These tests pass when run in isolation but fail during parallel execution due to limitations in bun's vitest implementation.
6
-
7
- ## Skipped Test Files
8
-
9
- ### 1. `useGitData.test.ts.skip`
10
-
11
- - **Original location**: `src/ui/__tests__/hooks/useGitData.test.ts`
12
- - **Tests**: 6 tests (auto-refresh tests were removed earlier, 6 basic tests remain)
13
- - **Reason**: Timer-based and mock state conflicts in parallel execution
14
- - **Coverage**: Basic functionality is tested in other test files
15
-
16
- ### 2. `realtimeUpdate.test.tsx.skip`
17
-
18
- - **Original location**: `src/ui/__tests__/integration/realtimeUpdate.test.tsx`
19
- - **Tests**: 5 tests (auto-refresh integration)
20
- - **Reason**: setInterval timing precision issues in parallel runs
21
- - **Coverage**: Auto-refresh functionality works correctly in production
22
-
23
- ### 3. `branchList.test.tsx.skip`
24
-
25
- - **Original location**: `src/ui/__tests__/integration/branchList.test.tsx`
26
- - **Tests**: 5 tests (branch list integration)
27
- - **Reason**: Mock state conflicts with other parallel tests
28
- - **Coverage**: Component functionality tested in unit tests
29
-
30
- ### 4. `realtimeUpdate.acceptance.test.tsx.skip`
31
-
32
- - **Original location**: `src/ui/__tests__/acceptance/realtimeUpdate.acceptance.test.tsx`
33
- - **Tests**: 4 acceptance tests
34
- - **Reason**: Timer-based acceptance criteria in parallel execution
35
- - **Coverage**: Same functionality as integration tests
36
-
37
- ### 5. `branchList.acceptance.test.tsx.skip`
38
-
39
- - **Original location**: `src/ui/__tests__/acceptance/branchList.acceptance.test.tsx`
40
- - **Tests**: 2 acceptance tests (performance with 20+, 100+ branches)
41
- - **Reason**: Heavy load tests causing resource conflicts
42
- - **Coverage**: Performance validated in manual testing
43
-
44
- ## Total Impact
45
-
46
- - **Skipped**: 22 tests
47
- - **Remaining**: 307 tests (100% pass rate)
48
- - **Test Coverage**: 81.78% (unchanged)
49
-
50
- ## Technical Details
51
-
52
- ### Why These Tests Fail in Parallel
53
-
54
- 1. **Bun's vitest limitations**:
55
- - No support for `pool` configuration options
56
- - No support for `retry` option
57
- - Limited control over test execution order
58
-
59
- 2. **Timer precision**:
60
- - `setInterval` and `setTimeout` behavior varies in parallel execution
61
- - Tests expect specific timing (100ms, 300ms) which becomes unreliable
62
-
63
- 3. **Mock state management**:
64
- - Global mocks (getAllBranches, listAdditionalWorktrees) conflict between tests
65
- - happy-dom environment state leaks between parallel tests
66
-
67
- ### Verification
68
-
69
- All skipped tests pass when run individually:
70
-
71
- ```bash
72
- # Examples of individual runs that pass
73
- bun test src/ui/__tests__/hooks/useGitData.test.ts.skip
74
- bun test src/ui/__tests__/integration/realtimeUpdate.test.tsx.skip
75
- bun test src/ui/__tests__/integration/branchList.test.tsx.skip
76
- ```
77
-
78
- ## Future Actions
79
-
80
- These tests can be re-enabled when:
81
-
82
- 1. Bun's vitest adds support for sequential execution options
83
- 2. Tests are rewritten to avoid timer dependencies
84
- 3. Mock state management is refactored for better isolation
85
-
86
- ## Running Skipped Tests Manually
87
-
88
- To run these tests locally for verification:
89
-
90
- ```bash
91
- # Rename files temporarily
92
- for f in src/ui/__tests__/**/*.skip; do
93
- mv "$f" "${f%.skip}"
94
- done
95
-
96
- # Run specific test file
97
- bun test src/ui/__tests__/hooks/useGitData.test.ts
98
-
99
- # Rename back
100
- for f in src/ui/__tests__/**/*.test.{ts,tsx}; do
101
- if [[ ! -f "$f" ]]; then continue; fi
102
- case "$(basename "$f")" in
103
- useGitData.test.ts|realtimeUpdate.*|branchList.*)
104
- mv "$f" "$f.skip"
105
- ;;
106
- esac
107
- done
108
- ```
109
-
110
- ## Conclusion
111
-
112
- The decision to skip these tests is pragmatic:
113
-
114
- - **Production code works correctly** (all skipped tests pass in isolation)
115
- - **Core functionality is tested** (307 stable tests remain)
116
- - **Test suite is reliable** (100% pass rate)
117
- - **CI/CD can proceed** (no flaky test failures)
118
-
119
- The skipped tests document known limitations of the test environment, not bugs in the implementation.
@@ -1,239 +0,0 @@
1
- /**
2
- * @vitest-environment happy-dom
3
- * Acceptance tests for User Story 1: Branch List Display and Selection
4
- */
5
- import { describe, it, expect, beforeEach, vi } from 'vitest';
6
- import { render, waitFor } from '@testing-library/react';
7
- import React from 'react';
8
- import { App } from '../../components/App.js';
9
- import { Window } from 'happy-dom';
10
- import type { BranchInfo } from '../../types.js';
11
-
12
- // Mock git.js and worktree.js
13
- vi.mock('../../../git.js', () => ({
14
- getAllBranches: vi.fn(),
15
- }));
16
-
17
- vi.mock('../../../worktree.js', () => ({
18
- listAdditionalWorktrees: vi.fn(),
19
- }));
20
-
21
- import { getAllBranches } from '../../../git.js';
22
- import { listAdditionalWorktrees } from '../../../worktree.js';
23
-
24
- describe('Acceptance: Branch List (User Story 1)', () => {
25
- beforeEach(() => {
26
- // Setup happy-dom
27
- const window = new Window();
28
- globalThis.window = window as any;
29
- globalThis.document = window.document as any;
30
-
31
- // Reset mocks
32
- (getAllBranches as ReturnType<typeof vi.fn>).mockReset();
33
- (listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockReset();
34
- });
35
-
36
- /**
37
- * T047: Acceptance Scenario 1
38
- * 1秒以内に全画面レイアウトが表示される
39
- */
40
- it('[AC1] should display full-screen layout within 1 second', async () => {
41
- const mockBranches: BranchInfo[] = [
42
- {
43
- name: 'main',
44
- type: 'local',
45
- branchType: 'main',
46
- isCurrent: true,
47
- },
48
- ];
49
-
50
- (getAllBranches as ReturnType<typeof vi.fn>).mockResolvedValue(mockBranches);
51
- (listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockResolvedValue([]);
52
-
53
- const startTime = Date.now();
54
- const onExit = vi.fn();
55
- const { getByText, container } = render(<App onExit={onExit} />);
56
-
57
- // Wait for full layout to be rendered
58
- await waitFor(
59
- () => {
60
- expect(getByText(/Claude Worktree/i)).toBeDefined(); // Header
61
- expect(getByText(/Local:/)).toBeDefined(); // Stats
62
- expect(getByText(/main/)).toBeDefined(); // Branch list
63
- expect(getByText(/Quit/i)).toBeDefined(); // Footer
64
- },
65
- { timeout: 1000 }
66
- );
67
-
68
- const renderTime = Date.now() - startTime;
69
- expect(renderTime).toBeLessThan(1000); // Should render within 1 second
70
- });
71
-
72
- /**
73
- * T048: Acceptance Scenario 2
74
- * 20個以上のブランチでスクロールがスムーズに動作
75
- */
76
- it('[AC2] should handle smooth scrolling with 20+ branches', async () => {
77
- // Generate 25 branches
78
- const mockBranches: BranchInfo[] = Array.from({ length: 25 }, (_, i) => ({
79
- name: `feature/branch-${i + 1}`,
80
- type: 'local' as const,
81
- branchType: 'feature' as const,
82
- isCurrent: i === 0,
83
- }));
84
-
85
- (getAllBranches as ReturnType<typeof vi.fn>).mockResolvedValue(mockBranches);
86
- (listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockResolvedValue([]);
87
-
88
- const onExit = vi.fn();
89
- const { container } = render(<App onExit={onExit} />);
90
-
91
- // Wait for rendering
92
- await waitFor(() => {
93
- expect(container.textContent).toContain('feature/branch-1');
94
- });
95
-
96
- // Verify all branches are in the DOM (even if not visible)
97
- // Note: Actual scrolling behavior is handled by ink-select-input
98
- expect(container.textContent).toBeTruthy();
99
- });
100
-
101
- /**
102
- * T049: Acceptance Scenario 3
103
- * ターミナルリサイズで表示行数が自動調整される
104
- */
105
- it('[AC3] should adjust display rows on terminal resize', async () => {
106
- const mockBranches: BranchInfo[] = [
107
- {
108
- name: 'main',
109
- type: 'local',
110
- branchType: 'main',
111
- isCurrent: true,
112
- },
113
- ];
114
-
115
- (getAllBranches as ReturnType<typeof vi.fn>).mockResolvedValue(mockBranches);
116
- (listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockResolvedValue([]);
117
-
118
- // Mock initial terminal size
119
- const originalRows = process.stdout.rows;
120
- process.stdout.rows = 30;
121
-
122
- const onExit = vi.fn();
123
- const { container } = render(<App onExit={onExit} />);
124
-
125
- // Wait for initial render
126
- await waitFor(() => {
127
- expect(container.textContent).toContain('Claude Worktree');
128
- });
129
-
130
- // Simulate terminal resize
131
- process.stdout.rows = 20;
132
-
133
- // In a real terminal, this would trigger a resize event
134
- // For this test, we just verify the component can handle different sizes
135
- expect(container).toBeDefined();
136
-
137
- // Restore original size
138
- process.stdout.rows = originalRows;
139
- });
140
-
141
- /**
142
- * T050: Acceptance Scenario 4
143
- * ブランチ選択とEnterキーで処理開始
144
- */
145
- it('[AC4] should trigger onExit when branch is selected', async () => {
146
- const mockBranches: BranchInfo[] = [
147
- {
148
- name: 'main',
149
- type: 'local',
150
- branchType: 'main',
151
- isCurrent: true,
152
- },
153
- {
154
- name: 'feature/test',
155
- type: 'local',
156
- branchType: 'feature',
157
- isCurrent: false,
158
- },
159
- ];
160
-
161
- (getAllBranches as ReturnType<typeof vi.fn>).mockResolvedValue(mockBranches);
162
- (listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockResolvedValue([]);
163
-
164
- const onExit = vi.fn();
165
- const { container } = render(<App onExit={onExit} />);
166
-
167
- // Wait for rendering
168
- await waitFor(() => {
169
- expect(container.textContent).toContain('main');
170
- });
171
-
172
- // Note: Actual key input simulation requires ink's input handling
173
- // This test verifies that the onExit callback is properly wired
174
- expect(onExit).toBeDefined();
175
- });
176
-
177
- /**
178
- * T051: Acceptance Scenario 5
179
- * qキーでアプリケーション終了
180
- */
181
- it('[AC5] should support quit action with q key', async () => {
182
- const mockBranches: BranchInfo[] = [
183
- {
184
- name: 'main',
185
- type: 'local',
186
- branchType: 'main',
187
- isCurrent: true,
188
- },
189
- ];
190
-
191
- (getAllBranches as ReturnType<typeof vi.fn>).mockResolvedValue(mockBranches);
192
- (listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockResolvedValue([]);
193
-
194
- const onExit = vi.fn();
195
- const { getAllByText } = render(<App onExit={onExit} />);
196
-
197
- // Wait for rendering
198
- await waitFor(() => {
199
- expect(getAllByText(/Quit/i).length).toBeGreaterThan(0);
200
- });
201
-
202
- // Verify quit action is displayed
203
- expect(getAllByText(/q/i).length).toBeGreaterThan(0);
204
- expect(getAllByText(/Quit/i).length).toBeGreaterThan(0);
205
-
206
- // Note: Actual 'q' key press requires ink's input handling
207
- // This test verifies that the quit action is properly displayed
208
- });
209
-
210
- /**
211
- * Additional: Performance test for large branch lists
212
- */
213
- it('[Performance] should handle 100+ branches efficiently', async () => {
214
- // Generate 100 branches
215
- const mockBranches: BranchInfo[] = Array.from({ length: 100 }, (_, i) => ({
216
- name: `feature/branch-${i + 1}`,
217
- type: 'local' as const,
218
- branchType: 'feature' as const,
219
- isCurrent: i === 0,
220
- }));
221
-
222
- (getAllBranches as ReturnType<typeof vi.fn>).mockResolvedValue(mockBranches);
223
- (listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockResolvedValue([]);
224
-
225
- const startTime = Date.now();
226
- const onExit = vi.fn();
227
- const { container } = render(<App onExit={onExit} />);
228
-
229
- // Wait for rendering
230
- await waitFor(() => {
231
- expect(container.textContent).toContain('feature/branch-1');
232
- });
233
-
234
- const renderTime = Date.now() - startTime;
235
-
236
- // Should render 100 branches within reasonable time (< 2 seconds)
237
- expect(renderTime).toBeLessThan(2000);
238
- });
239
- });
@@ -1,225 +0,0 @@
1
- /**
2
- * @vitest-environment happy-dom
3
- * Acceptance tests for User Story 2: Sub-screen Navigation
4
- */
5
- import { describe, it, expect, beforeEach, afterAll, vi } from "vitest";
6
- import type { Mock } from "vitest";
7
- import { render, waitFor } from "@testing-library/react";
8
- import React from "react";
9
- import { App } from "../../components/App.js";
10
- import { Window } from "happy-dom";
11
- import type { BranchInfo } from "../../types.js";
12
-
13
- // Mock git.ts and worktree.ts
14
- vi.mock("../../../../git.ts", () => ({
15
- __esModule: true,
16
- getAllBranches: vi.fn(),
17
- getRepositoryRoot: vi.fn(async () => "/repo"),
18
- deleteBranch: vi.fn(async () => undefined),
19
- }));
20
-
21
- const { acceptanceIsProtectedBranchName, acceptanceSwitchToProtectedBranch } =
22
- vi.hoisted(() => ({
23
- acceptanceIsProtectedBranchName: vi.fn(() => false),
24
- acceptanceSwitchToProtectedBranch: vi.fn(async () => "none" as const),
25
- }));
26
-
27
- vi.mock("../../../../worktree.ts", () => ({
28
- __esModule: true,
29
- listAdditionalWorktrees: vi.fn(),
30
- createWorktree: vi.fn(async () => undefined),
31
- generateWorktreePath: vi.fn(async () => "/repo/.git/worktree/test"),
32
- getMergedPRWorktrees: vi.fn(async () => []),
33
- removeWorktree: vi.fn(async () => undefined),
34
- isProtectedBranchName: acceptanceIsProtectedBranchName,
35
- switchToProtectedBranch: acceptanceSwitchToProtectedBranch,
36
- }));
37
-
38
- import {
39
- getAllBranches,
40
- getRepositoryRoot,
41
- deleteBranch,
42
- } from "../../../../git.ts";
43
- import {
44
- listAdditionalWorktrees,
45
- createWorktree,
46
- generateWorktreePath,
47
- getMergedPRWorktrees,
48
- removeWorktree,
49
- } from "../../../../worktree.ts";
50
-
51
- const mockedGetAllBranches = getAllBranches as Mock;
52
- const mockedGetRepositoryRoot = getRepositoryRoot as Mock;
53
- const mockedDeleteBranch = deleteBranch as Mock;
54
- const mockedListAdditionalWorktrees = listAdditionalWorktrees as Mock;
55
- const mockedCreateWorktree = createWorktree as Mock;
56
- const mockedGenerateWorktreePath = generateWorktreePath as Mock;
57
- const mockedGetMergedPRWorktrees = getMergedPRWorktrees as Mock;
58
- const mockedRemoveWorktree = removeWorktree as Mock;
59
- const mockedIsProtectedBranchName = acceptanceIsProtectedBranchName as Mock;
60
- const mockedSwitchToProtectedBranch = acceptanceSwitchToProtectedBranch as Mock;
61
-
62
- describe("Acceptance: Navigation (User Story 2)", () => {
63
- beforeEach(() => {
64
- // Setup happy-dom
65
- const window = new Window();
66
- globalThis.window = window as unknown as typeof globalThis.window;
67
- globalThis.document =
68
- window.document as unknown as typeof globalThis.document;
69
-
70
- // Reset mocks
71
- mockedGetAllBranches.mockReset();
72
- mockedListAdditionalWorktrees.mockReset();
73
- mockedGetRepositoryRoot.mockReset();
74
- mockedDeleteBranch.mockReset();
75
- mockedCreateWorktree.mockReset();
76
- mockedGenerateWorktreePath.mockReset();
77
- mockedGetMergedPRWorktrees.mockReset();
78
- mockedRemoveWorktree.mockReset();
79
- mockedIsProtectedBranchName.mockReset();
80
- mockedSwitchToProtectedBranch.mockReset();
81
- mockedGetRepositoryRoot.mockResolvedValue("/repo");
82
- mockedSwitchToProtectedBranch.mockResolvedValue("none");
83
- });
84
-
85
- const mockBranches: BranchInfo[] = [
86
- {
87
- name: "main",
88
- type: "local",
89
- branchType: "main",
90
- isCurrent: true,
91
- },
92
- {
93
- name: "feature/test",
94
- type: "local",
95
- branchType: "feature",
96
- isCurrent: false,
97
- },
98
- ];
99
-
100
- /**
101
- * T074: Acceptance Scenario 1
102
- * nキーで新規ブランチ作成画面に遷移
103
- */
104
- it("[AC1] should navigate to branch creator on n key", async () => {
105
- (getAllBranches as ReturnType<typeof vi.fn>).mockResolvedValue(
106
- mockBranches,
107
- );
108
- (listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockResolvedValue([]);
109
-
110
- const onExit = vi.fn();
111
- const { getByText, container } = render(<App onExit={onExit} />);
112
-
113
- await waitFor(() => {
114
- expect(getByText(/gwt - Branch Selection/i)).toBeDefined();
115
- });
116
-
117
- // Verify n key action is available in footer
118
- const nKeyElements = container.querySelectorAll("*");
119
- let hasNKey = false;
120
- nKeyElements.forEach((el) => {
121
- if (el.textContent?.toLowerCase().includes("new branch")) {
122
- hasNKey = true;
123
- }
124
- });
125
-
126
- expect(hasNKey || container.textContent?.toLowerCase().includes("n")).toBe(
127
- true,
128
- );
129
- });
130
-
131
- /**
132
- * T075: Acceptance Scenario 2
133
- * メイン画面にはqキーが存在しない(終了はCtrl+Cのみ)
134
- */
135
- it("[AC2] should not have q key on main screen", async () => {
136
- (getAllBranches as ReturnType<typeof vi.fn>).mockResolvedValue(
137
- mockBranches,
138
- );
139
- (listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockResolvedValue([]);
140
-
141
- const onExit = vi.fn();
142
- const { container } = render(<App onExit={onExit} />);
143
-
144
- await waitFor(() => {
145
- expect(container).toBeDefined();
146
- });
147
-
148
- // Verify q key is NOT in the footer (main screen uses Ctrl+C for exit)
149
- const footerText = container.textContent || "";
150
- // Main screen should not have 'q' for quit, but should have other keys
151
- expect(footerText.toLowerCase()).not.toMatch(/\[q\]/);
152
- expect(footerText.toLowerCase()).toContain("enter");
153
- });
154
-
155
- /**
156
- * T076: Acceptance Scenario 3
157
- * ブランチリスト画面でフッターアクションが表示される
158
- */
159
- it("[AC3] should display footer actions on branch list screen", async () => {
160
- (getAllBranches as ReturnType<typeof vi.fn>).mockResolvedValue(
161
- mockBranches,
162
- );
163
- (listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockResolvedValue([
164
- {
165
- branch: "feature/test",
166
- path: "/path/to/worktree",
167
- head: "abc123",
168
- isAccessible: true,
169
- },
170
- ]);
171
-
172
- const onExit = vi.fn();
173
- const { getByText, container } = render(<App onExit={onExit} />);
174
-
175
- await waitFor(() => {
176
- expect(getByText(/gwt - Branch Selection/i)).toBeDefined();
177
- });
178
-
179
- // Verify footer actions are available
180
- const footerText = container.textContent || "";
181
- expect(footerText.toLowerCase()).toContain("enter");
182
- });
183
-
184
- it("[Integration] should support all navigation keys", async () => {
185
- (getAllBranches as ReturnType<typeof vi.fn>).mockResolvedValue(
186
- mockBranches,
187
- );
188
- (listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockResolvedValue([]);
189
-
190
- const onExit = vi.fn();
191
- const { getByText, getAllByText } = render(<App onExit={onExit} />);
192
-
193
- await waitFor(() => {
194
- expect(getByText(/gwt - Branch Selection/i)).toBeDefined();
195
- });
196
-
197
- // Verify navigation keys are available (main screen doesn't have q key)
198
- const enterKeys = getAllByText(/enter/i);
199
-
200
- expect(enterKeys.length).toBeGreaterThan(0);
201
- });
202
-
203
- it("[Integration] should display correct footer actions", async () => {
204
- (getAllBranches as ReturnType<typeof vi.fn>).mockResolvedValue(
205
- mockBranches,
206
- );
207
- (listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockResolvedValue([]);
208
-
209
- const onExit = vi.fn();
210
- const { container } = render(<App onExit={onExit} />);
211
-
212
- await waitFor(() => {
213
- expect(container).toBeDefined();
214
- });
215
-
216
- // Verify footer has multiple action keys (main screen doesn't have q key)
217
- const footerText = container.textContent || "";
218
- expect(footerText.toLowerCase()).toContain("enter");
219
- expect(footerText.toLowerCase()).toContain("r"); // Refresh
220
- });
221
- });
222
-
223
- afterAll(() => {
224
- vi.restoreAllMocks();
225
- });