Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
2f4c2b8
fix(cli): optimize large paste performance and add progress indicator
LaZzyMan Jul 8, 2026
8048de7
fix: remove dead UIState/UIActions isPasting code, use pipe for clipb…
LaZzyMan Jul 8, 2026
6ca48ef
fix(cli): handle split paste markers, ghost paste-end, and Linux clip…
LaZzyMan Jul 8, 2026
4f07479
fix(cli): skip lone ESC in partial marker detection, update snapshots
LaZzyMan Jul 8, 2026
fe0f747
fix(cli): restore InputPrompt snapshots to main baseline
LaZzyMan Jul 9, 2026
257d83b
Merge branch 'main' into worktree-fix-paste-perf
LaZzyMan Jul 9, 2026
78a40ea
fix(cli): use minLen=1 for partial marker detection in paste-accumula…
LaZzyMan Jul 9, 2026
2922f66
fix(cli): set pasteAlreadyFlushed inside broadcastPasteFromRaw for al…
LaZzyMan Jul 13, 2026
e1d97ee
fix(cli): merge main into paste-perf branch, resolve KeypressContext …
qwen-code-dev-bot Jul 14, 2026
6ca0c1c
fix(cli): treat control chars as verbatim paste content, simplify pro…
LaZzyMan Jul 14, 2026
3dbc788
fix(cli): surface clipboardImageUnavailable from raw-data empty-paste…
LaZzyMan Jul 15, 2026
2d8055e
fix(cli): append rawStdinTail on idle flush instead of dropping it
LaZzyMan Jul 15, 2026
eac6b50
fix(i18n): add 'Pasting…' translation to remaining 6 locales
LaZzyMan Jul 16, 2026
431b1b6
fix(cli): merge origin/main into paste-perf branch, resolve Footer.ts…
qwen-code-dev-bot Jul 18, 2026
bb13420
Merge branch 'main' into worktree-fix-paste-perf
LaZzyMan Jul 21, 2026
a717d8f
chore(cli): clarify stdin keypress listener is test-only (#6506)
Jul 21, 2026
6a3647a
test(cli): cover multi-chunk raw stdin paste reassembly (#6506)
Jul 21, 2026
3c92255
Merge remote-tracking branch 'origin/main' into worktree-fix-paste-perf
Jul 22, 2026
b4fbe53
fix(cli): address review feedback on raw paste interception (#6506)
Jul 22, 2026
8d18426
Merge branch 'main' into worktree-fix-paste-perf
wenshao Jul 23, 2026
68c7cbc
test(cli): add multi-chunk raw paste and passthrough Ctrl+C escape te…
Jul 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/cli/src/i18n/locales/ca.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ export default {
'Type your message or @path/to/file':
'Escriviu el vostre missatge o @camí/al/fitxer',
'? for shortcuts': '? per a dreceres',
'Pasting…': 'Enganxant…',
"Press 'i' for INSERT mode and 'Esc' for NORMAL mode.":
"Premeu 'i' per al mode INSERCIÓ i 'Esc' per al mode NORMAL.",
'Cancel operation / Clear input (double press)':
Expand Down
1 change: 1 addition & 0 deletions packages/cli/src/i18n/locales/de.js
Original file line number Diff line number Diff line change
Expand Up @@ -1948,6 +1948,7 @@ export default {
'Reverse search history': 'Verlauf rückwärts durchsuchen',
'Press ? again to close': 'Erneut ? drücken, um zu schließen',
'? for shortcuts': '? für Tastenkürzel',
'Pasting…': 'Einfügen…',
'Invalid approval mode "{{arg}}". Valid modes: {{modes}}':
'Ungültiger Freigabemodus "{{arg}}". Gültige Modi: {{modes}}',
'Approval mode set to "{{mode}}"': 'Freigabemodus auf "{{mode}}" gesetzt',
Expand Down
1 change: 1 addition & 0 deletions packages/cli/src/i18n/locales/en.js
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,7 @@ export default {
'Connecting to MCP servers... ({{connected}}/{{total}})',
'Type your message or @path/to/file': 'Type your message or @path/to/file',
'? for shortcuts': '? for shortcuts',
'Pasting…': 'Pasting…',
Comment thread
LaZzyMan marked this conversation as resolved.
"Press 'i' for INSERT mode and 'Esc' for NORMAL mode.":
"Press 'i' for INSERT mode and 'Esc' for NORMAL mode.",
'Cancel operation / Clear input (double press)':
Expand Down
1 change: 1 addition & 0 deletions packages/cli/src/i18n/locales/fr.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ export default {
'Type your message or @path/to/file':
'Tapez votre message ou @chemin/vers/fichier',
'? for shortcuts': '? pour les raccourcis',
'Pasting…': 'Collage…',
"Press 'i' for INSERT mode and 'Esc' for NORMAL mode.":
"Appuyez sur 'i' pour le mode INSERTION et 'Esc' pour le mode NORMAL.",
'Cancel operation / Clear input (double press)':
Expand Down
1 change: 1 addition & 0 deletions packages/cli/src/i18n/locales/ja.js
Original file line number Diff line number Diff line change
Expand Up @@ -1488,6 +1488,7 @@ export default {
'to paste images': '画像を貼り付け',
'for external editor': '外部エディタ用',
'? for shortcuts': '? でショートカット表示',
'Pasting…': '貼り付け中…',
'Invalid approval mode "{{arg}}". Valid modes: {{modes}}':
'無効な承認モード "{{arg}}" です。有効なモード: {{modes}}',
'Approval mode set to "{{mode}}"': '承認モードを "{{mode}}" に設定しました',
Expand Down
1 change: 1 addition & 0 deletions packages/cli/src/i18n/locales/pt.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ export default {
'Type your message or @path/to/file':
'Digite sua mensagem ou @caminho/do/arquivo',
'? for shortcuts': '? para atalhos',
'Pasting…': 'Colando…',
"Press 'i' for INSERT mode and 'Esc' for NORMAL mode.":
"Pressione 'i' para modo INSERÇÃO e 'Esc' para modo NORMAL.",
'Cancel operation / Clear input (double press)':
Expand Down
1 change: 1 addition & 0 deletions packages/cli/src/i18n/locales/ru.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ export default {
'Подключение к MCP servers... ({{connected}}/{{total}})',
'Type your message or @path/to/file': 'Введите сообщение или @путь/к/файлу',
'? for shortcuts': '? — горячие клавиши',
'Pasting…': 'Вставка…',
"Press 'i' for INSERT mode and 'Esc' for NORMAL mode.":
"Нажмите 'i' для режима ВСТАВКА и 'Esc' для ОБЫЧНОГО режима.",
'Cancel operation / Clear input (double press)':
Expand Down
1 change: 1 addition & 0 deletions packages/cli/src/i18n/locales/zh-TW.js
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,7 @@ export default {
'正在連接到 MCP servers... ({{connected}}/{{total}})',
'Type your message or @path/to/file': '輸入您的消息或 @ 檔案路徑',
'? for shortcuts': '按 ? 查看快捷鍵',
'Pasting…': '正在貼上…',
"Press 'i' for INSERT mode and 'Esc' for NORMAL mode.":
"按 'i' 進入插入模式,按 'Esc' 進入普通模式",
'Cancel operation / Clear input (double press)':
Expand Down
1 change: 1 addition & 0 deletions packages/cli/src/i18n/locales/zh.js
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,7 @@ export default {
'正在连接到 MCP servers... ({{connected}}/{{total}})',
'Type your message or @path/to/file': '输入您的消息或 @ 文件路径',
'? for shortcuts': '按 ? 查看快捷键',
'Pasting…': '正在粘贴…',
"Press 'i' for INSERT mode and 'Esc' for NORMAL mode.":
"按 'i' 进入插入模式,按 'Esc' 进入普通模式",
'Cancel operation / Clear input (double press)':
Expand Down
20 changes: 20 additions & 0 deletions packages/cli/src/ui/components/Footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,31 @@ import { GeminiSpinner } from './GeminiRespondingSpinner.js';
import { GoalPill, useFooterGoalState } from './GoalPill.js';
import { CronPill, useFooterCronTaskCount } from './CronPill.js';
import { t } from '../../i18n/index.js';
import { useKeypressContext } from '../contexts/KeypressContext.js';
import { StreamingState } from '../types.js';

import type { PasteProgress } from '../contexts/KeypressContext.js';

const PasteProgressBar: React.FC<{ progress: PasteProgress }> = ({
progress,
}) => {
Comment thread
LaZzyMan marked this conversation as resolved.
const { receivedBytes } = progress;
const kb = receivedBytes / 1024;
const label = kb >= 1 ? `${kb.toFixed(0)} KB` : `${receivedBytes} B`;

return (
<Text dimColor>
{t('Pasting…')} {label}
</Text>
);
};

export const Footer: React.FC = () => {
const uiState = useUIState();
const config = useConfig();
const settings = useSettings();
const { vimEnabled, vimMode } = useVimModeState();
const { pasteProgress } = useKeypressContext();
const {
lines: statusLineLines,
useThemeColors,
Expand Down Expand Up @@ -83,6 +101,8 @@ export const Footer: React.FC = () => {
<Text color={theme.status.warning}>{t('Press Ctrl+D again to exit.')}</Text>
) : uiState.showEscapePrompt ? (
<Text color={theme.text.secondary}>{t('Press Esc again to clear.')}</Text>
) : pasteProgress.active ? (
<PasteProgressBar progress={pasteProgress} />
Comment on lines +104 to +105

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Suggestion] pasteProgress state transitions and PasteProgressBar rendering are untested — Concrete cost: if setPasteProgress({ active: false, receivedBytes: 0 }) inside broadcastPasteFromRaw were accidentally removed, the Footer would permanently display "Pasting… N KB" after any paste. No existing test triggers pasteProgress.active = true on Footer or asserts the transition cycle on the context value.

— qwen3.7-max via Qwen Code /review

) : uiState.rewindEscPending ? (
<Text color={theme.text.secondary}>
{t('Press Esc again to rewind conversation.')}
Expand Down
Loading
Loading