diff --git a/src/App.tsx b/src/App.tsx
index 48b7a77..b0381ab 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -51,6 +51,7 @@ export function App() {
const toast = useStore(s => s.toast)
const trackerRunId = useStore(s => s.ui.trackerRunId)
const viewingArtifact = useStore(s => s.ui.viewingArtifact)
+ const pendingBadge = useStore(s => s.cards.filter(c => c.status === 'action_required').length)
// authState:checking → ok(放行)| required(登录门)。
const [authState, setAuthState] = useState<'checking' | 'required' | 'ok'>('checking')
@@ -140,7 +141,9 @@ export function App() {
) : (
-
+
)}
diff --git a/src/components/Workbench.tsx b/src/components/Workbench.tsx
index 8532c3e..10257f1 100644
--- a/src/components/Workbench.tsx
+++ b/src/components/Workbench.tsx
@@ -23,6 +23,7 @@ export function Workbench() {
<>
收件箱{pending > 0 ? ` ${pending}` : ''}
+
diff --git a/src/store.ts b/src/store.ts
index 9e16cd1..24422e7 100644
--- a/src/store.ts
+++ b/src/store.ts
@@ -418,6 +418,14 @@ export const store = {
toggleLeft() { setUI({ leftCollapsed: !state.ui.leftCollapsed }) },
toggleRight() { setUI({ rightCollapsed: !state.ui.rightCollapsed }) },
openWorkspace(id: string) { setUI({ activeWorkspace: id }) },
+ /** 收纳策略(T5):一键收纳已完成卡(done→dismissed;resolved 盖章留痕不动)。 */
+ async tidyCards() {
+ const done = state.cards.filter(c => c.status === 'done')
+ for (const c of done) {
+ try { const out = await api.cardDismiss(c.id); store.upsertCard(out.card) } catch { /* 单卡失败不阻断 */ }
+ }
+ if (done.length > 0) store.toast(`已收纳 ${done.length} 张完成卡`)
+ },
closeWorkspace() { setUI({ activeWorkspace: null }) },
openInbox(cardId?: string) {
setUI({ rightCollapsed: false, rightTab: 'inbox' })
diff --git a/src/styles.css b/src/styles.css
index 4d43a27..517b4aa 100644
--- a/src/styles.css
+++ b/src/styles.css
@@ -196,3 +196,8 @@ button { font-family: inherit; }
.project-badge{font-size:11px;padding:1px 8px;border-radius:8px;background:rgba(120,160,255,.15);color:var(--accent);white-space:nowrap}
.tab-hint{font-size:10px;color:var(--text-faint);align-self:center}
.empty-note{color:var(--text-faint);font-size:12px;padding:12px 4px}
+
+/* 收纳策略(T5):收起态角标 + 收纳按钮 */
+.rail-badge{position:absolute;top:-4px;right:-6px;font-size:10px;background:var(--warn,#d29922);color:#fff;border-radius:8px;padding:0 5px;min-width:14px}
+.right-panel.collapsed .icon-only button{position:relative}
+.tab-action{font-size:11px;color:var(--text-faint)}