@akiojin/gwt 4.0.0 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/README.ja.md +0 -1
  2. package/README.md +0 -1
  3. package/dist/claude.d.ts +21 -0
  4. package/dist/claude.d.ts.map +1 -1
  5. package/dist/claude.js +73 -30
  6. package/dist/claude.js.map +1 -1
  7. package/dist/cli/ui/components/common/Select.d.ts +6 -0
  8. package/dist/cli/ui/components/common/Select.d.ts.map +1 -1
  9. package/dist/cli/ui/components/common/Select.js +3 -2
  10. package/dist/cli/ui/components/common/Select.js.map +1 -1
  11. package/dist/cli/ui/components/screens/AIToolSelectorScreen.d.ts +6 -0
  12. package/dist/cli/ui/components/screens/AIToolSelectorScreen.d.ts.map +1 -1
  13. package/dist/cli/ui/components/screens/AIToolSelectorScreen.js +3 -2
  14. package/dist/cli/ui/components/screens/AIToolSelectorScreen.js.map +1 -1
  15. package/dist/cli/ui/components/screens/BatchMergeProgressScreen.d.ts +3 -0
  16. package/dist/cli/ui/components/screens/BatchMergeProgressScreen.d.ts.map +1 -1
  17. package/dist/cli/ui/components/screens/BatchMergeProgressScreen.js +3 -2
  18. package/dist/cli/ui/components/screens/BatchMergeProgressScreen.js.map +1 -1
  19. package/dist/cli/ui/components/screens/BatchMergeResultScreen.d.ts +3 -0
  20. package/dist/cli/ui/components/screens/BatchMergeResultScreen.d.ts.map +1 -1
  21. package/dist/cli/ui/components/screens/BatchMergeResultScreen.js +3 -2
  22. package/dist/cli/ui/components/screens/BatchMergeResultScreen.js.map +1 -1
  23. package/dist/cli/ui/components/screens/BranchCreatorScreen.d.ts +3 -0
  24. package/dist/cli/ui/components/screens/BranchCreatorScreen.d.ts.map +1 -1
  25. package/dist/cli/ui/components/screens/BranchCreatorScreen.js +3 -2
  26. package/dist/cli/ui/components/screens/BranchCreatorScreen.js.map +1 -1
  27. package/dist/cli/ui/components/screens/BranchListScreen.d.ts +3 -0
  28. package/dist/cli/ui/components/screens/BranchListScreen.d.ts.map +1 -1
  29. package/dist/cli/ui/components/screens/BranchListScreen.js +3 -4
  30. package/dist/cli/ui/components/screens/BranchListScreen.js.map +1 -1
  31. package/dist/cli/ui/components/screens/BranchQuickStartScreen.d.ts +10 -1
  32. package/dist/cli/ui/components/screens/BranchQuickStartScreen.d.ts.map +1 -1
  33. package/dist/cli/ui/components/screens/BranchQuickStartScreen.js +7 -22
  34. package/dist/cli/ui/components/screens/BranchQuickStartScreen.js.map +1 -1
  35. package/dist/cli/ui/components/screens/EnvironmentProfileScreen.d.ts +3 -0
  36. package/dist/cli/ui/components/screens/EnvironmentProfileScreen.d.ts.map +1 -1
  37. package/dist/cli/ui/components/screens/EnvironmentProfileScreen.js +3 -2
  38. package/dist/cli/ui/components/screens/EnvironmentProfileScreen.js.map +1 -1
  39. package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.d.ts +15 -0
  40. package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.d.ts.map +1 -1
  41. package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.js +3 -2
  42. package/dist/cli/ui/components/screens/ExecutionModeSelectorScreen.js.map +1 -1
  43. package/dist/cli/ui/components/screens/ModelSelectorScreen.d.ts +6 -0
  44. package/dist/cli/ui/components/screens/ModelSelectorScreen.d.ts.map +1 -1
  45. package/dist/cli/ui/components/screens/ModelSelectorScreen.js +3 -2
  46. package/dist/cli/ui/components/screens/ModelSelectorScreen.js.map +1 -1
  47. package/dist/cli/ui/components/screens/PRCleanupScreen.d.ts +6 -0
  48. package/dist/cli/ui/components/screens/PRCleanupScreen.d.ts.map +1 -1
  49. package/dist/cli/ui/components/screens/PRCleanupScreen.js +3 -2
  50. package/dist/cli/ui/components/screens/PRCleanupScreen.js.map +1 -1
  51. package/dist/cli/ui/components/screens/SessionSelectorScreen.d.ts +6 -0
  52. package/dist/cli/ui/components/screens/SessionSelectorScreen.d.ts.map +1 -1
  53. package/dist/cli/ui/components/screens/SessionSelectorScreen.js +3 -2
  54. package/dist/cli/ui/components/screens/SessionSelectorScreen.js.map +1 -1
  55. package/dist/cli/ui/hooks/useAppInput.d.ts +20 -0
  56. package/dist/cli/ui/hooks/useAppInput.d.ts.map +1 -0
  57. package/dist/cli/ui/hooks/useAppInput.js +137 -0
  58. package/dist/cli/ui/hooks/useAppInput.js.map +1 -0
  59. package/dist/cli/ui/screens/BranchActionSelectorScreen.d.ts +3 -0
  60. package/dist/cli/ui/screens/BranchActionSelectorScreen.d.ts.map +1 -1
  61. package/dist/cli/ui/screens/BranchActionSelectorScreen.js +3 -2
  62. package/dist/cli/ui/screens/BranchActionSelectorScreen.js.map +1 -1
  63. package/dist/cli/ui/utils/branchFormatter.d.ts.map +1 -1
  64. package/dist/cli/ui/utils/branchFormatter.js +0 -2
  65. package/dist/cli/ui/utils/branchFormatter.js.map +1 -1
  66. package/dist/client/assets/{index-f5D2XwDh.js → index-v8smkNOL.js} +16 -16
  67. package/dist/client/index.html +1 -1
  68. package/dist/codex.d.ts +32 -0
  69. package/dist/codex.d.ts.map +1 -1
  70. package/dist/codex.js +32 -1
  71. package/dist/codex.js.map +1 -1
  72. package/dist/config/builtin-tools.d.ts +1 -7
  73. package/dist/config/builtin-tools.d.ts.map +1 -1
  74. package/dist/config/builtin-tools.js +1 -20
  75. package/dist/config/builtin-tools.js.map +1 -1
  76. package/dist/config/tools.d.ts.map +1 -1
  77. package/dist/config/tools.js +1 -4
  78. package/dist/config/tools.js.map +1 -1
  79. package/dist/gemini.d.ts +17 -0
  80. package/dist/gemini.d.ts.map +1 -1
  81. package/dist/gemini.js +21 -21
  82. package/dist/gemini.js.map +1 -1
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +0 -5
  85. package/dist/index.js.map +1 -1
  86. package/dist/utils/command.d.ts +10 -0
  87. package/dist/utils/command.d.ts.map +1 -0
  88. package/dist/utils/command.js +25 -0
  89. package/dist/utils/command.js.map +1 -0
  90. package/dist/utils/session/index.d.ts +0 -2
  91. package/dist/utils/session/index.d.ts.map +1 -1
  92. package/dist/utils/session/index.js +0 -3
  93. package/dist/utils/session/index.js.map +1 -1
  94. package/dist/utils/session/parsers/index.d.ts +0 -1
  95. package/dist/utils/session/parsers/index.d.ts.map +1 -1
  96. package/dist/utils/session/parsers/index.js +0 -2
  97. package/dist/utils/session/parsers/index.js.map +1 -1
  98. package/dist/utils/session.d.ts +0 -1
  99. package/dist/utils/session.d.ts.map +1 -1
  100. package/dist/utils/session.js +0 -1
  101. package/dist/utils/session.js.map +1 -1
  102. package/dist/utils/terminal.d.ts +34 -0
  103. package/dist/utils/terminal.d.ts.map +1 -1
  104. package/dist/utils/terminal.js +51 -4
  105. package/dist/utils/terminal.js.map +1 -1
  106. package/dist/web/client/src/components/branch-detail/BranchInfoCards.d.ts.map +1 -1
  107. package/dist/web/client/src/components/branch-detail/BranchInfoCards.js +0 -2
  108. package/dist/web/client/src/components/branch-detail/BranchInfoCards.js.map +1 -1
  109. package/package.json +1 -1
  110. package/src/claude.ts +92 -34
  111. package/src/cli/ui/__tests__/components/App.protected-branch.test.tsx +3 -1
  112. package/src/cli/ui/__tests__/components/ModelSelectorScreen.initial.test.tsx +8 -5
  113. package/src/cli/ui/components/common/Select.tsx +9 -2
  114. package/src/cli/ui/components/screens/AIToolSelectorScreen.tsx +9 -2
  115. package/src/cli/ui/components/screens/BatchMergeProgressScreen.tsx +6 -2
  116. package/src/cli/ui/components/screens/BatchMergeResultScreen.tsx +6 -2
  117. package/src/cli/ui/components/screens/BranchCreatorScreen.tsx +6 -2
  118. package/src/cli/ui/components/screens/BranchListScreen.tsx +6 -4
  119. package/src/cli/ui/components/screens/BranchQuickStartScreen.tsx +17 -26
  120. package/src/cli/ui/components/screens/EnvironmentProfileScreen.tsx +6 -2
  121. package/src/cli/ui/components/screens/ExecutionModeSelectorScreen.tsx +18 -2
  122. package/src/cli/ui/components/screens/ModelSelectorScreen.tsx +9 -2
  123. package/src/cli/ui/components/screens/PRCleanupScreen.tsx +9 -2
  124. package/src/cli/ui/components/screens/SessionSelectorScreen.tsx +9 -2
  125. package/src/cli/ui/hooks/useAppInput.ts +171 -0
  126. package/src/cli/ui/screens/BranchActionSelectorScreen.tsx +6 -2
  127. package/src/cli/ui/screens/__tests__/BranchActionSelectorScreen.test.tsx +68 -1
  128. package/src/cli/ui/utils/branchFormatter.ts +0 -1
  129. package/src/cli/ui/utils/modelOptions.test.ts +1 -1
  130. package/src/codex.ts +40 -1
  131. package/src/config/builtin-tools.ts +1 -21
  132. package/src/config/tools.ts +1 -5
  133. package/src/gemini.ts +25 -21
  134. package/src/index.ts +0 -6
  135. package/src/utils/command.ts +26 -0
  136. package/src/utils/session/index.ts +0 -4
  137. package/src/utils/session/parsers/index.ts +0 -3
  138. package/src/utils/session.ts +0 -1
  139. package/src/utils/terminal.ts +65 -4
  140. package/src/web/client/src/components/branch-detail/BranchInfoCards.tsx +0 -1
  141. package/dist/qwen.d.ts +0 -16
  142. package/dist/qwen.d.ts.map +0 -1
  143. package/dist/qwen.js +0 -202
  144. package/dist/qwen.js.map +0 -1
  145. package/dist/utils/session/parsers/qwen.d.ts +0 -21
  146. package/dist/utils/session/parsers/qwen.d.ts.map +0 -1
  147. package/dist/utils/session/parsers/qwen.js +0 -36
  148. package/dist/utils/session/parsers/qwen.js.map +0 -1
  149. package/src/qwen.ts +0 -273
  150. package/src/utils/session/parsers/qwen.ts +0 -54
@@ -0,0 +1,25 @@
1
+ import { execa } from "execa";
2
+ /**
3
+ * Checks whether a command is available in the current PATH.
4
+ *
5
+ * Uses `where` on Windows and `which` on other platforms.
6
+ *
7
+ * @param commandName - Command name to look up (e.g. `claude`, `npx`, `gemini`)
8
+ * @returns true if the command exists in PATH
9
+ */
10
+ export async function isCommandAvailable(commandName) {
11
+ try {
12
+ const command = process.platform === "win32" ? "where" : "which";
13
+ await execa(command, [commandName], {
14
+ shell: true,
15
+ stdin: "ignore",
16
+ stdout: "ignore",
17
+ stderr: "ignore",
18
+ });
19
+ return true;
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ }
25
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/utils/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QACjE,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE;YAClC,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -5,12 +5,10 @@
5
5
  * - Claude Code
6
6
  * - Codex CLI
7
7
  * - Gemini CLI
8
- * - Qwen CLI
9
8
  */
10
9
  export type { SessionSearchOptions, SessionInfo, ClaudeSessionInfo, CodexSessionInfo, GeminiSessionInfo, } from "./types.js";
11
10
  export { isValidUuidSessionId } from "./common.js";
12
11
  export { encodeClaudeProjectPath, findLatestClaudeSession, findLatestClaudeSessionId, waitForClaudeSessionId, claudeSessionFileExists, } from "./parsers/claude.js";
13
12
  export { findLatestCodexSession, findLatestCodexSessionId, waitForCodexSessionId, } from "./parsers/codex.js";
14
13
  export { findLatestGeminiSession, findLatestGeminiSessionId, } from "./parsers/gemini.js";
15
- export { findLatestQwenSessionId } from "./parsers/qwen.js";
16
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,YAAY,EACV,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGnD,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,YAAY,EACV,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGnD,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC"}
@@ -5,7 +5,6 @@
5
5
  * - Claude Code
6
6
  * - Codex CLI
7
7
  * - Gemini CLI
8
- * - Qwen CLI
9
8
  */
10
9
  // Common utilities
11
10
  export { isValidUuidSessionId } from "./common.js";
@@ -15,6 +14,4 @@ export { encodeClaudeProjectPath, findLatestClaudeSession, findLatestClaudeSessi
15
14
  export { findLatestCodexSession, findLatestCodexSessionId, waitForCodexSessionId, } from "./parsers/codex.js";
16
15
  // Gemini CLI parser
17
16
  export { findLatestGeminiSession, findLatestGeminiSessionId, } from "./parsers/gemini.js";
18
- // Qwen CLI parser
19
- export { findLatestQwenSessionId } from "./parsers/qwen.js";
20
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH,mBAAmB;AACnB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,qBAAqB;AACrB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAE7B,mBAAmB;AACnB,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,oBAAoB;AACpB,OAAO,EACL,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAE7B,kBAAkB;AAClB,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,mBAAmB;AACnB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,qBAAqB;AACrB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAE7B,mBAAmB;AACnB,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,oBAAoB;AACpB,OAAO,EACL,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC"}
@@ -4,5 +4,4 @@
4
4
  export { encodeClaudeProjectPath, findLatestClaudeSession, findLatestClaudeSessionId, waitForClaudeSessionId, claudeSessionFileExists, } from "./claude.js";
5
5
  export { findLatestCodexSession, findLatestCodexSessionId, waitForCodexSessionId, } from "./codex.js";
6
6
  export { findLatestGeminiSession, findLatestGeminiSessionId, } from "./gemini.js";
7
- export { findLatestQwenSessionId } from "./qwen.js";
8
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/session/parsers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/session/parsers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,aAAa,CAAC"}
@@ -7,6 +7,4 @@ export { encodeClaudeProjectPath, findLatestClaudeSession, findLatestClaudeSessi
7
7
  export { findLatestCodexSession, findLatestCodexSessionId, waitForCodexSessionId, } from "./codex.js";
8
8
  // Gemini CLI
9
9
  export { findLatestGeminiSession, findLatestGeminiSessionId, } from "./gemini.js";
10
- // Qwen CLI
11
- export { findLatestQwenSessionId } from "./qwen.js";
12
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/session/parsers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc;AACd,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAErB,YAAY;AACZ,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAEpB,aAAa;AACb,OAAO,EACL,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAErB,WAAW;AACX,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/session/parsers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc;AACd,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAErB,YAAY;AACZ,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAEpB,aAAa;AACb,OAAO,EACL,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,aAAa,CAAC"}
@@ -11,7 +11,6 @@
11
11
  * - ./session/parsers/claude.js - Claude-specific functions
12
12
  * - ./session/parsers/codex.js - Codex-specific functions
13
13
  * - ./session/parsers/gemini.js - Gemini-specific functions
14
- * - ./session/parsers/qwen.js - Qwen-specific functions
15
14
  */
16
15
  export * from "./session/index.js";
17
16
  //# sourceMappingURL=session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,cAAc,oBAAoB,CAAC"}
@@ -11,7 +11,6 @@
11
11
  * - ./session/parsers/claude.js - Claude-specific functions
12
12
  * - ./session/parsers/codex.js - Codex-specific functions
13
13
  * - ./session/parsers/gemini.js - Gemini-specific functions
14
- * - ./session/parsers/qwen.js - Qwen-specific functions
15
14
  */
16
15
  export * from "./session/index.js";
17
16
  //# sourceMappingURL=session.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,cAAc,oBAAoB,CAAC"}
@@ -1,3 +1,10 @@
1
+ /**
2
+ * Terminal streams used by the CLI (stdin/stdout/stderr) and their raw-mode
3
+ * teardown helper.
4
+ *
5
+ * When the current process is not a TTY, this may fall back to `/dev/tty` so
6
+ * interactive child processes can still read/write correctly.
7
+ */
1
8
  export interface TerminalStreams {
2
9
  stdin: NodeJS.ReadStream;
3
10
  stdout: NodeJS.WriteStream;
@@ -8,6 +15,10 @@ export interface TerminalStreams {
8
15
  usingFallback: boolean;
9
16
  exitRawMode: () => void;
10
17
  }
18
+ /**
19
+ * Stdio configuration for launching an interactive child process (via `execa`),
20
+ * plus a cleanup hook to be called after the child exits.
21
+ */
11
22
  export interface ChildStdio {
12
23
  stdin: "inherit" | {
13
24
  file: string;
@@ -23,7 +34,30 @@ export interface ChildStdio {
23
34
  };
24
35
  cleanup: () => void;
25
36
  }
37
+ /**
38
+ * Returns cached terminal streams and falls back to `/dev/tty` when needed.
39
+ */
26
40
  export declare function getTerminalStreams(): TerminalStreams;
41
+ /**
42
+ * Best-effort terminal mode reset for interactive sessions.
43
+ *
44
+ * This writes a small ANSI sequence to restore cursor-key/keypad modes, which
45
+ * helps prevent broken arrow-key behavior on some Windows/WSL2 terminals after
46
+ * interactive CLIs exit.
47
+ */
48
+ export declare function resetTerminalModes(stdout: NodeJS.WriteStream | undefined): void;
49
+ /**
50
+ * Creates stdio settings for launching a child process.
51
+ *
52
+ * When terminal streams are backed by `/dev/tty`, forwards those file
53
+ * descriptors to the child so it remains interactive.
54
+ */
27
55
  export declare function createChildStdio(): ChildStdio;
56
+ /**
57
+ * Prints a message and waits for the user to press Enter when running in an
58
+ * interactive terminal.
59
+ *
60
+ * Useful for pausing on errors while ensuring raw mode is disabled.
61
+ */
28
62
  export declare function waitForUserAcknowledgement(message?: string): Promise<void>;
29
63
  //# sourceMappingURL=terminal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/utils/terminal.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAMD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,SAAS,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACtD,MAAM,EAAE,SAAS,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACvD,MAAM,EAAE,SAAS,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACvD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AA+ID,wBAAgB,kBAAkB,IAAI,eAAe,CAKpD;AAED,wBAAgB,gBAAgB,IAAI,UAAU,CAkB7C;AAMD,wBAAsB,0BAA0B,CAC9C,OAAO,GAAE,MAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CAyCf"}
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/utils/terminal.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAWD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,SAAS,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACtD,MAAM,EAAE,SAAS,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACvD,MAAM,EAAE,SAAS,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACvD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AA+ID;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,CAKpD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,CAAC,WAAW,GAAG,SAAS,GACrC,IAAI,CAYN;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,CAkB7C;AAMD;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,GAAE,MAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CAgDf"}
@@ -2,6 +2,11 @@ import fs from "node:fs";
2
2
  import { platform } from "node:os";
3
3
  import { ReadStream, WriteStream } from "node:tty";
4
4
  const DEV_TTY_PATH = "/dev/tty";
5
+ // 端末モードのリセット:
6
+ // - ESC[?1l: application cursor keys (DECCKM) を無効化
7
+ // - ESC>: keypad mode を normal/numeric に戻す
8
+ // WSL2/Windowsの矢印キー入力が壊れるケースを抑止する。
9
+ const TERMINAL_RESET_SEQUENCE = "\u001b[?1l\u001b>";
5
10
  let cachedStreams = null;
6
11
  const DEFAULT_ACK_MESSAGE = "Review the error details, then press Enter to continue...";
7
12
  function isProcessTTY() {
@@ -140,12 +145,42 @@ function createTerminalStreams() {
140
145
  };
141
146
  }
142
147
  }
148
+ /**
149
+ * Returns cached terminal streams and falls back to `/dev/tty` when needed.
150
+ */
143
151
  export function getTerminalStreams() {
144
152
  if (!cachedStreams) {
145
153
  cachedStreams = createTerminalStreams();
146
154
  }
147
155
  return cachedStreams;
148
156
  }
157
+ /**
158
+ * Best-effort terminal mode reset for interactive sessions.
159
+ *
160
+ * This writes a small ANSI sequence to restore cursor-key/keypad modes, which
161
+ * helps prevent broken arrow-key behavior on some Windows/WSL2 terminals after
162
+ * interactive CLIs exit.
163
+ */
164
+ export function resetTerminalModes(stdout) {
165
+ if (!stdout || typeof stdout.write !== "function") {
166
+ return;
167
+ }
168
+ if (!("isTTY" in stdout) || !stdout.isTTY) {
169
+ return;
170
+ }
171
+ try {
172
+ stdout.write(TERMINAL_RESET_SEQUENCE);
173
+ }
174
+ catch {
175
+ // Ignore terminal reset errors.
176
+ }
177
+ }
178
+ /**
179
+ * Creates stdio settings for launching a child process.
180
+ *
181
+ * When terminal streams are backed by `/dev/tty`, forwards those file
182
+ * descriptors to the child so it remains interactive.
183
+ */
149
184
  export function createChildStdio() {
150
185
  const terminal = getTerminalStreams();
151
186
  if (!terminal.usingFallback) {
@@ -166,6 +201,12 @@ export function createChildStdio() {
166
201
  function isInteractive(stream) {
167
202
  return Boolean(stream.isTTY);
168
203
  }
204
+ /**
205
+ * Prints a message and waits for the user to press Enter when running in an
206
+ * interactive terminal.
207
+ *
208
+ * Useful for pausing on errors while ensuring raw mode is disabled.
209
+ */
169
210
  export async function waitForUserAcknowledgement(message = DEFAULT_ACK_MESSAGE) {
170
211
  const terminal = getTerminalStreams();
171
212
  const stdin = terminal.stdin;
@@ -178,19 +219,24 @@ export async function waitForUserAcknowledgement(message = DEFAULT_ACK_MESSAGE)
178
219
  }
179
220
  terminal.exitRawMode();
180
221
  await new Promise((resolve) => {
181
- const cleanup = () => {
222
+ let finished = false;
223
+ function cleanup() {
224
+ if (finished) {
225
+ return;
226
+ }
227
+ finished = true;
182
228
  stdin.removeListener("data", onData);
183
229
  if (typeof stdin.pause === "function") {
184
230
  stdin.pause();
185
231
  }
186
- };
187
- const onData = (chunk) => {
232
+ }
233
+ function onData(chunk) {
188
234
  const data = typeof chunk === "string" ? chunk : chunk.toString("utf8");
189
235
  if (data.includes("\n") || data.includes("\r")) {
190
236
  cleanup();
191
237
  resolve();
192
238
  }
193
- };
239
+ }
194
240
  if (typeof stdout?.write === "function") {
195
241
  stdout.write(`\n${message}\n`);
196
242
  }
@@ -198,6 +244,7 @@ export async function waitForUserAcknowledgement(message = DEFAULT_ACK_MESSAGE)
198
244
  stdin.resume();
199
245
  }
200
246
  stdin.on("data", onData);
247
+ process.once("exit", cleanup);
201
248
  });
202
249
  }
203
250
  //# sourceMappingURL=terminal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/utils/terminal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/utils/terminal.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"BranchInfoCards.d.ts","sourceRoot":"","sources":["../../../../../../src/web/client/src/components/branch-detail/BranchInfoCards.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEzE,UAAU,oBAAoB;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,aAAa,GAAG,IAAI,CAAC;CACvC;AAqCD,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,mBAAmB,EACnB,eAAe,GAChB,EAAE,oBAAoB,qBAgItB"}
1
+ {"version":3,"file":"BranchInfoCards.d.ts","sourceRoot":"","sources":["../../../../../../src/web/client/src/components/branch-detail/BranchInfoCards.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEzE,UAAU,oBAAoB;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,aAAa,GAAG,IAAI,CAAC;CACvC;AAoCD,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,mBAAmB,EACnB,eAAe,GAChB,EAAE,oBAAoB,qBAgItB"}
@@ -8,8 +8,6 @@ function mapToolLabel(toolId, toolLabel) {
8
8
  return "Codex";
9
9
  if (toolId === "gemini-cli")
10
10
  return "Gemini";
11
- if (toolId === "qwen-cli")
12
- return "Qwen";
13
11
  if (toolLabel)
14
12
  return toolLabel;
15
13
  return "Custom";
@@ -1 +1 @@
1
- {"version":3,"file":"BranchInfoCards.js","sourceRoot":"","sources":["../../../../../../src/web/client/src/components/branch-detail/BranchInfoCards.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAS9C,SAAS,YAAY,CAAC,MAAc,EAAE,SAAyB;IAC7D,IAAI,MAAM,KAAK,aAAa;QAAE,OAAO,QAAQ,CAAC;IAC9C,IAAI,MAAM,KAAK,WAAW;QAAE,OAAO,OAAO,CAAC;IAC3C,IAAI,MAAM,KAAK,YAAY;QAAE,OAAO,QAAQ,CAAC;IAC7C,IAAI,MAAM,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC;IACzC,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,eAAe,CAAC,KAAoB;IAC3C,MAAM,SAAS,GACb,KAAK,CAAC,IAAI,KAAK,QAAQ;QACrB,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU;YACzB,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ;gBACvB,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,IAAI,CAAC;IACf,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7D,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAa;IACzC,IAAI,CAAC;QACH,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;YACtC,KAAK,EAAE,OAAO;YACd,GAAG,EAAE,SAAS;YACd,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAC9B,MAAM,EACN,mBAAmB,EACnB,eAAe,GACM;IACrB,OAAO,CACL,6BAAK,SAAS,EAAC,2BAA2B;QAExC,oBAAC,IAAI;YACH,oBAAC,UAAU,IAAC,SAAS,EAAC,MAAM;gBAC1B,2BAAG,SAAS,EAAC,oEAAoE,sBAE7E;gBACJ,4BAAI,SAAS,EAAC,uBAAuB,6DAAe,CACzC;YACb,oBAAC,WAAW;gBACV,4BAAI,SAAS,EAAC,oBAAoB;oBAChC,6BAAK,SAAS,EAAC,qDAAqD;wBAClE,4BAAI,SAAS,EAAC,uBAAuB,+BAAU;wBAC/C,4BAAI,SAAS,EAAC,mBAAmB,IAAE,MAAM,CAAC,UAAU,CAAM,CACtD;oBACN,6BAAK,SAAS,EAAC,qDAAqD;wBAClE,4BAAI,SAAS,EAAC,uBAAuB,aAAY;wBACjD,gCAAK,MAAM,CAAC,MAAM,IAAI,KAAK,CAAM,CAC7B;oBACN,6BAAK,SAAS,EAAC,qDAAqD;wBAClE,4BAAI,SAAS,EAAC,uBAAuB,yBAAS;wBAC9C,gCAAK,mBAAmB,CAAM,CAC1B;oBACN,6BAAK,SAAS,EAAC,sBAAsB;wBACnC,4BAAI,SAAS,EAAC,uBAAuB,eAAc;wBACnD,4BACE,SAAS,EAAC,mCAAmC,EAC7C,KAAK,EAAE,MAAM,CAAC,YAAY,IAAI,SAAS,IAEtC,MAAM,CAAC,YAAY,IAAI,KAAK,CAC1B,CACD,CACH,CACO,CACT;QAGP,oBAAC,IAAI;YACH,oBAAC,UAAU,IAAC,SAAS,EAAC,MAAM;gBAC1B,2BAAG,SAAS,EAAC,oEAAoE,oBAE7E;gBACJ,4BAAI,SAAS,EAAC,uBAAuB,2CAAY,CACtC;YACb,oBAAC,WAAW;gBACV,2BAAG,SAAS,EAAC,+BAA+B,IACzC,MAAM,CAAC,aAAa,IAAI,kBAAkB,CACzC,CACQ,CACT;QAGN,MAAM,CAAC,UAAU,IAAI,CACpB,oBAAC,IAAI;YACH,oBAAC,UAAU,IAAC,SAAS,EAAC,MAAM;gBAC1B,2BAAG,SAAS,EAAC,oEAAoE,iBAE7E;gBACJ,4BAAI,SAAS,EAAC,uBAAuB,+BAAU,CACpC;YACb,oBAAC,WAAW;gBACV,6BAAK,SAAS,EAAC,sBAAsB;oBACnC,oBAAC,KAAK,IAAC,OAAO,EAAC,SAAS;;wBAAU,MAAM,CAAC,UAAU,CAAC,KAAK,CAAS;oBAClE,oBAAC,KAAK,IAAC,OAAO,EAAC,SAAS;;wBACZ,MAAM,CAAC,UAAU,CAAC,MAAM,CAC5B;oBACR,oBAAC,KAAK,IACJ,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,IAE1D,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CACrC,CACJ,CACM,CACT,CACR;QAGD,oBAAC,IAAI;YACH,oBAAC,UAAU,IAAC,SAAS,EAAC,MAAM;gBAC1B,2BAAG,SAAS,EAAC,oEAAoE,eAE7E;gBACJ,4BAAI,SAAS,EAAC,uBAAuB,2BAAgB,CAC1C;YACb,oBAAC,WAAW,IAAC,SAAS,EAAC,yCAAyC;gBAC9D;;oBACM,GAAG;oBACP,gCAAQ,SAAS,EAAC,iBAAiB,IAChC,MAAM,CAAC,YAAY,IAAI,KAAK,CACtB,CACP;gBACJ,4BAAI,SAAS,EAAC,yCAAyC;oBACrD,uMAAsC;oBACtC,qLAAwC,CACrC,CACO,CACT;QAGN,eAAe,IAAI,CAClB,oBAAC,IAAI,IAAC,SAAS,EAAC,eAAe;YAC7B,oBAAC,UAAU,IAAC,SAAS,EAAC,MAAM;gBAC1B,2BAAG,SAAS,EAAC,oEAAoE,oBAE7E;gBACJ,4BAAI,SAAS,EAAC,uBAAuB,iDAAa,CACvC;YACb,oBAAC,WAAW;gBACV,6BAAK,SAAS,EAAC,2CAA2C;oBACxD,oBAAC,KAAK,IAAC,OAAO,EAAC,SAAS,IACrB,eAAe,CAAC,eAAe,CAAC,CAC3B;oBACR,8BAAM,SAAS,EAAC,uBAAuB,IACpC,oBAAoB,CAAC,eAAe,CAAC,SAAS,CAAC,CAC3C;oBACN,eAAe,CAAC,YAAY,IAAI,CAC/B,8BAAM,SAAS,EAAC,+BAA+B;;wBAC1C,eAAe,CAAC,YAAY,CAC1B,CACR,CACG,CACM,CACT,CACR,CACG,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"BranchInfoCards.js","sourceRoot":"","sources":["../../../../../../src/web/client/src/components/branch-detail/BranchInfoCards.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akiojin/gwt",
3
- "version": "4.0.0",
3
+ "version": "4.0.1",
4
4
  "description": "Interactive Git worktree manager for Claude Code with graphical branch selection",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
package/src/claude.ts CHANGED
@@ -1,10 +1,20 @@
1
- import { execa } from "execa";
1
+ import { execa, type Options as ExecaOptions } from "execa";
2
2
  import chalk from "chalk";
3
3
  import { existsSync } from "fs";
4
- import { createChildStdio, getTerminalStreams } from "./utils/terminal.js";
4
+ import {
5
+ createChildStdio,
6
+ getTerminalStreams,
7
+ resetTerminalModes,
8
+ } from "./utils/terminal.js";
9
+ import { isCommandAvailable } from "./utils/command.js";
5
10
  import { findLatestClaudeSession } from "./utils/session.js";
6
11
 
7
12
  const CLAUDE_CLI_PACKAGE = "@anthropic-ai/claude-code@latest";
13
+
14
+ /**
15
+ * Error wrapper used by `launchClaudeCode` to preserve the original failure
16
+ * while providing a user-friendly message.
17
+ */
8
18
  export class ClaudeError extends Error {
9
19
  constructor(
10
20
  message: string,
@@ -15,6 +25,20 @@ export class ClaudeError extends Error {
15
25
  }
16
26
  }
17
27
 
28
+ /**
29
+ * Launches Claude Code in the given worktree path.
30
+ *
31
+ * This function:
32
+ * - validates the worktree path
33
+ * - normalizes launch arguments (mode/model/session/extra args)
34
+ * - resets terminal modes before and after the child process
35
+ * - auto-detects a local `claude` command and falls back to `npx` (Windows) or
36
+ * `bunx` when needed
37
+ *
38
+ * @param worktreePath - Worktree directory to run Claude Code in
39
+ * @param options - Launch options (mode/session/model/permissions/env)
40
+ * @returns Captured session id when available
41
+ */
18
42
  export async function launchClaudeCode(
19
43
  worktreePath: string,
20
44
  options: {
@@ -175,6 +199,7 @@ export async function launchClaudeCode(
175
199
  console.log(chalk.gray(` 📋 Args: ${args.join(" ")}`));
176
200
 
177
201
  terminal.exitRawMode();
202
+ resetTerminalModes(terminal.stdout);
178
203
 
179
204
  const baseEnv = { ...process.env, ...(options.envOverrides ?? {}) };
180
205
  const launchEnvSource =
@@ -191,26 +216,58 @@ export async function launchClaudeCode(
191
216
 
192
217
  // Auto-detect locally installed claude command
193
218
  const hasLocalClaude = await isClaudeCommandAvailable();
219
+ const hasNpx =
220
+ process.platform === "win32" ? await isNpxCommandAvailable() : false;
221
+
222
+ const execInteractive = async (
223
+ file: string,
224
+ fileArgs: string[],
225
+ execOptions: Omit<ExecaOptions, "shell">,
226
+ ) => {
227
+ if (process.platform !== "win32") {
228
+ await execa(file, fileArgs, { ...execOptions, shell: true });
229
+ return;
230
+ }
231
+
232
+ try {
233
+ await execa(file, fileArgs, { ...execOptions, shell: false });
234
+ return;
235
+ } catch (error: unknown) {
236
+ const err = error as NodeJS.ErrnoException;
237
+ if (err?.code === "ENOENT" || err?.code === "EINVAL") {
238
+ await execa(file, fileArgs, { ...execOptions, shell: true });
239
+ return;
240
+ }
241
+ throw error;
242
+ }
243
+ };
194
244
 
195
245
  try {
196
246
  if (hasLocalClaude) {
197
247
  console.log(
198
248
  chalk.green(" ✨ Using locally installed claude command"),
199
249
  );
200
- await execa("claude", args, {
250
+ await execInteractive("claude", args, {
201
251
  cwd: worktreePath,
202
- shell: true,
203
252
  stdin: childStdio.stdin,
204
253
  stdout: childStdio.stdout,
205
254
  stderr: childStdio.stderr,
206
255
  env: launchEnv,
207
256
  });
208
257
  } else {
209
- console.log(
210
- chalk.cyan(
211
- " 🔄 Falling back to bunx @anthropic-ai/claude-code@latest",
212
- ),
213
- );
258
+ if (hasNpx) {
259
+ console.log(
260
+ chalk.cyan(
261
+ " 🔄 Falling back to npx @anthropic-ai/claude-code@latest",
262
+ ),
263
+ );
264
+ } else {
265
+ console.log(
266
+ chalk.cyan(
267
+ " 🔄 Falling back to bunx @anthropic-ai/claude-code@latest",
268
+ ),
269
+ );
270
+ }
214
271
  console.log(
215
272
  chalk.yellow(
216
273
  " 💡 Recommended: Install Claude Code via official method for faster startup",
@@ -231,14 +288,23 @@ export async function launchClaudeCode(
231
288
  );
232
289
  console.log("");
233
290
  await new Promise((resolve) => setTimeout(resolve, 2000));
234
- await execa("bunx", [CLAUDE_CLI_PACKAGE, ...args], {
235
- cwd: worktreePath,
236
- shell: true,
237
- stdin: childStdio.stdin,
238
- stdout: childStdio.stdout,
239
- stderr: childStdio.stderr,
240
- env: launchEnv,
241
- });
291
+ if (hasNpx) {
292
+ await execInteractive("npx", ["-y", CLAUDE_CLI_PACKAGE, ...args], {
293
+ cwd: worktreePath,
294
+ stdin: childStdio.stdin,
295
+ stdout: childStdio.stdout,
296
+ stderr: childStdio.stderr,
297
+ env: launchEnv,
298
+ });
299
+ } else {
300
+ await execInteractive("bunx", [CLAUDE_CLI_PACKAGE, ...args], {
301
+ cwd: worktreePath,
302
+ stdin: childStdio.stdin,
303
+ stdout: childStdio.stdout,
304
+ stderr: childStdio.stderr,
305
+ env: launchEnv,
306
+ });
307
+ }
242
308
  }
243
309
  } finally {
244
310
  childStdio.cleanup();
@@ -327,29 +393,21 @@ export async function launchClaudeCode(
327
393
  throw new ClaudeError(errorMessage, error);
328
394
  } finally {
329
395
  terminal.exitRawMode();
396
+ resetTerminalModes(terminal.stdout);
330
397
  }
331
398
  }
332
399
 
333
- /**
334
- * Check if locally installed `claude` command is available
335
- * @returns true if `claude` command exists in PATH, false otherwise
336
- */
337
400
  async function isClaudeCommandAvailable(): Promise<boolean> {
338
- try {
339
- const command = process.platform === "win32" ? "where" : "which";
340
- await execa(command, ["claude"], {
341
- shell: true,
342
- stdin: "ignore",
343
- stdout: "ignore",
344
- stderr: "ignore",
345
- });
346
- return true;
347
- } catch {
348
- // claude command not found in PATH
349
- return false;
350
- }
401
+ return isCommandAvailable("claude");
351
402
  }
352
403
 
404
+ async function isNpxCommandAvailable(): Promise<boolean> {
405
+ return isCommandAvailable("npx");
406
+ }
407
+
408
+ /**
409
+ * Checks whether Claude Code is available via `bunx` in the current environment.
410
+ */
353
411
  export async function isClaudeCodeAvailable(): Promise<boolean> {
354
412
  try {
355
413
  await execa("bunx", [CLAUDE_CLI_PACKAGE, "--version"], { shell: true });
@@ -204,6 +204,8 @@ describe("App protected branch handling", () => {
204
204
  });
205
205
 
206
206
  expect(navigateToMock).toHaveBeenCalledWith("branch-action-selector");
207
- expect(branchQuickStartProps).not.toHaveLength(0);
207
+ // When branchQuickStart is empty, navigates to ai-tool-selector instead of branch-quick-start
208
+ // So AIToolSelectorScreen should be rendered, not BranchQuickStartScreen
209
+ expect(aiToolProps).not.toHaveLength(0);
208
210
  });
209
211
  });
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import React from "react";
5
5
  import { describe, it, expect, beforeEach, vi } from "vitest";
6
- import { render, waitFor, fireEvent, screen } from "@testing-library/react";
6
+ import { render, waitFor } from "@testing-library/react";
7
7
  import { ModelSelectorScreen } from "../../components/screens/ModelSelectorScreen.js";
8
8
  import type { ModelSelectionResult } from "../../components/screens/ModelSelectorScreen.js";
9
9
  import { Window } from "happy-dom";
@@ -55,8 +55,9 @@ describe("ModelSelectorScreen initial selection", () => {
55
55
  await waitFor(() => expect(selectMocks.length).toBeGreaterThan(0));
56
56
  const modelSelect = selectMocks.at(-1);
57
57
  const index = modelSelect.initialIndex as number;
58
- // codex-cli models: [gpt-5.1-codex, gpt-5.2, gpt-5.1-codex-max, gpt-5.1-codex-mini, gpt-5.1]
59
- expect(index).toBe(2);
58
+ // codex-cli models: ["", gpt-5.1-codex, gpt-5.2, gpt-5.1-codex-max, gpt-5.1-codex-mini, gpt-5.1]
59
+ // (index 0 = Default/Auto, index 3 = gpt-5.1-codex-max)
60
+ expect(index).toBe(3);
60
61
  });
61
62
 
62
63
  it("includes gpt-5.2 in model options and preserves ordering", async () => {
@@ -75,9 +76,11 @@ describe("ModelSelectorScreen initial selection", () => {
75
76
  );
76
77
 
77
78
  await waitFor(() => expect(selectMocks.length).toBeGreaterThan(1));
78
- const modelSelect = selectMocks.at(-1)!;
79
- const ids = modelSelect.items.map((item) => item.value);
79
+ const modelSelect = selectMocks.at(-1);
80
+ expect(modelSelect).toBeDefined();
81
+ const ids = modelSelect?.items.map((item) => item.value);
80
82
  expect(ids).toEqual([
83
+ "", // Default (Auto)
81
84
  "gpt-5.1-codex",
82
85
  "gpt-5.2",
83
86
  "gpt-5.1-codex-max",
@@ -1,11 +1,18 @@
1
1
  import React, { useEffect, useState } from "react";
2
- import { Box, Text, useInput, useStdout } from "ink";
2
+ import { Box, Text, useStdout } from "ink";
3
+ import { useAppInput } from "../../hooks/useAppInput.js";
3
4
 
5
+ /**
6
+ * Item descriptor for the `Select` component.
7
+ */
4
8
  export interface SelectItem {
5
9
  label: string;
6
10
  value: string;
7
11
  }
8
12
 
13
+ /**
14
+ * Props for the `Select` component.
15
+ */
9
16
  export interface SelectProps<T extends SelectItem = SelectItem> {
10
17
  items: T[];
11
18
  onSelect: (item: T) => void;
@@ -133,7 +140,7 @@ const SelectComponent = <T extends SelectItem = SelectItem>({
133
140
  }
134
141
  }, [items, limit]);
135
142
 
136
- useInput((input, key) => {
143
+ useAppInput((input, key) => {
137
144
  if (disabled) {
138
145
  return;
139
146
  }