From 961a4e9756652902895f4d0d58e080ffb7b9344a Mon Sep 17 00:00:00 2001 From: cruldra Date: Thu, 24 Sep 2026 16:09:11 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(vscode):=20=E5=AE=A1?= =?UTF-8?q?=E6=9F=A5=E6=84=8F=E8=A7=81=E7=AD=89=E5=A4=9A=E8=A1=8C=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E5=8F=91=E8=BF=9B=E4=BC=9A=E8=AF=9D=E5=90=8E=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=8F=90=E4=BA=A4=EF=BC=8C=E4=B8=8D=E5=86=8D=E5=8F=AA?= =?UTF-8?q?=E5=81=9C=E5=9C=A8=E8=BE=93=E5=85=A5=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vscode/src/panel/handlers/sessions.ts | 4 +--- vscode/src/panel/handlers/terminals.ts | 13 +++++-------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/vscode/src/panel/handlers/sessions.ts b/vscode/src/panel/handlers/sessions.ts index 50f07fe..6cab981 100644 --- a/vscode/src/panel/handlers/sessions.ts +++ b/vscode/src/panel/handlers/sessions.ts @@ -489,9 +489,7 @@ async function triggerAutoReviewTabUnlocked(panel: KanbanWebviewPanel, opts: { reasoningEffort: settings.codexReasoningEffort, })) // codex resume rebuilds the conversation from the jsonl rollout - // before the TUI accepts input — empirically much slower than the - // 250ms gap the reuse path uses. 8s is a conservative guess that - // covers a cold codex start without feeling laggy. + // before the TUI accepts input; 8s covers a cold codex start. setTimeout(() => { submitToSessionTerminal(terminal, 'PR 更新了,再审一下') }, 8000) diff --git a/vscode/src/panel/handlers/terminals.ts b/vscode/src/panel/handlers/terminals.ts index 056e0d8..e07465d 100644 --- a/vscode/src/panel/handlers/terminals.ts +++ b/vscode/src/panel/handlers/terminals.ts @@ -78,16 +78,13 @@ export function injectIntoImplTerminal(panel: KanbanWebviewPanel, issueNumber: n /** * 往正在跑 cc / codex TUI 的终端里提交一条消息。 * - * TUI 在 raw 模式下,LF (\n) 只算输入框内的换行,CR (\r) 才会被识别为 - * Enter。实测多行内容 + 末尾 \r 在同一次 sendText 里发出去时,TUI 进入 - * 多行输入模式后不会把紧跟的 \r 当成提交键,内容只粘贴到输入框、没提交。 - * 所以拆两次发:先把内容完整推进输入框,250ms 后再独立发一个 \r 作为 Enter。 + * sendText 把文本当成逐字敲键盘,TUI 靠输入速度猜是不是粘贴,猜成粘贴后 + * 会把紧跟的回车也吞成换行,消息只停在输入框。用括号粘贴标记 + * (\x1B[200~ … \x1B[201~) 明确告诉 TUI 粘贴从哪到哪,之后的 \r 才被当成提交键。 */ export function submitToSessionTerminal(terminal: Terminal, text: string): void { - terminal.sendText(text, false) - setTimeout(() => { - terminal.sendText('\r', false) - }, 250) + terminal.sendText(`\x1B[200~${text}\x1B[201~`, false) + terminal.sendText('\r', false) } /**