Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 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
34 changes: 34 additions & 0 deletions packages/cli/src/ui/components/Footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,44 @@ 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 type { PasteProgress } from '../contexts/KeypressContext.js';

const PASTE_BAR_WIDTH = 20;

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

if (totalBytes && totalBytes > 0) {
const pct = Math.min(1, receivedBytes / totalBytes);
const filled = Math.round(pct * PASTE_BAR_WIDTH);
const bar = '█'.repeat(filled) + '░'.repeat(PASTE_BAR_WIDTH - filled);
const pctLabel = `${Math.round(pct * 100)}%`;
return (
<Text dimColor>
{t('Pasting…')} <Text color="blue">{bar}</Text> {pctLabel} ({label})
Comment thread
LaZzyMan marked this conversation as resolved.
Resolved
</Text>
);
}

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 +115,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} />
) : uiState.rewindEscPending ? (
<Text color={theme.text.secondary}>
{t('Press Esc again to rewind conversation.')}
Expand Down
Loading
Loading