@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.
- package/README.ja.md +4 -4
- package/README.md +4 -4
- package/dist/claude.d.ts +1 -0
- package/dist/claude.d.ts.map +1 -1
- package/dist/claude.js +52 -49
- 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 +1197 -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 +139 -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 +44 -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 +215 -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 +462 -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 +114 -0
- package/dist/cli/ui/core/theme.d.ts.map +1 -0
- package/dist/cli/ui/core/theme.js +170 -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/{components/screens → screens/solid}/BranchListScreen.d.ts +8 -22
- package/dist/cli/ui/screens/solid/BranchListScreen.d.ts.map +1 -0
- package/dist/cli/ui/screens/solid/BranchListScreen.js +756 -0
- package/dist/cli/ui/screens/solid/BranchListScreen.js.map +1 -0
- package/dist/cli/ui/screens/solid/ConfirmScreen.d.ts +10 -0
- package/dist/cli/ui/screens/solid/ConfirmScreen.d.ts.map +1 -0
- package/dist/cli/ui/screens/solid/ConfirmScreen.js +37 -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 +91 -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} +4 -4
- package/dist/cli/ui/screens/solid/LogScreen.d.ts.map +1 -0
- package/dist/cli/ui/screens/solid/LogScreen.js +95 -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 +112 -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 +90 -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 +16 -1
- package/dist/cli/ui/types.d.ts.map +1 -1
- package/dist/cli/ui/utils/branchFormatter.d.ts.map +1 -1
- package/dist/cli/ui/utils/branchFormatter.js +7 -210
- package/dist/cli/ui/utils/branchFormatter.js.map +1 -1
- package/dist/cli/ui/utils/continueSession.d.ts +4 -0
- package/dist/cli/ui/utils/continueSession.d.ts.map +1 -1
- package/dist/cli/ui/utils/continueSession.js +30 -0
- package/dist/cli/ui/utils/continueSession.js.map +1 -1
- 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 +1 -0
- package/dist/codex.d.ts.map +1 -1
- package/dist/codex.js +86 -45
- package/dist/codex.js.map +1 -1
- package/dist/config/builtin-coding-agents.d.ts +4 -0
- package/dist/config/builtin-coding-agents.d.ts.map +1 -1
- package/dist/config/builtin-coding-agents.js +18 -3
- 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 +2 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/tools.d.ts.map +1 -1
- package/dist/config/tools.js +11 -0
- package/dist/config/tools.js.map +1 -1
- package/dist/gemini.d.ts +1 -0
- package/dist/gemini.d.ts.map +1 -1
- package/dist/gemini.js +42 -37
- 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 +122 -102
- package/dist/index.js.map +1 -1
- package/dist/launcher.d.ts.map +1 -1
- package/dist/launcher.js +18 -3
- package/dist/launcher.js.map +1 -1
- package/dist/logging/logger.d.ts.map +1 -1
- package/dist/logging/logger.js +26 -9
- package/dist/logging/logger.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 +52034 -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 +0 -5
- 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.d.ts.map +1 -1
- package/dist/utils/command.js +10 -1
- package/dist/utils/command.js.map +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/index.d.ts +5 -3
- package/dist/utils/session/index.d.ts.map +1 -1
- package/dist/utils/session/index.js +5 -2
- package/dist/utils/session/index.js.map +1 -1
- package/dist/utils/session/parsers/codex.d.ts.map +1 -1
- package/dist/utils/session/parsers/codex.js +8 -1
- package/dist/utils/session/parsers/codex.js.map +1 -1
- package/dist/utils/session/parsers/index.d.ts +1 -0
- package/dist/utils/session/parsers/index.d.ts.map +1 -1
- package/dist/utils/session/parsers/index.js +2 -0
- package/dist/utils/session/parsers/index.js.map +1 -1
- package/dist/utils/session/parsers/opencode.d.ts +23 -0
- package/dist/utils/session/parsers/opencode.d.ts.map +1 -0
- package/dist/utils/session/parsers/opencode.js +89 -0
- package/dist/utils/session/parsers/opencode.js.map +1 -0
- package/dist/utils/session/types.d.ts +4 -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/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 +47 -1
- package/dist/worktree.d.ts.map +1 -1
- package/dist/worktree.js +280 -94
- package/dist/worktree.js.map +1 -1
- package/package.json +12 -14
- package/src/claude.ts +68 -70
- package/src/cli/ui/App.solid.tsx +1823 -0
- package/src/cli/ui/__tests__/solid/AppSolid.cleanup.test.tsx +255 -0
- package/src/cli/ui/__tests__/solid/BranchListScreen.test.tsx +243 -0
- package/src/cli/ui/__tests__/solid/components/QuickStartStep.test.tsx +237 -0
- package/src/cli/ui/__tests__/solid/components/WizardPopup.test.tsx +231 -0
- package/src/cli/ui/__tests__/solid/components/WizardSteps.test.tsx +238 -0
- package/src/cli/ui/__tests__/utils/branchFormatter.test.ts +7 -289
- 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 +197 -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 +84 -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 +384 -0
- package/src/cli/ui/components/solid/WizardPopup.tsx +135 -0
- package/src/cli/ui/components/solid/WizardSteps.tsx +793 -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 +234 -0
- package/src/cli/ui/core/types.ts +235 -0
- package/src/cli/ui/hooks/solid/useAsyncOperation.ts +76 -0
- package/src/cli/ui/hooks/solid/useFilter.ts +86 -0
- package/src/cli/ui/hooks/solid/useGitOperations.ts +80 -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 +1050 -0
- package/src/cli/ui/screens/solid/ConfirmScreen.tsx +74 -0
- package/src/cli/ui/screens/solid/EnvironmentScreen.tsx +159 -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 +175 -0
- package/src/cli/ui/screens/solid/ProfileEnvScreen.tsx +192 -0
- package/src/cli/ui/screens/solid/ProfileScreen.tsx +98 -0
- package/src/cli/ui/screens/solid/SelectorScreen.tsx +170 -0
- package/src/cli/ui/screens/solid/SettingsScreen.tsx +50 -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 +20 -3
- package/src/cli/ui/utils/__tests__/branchFormatter.test.ts +180 -0
- package/src/cli/ui/utils/branchFormatter.ts +8 -215
- package/src/cli/ui/utils/continueSession.ts +44 -0
- package/src/cli/ui/utils/modelOptions.test.ts +1 -1
- package/src/codex.ts +100 -43
- package/src/config/__tests__/saveSession.test.ts +143 -0
- package/src/config/builtin-coding-agents.ts +19 -3
- package/src/config/index.ts +4 -0
- package/src/config/tools.ts +16 -0
- package/src/gemini.ts +58 -43
- package/src/index.test.ts +12 -12
- package/src/index.ts +164 -142
- package/src/launcher.ts +22 -3
- package/src/logging/logger.ts +32 -10
- package/src/opentui/index.solid.ts +1 -0
- package/src/repositories/worktree.repository.ts +8 -0
- package/src/services/__tests__/BatchMergeService.test.ts +62 -66
- package/src/services/__tests__/WorktreeOrchestrator.test.ts +8 -7
- package/src/services/codingAgentResolver.ts +30 -4
- package/src/services/dependency-installer.ts +0 -7
- 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 +10 -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/index.ts +10 -2
- package/src/utils/session/parsers/codex.ts +9 -1
- package/src/utils/session/parsers/index.ts +6 -0
- package/src/utils/session/parsers/opencode.ts +110 -0
- package/src/utils/session/types.ts +5 -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 +366 -107
- 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 -988
- 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.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 -145
- 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 -1456
- 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 -241
- 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
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
# Skipped Tests
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
Some tests have been temporarily renamed with `.skip` extension to exclude them from the test suite. These tests pass when run in isolation but fail during parallel execution due to limitations in bun's vitest implementation.
|
|
6
|
-
|
|
7
|
-
## Skipped Test Files
|
|
8
|
-
|
|
9
|
-
### 1. `useGitData.test.ts.skip`
|
|
10
|
-
|
|
11
|
-
- **Original location**: `src/ui/__tests__/hooks/useGitData.test.ts`
|
|
12
|
-
- **Tests**: 6 tests (auto-refresh tests were removed earlier, 6 basic tests remain)
|
|
13
|
-
- **Reason**: Timer-based and mock state conflicts in parallel execution
|
|
14
|
-
- **Coverage**: Basic functionality is tested in other test files
|
|
15
|
-
|
|
16
|
-
### 2. `realtimeUpdate.test.tsx.skip`
|
|
17
|
-
|
|
18
|
-
- **Original location**: `src/ui/__tests__/integration/realtimeUpdate.test.tsx`
|
|
19
|
-
- **Tests**: 5 tests (auto-refresh integration)
|
|
20
|
-
- **Reason**: setInterval timing precision issues in parallel runs
|
|
21
|
-
- **Coverage**: Auto-refresh functionality works correctly in production
|
|
22
|
-
|
|
23
|
-
### 3. `branchList.test.tsx.skip`
|
|
24
|
-
|
|
25
|
-
- **Original location**: `src/ui/__tests__/integration/branchList.test.tsx`
|
|
26
|
-
- **Tests**: 5 tests (branch list integration)
|
|
27
|
-
- **Reason**: Mock state conflicts with other parallel tests
|
|
28
|
-
- **Coverage**: Component functionality tested in unit tests
|
|
29
|
-
|
|
30
|
-
### 4. `realtimeUpdate.acceptance.test.tsx.skip`
|
|
31
|
-
|
|
32
|
-
- **Original location**: `src/ui/__tests__/acceptance/realtimeUpdate.acceptance.test.tsx`
|
|
33
|
-
- **Tests**: 4 acceptance tests
|
|
34
|
-
- **Reason**: Timer-based acceptance criteria in parallel execution
|
|
35
|
-
- **Coverage**: Same functionality as integration tests
|
|
36
|
-
|
|
37
|
-
### 5. `branchList.acceptance.test.tsx.skip`
|
|
38
|
-
|
|
39
|
-
- **Original location**: `src/ui/__tests__/acceptance/branchList.acceptance.test.tsx`
|
|
40
|
-
- **Tests**: 2 acceptance tests (performance with 20+, 100+ branches)
|
|
41
|
-
- **Reason**: Heavy load tests causing resource conflicts
|
|
42
|
-
- **Coverage**: Performance validated in manual testing
|
|
43
|
-
|
|
44
|
-
## Total Impact
|
|
45
|
-
|
|
46
|
-
- **Skipped**: 22 tests
|
|
47
|
-
- **Remaining**: 307 tests (100% pass rate)
|
|
48
|
-
- **Test Coverage**: 81.78% (unchanged)
|
|
49
|
-
|
|
50
|
-
## Technical Details
|
|
51
|
-
|
|
52
|
-
### Why These Tests Fail in Parallel
|
|
53
|
-
|
|
54
|
-
1. **Bun's vitest limitations**:
|
|
55
|
-
- No support for `pool` configuration options
|
|
56
|
-
- No support for `retry` option
|
|
57
|
-
- Limited control over test execution order
|
|
58
|
-
|
|
59
|
-
2. **Timer precision**:
|
|
60
|
-
- `setInterval` and `setTimeout` behavior varies in parallel execution
|
|
61
|
-
- Tests expect specific timing (100ms, 300ms) which becomes unreliable
|
|
62
|
-
|
|
63
|
-
3. **Mock state management**:
|
|
64
|
-
- Global mocks (getAllBranches, listAdditionalWorktrees) conflict between tests
|
|
65
|
-
- happy-dom environment state leaks between parallel tests
|
|
66
|
-
|
|
67
|
-
### Verification
|
|
68
|
-
|
|
69
|
-
All skipped tests pass when run individually:
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
# Examples of individual runs that pass
|
|
73
|
-
bun test src/ui/__tests__/hooks/useGitData.test.ts.skip
|
|
74
|
-
bun test src/ui/__tests__/integration/realtimeUpdate.test.tsx.skip
|
|
75
|
-
bun test src/ui/__tests__/integration/branchList.test.tsx.skip
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
## Future Actions
|
|
79
|
-
|
|
80
|
-
These tests can be re-enabled when:
|
|
81
|
-
|
|
82
|
-
1. Bun's vitest adds support for sequential execution options
|
|
83
|
-
2. Tests are rewritten to avoid timer dependencies
|
|
84
|
-
3. Mock state management is refactored for better isolation
|
|
85
|
-
|
|
86
|
-
## Running Skipped Tests Manually
|
|
87
|
-
|
|
88
|
-
To run these tests locally for verification:
|
|
89
|
-
|
|
90
|
-
```bash
|
|
91
|
-
# Rename files temporarily
|
|
92
|
-
for f in src/ui/__tests__/**/*.skip; do
|
|
93
|
-
mv "$f" "${f%.skip}"
|
|
94
|
-
done
|
|
95
|
-
|
|
96
|
-
# Run specific test file
|
|
97
|
-
bun test src/ui/__tests__/hooks/useGitData.test.ts
|
|
98
|
-
|
|
99
|
-
# Rename back
|
|
100
|
-
for f in src/ui/__tests__/**/*.test.{ts,tsx}; do
|
|
101
|
-
if [[ ! -f "$f" ]]; then continue; fi
|
|
102
|
-
case "$(basename "$f")" in
|
|
103
|
-
useGitData.test.ts|realtimeUpdate.*|branchList.*)
|
|
104
|
-
mv "$f" "$f.skip"
|
|
105
|
-
;;
|
|
106
|
-
esac
|
|
107
|
-
done
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
## Conclusion
|
|
111
|
-
|
|
112
|
-
The decision to skip these tests is pragmatic:
|
|
113
|
-
|
|
114
|
-
- **Production code works correctly** (all skipped tests pass in isolation)
|
|
115
|
-
- **Core functionality is tested** (307 stable tests remain)
|
|
116
|
-
- **Test suite is reliable** (100% pass rate)
|
|
117
|
-
- **CI/CD can proceed** (no flaky test failures)
|
|
118
|
-
|
|
119
|
-
The skipped tests document known limitations of the test environment, not bugs in the implementation.
|
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @vitest-environment happy-dom
|
|
3
|
-
* Acceptance tests for User Story 1: Branch List Display and Selection
|
|
4
|
-
*/
|
|
5
|
-
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
6
|
-
import { render, waitFor } from '@testing-library/react';
|
|
7
|
-
import React from 'react';
|
|
8
|
-
import { App } from '../../components/App.js';
|
|
9
|
-
import { Window } from 'happy-dom';
|
|
10
|
-
import type { BranchInfo } from '../../types.js';
|
|
11
|
-
|
|
12
|
-
// Mock git.js and worktree.js
|
|
13
|
-
vi.mock('../../../git.js', () => ({
|
|
14
|
-
getAllBranches: vi.fn(),
|
|
15
|
-
}));
|
|
16
|
-
|
|
17
|
-
vi.mock('../../../worktree.js', () => ({
|
|
18
|
-
listAdditionalWorktrees: vi.fn(),
|
|
19
|
-
}));
|
|
20
|
-
|
|
21
|
-
import { getAllBranches } from '../../../git.js';
|
|
22
|
-
import { listAdditionalWorktrees } from '../../../worktree.js';
|
|
23
|
-
|
|
24
|
-
describe('Acceptance: Branch List (User Story 1)', () => {
|
|
25
|
-
beforeEach(() => {
|
|
26
|
-
// Setup happy-dom
|
|
27
|
-
const window = new Window();
|
|
28
|
-
globalThis.window = window as any;
|
|
29
|
-
globalThis.document = window.document as any;
|
|
30
|
-
|
|
31
|
-
// Reset mocks
|
|
32
|
-
(getAllBranches as ReturnType<typeof vi.fn>).mockReset();
|
|
33
|
-
(listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockReset();
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* T047: Acceptance Scenario 1
|
|
38
|
-
* 1秒以内に全画面レイアウトが表示される
|
|
39
|
-
*/
|
|
40
|
-
it('[AC1] should display full-screen layout within 1 second', async () => {
|
|
41
|
-
const mockBranches: BranchInfo[] = [
|
|
42
|
-
{
|
|
43
|
-
name: 'main',
|
|
44
|
-
type: 'local',
|
|
45
|
-
branchType: 'main',
|
|
46
|
-
isCurrent: true,
|
|
47
|
-
},
|
|
48
|
-
];
|
|
49
|
-
|
|
50
|
-
(getAllBranches as ReturnType<typeof vi.fn>).mockResolvedValue(mockBranches);
|
|
51
|
-
(listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockResolvedValue([]);
|
|
52
|
-
|
|
53
|
-
const startTime = Date.now();
|
|
54
|
-
const onExit = vi.fn();
|
|
55
|
-
const { getByText, container } = render(<App onExit={onExit} />);
|
|
56
|
-
|
|
57
|
-
// Wait for full layout to be rendered
|
|
58
|
-
await waitFor(
|
|
59
|
-
() => {
|
|
60
|
-
expect(getByText(/Claude Worktree/i)).toBeDefined(); // Header
|
|
61
|
-
expect(getByText(/Local:/)).toBeDefined(); // Stats
|
|
62
|
-
expect(getByText(/main/)).toBeDefined(); // Branch list
|
|
63
|
-
expect(getByText(/Quit/i)).toBeDefined(); // Footer
|
|
64
|
-
},
|
|
65
|
-
{ timeout: 1000 }
|
|
66
|
-
);
|
|
67
|
-
|
|
68
|
-
const renderTime = Date.now() - startTime;
|
|
69
|
-
expect(renderTime).toBeLessThan(1000); // Should render within 1 second
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* T048: Acceptance Scenario 2
|
|
74
|
-
* 20個以上のブランチでスクロールがスムーズに動作
|
|
75
|
-
*/
|
|
76
|
-
it('[AC2] should handle smooth scrolling with 20+ branches', async () => {
|
|
77
|
-
// Generate 25 branches
|
|
78
|
-
const mockBranches: BranchInfo[] = Array.from({ length: 25 }, (_, i) => ({
|
|
79
|
-
name: `feature/branch-${i + 1}`,
|
|
80
|
-
type: 'local' as const,
|
|
81
|
-
branchType: 'feature' as const,
|
|
82
|
-
isCurrent: i === 0,
|
|
83
|
-
}));
|
|
84
|
-
|
|
85
|
-
(getAllBranches as ReturnType<typeof vi.fn>).mockResolvedValue(mockBranches);
|
|
86
|
-
(listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockResolvedValue([]);
|
|
87
|
-
|
|
88
|
-
const onExit = vi.fn();
|
|
89
|
-
const { container } = render(<App onExit={onExit} />);
|
|
90
|
-
|
|
91
|
-
// Wait for rendering
|
|
92
|
-
await waitFor(() => {
|
|
93
|
-
expect(container.textContent).toContain('feature/branch-1');
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
// Verify all branches are in the DOM (even if not visible)
|
|
97
|
-
// Note: Actual scrolling behavior is handled by ink-select-input
|
|
98
|
-
expect(container.textContent).toBeTruthy();
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* T049: Acceptance Scenario 3
|
|
103
|
-
* ターミナルリサイズで表示行数が自動調整される
|
|
104
|
-
*/
|
|
105
|
-
it('[AC3] should adjust display rows on terminal resize', async () => {
|
|
106
|
-
const mockBranches: BranchInfo[] = [
|
|
107
|
-
{
|
|
108
|
-
name: 'main',
|
|
109
|
-
type: 'local',
|
|
110
|
-
branchType: 'main',
|
|
111
|
-
isCurrent: true,
|
|
112
|
-
},
|
|
113
|
-
];
|
|
114
|
-
|
|
115
|
-
(getAllBranches as ReturnType<typeof vi.fn>).mockResolvedValue(mockBranches);
|
|
116
|
-
(listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockResolvedValue([]);
|
|
117
|
-
|
|
118
|
-
// Mock initial terminal size
|
|
119
|
-
const originalRows = process.stdout.rows;
|
|
120
|
-
process.stdout.rows = 30;
|
|
121
|
-
|
|
122
|
-
const onExit = vi.fn();
|
|
123
|
-
const { container } = render(<App onExit={onExit} />);
|
|
124
|
-
|
|
125
|
-
// Wait for initial render
|
|
126
|
-
await waitFor(() => {
|
|
127
|
-
expect(container.textContent).toContain('Claude Worktree');
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
// Simulate terminal resize
|
|
131
|
-
process.stdout.rows = 20;
|
|
132
|
-
|
|
133
|
-
// In a real terminal, this would trigger a resize event
|
|
134
|
-
// For this test, we just verify the component can handle different sizes
|
|
135
|
-
expect(container).toBeDefined();
|
|
136
|
-
|
|
137
|
-
// Restore original size
|
|
138
|
-
process.stdout.rows = originalRows;
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* T050: Acceptance Scenario 4
|
|
143
|
-
* ブランチ選択とEnterキーで処理開始
|
|
144
|
-
*/
|
|
145
|
-
it('[AC4] should trigger onExit when branch is selected', async () => {
|
|
146
|
-
const mockBranches: BranchInfo[] = [
|
|
147
|
-
{
|
|
148
|
-
name: 'main',
|
|
149
|
-
type: 'local',
|
|
150
|
-
branchType: 'main',
|
|
151
|
-
isCurrent: true,
|
|
152
|
-
},
|
|
153
|
-
{
|
|
154
|
-
name: 'feature/test',
|
|
155
|
-
type: 'local',
|
|
156
|
-
branchType: 'feature',
|
|
157
|
-
isCurrent: false,
|
|
158
|
-
},
|
|
159
|
-
];
|
|
160
|
-
|
|
161
|
-
(getAllBranches as ReturnType<typeof vi.fn>).mockResolvedValue(mockBranches);
|
|
162
|
-
(listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockResolvedValue([]);
|
|
163
|
-
|
|
164
|
-
const onExit = vi.fn();
|
|
165
|
-
const { container } = render(<App onExit={onExit} />);
|
|
166
|
-
|
|
167
|
-
// Wait for rendering
|
|
168
|
-
await waitFor(() => {
|
|
169
|
-
expect(container.textContent).toContain('main');
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
// Note: Actual key input simulation requires ink's input handling
|
|
173
|
-
// This test verifies that the onExit callback is properly wired
|
|
174
|
-
expect(onExit).toBeDefined();
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* T051: Acceptance Scenario 5
|
|
179
|
-
* qキーでアプリケーション終了
|
|
180
|
-
*/
|
|
181
|
-
it('[AC5] should support quit action with q key', async () => {
|
|
182
|
-
const mockBranches: BranchInfo[] = [
|
|
183
|
-
{
|
|
184
|
-
name: 'main',
|
|
185
|
-
type: 'local',
|
|
186
|
-
branchType: 'main',
|
|
187
|
-
isCurrent: true,
|
|
188
|
-
},
|
|
189
|
-
];
|
|
190
|
-
|
|
191
|
-
(getAllBranches as ReturnType<typeof vi.fn>).mockResolvedValue(mockBranches);
|
|
192
|
-
(listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockResolvedValue([]);
|
|
193
|
-
|
|
194
|
-
const onExit = vi.fn();
|
|
195
|
-
const { getAllByText } = render(<App onExit={onExit} />);
|
|
196
|
-
|
|
197
|
-
// Wait for rendering
|
|
198
|
-
await waitFor(() => {
|
|
199
|
-
expect(getAllByText(/Quit/i).length).toBeGreaterThan(0);
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
// Verify quit action is displayed
|
|
203
|
-
expect(getAllByText(/q/i).length).toBeGreaterThan(0);
|
|
204
|
-
expect(getAllByText(/Quit/i).length).toBeGreaterThan(0);
|
|
205
|
-
|
|
206
|
-
// Note: Actual 'q' key press requires ink's input handling
|
|
207
|
-
// This test verifies that the quit action is properly displayed
|
|
208
|
-
});
|
|
209
|
-
|
|
210
|
-
/**
|
|
211
|
-
* Additional: Performance test for large branch lists
|
|
212
|
-
*/
|
|
213
|
-
it('[Performance] should handle 100+ branches efficiently', async () => {
|
|
214
|
-
// Generate 100 branches
|
|
215
|
-
const mockBranches: BranchInfo[] = Array.from({ length: 100 }, (_, i) => ({
|
|
216
|
-
name: `feature/branch-${i + 1}`,
|
|
217
|
-
type: 'local' as const,
|
|
218
|
-
branchType: 'feature' as const,
|
|
219
|
-
isCurrent: i === 0,
|
|
220
|
-
}));
|
|
221
|
-
|
|
222
|
-
(getAllBranches as ReturnType<typeof vi.fn>).mockResolvedValue(mockBranches);
|
|
223
|
-
(listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockResolvedValue([]);
|
|
224
|
-
|
|
225
|
-
const startTime = Date.now();
|
|
226
|
-
const onExit = vi.fn();
|
|
227
|
-
const { container } = render(<App onExit={onExit} />);
|
|
228
|
-
|
|
229
|
-
// Wait for rendering
|
|
230
|
-
await waitFor(() => {
|
|
231
|
-
expect(container.textContent).toContain('feature/branch-1');
|
|
232
|
-
});
|
|
233
|
-
|
|
234
|
-
const renderTime = Date.now() - startTime;
|
|
235
|
-
|
|
236
|
-
// Should render 100 branches within reasonable time (< 2 seconds)
|
|
237
|
-
expect(renderTime).toBeLessThan(2000);
|
|
238
|
-
});
|
|
239
|
-
});
|
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @vitest-environment happy-dom
|
|
3
|
-
* Acceptance tests for User Story 2: Sub-screen Navigation
|
|
4
|
-
*/
|
|
5
|
-
import { describe, it, expect, beforeEach, afterAll, vi } from "vitest";
|
|
6
|
-
import type { Mock } from "vitest";
|
|
7
|
-
import { render, waitFor } from "@testing-library/react";
|
|
8
|
-
import React from "react";
|
|
9
|
-
import { App } from "../../components/App.js";
|
|
10
|
-
import { Window } from "happy-dom";
|
|
11
|
-
import type { BranchInfo } from "../../types.js";
|
|
12
|
-
|
|
13
|
-
// Mock git.ts and worktree.ts
|
|
14
|
-
vi.mock("../../../../git.ts", () => ({
|
|
15
|
-
__esModule: true,
|
|
16
|
-
getAllBranches: vi.fn(),
|
|
17
|
-
getRepositoryRoot: vi.fn(async () => "/repo"),
|
|
18
|
-
deleteBranch: vi.fn(async () => undefined),
|
|
19
|
-
}));
|
|
20
|
-
|
|
21
|
-
const { acceptanceIsProtectedBranchName, acceptanceSwitchToProtectedBranch } =
|
|
22
|
-
vi.hoisted(() => ({
|
|
23
|
-
acceptanceIsProtectedBranchName: vi.fn(() => false),
|
|
24
|
-
acceptanceSwitchToProtectedBranch: vi.fn(async () => "none" as const),
|
|
25
|
-
}));
|
|
26
|
-
|
|
27
|
-
vi.mock("../../../../worktree.ts", () => ({
|
|
28
|
-
__esModule: true,
|
|
29
|
-
listAdditionalWorktrees: vi.fn(),
|
|
30
|
-
createWorktree: vi.fn(async () => undefined),
|
|
31
|
-
generateWorktreePath: vi.fn(async () => "/repo/.git/worktree/test"),
|
|
32
|
-
getMergedPRWorktrees: vi.fn(async () => []),
|
|
33
|
-
removeWorktree: vi.fn(async () => undefined),
|
|
34
|
-
isProtectedBranchName: acceptanceIsProtectedBranchName,
|
|
35
|
-
switchToProtectedBranch: acceptanceSwitchToProtectedBranch,
|
|
36
|
-
}));
|
|
37
|
-
|
|
38
|
-
import {
|
|
39
|
-
getAllBranches,
|
|
40
|
-
getRepositoryRoot,
|
|
41
|
-
deleteBranch,
|
|
42
|
-
} from "../../../../git.ts";
|
|
43
|
-
import {
|
|
44
|
-
listAdditionalWorktrees,
|
|
45
|
-
createWorktree,
|
|
46
|
-
generateWorktreePath,
|
|
47
|
-
getMergedPRWorktrees,
|
|
48
|
-
removeWorktree,
|
|
49
|
-
} from "../../../../worktree.ts";
|
|
50
|
-
|
|
51
|
-
const mockedGetAllBranches = getAllBranches as Mock;
|
|
52
|
-
const mockedGetRepositoryRoot = getRepositoryRoot as Mock;
|
|
53
|
-
const mockedDeleteBranch = deleteBranch as Mock;
|
|
54
|
-
const mockedListAdditionalWorktrees = listAdditionalWorktrees as Mock;
|
|
55
|
-
const mockedCreateWorktree = createWorktree as Mock;
|
|
56
|
-
const mockedGenerateWorktreePath = generateWorktreePath as Mock;
|
|
57
|
-
const mockedGetMergedPRWorktrees = getMergedPRWorktrees as Mock;
|
|
58
|
-
const mockedRemoveWorktree = removeWorktree as Mock;
|
|
59
|
-
const mockedIsProtectedBranchName = acceptanceIsProtectedBranchName as Mock;
|
|
60
|
-
const mockedSwitchToProtectedBranch = acceptanceSwitchToProtectedBranch as Mock;
|
|
61
|
-
|
|
62
|
-
describe("Acceptance: Navigation (User Story 2)", () => {
|
|
63
|
-
beforeEach(() => {
|
|
64
|
-
// Setup happy-dom
|
|
65
|
-
const window = new Window();
|
|
66
|
-
globalThis.window = window as unknown as typeof globalThis.window;
|
|
67
|
-
globalThis.document =
|
|
68
|
-
window.document as unknown as typeof globalThis.document;
|
|
69
|
-
|
|
70
|
-
// Reset mocks
|
|
71
|
-
mockedGetAllBranches.mockReset();
|
|
72
|
-
mockedListAdditionalWorktrees.mockReset();
|
|
73
|
-
mockedGetRepositoryRoot.mockReset();
|
|
74
|
-
mockedDeleteBranch.mockReset();
|
|
75
|
-
mockedCreateWorktree.mockReset();
|
|
76
|
-
mockedGenerateWorktreePath.mockReset();
|
|
77
|
-
mockedGetMergedPRWorktrees.mockReset();
|
|
78
|
-
mockedRemoveWorktree.mockReset();
|
|
79
|
-
mockedIsProtectedBranchName.mockReset();
|
|
80
|
-
mockedSwitchToProtectedBranch.mockReset();
|
|
81
|
-
mockedGetRepositoryRoot.mockResolvedValue("/repo");
|
|
82
|
-
mockedSwitchToProtectedBranch.mockResolvedValue("none");
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
const mockBranches: BranchInfo[] = [
|
|
86
|
-
{
|
|
87
|
-
name: "main",
|
|
88
|
-
type: "local",
|
|
89
|
-
branchType: "main",
|
|
90
|
-
isCurrent: true,
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
name: "feature/test",
|
|
94
|
-
type: "local",
|
|
95
|
-
branchType: "feature",
|
|
96
|
-
isCurrent: false,
|
|
97
|
-
},
|
|
98
|
-
];
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* T074: Acceptance Scenario 1
|
|
102
|
-
* nキーで新規ブランチ作成画面に遷移
|
|
103
|
-
*/
|
|
104
|
-
it("[AC1] should navigate to branch creator on n key", async () => {
|
|
105
|
-
(getAllBranches as ReturnType<typeof vi.fn>).mockResolvedValue(
|
|
106
|
-
mockBranches,
|
|
107
|
-
);
|
|
108
|
-
(listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockResolvedValue([]);
|
|
109
|
-
|
|
110
|
-
const onExit = vi.fn();
|
|
111
|
-
const { getByText, container } = render(<App onExit={onExit} />);
|
|
112
|
-
|
|
113
|
-
await waitFor(() => {
|
|
114
|
-
expect(getByText(/gwt - Branch Selection/i)).toBeDefined();
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
// Verify n key action is available in footer
|
|
118
|
-
const nKeyElements = container.querySelectorAll("*");
|
|
119
|
-
let hasNKey = false;
|
|
120
|
-
nKeyElements.forEach((el) => {
|
|
121
|
-
if (el.textContent?.toLowerCase().includes("new branch")) {
|
|
122
|
-
hasNKey = true;
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
expect(hasNKey || container.textContent?.toLowerCase().includes("n")).toBe(
|
|
127
|
-
true,
|
|
128
|
-
);
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* T075: Acceptance Scenario 2
|
|
133
|
-
* メイン画面にはqキーが存在しない(終了はCtrl+Cのみ)
|
|
134
|
-
*/
|
|
135
|
-
it("[AC2] should not have q key on main screen", async () => {
|
|
136
|
-
(getAllBranches as ReturnType<typeof vi.fn>).mockResolvedValue(
|
|
137
|
-
mockBranches,
|
|
138
|
-
);
|
|
139
|
-
(listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockResolvedValue([]);
|
|
140
|
-
|
|
141
|
-
const onExit = vi.fn();
|
|
142
|
-
const { container } = render(<App onExit={onExit} />);
|
|
143
|
-
|
|
144
|
-
await waitFor(() => {
|
|
145
|
-
expect(container).toBeDefined();
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
// Verify q key is NOT in the footer (main screen uses Ctrl+C for exit)
|
|
149
|
-
const footerText = container.textContent || "";
|
|
150
|
-
// Main screen should not have 'q' for quit, but should have other keys
|
|
151
|
-
expect(footerText.toLowerCase()).not.toMatch(/\[q\]/);
|
|
152
|
-
expect(footerText.toLowerCase()).toContain("enter");
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* T076: Acceptance Scenario 3
|
|
157
|
-
* ブランチリスト画面でフッターアクションが表示される
|
|
158
|
-
*/
|
|
159
|
-
it("[AC3] should display footer actions on branch list screen", async () => {
|
|
160
|
-
(getAllBranches as ReturnType<typeof vi.fn>).mockResolvedValue(
|
|
161
|
-
mockBranches,
|
|
162
|
-
);
|
|
163
|
-
(listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockResolvedValue([
|
|
164
|
-
{
|
|
165
|
-
branch: "feature/test",
|
|
166
|
-
path: "/path/to/worktree",
|
|
167
|
-
head: "abc123",
|
|
168
|
-
isAccessible: true,
|
|
169
|
-
},
|
|
170
|
-
]);
|
|
171
|
-
|
|
172
|
-
const onExit = vi.fn();
|
|
173
|
-
const { getByText, container } = render(<App onExit={onExit} />);
|
|
174
|
-
|
|
175
|
-
await waitFor(() => {
|
|
176
|
-
expect(getByText(/gwt - Branch Selection/i)).toBeDefined();
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
// Verify footer actions are available
|
|
180
|
-
const footerText = container.textContent || "";
|
|
181
|
-
expect(footerText.toLowerCase()).toContain("enter");
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
it("[Integration] should support all navigation keys", async () => {
|
|
185
|
-
(getAllBranches as ReturnType<typeof vi.fn>).mockResolvedValue(
|
|
186
|
-
mockBranches,
|
|
187
|
-
);
|
|
188
|
-
(listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockResolvedValue([]);
|
|
189
|
-
|
|
190
|
-
const onExit = vi.fn();
|
|
191
|
-
const { getByText, getAllByText } = render(<App onExit={onExit} />);
|
|
192
|
-
|
|
193
|
-
await waitFor(() => {
|
|
194
|
-
expect(getByText(/gwt - Branch Selection/i)).toBeDefined();
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
// Verify navigation keys are available (main screen doesn't have q key)
|
|
198
|
-
const enterKeys = getAllByText(/enter/i);
|
|
199
|
-
|
|
200
|
-
expect(enterKeys.length).toBeGreaterThan(0);
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
it("[Integration] should display correct footer actions", async () => {
|
|
204
|
-
(getAllBranches as ReturnType<typeof vi.fn>).mockResolvedValue(
|
|
205
|
-
mockBranches,
|
|
206
|
-
);
|
|
207
|
-
(listAdditionalWorktrees as ReturnType<typeof vi.fn>).mockResolvedValue([]);
|
|
208
|
-
|
|
209
|
-
const onExit = vi.fn();
|
|
210
|
-
const { container } = render(<App onExit={onExit} />);
|
|
211
|
-
|
|
212
|
-
await waitFor(() => {
|
|
213
|
-
expect(container).toBeDefined();
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
// Verify footer has multiple action keys (main screen doesn't have q key)
|
|
217
|
-
const footerText = container.textContent || "";
|
|
218
|
-
expect(footerText.toLowerCase()).toContain("enter");
|
|
219
|
-
expect(footerText.toLowerCase()).toContain("r"); // Refresh
|
|
220
|
-
});
|
|
221
|
-
});
|
|
222
|
-
|
|
223
|
-
afterAll(() => {
|
|
224
|
-
vi.restoreAllMocks();
|
|
225
|
-
});
|