@akiojin/gwt 4.10.0 → 4.11.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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.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 +2 -0
- package/dist/config/index.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.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/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/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 +4 -4
- package/src/config/index.ts +4 -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 +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/parsers/codex.ts +9 -1
- 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 -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.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
package/src/index.ts
CHANGED
|
@@ -13,30 +13,27 @@ import {
|
|
|
13
13
|
hasUnpushedCommits,
|
|
14
14
|
getUncommittedChangesCount,
|
|
15
15
|
getUnpushedCommitsCount,
|
|
16
|
-
GitError,
|
|
17
16
|
} from "./git.js";
|
|
18
17
|
import { launchClaudeCode } from "./claude.js";
|
|
19
|
-
import {
|
|
20
|
-
|
|
21
|
-
CodexError,
|
|
22
|
-
type CodexReasoningEffort,
|
|
23
|
-
} from "./codex.js";
|
|
24
|
-
import { launchGeminiCLI, GeminiError } from "./gemini.js";
|
|
18
|
+
import { launchCodexCLI, type CodexReasoningEffort } from "./codex.js";
|
|
19
|
+
import { launchGeminiCLI } from "./gemini.js";
|
|
25
20
|
import {
|
|
26
21
|
WorktreeOrchestrator,
|
|
27
22
|
type EnsureWorktreeOptions,
|
|
28
23
|
} from "./services/WorktreeOrchestrator.js";
|
|
29
24
|
import chalk from "chalk";
|
|
30
|
-
import type { SelectionResult } from "./cli/ui/
|
|
25
|
+
import type { SelectionResult } from "./cli/ui/App.solid.js";
|
|
31
26
|
import {
|
|
32
27
|
isProtectedBranchName,
|
|
33
28
|
switchToProtectedBranch,
|
|
34
|
-
WorktreeError,
|
|
35
29
|
resolveWorktreePathForBranch,
|
|
30
|
+
repairWorktreePath,
|
|
36
31
|
} from "./worktree.js";
|
|
37
32
|
import {
|
|
38
33
|
getTerminalStreams,
|
|
34
|
+
resetTerminalModes,
|
|
39
35
|
waitForUserAcknowledgement,
|
|
36
|
+
writeTerminalLine,
|
|
40
37
|
} from "./utils/terminal.js";
|
|
41
38
|
import { createLogger } from "./logging/logger.js";
|
|
42
39
|
import { getCodingAgentById, getSharedEnvironment } from "./config/tools.js";
|
|
@@ -47,7 +44,12 @@ import {
|
|
|
47
44
|
findLatestClaudeSession,
|
|
48
45
|
findLatestGeminiSession,
|
|
49
46
|
} from "./utils/session.js";
|
|
50
|
-
import {
|
|
47
|
+
import {
|
|
48
|
+
getPackageVersion,
|
|
49
|
+
setupExitHandlers,
|
|
50
|
+
registerExitCleanup,
|
|
51
|
+
clearExitCleanup,
|
|
52
|
+
} from "./utils.js";
|
|
51
53
|
import { findLatestClaudeSessionId } from "./utils/session.js";
|
|
52
54
|
import { resolveContinueSessionId } from "./cli/ui/utils/continueSession.js";
|
|
53
55
|
import { normalizeModelId } from "./cli/ui/utils/modelOptions.js";
|
|
@@ -56,12 +58,13 @@ import {
|
|
|
56
58
|
DependencyInstallError,
|
|
57
59
|
type DependencyInstallResult,
|
|
58
60
|
} from "./services/dependency-installer.js";
|
|
59
|
-
import {
|
|
61
|
+
import { isGitRelatedError, isRecoverableError } from "./utils/error-utils.js";
|
|
60
62
|
|
|
61
63
|
const ERROR_PROMPT = chalk.yellow(
|
|
62
64
|
"Review the error details, then press Enter to continue.",
|
|
63
65
|
);
|
|
64
|
-
const
|
|
66
|
+
const SUCCESS_PROMPT = chalk.green("Press Enter to return to main menu...");
|
|
67
|
+
const POST_SESSION_DELAY_MS = 500;
|
|
65
68
|
|
|
66
69
|
// Category: cli
|
|
67
70
|
const appLogger = createLogger({ category: "cli" });
|
|
@@ -74,87 +77,23 @@ async function waitForErrorAcknowledgement(): Promise<void> {
|
|
|
74
77
|
* Simple print functions (replacing legacy UI display functions)
|
|
75
78
|
*/
|
|
76
79
|
function printError(message: string): void {
|
|
77
|
-
|
|
80
|
+
writeTerminalLine(chalk.red(`❌ ${message}`), "stderr");
|
|
78
81
|
appLogger.error({ message });
|
|
79
82
|
}
|
|
80
83
|
|
|
81
84
|
function printInfo(message: string): void {
|
|
82
|
-
|
|
85
|
+
writeTerminalLine(chalk.blue(`ℹ️ ${message}`));
|
|
83
86
|
appLogger.info({ message });
|
|
84
87
|
}
|
|
85
88
|
|
|
86
89
|
function printWarning(message: string): void {
|
|
87
|
-
|
|
90
|
+
writeTerminalLine(chalk.yellow(`⚠️ ${message}`), "stderr");
|
|
88
91
|
appLogger.warn({ message });
|
|
89
92
|
}
|
|
90
93
|
|
|
91
94
|
type GitStepResult<T> = { ok: true; value: T } | { ok: false };
|
|
92
95
|
|
|
93
|
-
|
|
94
|
-
if (!error) {
|
|
95
|
-
return false;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
if (error instanceof GitError || error instanceof WorktreeError) {
|
|
99
|
-
return true;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
if (error instanceof Error) {
|
|
103
|
-
return error.name === "GitError" || error.name === "WorktreeError";
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
if (
|
|
107
|
-
typeof error === "object" &&
|
|
108
|
-
"name" in (error as Record<string, unknown>)
|
|
109
|
-
) {
|
|
110
|
-
const name = (error as { name?: string }).name;
|
|
111
|
-
return name === "GitError" || name === "WorktreeError";
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
return false;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
function isRecoverableError(error: unknown): boolean {
|
|
118
|
-
if (!error) {
|
|
119
|
-
return false;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
if (
|
|
123
|
-
error instanceof GitError ||
|
|
124
|
-
error instanceof WorktreeError ||
|
|
125
|
-
error instanceof CodexError ||
|
|
126
|
-
error instanceof GeminiError ||
|
|
127
|
-
error instanceof DependencyInstallError
|
|
128
|
-
) {
|
|
129
|
-
return true;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
if (error instanceof Error) {
|
|
133
|
-
return (
|
|
134
|
-
error.name === "GitError" ||
|
|
135
|
-
error.name === "WorktreeError" ||
|
|
136
|
-
error.name === "CodexError" ||
|
|
137
|
-
error.name === "GeminiError" ||
|
|
138
|
-
error.name === "DependencyInstallError"
|
|
139
|
-
);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
if (
|
|
143
|
-
typeof error === "object" &&
|
|
144
|
-
"name" in (error as Record<string, unknown>)
|
|
145
|
-
) {
|
|
146
|
-
const name = (error as { name?: string }).name;
|
|
147
|
-
return (
|
|
148
|
-
name === "GitError" ||
|
|
149
|
-
name === "WorktreeError" ||
|
|
150
|
-
name === "CodexError" ||
|
|
151
|
-
name === "GeminiError" ||
|
|
152
|
-
name === "DependencyInstallError"
|
|
153
|
-
);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
return false;
|
|
157
|
-
}
|
|
96
|
+
// Note: isGitRelatedError and isRecoverableError are now imported from ./utils/error-utils.js
|
|
158
97
|
|
|
159
98
|
async function runGitStep<T>(
|
|
160
99
|
description: string,
|
|
@@ -240,49 +179,71 @@ async function showVersion(): Promise<void> {
|
|
|
240
179
|
}
|
|
241
180
|
|
|
242
181
|
/**
|
|
243
|
-
*
|
|
182
|
+
* Performs terminal cleanup when exiting.
|
|
183
|
+
*/
|
|
184
|
+
function performTerminalCleanup(): void {
|
|
185
|
+
const terminal = getTerminalStreams();
|
|
186
|
+
terminal.exitRawMode();
|
|
187
|
+
resetTerminalModes(terminal.stdout);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Main function for OpenTUI UI
|
|
244
192
|
* Returns SelectionResult if user made selections, undefined if user quit
|
|
245
193
|
*/
|
|
246
|
-
async function
|
|
247
|
-
const {
|
|
248
|
-
const React = await import("react");
|
|
249
|
-
const { App } = await import("./cli/ui/components/App.js");
|
|
194
|
+
async function mainSolidUI(): Promise<SelectionResult | undefined> {
|
|
195
|
+
const { renderSolidApp } = await import("./opentui/index.solid.js");
|
|
250
196
|
const terminal = getTerminalStreams();
|
|
251
197
|
|
|
198
|
+
// Register cleanup for signal handlers
|
|
199
|
+
registerExitCleanup(performTerminalCleanup);
|
|
252
200
|
let selectionResult: SelectionResult | undefined;
|
|
201
|
+
// マウスキャプチャを有効にしてSelection APIで選択終了時にクリップボードへコピー
|
|
202
|
+
const useMouse = true;
|
|
203
|
+
const enableMouseMovement = false;
|
|
204
|
+
const altScreenPreference =
|
|
205
|
+
process.env.GWT_UI_ALT_SCREEN?.trim().toLowerCase();
|
|
206
|
+
// Ink.js版ではalternate screenを使用していなかったため、デフォルトをfalseに
|
|
207
|
+
// alternate screenを使用するとコーディングエージェント起動/終了ログが見えなくなる
|
|
208
|
+
const useAlternateScreen =
|
|
209
|
+
altScreenPreference === "true" || altScreenPreference === "1";
|
|
253
210
|
|
|
254
|
-
// Resume stdin to ensure it's ready for Ink.js
|
|
255
211
|
if (typeof terminal.stdin.resume === "function") {
|
|
256
212
|
terminal.stdin.resume();
|
|
257
213
|
}
|
|
214
|
+
if (typeof terminal.stdin.setRawMode === "function") {
|
|
215
|
+
try {
|
|
216
|
+
terminal.stdin.setRawMode(true);
|
|
217
|
+
} catch {
|
|
218
|
+
// Ignore raw mode errors and let OpenTUI handle setup.
|
|
219
|
+
}
|
|
220
|
+
}
|
|
258
221
|
|
|
259
|
-
const { unmount, waitUntilExit } = render(
|
|
260
|
-
React.createElement(App, {
|
|
261
|
-
onExit: (result?: SelectionResult) => {
|
|
262
|
-
selectionResult = result;
|
|
263
|
-
},
|
|
264
|
-
}),
|
|
265
|
-
{
|
|
266
|
-
stdin: terminal.stdin,
|
|
267
|
-
stdout: terminal.stdout,
|
|
268
|
-
stderr: terminal.stderr,
|
|
269
|
-
patchConsole: false,
|
|
270
|
-
},
|
|
271
|
-
);
|
|
272
|
-
|
|
273
|
-
// Wait for user to exit
|
|
274
222
|
try {
|
|
275
|
-
await
|
|
223
|
+
await renderSolidApp(
|
|
224
|
+
{
|
|
225
|
+
onExit: (result?: SelectionResult) => {
|
|
226
|
+
selectionResult = result;
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
stdin: terminal.stdin,
|
|
231
|
+
stdout: terminal.stdout,
|
|
232
|
+
exitOnCtrlC: true,
|
|
233
|
+
useAlternateScreen,
|
|
234
|
+
useMouse,
|
|
235
|
+
enableMouseMovement,
|
|
236
|
+
},
|
|
237
|
+
);
|
|
276
238
|
} finally {
|
|
277
|
-
|
|
239
|
+
performTerminalCleanup();
|
|
278
240
|
if (typeof terminal.stdin.pause === "function") {
|
|
279
241
|
terminal.stdin.pause();
|
|
280
242
|
}
|
|
281
|
-
// Inkが残した data リスナーが子プロセス入力を奪わないようクリーンアップ
|
|
282
243
|
terminal.stdin.removeAllListeners?.("data");
|
|
283
244
|
terminal.stdin.removeAllListeners?.("keypress");
|
|
284
245
|
terminal.stdin.removeAllListeners?.("readable");
|
|
285
|
-
|
|
246
|
+
clearExitCleanup();
|
|
286
247
|
}
|
|
287
248
|
|
|
288
249
|
return selectionResult;
|
|
@@ -299,12 +260,15 @@ export async function handleAIToolWorkflow(
|
|
|
299
260
|
displayName,
|
|
300
261
|
branchType,
|
|
301
262
|
remoteBranch,
|
|
263
|
+
baseBranch,
|
|
264
|
+
isNewBranch,
|
|
302
265
|
tool,
|
|
303
266
|
mode,
|
|
304
267
|
skipPermissions,
|
|
305
268
|
model,
|
|
306
269
|
inferenceLevel,
|
|
307
270
|
sessionId: selectedSessionId,
|
|
271
|
+
toolVersion,
|
|
308
272
|
} = selectionResult;
|
|
309
273
|
|
|
310
274
|
const branchLabel = displayName ?? branch;
|
|
@@ -330,7 +294,14 @@ export async function handleAIToolWorkflow(
|
|
|
330
294
|
// Determine ensure options (local vs remote branch)
|
|
331
295
|
const ensureOptions: EnsureWorktreeOptions = {};
|
|
332
296
|
|
|
333
|
-
if (
|
|
297
|
+
if (isNewBranch) {
|
|
298
|
+
ensureOptions.isNewBranch = true;
|
|
299
|
+
if (baseBranch) {
|
|
300
|
+
ensureOptions.baseBranch = baseBranch;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
if (branchType === "remote" && !isNewBranch) {
|
|
334
305
|
const remoteRef = remoteBranch ?? branch;
|
|
335
306
|
const localExists = await branchExists(branch);
|
|
336
307
|
|
|
@@ -338,15 +309,37 @@ export async function handleAIToolWorkflow(
|
|
|
338
309
|
ensureOptions.isNewBranch = !localExists;
|
|
339
310
|
}
|
|
340
311
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
312
|
+
let existingWorktreeResolution = await resolveWorktreePathForBranch(branch);
|
|
313
|
+
let existingWorktree = existingWorktreeResolution.path;
|
|
314
|
+
|
|
315
|
+
// mismatch検出時に自動修復を試みる (FR-009〜FR-013)
|
|
344
316
|
if (!existingWorktree && existingWorktreeResolution.mismatch) {
|
|
345
317
|
const actualBranch =
|
|
346
318
|
existingWorktreeResolution.mismatch.actualBranch ?? "unknown";
|
|
347
319
|
printWarning(
|
|
348
|
-
`Worktree mismatch detected: ${existingWorktreeResolution.mismatch.path} is checked out to '${actualBranch}'.
|
|
320
|
+
`Worktree mismatch detected: ${existingWorktreeResolution.mismatch.path} is checked out to '${actualBranch}'. Attempting to repair...`,
|
|
321
|
+
);
|
|
322
|
+
|
|
323
|
+
// 共通修復関数を使用してパス修復を試みる
|
|
324
|
+
const repairResult = await repairWorktreePath(
|
|
325
|
+
branch,
|
|
326
|
+
existingWorktreeResolution.mismatch.path,
|
|
327
|
+
repoRoot,
|
|
349
328
|
);
|
|
329
|
+
|
|
330
|
+
if (repairResult.repaired) {
|
|
331
|
+
// FR-012: 修復成功時のメッセージ
|
|
332
|
+
printInfo(`Worktree path repaired: ${repairResult.newPath}`);
|
|
333
|
+
|
|
334
|
+
// 修復後に再度解決を試みる
|
|
335
|
+
existingWorktreeResolution = await resolveWorktreePathForBranch(branch);
|
|
336
|
+
existingWorktree = existingWorktreeResolution.path;
|
|
337
|
+
} else if (repairResult.removed) {
|
|
338
|
+
// FR-013: メタデータ削除成功時のメッセージ
|
|
339
|
+
printInfo(`Stale worktree metadata removed. Creating new worktree...`);
|
|
340
|
+
} else {
|
|
341
|
+
printWarning(`Failed to repair worktree for '${branch}'.`);
|
|
342
|
+
}
|
|
350
343
|
}
|
|
351
344
|
|
|
352
345
|
const isProtectedBranch =
|
|
@@ -496,16 +489,21 @@ export async function handleAIToolWorkflow(
|
|
|
496
489
|
divergenceBranches.add(sanitizedRemoteBranch);
|
|
497
490
|
}
|
|
498
491
|
|
|
499
|
-
|
|
500
|
-
getBranchDivergenceStatuses
|
|
492
|
+
let divergenceStatuses: Awaited<
|
|
493
|
+
ReturnType<typeof getBranchDivergenceStatuses>
|
|
494
|
+
> = [];
|
|
495
|
+
try {
|
|
496
|
+
divergenceStatuses = await getBranchDivergenceStatuses({
|
|
501
497
|
cwd: repoRoot,
|
|
502
498
|
branches: Array.from(divergenceBranches),
|
|
503
|
-
})
|
|
504
|
-
)
|
|
505
|
-
|
|
506
|
-
|
|
499
|
+
});
|
|
500
|
+
} catch (error) {
|
|
501
|
+
const details = error instanceof Error ? error.message : String(error);
|
|
502
|
+
printWarning(
|
|
503
|
+
`Failed to check branch divergence. Error: ${details}. Continuing without blocking.`,
|
|
504
|
+
);
|
|
505
|
+
divergenceStatuses = [];
|
|
507
506
|
}
|
|
508
|
-
const divergenceStatuses = divergenceResult.value;
|
|
509
507
|
const divergedBranches = divergenceStatuses.filter(
|
|
510
508
|
(status) => status.remoteAhead > 0 && status.localAhead > 0,
|
|
511
509
|
);
|
|
@@ -519,24 +517,18 @@ export async function handleAIToolWorkflow(
|
|
|
519
517
|
({ branch: divergedBranch, remoteAhead, localAhead }) => {
|
|
520
518
|
const highlight =
|
|
521
519
|
divergedBranch === branch ? " (selected branch)" : "";
|
|
522
|
-
|
|
520
|
+
writeTerminalLine(
|
|
523
521
|
chalk.yellow(
|
|
524
522
|
` • ${divergedBranch}${highlight} remote:+${remoteAhead} local:+${localAhead}`,
|
|
525
523
|
),
|
|
524
|
+
"stderr",
|
|
526
525
|
);
|
|
527
526
|
},
|
|
528
527
|
);
|
|
529
528
|
|
|
530
529
|
printWarning(
|
|
531
|
-
"Resolve these divergences (e.g., rebase or merge)
|
|
532
|
-
);
|
|
533
|
-
await waitForEnter(
|
|
534
|
-
"Press Enter to return to the main menu and resolve these issues manually.",
|
|
530
|
+
"Resolve these divergences (e.g., rebase or merge) to avoid conflicts. Continuing without blocking.",
|
|
535
531
|
);
|
|
536
|
-
printWarning(
|
|
537
|
-
"AI tool launch has been cancelled until divergences are resolved.",
|
|
538
|
-
);
|
|
539
|
-
return;
|
|
540
532
|
} else if (fastForwardError) {
|
|
541
533
|
printWarning(
|
|
542
534
|
`Fast-forward pull could not complete (${fastForwardError.message}). Continuing without blocking.`,
|
|
@@ -565,6 +557,7 @@ export async function handleAIToolWorkflow(
|
|
|
565
557
|
model: normalizedModel ?? null,
|
|
566
558
|
reasoningLevel: inferenceLevel ?? null,
|
|
567
559
|
skipPermissions: skipPermissions ?? null,
|
|
560
|
+
toolVersion: toolVersion ?? null,
|
|
568
561
|
timestamp: Date.now(),
|
|
569
562
|
repositoryRoot: repoRoot,
|
|
570
563
|
});
|
|
@@ -612,6 +605,7 @@ export async function handleAIToolWorkflow(
|
|
|
612
605
|
model: normalizedModel ?? null,
|
|
613
606
|
reasoningLevel: inferenceLevel ?? null,
|
|
614
607
|
skipPermissions: skipPermissions ?? null,
|
|
608
|
+
toolVersion: toolVersion ?? null,
|
|
615
609
|
timestamp: Date.now(),
|
|
616
610
|
repositoryRoot: repoRoot,
|
|
617
611
|
},
|
|
@@ -635,6 +629,7 @@ export async function handleAIToolWorkflow(
|
|
|
635
629
|
model?: string;
|
|
636
630
|
sessionId?: string | null;
|
|
637
631
|
chrome?: boolean;
|
|
632
|
+
version?: string | null;
|
|
638
633
|
} = {
|
|
639
634
|
mode:
|
|
640
635
|
mode === "resume"
|
|
@@ -646,6 +641,7 @@ export async function handleAIToolWorkflow(
|
|
|
646
641
|
envOverrides: sharedEnv,
|
|
647
642
|
sessionId: resumeSessionId,
|
|
648
643
|
chrome: true,
|
|
644
|
+
version: toolVersion ?? null,
|
|
649
645
|
};
|
|
650
646
|
if (normalizedModel) {
|
|
651
647
|
launchOptions.model = normalizedModel;
|
|
@@ -659,6 +655,7 @@ export async function handleAIToolWorkflow(
|
|
|
659
655
|
model?: string;
|
|
660
656
|
reasoningEffort?: CodexReasoningEffort;
|
|
661
657
|
sessionId?: string | null;
|
|
658
|
+
version?: string | null;
|
|
662
659
|
} = {
|
|
663
660
|
mode:
|
|
664
661
|
mode === "resume"
|
|
@@ -669,6 +666,7 @@ export async function handleAIToolWorkflow(
|
|
|
669
666
|
bypassApprovals: skipPermissions,
|
|
670
667
|
envOverrides: sharedEnv,
|
|
671
668
|
sessionId: resumeSessionId,
|
|
669
|
+
version: toolVersion ?? null,
|
|
672
670
|
};
|
|
673
671
|
if (normalizedModel) {
|
|
674
672
|
launchOptions.model = normalizedModel;
|
|
@@ -685,6 +683,7 @@ export async function handleAIToolWorkflow(
|
|
|
685
683
|
envOverrides?: Record<string, string>;
|
|
686
684
|
model?: string;
|
|
687
685
|
sessionId?: string | null;
|
|
686
|
+
version?: string | null;
|
|
688
687
|
} = {
|
|
689
688
|
mode:
|
|
690
689
|
mode === "resume"
|
|
@@ -695,25 +694,34 @@ export async function handleAIToolWorkflow(
|
|
|
695
694
|
skipPermissions,
|
|
696
695
|
envOverrides: sharedEnv,
|
|
697
696
|
sessionId: resumeSessionId,
|
|
697
|
+
version: toolVersion ?? null,
|
|
698
698
|
};
|
|
699
699
|
if (normalizedModel) {
|
|
700
700
|
launchOptions.model = normalizedModel;
|
|
701
701
|
}
|
|
702
702
|
launchResult = await launchGeminiCLI(worktreePath, launchOptions);
|
|
703
703
|
} else {
|
|
704
|
-
// Custom coding agent
|
|
704
|
+
// Custom coding agent (including OpenCode)
|
|
705
705
|
printInfo(`Launching custom agent: ${agentConfig.displayName}`);
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
mode
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
706
|
+
const customLaunchOptions: import("./types/tools.js").CodingAgentLaunchOptions =
|
|
707
|
+
{
|
|
708
|
+
mode:
|
|
709
|
+
mode === "resume"
|
|
710
|
+
? "resume"
|
|
711
|
+
: mode === "continue"
|
|
712
|
+
? "continue"
|
|
713
|
+
: "normal",
|
|
714
|
+
skipPermissions,
|
|
715
|
+
cwd: worktreePath,
|
|
716
|
+
sharedEnv,
|
|
717
|
+
};
|
|
718
|
+
if (toolVersion) {
|
|
719
|
+
customLaunchOptions.version = toolVersion;
|
|
720
|
+
}
|
|
721
|
+
launchResult = await launchCodingAgent(
|
|
722
|
+
agentConfig,
|
|
723
|
+
customLaunchOptions,
|
|
724
|
+
);
|
|
717
725
|
}
|
|
718
726
|
} finally {
|
|
719
727
|
// FR-043: Clear the periodic timestamp update timer
|
|
@@ -791,6 +799,7 @@ export async function handleAIToolWorkflow(
|
|
|
791
799
|
model: normalizedModel ?? null,
|
|
792
800
|
reasoningLevel: inferenceLevel ?? null,
|
|
793
801
|
skipPermissions: skipPermissions ?? null,
|
|
802
|
+
toolVersion: toolVersion ?? null,
|
|
794
803
|
timestamp: Date.now(),
|
|
795
804
|
repositoryRoot: repoRoot,
|
|
796
805
|
lastSessionId: finalSessionId,
|
|
@@ -833,7 +842,8 @@ export async function handleAIToolWorkflow(
|
|
|
833
842
|
|
|
834
843
|
// Small buffer before returning to branch list to avoid abrupt screen swap
|
|
835
844
|
await new Promise((resolve) => setTimeout(resolve, POST_SESSION_DELAY_MS));
|
|
836
|
-
printInfo("Session completed successfully.
|
|
845
|
+
printInfo("Session completed successfully.");
|
|
846
|
+
await waitForUserAcknowledgement(SUCCESS_PROMPT);
|
|
837
847
|
return;
|
|
838
848
|
} catch (error) {
|
|
839
849
|
// Handle recoverable errors (Git, Worktree, Codex errors)
|
|
@@ -851,6 +861,10 @@ export async function handleAIToolWorkflow(
|
|
|
851
861
|
type UIHandler = () => Promise<SelectionResult | undefined>;
|
|
852
862
|
type WorkflowHandler = (selection: SelectionResult) => Promise<void>;
|
|
853
863
|
|
|
864
|
+
function resolveUIHandler(): UIHandler {
|
|
865
|
+
return mainSolidUI;
|
|
866
|
+
}
|
|
867
|
+
|
|
854
868
|
function logLoopError(error: unknown, context: "ui" | "workflow"): void {
|
|
855
869
|
const label = context === "ui" ? "UI" : "workflow";
|
|
856
870
|
if (error instanceof Error) {
|
|
@@ -861,10 +875,10 @@ function logLoopError(error: unknown, context: "ui" | "workflow"): void {
|
|
|
861
875
|
}
|
|
862
876
|
|
|
863
877
|
export async function runInteractiveLoop(
|
|
864
|
-
uiHandler: UIHandler =
|
|
878
|
+
uiHandler: UIHandler = resolveUIHandler(),
|
|
865
879
|
workflowHandler: WorkflowHandler = handleAIToolWorkflow,
|
|
866
880
|
): Promise<void> {
|
|
867
|
-
// Main loop: UI →
|
|
881
|
+
// Main loop: UI → Coding Agent → back to UI
|
|
868
882
|
while (true) {
|
|
869
883
|
let selectionResult: SelectionResult | undefined;
|
|
870
884
|
|
|
@@ -895,6 +909,9 @@ export async function runInteractiveLoop(
|
|
|
895
909
|
* Main entry point
|
|
896
910
|
*/
|
|
897
911
|
export async function main(): Promise<void> {
|
|
912
|
+
// Setup global signal handlers for clean exit
|
|
913
|
+
setupExitHandlers();
|
|
914
|
+
|
|
898
915
|
// Parse command line arguments
|
|
899
916
|
const args = process.argv.slice(2);
|
|
900
917
|
const showVersionFlag = args.includes("-v") || args.includes("--version");
|
|
@@ -939,6 +956,9 @@ export async function main(): Promise<void> {
|
|
|
939
956
|
}
|
|
940
957
|
|
|
941
958
|
await runInteractiveLoop();
|
|
959
|
+
|
|
960
|
+
// Ensure clean exit with code 0
|
|
961
|
+
process.exit(0);
|
|
942
962
|
}
|
|
943
963
|
|
|
944
964
|
export function isEntryPoint(metaUrl: string, argv1?: string): boolean {
|
|
@@ -955,7 +975,9 @@ export function isEntryPoint(metaUrl: string, argv1?: string): boolean {
|
|
|
955
975
|
// Run the application if this module is executed directly
|
|
956
976
|
if (isEntryPoint(import.meta.url, process.argv[1])) {
|
|
957
977
|
main().catch(async (error) => {
|
|
958
|
-
|
|
978
|
+
const details =
|
|
979
|
+
error instanceof Error ? (error.stack ?? error.message) : String(error);
|
|
980
|
+
writeTerminalLine(`Fatal error: ${details}`, "stderr");
|
|
959
981
|
await waitForErrorAcknowledgement();
|
|
960
982
|
process.exit(1);
|
|
961
983
|
});
|
package/src/launcher.ts
CHANGED
|
@@ -6,8 +6,11 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import { execa } from "execa";
|
|
9
|
+
import chalk from "chalk";
|
|
9
10
|
import type { CodingAgent, CodingAgentLaunchOptions } from "./types/tools.js";
|
|
10
11
|
import { createLogger } from "./logging/logger.js";
|
|
12
|
+
import { resolveVersionSuffix } from "./utils/npmRegistry.js";
|
|
13
|
+
import { writeTerminalLine } from "./utils/terminal.js";
|
|
11
14
|
|
|
12
15
|
const logger = createLogger({ category: "launcher" });
|
|
13
16
|
|
|
@@ -150,9 +153,25 @@ export async function launchCodingAgent(
|
|
|
150
153
|
|
|
151
154
|
case "bunx": {
|
|
152
155
|
// bunx経由でパッケージ実行
|
|
153
|
-
//
|
|
154
|
-
|
|
155
|
-
|
|
156
|
+
// バージョン指定がある場合はパッケージ名に付与
|
|
157
|
+
const selectedVersion = options.version ?? "installed";
|
|
158
|
+
const versionSuffix = resolveVersionSuffix(options.version);
|
|
159
|
+
const packageWithVersion = `${agent.command}${versionSuffix}`;
|
|
160
|
+
|
|
161
|
+
// FR-072: Log version information
|
|
162
|
+
if (selectedVersion === "installed") {
|
|
163
|
+
writeTerminalLine(chalk.green(` 📦 Version: installed`));
|
|
164
|
+
} else {
|
|
165
|
+
writeTerminalLine(chalk.green(` 📦 Version: @${selectedVersion}`));
|
|
166
|
+
}
|
|
167
|
+
writeTerminalLine(chalk.cyan(` 🔄 Using bunx ${packageWithVersion}`));
|
|
168
|
+
|
|
169
|
+
// bunx [package@version] [args...]
|
|
170
|
+
await execa("bunx", [packageWithVersion, ...args], execaOptions);
|
|
171
|
+
logger.info(
|
|
172
|
+
{ agentId: agent.id, version: selectedVersion },
|
|
173
|
+
"Coding agent completed (bunx)",
|
|
174
|
+
);
|
|
156
175
|
break;
|
|
157
176
|
}
|
|
158
177
|
|
package/src/logging/logger.ts
CHANGED
|
@@ -31,6 +31,11 @@ export function createLogger(config: LoggerConfig = {}): Logger {
|
|
|
31
31
|
const filename = config.filename ?? `${formatDate(new Date())}.jsonl`;
|
|
32
32
|
const category = config.category ?? "default";
|
|
33
33
|
const keepDays = config.keepDays ?? 7;
|
|
34
|
+
const platform = os.platform();
|
|
35
|
+
const isWSL =
|
|
36
|
+
platform === "linux" && os.release().toLowerCase().includes("microsoft");
|
|
37
|
+
const preferDirectDestination =
|
|
38
|
+
platform === "win32" || isWSL || process.env.GWT_LOGGER_TRANSPORT === "0";
|
|
34
39
|
|
|
35
40
|
if (!fs.existsSync(logDir)) {
|
|
36
41
|
fs.mkdirSync(logDir, { recursive: true });
|
|
@@ -58,17 +63,34 @@ export function createLogger(config: LoggerConfig = {}): Logger {
|
|
|
58
63
|
return pino(options, destinationStream);
|
|
59
64
|
}
|
|
60
65
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
{
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
if (!preferDirectDestination) {
|
|
67
|
+
try {
|
|
68
|
+
const transport = pino.transport({
|
|
69
|
+
targets: [
|
|
70
|
+
{
|
|
71
|
+
target: "pino/file",
|
|
72
|
+
options: { destination, mkdir: true, append: true },
|
|
73
|
+
level,
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
return pino(options, transport);
|
|
79
|
+
} catch (error) {
|
|
80
|
+
if (process.env.DEBUG_LOGGER) {
|
|
81
|
+
console.error(
|
|
82
|
+
"Logger transport disabled; falling back to direct file destination.",
|
|
83
|
+
error instanceof Error ? error.message : String(error),
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
70
88
|
|
|
71
|
-
|
|
89
|
+
const destinationStream = pino.destination({
|
|
90
|
+
dest: destination,
|
|
91
|
+
sync: false,
|
|
92
|
+
});
|
|
93
|
+
return pino(options, destinationStream);
|
|
72
94
|
}
|
|
73
95
|
|
|
74
96
|
/** Convenience logger for quick use (category defaults to "default"). */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { renderSolidApp } from "../cli/ui/index.solid.js";
|
|
@@ -66,4 +66,12 @@ export class WorktreeRepository {
|
|
|
66
66
|
async prune(): Promise<void> {
|
|
67
67
|
await this.execute(["prune"]);
|
|
68
68
|
}
|
|
69
|
+
|
|
70
|
+
async repair(worktreePaths?: string[]): Promise<void> {
|
|
71
|
+
const args = ["repair"];
|
|
72
|
+
if (worktreePaths && worktreePaths.length > 0) {
|
|
73
|
+
args.push(...worktreePaths);
|
|
74
|
+
}
|
|
75
|
+
await this.execute(args);
|
|
76
|
+
}
|
|
69
77
|
}
|