@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,142 +0,0 @@
1
- /**
2
- * @vitest-environment happy-dom
3
- */
4
- import React from "react";
5
- import { describe, it, expect, beforeEach } from "vitest";
6
- import { render } from "@testing-library/react";
7
- import { Window } from "happy-dom";
8
- import { BranchQuickStartScreen } from "../../../components/screens/BranchQuickStartScreen.js";
9
-
10
- describe("BranchQuickStartScreen", () => {
11
- beforeEach(() => {
12
- const window = new Window();
13
- globalThis.window = window as unknown as typeof globalThis.window;
14
- globalThis.document =
15
- window.document as unknown as typeof globalThis.document;
16
- });
17
-
18
- it("renders previous option details when available", () => {
19
- const { getByText, getAllByText, queryAllByText } = render(
20
- <BranchQuickStartScreen
21
- branchName="feature/foo"
22
- previousOptions={[
23
- {
24
- toolId: "codex-cli",
25
- toolLabel: "Codex",
26
- model: "gpt-5.2-codex",
27
- sessionId: "abc-123",
28
- inferenceLevel: "high",
29
- skipPermissions: true,
30
- },
31
- ]}
32
- onBack={() => {}}
33
- onSelect={() => {}}
34
- />,
35
- );
36
-
37
- const titleMatches = getAllByText(/Resume with previous settings/);
38
- expect(titleMatches.length).toBeGreaterThan(0);
39
- expect(
40
- getByText(
41
- /Model: gpt-5.2-codex \/ Reasoning: High \/ Skip: Yes \/ ID: abc-123/,
42
- ),
43
- ).toBeDefined();
44
- expect(queryAllByText(/ID: abc-123/)).toHaveLength(1);
45
- expect(
46
- getByText(/Model: gpt-5.2-codex \/ Reasoning: High \/ Skip: Yes$/),
47
- ).toBeDefined();
48
- });
49
-
50
- it("omits reasoning when tool does not support it", () => {
51
- const { getByText } = render(
52
- <BranchQuickStartScreen
53
- branchName="feature/foo"
54
- previousOptions={[
55
- {
56
- toolId: "claude-code",
57
- toolLabel: "Claude Code",
58
- model: "opus",
59
- sessionId: "abc-123",
60
- inferenceLevel: "xhigh",
61
- skipPermissions: false,
62
- },
63
- ]}
64
- onBack={() => {}}
65
- onSelect={() => {}}
66
- />,
67
- );
68
-
69
- expect(getByText(/Model: opus \/ Skip: No \/ ID: abc-123/)).toBeDefined();
70
- });
71
-
72
- it("disables previous options when no history", () => {
73
- const { getAllByText } = render(
74
- <BranchQuickStartScreen
75
- branchName="feature/foo"
76
- previousOptions={[]}
77
- onBack={() => {}}
78
- onSelect={() => {}}
79
- />,
80
- );
81
-
82
- expect(getAllByText(/No previous settings/)).toHaveLength(2);
83
- });
84
-
85
- it("shows manual selection option", () => {
86
- const { getByText } = render(
87
- <BranchQuickStartScreen
88
- branchName="feature/foo"
89
- previousOptions={[
90
- {
91
- toolId: "codex-cli",
92
- toolLabel: "Codex",
93
- model: "gpt-5.2-codex",
94
- sessionId: "abc-123",
95
- },
96
- ]}
97
- onBack={() => {}}
98
- onSelect={() => {}}
99
- />,
100
- );
101
-
102
- expect(getByText(/Manual selection/)).toBeDefined();
103
- });
104
-
105
- it("renders multiple tools separately", () => {
106
- const { getByText, getAllByText } = render(
107
- <BranchQuickStartScreen
108
- branchName="feature/foo"
109
- previousOptions={[
110
- {
111
- toolId: "codex-cli",
112
- toolLabel: "Codex",
113
- model: "gpt-5.2-codex",
114
- sessionId: "codex-123",
115
- inferenceLevel: "high",
116
- skipPermissions: true,
117
- },
118
- {
119
- toolId: "claude-code",
120
- toolLabel: "Claude Code",
121
- model: "opus",
122
- sessionId: "claude-999",
123
- skipPermissions: false,
124
- },
125
- ]}
126
- onBack={() => {}}
127
- onSelect={() => {}}
128
- />,
129
- );
130
-
131
- expect(getAllByText(/\[Codex\]/i)).toHaveLength(2);
132
- expect(
133
- getByText(
134
- /Model: gpt-5.2-codex \/ Reasoning: High \/ Skip: Yes \/ ID: codex-123/,
135
- ),
136
- ).toBeDefined();
137
- expect(getAllByText(/\[Claude\]/i)).toHaveLength(2);
138
- expect(
139
- getByText(/Model: opus \/ Skip: No \/ ID: claude-999/),
140
- ).toBeDefined();
141
- });
142
- });
@@ -1,174 +0,0 @@
1
- /**
2
- * @vitest-environment happy-dom
3
- */
4
- import { describe, it, expect, beforeEach, vi } from "vitest";
5
- import { render, waitFor } from "@testing-library/react";
6
- import React from "react";
7
- import { CodingAgentSelectorScreen } from "../../../components/screens/CodingAgentSelectorScreen.js";
8
- import { Window } from "happy-dom";
9
-
10
- // Mock getAllCodingAgents
11
- vi.mock("../../../config/tools.js", () => ({
12
- getAllCodingAgents: vi.fn().mockResolvedValue([
13
- {
14
- id: "claude-code",
15
- displayName: "Claude Code",
16
- isBuiltin: true,
17
- },
18
- {
19
- id: "codex-cli",
20
- displayName: "Codex",
21
- isBuiltin: true,
22
- },
23
- ]),
24
- }));
25
-
26
- describe("CodingAgentSelectorScreen", () => {
27
- beforeEach(() => {
28
- // Setup happy-dom
29
- const window = new Window();
30
- globalThis.window = window as unknown as typeof globalThis.window;
31
- globalThis.document =
32
- window.document as unknown as typeof globalThis.document;
33
- });
34
-
35
- it("should render header with title", () => {
36
- const onBack = vi.fn();
37
- const onSelect = vi.fn();
38
- const { getByText } = render(
39
- <CodingAgentSelectorScreen onBack={onBack} onSelect={onSelect} />,
40
- );
41
-
42
- expect(getByText(/Coding Agent Selection/i)).toBeDefined();
43
- });
44
-
45
- it("should render Coding Agent options", async () => {
46
- const onBack = vi.fn();
47
- const onSelect = vi.fn();
48
- const { getByText } = render(
49
- <CodingAgentSelectorScreen onBack={onBack} onSelect={onSelect} />,
50
- );
51
-
52
- // Wait for agents to load
53
- await waitFor(() => {
54
- expect(getByText(/Claude Code/i)).toBeDefined();
55
- expect(getByText(/Codex/i)).toBeDefined();
56
- });
57
- });
58
-
59
- it("should render footer with actions", () => {
60
- const onBack = vi.fn();
61
- const onSelect = vi.fn();
62
- const { getAllByText } = render(
63
- <CodingAgentSelectorScreen onBack={onBack} onSelect={onSelect} />,
64
- );
65
-
66
- expect(getAllByText(/enter/i).length).toBeGreaterThan(0);
67
- expect(getAllByText(/esc/i).length).toBeGreaterThan(0);
68
- });
69
-
70
- it("should use terminal height for layout calculation", () => {
71
- const originalRows = process.stdout.rows;
72
- process.stdout.rows = 30;
73
-
74
- const onBack = vi.fn();
75
- const onSelect = vi.fn();
76
- const { container } = render(
77
- <CodingAgentSelectorScreen onBack={onBack} onSelect={onSelect} />,
78
- );
79
-
80
- expect(container).toBeDefined();
81
-
82
- process.stdout.rows = originalRows;
83
- });
84
-
85
- it("should handle back navigation with ESC key", () => {
86
- const onBack = vi.fn();
87
- const onSelect = vi.fn();
88
- const { container } = render(
89
- <CodingAgentSelectorScreen onBack={onBack} onSelect={onSelect} />,
90
- );
91
-
92
- // Test will verify onBack is called when ESC is pressed
93
- expect(container).toBeDefined();
94
- });
95
-
96
- it("should handle coding agent selection", () => {
97
- const onBack = vi.fn();
98
- const onSelect = vi.fn();
99
- const { container } = render(
100
- <CodingAgentSelectorScreen onBack={onBack} onSelect={onSelect} />,
101
- );
102
-
103
- // Test will verify onSelect is called with correct agent
104
- expect(container).toBeDefined();
105
- });
106
-
107
- it("should preselect the last used coding agent when provided", async () => {
108
- const onBack = vi.fn();
109
- const onSelect = vi.fn();
110
- const { container } = render(
111
- <CodingAgentSelectorScreen
112
- onBack={onBack}
113
- onSelect={onSelect}
114
- initialAgentId="codex-cli"
115
- />,
116
- );
117
-
118
- await waitFor(() => {
119
- expect(container.textContent?.includes("Codex")).toBe(true);
120
- });
121
-
122
- const text = container.textContent ?? "";
123
- expect(text).toContain("›Codex");
124
- expect(text).not.toContain("›Claude Code");
125
- });
126
-
127
- /**
128
- * T210: カスタムコーディングエージェント表示のテスト
129
- */
130
- describe("Custom coding agent display", () => {
131
- it("should load coding agents from getAllCodingAgents() dynamically", async () => {
132
- // TODO: 実装後にテストを記述
133
- // getAllCodingAgents()がモックされ、呼び出されることを確認
134
- // モックの戻り値がエージェントアイテムとして表示されることを確認
135
- expect(true).toBe(true);
136
- });
137
-
138
- it("should display both builtin and custom coding agents", async () => {
139
- // TODO: 実装後にテストを記述
140
- // getAllCodingAgents()がビルトインエージェント(claude-code, codex-cli)と
141
- // カスタムエージェント(例: aider)を返す場合、
142
- // すべてのエージェントが表示されることを確認
143
- expect(true).toBe(true);
144
- });
145
-
146
- it("should display custom coding agent with icon if defined", async () => {
147
- // TODO: 実装後にテストを記述
148
- // カスタムエージェントにiconフィールドがある場合、
149
- // それが表示されることを確認
150
- expect(true).toBe(true);
151
- });
152
-
153
- it("should display custom coding agent without icon if not defined", async () => {
154
- // TODO: 実装後にテストを記述
155
- // カスタムエージェントにiconフィールドがない場合、
156
- // エージェント名のみが表示されることを確認
157
- expect(true).toBe(true);
158
- });
159
-
160
- it("should handle custom coding agent selection", async () => {
161
- // TODO: 実装後にテストを記述
162
- // カスタムエージェントを選択した場合、
163
- // onSelect()がカスタムエージェントのIDで呼び出されることを確認
164
- expect(true).toBe(true);
165
- });
166
-
167
- it("should display only builtin coding agents if no custom agents exist", async () => {
168
- // TODO: 実装後にテストを記述
169
- // getAllCodingAgents()がビルトインエージェントのみを返す場合、
170
- // ビルトインエージェントのみが表示されることを確認
171
- expect(true).toBe(true);
172
- });
173
- });
174
- });
@@ -1,182 +0,0 @@
1
- /**
2
- * @vitest-environment happy-dom
3
- */
4
- import { describe, it, expect, beforeEach, vi } from "vitest";
5
- import { render } from "@testing-library/react";
6
- import React from "react";
7
- import { ExecutionModeSelectorScreen } from "../../../components/screens/ExecutionModeSelectorScreen.js";
8
- import { Window } from "happy-dom";
9
-
10
- describe("ExecutionModeSelectorScreen", () => {
11
- beforeEach(() => {
12
- // Setup happy-dom
13
- const window = new Window();
14
- globalThis.window = window as unknown as typeof globalThis.window;
15
- globalThis.document =
16
- window.document as unknown as typeof globalThis.document;
17
- });
18
-
19
- it("should render header with title", () => {
20
- const onBack = vi.fn();
21
- const onSelect = vi.fn();
22
- const { container } = render(
23
- <ExecutionModeSelectorScreen onBack={onBack} onSelect={onSelect} />,
24
- );
25
-
26
- expect(container).toBeDefined();
27
- });
28
-
29
- it("should render execution mode options", () => {
30
- const onBack = vi.fn();
31
- const onSelect = vi.fn();
32
- const { getByText } = render(
33
- <ExecutionModeSelectorScreen onBack={onBack} onSelect={onSelect} />,
34
- );
35
-
36
- expect(getByText(/New/i)).toBeDefined();
37
- expect(getByText(/Continue/i)).toBeDefined();
38
- expect(getByText(/Resume/i)).toBeDefined();
39
- });
40
-
41
- it("should include session ID in Continue label when provided", () => {
42
- const onBack = vi.fn();
43
- const onSelect = vi.fn();
44
- const { getByText } = render(
45
- <ExecutionModeSelectorScreen
46
- onBack={onBack}
47
- onSelect={onSelect}
48
- continueSessionId="abc-123"
49
- />,
50
- );
51
-
52
- expect(getByText(/Continue \(ID: abc-123\)/i)).toBeDefined();
53
- });
54
-
55
- it("should render footer with actions", () => {
56
- const onBack = vi.fn();
57
- const onSelect = vi.fn();
58
- const { getAllByText } = render(
59
- <ExecutionModeSelectorScreen onBack={onBack} onSelect={onSelect} />,
60
- );
61
-
62
- expect(getAllByText(/enter/i).length).toBeGreaterThan(0);
63
- expect(getAllByText(/esc/i).length).toBeGreaterThan(0);
64
- });
65
-
66
- it("should use terminal height for layout calculation", () => {
67
- const originalRows = process.stdout.rows;
68
- process.stdout.rows = 30;
69
-
70
- const onBack = vi.fn();
71
- const onSelect = vi.fn();
72
- const { container } = render(
73
- <ExecutionModeSelectorScreen onBack={onBack} onSelect={onSelect} />,
74
- );
75
-
76
- expect(container).toBeDefined();
77
-
78
- process.stdout.rows = originalRows;
79
- });
80
-
81
- it("should handle back navigation with ESC key", () => {
82
- const onBack = vi.fn();
83
- const onSelect = vi.fn();
84
- const { container } = render(
85
- <ExecutionModeSelectorScreen onBack={onBack} onSelect={onSelect} />,
86
- );
87
-
88
- // Test will verify onBack is called when ESC is pressed
89
- expect(container).toBeDefined();
90
- });
91
-
92
- it("should handle mode selection", () => {
93
- const onBack = vi.fn();
94
- const onSelect = vi.fn();
95
- const { container } = render(
96
- <ExecutionModeSelectorScreen onBack={onBack} onSelect={onSelect} />,
97
- );
98
-
99
- // Test will verify onSelect is called with correct mode
100
- expect(container).toBeDefined();
101
- });
102
-
103
- // TDD: Tests for 2-step selection (mode + skipPermissions)
104
- // TODO: Implement integration tests with user interaction simulation
105
- describe.skip("Skip Permissions Selection", () => {
106
- it("should render skip permissions prompt after mode selection", () => {
107
- const onBack = vi.fn();
108
- const onSelect = vi.fn();
109
- const { getByText } = render(
110
- <ExecutionModeSelectorScreen onBack={onBack} onSelect={onSelect} />,
111
- );
112
-
113
- // After selecting a mode, should show skip permissions prompt
114
- // This test will fail until we implement the 2-step UI
115
- expect(getByText(/Skip permission checks/i)).toBeDefined();
116
- });
117
-
118
- it("should show correct flag hints for skipPermissions prompt", () => {
119
- const onBack = vi.fn();
120
- const onSelect = vi.fn();
121
- const { getByText } = render(
122
- <ExecutionModeSelectorScreen onBack={onBack} onSelect={onSelect} />,
123
- );
124
-
125
- // Should show both --dangerously-skip-permissions and --yolo hints
126
- expect(getByText(/--dangerously-skip-permissions/i)).toBeDefined();
127
- expect(getByText(/--yolo/i)).toBeDefined();
128
- });
129
-
130
- it("should call onSelect with mode and skipPermissions=true when Yes is selected", () => {
131
- const onBack = vi.fn();
132
- const onSelect = vi.fn();
133
- render(
134
- <ExecutionModeSelectorScreen onBack={onBack} onSelect={onSelect} />,
135
- );
136
-
137
- // After selecting mode and Yes for skipPermissions
138
- // onSelect should be called with { mode: 'normal', skipPermissions: true }
139
- // This test will fail until implementation
140
- expect(onSelect).toHaveBeenCalledWith(
141
- expect.objectContaining({
142
- mode: expect.any(String),
143
- skipPermissions: true,
144
- }),
145
- );
146
- });
147
-
148
- it("should call onSelect with mode and skipPermissions=false when No is selected", () => {
149
- const onBack = vi.fn();
150
- const onSelect = vi.fn();
151
- render(
152
- <ExecutionModeSelectorScreen onBack={onBack} onSelect={onSelect} />,
153
- );
154
-
155
- // After selecting mode and No for skipPermissions
156
- // onSelect should be called with { mode: 'normal', skipPermissions: false }
157
- // This test will fail until implementation
158
- expect(onSelect).toHaveBeenCalledWith(
159
- expect.objectContaining({
160
- mode: expect.any(String),
161
- skipPermissions: false,
162
- }),
163
- );
164
- });
165
-
166
- it("should default skipPermissions to false", () => {
167
- const onBack = vi.fn();
168
- const onSelect = vi.fn();
169
- render(
170
- <ExecutionModeSelectorScreen onBack={onBack} onSelect={onSelect} />,
171
- );
172
-
173
- // Default should be No (skipPermissions: false)
174
- // This test will fail until implementation
175
- expect(onSelect).toHaveBeenCalledWith(
176
- expect.objectContaining({
177
- skipPermissions: false,
178
- }),
179
- );
180
- });
181
- });
182
- });
@@ -1,57 +0,0 @@
1
- /**
2
- * @vitest-environment happy-dom
3
- */
4
- import { describe, it, expect, vi } from "vitest";
5
- import { act } from "@testing-library/react";
6
- import { render as inkRender } from "ink-testing-library";
7
- import React from "react";
8
- import { LogDetailScreen } from "../../../components/screens/LogDetailScreen.js";
9
- import type { FormattedLogEntry } from "../../../../../logging/formatter.js";
10
-
11
- const entry: FormattedLogEntry = {
12
- id: "entry-1",
13
- raw: {
14
- time: "2025-12-25T10:00:00.000Z",
15
- level: 30,
16
- category: "cli",
17
- msg: "hello",
18
- },
19
- timestamp: 1_767_015_200_000,
20
- timeLabel: "10:00:00",
21
- levelLabel: "INFO",
22
- category: "cli",
23
- message: "hello",
24
- summary: "[10:00:00] [INFO] [cli] hello",
25
- json: '{\n "msg": "hello"\n}',
26
- };
27
-
28
- describe("LogDetailScreen", () => {
29
- it("renders formatted JSON and handles shortcuts", () => {
30
- const onBack = vi.fn();
31
- const onCopy = vi.fn();
32
-
33
- const { stdin, lastFrame } = inkRender(
34
- <LogDetailScreen entry={entry} onBack={onBack} onCopy={onCopy} />,
35
- );
36
-
37
- expect(lastFrame()).toContain('"msg": "hello"');
38
-
39
- act(() => {
40
- stdin.write("c");
41
- });
42
- expect(onCopy).toHaveBeenCalledWith(entry);
43
-
44
- act(() => {
45
- stdin.write("q");
46
- });
47
- expect(onBack).toHaveBeenCalled();
48
- });
49
-
50
- it("shows fallback when entry is missing", () => {
51
- const { lastFrame } = inkRender(
52
- <LogDetailScreen entry={null} onBack={vi.fn()} onCopy={vi.fn()} />,
53
- );
54
-
55
- expect(lastFrame()).toContain("No logs available.");
56
- });
57
- });
@@ -1,102 +0,0 @@
1
- /**
2
- * @vitest-environment happy-dom
3
- */
4
- import { describe, it, expect, vi } from "vitest";
5
- import { act } from "@testing-library/react";
6
- import { render as inkRender } from "ink-testing-library";
7
- import React from "react";
8
- import { LogListScreen } from "../../../components/screens/LogListScreen.js";
9
- import type { FormattedLogEntry } from "../../../../../logging/formatter.js";
10
-
11
- const buildEntry = (
12
- overrides: Partial<FormattedLogEntry>,
13
- ): FormattedLogEntry => ({
14
- id: "entry-1",
15
- raw: {
16
- time: "2025-12-25T10:00:00.000Z",
17
- level: 30,
18
- category: "cli",
19
- msg: "hello",
20
- },
21
- timestamp: 1_767_015_200_000,
22
- timeLabel: "10:00:00",
23
- levelLabel: "INFO",
24
- category: "cli",
25
- message: "hello",
26
- summary: "[10:00:00] [INFO] [cli] hello",
27
- json: '{\n "msg": "hello"\n}',
28
- ...overrides,
29
- });
30
-
31
- describe("LogListScreen", () => {
32
- it("renders log entries and handles shortcuts", () => {
33
- const entries: FormattedLogEntry[] = [
34
- buildEntry({ id: "entry-1" }),
35
- buildEntry({
36
- id: "entry-2",
37
- summary: "[10:01:00] [WARN] [server] warn",
38
- levelLabel: "WARN",
39
- category: "server",
40
- message: "warn",
41
- }),
42
- ];
43
-
44
- const onSelect = vi.fn();
45
- const onBack = vi.fn();
46
- const onCopy = vi.fn();
47
- const onPickDate = vi.fn();
48
-
49
- const { stdin, lastFrame } = inkRender(
50
- <LogListScreen
51
- entries={entries}
52
- loading={false}
53
- error={null}
54
- onBack={onBack}
55
- onSelect={onSelect}
56
- onCopy={onCopy}
57
- onPickDate={onPickDate}
58
- selectedDate="2025-12-25"
59
- />,
60
- );
61
-
62
- const frame = lastFrame();
63
- expect(frame).toContain("[10:00:00] [INFO] [cli] hello");
64
- expect(frame).toContain("[10:01:00] [WARN] [server] warn");
65
-
66
- act(() => {
67
- stdin.write("\r");
68
- });
69
- expect(onSelect).toHaveBeenCalledWith(entries[0]);
70
-
71
- act(() => {
72
- stdin.write("c");
73
- });
74
- expect(onCopy).toHaveBeenCalledWith(entries[0]);
75
-
76
- act(() => {
77
- stdin.write("d");
78
- });
79
- expect(onPickDate).toHaveBeenCalled();
80
-
81
- act(() => {
82
- stdin.write("q");
83
- });
84
- expect(onBack).toHaveBeenCalled();
85
- });
86
-
87
- it("shows empty message when no logs", () => {
88
- const { lastFrame } = inkRender(
89
- <LogListScreen
90
- entries={[]}
91
- loading={false}
92
- error={null}
93
- onBack={vi.fn()}
94
- onSelect={vi.fn()}
95
- onCopy={vi.fn()}
96
- selectedDate="2025-12-25"
97
- />,
98
- );
99
-
100
- expect(lastFrame()).toContain("No logs available.");
101
- });
102
- });