@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
@@ -13,8 +13,10 @@ import type { OpenCodeSessionInfo, SessionSearchOptions } from "../types.js";
13
13
  import {
14
14
  collectFilesIterative,
15
15
  matchesCwd,
16
+ resolveBranchFromCwd,
16
17
  readSessionInfoFromFile,
17
18
  } from "../common.js";
19
+ import { listAllWorktrees } from "../../../worktree.js";
18
20
 
19
21
  /**
20
22
  * Returns the OpenCode session directory
@@ -73,15 +75,50 @@ export async function findLatestOpenCodeSession(
73
75
  return b.mtime - a.mtime;
74
76
  });
75
77
 
78
+ const branchFilter =
79
+ typeof options.branch === "string" && options.branch.trim().length > 0
80
+ ? options.branch.trim()
81
+ : null;
82
+ const shouldCheckBranch = Boolean(branchFilter);
83
+ const shouldCheckCwd = Boolean(options.cwd) && !shouldCheckBranch;
84
+
85
+ let worktrees: { path: string; branch: string }[] = [];
86
+ if (shouldCheckBranch) {
87
+ if (Array.isArray(options.worktrees) && options.worktrees.length > 0) {
88
+ worktrees = options.worktrees
89
+ .filter((entry) => entry?.path && entry?.branch)
90
+ .map((entry) => ({ path: entry.path, branch: entry.branch }));
91
+ } else {
92
+ try {
93
+ const allWorktrees = await listAllWorktrees();
94
+ worktrees = allWorktrees
95
+ .filter((entry) => entry?.path && entry?.branch)
96
+ .map((entry) => ({ path: entry.path, branch: entry.branch }));
97
+ } catch {
98
+ worktrees = [];
99
+ }
100
+ }
101
+ if (!worktrees.length) return null;
102
+ }
103
+
76
104
  for (const file of pool) {
77
105
  const info = await readSessionInfoFromFile(file.fullPath);
78
106
  if (!info.id) continue;
79
- if (options.cwd) {
80
- if (matchesCwd(info.cwd, options.cwd)) {
81
- return { id: info.id, mtime: file.mtime };
107
+ const sessionCwd = info.cwd ?? null;
108
+
109
+ if (shouldCheckBranch) {
110
+ const resolvedBranch = resolveBranchFromCwd(sessionCwd, worktrees);
111
+ if (resolvedBranch !== branchFilter) {
112
+ continue;
82
113
  }
83
- continue;
84
114
  }
115
+
116
+ if (shouldCheckCwd && options.cwd) {
117
+ if (!matchesCwd(sessionCwd, options.cwd)) {
118
+ continue;
119
+ }
120
+ }
121
+
85
122
  return { id: info.id, mtime: file.mtime };
86
123
  }
87
124
 
@@ -98,7 +135,11 @@ export async function findLatestOpenCodeSessionId(
98
135
  cwd: string,
99
136
  options: SessionSearchOptions = {},
100
137
  ): Promise<string | null> {
101
- const searchOptions: SessionSearchOptions = { cwd: options.cwd ?? cwd };
138
+ const searchOptions: SessionSearchOptions = {
139
+ cwd: options.cwd ?? cwd,
140
+ branch: options.branch ?? null,
141
+ worktrees: options.worktrees ?? null,
142
+ };
102
143
  if (options.since !== undefined) searchOptions.since = options.since;
103
144
  if (options.until !== undefined) searchOptions.until = options.until;
104
145
  if (options.preferClosestTo !== undefined)
@@ -16,6 +16,10 @@ export interface SessionSearchOptions {
16
16
  windowMs?: number;
17
17
  /** Working directory filter */
18
18
  cwd?: string | null;
19
+ /** Branch name filter (resolved from session cwd via worktree paths) */
20
+ branch?: string | null;
21
+ /** Optional worktree list to avoid shelling out for branch mapping */
22
+ worktrees?: { path: string; branch: string }[] | null;
19
23
  }
20
24
 
21
25
  /**
@@ -214,6 +214,30 @@ export function resetTerminalModes(
214
214
  }
215
215
  }
216
216
 
217
+ export function writeTerminalLine(
218
+ message: string,
219
+ stream: "stdout" | "stderr" = "stdout",
220
+ ): void {
221
+ const terminal = getTerminalStreams();
222
+ const target = stream === "stderr" ? terminal.stderr : terminal.stdout;
223
+ const payload = message.endsWith("\n") ? message : `${message}\n`;
224
+
225
+ if (target && typeof target.write === "function") {
226
+ try {
227
+ target.write(payload);
228
+ return;
229
+ } catch {
230
+ // Ignore write errors and fall back to console.
231
+ }
232
+ }
233
+
234
+ if (stream === "stderr") {
235
+ console.error(message);
236
+ } else {
237
+ console.log(message);
238
+ }
239
+ }
240
+
217
241
  /**
218
242
  * Creates stdio settings for launching a child process.
219
243
  *
package/src/utils.test.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { describe, it, expect, beforeEach, afterEach } from "vitest";
1
+ import { describe, it, expect } from "bun:test";
2
2
  import { getPackageVersion } from "./utils";
3
3
  import { readFile } from "fs/promises";
4
4
  import path from "node:path";
package/src/utils.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import path from "node:path";
2
2
  import { fileURLToPath } from "node:url";
3
- import { access, readFile } from "fs/promises";
4
- import { existsSync } from "fs";
3
+ import { readFile } from "fs/promises";
5
4
  export function getCurrentDirname(): string {
6
5
  return path.dirname(fileURLToPath(import.meta.url));
7
6
  }
@@ -16,17 +15,51 @@ export class AppError extends Error {
16
15
  }
17
16
  }
18
17
 
18
+ /**
19
+ * Global cleanup callback for terminal restoration.
20
+ * This is called before exit to restore terminal state.
21
+ */
22
+ let cleanupCallback: (() => void) | null = null;
23
+
24
+ /**
25
+ * Registers a cleanup callback to be called on exit.
26
+ * Used for terminal state restoration.
27
+ */
28
+ export function registerExitCleanup(callback: () => void): void {
29
+ cleanupCallback = callback;
30
+ }
31
+
32
+ /**
33
+ * Clears the registered cleanup callback.
34
+ */
35
+ export function clearExitCleanup(): void {
36
+ cleanupCallback = null;
37
+ }
38
+
39
+ /**
40
+ * Performs cleanup and exits the process.
41
+ * Ensures terminal is restored before exiting.
42
+ */
43
+ function performCleanupAndExit(exitCode: number): void {
44
+ try {
45
+ cleanupCallback?.();
46
+ } catch {
47
+ // Ignore cleanup errors to ensure exit completes
48
+ }
49
+ process.exit(exitCode);
50
+ }
51
+
19
52
  export function setupExitHandlers(): void {
20
53
  // Handle Ctrl+C gracefully
21
54
  process.on("SIGINT", () => {
22
55
  console.log("\n\n👋 Goodbye!");
23
- process.exit(0);
56
+ performCleanupAndExit(0);
24
57
  });
25
58
 
26
59
  // Handle other termination signals
27
60
  process.on("SIGTERM", () => {
28
61
  console.log("\n\n👋 Goodbye!");
29
- process.exit(0);
62
+ performCleanupAndExit(0);
30
63
  });
31
64
  }
32
65
 
@@ -21,6 +21,7 @@ import { useStartSession } from "../hooks/useSessions";
21
21
  import { useCreateWorktree } from "../hooks/useWorktrees";
22
22
  import { useSyncBranch } from "../hooks/useBranches";
23
23
  import { ApiError } from "../lib/api";
24
+ import { getAgentTailwindClass } from "@/lib/coding-agent-colors";
24
25
 
25
26
  const BUILTIN_AGENT_SUMMARIES: Record<string, AgentSummary> = {
26
27
  "claude-code": {
@@ -166,7 +167,7 @@ export function CodingAgentLaunchModal({
166
167
  branch.name.replace(/^origin\//, ""),
167
168
  );
168
169
  const divergenceInfo = branch.divergence ?? null;
169
- const hasBlockingDivergence = Boolean(
170
+ const hasConflictingDivergence = Boolean(
170
171
  divergenceInfo && divergenceInfo.ahead > 0 && divergenceInfo.behind > 0,
171
172
  );
172
173
  const needsRemoteSync = Boolean(
@@ -174,7 +175,7 @@ export function CodingAgentLaunchModal({
174
175
  divergenceInfo &&
175
176
  divergenceInfo.behind > 0 &&
176
177
  divergenceInfo.ahead === 0 &&
177
- !hasBlockingDivergence,
178
+ !hasConflictingDivergence,
178
179
  );
179
180
 
180
181
  useEffect(() => {
@@ -270,15 +271,6 @@ export function CodingAgentLaunchModal({
270
271
  });
271
272
  return;
272
273
  }
273
- if (hasBlockingDivergence) {
274
- setBanner({
275
- type: "error",
276
- message:
277
- "Both remote and local have diverged. Resolve differences before launching.",
278
- });
279
- return;
280
- }
281
-
282
274
  if (
283
275
  skipPermissions &&
284
276
  !window.confirm("Skip permission checks? This is risky.")
@@ -408,11 +400,11 @@ export function CodingAgentLaunchModal({
408
400
  </Alert>
409
401
  )}
410
402
 
411
- {hasBlockingDivergence && (
403
+ {hasConflictingDivergence && (
412
404
  <Alert variant="warning">
413
405
  <AlertDescription>
414
- Both remote and local have unresolved differences. Rebase/merge
415
- before launching.
406
+ Both remote and local have unresolved differences. You can
407
+ launch, but resolving differences is recommended.
416
408
  </AlertDescription>
417
409
  </Alert>
418
410
  )}
@@ -430,7 +422,11 @@ export function CodingAgentLaunchModal({
430
422
  </SelectTrigger>
431
423
  <SelectContent>
432
424
  {availableAgents.map((agent) => (
433
- <SelectItem key={agent.id} value={agent.id}>
425
+ <SelectItem
426
+ key={agent.id}
427
+ value={agent.id}
428
+ className={getAgentTailwindClass(agent.id)}
429
+ >
434
430
  {agent.label}
435
431
  </SelectItem>
436
432
  ))}
@@ -479,12 +475,7 @@ export function CodingAgentLaunchModal({
479
475
  <div className="flex flex-wrap gap-2">
480
476
  <Button
481
477
  onClick={handleStartSession}
482
- disabled={
483
- isStartingSession ||
484
- !selectedAgent ||
485
- hasBlockingDivergence ||
486
- needsRemoteSync
487
- }
478
+ disabled={isStartingSession || !selectedAgent || needsRemoteSync}
488
479
  >
489
480
  {isStartingSession ? "Launching..." : "Launch coding agent"}
490
481
  </Button>
@@ -2,6 +2,10 @@ import React from "react";
2
2
  import { Card, CardHeader, CardContent } from "@/components/ui/card";
3
3
  import { Badge } from "@/components/ui/badge";
4
4
  import type { Branch, LastToolUsage } from "../../../../../types/api.js";
5
+ import {
6
+ getAgentTailwindClass,
7
+ getAgentBgTailwindClass,
8
+ } from "@/lib/coding-agent-colors";
5
9
 
6
10
  interface BranchInfoCardsProps {
7
11
  branch: Branch;
@@ -158,7 +162,10 @@ export function BranchInfoCards({
158
162
  </CardHeader>
159
163
  <CardContent>
160
164
  <div className="flex flex-wrap items-center gap-2 text-sm">
161
- <Badge variant="outline">
165
+ <Badge
166
+ variant="outline"
167
+ className={`${getAgentTailwindClass(latestToolUsage.toolId)} ${getAgentBgTailwindClass(latestToolUsage.toolId)}`}
168
+ >
162
169
  {renderToolUsage(latestToolUsage)}
163
170
  </Badge>
164
171
  <span className="text-muted-foreground">
@@ -169,6 +176,14 @@ export function BranchInfoCards({
169
176
  @ {latestToolUsage.worktreePath}
170
177
  </span>
171
178
  )}
179
+ {latestToolUsage.sessionId && (
180
+ <span className="text-xs text-muted-foreground">
181
+ Session ID:{" "}
182
+ <code className="rounded bg-muted px-1.5 py-0.5 font-mono">
183
+ {latestToolUsage.sessionId}
184
+ </code>
185
+ </span>
186
+ )}
172
187
  </div>
173
188
  </CardContent>
174
189
  </Card>
@@ -10,6 +10,10 @@ import {
10
10
  TableHead,
11
11
  TableCell,
12
12
  } from "@/components/ui/table";
13
+ import {
14
+ getAgentTailwindClass,
15
+ normalizeAgentToToolId,
16
+ } from "@/lib/coding-agent-colors";
13
17
 
14
18
  interface SessionInfo {
15
19
  sessionId: string;
@@ -131,7 +135,9 @@ export function SessionHistoryTable({
131
135
  {SESSION_STATUS_LABEL[session.status]}
132
136
  </Badge>
133
137
  </TableCell>
134
- <TableCell className="font-medium">
138
+ <TableCell
139
+ className={`font-medium ${getAgentTailwindClass(normalizeAgentToToolId(session.agentType))}`}
140
+ >
135
141
  {agentLabel(session.agentType, session.agentName)}
136
142
  </TableCell>
137
143
  <TableCell>
@@ -13,6 +13,7 @@ import {
13
13
  SelectValue,
14
14
  } from "@/components/ui/select";
15
15
  import { cn } from "@/lib/utils";
16
+ import { getAgentTailwindClass } from "@/lib/coding-agent-colors";
16
17
  import type { ApiCodingAgent, Branch } from "../../../../../types/api.js";
17
18
 
18
19
  type ToolMode = "normal" | "continue" | "resume";
@@ -45,7 +46,7 @@ interface ToolLauncherProps {
45
46
  isStartingSession: boolean;
46
47
  isSyncingBranch: boolean;
47
48
  needsRemoteSync: boolean;
48
- hasBlockingDivergence: boolean;
49
+ hasConflictingDivergence: boolean;
49
50
  onToolChange: (toolId: string) => void;
50
51
  onModeChange: (mode: ToolMode) => void;
51
52
  onSkipPermissionsChange: (skip: boolean) => void;
@@ -88,7 +89,7 @@ export function ToolLauncher({
88
89
  isStartingSession,
89
90
  isSyncingBranch,
90
91
  needsRemoteSync,
91
- hasBlockingDivergence,
92
+ hasConflictingDivergence,
92
93
  onToolChange,
93
94
  onModeChange,
94
95
  onSkipPermissionsChange,
@@ -170,7 +171,11 @@ export function ToolLauncher({
170
171
  </SelectTrigger>
171
172
  <SelectContent>
172
173
  {availableTools.map((tool) => (
173
- <SelectItem key={tool.id} value={tool.id}>
174
+ <SelectItem
175
+ key={tool.id}
176
+ value={tool.id}
177
+ className={getAgentTailwindClass(tool.id)}
178
+ >
174
179
  {tool.label}
175
180
  </SelectItem>
176
181
  ))}
@@ -243,11 +248,12 @@ export function ToolLauncher({
243
248
  </Alert>
244
249
  )}
245
250
 
246
- {hasBlockingDivergence && (
251
+ {hasConflictingDivergence && (
247
252
  <Alert variant="warning" data-testid="divergence-warning">
248
253
  <AlertDescription>
249
254
  <p>
250
- リモートとローカルの両方に未解決の差分があるため、起動をブロックしています。
255
+ リモートとローカルの両方に未解決の差分があります。起動は可能ですが、
256
+ 衝突を避けるために差分の解消を推奨します。
251
257
  </p>
252
258
  <ul className="mt-2 list-inside list-disc text-xs text-muted-foreground">
253
259
  <li>
@@ -266,7 +272,6 @@ export function ToolLauncher({
266
272
  disabled={
267
273
  isStartingSession ||
268
274
  !selectedTool ||
269
- hasBlockingDivergence ||
270
275
  needsRemoteSync ||
271
276
  isSyncingBranch
272
277
  }
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Coding Agent Color Definitions for Web UI
3
+ *
4
+ * This module provides consistent color definitions for coding agents
5
+ * in the Web UI (React/Tailwind) (SPEC-3b0ed29b FR-024~FR-027).
6
+ *
7
+ * Note: This mirrors the CLI color utility at src/utils/coding-agent-colors.ts
8
+ * Both files should be kept in sync.
9
+ */
10
+
11
+ /**
12
+ * Tool ID constants for coding agents
13
+ */
14
+ export const CODING_AGENT_TOOL_IDS = {
15
+ CLAUDE_CODE: "claude-code",
16
+ CODEX_CLI: "codex-cli",
17
+ GEMINI_CLI: "gemini-cli",
18
+ OPENCODE: "opencode",
19
+ } as const;
20
+
21
+ /**
22
+ * Color definitions for coding agents
23
+ */
24
+ export const CODING_AGENT_COLORS = {
25
+ [CODING_AGENT_TOOL_IDS.CLAUDE_CODE]: {
26
+ hex: "#f6e05e",
27
+ tailwind: "text-yellow-400",
28
+ bgTailwind: "bg-yellow-400/20",
29
+ borderTailwind: "border-yellow-400",
30
+ },
31
+ [CODING_AGENT_TOOL_IDS.CODEX_CLI]: {
32
+ hex: "#4fd1c5",
33
+ tailwind: "text-cyan-400",
34
+ bgTailwind: "bg-cyan-400/20",
35
+ borderTailwind: "border-cyan-400",
36
+ },
37
+ [CODING_AGENT_TOOL_IDS.GEMINI_CLI]: {
38
+ hex: "#d53f8c",
39
+ tailwind: "text-pink-500",
40
+ bgTailwind: "bg-pink-500/20",
41
+ borderTailwind: "border-pink-500",
42
+ },
43
+ [CODING_AGENT_TOOL_IDS.OPENCODE]: {
44
+ hex: "#48bb78",
45
+ tailwind: "text-green-400",
46
+ bgTailwind: "bg-green-400/20",
47
+ borderTailwind: "border-green-400",
48
+ },
49
+ } as const;
50
+
51
+ /**
52
+ * Default color for unknown/custom agents
53
+ */
54
+ export const DEFAULT_AGENT_COLOR = {
55
+ hex: "#a0aec0",
56
+ tailwind: "text-gray-400",
57
+ bgTailwind: "bg-gray-400/20",
58
+ borderTailwind: "border-gray-400",
59
+ };
60
+
61
+ /**
62
+ * Get Tailwind CSS text color class for a coding agent
63
+ *
64
+ * @param toolId - The tool ID (e.g., "claude-code", "codex-cli")
65
+ * @returns Tailwind CSS class name
66
+ */
67
+ export function getAgentTailwindClass(toolId?: string | null): string {
68
+ if (!toolId) {
69
+ return DEFAULT_AGENT_COLOR.tailwind;
70
+ }
71
+
72
+ const color = CODING_AGENT_COLORS[toolId as keyof typeof CODING_AGENT_COLORS];
73
+ return color?.tailwind ?? DEFAULT_AGENT_COLOR.tailwind;
74
+ }
75
+
76
+ /**
77
+ * Get Tailwind CSS background color class for a coding agent
78
+ *
79
+ * @param toolId - The tool ID (e.g., "claude-code", "codex-cli")
80
+ * @returns Tailwind CSS class name for background
81
+ */
82
+ export function getAgentBgTailwindClass(toolId?: string | null): string {
83
+ if (!toolId) {
84
+ return DEFAULT_AGENT_COLOR.bgTailwind;
85
+ }
86
+
87
+ const color = CODING_AGENT_COLORS[toolId as keyof typeof CODING_AGENT_COLORS];
88
+ return color?.bgTailwind ?? DEFAULT_AGENT_COLOR.bgTailwind;
89
+ }
90
+
91
+ /**
92
+ * Get hex color for a coding agent
93
+ *
94
+ * @param toolId - The tool ID (e.g., "claude-code", "codex-cli")
95
+ * @returns Hex color string
96
+ */
97
+ export function getAgentHexColor(toolId?: string | null): string {
98
+ if (!toolId) {
99
+ return DEFAULT_AGENT_COLOR.hex;
100
+ }
101
+
102
+ const color = CODING_AGENT_COLORS[toolId as keyof typeof CODING_AGENT_COLORS];
103
+ return color?.hex ?? DEFAULT_AGENT_COLOR.hex;
104
+ }
105
+
106
+ /**
107
+ * Normalize agent type string to tool ID
108
+ * Handles various naming conventions used across the codebase
109
+ *
110
+ * @param agentType - Agent type string (e.g., "claude", "codex-cli", "Claude Code")
111
+ * @returns Normalized tool ID
112
+ */
113
+ export function normalizeAgentToToolId(
114
+ agentType?: string | null,
115
+ ): string | null {
116
+ if (!agentType) return null;
117
+
118
+ const normalized = agentType.toLowerCase().trim();
119
+
120
+ // Direct matches
121
+ if (normalized === "claude-code" || normalized === "claude") {
122
+ return CODING_AGENT_TOOL_IDS.CLAUDE_CODE;
123
+ }
124
+ if (normalized === "codex-cli" || normalized === "codex") {
125
+ return CODING_AGENT_TOOL_IDS.CODEX_CLI;
126
+ }
127
+ if (normalized === "gemini-cli" || normalized === "gemini") {
128
+ return CODING_AGENT_TOOL_IDS.GEMINI_CLI;
129
+ }
130
+ if (normalized === "opencode" || normalized === "open-code") {
131
+ return CODING_AGENT_TOOL_IDS.OPENCODE;
132
+ }
133
+
134
+ // Label-based matches
135
+ if (normalized.includes("claude")) {
136
+ return CODING_AGENT_TOOL_IDS.CLAUDE_CODE;
137
+ }
138
+ if (normalized.includes("codex")) {
139
+ return CODING_AGENT_TOOL_IDS.CODEX_CLI;
140
+ }
141
+ if (normalized.includes("gemini")) {
142
+ return CODING_AGENT_TOOL_IDS.GEMINI_CLI;
143
+ }
144
+ if (normalized.includes("opencode")) {
145
+ return CODING_AGENT_TOOL_IDS.OPENCODE;
146
+ }
147
+
148
+ return agentType; // Return as-is for custom agents
149
+ }
@@ -210,7 +210,7 @@ export function BranchDetailPage() {
210
210
  // Computed values
211
211
  const canStartSession = Boolean(branch.worktreePath);
212
212
  const divergenceInfo = branch.divergence ?? null;
213
- const hasBlockingDivergence = Boolean(
213
+ const hasConflictingDivergence = Boolean(
214
214
  divergenceInfo && divergenceInfo.ahead > 0 && divergenceInfo.behind > 0,
215
215
  );
216
216
  const needsRemoteSync = Boolean(
@@ -218,7 +218,7 @@ export function BranchDetailPage() {
218
218
  divergenceInfo &&
219
219
  divergenceInfo.behind > 0 &&
220
220
  divergenceInfo.ahead === 0 &&
221
- !hasBlockingDivergence,
221
+ !hasConflictingDivergence,
222
222
  );
223
223
  const isSyncingBranch = syncBranch.isPending;
224
224
 
@@ -270,14 +270,6 @@ export function BranchDetailPage() {
270
270
  return;
271
271
  }
272
272
 
273
- if (hasBlockingDivergence) {
274
- setBanner({
275
- type: "error",
276
- message: "差分を解消してから起動してください。",
277
- });
278
- return;
279
- }
280
-
281
273
  if (
282
274
  skipPermissions &&
283
275
  !window.confirm("権限チェックをスキップして起動します。続行しますか?")
@@ -293,6 +285,13 @@ export function BranchDetailPage() {
293
285
  : selectedTool.target === "custom"
294
286
  ? "custom"
295
287
  : "claude-code";
288
+ const resumeSessionId =
289
+ selectedMode === "normal"
290
+ ? null
291
+ : latestToolUsage?.sessionId &&
292
+ latestToolUsage.toolId === selectedToolId
293
+ ? latestToolUsage.sessionId
294
+ : null;
296
295
  const extraArgs = extraArgsText
297
296
  .split(/\s+/)
298
297
  .map((c) => c.trim())
@@ -309,6 +308,7 @@ export function BranchDetailPage() {
309
308
  ...(selectedTool.target === "codex"
310
309
  ? { bypassApprovals: skipPermissions }
311
310
  : {}),
311
+ ...(resumeSessionId ? { resumeSessionId } : {}),
312
312
  ...(extraArgs.length ? { extraArgs } : {}),
313
313
  } as const;
314
314
 
@@ -478,7 +478,7 @@ export function BranchDetailPage() {
478
478
  isStartingSession={isStartingSession}
479
479
  isSyncingBranch={isSyncingBranch}
480
480
  needsRemoteSync={needsRemoteSync}
481
- hasBlockingDivergence={hasBlockingDivergence}
481
+ hasConflictingDivergence={hasConflictingDivergence}
482
482
  onToolChange={setSelectedToolId}
483
483
  onModeChange={setSelectedMode}
484
484
  onSkipPermissionsChange={setSkipPermissions}