diff --git a/src/tui/screens/ManifestPathPicker.tsx b/src/tui/screens/ManifestPathPicker.tsx index 86a9d73..1ba6dad 100644 --- a/src/tui/screens/ManifestPathPicker.tsx +++ b/src/tui/screens/ManifestPathPicker.tsx @@ -74,9 +74,7 @@ export function ManifestPathPicker({ mode }: { mode: ManifestPathPickerMode }) { }); } - const screenTitle = mode === 'add' ? 'add' : 'rm'; const screenLabel = mode === 'add' ? copy.add : copy.rm; - const homeTitle = mode === 'add' ? copy.addDesc : copy.rmDesc; const reviewTitle = mode === 'add' ? 'confirm add to manifest' : 'confirm remove from manifest'; const reviewYes = mode === 'add' ? 'Yes — add these paths' : 'Yes — remove these manifest paths'; @@ -106,11 +104,7 @@ export function ManifestPathPicker({ mode }: { mode: ManifestPathPickerMode }) { if (phase === 'home') { return ( - + Project root: {projectRoot} + {end && ( diff --git a/src/tui/screens/ScreenLs.tsx b/src/tui/screens/ScreenLs.tsx index 2cf090d..e890559 100644 --- a/src/tui/screens/ScreenLs.tsx +++ b/src/tui/screens/ScreenLs.tsx @@ -77,10 +77,7 @@ export function ScreenLs() { setScreen('main')} backTarget="main menu" /> diff --git a/src/tui/screens/ScreenProjects.tsx b/src/tui/screens/ScreenProjects.tsx index 62df67c..1768723 100644 --- a/src/tui/screens/ScreenProjects.tsx +++ b/src/tui/screens/ScreenProjects.tsx @@ -11,6 +11,20 @@ import { ESCAPE_LIKE_HINT, wantsEscapeLike } from '../escapeLike.js'; type Phase = 'list' | 'detail'; +/** 短时间戳:YYYY-MM-DD HH:mm(UTC),去掉秒与毫秒,避免详情页被长 ISO 串占满。 */ +function shortTimestamp(ms: number): string { + return new Date(ms).toISOString().slice(0, 16).replace('T', ' '); +} + +/** 过长字符串中段省略,保留首尾以便辨认(如长 remote URL)。 */ +function truncateMiddle(s: string, max: number): string { + if (s.length <= max) return s; + const keep = max - 1; + const head = Math.ceil(keep / 2); + const tail = Math.floor(keep / 2); + return `${s.slice(0, head)}…${s.slice(s.length - tail)}`; +} + export function ScreenProjects() { const { db, setScreen, copy } = useTui(); const [phase, setPhase] = useState('list'); @@ -41,17 +55,16 @@ export function ScreenProjects() { }, [phase, detail, db]); if (phase === 'detail' && detail) { - const lastSaved = - detail.lastSavedAt != null ? new Date(detail.lastSavedAt).toISOString() : 'never'; + const lastSaved = detail.lastSavedAt != null ? shortTimestamp(detail.lastSavedAt) : 'never'; + const subtitles = [`${copy.managed}: ${detail.fileCount} · ${lastSaved}`]; + if (detail.remote_url) { + subtitles.push(`${copy.remote}: ${truncateMiddle(detail.remote_url, 48)}`); + } return ( { setDetail(null); setPhase('list'); @@ -64,7 +77,6 @@ export function ScreenProjects() { return ( r.isDefault).length }, { label: copy.customRule, value: rules.filter((r) => !r.isDefault).length }, diff --git a/src/tui/screens/ScreenSave.tsx b/src/tui/screens/ScreenSave.tsx index addc718..57eb7f7 100644 --- a/src/tui/screens/ScreenSave.tsx +++ b/src/tui/screens/ScreenSave.tsx @@ -42,11 +42,7 @@ export function ScreenSave() { }, [db, cwd, reporter]); return ( - + {end && ( diff --git a/src/tui/screens/ScreenStatus.tsx b/src/tui/screens/ScreenStatus.tsx index adcb417..c987950 100644 --- a/src/tui/screens/ScreenStatus.tsx +++ b/src/tui/screens/ScreenStatus.tsx @@ -1,4 +1,4 @@ -import { Box, Text, useInput } from 'ink'; +import { Text, useInput } from 'ink'; import { useEffect, useState } from 'react'; import { status } from '../../commands/status.js'; import { ScreenFrame } from '../components/ScreenFrame.js'; @@ -30,11 +30,11 @@ export function ScreenStatus() { missing: c.created.length, unchanged: c.unchanged.length, }); + // 仅列出有变化的条目;未变更文件只在顶部计数中体现,避免刷屏。 const out: string[] = []; for (const p of c.created) out.push(`! ${p}`); for (const p of c.changed) out.push(`~ ${p}`); for (const p of c.untracked) out.push(`? ${p}`); - for (const p of c.unchanged) out.push(` ${p}`); setLines(out); } catch (e) { setErr((e as Error).message); @@ -69,7 +69,13 @@ export function ScreenStatus() { } footer={`${ESCAPE_LIKE_HINT} → main menu`} > - {err ? {err} : lines.map((l) => {l})} + {err ? ( + {err} + ) : lines.length === 0 ? ( + {`✓ ${copy.unchanged}`} + ) : ( + lines.map((l) => {l}) + )} ); } diff --git a/src/tui/screens/ScreenTrash.tsx b/src/tui/screens/ScreenTrash.tsx index c356e4a..d04634c 100644 --- a/src/tui/screens/ScreenTrash.tsx +++ b/src/tui/screens/ScreenTrash.tsx @@ -18,7 +18,6 @@ export function ScreenTrash() { return ( sum + row.files.length, 0) }]} footer={`${ESCAPE_LIKE_HINT} → main menu`} >