@akiojin/gwt 4.10.0 → 4.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +4 -4
- package/README.md +4 -4
- package/bin/gwt.js +1 -1
- package/dist/claude.d.ts +2 -0
- package/dist/claude.d.ts.map +1 -1
- package/dist/claude.js +97 -68
- package/dist/claude.js.map +1 -1
- package/dist/cli/ui/App.solid.d.ts +29 -0
- package/dist/cli/ui/App.solid.d.ts.map +1 -0
- package/dist/cli/ui/App.solid.js +1395 -0
- package/dist/cli/ui/App.solid.js.map +1 -0
- package/dist/cli/ui/components/solid/Footer.d.ts +10 -0
- package/dist/cli/ui/components/solid/Footer.d.ts.map +1 -0
- package/dist/cli/ui/components/solid/Footer.js +10 -0
- package/dist/cli/ui/components/solid/Footer.js.map +1 -0
- package/dist/cli/ui/components/{parts → solid}/Header.d.ts +1 -6
- package/dist/cli/ui/components/solid/Header.d.ts.map +1 -0
- package/dist/cli/ui/components/solid/Header.js +13 -0
- package/dist/cli/ui/components/solid/Header.js.map +1 -0
- package/dist/cli/ui/components/solid/HelpOverlay.d.ts +8 -0
- package/dist/cli/ui/components/solid/HelpOverlay.d.ts.map +1 -0
- package/dist/cli/ui/components/solid/HelpOverlay.js +118 -0
- package/dist/cli/ui/components/solid/HelpOverlay.js.map +1 -0
- package/dist/cli/ui/components/solid/QuickStartStep.d.ts +17 -0
- package/dist/cli/ui/components/solid/QuickStartStep.d.ts.map +1 -0
- package/dist/cli/ui/components/solid/QuickStartStep.js +152 -0
- package/dist/cli/ui/components/solid/QuickStartStep.js.map +1 -0
- package/dist/cli/ui/components/solid/SelectInput.d.ts +22 -0
- package/dist/cli/ui/components/solid/SelectInput.d.ts.map +1 -0
- package/dist/cli/ui/components/solid/SelectInput.js +45 -0
- package/dist/cli/ui/components/solid/SelectInput.js.map +1 -0
- package/dist/cli/ui/components/solid/TextInput.d.ts +12 -0
- package/dist/cli/ui/components/solid/TextInput.d.ts.map +1 -0
- package/dist/cli/ui/components/solid/TextInput.js +9 -0
- package/dist/cli/ui/components/solid/TextInput.js.map +1 -0
- package/dist/cli/ui/components/solid/WizardController.d.ts +34 -0
- package/dist/cli/ui/components/solid/WizardController.d.ts.map +1 -0
- package/dist/cli/ui/components/solid/WizardController.js +223 -0
- package/dist/cli/ui/components/solid/WizardController.js.map +1 -0
- package/dist/cli/ui/components/solid/WizardPopup.d.ts +26 -0
- package/dist/cli/ui/components/solid/WizardPopup.d.ts.map +1 -0
- package/dist/cli/ui/components/solid/WizardPopup.js +68 -0
- package/dist/cli/ui/components/solid/WizardPopup.js.map +1 -0
- package/dist/cli/ui/components/solid/WizardSteps.d.ts +52 -0
- package/dist/cli/ui/components/solid/WizardSteps.d.ts.map +1 -0
- package/dist/cli/ui/components/solid/WizardSteps.js +419 -0
- package/dist/cli/ui/components/solid/WizardSteps.js.map +1 -0
- package/dist/cli/ui/core/index.d.ts +12 -0
- package/dist/cli/ui/core/index.d.ts.map +1 -0
- package/dist/cli/ui/core/index.js +15 -0
- package/dist/cli/ui/core/index.js.map +1 -0
- package/dist/cli/ui/core/keybindings.d.ts +106 -0
- package/dist/cli/ui/core/keybindings.d.ts.map +1 -0
- package/dist/cli/ui/core/keybindings.js +270 -0
- package/dist/cli/ui/core/keybindings.js.map +1 -0
- package/dist/cli/ui/core/theme.d.ts +123 -0
- package/dist/cli/ui/core/theme.d.ts.map +1 -0
- package/dist/cli/ui/core/theme.js +191 -0
- package/dist/cli/ui/core/theme.js.map +1 -0
- package/dist/cli/ui/core/types.d.ts +156 -0
- package/dist/cli/ui/core/types.d.ts.map +1 -0
- package/dist/cli/ui/core/types.js +10 -0
- package/dist/cli/ui/core/types.js.map +1 -0
- package/dist/cli/ui/hooks/solid/useScrollableList.d.ts +26 -0
- package/dist/cli/ui/hooks/solid/useScrollableList.d.ts.map +1 -0
- package/dist/cli/ui/hooks/solid/useScrollableList.js +89 -0
- package/dist/cli/ui/hooks/solid/useScrollableList.js.map +1 -0
- package/dist/cli/ui/hooks/solid/useTerminalSize.d.ts +10 -0
- package/dist/cli/ui/hooks/solid/useTerminalSize.d.ts.map +1 -0
- package/dist/cli/ui/hooks/solid/useTerminalSize.js +16 -0
- package/dist/cli/ui/hooks/solid/useTerminalSize.js.map +1 -0
- package/dist/cli/ui/index.solid.d.ts +5 -0
- package/dist/cli/ui/index.solid.d.ts.map +1 -0
- package/dist/cli/ui/index.solid.js +21 -0
- package/dist/cli/ui/index.solid.js.map +1 -0
- package/dist/cli/ui/screens/solid/BranchListScreen.d.ts +53 -0
- package/dist/cli/ui/screens/solid/BranchListScreen.d.ts.map +1 -0
- package/dist/cli/ui/screens/solid/BranchListScreen.js +829 -0
- package/dist/cli/ui/screens/solid/BranchListScreen.js.map +1 -0
- package/dist/cli/ui/screens/solid/ConfirmScreen.d.ts +11 -0
- package/dist/cli/ui/screens/solid/ConfirmScreen.d.ts.map +1 -0
- package/dist/cli/ui/screens/solid/ConfirmScreen.js +45 -0
- package/dist/cli/ui/screens/solid/ConfirmScreen.js.map +1 -0
- package/dist/cli/ui/screens/solid/EnvironmentScreen.d.ts +14 -0
- package/dist/cli/ui/screens/solid/EnvironmentScreen.d.ts.map +1 -0
- package/dist/cli/ui/screens/solid/EnvironmentScreen.js +90 -0
- package/dist/cli/ui/screens/solid/EnvironmentScreen.js.map +1 -0
- package/dist/cli/ui/screens/solid/ErrorScreen.d.ts +8 -0
- package/dist/cli/ui/screens/solid/ErrorScreen.d.ts.map +1 -0
- package/dist/cli/ui/screens/solid/ErrorScreen.js +18 -0
- package/dist/cli/ui/screens/solid/ErrorScreen.js.map +1 -0
- package/dist/cli/ui/screens/solid/InputScreen.d.ts +13 -0
- package/dist/cli/ui/screens/solid/InputScreen.d.ts.map +1 -0
- package/dist/cli/ui/screens/solid/InputScreen.js +17 -0
- package/dist/cli/ui/screens/solid/InputScreen.js.map +1 -0
- package/dist/cli/ui/screens/solid/LoadingIndicator.d.ts +9 -0
- package/dist/cli/ui/screens/solid/LoadingIndicator.d.ts.map +1 -0
- package/dist/cli/ui/screens/solid/LoadingIndicator.js +43 -0
- package/dist/cli/ui/screens/solid/LoadingIndicator.js.map +1 -0
- package/dist/cli/ui/{components/screens → screens/solid}/LogDetailScreen.d.ts +2 -2
- package/dist/cli/ui/screens/solid/LogDetailScreen.d.ts.map +1 -0
- package/dist/cli/ui/screens/solid/LogDetailScreen.js +34 -0
- package/dist/cli/ui/screens/solid/LogDetailScreen.js.map +1 -0
- package/dist/cli/ui/{components/screens/LogListScreen.d.ts → screens/solid/LogScreen.d.ts} +10 -4
- package/dist/cli/ui/screens/solid/LogScreen.d.ts.map +1 -0
- package/dist/cli/ui/screens/solid/LogScreen.js +333 -0
- package/dist/cli/ui/screens/solid/LogScreen.js.map +1 -0
- package/dist/cli/ui/screens/solid/ProfileEnvScreen.d.ts +17 -0
- package/dist/cli/ui/screens/solid/ProfileEnvScreen.d.ts.map +1 -0
- package/dist/cli/ui/screens/solid/ProfileEnvScreen.js +115 -0
- package/dist/cli/ui/screens/solid/ProfileEnvScreen.js.map +1 -0
- package/dist/cli/ui/screens/solid/ProfileScreen.d.ts +17 -0
- package/dist/cli/ui/screens/solid/ProfileScreen.d.ts.map +1 -0
- package/dist/cli/ui/screens/solid/ProfileScreen.js +50 -0
- package/dist/cli/ui/screens/solid/ProfileScreen.js.map +1 -0
- package/dist/cli/ui/screens/solid/SelectorScreen.d.ts +20 -0
- package/dist/cli/ui/screens/solid/SelectorScreen.d.ts.map +1 -0
- package/dist/cli/ui/screens/solid/SelectorScreen.js +98 -0
- package/dist/cli/ui/screens/solid/SelectorScreen.js.map +1 -0
- package/dist/cli/ui/screens/solid/WorktreeCreateScreen.d.ts +13 -0
- package/dist/cli/ui/screens/solid/WorktreeCreateScreen.d.ts.map +1 -0
- package/dist/cli/ui/screens/solid/WorktreeCreateScreen.js +59 -0
- package/dist/cli/ui/screens/solid/WorktreeCreateScreen.js.map +1 -0
- package/dist/cli/ui/stores/appStore.d.ts +143 -0
- package/dist/cli/ui/stores/appStore.d.ts.map +1 -0
- package/dist/cli/ui/stores/appStore.js +158 -0
- package/dist/cli/ui/stores/appStore.js.map +1 -0
- package/dist/cli/ui/stores/branchStore.d.ts +159 -0
- package/dist/cli/ui/stores/branchStore.d.ts.map +1 -0
- package/dist/cli/ui/stores/branchStore.js +275 -0
- package/dist/cli/ui/stores/branchStore.js.map +1 -0
- package/dist/cli/ui/stores/index.d.ts +11 -0
- package/dist/cli/ui/stores/index.d.ts.map +1 -0
- package/dist/cli/ui/stores/index.js +14 -0
- package/dist/cli/ui/stores/index.js.map +1 -0
- package/dist/cli/ui/stores/uiStore.d.ts +146 -0
- package/dist/cli/ui/stores/uiStore.d.ts.map +1 -0
- package/dist/cli/ui/stores/uiStore.js +166 -0
- package/dist/cli/ui/stores/uiStore.js.map +1 -0
- package/dist/cli/ui/types.d.ts +17 -1
- package/dist/cli/ui/types.d.ts.map +1 -1
- package/dist/cli/ui/utils/branchFormatter.d.ts +1 -0
- package/dist/cli/ui/utils/branchFormatter.d.ts.map +1 -1
- package/dist/cli/ui/utils/branchFormatter.js +36 -217
- package/dist/cli/ui/utils/branchFormatter.js.map +1 -1
- package/dist/cli/ui/utils/continueSession.d.ts +18 -0
- package/dist/cli/ui/utils/continueSession.d.ts.map +1 -1
- package/dist/cli/ui/utils/continueSession.js +90 -2
- package/dist/cli/ui/utils/continueSession.js.map +1 -1
- package/dist/cli/ui/utils/versionCache.d.ts +37 -0
- package/dist/cli/ui/utils/versionCache.d.ts.map +1 -0
- package/dist/cli/ui/utils/versionCache.js +70 -0
- package/dist/cli/ui/utils/versionCache.js.map +1 -0
- package/dist/cli/ui/utils/versionFetcher.d.ts +41 -0
- package/dist/cli/ui/utils/versionFetcher.d.ts.map +1 -0
- package/dist/cli/ui/utils/versionFetcher.js +89 -0
- package/dist/cli/ui/utils/versionFetcher.js.map +1 -0
- package/dist/client/assets/{index-ChHC-Puh.css → index-BbfV7Wuj.css} +1 -1
- package/dist/client/assets/index-CoAyq5x1.js +78 -0
- package/dist/client/index.html +2 -2
- package/dist/codex.d.ts +2 -0
- package/dist/codex.d.ts.map +1 -1
- package/dist/codex.js +109 -39
- package/dist/codex.js.map +1 -1
- package/dist/config/builtin-coding-agents.js +4 -4
- package/dist/config/builtin-coding-agents.js.map +1 -1
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +11 -0
- package/dist/config/index.js.map +1 -1
- package/dist/gemini.d.ts +2 -0
- package/dist/gemini.d.ts.map +1 -1
- package/dist/gemini.js +77 -39
- package/dist/gemini.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +153 -103
- package/dist/index.js.map +1 -1
- package/dist/launcher.d.ts.map +1 -1
- package/dist/launcher.js +56 -6
- package/dist/launcher.js.map +1 -1
- package/dist/logging/agentOutput.d.ts +21 -0
- package/dist/logging/agentOutput.d.ts.map +1 -0
- package/dist/logging/agentOutput.js +164 -0
- package/dist/logging/agentOutput.js.map +1 -0
- package/dist/logging/formatter.d.ts.map +1 -1
- package/dist/logging/formatter.js +18 -4
- package/dist/logging/formatter.js.map +1 -1
- package/dist/logging/logger.d.ts.map +1 -1
- package/dist/logging/logger.js +28 -9
- package/dist/logging/logger.js.map +1 -1
- package/dist/logging/reader.d.ts +21 -0
- package/dist/logging/reader.d.ts.map +1 -1
- package/dist/logging/reader.js +79 -0
- package/dist/logging/reader.js.map +1 -1
- package/dist/opentui/highlights-eq9cgrbb.scm +604 -0
- package/dist/opentui/highlights-ghv9g403.scm +205 -0
- package/dist/opentui/highlights-hk7bwhj4.scm +284 -0
- package/dist/opentui/highlights-r812a2qc.scm +150 -0
- package/dist/opentui/highlights-x6tmsnaa.scm +115 -0
- package/dist/opentui/index.solid.d.ts +2 -0
- package/dist/opentui/index.solid.d.ts.map +1 -0
- package/dist/opentui/index.solid.js +53687 -0
- package/dist/opentui/index.solid.js.map +1 -0
- package/dist/opentui/injections-73j83es3.scm +27 -0
- package/dist/opentui/tree-sitter-javascript-nd0q4pe9.wasm +0 -0
- package/dist/opentui/tree-sitter-markdown-411r6y9b.wasm +0 -0
- package/dist/opentui/tree-sitter-markdown_inline-j5349f42.wasm +0 -0
- package/dist/opentui/tree-sitter-typescript-zxjzwt75.wasm +0 -0
- package/dist/opentui/tree-sitter-zig-e78zbjpm.wasm +0 -0
- package/dist/repositories/worktree.repository.d.ts +1 -0
- package/dist/repositories/worktree.repository.d.ts.map +1 -1
- package/dist/repositories/worktree.repository.js +7 -0
- package/dist/repositories/worktree.repository.js.map +1 -1
- package/dist/services/codingAgentResolver.d.ts +2 -0
- package/dist/services/codingAgentResolver.d.ts.map +1 -1
- package/dist/services/codingAgentResolver.js +30 -4
- package/dist/services/codingAgentResolver.js.map +1 -1
- package/dist/services/dependency-installer.d.ts.map +1 -1
- package/dist/services/dependency-installer.js +2 -7
- package/dist/services/dependency-installer.js.map +1 -1
- package/dist/types/api.d.ts +3 -0
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/coding-agent.d.ts +62 -0
- package/dist/types/coding-agent.d.ts.map +1 -0
- package/dist/types/coding-agent.js +29 -0
- package/dist/types/coding-agent.js.map +1 -0
- package/dist/types/tools.d.ts +17 -0
- package/dist/types/tools.d.ts.map +1 -1
- package/dist/utils/coding-agent-colors.d.ts +88 -0
- package/dist/utils/coding-agent-colors.d.ts.map +1 -0
- package/dist/utils/coding-agent-colors.js +137 -0
- package/dist/utils/coding-agent-colors.js.map +1 -0
- package/dist/utils/command.d.ts +1 -1
- package/dist/utils/command.js +1 -1
- package/dist/utils/error-utils.d.ts +27 -0
- package/dist/utils/error-utils.d.ts.map +1 -0
- package/dist/utils/error-utils.js +98 -0
- package/dist/utils/error-utils.js.map +1 -0
- package/dist/utils/npmRegistry.d.ts +61 -0
- package/dist/utils/npmRegistry.d.ts.map +1 -0
- package/dist/utils/npmRegistry.js +180 -0
- package/dist/utils/npmRegistry.js.map +1 -0
- package/dist/utils/prompt.d.ts +1 -1
- package/dist/utils/prompt.js +1 -1
- package/dist/utils/session/common.d.ts +8 -0
- package/dist/utils/session/common.d.ts.map +1 -1
- package/dist/utils/session/common.js +22 -0
- package/dist/utils/session/common.js.map +1 -1
- package/dist/utils/session/parsers/claude.d.ts +10 -4
- package/dist/utils/session/parsers/claude.d.ts.map +1 -1
- package/dist/utils/session/parsers/claude.js +64 -18
- package/dist/utils/session/parsers/claude.js.map +1 -1
- package/dist/utils/session/parsers/codex.d.ts.map +1 -1
- package/dist/utils/session/parsers/codex.js +47 -20
- package/dist/utils/session/parsers/codex.js.map +1 -1
- package/dist/utils/session/parsers/gemini.d.ts.map +1 -1
- package/dist/utils/session/parsers/gemini.js +43 -6
- package/dist/utils/session/parsers/gemini.js.map +1 -1
- package/dist/utils/session/parsers/opencode.d.ts.map +1 -1
- package/dist/utils/session/parsers/opencode.js +43 -6
- package/dist/utils/session/parsers/opencode.js.map +1 -1
- package/dist/utils/session/types.d.ts +7 -0
- package/dist/utils/session/types.d.ts.map +1 -1
- package/dist/utils/terminal.d.ts +1 -0
- package/dist/utils/terminal.d.ts.map +1 -1
- package/dist/utils/terminal.js +20 -0
- package/dist/utils/terminal.js.map +1 -1
- package/dist/utils.d.ts +9 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +33 -2
- package/dist/utils.js.map +1 -1
- package/dist/web/client/src/components/CodingAgentLaunchModal.d.ts.map +1 -1
- package/dist/web/client/src/components/CodingAgentLaunchModal.js +7 -16
- package/dist/web/client/src/components/CodingAgentLaunchModal.js.map +1 -1
- package/dist/web/client/src/components/branch-detail/BranchInfoCards.d.ts.map +1 -1
- package/dist/web/client/src/components/branch-detail/BranchInfoCards.js +7 -2
- package/dist/web/client/src/components/branch-detail/BranchInfoCards.js.map +1 -1
- package/dist/web/client/src/components/branch-detail/SessionHistoryTable.d.ts.map +1 -1
- package/dist/web/client/src/components/branch-detail/SessionHistoryTable.js +2 -1
- package/dist/web/client/src/components/branch-detail/SessionHistoryTable.js.map +1 -1
- package/dist/web/client/src/components/branch-detail/ToolLauncher.d.ts +2 -2
- package/dist/web/client/src/components/branch-detail/ToolLauncher.d.ts.map +1 -1
- package/dist/web/client/src/components/branch-detail/ToolLauncher.js +5 -5
- package/dist/web/client/src/components/branch-detail/ToolLauncher.js.map +1 -1
- package/dist/web/client/src/components/ui/alert.d.ts +1 -1
- package/dist/web/client/src/lib/coding-agent-colors.d.ts +86 -0
- package/dist/web/client/src/lib/coding-agent-colors.d.ts.map +1 -0
- package/dist/web/client/src/lib/coding-agent-colors.js +135 -0
- package/dist/web/client/src/lib/coding-agent-colors.js.map +1 -0
- package/dist/web/client/src/pages/BranchDetailPage.js +10 -10
- package/dist/web/client/src/pages/BranchDetailPage.js.map +1 -1
- package/dist/web/server/pty/manager.d.ts +2 -0
- package/dist/web/server/pty/manager.d.ts.map +1 -1
- package/dist/web/server/pty/manager.js +104 -0
- package/dist/web/server/pty/manager.js.map +1 -1
- package/dist/web/server/routes/sessions.d.ts.map +1 -1
- package/dist/web/server/routes/sessions.js +5 -1
- package/dist/web/server/routes/sessions.js.map +1 -1
- package/dist/web/server/services/branches.d.ts.map +1 -1
- package/dist/web/server/services/branches.js +10 -8
- package/dist/web/server/services/branches.js.map +1 -1
- package/dist/web/server/services/worktrees.js +2 -2
- package/dist/web/server/services/worktrees.js.map +1 -1
- package/dist/worktree.d.ts +50 -1
- package/dist/worktree.d.ts.map +1 -1
- package/dist/worktree.js +292 -100
- package/dist/worktree.js.map +1 -1
- package/package.json +13 -14
- package/src/claude.ts +129 -95
- package/src/cli/ui/App.solid.tsx +2096 -0
- package/src/cli/ui/__tests__/solid/AppSolid.cleanup.test.tsx +1084 -0
- package/src/cli/ui/__tests__/solid/BranchListScreen.test.tsx +343 -0
- package/src/cli/ui/__tests__/solid/ConfirmScreen.test.tsx +77 -0
- package/src/cli/ui/__tests__/solid/LogScreen.test.tsx +351 -0
- package/src/cli/ui/__tests__/solid/components/QuickStartStep.test.tsx +308 -0
- package/src/cli/ui/__tests__/solid/components/WizardPopup.test.tsx +231 -0
- package/src/cli/ui/__tests__/solid/components/WizardSteps.test.tsx +241 -0
- package/src/cli/ui/__tests__/utils/branchFormatter.test.ts +79 -334
- package/src/cli/ui/__tests__/utils/clipboard.test.ts +3 -3
- package/src/cli/ui/__tests__/utils/statisticsCalculator.test.ts +1 -1
- package/src/cli/ui/components/solid/Footer.tsx +36 -0
- package/src/cli/ui/components/{parts → solid}/Header.tsx +17 -28
- package/src/cli/ui/components/solid/HelpOverlay.tsx +194 -0
- package/src/cli/ui/components/solid/QuickStartStep.tsx +209 -0
- package/src/cli/ui/components/{parts → solid}/ScrollableList.tsx +7 -8
- package/src/cli/ui/components/solid/SearchInput.tsx +42 -0
- package/src/cli/ui/components/solid/SelectInput.tsx +88 -0
- package/src/cli/ui/components/solid/Stats.tsx +92 -0
- package/src/cli/ui/components/solid/TextInput.tsx +49 -0
- package/src/cli/ui/components/solid/WizardController.tsx +393 -0
- package/src/cli/ui/components/solid/WizardPopup.tsx +135 -0
- package/src/cli/ui/components/solid/WizardSteps.tsx +736 -0
- package/src/cli/ui/core/index.ts +17 -0
- package/src/cli/ui/core/keybindings.ts +367 -0
- package/src/cli/ui/core/theme.ts +266 -0
- package/src/cli/ui/core/types.ts +235 -0
- package/src/cli/ui/hooks/solid/useAsyncOperation.ts +78 -0
- package/src/cli/ui/hooks/solid/useFilter.ts +86 -0
- package/src/cli/ui/hooks/solid/useGitOperations.ts +81 -0
- package/src/cli/ui/hooks/solid/useKeyHandler.ts +103 -0
- package/src/cli/ui/hooks/solid/useScrollableList.ts +149 -0
- package/src/cli/ui/hooks/solid/useSelection.ts +77 -0
- package/src/cli/ui/hooks/solid/useTerminalSize.ts +22 -0
- package/src/cli/ui/index.solid.ts +28 -0
- package/src/cli/ui/screens/solid/BranchListScreen.tsx +1153 -0
- package/src/cli/ui/screens/solid/ConfirmScreen.tsx +86 -0
- package/src/cli/ui/screens/solid/EnvironmentScreen.tsx +161 -0
- package/src/cli/ui/screens/solid/ErrorScreen.tsx +42 -0
- package/src/cli/ui/screens/solid/InputScreen.tsx +55 -0
- package/src/cli/ui/screens/solid/LoadingIndicator.tsx +77 -0
- package/src/cli/ui/screens/solid/LogDetailScreen.tsx +75 -0
- package/src/cli/ui/screens/solid/LogScreen.tsx +504 -0
- package/src/cli/ui/screens/solid/ProfileEnvScreen.tsx +196 -0
- package/src/cli/ui/screens/solid/ProfileScreen.tsx +98 -0
- package/src/cli/ui/screens/solid/SelectorScreen.tsx +181 -0
- package/src/cli/ui/screens/solid/SettingsScreen.tsx +52 -0
- package/src/cli/ui/screens/solid/WorktreeCreateScreen.tsx +136 -0
- package/src/cli/ui/screens/solid/WorktreeDeleteScreen.tsx +40 -0
- package/src/cli/ui/stores/appStore.ts +208 -0
- package/src/cli/ui/stores/branchStore.ts +357 -0
- package/src/cli/ui/stores/index.ts +31 -0
- package/src/cli/ui/stores/uiStore.ts +226 -0
- package/src/cli/ui/types.ts +21 -3
- package/src/cli/ui/utils/__tests__/branchFormatter.test.ts +227 -0
- package/src/cli/ui/utils/branchFormatter.ts +43 -222
- package/src/cli/ui/utils/continueSession.ts +133 -2
- package/src/cli/ui/utils/modelOptions.test.ts +1 -1
- package/src/cli/ui/utils/versionCache.ts +93 -0
- package/src/cli/ui/utils/versionFetcher.ts +120 -0
- package/src/codex.ts +138 -39
- package/src/config/__tests__/saveSession.test.ts +143 -0
- package/src/config/builtin-coding-agents.ts +4 -4
- package/src/config/index.ts +14 -0
- package/src/gemini.ts +107 -46
- package/src/index.test.ts +25 -19
- package/src/index.ts +202 -143
- package/src/launcher.ts +66 -6
- package/src/logging/agentOutput.ts +216 -0
- package/src/logging/formatter.ts +23 -4
- package/src/logging/logger.ts +34 -10
- package/src/logging/reader.ts +117 -0
- package/src/opentui/index.solid.ts +1 -0
- package/src/repositories/worktree.repository.ts +8 -0
- package/src/services/__tests__/BatchMergeService.test.ts +83 -67
- package/src/services/__tests__/WorktreeOrchestrator.test.ts +8 -7
- package/src/services/codingAgentResolver.ts +30 -4
- package/src/services/dependency-installer.ts +2 -9
- package/src/types/api.ts +3 -0
- package/src/types/coding-agent.ts +85 -0
- package/src/types/tools.ts +19 -0
- package/src/utils/__tests__/npmRegistry.test.ts +250 -0
- package/src/utils/__tests__/prompt.test.ts +4 -5
- package/src/utils/coding-agent-colors.ts +165 -0
- package/src/utils/command.ts +1 -1
- package/src/utils/error-utils.ts +133 -0
- package/src/utils/npmRegistry.ts +249 -0
- package/src/utils/prompt.ts +1 -1
- package/src/utils/session/common.ts +28 -0
- package/src/utils/session/parsers/claude.ts +79 -29
- package/src/utils/session/parsers/codex.ts +50 -18
- package/src/utils/session/parsers/gemini.ts +46 -5
- package/src/utils/session/parsers/opencode.ts +46 -5
- package/src/utils/session/types.ts +4 -0
- package/src/utils/terminal.ts +24 -0
- package/src/utils.test.ts +1 -1
- package/src/utils.ts +37 -4
- package/src/web/client/src/components/CodingAgentLaunchModal.tsx +12 -21
- package/src/web/client/src/components/branch-detail/BranchInfoCards.tsx +16 -1
- package/src/web/client/src/components/branch-detail/SessionHistoryTable.tsx +7 -1
- package/src/web/client/src/components/branch-detail/ToolLauncher.tsx +11 -6
- package/src/web/client/src/lib/coding-agent-colors.ts +149 -0
- package/src/web/client/src/pages/BranchDetailPage.tsx +11 -11
- package/src/web/server/pty/manager.ts +139 -0
- package/src/web/server/routes/sessions.ts +6 -0
- package/src/web/server/services/branches.ts +11 -8
- package/src/web/server/services/worktrees.ts +2 -2
- package/src/worktree.ts +386 -114
- package/dist/cli/ui/components/App.d.ts +0 -25
- package/dist/cli/ui/components/App.d.ts.map +0 -1
- package/dist/cli/ui/components/App.js +0 -1006
- package/dist/cli/ui/components/App.js.map +0 -1
- package/dist/cli/ui/components/common/Confirm.d.ts +0 -13
- package/dist/cli/ui/components/common/Confirm.d.ts.map +0 -1
- package/dist/cli/ui/components/common/Confirm.js +0 -20
- package/dist/cli/ui/components/common/Confirm.js.map +0 -1
- package/dist/cli/ui/components/common/ErrorBoundary.d.ts +0 -23
- package/dist/cli/ui/components/common/ErrorBoundary.d.ts.map +0 -1
- package/dist/cli/ui/components/common/ErrorBoundary.js +0 -37
- package/dist/cli/ui/components/common/ErrorBoundary.js.map +0 -1
- package/dist/cli/ui/components/common/Input.d.ts +0 -19
- package/dist/cli/ui/components/common/Input.d.ts.map +0 -1
- package/dist/cli/ui/components/common/Input.js +0 -22
- package/dist/cli/ui/components/common/Input.js.map +0 -1
- package/dist/cli/ui/components/common/LoadingIndicator.d.ts +0 -19
- package/dist/cli/ui/components/common/LoadingIndicator.d.ts.map +0 -1
- package/dist/cli/ui/components/common/LoadingIndicator.js +0 -61
- package/dist/cli/ui/components/common/LoadingIndicator.js.map +0 -1
- package/dist/cli/ui/components/common/Select.d.ts +0 -38
- package/dist/cli/ui/components/common/Select.d.ts.map +0 -1
- package/dist/cli/ui/components/common/Select.js +0 -151
- package/dist/cli/ui/components/common/Select.js.map +0 -1
- package/dist/cli/ui/components/common/SpinnerIcon.d.ts +0 -20
- package/dist/cli/ui/components/common/SpinnerIcon.d.ts.map +0 -1
- package/dist/cli/ui/components/common/SpinnerIcon.js +0 -61
- package/dist/cli/ui/components/common/SpinnerIcon.js.map +0 -1
- package/dist/cli/ui/components/parts/Footer.d.ts +0 -15
- package/dist/cli/ui/components/parts/Footer.d.ts.map +0 -1
- package/dist/cli/ui/components/parts/Footer.js +0 -20
- package/dist/cli/ui/components/parts/Footer.js.map +0 -1
- package/dist/cli/ui/components/parts/Header.d.ts.map +0 -1
- package/dist/cli/ui/components/parts/Header.js +0 -24
- package/dist/cli/ui/components/parts/Header.js.map +0 -1
- package/dist/cli/ui/components/parts/MergeStatusList.d.ts +0 -13
- package/dist/cli/ui/components/parts/MergeStatusList.d.ts.map +0 -1
- package/dist/cli/ui/components/parts/MergeStatusList.js +0 -52
- package/dist/cli/ui/components/parts/MergeStatusList.js.map +0 -1
- package/dist/cli/ui/components/parts/ProgressBar.d.ts +0 -13
- package/dist/cli/ui/components/parts/ProgressBar.d.ts.map +0 -1
- package/dist/cli/ui/components/parts/ProgressBar.js +0 -53
- package/dist/cli/ui/components/parts/ProgressBar.js.map +0 -1
- package/dist/cli/ui/components/parts/ScrollableList.d.ts +0 -12
- package/dist/cli/ui/components/parts/ScrollableList.d.ts.map +0 -1
- package/dist/cli/ui/components/parts/ScrollableList.js +0 -11
- package/dist/cli/ui/components/parts/ScrollableList.js.map +0 -1
- package/dist/cli/ui/components/parts/Stats.d.ts +0 -10
- package/dist/cli/ui/components/parts/Stats.d.ts.map +0 -1
- package/dist/cli/ui/components/parts/Stats.js +0 -55
- package/dist/cli/ui/components/parts/Stats.js.map +0 -1
- package/dist/cli/ui/components/screens/BatchMergeProgressScreen.d.ts +0 -17
- package/dist/cli/ui/components/screens/BatchMergeProgressScreen.d.ts.map +0 -1
- package/dist/cli/ui/components/screens/BatchMergeProgressScreen.js +0 -42
- package/dist/cli/ui/components/screens/BatchMergeProgressScreen.js.map +0 -1
- package/dist/cli/ui/components/screens/BatchMergeResultScreen.d.ts +0 -17
- package/dist/cli/ui/components/screens/BatchMergeResultScreen.d.ts.map +0 -1
- package/dist/cli/ui/components/screens/BatchMergeResultScreen.js +0 -72
- package/dist/cli/ui/components/screens/BatchMergeResultScreen.js.map +0 -1
- package/dist/cli/ui/components/screens/BranchCreatorScreen.d.ts +0 -18
- package/dist/cli/ui/components/screens/BranchCreatorScreen.d.ts.map +0 -1
- package/dist/cli/ui/components/screens/BranchCreatorScreen.js +0 -151
- package/dist/cli/ui/components/screens/BranchCreatorScreen.js.map +0 -1
- package/dist/cli/ui/components/screens/BranchListScreen.d.ts +0 -60
- package/dist/cli/ui/components/screens/BranchListScreen.d.ts.map +0 -1
- package/dist/cli/ui/components/screens/BranchListScreen.js +0 -476
- package/dist/cli/ui/components/screens/BranchListScreen.js.map +0 -1
- package/dist/cli/ui/components/screens/BranchQuickStartScreen.d.ts +0 -30
- package/dist/cli/ui/components/screens/BranchQuickStartScreen.d.ts.map +0 -1
- package/dist/cli/ui/components/screens/BranchQuickStartScreen.js +0 -148
- package/dist/cli/ui/components/screens/BranchQuickStartScreen.js.map +0 -1
- package/dist/cli/ui/components/screens/CodingAgentSelectorScreen.d.ts +0 -27
- package/dist/cli/ui/components/screens/CodingAgentSelectorScreen.d.ts.map +0 -1
- package/dist/cli/ui/components/screens/CodingAgentSelectorScreen.js +0 -93
- package/dist/cli/ui/components/screens/CodingAgentSelectorScreen.js.map +0 -1
- package/dist/cli/ui/components/screens/EnvironmentProfileScreen.d.ts +0 -19
- package/dist/cli/ui/components/screens/EnvironmentProfileScreen.d.ts.map +0 -1
- package/dist/cli/ui/components/screens/EnvironmentProfileScreen.js +0 -577
- package/dist/cli/ui/components/screens/EnvironmentProfileScreen.js.map +0 -1
- package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.d.ts +0 -45
- package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.d.ts.map +0 -1
- package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.js +0 -95
- package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.js.map +0 -1
- package/dist/cli/ui/components/screens/LogDatePickerScreen.d.ts +0 -10
- package/dist/cli/ui/components/screens/LogDatePickerScreen.d.ts.map +0 -1
- package/dist/cli/ui/components/screens/LogDatePickerScreen.js +0 -44
- package/dist/cli/ui/components/screens/LogDatePickerScreen.js.map +0 -1
- package/dist/cli/ui/components/screens/LogDetailScreen.d.ts.map +0 -1
- package/dist/cli/ui/components/screens/LogDetailScreen.js +0 -34
- package/dist/cli/ui/components/screens/LogDetailScreen.js.map +0 -1
- package/dist/cli/ui/components/screens/LogListScreen.d.ts.map +0 -1
- package/dist/cli/ui/components/screens/LogListScreen.js +0 -107
- package/dist/cli/ui/components/screens/LogListScreen.js.map +0 -1
- package/dist/cli/ui/components/screens/ModelSelectorScreen.d.ts +0 -24
- package/dist/cli/ui/components/screens/ModelSelectorScreen.d.ts.map +0 -1
- package/dist/cli/ui/components/screens/ModelSelectorScreen.js +0 -197
- package/dist/cli/ui/components/screens/ModelSelectorScreen.js.map +0 -1
- package/dist/cli/ui/components/screens/PRCleanupScreen.d.ts +0 -29
- package/dist/cli/ui/components/screens/PRCleanupScreen.d.ts.map +0 -1
- package/dist/cli/ui/components/screens/PRCleanupScreen.js +0 -92
- package/dist/cli/ui/components/screens/PRCleanupScreen.js.map +0 -1
- package/dist/cli/ui/components/screens/SessionSelectorScreen.d.ts +0 -31
- package/dist/cli/ui/components/screens/SessionSelectorScreen.d.ts.map +0 -1
- package/dist/cli/ui/components/screens/SessionSelectorScreen.js +0 -67
- package/dist/cli/ui/components/screens/SessionSelectorScreen.js.map +0 -1
- package/dist/cli/ui/hooks/useAppInput.d.ts +0 -21
- package/dist/cli/ui/hooks/useAppInput.d.ts.map +0 -1
- package/dist/cli/ui/hooks/useAppInput.js +0 -138
- package/dist/cli/ui/hooks/useAppInput.js.map +0 -1
- package/dist/cli/ui/hooks/useBatchMerge.d.ts +0 -17
- package/dist/cli/ui/hooks/useBatchMerge.d.ts.map +0 -1
- package/dist/cli/ui/hooks/useBatchMerge.js +0 -77
- package/dist/cli/ui/hooks/useBatchMerge.js.map +0 -1
- package/dist/cli/ui/hooks/useGitData.d.ts +0 -21
- package/dist/cli/ui/hooks/useGitData.d.ts.map +0 -1
- package/dist/cli/ui/hooks/useGitData.js +0 -229
- package/dist/cli/ui/hooks/useGitData.js.map +0 -1
- package/dist/cli/ui/hooks/useProfiles.d.ts +0 -41
- package/dist/cli/ui/hooks/useProfiles.d.ts.map +0 -1
- package/dist/cli/ui/hooks/useProfiles.js +0 -136
- package/dist/cli/ui/hooks/useProfiles.js.map +0 -1
- package/dist/cli/ui/hooks/useScreenState.d.ts +0 -12
- package/dist/cli/ui/hooks/useScreenState.d.ts.map +0 -1
- package/dist/cli/ui/hooks/useScreenState.js +0 -30
- package/dist/cli/ui/hooks/useScreenState.js.map +0 -1
- package/dist/cli/ui/hooks/useTerminalSize.d.ts +0 -9
- package/dist/cli/ui/hooks/useTerminalSize.d.ts.map +0 -1
- package/dist/cli/ui/hooks/useTerminalSize.js +0 -24
- package/dist/cli/ui/hooks/useTerminalSize.js.map +0 -1
- package/dist/cli/ui/hooks/useToolStatus.d.ts +0 -30
- package/dist/cli/ui/hooks/useToolStatus.d.ts.map +0 -1
- package/dist/cli/ui/hooks/useToolStatus.js +0 -49
- package/dist/cli/ui/hooks/useToolStatus.js.map +0 -1
- package/dist/cli/ui/screens/BranchActionSelectorScreen.d.ts +0 -24
- package/dist/cli/ui/screens/BranchActionSelectorScreen.d.ts.map +0 -1
- package/dist/cli/ui/screens/BranchActionSelectorScreen.js +0 -65
- package/dist/cli/ui/screens/BranchActionSelectorScreen.js.map +0 -1
- package/dist/client/assets/index-LNPtOrn3.js +0 -78
- package/src/cli/ui/__tests__/SKIPPED_TESTS.md +0 -119
- package/src/cli/ui/__tests__/acceptance/branchList.acceptance.test.tsx.skip +0 -239
- package/src/cli/ui/__tests__/acceptance/navigation.acceptance.test.tsx +0 -225
- package/src/cli/ui/__tests__/acceptance/realtimeUpdate.acceptance.test.tsx.skip +0 -219
- package/src/cli/ui/__tests__/components/App.protected-branch.test.tsx +0 -212
- package/src/cli/ui/__tests__/components/App.shortcuts.test.tsx +0 -440
- package/src/cli/ui/__tests__/components/App.test.tsx +0 -365
- package/src/cli/ui/__tests__/components/ModelSelectorScreen.initial.test.tsx +0 -91
- package/src/cli/ui/__tests__/components/common/Confirm.test.tsx +0 -80
- package/src/cli/ui/__tests__/components/common/ErrorBoundary.test.tsx +0 -104
- package/src/cli/ui/__tests__/components/common/Input.test.tsx +0 -100
- package/src/cli/ui/__tests__/components/common/LoadingIndicator.test.tsx +0 -148
- package/src/cli/ui/__tests__/components/common/Select.memo.test.tsx +0 -255
- package/src/cli/ui/__tests__/components/common/Select.test.tsx +0 -335
- package/src/cli/ui/__tests__/components/parts/Footer.test.tsx +0 -65
- package/src/cli/ui/__tests__/components/parts/Header.test.tsx +0 -55
- package/src/cli/ui/__tests__/components/parts/ScrollableList.test.tsx +0 -69
- package/src/cli/ui/__tests__/components/parts/Stats.test.tsx +0 -148
- package/src/cli/ui/__tests__/components/screens/BranchCreatorScreen.test.tsx +0 -253
- package/src/cli/ui/__tests__/components/screens/BranchListScreen.test.tsx +0 -1070
- package/src/cli/ui/__tests__/components/screens/BranchQuickStartScreen.test.tsx +0 -142
- package/src/cli/ui/__tests__/components/screens/CodingAgentSelectorScreen.test.tsx +0 -174
- package/src/cli/ui/__tests__/components/screens/ExecutionModeSelectorScreen.test.tsx +0 -182
- package/src/cli/ui/__tests__/components/screens/LogDetailScreen.test.tsx +0 -57
- package/src/cli/ui/__tests__/components/screens/LogListScreen.test.tsx +0 -102
- package/src/cli/ui/__tests__/components/screens/PRCleanupScreen.test.tsx +0 -216
- package/src/cli/ui/__tests__/components/screens/SessionSelectorScreen.test.tsx +0 -147
- package/src/cli/ui/__tests__/hooks/useGitData.nonblocking.test.tsx +0 -206
- package/src/cli/ui/__tests__/hooks/useGitData.test.ts +0 -197
- package/src/cli/ui/__tests__/hooks/useGitData.test.ts.skip +0 -228
- package/src/cli/ui/__tests__/hooks/useScreenState.test.ts +0 -147
- package/src/cli/ui/__tests__/hooks/useTerminalSize.test.ts +0 -99
- package/src/cli/ui/__tests__/integration/branchList.test.tsx.skip +0 -253
- package/src/cli/ui/__tests__/integration/edgeCases.test.tsx +0 -436
- package/src/cli/ui/__tests__/integration/navigation.test.tsx +0 -514
- package/src/cli/ui/__tests__/integration/realtimeUpdate.test.tsx +0 -509
- package/src/cli/ui/__tests__/integration/realtimeUpdate.test.tsx.skip +0 -216
- package/src/cli/ui/__tests__/performance/branchList.performance.test.tsx +0 -193
- package/src/cli/ui/__tests__/performance/useMemoOptimization.test.tsx +0 -234
- package/src/cli/ui/components/App.tsx +0 -1478
- package/src/cli/ui/components/common/Confirm.tsx +0 -44
- package/src/cli/ui/components/common/ErrorBoundary.tsx +0 -60
- package/src/cli/ui/components/common/Input.tsx +0 -58
- package/src/cli/ui/components/common/LoadingIndicator.tsx +0 -98
- package/src/cli/ui/components/common/Select.tsx +0 -247
- package/src/cli/ui/components/common/SpinnerIcon.tsx +0 -86
- package/src/cli/ui/components/parts/Footer.tsx +0 -41
- package/src/cli/ui/components/parts/Header.test.tsx +0 -75
- package/src/cli/ui/components/parts/MergeStatusList.tsx +0 -75
- package/src/cli/ui/components/parts/ProgressBar.tsx +0 -73
- package/src/cli/ui/components/parts/Stats.tsx +0 -88
- package/src/cli/ui/components/screens/BatchMergeProgressScreen.tsx +0 -74
- package/src/cli/ui/components/screens/BatchMergeResultScreen.tsx +0 -108
- package/src/cli/ui/components/screens/BranchCreatorScreen.tsx +0 -242
- package/src/cli/ui/components/screens/BranchListScreen.tsx +0 -744
- package/src/cli/ui/components/screens/BranchQuickStartScreen.tsx +0 -244
- package/src/cli/ui/components/screens/CodingAgentSelectorScreen.tsx +0 -159
- package/src/cli/ui/components/screens/EnvironmentProfileScreen.tsx +0 -928
- package/src/cli/ui/components/screens/ExecutionModeSelectorScreen.tsx +0 -176
- package/src/cli/ui/components/screens/LogDatePickerScreen.tsx +0 -83
- package/src/cli/ui/components/screens/LogDetailScreen.tsx +0 -67
- package/src/cli/ui/components/screens/LogListScreen.tsx +0 -192
- package/src/cli/ui/components/screens/ModelSelectorScreen.tsx +0 -320
- package/src/cli/ui/components/screens/PRCleanupScreen.tsx +0 -171
- package/src/cli/ui/components/screens/SessionSelectorScreen.tsx +0 -135
- package/src/cli/ui/hooks/useAppInput.ts +0 -172
- package/src/cli/ui/hooks/useBatchMerge.ts +0 -96
- package/src/cli/ui/hooks/useGitData.ts +0 -347
- package/src/cli/ui/hooks/useProfiles.ts +0 -211
- package/src/cli/ui/hooks/useScreenState.ts +0 -44
- package/src/cli/ui/hooks/useTerminalSize.ts +0 -33
- package/src/cli/ui/hooks/useToolStatus.ts +0 -68
- package/src/cli/ui/screens/BranchActionSelectorScreen.tsx +0 -111
- package/src/cli/ui/screens/__tests__/BranchActionSelectorScreen.test.tsx +0 -264
|
@@ -13,8 +13,10 @@ import type { OpenCodeSessionInfo, SessionSearchOptions } from "../types.js";
|
|
|
13
13
|
import {
|
|
14
14
|
collectFilesIterative,
|
|
15
15
|
matchesCwd,
|
|
16
|
+
resolveBranchFromCwd,
|
|
16
17
|
readSessionInfoFromFile,
|
|
17
18
|
} from "../common.js";
|
|
19
|
+
import { listAllWorktrees } from "../../../worktree.js";
|
|
18
20
|
|
|
19
21
|
/**
|
|
20
22
|
* Returns the OpenCode session directory
|
|
@@ -73,15 +75,50 @@ export async function findLatestOpenCodeSession(
|
|
|
73
75
|
return b.mtime - a.mtime;
|
|
74
76
|
});
|
|
75
77
|
|
|
78
|
+
const branchFilter =
|
|
79
|
+
typeof options.branch === "string" && options.branch.trim().length > 0
|
|
80
|
+
? options.branch.trim()
|
|
81
|
+
: null;
|
|
82
|
+
const shouldCheckBranch = Boolean(branchFilter);
|
|
83
|
+
const shouldCheckCwd = Boolean(options.cwd) && !shouldCheckBranch;
|
|
84
|
+
|
|
85
|
+
let worktrees: { path: string; branch: string }[] = [];
|
|
86
|
+
if (shouldCheckBranch) {
|
|
87
|
+
if (Array.isArray(options.worktrees) && options.worktrees.length > 0) {
|
|
88
|
+
worktrees = options.worktrees
|
|
89
|
+
.filter((entry) => entry?.path && entry?.branch)
|
|
90
|
+
.map((entry) => ({ path: entry.path, branch: entry.branch }));
|
|
91
|
+
} else {
|
|
92
|
+
try {
|
|
93
|
+
const allWorktrees = await listAllWorktrees();
|
|
94
|
+
worktrees = allWorktrees
|
|
95
|
+
.filter((entry) => entry?.path && entry?.branch)
|
|
96
|
+
.map((entry) => ({ path: entry.path, branch: entry.branch }));
|
|
97
|
+
} catch {
|
|
98
|
+
worktrees = [];
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (!worktrees.length) return null;
|
|
102
|
+
}
|
|
103
|
+
|
|
76
104
|
for (const file of pool) {
|
|
77
105
|
const info = await readSessionInfoFromFile(file.fullPath);
|
|
78
106
|
if (!info.id) continue;
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
107
|
+
const sessionCwd = info.cwd ?? null;
|
|
108
|
+
|
|
109
|
+
if (shouldCheckBranch) {
|
|
110
|
+
const resolvedBranch = resolveBranchFromCwd(sessionCwd, worktrees);
|
|
111
|
+
if (resolvedBranch !== branchFilter) {
|
|
112
|
+
continue;
|
|
82
113
|
}
|
|
83
|
-
continue;
|
|
84
114
|
}
|
|
115
|
+
|
|
116
|
+
if (shouldCheckCwd && options.cwd) {
|
|
117
|
+
if (!matchesCwd(sessionCwd, options.cwd)) {
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
85
122
|
return { id: info.id, mtime: file.mtime };
|
|
86
123
|
}
|
|
87
124
|
|
|
@@ -98,7 +135,11 @@ export async function findLatestOpenCodeSessionId(
|
|
|
98
135
|
cwd: string,
|
|
99
136
|
options: SessionSearchOptions = {},
|
|
100
137
|
): Promise<string | null> {
|
|
101
|
-
const searchOptions: SessionSearchOptions = {
|
|
138
|
+
const searchOptions: SessionSearchOptions = {
|
|
139
|
+
cwd: options.cwd ?? cwd,
|
|
140
|
+
branch: options.branch ?? null,
|
|
141
|
+
worktrees: options.worktrees ?? null,
|
|
142
|
+
};
|
|
102
143
|
if (options.since !== undefined) searchOptions.since = options.since;
|
|
103
144
|
if (options.until !== undefined) searchOptions.until = options.until;
|
|
104
145
|
if (options.preferClosestTo !== undefined)
|
|
@@ -16,6 +16,10 @@ export interface SessionSearchOptions {
|
|
|
16
16
|
windowMs?: number;
|
|
17
17
|
/** Working directory filter */
|
|
18
18
|
cwd?: string | null;
|
|
19
|
+
/** Branch name filter (resolved from session cwd via worktree paths) */
|
|
20
|
+
branch?: string | null;
|
|
21
|
+
/** Optional worktree list to avoid shelling out for branch mapping */
|
|
22
|
+
worktrees?: { path: string; branch: string }[] | null;
|
|
19
23
|
}
|
|
20
24
|
|
|
21
25
|
/**
|
package/src/utils/terminal.ts
CHANGED
|
@@ -214,6 +214,30 @@ export function resetTerminalModes(
|
|
|
214
214
|
}
|
|
215
215
|
}
|
|
216
216
|
|
|
217
|
+
export function writeTerminalLine(
|
|
218
|
+
message: string,
|
|
219
|
+
stream: "stdout" | "stderr" = "stdout",
|
|
220
|
+
): void {
|
|
221
|
+
const terminal = getTerminalStreams();
|
|
222
|
+
const target = stream === "stderr" ? terminal.stderr : terminal.stdout;
|
|
223
|
+
const payload = message.endsWith("\n") ? message : `${message}\n`;
|
|
224
|
+
|
|
225
|
+
if (target && typeof target.write === "function") {
|
|
226
|
+
try {
|
|
227
|
+
target.write(payload);
|
|
228
|
+
return;
|
|
229
|
+
} catch {
|
|
230
|
+
// Ignore write errors and fall back to console.
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
if (stream === "stderr") {
|
|
235
|
+
console.error(message);
|
|
236
|
+
} else {
|
|
237
|
+
console.log(message);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
217
241
|
/**
|
|
218
242
|
* Creates stdio settings for launching a child process.
|
|
219
243
|
*
|
package/src/utils.test.ts
CHANGED
package/src/utils.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { fileURLToPath } from "node:url";
|
|
3
|
-
import {
|
|
4
|
-
import { existsSync } from "fs";
|
|
3
|
+
import { readFile } from "fs/promises";
|
|
5
4
|
export function getCurrentDirname(): string {
|
|
6
5
|
return path.dirname(fileURLToPath(import.meta.url));
|
|
7
6
|
}
|
|
@@ -16,17 +15,51 @@ export class AppError extends Error {
|
|
|
16
15
|
}
|
|
17
16
|
}
|
|
18
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Global cleanup callback for terminal restoration.
|
|
20
|
+
* This is called before exit to restore terminal state.
|
|
21
|
+
*/
|
|
22
|
+
let cleanupCallback: (() => void) | null = null;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Registers a cleanup callback to be called on exit.
|
|
26
|
+
* Used for terminal state restoration.
|
|
27
|
+
*/
|
|
28
|
+
export function registerExitCleanup(callback: () => void): void {
|
|
29
|
+
cleanupCallback = callback;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Clears the registered cleanup callback.
|
|
34
|
+
*/
|
|
35
|
+
export function clearExitCleanup(): void {
|
|
36
|
+
cleanupCallback = null;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Performs cleanup and exits the process.
|
|
41
|
+
* Ensures terminal is restored before exiting.
|
|
42
|
+
*/
|
|
43
|
+
function performCleanupAndExit(exitCode: number): void {
|
|
44
|
+
try {
|
|
45
|
+
cleanupCallback?.();
|
|
46
|
+
} catch {
|
|
47
|
+
// Ignore cleanup errors to ensure exit completes
|
|
48
|
+
}
|
|
49
|
+
process.exit(exitCode);
|
|
50
|
+
}
|
|
51
|
+
|
|
19
52
|
export function setupExitHandlers(): void {
|
|
20
53
|
// Handle Ctrl+C gracefully
|
|
21
54
|
process.on("SIGINT", () => {
|
|
22
55
|
console.log("\n\n👋 Goodbye!");
|
|
23
|
-
|
|
56
|
+
performCleanupAndExit(0);
|
|
24
57
|
});
|
|
25
58
|
|
|
26
59
|
// Handle other termination signals
|
|
27
60
|
process.on("SIGTERM", () => {
|
|
28
61
|
console.log("\n\n👋 Goodbye!");
|
|
29
|
-
|
|
62
|
+
performCleanupAndExit(0);
|
|
30
63
|
});
|
|
31
64
|
}
|
|
32
65
|
|
|
@@ -21,6 +21,7 @@ import { useStartSession } from "../hooks/useSessions";
|
|
|
21
21
|
import { useCreateWorktree } from "../hooks/useWorktrees";
|
|
22
22
|
import { useSyncBranch } from "../hooks/useBranches";
|
|
23
23
|
import { ApiError } from "../lib/api";
|
|
24
|
+
import { getAgentTailwindClass } from "@/lib/coding-agent-colors";
|
|
24
25
|
|
|
25
26
|
const BUILTIN_AGENT_SUMMARIES: Record<string, AgentSummary> = {
|
|
26
27
|
"claude-code": {
|
|
@@ -166,7 +167,7 @@ export function CodingAgentLaunchModal({
|
|
|
166
167
|
branch.name.replace(/^origin\//, ""),
|
|
167
168
|
);
|
|
168
169
|
const divergenceInfo = branch.divergence ?? null;
|
|
169
|
-
const
|
|
170
|
+
const hasConflictingDivergence = Boolean(
|
|
170
171
|
divergenceInfo && divergenceInfo.ahead > 0 && divergenceInfo.behind > 0,
|
|
171
172
|
);
|
|
172
173
|
const needsRemoteSync = Boolean(
|
|
@@ -174,7 +175,7 @@ export function CodingAgentLaunchModal({
|
|
|
174
175
|
divergenceInfo &&
|
|
175
176
|
divergenceInfo.behind > 0 &&
|
|
176
177
|
divergenceInfo.ahead === 0 &&
|
|
177
|
-
!
|
|
178
|
+
!hasConflictingDivergence,
|
|
178
179
|
);
|
|
179
180
|
|
|
180
181
|
useEffect(() => {
|
|
@@ -270,15 +271,6 @@ export function CodingAgentLaunchModal({
|
|
|
270
271
|
});
|
|
271
272
|
return;
|
|
272
273
|
}
|
|
273
|
-
if (hasBlockingDivergence) {
|
|
274
|
-
setBanner({
|
|
275
|
-
type: "error",
|
|
276
|
-
message:
|
|
277
|
-
"Both remote and local have diverged. Resolve differences before launching.",
|
|
278
|
-
});
|
|
279
|
-
return;
|
|
280
|
-
}
|
|
281
|
-
|
|
282
274
|
if (
|
|
283
275
|
skipPermissions &&
|
|
284
276
|
!window.confirm("Skip permission checks? This is risky.")
|
|
@@ -408,11 +400,11 @@ export function CodingAgentLaunchModal({
|
|
|
408
400
|
</Alert>
|
|
409
401
|
)}
|
|
410
402
|
|
|
411
|
-
{
|
|
403
|
+
{hasConflictingDivergence && (
|
|
412
404
|
<Alert variant="warning">
|
|
413
405
|
<AlertDescription>
|
|
414
|
-
Both remote and local have unresolved differences.
|
|
415
|
-
|
|
406
|
+
Both remote and local have unresolved differences. You can
|
|
407
|
+
launch, but resolving differences is recommended.
|
|
416
408
|
</AlertDescription>
|
|
417
409
|
</Alert>
|
|
418
410
|
)}
|
|
@@ -430,7 +422,11 @@ export function CodingAgentLaunchModal({
|
|
|
430
422
|
</SelectTrigger>
|
|
431
423
|
<SelectContent>
|
|
432
424
|
{availableAgents.map((agent) => (
|
|
433
|
-
<SelectItem
|
|
425
|
+
<SelectItem
|
|
426
|
+
key={agent.id}
|
|
427
|
+
value={agent.id}
|
|
428
|
+
className={getAgentTailwindClass(agent.id)}
|
|
429
|
+
>
|
|
434
430
|
{agent.label}
|
|
435
431
|
</SelectItem>
|
|
436
432
|
))}
|
|
@@ -479,12 +475,7 @@ export function CodingAgentLaunchModal({
|
|
|
479
475
|
<div className="flex flex-wrap gap-2">
|
|
480
476
|
<Button
|
|
481
477
|
onClick={handleStartSession}
|
|
482
|
-
disabled={
|
|
483
|
-
isStartingSession ||
|
|
484
|
-
!selectedAgent ||
|
|
485
|
-
hasBlockingDivergence ||
|
|
486
|
-
needsRemoteSync
|
|
487
|
-
}
|
|
478
|
+
disabled={isStartingSession || !selectedAgent || needsRemoteSync}
|
|
488
479
|
>
|
|
489
480
|
{isStartingSession ? "Launching..." : "Launch coding agent"}
|
|
490
481
|
</Button>
|
|
@@ -2,6 +2,10 @@ import React from "react";
|
|
|
2
2
|
import { Card, CardHeader, CardContent } from "@/components/ui/card";
|
|
3
3
|
import { Badge } from "@/components/ui/badge";
|
|
4
4
|
import type { Branch, LastToolUsage } from "../../../../../types/api.js";
|
|
5
|
+
import {
|
|
6
|
+
getAgentTailwindClass,
|
|
7
|
+
getAgentBgTailwindClass,
|
|
8
|
+
} from "@/lib/coding-agent-colors";
|
|
5
9
|
|
|
6
10
|
interface BranchInfoCardsProps {
|
|
7
11
|
branch: Branch;
|
|
@@ -158,7 +162,10 @@ export function BranchInfoCards({
|
|
|
158
162
|
</CardHeader>
|
|
159
163
|
<CardContent>
|
|
160
164
|
<div className="flex flex-wrap items-center gap-2 text-sm">
|
|
161
|
-
<Badge
|
|
165
|
+
<Badge
|
|
166
|
+
variant="outline"
|
|
167
|
+
className={`${getAgentTailwindClass(latestToolUsage.toolId)} ${getAgentBgTailwindClass(latestToolUsage.toolId)}`}
|
|
168
|
+
>
|
|
162
169
|
{renderToolUsage(latestToolUsage)}
|
|
163
170
|
</Badge>
|
|
164
171
|
<span className="text-muted-foreground">
|
|
@@ -169,6 +176,14 @@ export function BranchInfoCards({
|
|
|
169
176
|
@ {latestToolUsage.worktreePath}
|
|
170
177
|
</span>
|
|
171
178
|
)}
|
|
179
|
+
{latestToolUsage.sessionId && (
|
|
180
|
+
<span className="text-xs text-muted-foreground">
|
|
181
|
+
Session ID:{" "}
|
|
182
|
+
<code className="rounded bg-muted px-1.5 py-0.5 font-mono">
|
|
183
|
+
{latestToolUsage.sessionId}
|
|
184
|
+
</code>
|
|
185
|
+
</span>
|
|
186
|
+
)}
|
|
172
187
|
</div>
|
|
173
188
|
</CardContent>
|
|
174
189
|
</Card>
|
|
@@ -10,6 +10,10 @@ import {
|
|
|
10
10
|
TableHead,
|
|
11
11
|
TableCell,
|
|
12
12
|
} from "@/components/ui/table";
|
|
13
|
+
import {
|
|
14
|
+
getAgentTailwindClass,
|
|
15
|
+
normalizeAgentToToolId,
|
|
16
|
+
} from "@/lib/coding-agent-colors";
|
|
13
17
|
|
|
14
18
|
interface SessionInfo {
|
|
15
19
|
sessionId: string;
|
|
@@ -131,7 +135,9 @@ export function SessionHistoryTable({
|
|
|
131
135
|
{SESSION_STATUS_LABEL[session.status]}
|
|
132
136
|
</Badge>
|
|
133
137
|
</TableCell>
|
|
134
|
-
<TableCell
|
|
138
|
+
<TableCell
|
|
139
|
+
className={`font-medium ${getAgentTailwindClass(normalizeAgentToToolId(session.agentType))}`}
|
|
140
|
+
>
|
|
135
141
|
{agentLabel(session.agentType, session.agentName)}
|
|
136
142
|
</TableCell>
|
|
137
143
|
<TableCell>
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
SelectValue,
|
|
14
14
|
} from "@/components/ui/select";
|
|
15
15
|
import { cn } from "@/lib/utils";
|
|
16
|
+
import { getAgentTailwindClass } from "@/lib/coding-agent-colors";
|
|
16
17
|
import type { ApiCodingAgent, Branch } from "../../../../../types/api.js";
|
|
17
18
|
|
|
18
19
|
type ToolMode = "normal" | "continue" | "resume";
|
|
@@ -45,7 +46,7 @@ interface ToolLauncherProps {
|
|
|
45
46
|
isStartingSession: boolean;
|
|
46
47
|
isSyncingBranch: boolean;
|
|
47
48
|
needsRemoteSync: boolean;
|
|
48
|
-
|
|
49
|
+
hasConflictingDivergence: boolean;
|
|
49
50
|
onToolChange: (toolId: string) => void;
|
|
50
51
|
onModeChange: (mode: ToolMode) => void;
|
|
51
52
|
onSkipPermissionsChange: (skip: boolean) => void;
|
|
@@ -88,7 +89,7 @@ export function ToolLauncher({
|
|
|
88
89
|
isStartingSession,
|
|
89
90
|
isSyncingBranch,
|
|
90
91
|
needsRemoteSync,
|
|
91
|
-
|
|
92
|
+
hasConflictingDivergence,
|
|
92
93
|
onToolChange,
|
|
93
94
|
onModeChange,
|
|
94
95
|
onSkipPermissionsChange,
|
|
@@ -170,7 +171,11 @@ export function ToolLauncher({
|
|
|
170
171
|
</SelectTrigger>
|
|
171
172
|
<SelectContent>
|
|
172
173
|
{availableTools.map((tool) => (
|
|
173
|
-
<SelectItem
|
|
174
|
+
<SelectItem
|
|
175
|
+
key={tool.id}
|
|
176
|
+
value={tool.id}
|
|
177
|
+
className={getAgentTailwindClass(tool.id)}
|
|
178
|
+
>
|
|
174
179
|
{tool.label}
|
|
175
180
|
</SelectItem>
|
|
176
181
|
))}
|
|
@@ -243,11 +248,12 @@ export function ToolLauncher({
|
|
|
243
248
|
</Alert>
|
|
244
249
|
)}
|
|
245
250
|
|
|
246
|
-
{
|
|
251
|
+
{hasConflictingDivergence && (
|
|
247
252
|
<Alert variant="warning" data-testid="divergence-warning">
|
|
248
253
|
<AlertDescription>
|
|
249
254
|
<p>
|
|
250
|
-
|
|
255
|
+
リモートとローカルの両方に未解決の差分があります。起動は可能ですが、
|
|
256
|
+
衝突を避けるために差分の解消を推奨します。
|
|
251
257
|
</p>
|
|
252
258
|
<ul className="mt-2 list-inside list-disc text-xs text-muted-foreground">
|
|
253
259
|
<li>
|
|
@@ -266,7 +272,6 @@ export function ToolLauncher({
|
|
|
266
272
|
disabled={
|
|
267
273
|
isStartingSession ||
|
|
268
274
|
!selectedTool ||
|
|
269
|
-
hasBlockingDivergence ||
|
|
270
275
|
needsRemoteSync ||
|
|
271
276
|
isSyncingBranch
|
|
272
277
|
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coding Agent Color Definitions for Web UI
|
|
3
|
+
*
|
|
4
|
+
* This module provides consistent color definitions for coding agents
|
|
5
|
+
* in the Web UI (React/Tailwind) (SPEC-3b0ed29b FR-024~FR-027).
|
|
6
|
+
*
|
|
7
|
+
* Note: This mirrors the CLI color utility at src/utils/coding-agent-colors.ts
|
|
8
|
+
* Both files should be kept in sync.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Tool ID constants for coding agents
|
|
13
|
+
*/
|
|
14
|
+
export const CODING_AGENT_TOOL_IDS = {
|
|
15
|
+
CLAUDE_CODE: "claude-code",
|
|
16
|
+
CODEX_CLI: "codex-cli",
|
|
17
|
+
GEMINI_CLI: "gemini-cli",
|
|
18
|
+
OPENCODE: "opencode",
|
|
19
|
+
} as const;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Color definitions for coding agents
|
|
23
|
+
*/
|
|
24
|
+
export const CODING_AGENT_COLORS = {
|
|
25
|
+
[CODING_AGENT_TOOL_IDS.CLAUDE_CODE]: {
|
|
26
|
+
hex: "#f6e05e",
|
|
27
|
+
tailwind: "text-yellow-400",
|
|
28
|
+
bgTailwind: "bg-yellow-400/20",
|
|
29
|
+
borderTailwind: "border-yellow-400",
|
|
30
|
+
},
|
|
31
|
+
[CODING_AGENT_TOOL_IDS.CODEX_CLI]: {
|
|
32
|
+
hex: "#4fd1c5",
|
|
33
|
+
tailwind: "text-cyan-400",
|
|
34
|
+
bgTailwind: "bg-cyan-400/20",
|
|
35
|
+
borderTailwind: "border-cyan-400",
|
|
36
|
+
},
|
|
37
|
+
[CODING_AGENT_TOOL_IDS.GEMINI_CLI]: {
|
|
38
|
+
hex: "#d53f8c",
|
|
39
|
+
tailwind: "text-pink-500",
|
|
40
|
+
bgTailwind: "bg-pink-500/20",
|
|
41
|
+
borderTailwind: "border-pink-500",
|
|
42
|
+
},
|
|
43
|
+
[CODING_AGENT_TOOL_IDS.OPENCODE]: {
|
|
44
|
+
hex: "#48bb78",
|
|
45
|
+
tailwind: "text-green-400",
|
|
46
|
+
bgTailwind: "bg-green-400/20",
|
|
47
|
+
borderTailwind: "border-green-400",
|
|
48
|
+
},
|
|
49
|
+
} as const;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Default color for unknown/custom agents
|
|
53
|
+
*/
|
|
54
|
+
export const DEFAULT_AGENT_COLOR = {
|
|
55
|
+
hex: "#a0aec0",
|
|
56
|
+
tailwind: "text-gray-400",
|
|
57
|
+
bgTailwind: "bg-gray-400/20",
|
|
58
|
+
borderTailwind: "border-gray-400",
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Get Tailwind CSS text color class for a coding agent
|
|
63
|
+
*
|
|
64
|
+
* @param toolId - The tool ID (e.g., "claude-code", "codex-cli")
|
|
65
|
+
* @returns Tailwind CSS class name
|
|
66
|
+
*/
|
|
67
|
+
export function getAgentTailwindClass(toolId?: string | null): string {
|
|
68
|
+
if (!toolId) {
|
|
69
|
+
return DEFAULT_AGENT_COLOR.tailwind;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const color = CODING_AGENT_COLORS[toolId as keyof typeof CODING_AGENT_COLORS];
|
|
73
|
+
return color?.tailwind ?? DEFAULT_AGENT_COLOR.tailwind;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Get Tailwind CSS background color class for a coding agent
|
|
78
|
+
*
|
|
79
|
+
* @param toolId - The tool ID (e.g., "claude-code", "codex-cli")
|
|
80
|
+
* @returns Tailwind CSS class name for background
|
|
81
|
+
*/
|
|
82
|
+
export function getAgentBgTailwindClass(toolId?: string | null): string {
|
|
83
|
+
if (!toolId) {
|
|
84
|
+
return DEFAULT_AGENT_COLOR.bgTailwind;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const color = CODING_AGENT_COLORS[toolId as keyof typeof CODING_AGENT_COLORS];
|
|
88
|
+
return color?.bgTailwind ?? DEFAULT_AGENT_COLOR.bgTailwind;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Get hex color for a coding agent
|
|
93
|
+
*
|
|
94
|
+
* @param toolId - The tool ID (e.g., "claude-code", "codex-cli")
|
|
95
|
+
* @returns Hex color string
|
|
96
|
+
*/
|
|
97
|
+
export function getAgentHexColor(toolId?: string | null): string {
|
|
98
|
+
if (!toolId) {
|
|
99
|
+
return DEFAULT_AGENT_COLOR.hex;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const color = CODING_AGENT_COLORS[toolId as keyof typeof CODING_AGENT_COLORS];
|
|
103
|
+
return color?.hex ?? DEFAULT_AGENT_COLOR.hex;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Normalize agent type string to tool ID
|
|
108
|
+
* Handles various naming conventions used across the codebase
|
|
109
|
+
*
|
|
110
|
+
* @param agentType - Agent type string (e.g., "claude", "codex-cli", "Claude Code")
|
|
111
|
+
* @returns Normalized tool ID
|
|
112
|
+
*/
|
|
113
|
+
export function normalizeAgentToToolId(
|
|
114
|
+
agentType?: string | null,
|
|
115
|
+
): string | null {
|
|
116
|
+
if (!agentType) return null;
|
|
117
|
+
|
|
118
|
+
const normalized = agentType.toLowerCase().trim();
|
|
119
|
+
|
|
120
|
+
// Direct matches
|
|
121
|
+
if (normalized === "claude-code" || normalized === "claude") {
|
|
122
|
+
return CODING_AGENT_TOOL_IDS.CLAUDE_CODE;
|
|
123
|
+
}
|
|
124
|
+
if (normalized === "codex-cli" || normalized === "codex") {
|
|
125
|
+
return CODING_AGENT_TOOL_IDS.CODEX_CLI;
|
|
126
|
+
}
|
|
127
|
+
if (normalized === "gemini-cli" || normalized === "gemini") {
|
|
128
|
+
return CODING_AGENT_TOOL_IDS.GEMINI_CLI;
|
|
129
|
+
}
|
|
130
|
+
if (normalized === "opencode" || normalized === "open-code") {
|
|
131
|
+
return CODING_AGENT_TOOL_IDS.OPENCODE;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Label-based matches
|
|
135
|
+
if (normalized.includes("claude")) {
|
|
136
|
+
return CODING_AGENT_TOOL_IDS.CLAUDE_CODE;
|
|
137
|
+
}
|
|
138
|
+
if (normalized.includes("codex")) {
|
|
139
|
+
return CODING_AGENT_TOOL_IDS.CODEX_CLI;
|
|
140
|
+
}
|
|
141
|
+
if (normalized.includes("gemini")) {
|
|
142
|
+
return CODING_AGENT_TOOL_IDS.GEMINI_CLI;
|
|
143
|
+
}
|
|
144
|
+
if (normalized.includes("opencode")) {
|
|
145
|
+
return CODING_AGENT_TOOL_IDS.OPENCODE;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return agentType; // Return as-is for custom agents
|
|
149
|
+
}
|
|
@@ -210,7 +210,7 @@ export function BranchDetailPage() {
|
|
|
210
210
|
// Computed values
|
|
211
211
|
const canStartSession = Boolean(branch.worktreePath);
|
|
212
212
|
const divergenceInfo = branch.divergence ?? null;
|
|
213
|
-
const
|
|
213
|
+
const hasConflictingDivergence = Boolean(
|
|
214
214
|
divergenceInfo && divergenceInfo.ahead > 0 && divergenceInfo.behind > 0,
|
|
215
215
|
);
|
|
216
216
|
const needsRemoteSync = Boolean(
|
|
@@ -218,7 +218,7 @@ export function BranchDetailPage() {
|
|
|
218
218
|
divergenceInfo &&
|
|
219
219
|
divergenceInfo.behind > 0 &&
|
|
220
220
|
divergenceInfo.ahead === 0 &&
|
|
221
|
-
!
|
|
221
|
+
!hasConflictingDivergence,
|
|
222
222
|
);
|
|
223
223
|
const isSyncingBranch = syncBranch.isPending;
|
|
224
224
|
|
|
@@ -270,14 +270,6 @@ export function BranchDetailPage() {
|
|
|
270
270
|
return;
|
|
271
271
|
}
|
|
272
272
|
|
|
273
|
-
if (hasBlockingDivergence) {
|
|
274
|
-
setBanner({
|
|
275
|
-
type: "error",
|
|
276
|
-
message: "差分を解消してから起動してください。",
|
|
277
|
-
});
|
|
278
|
-
return;
|
|
279
|
-
}
|
|
280
|
-
|
|
281
273
|
if (
|
|
282
274
|
skipPermissions &&
|
|
283
275
|
!window.confirm("権限チェックをスキップして起動します。続行しますか?")
|
|
@@ -293,6 +285,13 @@ export function BranchDetailPage() {
|
|
|
293
285
|
: selectedTool.target === "custom"
|
|
294
286
|
? "custom"
|
|
295
287
|
: "claude-code";
|
|
288
|
+
const resumeSessionId =
|
|
289
|
+
selectedMode === "normal"
|
|
290
|
+
? null
|
|
291
|
+
: latestToolUsage?.sessionId &&
|
|
292
|
+
latestToolUsage.toolId === selectedToolId
|
|
293
|
+
? latestToolUsage.sessionId
|
|
294
|
+
: null;
|
|
296
295
|
const extraArgs = extraArgsText
|
|
297
296
|
.split(/\s+/)
|
|
298
297
|
.map((c) => c.trim())
|
|
@@ -309,6 +308,7 @@ export function BranchDetailPage() {
|
|
|
309
308
|
...(selectedTool.target === "codex"
|
|
310
309
|
? { bypassApprovals: skipPermissions }
|
|
311
310
|
: {}),
|
|
311
|
+
...(resumeSessionId ? { resumeSessionId } : {}),
|
|
312
312
|
...(extraArgs.length ? { extraArgs } : {}),
|
|
313
313
|
} as const;
|
|
314
314
|
|
|
@@ -478,7 +478,7 @@ export function BranchDetailPage() {
|
|
|
478
478
|
isStartingSession={isStartingSession}
|
|
479
479
|
isSyncingBranch={isSyncingBranch}
|
|
480
480
|
needsRemoteSync={needsRemoteSync}
|
|
481
|
-
|
|
481
|
+
hasConflictingDivergence={hasConflictingDivergence}
|
|
482
482
|
onToolChange={setSelectedToolId}
|
|
483
483
|
onModeChange={setSelectedMode}
|
|
484
484
|
onSkipPermissionsChange={setSkipPermissions}
|