fix(interactive): stop early input capture before rendering dialogs

Rename CLI binary from `ccb` to `csc`, update .gitignore for additional
AI tool directories and exe files, and fix unresponsive keyboard input
in interactive dialogs by stopping the early input listener before Ink
takes over stdin.
This commit is contained in:
Askhz 2026-04-09 10:25:34 +08:00
parent ca0c3265e6
commit 114629ff9e
3 changed files with 13 additions and 1 deletions

3
.gitignore vendored
View File

@ -8,12 +8,15 @@ coverage
.vscode
*.suo
*.lock
*.exe
src/utils/vendor/
# AI tool runtime directories
.agents/
.codex/
.omx/
.claude/
.costrict/
# Binary / screenshot files (root only)
/*.png

View File

@ -25,7 +25,7 @@
"bun": ">=1.2.0"
},
"bin": {
"ccb": "dist/cli.js",
"csc": "dist/cli.js",
"claude-code-best": "dist/cli.js"
},
"workspaces": [

View File

@ -50,6 +50,7 @@ import { updateGithubRepoPathMapping } from './utils/githubRepoPathMapping.js'
import { applyConfigEnvironmentVariables } from './utils/managedEnv.js'
import type { PermissionMode } from './utils/permissions/PermissionMode.js'
import { getBaseRenderOptions } from './utils/renderOptions.js'
import { stopCapturingEarlyInput } from './utils/earlyInput.js'
import { getSettingsWithAllErrors } from './utils/settings/allErrors.js'
import {
hasAutoModeOptIn,
@ -152,6 +153,14 @@ export async function showSetupScreens(
claudeInChrome?: boolean,
devChannels?: ChannelEntry[],
): Promise<boolean> {
// Stop early input capture before rendering any interactive dialog.
// The early input listener registered in startCapturingEarlyInput() competes
// with Ink's stdin listener — both are 'readable' handlers and whichever fires
// first consumes the data. Since early input is registered first, it drains all
// keypresses (including arrow keys / Enter) before Ink can see them, making
// dialogs like TrustDialog completely unresponsive to keyboard input.
stopCapturingEarlyInput()
if (
"production" === 'test' ||
isEnvTruthy(false) ||