@akiojin/gwt 4.9.1 → 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 (605) 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.d.ts +4 -0
  156. package/dist/config/builtin-coding-agents.d.ts.map +1 -1
  157. package/dist/config/builtin-coding-agents.js +18 -3
  158. package/dist/config/builtin-coding-agents.js.map +1 -1
  159. package/dist/config/index.d.ts +2 -0
  160. package/dist/config/index.d.ts.map +1 -1
  161. package/dist/config/index.js +2 -0
  162. package/dist/config/index.js.map +1 -1
  163. package/dist/config/tools.d.ts.map +1 -1
  164. package/dist/config/tools.js +11 -0
  165. package/dist/config/tools.js.map +1 -1
  166. package/dist/gemini.d.ts +1 -0
  167. package/dist/gemini.d.ts.map +1 -1
  168. package/dist/gemini.js +42 -37
  169. package/dist/gemini.js.map +1 -1
  170. package/dist/index.d.ts +1 -1
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +122 -102
  173. package/dist/index.js.map +1 -1
  174. package/dist/launcher.d.ts.map +1 -1
  175. package/dist/launcher.js +18 -3
  176. package/dist/launcher.js.map +1 -1
  177. package/dist/logging/logger.d.ts.map +1 -1
  178. package/dist/logging/logger.js +26 -9
  179. package/dist/logging/logger.js.map +1 -1
  180. package/dist/opentui/highlights-eq9cgrbb.scm +604 -0
  181. package/dist/opentui/highlights-ghv9g403.scm +205 -0
  182. package/dist/opentui/highlights-hk7bwhj4.scm +284 -0
  183. package/dist/opentui/highlights-r812a2qc.scm +150 -0
  184. package/dist/opentui/highlights-x6tmsnaa.scm +115 -0
  185. package/dist/opentui/index.solid.d.ts +2 -0
  186. package/dist/opentui/index.solid.d.ts.map +1 -0
  187. package/dist/opentui/index.solid.js +52034 -0
  188. package/dist/opentui/index.solid.js.map +1 -0
  189. package/dist/opentui/injections-73j83es3.scm +27 -0
  190. package/dist/opentui/tree-sitter-javascript-nd0q4pe9.wasm +0 -0
  191. package/dist/opentui/tree-sitter-markdown-411r6y9b.wasm +0 -0
  192. package/dist/opentui/tree-sitter-markdown_inline-j5349f42.wasm +0 -0
  193. package/dist/opentui/tree-sitter-typescript-zxjzwt75.wasm +0 -0
  194. package/dist/opentui/tree-sitter-zig-e78zbjpm.wasm +0 -0
  195. package/dist/repositories/worktree.repository.d.ts +1 -0
  196. package/dist/repositories/worktree.repository.d.ts.map +1 -1
  197. package/dist/repositories/worktree.repository.js +7 -0
  198. package/dist/repositories/worktree.repository.js.map +1 -1
  199. package/dist/services/codingAgentResolver.d.ts +2 -0
  200. package/dist/services/codingAgentResolver.d.ts.map +1 -1
  201. package/dist/services/codingAgentResolver.js +30 -4
  202. package/dist/services/codingAgentResolver.js.map +1 -1
  203. package/dist/services/dependency-installer.d.ts.map +1 -1
  204. package/dist/services/dependency-installer.js +0 -5
  205. package/dist/services/dependency-installer.js.map +1 -1
  206. package/dist/types/api.d.ts +3 -0
  207. package/dist/types/api.d.ts.map +1 -1
  208. package/dist/types/coding-agent.d.ts +62 -0
  209. package/dist/types/coding-agent.d.ts.map +1 -0
  210. package/dist/types/coding-agent.js +29 -0
  211. package/dist/types/coding-agent.js.map +1 -0
  212. package/dist/types/tools.d.ts +17 -0
  213. package/dist/types/tools.d.ts.map +1 -1
  214. package/dist/utils/coding-agent-colors.d.ts +88 -0
  215. package/dist/utils/coding-agent-colors.d.ts.map +1 -0
  216. package/dist/utils/coding-agent-colors.js +137 -0
  217. package/dist/utils/coding-agent-colors.js.map +1 -0
  218. package/dist/utils/command.d.ts +1 -1
  219. package/dist/utils/command.d.ts.map +1 -1
  220. package/dist/utils/command.js +10 -1
  221. package/dist/utils/command.js.map +1 -1
  222. package/dist/utils/error-utils.d.ts +27 -0
  223. package/dist/utils/error-utils.d.ts.map +1 -0
  224. package/dist/utils/error-utils.js +98 -0
  225. package/dist/utils/error-utils.js.map +1 -0
  226. package/dist/utils/npmRegistry.d.ts +61 -0
  227. package/dist/utils/npmRegistry.d.ts.map +1 -0
  228. package/dist/utils/npmRegistry.js +180 -0
  229. package/dist/utils/npmRegistry.js.map +1 -0
  230. package/dist/utils/prompt.d.ts +1 -1
  231. package/dist/utils/prompt.js +1 -1
  232. package/dist/utils/session/index.d.ts +5 -3
  233. package/dist/utils/session/index.d.ts.map +1 -1
  234. package/dist/utils/session/index.js +5 -2
  235. package/dist/utils/session/index.js.map +1 -1
  236. package/dist/utils/session/parsers/codex.d.ts.map +1 -1
  237. package/dist/utils/session/parsers/codex.js +8 -1
  238. package/dist/utils/session/parsers/codex.js.map +1 -1
  239. package/dist/utils/session/parsers/index.d.ts +1 -0
  240. package/dist/utils/session/parsers/index.d.ts.map +1 -1
  241. package/dist/utils/session/parsers/index.js +2 -0
  242. package/dist/utils/session/parsers/index.js.map +1 -1
  243. package/dist/utils/session/parsers/opencode.d.ts +23 -0
  244. package/dist/utils/session/parsers/opencode.d.ts.map +1 -0
  245. package/dist/utils/session/parsers/opencode.js +89 -0
  246. package/dist/utils/session/parsers/opencode.js.map +1 -0
  247. package/dist/utils/session/types.d.ts +4 -0
  248. package/dist/utils/session/types.d.ts.map +1 -1
  249. package/dist/utils/terminal.d.ts +1 -0
  250. package/dist/utils/terminal.d.ts.map +1 -1
  251. package/dist/utils/terminal.js +20 -0
  252. package/dist/utils/terminal.js.map +1 -1
  253. package/dist/utils.d.ts +9 -0
  254. package/dist/utils.d.ts.map +1 -1
  255. package/dist/utils.js +33 -2
  256. package/dist/utils.js.map +1 -1
  257. package/dist/web/client/src/components/CodingAgentLaunchModal.d.ts.map +1 -1
  258. package/dist/web/client/src/components/CodingAgentLaunchModal.js +7 -16
  259. package/dist/web/client/src/components/CodingAgentLaunchModal.js.map +1 -1
  260. package/dist/web/client/src/components/branch-detail/BranchInfoCards.d.ts.map +1 -1
  261. package/dist/web/client/src/components/branch-detail/BranchInfoCards.js +7 -2
  262. package/dist/web/client/src/components/branch-detail/BranchInfoCards.js.map +1 -1
  263. package/dist/web/client/src/components/branch-detail/SessionHistoryTable.d.ts.map +1 -1
  264. package/dist/web/client/src/components/branch-detail/SessionHistoryTable.js +2 -1
  265. package/dist/web/client/src/components/branch-detail/SessionHistoryTable.js.map +1 -1
  266. package/dist/web/client/src/components/branch-detail/ToolLauncher.d.ts +2 -2
  267. package/dist/web/client/src/components/branch-detail/ToolLauncher.d.ts.map +1 -1
  268. package/dist/web/client/src/components/branch-detail/ToolLauncher.js +5 -5
  269. package/dist/web/client/src/components/branch-detail/ToolLauncher.js.map +1 -1
  270. package/dist/web/client/src/lib/coding-agent-colors.d.ts +86 -0
  271. package/dist/web/client/src/lib/coding-agent-colors.d.ts.map +1 -0
  272. package/dist/web/client/src/lib/coding-agent-colors.js +135 -0
  273. package/dist/web/client/src/lib/coding-agent-colors.js.map +1 -0
  274. package/dist/web/client/src/pages/BranchDetailPage.js +10 -10
  275. package/dist/web/client/src/pages/BranchDetailPage.js.map +1 -1
  276. package/dist/web/server/pty/manager.d.ts +2 -0
  277. package/dist/web/server/pty/manager.d.ts.map +1 -1
  278. package/dist/web/server/pty/manager.js +104 -0
  279. package/dist/web/server/pty/manager.js.map +1 -1
  280. package/dist/web/server/routes/sessions.d.ts.map +1 -1
  281. package/dist/web/server/routes/sessions.js +5 -1
  282. package/dist/web/server/routes/sessions.js.map +1 -1
  283. package/dist/web/server/services/branches.d.ts.map +1 -1
  284. package/dist/web/server/services/branches.js +10 -8
  285. package/dist/web/server/services/branches.js.map +1 -1
  286. package/dist/web/server/services/worktrees.js +2 -2
  287. package/dist/web/server/services/worktrees.js.map +1 -1
  288. package/dist/worktree.d.ts +47 -1
  289. package/dist/worktree.d.ts.map +1 -1
  290. package/dist/worktree.js +280 -94
  291. package/dist/worktree.js.map +1 -1
  292. package/package.json +12 -14
  293. package/src/claude.ts +68 -70
  294. package/src/cli/ui/App.solid.tsx +1823 -0
  295. package/src/cli/ui/__tests__/solid/AppSolid.cleanup.test.tsx +255 -0
  296. package/src/cli/ui/__tests__/solid/BranchListScreen.test.tsx +243 -0
  297. package/src/cli/ui/__tests__/solid/components/QuickStartStep.test.tsx +237 -0
  298. package/src/cli/ui/__tests__/solid/components/WizardPopup.test.tsx +231 -0
  299. package/src/cli/ui/__tests__/solid/components/WizardSteps.test.tsx +238 -0
  300. package/src/cli/ui/__tests__/utils/branchFormatter.test.ts +7 -289
  301. package/src/cli/ui/__tests__/utils/clipboard.test.ts +3 -3
  302. package/src/cli/ui/__tests__/utils/statisticsCalculator.test.ts +1 -1
  303. package/src/cli/ui/components/solid/Footer.tsx +36 -0
  304. package/src/cli/ui/components/{parts → solid}/Header.tsx +17 -28
  305. package/src/cli/ui/components/solid/HelpOverlay.tsx +194 -0
  306. package/src/cli/ui/components/solid/QuickStartStep.tsx +197 -0
  307. package/src/cli/ui/components/{parts → solid}/ScrollableList.tsx +7 -8
  308. package/src/cli/ui/components/solid/SearchInput.tsx +42 -0
  309. package/src/cli/ui/components/solid/SelectInput.tsx +84 -0
  310. package/src/cli/ui/components/solid/Stats.tsx +92 -0
  311. package/src/cli/ui/components/solid/TextInput.tsx +49 -0
  312. package/src/cli/ui/components/solid/WizardController.tsx +384 -0
  313. package/src/cli/ui/components/solid/WizardPopup.tsx +135 -0
  314. package/src/cli/ui/components/solid/WizardSteps.tsx +793 -0
  315. package/src/cli/ui/core/index.ts +17 -0
  316. package/src/cli/ui/core/keybindings.ts +367 -0
  317. package/src/cli/ui/core/theme.ts +234 -0
  318. package/src/cli/ui/core/types.ts +235 -0
  319. package/src/cli/ui/hooks/solid/useAsyncOperation.ts +76 -0
  320. package/src/cli/ui/hooks/solid/useFilter.ts +86 -0
  321. package/src/cli/ui/hooks/solid/useGitOperations.ts +80 -0
  322. package/src/cli/ui/hooks/solid/useKeyHandler.ts +103 -0
  323. package/src/cli/ui/hooks/solid/useScrollableList.ts +149 -0
  324. package/src/cli/ui/hooks/solid/useSelection.ts +77 -0
  325. package/src/cli/ui/hooks/solid/useTerminalSize.ts +22 -0
  326. package/src/cli/ui/index.solid.ts +28 -0
  327. package/src/cli/ui/screens/solid/BranchListScreen.tsx +1050 -0
  328. package/src/cli/ui/screens/solid/ConfirmScreen.tsx +74 -0
  329. package/src/cli/ui/screens/solid/EnvironmentScreen.tsx +159 -0
  330. package/src/cli/ui/screens/solid/ErrorScreen.tsx +42 -0
  331. package/src/cli/ui/screens/solid/InputScreen.tsx +55 -0
  332. package/src/cli/ui/screens/solid/LoadingIndicator.tsx +77 -0
  333. package/src/cli/ui/screens/solid/LogDetailScreen.tsx +75 -0
  334. package/src/cli/ui/screens/solid/LogScreen.tsx +175 -0
  335. package/src/cli/ui/screens/solid/ProfileEnvScreen.tsx +192 -0
  336. package/src/cli/ui/screens/solid/ProfileScreen.tsx +98 -0
  337. package/src/cli/ui/screens/solid/SelectorScreen.tsx +170 -0
  338. package/src/cli/ui/screens/solid/SettingsScreen.tsx +50 -0
  339. package/src/cli/ui/screens/solid/WorktreeCreateScreen.tsx +136 -0
  340. package/src/cli/ui/screens/solid/WorktreeDeleteScreen.tsx +40 -0
  341. package/src/cli/ui/stores/appStore.ts +208 -0
  342. package/src/cli/ui/stores/branchStore.ts +357 -0
  343. package/src/cli/ui/stores/index.ts +31 -0
  344. package/src/cli/ui/stores/uiStore.ts +226 -0
  345. package/src/cli/ui/types.ts +20 -3
  346. package/src/cli/ui/utils/__tests__/branchFormatter.test.ts +180 -0
  347. package/src/cli/ui/utils/branchFormatter.ts +8 -215
  348. package/src/cli/ui/utils/continueSession.ts +44 -0
  349. package/src/cli/ui/utils/modelOptions.test.ts +1 -1
  350. package/src/codex.ts +100 -43
  351. package/src/config/__tests__/saveSession.test.ts +143 -0
  352. package/src/config/builtin-coding-agents.ts +19 -3
  353. package/src/config/index.ts +4 -0
  354. package/src/config/tools.ts +16 -0
  355. package/src/gemini.ts +58 -43
  356. package/src/index.test.ts +12 -12
  357. package/src/index.ts +164 -142
  358. package/src/launcher.ts +22 -3
  359. package/src/logging/logger.ts +32 -10
  360. package/src/opentui/index.solid.ts +1 -0
  361. package/src/repositories/worktree.repository.ts +8 -0
  362. package/src/services/__tests__/BatchMergeService.test.ts +62 -66
  363. package/src/services/__tests__/WorktreeOrchestrator.test.ts +8 -7
  364. package/src/services/codingAgentResolver.ts +30 -4
  365. package/src/services/dependency-installer.ts +0 -7
  366. package/src/types/api.ts +3 -0
  367. package/src/types/coding-agent.ts +85 -0
  368. package/src/types/tools.ts +19 -0
  369. package/src/utils/__tests__/npmRegistry.test.ts +250 -0
  370. package/src/utils/__tests__/prompt.test.ts +4 -5
  371. package/src/utils/coding-agent-colors.ts +165 -0
  372. package/src/utils/command.ts +10 -1
  373. package/src/utils/error-utils.ts +133 -0
  374. package/src/utils/npmRegistry.ts +249 -0
  375. package/src/utils/prompt.ts +1 -1
  376. package/src/utils/session/index.ts +10 -2
  377. package/src/utils/session/parsers/codex.ts +9 -1
  378. package/src/utils/session/parsers/index.ts +6 -0
  379. package/src/utils/session/parsers/opencode.ts +110 -0
  380. package/src/utils/session/types.ts +5 -0
  381. package/src/utils/terminal.ts +24 -0
  382. package/src/utils.test.ts +1 -1
  383. package/src/utils.ts +37 -4
  384. package/src/web/client/src/components/CodingAgentLaunchModal.tsx +12 -21
  385. package/src/web/client/src/components/branch-detail/BranchInfoCards.tsx +16 -1
  386. package/src/web/client/src/components/branch-detail/SessionHistoryTable.tsx +7 -1
  387. package/src/web/client/src/components/branch-detail/ToolLauncher.tsx +11 -6
  388. package/src/web/client/src/lib/coding-agent-colors.ts +149 -0
  389. package/src/web/client/src/pages/BranchDetailPage.tsx +11 -11
  390. package/src/web/server/pty/manager.ts +139 -0
  391. package/src/web/server/routes/sessions.ts +6 -0
  392. package/src/web/server/services/branches.ts +11 -8
  393. package/src/web/server/services/worktrees.ts +2 -2
  394. package/src/worktree.ts +366 -107
  395. package/dist/cli/ui/components/App.d.ts +0 -25
  396. package/dist/cli/ui/components/App.d.ts.map +0 -1
  397. package/dist/cli/ui/components/App.js +0 -988
  398. package/dist/cli/ui/components/App.js.map +0 -1
  399. package/dist/cli/ui/components/common/Confirm.d.ts +0 -13
  400. package/dist/cli/ui/components/common/Confirm.d.ts.map +0 -1
  401. package/dist/cli/ui/components/common/Confirm.js +0 -20
  402. package/dist/cli/ui/components/common/Confirm.js.map +0 -1
  403. package/dist/cli/ui/components/common/ErrorBoundary.d.ts +0 -23
  404. package/dist/cli/ui/components/common/ErrorBoundary.d.ts.map +0 -1
  405. package/dist/cli/ui/components/common/ErrorBoundary.js +0 -37
  406. package/dist/cli/ui/components/common/ErrorBoundary.js.map +0 -1
  407. package/dist/cli/ui/components/common/Input.d.ts +0 -19
  408. package/dist/cli/ui/components/common/Input.d.ts.map +0 -1
  409. package/dist/cli/ui/components/common/Input.js +0 -22
  410. package/dist/cli/ui/components/common/Input.js.map +0 -1
  411. package/dist/cli/ui/components/common/LoadingIndicator.d.ts +0 -19
  412. package/dist/cli/ui/components/common/LoadingIndicator.d.ts.map +0 -1
  413. package/dist/cli/ui/components/common/LoadingIndicator.js +0 -61
  414. package/dist/cli/ui/components/common/LoadingIndicator.js.map +0 -1
  415. package/dist/cli/ui/components/common/Select.d.ts +0 -38
  416. package/dist/cli/ui/components/common/Select.d.ts.map +0 -1
  417. package/dist/cli/ui/components/common/Select.js +0 -151
  418. package/dist/cli/ui/components/common/Select.js.map +0 -1
  419. package/dist/cli/ui/components/common/SpinnerIcon.d.ts +0 -20
  420. package/dist/cli/ui/components/common/SpinnerIcon.d.ts.map +0 -1
  421. package/dist/cli/ui/components/common/SpinnerIcon.js +0 -61
  422. package/dist/cli/ui/components/common/SpinnerIcon.js.map +0 -1
  423. package/dist/cli/ui/components/parts/Footer.d.ts +0 -15
  424. package/dist/cli/ui/components/parts/Footer.d.ts.map +0 -1
  425. package/dist/cli/ui/components/parts/Footer.js +0 -20
  426. package/dist/cli/ui/components/parts/Footer.js.map +0 -1
  427. package/dist/cli/ui/components/parts/Header.d.ts.map +0 -1
  428. package/dist/cli/ui/components/parts/Header.js +0 -24
  429. package/dist/cli/ui/components/parts/Header.js.map +0 -1
  430. package/dist/cli/ui/components/parts/MergeStatusList.d.ts +0 -13
  431. package/dist/cli/ui/components/parts/MergeStatusList.d.ts.map +0 -1
  432. package/dist/cli/ui/components/parts/MergeStatusList.js +0 -52
  433. package/dist/cli/ui/components/parts/MergeStatusList.js.map +0 -1
  434. package/dist/cli/ui/components/parts/ProgressBar.d.ts +0 -13
  435. package/dist/cli/ui/components/parts/ProgressBar.d.ts.map +0 -1
  436. package/dist/cli/ui/components/parts/ProgressBar.js +0 -53
  437. package/dist/cli/ui/components/parts/ProgressBar.js.map +0 -1
  438. package/dist/cli/ui/components/parts/ScrollableList.d.ts +0 -12
  439. package/dist/cli/ui/components/parts/ScrollableList.d.ts.map +0 -1
  440. package/dist/cli/ui/components/parts/ScrollableList.js +0 -11
  441. package/dist/cli/ui/components/parts/ScrollableList.js.map +0 -1
  442. package/dist/cli/ui/components/parts/Stats.d.ts +0 -10
  443. package/dist/cli/ui/components/parts/Stats.d.ts.map +0 -1
  444. package/dist/cli/ui/components/parts/Stats.js +0 -55
  445. package/dist/cli/ui/components/parts/Stats.js.map +0 -1
  446. package/dist/cli/ui/components/screens/BatchMergeProgressScreen.d.ts +0 -17
  447. package/dist/cli/ui/components/screens/BatchMergeProgressScreen.d.ts.map +0 -1
  448. package/dist/cli/ui/components/screens/BatchMergeProgressScreen.js +0 -42
  449. package/dist/cli/ui/components/screens/BatchMergeProgressScreen.js.map +0 -1
  450. package/dist/cli/ui/components/screens/BatchMergeResultScreen.d.ts +0 -17
  451. package/dist/cli/ui/components/screens/BatchMergeResultScreen.d.ts.map +0 -1
  452. package/dist/cli/ui/components/screens/BatchMergeResultScreen.js +0 -72
  453. package/dist/cli/ui/components/screens/BatchMergeResultScreen.js.map +0 -1
  454. package/dist/cli/ui/components/screens/BranchCreatorScreen.d.ts +0 -18
  455. package/dist/cli/ui/components/screens/BranchCreatorScreen.d.ts.map +0 -1
  456. package/dist/cli/ui/components/screens/BranchCreatorScreen.js +0 -151
  457. package/dist/cli/ui/components/screens/BranchCreatorScreen.js.map +0 -1
  458. package/dist/cli/ui/components/screens/BranchListScreen.d.ts.map +0 -1
  459. package/dist/cli/ui/components/screens/BranchListScreen.js +0 -476
  460. package/dist/cli/ui/components/screens/BranchListScreen.js.map +0 -1
  461. package/dist/cli/ui/components/screens/BranchQuickStartScreen.d.ts +0 -30
  462. package/dist/cli/ui/components/screens/BranchQuickStartScreen.d.ts.map +0 -1
  463. package/dist/cli/ui/components/screens/BranchQuickStartScreen.js +0 -145
  464. package/dist/cli/ui/components/screens/BranchQuickStartScreen.js.map +0 -1
  465. package/dist/cli/ui/components/screens/CodingAgentSelectorScreen.d.ts +0 -27
  466. package/dist/cli/ui/components/screens/CodingAgentSelectorScreen.d.ts.map +0 -1
  467. package/dist/cli/ui/components/screens/CodingAgentSelectorScreen.js +0 -93
  468. package/dist/cli/ui/components/screens/CodingAgentSelectorScreen.js.map +0 -1
  469. package/dist/cli/ui/components/screens/EnvironmentProfileScreen.d.ts +0 -19
  470. package/dist/cli/ui/components/screens/EnvironmentProfileScreen.d.ts.map +0 -1
  471. package/dist/cli/ui/components/screens/EnvironmentProfileScreen.js +0 -577
  472. package/dist/cli/ui/components/screens/EnvironmentProfileScreen.js.map +0 -1
  473. package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.d.ts +0 -45
  474. package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.d.ts.map +0 -1
  475. package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.js +0 -95
  476. package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.js.map +0 -1
  477. package/dist/cli/ui/components/screens/LogDatePickerScreen.d.ts +0 -10
  478. package/dist/cli/ui/components/screens/LogDatePickerScreen.d.ts.map +0 -1
  479. package/dist/cli/ui/components/screens/LogDatePickerScreen.js +0 -44
  480. package/dist/cli/ui/components/screens/LogDatePickerScreen.js.map +0 -1
  481. package/dist/cli/ui/components/screens/LogDetailScreen.d.ts.map +0 -1
  482. package/dist/cli/ui/components/screens/LogDetailScreen.js +0 -34
  483. package/dist/cli/ui/components/screens/LogDetailScreen.js.map +0 -1
  484. package/dist/cli/ui/components/screens/LogListScreen.d.ts.map +0 -1
  485. package/dist/cli/ui/components/screens/LogListScreen.js +0 -107
  486. package/dist/cli/ui/components/screens/LogListScreen.js.map +0 -1
  487. package/dist/cli/ui/components/screens/ModelSelectorScreen.d.ts +0 -24
  488. package/dist/cli/ui/components/screens/ModelSelectorScreen.d.ts.map +0 -1
  489. package/dist/cli/ui/components/screens/ModelSelectorScreen.js +0 -197
  490. package/dist/cli/ui/components/screens/ModelSelectorScreen.js.map +0 -1
  491. package/dist/cli/ui/components/screens/PRCleanupScreen.d.ts +0 -29
  492. package/dist/cli/ui/components/screens/PRCleanupScreen.d.ts.map +0 -1
  493. package/dist/cli/ui/components/screens/PRCleanupScreen.js +0 -92
  494. package/dist/cli/ui/components/screens/PRCleanupScreen.js.map +0 -1
  495. package/dist/cli/ui/components/screens/SessionSelectorScreen.d.ts +0 -31
  496. package/dist/cli/ui/components/screens/SessionSelectorScreen.d.ts.map +0 -1
  497. package/dist/cli/ui/components/screens/SessionSelectorScreen.js +0 -67
  498. package/dist/cli/ui/components/screens/SessionSelectorScreen.js.map +0 -1
  499. package/dist/cli/ui/hooks/useAppInput.d.ts +0 -21
  500. package/dist/cli/ui/hooks/useAppInput.d.ts.map +0 -1
  501. package/dist/cli/ui/hooks/useAppInput.js +0 -138
  502. package/dist/cli/ui/hooks/useAppInput.js.map +0 -1
  503. package/dist/cli/ui/hooks/useBatchMerge.d.ts +0 -17
  504. package/dist/cli/ui/hooks/useBatchMerge.d.ts.map +0 -1
  505. package/dist/cli/ui/hooks/useBatchMerge.js +0 -77
  506. package/dist/cli/ui/hooks/useBatchMerge.js.map +0 -1
  507. package/dist/cli/ui/hooks/useGitData.d.ts +0 -21
  508. package/dist/cli/ui/hooks/useGitData.d.ts.map +0 -1
  509. package/dist/cli/ui/hooks/useGitData.js +0 -229
  510. package/dist/cli/ui/hooks/useGitData.js.map +0 -1
  511. package/dist/cli/ui/hooks/useProfiles.d.ts +0 -41
  512. package/dist/cli/ui/hooks/useProfiles.d.ts.map +0 -1
  513. package/dist/cli/ui/hooks/useProfiles.js +0 -136
  514. package/dist/cli/ui/hooks/useProfiles.js.map +0 -1
  515. package/dist/cli/ui/hooks/useScreenState.d.ts +0 -12
  516. package/dist/cli/ui/hooks/useScreenState.d.ts.map +0 -1
  517. package/dist/cli/ui/hooks/useScreenState.js +0 -30
  518. package/dist/cli/ui/hooks/useScreenState.js.map +0 -1
  519. package/dist/cli/ui/hooks/useTerminalSize.d.ts +0 -9
  520. package/dist/cli/ui/hooks/useTerminalSize.d.ts.map +0 -1
  521. package/dist/cli/ui/hooks/useTerminalSize.js +0 -24
  522. package/dist/cli/ui/hooks/useTerminalSize.js.map +0 -1
  523. package/dist/cli/ui/hooks/useToolStatus.d.ts +0 -30
  524. package/dist/cli/ui/hooks/useToolStatus.d.ts.map +0 -1
  525. package/dist/cli/ui/hooks/useToolStatus.js +0 -49
  526. package/dist/cli/ui/hooks/useToolStatus.js.map +0 -1
  527. package/dist/cli/ui/screens/BranchActionSelectorScreen.d.ts +0 -24
  528. package/dist/cli/ui/screens/BranchActionSelectorScreen.d.ts.map +0 -1
  529. package/dist/cli/ui/screens/BranchActionSelectorScreen.js +0 -65
  530. package/dist/cli/ui/screens/BranchActionSelectorScreen.js.map +0 -1
  531. package/dist/client/assets/index-LNPtOrn3.js +0 -78
  532. package/src/cli/ui/__tests__/SKIPPED_TESTS.md +0 -119
  533. package/src/cli/ui/__tests__/acceptance/branchList.acceptance.test.tsx.skip +0 -239
  534. package/src/cli/ui/__tests__/acceptance/navigation.acceptance.test.tsx +0 -225
  535. package/src/cli/ui/__tests__/acceptance/realtimeUpdate.acceptance.test.tsx.skip +0 -219
  536. package/src/cli/ui/__tests__/components/App.protected-branch.test.tsx +0 -212
  537. package/src/cli/ui/__tests__/components/App.shortcuts.test.tsx +0 -440
  538. package/src/cli/ui/__tests__/components/App.test.tsx +0 -365
  539. package/src/cli/ui/__tests__/components/ModelSelectorScreen.initial.test.tsx +0 -91
  540. package/src/cli/ui/__tests__/components/common/Confirm.test.tsx +0 -80
  541. package/src/cli/ui/__tests__/components/common/ErrorBoundary.test.tsx +0 -104
  542. package/src/cli/ui/__tests__/components/common/Input.test.tsx +0 -100
  543. package/src/cli/ui/__tests__/components/common/LoadingIndicator.test.tsx +0 -148
  544. package/src/cli/ui/__tests__/components/common/Select.memo.test.tsx +0 -255
  545. package/src/cli/ui/__tests__/components/common/Select.test.tsx +0 -335
  546. package/src/cli/ui/__tests__/components/parts/Footer.test.tsx +0 -65
  547. package/src/cli/ui/__tests__/components/parts/Header.test.tsx +0 -55
  548. package/src/cli/ui/__tests__/components/parts/ScrollableList.test.tsx +0 -69
  549. package/src/cli/ui/__tests__/components/parts/Stats.test.tsx +0 -148
  550. package/src/cli/ui/__tests__/components/screens/BranchCreatorScreen.test.tsx +0 -253
  551. package/src/cli/ui/__tests__/components/screens/BranchListScreen.test.tsx +0 -1070
  552. package/src/cli/ui/__tests__/components/screens/BranchQuickStartScreen.test.tsx +0 -142
  553. package/src/cli/ui/__tests__/components/screens/CodingAgentSelectorScreen.test.tsx +0 -174
  554. package/src/cli/ui/__tests__/components/screens/ExecutionModeSelectorScreen.test.tsx +0 -182
  555. package/src/cli/ui/__tests__/components/screens/LogDetailScreen.test.tsx +0 -57
  556. package/src/cli/ui/__tests__/components/screens/LogListScreen.test.tsx +0 -102
  557. package/src/cli/ui/__tests__/components/screens/PRCleanupScreen.test.tsx +0 -216
  558. package/src/cli/ui/__tests__/components/screens/SessionSelectorScreen.test.tsx +0 -147
  559. package/src/cli/ui/__tests__/hooks/useGitData.nonblocking.test.tsx +0 -206
  560. package/src/cli/ui/__tests__/hooks/useGitData.test.ts +0 -197
  561. package/src/cli/ui/__tests__/hooks/useGitData.test.ts.skip +0 -228
  562. package/src/cli/ui/__tests__/hooks/useScreenState.test.ts +0 -147
  563. package/src/cli/ui/__tests__/hooks/useTerminalSize.test.ts +0 -99
  564. package/src/cli/ui/__tests__/integration/branchList.test.tsx.skip +0 -253
  565. package/src/cli/ui/__tests__/integration/edgeCases.test.tsx +0 -436
  566. package/src/cli/ui/__tests__/integration/navigation.test.tsx +0 -514
  567. package/src/cli/ui/__tests__/integration/realtimeUpdate.test.tsx +0 -509
  568. package/src/cli/ui/__tests__/integration/realtimeUpdate.test.tsx.skip +0 -216
  569. package/src/cli/ui/__tests__/performance/branchList.performance.test.tsx +0 -193
  570. package/src/cli/ui/__tests__/performance/useMemoOptimization.test.tsx +0 -234
  571. package/src/cli/ui/components/App.tsx +0 -1456
  572. package/src/cli/ui/components/common/Confirm.tsx +0 -44
  573. package/src/cli/ui/components/common/ErrorBoundary.tsx +0 -60
  574. package/src/cli/ui/components/common/Input.tsx +0 -58
  575. package/src/cli/ui/components/common/LoadingIndicator.tsx +0 -98
  576. package/src/cli/ui/components/common/Select.tsx +0 -247
  577. package/src/cli/ui/components/common/SpinnerIcon.tsx +0 -86
  578. package/src/cli/ui/components/parts/Footer.tsx +0 -41
  579. package/src/cli/ui/components/parts/Header.test.tsx +0 -75
  580. package/src/cli/ui/components/parts/MergeStatusList.tsx +0 -75
  581. package/src/cli/ui/components/parts/ProgressBar.tsx +0 -73
  582. package/src/cli/ui/components/parts/Stats.tsx +0 -88
  583. package/src/cli/ui/components/screens/BatchMergeProgressScreen.tsx +0 -74
  584. package/src/cli/ui/components/screens/BatchMergeResultScreen.tsx +0 -108
  585. package/src/cli/ui/components/screens/BranchCreatorScreen.tsx +0 -242
  586. package/src/cli/ui/components/screens/BranchListScreen.tsx +0 -744
  587. package/src/cli/ui/components/screens/BranchQuickStartScreen.tsx +0 -241
  588. package/src/cli/ui/components/screens/CodingAgentSelectorScreen.tsx +0 -159
  589. package/src/cli/ui/components/screens/EnvironmentProfileScreen.tsx +0 -928
  590. package/src/cli/ui/components/screens/ExecutionModeSelectorScreen.tsx +0 -176
  591. package/src/cli/ui/components/screens/LogDatePickerScreen.tsx +0 -83
  592. package/src/cli/ui/components/screens/LogDetailScreen.tsx +0 -67
  593. package/src/cli/ui/components/screens/LogListScreen.tsx +0 -192
  594. package/src/cli/ui/components/screens/ModelSelectorScreen.tsx +0 -320
  595. package/src/cli/ui/components/screens/PRCleanupScreen.tsx +0 -171
  596. package/src/cli/ui/components/screens/SessionSelectorScreen.tsx +0 -135
  597. package/src/cli/ui/hooks/useAppInput.ts +0 -172
  598. package/src/cli/ui/hooks/useBatchMerge.ts +0 -96
  599. package/src/cli/ui/hooks/useGitData.ts +0 -347
  600. package/src/cli/ui/hooks/useProfiles.ts +0 -211
  601. package/src/cli/ui/hooks/useScreenState.ts +0 -44
  602. package/src/cli/ui/hooks/useTerminalSize.ts +0 -33
  603. package/src/cli/ui/hooks/useToolStatus.ts +0 -68
  604. package/src/cli/ui/screens/BranchActionSelectorScreen.tsx +0 -111
  605. 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
  }