@akiojin/gwt 4.10.0 → 4.11.6

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 (579) hide show
  1. package/README.ja.md +4 -4
  2. package/README.md +4 -4
  3. package/dist/claude.d.ts +1 -0
  4. package/dist/claude.d.ts.map +1 -1
  5. package/dist/claude.js +52 -49
  6. package/dist/claude.js.map +1 -1
  7. package/dist/cli/ui/App.solid.d.ts +29 -0
  8. package/dist/cli/ui/App.solid.d.ts.map +1 -0
  9. package/dist/cli/ui/App.solid.js +1197 -0
  10. package/dist/cli/ui/App.solid.js.map +1 -0
  11. package/dist/cli/ui/components/solid/Footer.d.ts +10 -0
  12. package/dist/cli/ui/components/solid/Footer.d.ts.map +1 -0
  13. package/dist/cli/ui/components/solid/Footer.js +10 -0
  14. package/dist/cli/ui/components/solid/Footer.js.map +1 -0
  15. package/dist/cli/ui/components/{parts → solid}/Header.d.ts +1 -6
  16. package/dist/cli/ui/components/solid/Header.d.ts.map +1 -0
  17. package/dist/cli/ui/components/solid/Header.js +13 -0
  18. package/dist/cli/ui/components/solid/Header.js.map +1 -0
  19. package/dist/cli/ui/components/solid/HelpOverlay.d.ts +8 -0
  20. package/dist/cli/ui/components/solid/HelpOverlay.d.ts.map +1 -0
  21. package/dist/cli/ui/components/solid/HelpOverlay.js +118 -0
  22. package/dist/cli/ui/components/solid/HelpOverlay.js.map +1 -0
  23. package/dist/cli/ui/components/solid/QuickStartStep.d.ts +17 -0
  24. package/dist/cli/ui/components/solid/QuickStartStep.d.ts.map +1 -0
  25. package/dist/cli/ui/components/solid/QuickStartStep.js +139 -0
  26. package/dist/cli/ui/components/solid/QuickStartStep.js.map +1 -0
  27. package/dist/cli/ui/components/solid/SelectInput.d.ts +22 -0
  28. package/dist/cli/ui/components/solid/SelectInput.d.ts.map +1 -0
  29. package/dist/cli/ui/components/solid/SelectInput.js +44 -0
  30. package/dist/cli/ui/components/solid/SelectInput.js.map +1 -0
  31. package/dist/cli/ui/components/solid/TextInput.d.ts +12 -0
  32. package/dist/cli/ui/components/solid/TextInput.d.ts.map +1 -0
  33. package/dist/cli/ui/components/solid/TextInput.js +9 -0
  34. package/dist/cli/ui/components/solid/TextInput.js.map +1 -0
  35. package/dist/cli/ui/components/solid/WizardController.d.ts +34 -0
  36. package/dist/cli/ui/components/solid/WizardController.d.ts.map +1 -0
  37. package/dist/cli/ui/components/solid/WizardController.js +215 -0
  38. package/dist/cli/ui/components/solid/WizardController.js.map +1 -0
  39. package/dist/cli/ui/components/solid/WizardPopup.d.ts +26 -0
  40. package/dist/cli/ui/components/solid/WizardPopup.d.ts.map +1 -0
  41. package/dist/cli/ui/components/solid/WizardPopup.js +68 -0
  42. package/dist/cli/ui/components/solid/WizardPopup.js.map +1 -0
  43. package/dist/cli/ui/components/solid/WizardSteps.d.ts +52 -0
  44. package/dist/cli/ui/components/solid/WizardSteps.d.ts.map +1 -0
  45. package/dist/cli/ui/components/solid/WizardSteps.js +462 -0
  46. package/dist/cli/ui/components/solid/WizardSteps.js.map +1 -0
  47. package/dist/cli/ui/core/index.d.ts +12 -0
  48. package/dist/cli/ui/core/index.d.ts.map +1 -0
  49. package/dist/cli/ui/core/index.js +15 -0
  50. package/dist/cli/ui/core/index.js.map +1 -0
  51. package/dist/cli/ui/core/keybindings.d.ts +106 -0
  52. package/dist/cli/ui/core/keybindings.d.ts.map +1 -0
  53. package/dist/cli/ui/core/keybindings.js +270 -0
  54. package/dist/cli/ui/core/keybindings.js.map +1 -0
  55. package/dist/cli/ui/core/theme.d.ts +114 -0
  56. package/dist/cli/ui/core/theme.d.ts.map +1 -0
  57. package/dist/cli/ui/core/theme.js +170 -0
  58. package/dist/cli/ui/core/theme.js.map +1 -0
  59. package/dist/cli/ui/core/types.d.ts +156 -0
  60. package/dist/cli/ui/core/types.d.ts.map +1 -0
  61. package/dist/cli/ui/core/types.js +10 -0
  62. package/dist/cli/ui/core/types.js.map +1 -0
  63. package/dist/cli/ui/hooks/solid/useScrollableList.d.ts +26 -0
  64. package/dist/cli/ui/hooks/solid/useScrollableList.d.ts.map +1 -0
  65. package/dist/cli/ui/hooks/solid/useScrollableList.js +89 -0
  66. package/dist/cli/ui/hooks/solid/useScrollableList.js.map +1 -0
  67. package/dist/cli/ui/hooks/solid/useTerminalSize.d.ts +10 -0
  68. package/dist/cli/ui/hooks/solid/useTerminalSize.d.ts.map +1 -0
  69. package/dist/cli/ui/hooks/solid/useTerminalSize.js +16 -0
  70. package/dist/cli/ui/hooks/solid/useTerminalSize.js.map +1 -0
  71. package/dist/cli/ui/index.solid.d.ts +5 -0
  72. package/dist/cli/ui/index.solid.d.ts.map +1 -0
  73. package/dist/cli/ui/index.solid.js +21 -0
  74. package/dist/cli/ui/index.solid.js.map +1 -0
  75. package/dist/cli/ui/{components/screens → screens/solid}/BranchListScreen.d.ts +8 -22
  76. package/dist/cli/ui/screens/solid/BranchListScreen.d.ts.map +1 -0
  77. package/dist/cli/ui/screens/solid/BranchListScreen.js +756 -0
  78. package/dist/cli/ui/screens/solid/BranchListScreen.js.map +1 -0
  79. package/dist/cli/ui/screens/solid/ConfirmScreen.d.ts +10 -0
  80. package/dist/cli/ui/screens/solid/ConfirmScreen.d.ts.map +1 -0
  81. package/dist/cli/ui/screens/solid/ConfirmScreen.js +37 -0
  82. package/dist/cli/ui/screens/solid/ConfirmScreen.js.map +1 -0
  83. package/dist/cli/ui/screens/solid/EnvironmentScreen.d.ts +14 -0
  84. package/dist/cli/ui/screens/solid/EnvironmentScreen.d.ts.map +1 -0
  85. package/dist/cli/ui/screens/solid/EnvironmentScreen.js +91 -0
  86. package/dist/cli/ui/screens/solid/EnvironmentScreen.js.map +1 -0
  87. package/dist/cli/ui/screens/solid/ErrorScreen.d.ts +8 -0
  88. package/dist/cli/ui/screens/solid/ErrorScreen.d.ts.map +1 -0
  89. package/dist/cli/ui/screens/solid/ErrorScreen.js +18 -0
  90. package/dist/cli/ui/screens/solid/ErrorScreen.js.map +1 -0
  91. package/dist/cli/ui/screens/solid/InputScreen.d.ts +13 -0
  92. package/dist/cli/ui/screens/solid/InputScreen.d.ts.map +1 -0
  93. package/dist/cli/ui/screens/solid/InputScreen.js +17 -0
  94. package/dist/cli/ui/screens/solid/InputScreen.js.map +1 -0
  95. package/dist/cli/ui/screens/solid/LoadingIndicator.d.ts +9 -0
  96. package/dist/cli/ui/screens/solid/LoadingIndicator.d.ts.map +1 -0
  97. package/dist/cli/ui/screens/solid/LoadingIndicator.js +43 -0
  98. package/dist/cli/ui/screens/solid/LoadingIndicator.js.map +1 -0
  99. package/dist/cli/ui/{components/screens → screens/solid}/LogDetailScreen.d.ts +2 -2
  100. package/dist/cli/ui/screens/solid/LogDetailScreen.d.ts.map +1 -0
  101. package/dist/cli/ui/screens/solid/LogDetailScreen.js +34 -0
  102. package/dist/cli/ui/screens/solid/LogDetailScreen.js.map +1 -0
  103. package/dist/cli/ui/{components/screens/LogListScreen.d.ts → screens/solid/LogScreen.d.ts} +4 -4
  104. package/dist/cli/ui/screens/solid/LogScreen.d.ts.map +1 -0
  105. package/dist/cli/ui/screens/solid/LogScreen.js +95 -0
  106. package/dist/cli/ui/screens/solid/LogScreen.js.map +1 -0
  107. package/dist/cli/ui/screens/solid/ProfileEnvScreen.d.ts +17 -0
  108. package/dist/cli/ui/screens/solid/ProfileEnvScreen.d.ts.map +1 -0
  109. package/dist/cli/ui/screens/solid/ProfileEnvScreen.js +112 -0
  110. package/dist/cli/ui/screens/solid/ProfileEnvScreen.js.map +1 -0
  111. package/dist/cli/ui/screens/solid/ProfileScreen.d.ts +17 -0
  112. package/dist/cli/ui/screens/solid/ProfileScreen.d.ts.map +1 -0
  113. package/dist/cli/ui/screens/solid/ProfileScreen.js +50 -0
  114. package/dist/cli/ui/screens/solid/ProfileScreen.js.map +1 -0
  115. package/dist/cli/ui/screens/solid/SelectorScreen.d.ts +20 -0
  116. package/dist/cli/ui/screens/solid/SelectorScreen.d.ts.map +1 -0
  117. package/dist/cli/ui/screens/solid/SelectorScreen.js +90 -0
  118. package/dist/cli/ui/screens/solid/SelectorScreen.js.map +1 -0
  119. package/dist/cli/ui/screens/solid/WorktreeCreateScreen.d.ts +13 -0
  120. package/dist/cli/ui/screens/solid/WorktreeCreateScreen.d.ts.map +1 -0
  121. package/dist/cli/ui/screens/solid/WorktreeCreateScreen.js +59 -0
  122. package/dist/cli/ui/screens/solid/WorktreeCreateScreen.js.map +1 -0
  123. package/dist/cli/ui/stores/appStore.d.ts +143 -0
  124. package/dist/cli/ui/stores/appStore.d.ts.map +1 -0
  125. package/dist/cli/ui/stores/appStore.js +158 -0
  126. package/dist/cli/ui/stores/appStore.js.map +1 -0
  127. package/dist/cli/ui/stores/branchStore.d.ts +159 -0
  128. package/dist/cli/ui/stores/branchStore.d.ts.map +1 -0
  129. package/dist/cli/ui/stores/branchStore.js +275 -0
  130. package/dist/cli/ui/stores/branchStore.js.map +1 -0
  131. package/dist/cli/ui/stores/index.d.ts +11 -0
  132. package/dist/cli/ui/stores/index.d.ts.map +1 -0
  133. package/dist/cli/ui/stores/index.js +14 -0
  134. package/dist/cli/ui/stores/index.js.map +1 -0
  135. package/dist/cli/ui/stores/uiStore.d.ts +146 -0
  136. package/dist/cli/ui/stores/uiStore.d.ts.map +1 -0
  137. package/dist/cli/ui/stores/uiStore.js +166 -0
  138. package/dist/cli/ui/stores/uiStore.js.map +1 -0
  139. package/dist/cli/ui/types.d.ts +16 -1
  140. package/dist/cli/ui/types.d.ts.map +1 -1
  141. package/dist/cli/ui/utils/branchFormatter.d.ts.map +1 -1
  142. package/dist/cli/ui/utils/branchFormatter.js +7 -210
  143. package/dist/cli/ui/utils/branchFormatter.js.map +1 -1
  144. package/dist/cli/ui/utils/continueSession.d.ts +4 -0
  145. package/dist/cli/ui/utils/continueSession.d.ts.map +1 -1
  146. package/dist/cli/ui/utils/continueSession.js +30 -0
  147. package/dist/cli/ui/utils/continueSession.js.map +1 -1
  148. package/dist/client/assets/{index-ChHC-Puh.css → index-BbfV7Wuj.css} +1 -1
  149. package/dist/client/assets/index-CoAyq5x1.js +78 -0
  150. package/dist/client/index.html +2 -2
  151. package/dist/codex.d.ts +1 -0
  152. package/dist/codex.d.ts.map +1 -1
  153. package/dist/codex.js +86 -45
  154. package/dist/codex.js.map +1 -1
  155. package/dist/config/builtin-coding-agents.js +4 -4
  156. package/dist/config/builtin-coding-agents.js.map +1 -1
  157. package/dist/config/index.d.ts +2 -0
  158. package/dist/config/index.d.ts.map +1 -1
  159. package/dist/config/index.js +2 -0
  160. package/dist/config/index.js.map +1 -1
  161. package/dist/gemini.d.ts +1 -0
  162. package/dist/gemini.d.ts.map +1 -1
  163. package/dist/gemini.js +42 -37
  164. package/dist/gemini.js.map +1 -1
  165. package/dist/index.d.ts +1 -1
  166. package/dist/index.d.ts.map +1 -1
  167. package/dist/index.js +122 -102
  168. package/dist/index.js.map +1 -1
  169. package/dist/launcher.d.ts.map +1 -1
  170. package/dist/launcher.js +18 -3
  171. package/dist/launcher.js.map +1 -1
  172. package/dist/logging/logger.d.ts.map +1 -1
  173. package/dist/logging/logger.js +26 -9
  174. package/dist/logging/logger.js.map +1 -1
  175. package/dist/opentui/highlights-eq9cgrbb.scm +604 -0
  176. package/dist/opentui/highlights-ghv9g403.scm +205 -0
  177. package/dist/opentui/highlights-hk7bwhj4.scm +284 -0
  178. package/dist/opentui/highlights-r812a2qc.scm +150 -0
  179. package/dist/opentui/highlights-x6tmsnaa.scm +115 -0
  180. package/dist/opentui/index.solid.d.ts +2 -0
  181. package/dist/opentui/index.solid.d.ts.map +1 -0
  182. package/dist/opentui/index.solid.js +52034 -0
  183. package/dist/opentui/index.solid.js.map +1 -0
  184. package/dist/opentui/injections-73j83es3.scm +27 -0
  185. package/dist/opentui/tree-sitter-javascript-nd0q4pe9.wasm +0 -0
  186. package/dist/opentui/tree-sitter-markdown-411r6y9b.wasm +0 -0
  187. package/dist/opentui/tree-sitter-markdown_inline-j5349f42.wasm +0 -0
  188. package/dist/opentui/tree-sitter-typescript-zxjzwt75.wasm +0 -0
  189. package/dist/opentui/tree-sitter-zig-e78zbjpm.wasm +0 -0
  190. package/dist/repositories/worktree.repository.d.ts +1 -0
  191. package/dist/repositories/worktree.repository.d.ts.map +1 -1
  192. package/dist/repositories/worktree.repository.js +7 -0
  193. package/dist/repositories/worktree.repository.js.map +1 -1
  194. package/dist/services/codingAgentResolver.d.ts +2 -0
  195. package/dist/services/codingAgentResolver.d.ts.map +1 -1
  196. package/dist/services/codingAgentResolver.js +30 -4
  197. package/dist/services/codingAgentResolver.js.map +1 -1
  198. package/dist/services/dependency-installer.d.ts.map +1 -1
  199. package/dist/services/dependency-installer.js +0 -5
  200. package/dist/services/dependency-installer.js.map +1 -1
  201. package/dist/types/api.d.ts +3 -0
  202. package/dist/types/api.d.ts.map +1 -1
  203. package/dist/types/coding-agent.d.ts +62 -0
  204. package/dist/types/coding-agent.d.ts.map +1 -0
  205. package/dist/types/coding-agent.js +29 -0
  206. package/dist/types/coding-agent.js.map +1 -0
  207. package/dist/types/tools.d.ts +17 -0
  208. package/dist/types/tools.d.ts.map +1 -1
  209. package/dist/utils/coding-agent-colors.d.ts +88 -0
  210. package/dist/utils/coding-agent-colors.d.ts.map +1 -0
  211. package/dist/utils/coding-agent-colors.js +137 -0
  212. package/dist/utils/coding-agent-colors.js.map +1 -0
  213. package/dist/utils/command.d.ts +1 -1
  214. package/dist/utils/command.js +1 -1
  215. package/dist/utils/error-utils.d.ts +27 -0
  216. package/dist/utils/error-utils.d.ts.map +1 -0
  217. package/dist/utils/error-utils.js +98 -0
  218. package/dist/utils/error-utils.js.map +1 -0
  219. package/dist/utils/npmRegistry.d.ts +61 -0
  220. package/dist/utils/npmRegistry.d.ts.map +1 -0
  221. package/dist/utils/npmRegistry.js +180 -0
  222. package/dist/utils/npmRegistry.js.map +1 -0
  223. package/dist/utils/prompt.d.ts +1 -1
  224. package/dist/utils/prompt.js +1 -1
  225. package/dist/utils/session/parsers/codex.d.ts.map +1 -1
  226. package/dist/utils/session/parsers/codex.js +8 -1
  227. package/dist/utils/session/parsers/codex.js.map +1 -1
  228. package/dist/utils/terminal.d.ts +1 -0
  229. package/dist/utils/terminal.d.ts.map +1 -1
  230. package/dist/utils/terminal.js +20 -0
  231. package/dist/utils/terminal.js.map +1 -1
  232. package/dist/utils.d.ts +9 -0
  233. package/dist/utils.d.ts.map +1 -1
  234. package/dist/utils.js +33 -2
  235. package/dist/utils.js.map +1 -1
  236. package/dist/web/client/src/components/CodingAgentLaunchModal.d.ts.map +1 -1
  237. package/dist/web/client/src/components/CodingAgentLaunchModal.js +7 -16
  238. package/dist/web/client/src/components/CodingAgentLaunchModal.js.map +1 -1
  239. package/dist/web/client/src/components/branch-detail/BranchInfoCards.d.ts.map +1 -1
  240. package/dist/web/client/src/components/branch-detail/BranchInfoCards.js +7 -2
  241. package/dist/web/client/src/components/branch-detail/BranchInfoCards.js.map +1 -1
  242. package/dist/web/client/src/components/branch-detail/SessionHistoryTable.d.ts.map +1 -1
  243. package/dist/web/client/src/components/branch-detail/SessionHistoryTable.js +2 -1
  244. package/dist/web/client/src/components/branch-detail/SessionHistoryTable.js.map +1 -1
  245. package/dist/web/client/src/components/branch-detail/ToolLauncher.d.ts +2 -2
  246. package/dist/web/client/src/components/branch-detail/ToolLauncher.d.ts.map +1 -1
  247. package/dist/web/client/src/components/branch-detail/ToolLauncher.js +5 -5
  248. package/dist/web/client/src/components/branch-detail/ToolLauncher.js.map +1 -1
  249. package/dist/web/client/src/lib/coding-agent-colors.d.ts +86 -0
  250. package/dist/web/client/src/lib/coding-agent-colors.d.ts.map +1 -0
  251. package/dist/web/client/src/lib/coding-agent-colors.js +135 -0
  252. package/dist/web/client/src/lib/coding-agent-colors.js.map +1 -0
  253. package/dist/web/client/src/pages/BranchDetailPage.js +10 -10
  254. package/dist/web/client/src/pages/BranchDetailPage.js.map +1 -1
  255. package/dist/web/server/pty/manager.d.ts +2 -0
  256. package/dist/web/server/pty/manager.d.ts.map +1 -1
  257. package/dist/web/server/pty/manager.js +104 -0
  258. package/dist/web/server/pty/manager.js.map +1 -1
  259. package/dist/web/server/routes/sessions.d.ts.map +1 -1
  260. package/dist/web/server/routes/sessions.js +5 -1
  261. package/dist/web/server/routes/sessions.js.map +1 -1
  262. package/dist/web/server/services/branches.d.ts.map +1 -1
  263. package/dist/web/server/services/branches.js +10 -8
  264. package/dist/web/server/services/branches.js.map +1 -1
  265. package/dist/web/server/services/worktrees.js +2 -2
  266. package/dist/web/server/services/worktrees.js.map +1 -1
  267. package/dist/worktree.d.ts +47 -1
  268. package/dist/worktree.d.ts.map +1 -1
  269. package/dist/worktree.js +280 -94
  270. package/dist/worktree.js.map +1 -1
  271. package/package.json +12 -14
  272. package/src/claude.ts +68 -70
  273. package/src/cli/ui/App.solid.tsx +1823 -0
  274. package/src/cli/ui/__tests__/solid/AppSolid.cleanup.test.tsx +255 -0
  275. package/src/cli/ui/__tests__/solid/BranchListScreen.test.tsx +243 -0
  276. package/src/cli/ui/__tests__/solid/components/QuickStartStep.test.tsx +237 -0
  277. package/src/cli/ui/__tests__/solid/components/WizardPopup.test.tsx +231 -0
  278. package/src/cli/ui/__tests__/solid/components/WizardSteps.test.tsx +238 -0
  279. package/src/cli/ui/__tests__/utils/branchFormatter.test.ts +7 -289
  280. package/src/cli/ui/__tests__/utils/clipboard.test.ts +3 -3
  281. package/src/cli/ui/__tests__/utils/statisticsCalculator.test.ts +1 -1
  282. package/src/cli/ui/components/solid/Footer.tsx +36 -0
  283. package/src/cli/ui/components/{parts → solid}/Header.tsx +17 -28
  284. package/src/cli/ui/components/solid/HelpOverlay.tsx +194 -0
  285. package/src/cli/ui/components/solid/QuickStartStep.tsx +197 -0
  286. package/src/cli/ui/components/{parts → solid}/ScrollableList.tsx +7 -8
  287. package/src/cli/ui/components/solid/SearchInput.tsx +42 -0
  288. package/src/cli/ui/components/solid/SelectInput.tsx +84 -0
  289. package/src/cli/ui/components/solid/Stats.tsx +92 -0
  290. package/src/cli/ui/components/solid/TextInput.tsx +49 -0
  291. package/src/cli/ui/components/solid/WizardController.tsx +384 -0
  292. package/src/cli/ui/components/solid/WizardPopup.tsx +135 -0
  293. package/src/cli/ui/components/solid/WizardSteps.tsx +793 -0
  294. package/src/cli/ui/core/index.ts +17 -0
  295. package/src/cli/ui/core/keybindings.ts +367 -0
  296. package/src/cli/ui/core/theme.ts +234 -0
  297. package/src/cli/ui/core/types.ts +235 -0
  298. package/src/cli/ui/hooks/solid/useAsyncOperation.ts +76 -0
  299. package/src/cli/ui/hooks/solid/useFilter.ts +86 -0
  300. package/src/cli/ui/hooks/solid/useGitOperations.ts +80 -0
  301. package/src/cli/ui/hooks/solid/useKeyHandler.ts +103 -0
  302. package/src/cli/ui/hooks/solid/useScrollableList.ts +149 -0
  303. package/src/cli/ui/hooks/solid/useSelection.ts +77 -0
  304. package/src/cli/ui/hooks/solid/useTerminalSize.ts +22 -0
  305. package/src/cli/ui/index.solid.ts +28 -0
  306. package/src/cli/ui/screens/solid/BranchListScreen.tsx +1050 -0
  307. package/src/cli/ui/screens/solid/ConfirmScreen.tsx +74 -0
  308. package/src/cli/ui/screens/solid/EnvironmentScreen.tsx +159 -0
  309. package/src/cli/ui/screens/solid/ErrorScreen.tsx +42 -0
  310. package/src/cli/ui/screens/solid/InputScreen.tsx +55 -0
  311. package/src/cli/ui/screens/solid/LoadingIndicator.tsx +77 -0
  312. package/src/cli/ui/screens/solid/LogDetailScreen.tsx +75 -0
  313. package/src/cli/ui/screens/solid/LogScreen.tsx +175 -0
  314. package/src/cli/ui/screens/solid/ProfileEnvScreen.tsx +192 -0
  315. package/src/cli/ui/screens/solid/ProfileScreen.tsx +98 -0
  316. package/src/cli/ui/screens/solid/SelectorScreen.tsx +170 -0
  317. package/src/cli/ui/screens/solid/SettingsScreen.tsx +50 -0
  318. package/src/cli/ui/screens/solid/WorktreeCreateScreen.tsx +136 -0
  319. package/src/cli/ui/screens/solid/WorktreeDeleteScreen.tsx +40 -0
  320. package/src/cli/ui/stores/appStore.ts +208 -0
  321. package/src/cli/ui/stores/branchStore.ts +357 -0
  322. package/src/cli/ui/stores/index.ts +31 -0
  323. package/src/cli/ui/stores/uiStore.ts +226 -0
  324. package/src/cli/ui/types.ts +20 -3
  325. package/src/cli/ui/utils/__tests__/branchFormatter.test.ts +180 -0
  326. package/src/cli/ui/utils/branchFormatter.ts +8 -215
  327. package/src/cli/ui/utils/continueSession.ts +44 -0
  328. package/src/cli/ui/utils/modelOptions.test.ts +1 -1
  329. package/src/codex.ts +100 -43
  330. package/src/config/__tests__/saveSession.test.ts +143 -0
  331. package/src/config/builtin-coding-agents.ts +4 -4
  332. package/src/config/index.ts +4 -0
  333. package/src/gemini.ts +58 -43
  334. package/src/index.test.ts +12 -12
  335. package/src/index.ts +164 -142
  336. package/src/launcher.ts +22 -3
  337. package/src/logging/logger.ts +32 -10
  338. package/src/opentui/index.solid.ts +1 -0
  339. package/src/repositories/worktree.repository.ts +8 -0
  340. package/src/services/__tests__/BatchMergeService.test.ts +62 -66
  341. package/src/services/__tests__/WorktreeOrchestrator.test.ts +8 -7
  342. package/src/services/codingAgentResolver.ts +30 -4
  343. package/src/services/dependency-installer.ts +0 -7
  344. package/src/types/api.ts +3 -0
  345. package/src/types/coding-agent.ts +85 -0
  346. package/src/types/tools.ts +19 -0
  347. package/src/utils/__tests__/npmRegistry.test.ts +250 -0
  348. package/src/utils/__tests__/prompt.test.ts +4 -5
  349. package/src/utils/coding-agent-colors.ts +165 -0
  350. package/src/utils/command.ts +1 -1
  351. package/src/utils/error-utils.ts +133 -0
  352. package/src/utils/npmRegistry.ts +249 -0
  353. package/src/utils/prompt.ts +1 -1
  354. package/src/utils/session/parsers/codex.ts +9 -1
  355. package/src/utils/terminal.ts +24 -0
  356. package/src/utils.test.ts +1 -1
  357. package/src/utils.ts +37 -4
  358. package/src/web/client/src/components/CodingAgentLaunchModal.tsx +12 -21
  359. package/src/web/client/src/components/branch-detail/BranchInfoCards.tsx +16 -1
  360. package/src/web/client/src/components/branch-detail/SessionHistoryTable.tsx +7 -1
  361. package/src/web/client/src/components/branch-detail/ToolLauncher.tsx +11 -6
  362. package/src/web/client/src/lib/coding-agent-colors.ts +149 -0
  363. package/src/web/client/src/pages/BranchDetailPage.tsx +11 -11
  364. package/src/web/server/pty/manager.ts +139 -0
  365. package/src/web/server/routes/sessions.ts +6 -0
  366. package/src/web/server/services/branches.ts +11 -8
  367. package/src/web/server/services/worktrees.ts +2 -2
  368. package/src/worktree.ts +366 -107
  369. package/dist/cli/ui/components/App.d.ts +0 -25
  370. package/dist/cli/ui/components/App.d.ts.map +0 -1
  371. package/dist/cli/ui/components/App.js +0 -1006
  372. package/dist/cli/ui/components/App.js.map +0 -1
  373. package/dist/cli/ui/components/common/Confirm.d.ts +0 -13
  374. package/dist/cli/ui/components/common/Confirm.d.ts.map +0 -1
  375. package/dist/cli/ui/components/common/Confirm.js +0 -20
  376. package/dist/cli/ui/components/common/Confirm.js.map +0 -1
  377. package/dist/cli/ui/components/common/ErrorBoundary.d.ts +0 -23
  378. package/dist/cli/ui/components/common/ErrorBoundary.d.ts.map +0 -1
  379. package/dist/cli/ui/components/common/ErrorBoundary.js +0 -37
  380. package/dist/cli/ui/components/common/ErrorBoundary.js.map +0 -1
  381. package/dist/cli/ui/components/common/Input.d.ts +0 -19
  382. package/dist/cli/ui/components/common/Input.d.ts.map +0 -1
  383. package/dist/cli/ui/components/common/Input.js +0 -22
  384. package/dist/cli/ui/components/common/Input.js.map +0 -1
  385. package/dist/cli/ui/components/common/LoadingIndicator.d.ts +0 -19
  386. package/dist/cli/ui/components/common/LoadingIndicator.d.ts.map +0 -1
  387. package/dist/cli/ui/components/common/LoadingIndicator.js +0 -61
  388. package/dist/cli/ui/components/common/LoadingIndicator.js.map +0 -1
  389. package/dist/cli/ui/components/common/Select.d.ts +0 -38
  390. package/dist/cli/ui/components/common/Select.d.ts.map +0 -1
  391. package/dist/cli/ui/components/common/Select.js +0 -151
  392. package/dist/cli/ui/components/common/Select.js.map +0 -1
  393. package/dist/cli/ui/components/common/SpinnerIcon.d.ts +0 -20
  394. package/dist/cli/ui/components/common/SpinnerIcon.d.ts.map +0 -1
  395. package/dist/cli/ui/components/common/SpinnerIcon.js +0 -61
  396. package/dist/cli/ui/components/common/SpinnerIcon.js.map +0 -1
  397. package/dist/cli/ui/components/parts/Footer.d.ts +0 -15
  398. package/dist/cli/ui/components/parts/Footer.d.ts.map +0 -1
  399. package/dist/cli/ui/components/parts/Footer.js +0 -20
  400. package/dist/cli/ui/components/parts/Footer.js.map +0 -1
  401. package/dist/cli/ui/components/parts/Header.d.ts.map +0 -1
  402. package/dist/cli/ui/components/parts/Header.js +0 -24
  403. package/dist/cli/ui/components/parts/Header.js.map +0 -1
  404. package/dist/cli/ui/components/parts/MergeStatusList.d.ts +0 -13
  405. package/dist/cli/ui/components/parts/MergeStatusList.d.ts.map +0 -1
  406. package/dist/cli/ui/components/parts/MergeStatusList.js +0 -52
  407. package/dist/cli/ui/components/parts/MergeStatusList.js.map +0 -1
  408. package/dist/cli/ui/components/parts/ProgressBar.d.ts +0 -13
  409. package/dist/cli/ui/components/parts/ProgressBar.d.ts.map +0 -1
  410. package/dist/cli/ui/components/parts/ProgressBar.js +0 -53
  411. package/dist/cli/ui/components/parts/ProgressBar.js.map +0 -1
  412. package/dist/cli/ui/components/parts/ScrollableList.d.ts +0 -12
  413. package/dist/cli/ui/components/parts/ScrollableList.d.ts.map +0 -1
  414. package/dist/cli/ui/components/parts/ScrollableList.js +0 -11
  415. package/dist/cli/ui/components/parts/ScrollableList.js.map +0 -1
  416. package/dist/cli/ui/components/parts/Stats.d.ts +0 -10
  417. package/dist/cli/ui/components/parts/Stats.d.ts.map +0 -1
  418. package/dist/cli/ui/components/parts/Stats.js +0 -55
  419. package/dist/cli/ui/components/parts/Stats.js.map +0 -1
  420. package/dist/cli/ui/components/screens/BatchMergeProgressScreen.d.ts +0 -17
  421. package/dist/cli/ui/components/screens/BatchMergeProgressScreen.d.ts.map +0 -1
  422. package/dist/cli/ui/components/screens/BatchMergeProgressScreen.js +0 -42
  423. package/dist/cli/ui/components/screens/BatchMergeProgressScreen.js.map +0 -1
  424. package/dist/cli/ui/components/screens/BatchMergeResultScreen.d.ts +0 -17
  425. package/dist/cli/ui/components/screens/BatchMergeResultScreen.d.ts.map +0 -1
  426. package/dist/cli/ui/components/screens/BatchMergeResultScreen.js +0 -72
  427. package/dist/cli/ui/components/screens/BatchMergeResultScreen.js.map +0 -1
  428. package/dist/cli/ui/components/screens/BranchCreatorScreen.d.ts +0 -18
  429. package/dist/cli/ui/components/screens/BranchCreatorScreen.d.ts.map +0 -1
  430. package/dist/cli/ui/components/screens/BranchCreatorScreen.js +0 -151
  431. package/dist/cli/ui/components/screens/BranchCreatorScreen.js.map +0 -1
  432. package/dist/cli/ui/components/screens/BranchListScreen.d.ts.map +0 -1
  433. package/dist/cli/ui/components/screens/BranchListScreen.js +0 -476
  434. package/dist/cli/ui/components/screens/BranchListScreen.js.map +0 -1
  435. package/dist/cli/ui/components/screens/BranchQuickStartScreen.d.ts +0 -30
  436. package/dist/cli/ui/components/screens/BranchQuickStartScreen.d.ts.map +0 -1
  437. package/dist/cli/ui/components/screens/BranchQuickStartScreen.js +0 -148
  438. package/dist/cli/ui/components/screens/BranchQuickStartScreen.js.map +0 -1
  439. package/dist/cli/ui/components/screens/CodingAgentSelectorScreen.d.ts +0 -27
  440. package/dist/cli/ui/components/screens/CodingAgentSelectorScreen.d.ts.map +0 -1
  441. package/dist/cli/ui/components/screens/CodingAgentSelectorScreen.js +0 -93
  442. package/dist/cli/ui/components/screens/CodingAgentSelectorScreen.js.map +0 -1
  443. package/dist/cli/ui/components/screens/EnvironmentProfileScreen.d.ts +0 -19
  444. package/dist/cli/ui/components/screens/EnvironmentProfileScreen.d.ts.map +0 -1
  445. package/dist/cli/ui/components/screens/EnvironmentProfileScreen.js +0 -577
  446. package/dist/cli/ui/components/screens/EnvironmentProfileScreen.js.map +0 -1
  447. package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.d.ts +0 -45
  448. package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.d.ts.map +0 -1
  449. package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.js +0 -95
  450. package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.js.map +0 -1
  451. package/dist/cli/ui/components/screens/LogDatePickerScreen.d.ts +0 -10
  452. package/dist/cli/ui/components/screens/LogDatePickerScreen.d.ts.map +0 -1
  453. package/dist/cli/ui/components/screens/LogDatePickerScreen.js +0 -44
  454. package/dist/cli/ui/components/screens/LogDatePickerScreen.js.map +0 -1
  455. package/dist/cli/ui/components/screens/LogDetailScreen.d.ts.map +0 -1
  456. package/dist/cli/ui/components/screens/LogDetailScreen.js +0 -34
  457. package/dist/cli/ui/components/screens/LogDetailScreen.js.map +0 -1
  458. package/dist/cli/ui/components/screens/LogListScreen.d.ts.map +0 -1
  459. package/dist/cli/ui/components/screens/LogListScreen.js +0 -107
  460. package/dist/cli/ui/components/screens/LogListScreen.js.map +0 -1
  461. package/dist/cli/ui/components/screens/ModelSelectorScreen.d.ts +0 -24
  462. package/dist/cli/ui/components/screens/ModelSelectorScreen.d.ts.map +0 -1
  463. package/dist/cli/ui/components/screens/ModelSelectorScreen.js +0 -197
  464. package/dist/cli/ui/components/screens/ModelSelectorScreen.js.map +0 -1
  465. package/dist/cli/ui/components/screens/PRCleanupScreen.d.ts +0 -29
  466. package/dist/cli/ui/components/screens/PRCleanupScreen.d.ts.map +0 -1
  467. package/dist/cli/ui/components/screens/PRCleanupScreen.js +0 -92
  468. package/dist/cli/ui/components/screens/PRCleanupScreen.js.map +0 -1
  469. package/dist/cli/ui/components/screens/SessionSelectorScreen.d.ts +0 -31
  470. package/dist/cli/ui/components/screens/SessionSelectorScreen.d.ts.map +0 -1
  471. package/dist/cli/ui/components/screens/SessionSelectorScreen.js +0 -67
  472. package/dist/cli/ui/components/screens/SessionSelectorScreen.js.map +0 -1
  473. package/dist/cli/ui/hooks/useAppInput.d.ts +0 -21
  474. package/dist/cli/ui/hooks/useAppInput.d.ts.map +0 -1
  475. package/dist/cli/ui/hooks/useAppInput.js +0 -138
  476. package/dist/cli/ui/hooks/useAppInput.js.map +0 -1
  477. package/dist/cli/ui/hooks/useBatchMerge.d.ts +0 -17
  478. package/dist/cli/ui/hooks/useBatchMerge.d.ts.map +0 -1
  479. package/dist/cli/ui/hooks/useBatchMerge.js +0 -77
  480. package/dist/cli/ui/hooks/useBatchMerge.js.map +0 -1
  481. package/dist/cli/ui/hooks/useGitData.d.ts +0 -21
  482. package/dist/cli/ui/hooks/useGitData.d.ts.map +0 -1
  483. package/dist/cli/ui/hooks/useGitData.js +0 -229
  484. package/dist/cli/ui/hooks/useGitData.js.map +0 -1
  485. package/dist/cli/ui/hooks/useProfiles.d.ts +0 -41
  486. package/dist/cli/ui/hooks/useProfiles.d.ts.map +0 -1
  487. package/dist/cli/ui/hooks/useProfiles.js +0 -136
  488. package/dist/cli/ui/hooks/useProfiles.js.map +0 -1
  489. package/dist/cli/ui/hooks/useScreenState.d.ts +0 -12
  490. package/dist/cli/ui/hooks/useScreenState.d.ts.map +0 -1
  491. package/dist/cli/ui/hooks/useScreenState.js +0 -30
  492. package/dist/cli/ui/hooks/useScreenState.js.map +0 -1
  493. package/dist/cli/ui/hooks/useTerminalSize.d.ts +0 -9
  494. package/dist/cli/ui/hooks/useTerminalSize.d.ts.map +0 -1
  495. package/dist/cli/ui/hooks/useTerminalSize.js +0 -24
  496. package/dist/cli/ui/hooks/useTerminalSize.js.map +0 -1
  497. package/dist/cli/ui/hooks/useToolStatus.d.ts +0 -30
  498. package/dist/cli/ui/hooks/useToolStatus.d.ts.map +0 -1
  499. package/dist/cli/ui/hooks/useToolStatus.js +0 -49
  500. package/dist/cli/ui/hooks/useToolStatus.js.map +0 -1
  501. package/dist/cli/ui/screens/BranchActionSelectorScreen.d.ts +0 -24
  502. package/dist/cli/ui/screens/BranchActionSelectorScreen.d.ts.map +0 -1
  503. package/dist/cli/ui/screens/BranchActionSelectorScreen.js +0 -65
  504. package/dist/cli/ui/screens/BranchActionSelectorScreen.js.map +0 -1
  505. package/dist/client/assets/index-LNPtOrn3.js +0 -78
  506. package/src/cli/ui/__tests__/SKIPPED_TESTS.md +0 -119
  507. package/src/cli/ui/__tests__/acceptance/branchList.acceptance.test.tsx.skip +0 -239
  508. package/src/cli/ui/__tests__/acceptance/navigation.acceptance.test.tsx +0 -225
  509. package/src/cli/ui/__tests__/acceptance/realtimeUpdate.acceptance.test.tsx.skip +0 -219
  510. package/src/cli/ui/__tests__/components/App.protected-branch.test.tsx +0 -212
  511. package/src/cli/ui/__tests__/components/App.shortcuts.test.tsx +0 -440
  512. package/src/cli/ui/__tests__/components/App.test.tsx +0 -365
  513. package/src/cli/ui/__tests__/components/ModelSelectorScreen.initial.test.tsx +0 -91
  514. package/src/cli/ui/__tests__/components/common/Confirm.test.tsx +0 -80
  515. package/src/cli/ui/__tests__/components/common/ErrorBoundary.test.tsx +0 -104
  516. package/src/cli/ui/__tests__/components/common/Input.test.tsx +0 -100
  517. package/src/cli/ui/__tests__/components/common/LoadingIndicator.test.tsx +0 -148
  518. package/src/cli/ui/__tests__/components/common/Select.memo.test.tsx +0 -255
  519. package/src/cli/ui/__tests__/components/common/Select.test.tsx +0 -335
  520. package/src/cli/ui/__tests__/components/parts/Footer.test.tsx +0 -65
  521. package/src/cli/ui/__tests__/components/parts/Header.test.tsx +0 -55
  522. package/src/cli/ui/__tests__/components/parts/ScrollableList.test.tsx +0 -69
  523. package/src/cli/ui/__tests__/components/parts/Stats.test.tsx +0 -148
  524. package/src/cli/ui/__tests__/components/screens/BranchCreatorScreen.test.tsx +0 -253
  525. package/src/cli/ui/__tests__/components/screens/BranchListScreen.test.tsx +0 -1070
  526. package/src/cli/ui/__tests__/components/screens/BranchQuickStartScreen.test.tsx +0 -142
  527. package/src/cli/ui/__tests__/components/screens/CodingAgentSelectorScreen.test.tsx +0 -174
  528. package/src/cli/ui/__tests__/components/screens/ExecutionModeSelectorScreen.test.tsx +0 -182
  529. package/src/cli/ui/__tests__/components/screens/LogDetailScreen.test.tsx +0 -57
  530. package/src/cli/ui/__tests__/components/screens/LogListScreen.test.tsx +0 -102
  531. package/src/cli/ui/__tests__/components/screens/PRCleanupScreen.test.tsx +0 -216
  532. package/src/cli/ui/__tests__/components/screens/SessionSelectorScreen.test.tsx +0 -147
  533. package/src/cli/ui/__tests__/hooks/useGitData.nonblocking.test.tsx +0 -206
  534. package/src/cli/ui/__tests__/hooks/useGitData.test.ts +0 -197
  535. package/src/cli/ui/__tests__/hooks/useGitData.test.ts.skip +0 -228
  536. package/src/cli/ui/__tests__/hooks/useScreenState.test.ts +0 -147
  537. package/src/cli/ui/__tests__/hooks/useTerminalSize.test.ts +0 -99
  538. package/src/cli/ui/__tests__/integration/branchList.test.tsx.skip +0 -253
  539. package/src/cli/ui/__tests__/integration/edgeCases.test.tsx +0 -436
  540. package/src/cli/ui/__tests__/integration/navigation.test.tsx +0 -514
  541. package/src/cli/ui/__tests__/integration/realtimeUpdate.test.tsx +0 -509
  542. package/src/cli/ui/__tests__/integration/realtimeUpdate.test.tsx.skip +0 -216
  543. package/src/cli/ui/__tests__/performance/branchList.performance.test.tsx +0 -193
  544. package/src/cli/ui/__tests__/performance/useMemoOptimization.test.tsx +0 -234
  545. package/src/cli/ui/components/App.tsx +0 -1478
  546. package/src/cli/ui/components/common/Confirm.tsx +0 -44
  547. package/src/cli/ui/components/common/ErrorBoundary.tsx +0 -60
  548. package/src/cli/ui/components/common/Input.tsx +0 -58
  549. package/src/cli/ui/components/common/LoadingIndicator.tsx +0 -98
  550. package/src/cli/ui/components/common/Select.tsx +0 -247
  551. package/src/cli/ui/components/common/SpinnerIcon.tsx +0 -86
  552. package/src/cli/ui/components/parts/Footer.tsx +0 -41
  553. package/src/cli/ui/components/parts/Header.test.tsx +0 -75
  554. package/src/cli/ui/components/parts/MergeStatusList.tsx +0 -75
  555. package/src/cli/ui/components/parts/ProgressBar.tsx +0 -73
  556. package/src/cli/ui/components/parts/Stats.tsx +0 -88
  557. package/src/cli/ui/components/screens/BatchMergeProgressScreen.tsx +0 -74
  558. package/src/cli/ui/components/screens/BatchMergeResultScreen.tsx +0 -108
  559. package/src/cli/ui/components/screens/BranchCreatorScreen.tsx +0 -242
  560. package/src/cli/ui/components/screens/BranchListScreen.tsx +0 -744
  561. package/src/cli/ui/components/screens/BranchQuickStartScreen.tsx +0 -244
  562. package/src/cli/ui/components/screens/CodingAgentSelectorScreen.tsx +0 -159
  563. package/src/cli/ui/components/screens/EnvironmentProfileScreen.tsx +0 -928
  564. package/src/cli/ui/components/screens/ExecutionModeSelectorScreen.tsx +0 -176
  565. package/src/cli/ui/components/screens/LogDatePickerScreen.tsx +0 -83
  566. package/src/cli/ui/components/screens/LogDetailScreen.tsx +0 -67
  567. package/src/cli/ui/components/screens/LogListScreen.tsx +0 -192
  568. package/src/cli/ui/components/screens/ModelSelectorScreen.tsx +0 -320
  569. package/src/cli/ui/components/screens/PRCleanupScreen.tsx +0 -171
  570. package/src/cli/ui/components/screens/SessionSelectorScreen.tsx +0 -135
  571. package/src/cli/ui/hooks/useAppInput.ts +0 -172
  572. package/src/cli/ui/hooks/useBatchMerge.ts +0 -96
  573. package/src/cli/ui/hooks/useGitData.ts +0 -347
  574. package/src/cli/ui/hooks/useProfiles.ts +0 -211
  575. package/src/cli/ui/hooks/useScreenState.ts +0 -44
  576. package/src/cli/ui/hooks/useTerminalSize.ts +0 -33
  577. package/src/cli/ui/hooks/useToolStatus.ts +0 -68
  578. package/src/cli/ui/screens/BranchActionSelectorScreen.tsx +0 -111
  579. package/src/cli/ui/screens/__tests__/BranchActionSelectorScreen.test.tsx +0 -264
@@ -1,26 +1,26 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
1
+ import { describe, it, expect, mock, beforeEach, afterEach } from "bun:test";
2
2
  import { BatchMergeService } from "../BatchMergeService";
3
3
  import type { BatchMergeConfig } from "../../ui/types";
4
4
 
5
5
  // Mock git module
6
- vi.mock("../../git", () => ({
7
- fetchAllRemotes: vi.fn(),
8
- getLocalBranches: vi.fn(),
9
- mergeFromBranch: vi.fn(),
10
- hasMergeConflict: vi.fn(),
11
- abortMerge: vi.fn(),
12
- getMergeStatus: vi.fn(),
13
- getRepositoryRoot: vi.fn(),
14
- resetToHead: vi.fn(),
15
- getCurrentBranchName: vi.fn(),
16
- pushBranchToRemote: vi.fn(),
6
+ mock.module("../../git", () => ({
7
+ fetchAllRemotes: mock(),
8
+ getLocalBranches: mock(),
9
+ mergeFromBranch: mock(),
10
+ hasMergeConflict: mock(),
11
+ abortMerge: mock(),
12
+ getMergeStatus: mock(),
13
+ getRepositoryRoot: mock(),
14
+ resetToHead: mock(),
15
+ getCurrentBranchName: mock(),
16
+ pushBranchToRemote: mock(),
17
17
  }));
18
18
 
19
19
  // Mock worktree module
20
- vi.mock("../../worktree", () => ({
21
- listAdditionalWorktrees: vi.fn(),
22
- generateWorktreePath: vi.fn(),
23
- createWorktree: vi.fn(),
20
+ mock.module("../../worktree", () => ({
21
+ listAdditionalWorktrees: mock(),
22
+ generateWorktreePath: mock(),
23
+ createWorktree: mock(),
24
24
  }));
25
25
 
26
26
  import * as git from "../../git";
@@ -34,12 +34,12 @@ describe("BatchMergeService", () => {
34
34
  let service: BatchMergeService;
35
35
 
36
36
  beforeEach(() => {
37
- vi.clearAllMocks();
37
+ mock.restore();
38
38
  service = new BatchMergeService();
39
39
  });
40
40
 
41
41
  afterEach(() => {
42
- vi.restoreAllMocks();
42
+ mock.restore();
43
43
  });
44
44
 
45
45
  describe("Initialization (T201)", () => {
@@ -58,7 +58,7 @@ describe("BatchMergeService", () => {
58
58
 
59
59
  describe("determineSourceBranch (T203)", () => {
60
60
  it("should return 'main' when main branch exists", async () => {
61
- (git.getLocalBranches as ReturnType<typeof vi.fn>).mockResolvedValue([
61
+ (git.getLocalBranches as ReturnType<typeof mock>).mockResolvedValue([
62
62
  {
63
63
  name: "main",
64
64
  type: "local",
@@ -85,7 +85,7 @@ describe("BatchMergeService", () => {
85
85
  });
86
86
 
87
87
  it("should return 'develop' when main does not exist but develop exists", async () => {
88
- (git.getLocalBranches as ReturnType<typeof vi.fn>).mockResolvedValue([
88
+ (git.getLocalBranches as ReturnType<typeof mock>).mockResolvedValue([
89
89
  {
90
90
  name: "develop",
91
91
  type: "local",
@@ -106,7 +106,7 @@ describe("BatchMergeService", () => {
106
106
  });
107
107
 
108
108
  it("should return 'master' when main and develop do not exist", async () => {
109
- (git.getLocalBranches as ReturnType<typeof vi.fn>).mockResolvedValue([
109
+ (git.getLocalBranches as ReturnType<typeof mock>).mockResolvedValue([
110
110
  {
111
111
  name: "master",
112
112
  type: "local",
@@ -127,7 +127,7 @@ describe("BatchMergeService", () => {
127
127
  });
128
128
 
129
129
  it("should throw error when no source branch found", async () => {
130
- (git.getLocalBranches as ReturnType<typeof vi.fn>).mockResolvedValue([
130
+ (git.getLocalBranches as ReturnType<typeof mock>).mockResolvedValue([
131
131
  {
132
132
  name: "feature/test",
133
133
  type: "local",
@@ -144,7 +144,7 @@ describe("BatchMergeService", () => {
144
144
 
145
145
  describe("getTargetBranches (T205)", () => {
146
146
  it("should return all local branches excluding main, develop, master", async () => {
147
- (git.getLocalBranches as ReturnType<typeof vi.fn>).mockResolvedValue([
147
+ (git.getLocalBranches as ReturnType<typeof mock>).mockResolvedValue([
148
148
  {
149
149
  name: "main",
150
150
  type: "local",
@@ -185,7 +185,7 @@ describe("BatchMergeService", () => {
185
185
  });
186
186
 
187
187
  it("should return empty array when only main/develop/master exist", async () => {
188
- (git.getLocalBranches as ReturnType<typeof vi.fn>).mockResolvedValue([
188
+ (git.getLocalBranches as ReturnType<typeof mock>).mockResolvedValue([
189
189
  {
190
190
  name: "main",
191
191
  type: "local",
@@ -209,7 +209,7 @@ describe("BatchMergeService", () => {
209
209
  describe("ensureWorktree (T207)", () => {
210
210
  it("should return existing worktree path if worktree exists", async () => {
211
211
  (
212
- worktree.listAdditionalWorktrees as ReturnType<typeof vi.fn>
212
+ worktree.listAdditionalWorktrees as ReturnType<typeof mock>
213
213
  ).mockResolvedValue([
214
214
  {
215
215
  path: "/repo/.worktrees/feature-a",
@@ -227,15 +227,15 @@ describe("BatchMergeService", () => {
227
227
 
228
228
  it("should create worktree if it does not exist", async () => {
229
229
  (
230
- worktree.listAdditionalWorktrees as ReturnType<typeof vi.fn>
230
+ worktree.listAdditionalWorktrees as ReturnType<typeof mock>
231
231
  ).mockResolvedValue([]);
232
- (git.getRepositoryRoot as ReturnType<typeof vi.fn>).mockResolvedValue(
232
+ (git.getRepositoryRoot as ReturnType<typeof mock>).mockResolvedValue(
233
233
  "/repo",
234
234
  );
235
235
  (
236
- worktree.generateWorktreePath as ReturnType<typeof vi.fn>
236
+ worktree.generateWorktreePath as ReturnType<typeof mock>
237
237
  ).mockResolvedValue("/repo/.worktrees/feature-b");
238
- (worktree.createWorktree as ReturnType<typeof vi.fn>).mockResolvedValue();
238
+ (worktree.createWorktree as ReturnType<typeof mock>).mockResolvedValue();
239
239
 
240
240
  const worktreePath = await service.ensureWorktree("feature/b");
241
241
 
@@ -260,7 +260,7 @@ describe("BatchMergeService", () => {
260
260
 
261
261
  beforeEach(() => {
262
262
  (
263
- worktree.listAdditionalWorktrees as ReturnType<typeof vi.fn>
263
+ worktree.listAdditionalWorktrees as ReturnType<typeof mock>
264
264
  ).mockResolvedValue([
265
265
  {
266
266
  path: "/repo/.worktrees/feature-a",
@@ -271,8 +271,8 @@ describe("BatchMergeService", () => {
271
271
  });
272
272
 
273
273
  it("should successfully merge without conflicts", async () => {
274
- (git.mergeFromBranch as ReturnType<typeof vi.fn>).mockResolvedValue();
275
- (git.hasMergeConflict as ReturnType<typeof vi.fn>).mockResolvedValue(
274
+ (git.mergeFromBranch as ReturnType<typeof mock>).mockResolvedValue();
275
+ (git.hasMergeConflict as ReturnType<typeof mock>).mockResolvedValue(
276
276
  false,
277
277
  );
278
278
 
@@ -289,13 +289,11 @@ describe("BatchMergeService", () => {
289
289
  });
290
290
 
291
291
  it("should skip branch on merge conflict", async () => {
292
- (git.mergeFromBranch as ReturnType<typeof vi.fn>).mockRejectedValue(
292
+ (git.mergeFromBranch as ReturnType<typeof mock>).mockRejectedValue(
293
293
  new Error("Merge conflict"),
294
294
  );
295
- (git.hasMergeConflict as ReturnType<typeof vi.fn>).mockResolvedValue(
296
- true,
297
- );
298
- (git.abortMerge as ReturnType<typeof vi.fn>).mockResolvedValue();
295
+ (git.hasMergeConflict as ReturnType<typeof mock>).mockResolvedValue(true);
296
+ (git.abortMerge as ReturnType<typeof mock>).mockResolvedValue();
299
297
 
300
298
  const status = await service.mergeBranch("feature/a", "main", config);
301
299
 
@@ -305,10 +303,10 @@ describe("BatchMergeService", () => {
305
303
  });
306
304
 
307
305
  it("should handle other errors as failed", async () => {
308
- (git.mergeFromBranch as ReturnType<typeof vi.fn>).mockRejectedValue(
306
+ (git.mergeFromBranch as ReturnType<typeof mock>).mockRejectedValue(
309
307
  new Error("Network error"),
310
308
  );
311
- (git.hasMergeConflict as ReturnType<typeof vi.fn>).mockResolvedValue(
309
+ (git.hasMergeConflict as ReturnType<typeof mock>).mockResolvedValue(
312
310
  false,
313
311
  );
314
312
 
@@ -330,7 +328,7 @@ describe("BatchMergeService", () => {
330
328
 
331
329
  beforeEach(() => {
332
330
  (
333
- worktree.listAdditionalWorktrees as ReturnType<typeof vi.fn>
331
+ worktree.listAdditionalWorktrees as ReturnType<typeof mock>
334
332
  ).mockResolvedValue([
335
333
  {
336
334
  path: "/repo/.worktrees/feature-a",
@@ -341,11 +339,11 @@ describe("BatchMergeService", () => {
341
339
  });
342
340
 
343
341
  it("should rollback with resetToHead after successful dry-run merge", async () => {
344
- (git.mergeFromBranch as ReturnType<typeof vi.fn>).mockResolvedValue();
345
- (git.hasMergeConflict as ReturnType<typeof vi.fn>).mockResolvedValue(
342
+ (git.mergeFromBranch as ReturnType<typeof mock>).mockResolvedValue();
343
+ (git.hasMergeConflict as ReturnType<typeof mock>).mockResolvedValue(
346
344
  false,
347
345
  );
348
- (git.resetToHead as ReturnType<typeof vi.fn>).mockResolvedValue();
346
+ (git.resetToHead as ReturnType<typeof mock>).mockResolvedValue();
349
347
 
350
348
  const status = await service.mergeBranch(
351
349
  "feature/a",
@@ -366,13 +364,11 @@ describe("BatchMergeService", () => {
366
364
  });
367
365
 
368
366
  it("should rollback with abortMerge after dry-run merge conflict", async () => {
369
- (git.mergeFromBranch as ReturnType<typeof vi.fn>).mockRejectedValue(
367
+ (git.mergeFromBranch as ReturnType<typeof mock>).mockRejectedValue(
370
368
  new Error("CONFLICT (content)"),
371
369
  );
372
- (git.hasMergeConflict as ReturnType<typeof vi.fn>).mockResolvedValue(
373
- true,
374
- );
375
- (git.abortMerge as ReturnType<typeof vi.fn>).mockResolvedValue();
370
+ (git.hasMergeConflict as ReturnType<typeof mock>).mockResolvedValue(true);
371
+ (git.abortMerge as ReturnType<typeof mock>).mockResolvedValue();
376
372
 
377
373
  const status = await service.mergeBranch(
378
374
  "feature/a",
@@ -398,7 +394,7 @@ describe("BatchMergeService", () => {
398
394
 
399
395
  beforeEach(() => {
400
396
  (
401
- worktree.listAdditionalWorktrees as ReturnType<typeof vi.fn>
397
+ worktree.listAdditionalWorktrees as ReturnType<typeof mock>
402
398
  ).mockResolvedValue([
403
399
  {
404
400
  path: "/repo/.worktrees/feature-a",
@@ -409,14 +405,14 @@ describe("BatchMergeService", () => {
409
405
  });
410
406
 
411
407
  it("should push successfully after merge when autoPush is enabled", async () => {
412
- (git.mergeFromBranch as ReturnType<typeof vi.fn>).mockResolvedValue();
413
- (git.hasMergeConflict as ReturnType<typeof vi.fn>).mockResolvedValue(
408
+ (git.mergeFromBranch as ReturnType<typeof mock>).mockResolvedValue();
409
+ (git.hasMergeConflict as ReturnType<typeof mock>).mockResolvedValue(
414
410
  false,
415
411
  );
416
- (git.getCurrentBranchName as ReturnType<typeof vi.fn>).mockResolvedValue(
412
+ (git.getCurrentBranchName as ReturnType<typeof mock>).mockResolvedValue(
417
413
  "feature/a",
418
414
  );
419
- (git.pushBranchToRemote as ReturnType<typeof vi.fn>).mockResolvedValue();
415
+ (git.pushBranchToRemote as ReturnType<typeof mock>).mockResolvedValue();
420
416
 
421
417
  const status = await service.mergeBranch(
422
418
  "feature/a",
@@ -435,14 +431,14 @@ describe("BatchMergeService", () => {
435
431
  });
436
432
 
437
433
  it("should handle push failure without failing merge", async () => {
438
- (git.mergeFromBranch as ReturnType<typeof vi.fn>).mockResolvedValue();
439
- (git.hasMergeConflict as ReturnType<typeof vi.fn>).mockResolvedValue(
434
+ (git.mergeFromBranch as ReturnType<typeof mock>).mockResolvedValue();
435
+ (git.hasMergeConflict as ReturnType<typeof mock>).mockResolvedValue(
440
436
  false,
441
437
  );
442
- (git.getCurrentBranchName as ReturnType<typeof vi.fn>).mockResolvedValue(
438
+ (git.getCurrentBranchName as ReturnType<typeof mock>).mockResolvedValue(
443
439
  "feature/a",
444
440
  );
445
- (git.pushBranchToRemote as ReturnType<typeof vi.fn>).mockRejectedValue(
441
+ (git.pushBranchToRemote as ReturnType<typeof mock>).mockRejectedValue(
446
442
  new Error("Push failed: permission denied"),
447
443
  );
448
444
 
@@ -459,8 +455,8 @@ describe("BatchMergeService", () => {
459
455
 
460
456
  it("should not push when autoPush is false", async () => {
461
457
  const noPushConfig = { ...autoPushConfig, autoPush: false };
462
- (git.mergeFromBranch as ReturnType<typeof vi.fn>).mockResolvedValue();
463
- (git.hasMergeConflict as ReturnType<typeof vi.fn>).mockResolvedValue(
458
+ (git.mergeFromBranch as ReturnType<typeof mock>).mockResolvedValue();
459
+ (git.hasMergeConflict as ReturnType<typeof mock>).mockResolvedValue(
464
460
  false,
465
461
  );
466
462
 
@@ -486,19 +482,19 @@ describe("BatchMergeService", () => {
486
482
  autoPush: false,
487
483
  };
488
484
 
489
- (git.fetchAllRemotes as ReturnType<typeof vi.fn>).mockResolvedValue();
490
- (git.getRepositoryRoot as ReturnType<typeof vi.fn>).mockResolvedValue(
485
+ (git.fetchAllRemotes as ReturnType<typeof mock>).mockResolvedValue();
486
+ (git.getRepositoryRoot as ReturnType<typeof mock>).mockResolvedValue(
491
487
  "/repo",
492
488
  );
493
489
  (
494
- worktree.listAdditionalWorktrees as ReturnType<typeof vi.fn>
490
+ worktree.listAdditionalWorktrees as ReturnType<typeof mock>
495
491
  ).mockResolvedValue([]);
496
- (worktree.generateWorktreePath as ReturnType<typeof vi.fn>)
492
+ (worktree.generateWorktreePath as ReturnType<typeof mock>)
497
493
  .mockResolvedValueOnce("/repo/.worktrees/feature-a")
498
494
  .mockResolvedValueOnce("/repo/.worktrees/feature-b");
499
- (worktree.createWorktree as ReturnType<typeof vi.fn>).mockResolvedValue();
500
- (git.mergeFromBranch as ReturnType<typeof vi.fn>).mockResolvedValue();
501
- (git.hasMergeConflict as ReturnType<typeof vi.fn>).mockResolvedValue(
495
+ (worktree.createWorktree as ReturnType<typeof mock>).mockResolvedValue();
496
+ (git.mergeFromBranch as ReturnType<typeof mock>).mockResolvedValue();
497
+ (git.hasMergeConflict as ReturnType<typeof mock>).mockResolvedValue(
502
498
  false,
503
499
  );
504
500
 
@@ -1,4 +1,5 @@
1
- import { describe, it, expect, vi, beforeEach } from "vitest";
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { describe, it, expect, mock, beforeEach } from "bun:test";
2
3
  import {
3
4
  WorktreeOrchestrator,
4
5
  type WorktreeService,
@@ -6,8 +7,8 @@ import {
6
7
  import * as git from "../../git.js";
7
8
 
8
9
  // Mock git.getCurrentBranch
9
- vi.mock("../../git.js", () => ({
10
- getCurrentBranch: vi.fn(),
10
+ mock.module("../../git.js", () => ({
11
+ getCurrentBranch: mock(),
11
12
  }));
12
13
 
13
14
  describe("WorktreeOrchestrator", () => {
@@ -18,11 +19,11 @@ describe("WorktreeOrchestrator", () => {
18
19
  const mockWorktreePath = "/mock/repo/.git/worktree/feature-test";
19
20
 
20
21
  beforeEach(() => {
21
- // Create mock service without vi.mock()
22
+ // Create mock service without mock.module()
22
23
  mockWorktreeService = {
23
- worktreeExists: vi.fn(),
24
- generateWorktreePath: vi.fn(),
25
- createWorktree: vi.fn(),
24
+ worktreeExists: mock(),
25
+ generateWorktreePath: mock(),
26
+ createWorktree: mock(),
26
27
  };
27
28
  orchestrator = new WorktreeOrchestrator(mockWorktreeService);
28
29
  });
@@ -138,17 +138,30 @@ export interface ClaudeCommandOptions {
138
138
  mode?: "normal" | "continue" | "resume";
139
139
  skipPermissions?: boolean;
140
140
  extraArgs?: string[];
141
+ sessionId?: string | null;
141
142
  }
142
143
 
143
144
  export function buildClaudeArgs(options: ClaudeCommandOptions = {}): string[] {
144
145
  const args: string[] = [];
146
+ const sessionId =
147
+ options.sessionId && options.sessionId.trim().length > 0
148
+ ? options.sessionId.trim()
149
+ : null;
145
150
 
146
151
  switch (options.mode) {
147
152
  case "continue":
148
- args.push("-c");
153
+ if (sessionId) {
154
+ args.push("--resume", sessionId);
155
+ } else {
156
+ args.push("-c");
157
+ }
149
158
  break;
150
159
  case "resume":
151
- args.push("-r");
160
+ if (sessionId) {
161
+ args.push("--resume", sessionId);
162
+ } else {
163
+ args.push("-r");
164
+ }
152
165
  break;
153
166
  default:
154
167
  break;
@@ -210,17 +223,30 @@ export interface CodexCommandOptions {
210
223
  mode?: "normal" | "continue" | "resume";
211
224
  bypassApprovals?: boolean;
212
225
  extraArgs?: string[];
226
+ sessionId?: string | null;
213
227
  }
214
228
 
215
229
  export function buildCodexArgs(options: CodexCommandOptions = {}): string[] {
216
230
  const args: string[] = [];
231
+ const sessionId =
232
+ options.sessionId && options.sessionId.trim().length > 0
233
+ ? options.sessionId.trim()
234
+ : null;
217
235
 
218
236
  switch (options.mode) {
219
237
  case "continue":
220
- args.push("resume", "--last");
238
+ if (sessionId) {
239
+ args.push("resume", sessionId);
240
+ } else {
241
+ args.push("resume", "--last");
242
+ }
221
243
  break;
222
244
  case "resume":
223
- args.push("resume");
245
+ if (sessionId) {
246
+ args.push("resume", sessionId);
247
+ } else {
248
+ args.push("resume");
249
+ }
224
250
  break;
225
251
  default:
226
252
  break;
@@ -1,7 +1,6 @@
1
1
  import path from "node:path";
2
2
  import fs from "node:fs/promises";
3
3
  import { execa } from "execa";
4
- import { startSpinner } from "../utils/spinner.js";
5
4
 
6
5
  export type PackageManager = "bun" | "pnpm" | "npm";
7
6
 
@@ -144,10 +143,6 @@ export async function installDependenciesForWorktree(
144
143
 
145
144
  const [binary, ...args] = detection.command;
146
145
 
147
- const spinner = startSpinner(
148
- `Installing dependencies via ${detection.manager} (${path.basename(detection.lockfile)})`,
149
- );
150
-
151
146
  try {
152
147
  await execa(binary, args, {
153
148
  cwd: worktreePath,
@@ -187,8 +182,6 @@ export async function installDependenciesForWorktree(
187
182
  reason: "install-failed",
188
183
  message: failureMessage,
189
184
  };
190
- } finally {
191
- spinner();
192
185
  }
193
186
 
194
187
  return {
package/src/types/api.ts CHANGED
@@ -112,6 +112,8 @@ export interface LastToolUsage {
112
112
  mode?: "normal" | "continue" | "resume" | null;
113
113
  model?: string | null;
114
114
  timestamp: number; // epoch millis
115
+ sessionId?: string | null;
116
+ toolVersion?: string | null;
115
117
  }
116
118
 
117
119
  /**
@@ -177,6 +179,7 @@ export interface StartSessionRequest {
177
179
  bypassApprovals?: boolean;
178
180
  extraArgs?: string[];
179
181
  customAgentId?: string | null;
182
+ resumeSessionId?: string | null;
180
183
  }
181
184
 
182
185
  export type UpdateConfigRequest = ConfigPayload;
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Coding Agent Types
3
+ *
4
+ * コーディングエージェント(Claude, Codex, Gemini)の共通型定義。
5
+ */
6
+
7
+ /**
8
+ * コーディングエージェントの基本情報
9
+ */
10
+ export interface CodingAgentInfo {
11
+ /** ツールID */
12
+ id: string;
13
+ /** 表示名 */
14
+ name: string;
15
+ /** コマンド名 */
16
+ command: string;
17
+ /** npmパッケージ名(グローバルインストール用) */
18
+ packageName?: string;
19
+ }
20
+
21
+ /**
22
+ * コーディングエージェントの起動オプション(共通部分)
23
+ */
24
+ export interface CodingAgentLaunchOptions {
25
+ /** 作業ディレクトリ */
26
+ cwd: string;
27
+ /** セッションID(継続時) */
28
+ sessionId?: string;
29
+ /** 継続モード */
30
+ continueSession?: boolean;
31
+ /** 再開モード */
32
+ resumeSession?: boolean;
33
+ /** モデルID */
34
+ model?: string;
35
+ /** 環境変数 */
36
+ env?: Record<string, string>;
37
+ }
38
+
39
+ /**
40
+ * コーディングエージェントの起動結果
41
+ */
42
+ export interface CodingAgentLaunchResult {
43
+ /** セッションID */
44
+ sessionId?: string;
45
+ /** 終了コード */
46
+ exitCode: number;
47
+ /** 終了シグナル */
48
+ signal?: string;
49
+ }
50
+
51
+ /**
52
+ * コーディングエージェントのセッション検出結果
53
+ */
54
+ export interface CodingAgentSessionInfo {
55
+ /** セッションID */
56
+ sessionId: string;
57
+ /** セッションパス */
58
+ path?: string;
59
+ /** 最終更新日時 */
60
+ lastModified?: Date;
61
+ }
62
+
63
+ /**
64
+ * コーディングエージェント登録情報
65
+ */
66
+ export const CODING_AGENTS: Record<string, CodingAgentInfo> = {
67
+ claude: {
68
+ id: "claude",
69
+ name: "Claude Code",
70
+ command: "claude",
71
+ packageName: "@anthropic-ai/claude-code",
72
+ },
73
+ codex: {
74
+ id: "codex",
75
+ name: "Codex CLI",
76
+ command: "codex",
77
+ packageName: "codex",
78
+ },
79
+ gemini: {
80
+ id: "gemini",
81
+ name: "Gemini CLI",
82
+ command: "gemini",
83
+ packageName: "@anthropic-ai/gemini-cli",
84
+ },
85
+ };
@@ -216,6 +216,15 @@ export interface CodingAgentConfig {
216
216
  *
217
217
  * launchCodingAgent() 関数の引数として使用。
218
218
  */
219
+ /**
220
+ * バージョン選択
221
+ *
222
+ * - "installed": bunxのデフォルト動作(キャッシュ優先)
223
+ * - "latest": 常に最新版をダウンロード
224
+ * - その他: 具体的なバージョン番号(例: "1.0.3", "2.1.0-beta.1")
225
+ */
226
+ export type VersionSelection = "installed" | "latest" | string;
227
+
219
228
  export interface CodingAgentLaunchOptions {
220
229
  /**
221
230
  * 実行モード
@@ -247,4 +256,14 @@ export interface CodingAgentLaunchOptions {
247
256
  * 共有環境変数(共通env + ローカル取り込み)
248
257
  */
249
258
  sharedEnv?: Record<string, string>;
259
+
260
+ /**
261
+ * バージョン選択
262
+ *
263
+ * bunxタイプのエージェントでのみ使用。
264
+ * - "installed": bunxのデフォルト動作(キャッシュ優先)
265
+ * - "latest": 常に最新版をダウンロード
266
+ * - その他: 具体的なバージョン番号
267
+ */
268
+ version?: VersionSelection;
250
269
  }