From 7df3ae35f19c27fe32172c84c041ab4d5f6e4a46 Mon Sep 17 00:00:00 2001
From: john
Date: Mon, 13 Jul 2026 14:16:57 +0800
Subject: [PATCH] feat(admin): surface Memory V2 candidate auto-review in
management UI
Clarify active/canary/shadow modes and show auto-review metrics so operators do not need to manually approve every user memory.
Co-authored-by: Cursor
---
src/admin/pages/MemoryV2Page.tsx | 19 ++++++++++++-------
src/types.ts | 1 +
2 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/src/admin/pages/MemoryV2Page.tsx b/src/admin/pages/MemoryV2Page.tsx
index b64569b..b86d6eb 100644
--- a/src/admin/pages/MemoryV2Page.tsx
+++ b/src/admin/pages/MemoryV2Page.tsx
@@ -57,14 +57,14 @@ const CAPABILITIES: Array<{
key: 'candidateMemory',
label: '候选记忆',
icon: 'C',
- description: '控制候选提取模式、接纳阈值与待处理数量。',
+ description: '控制候选提取模式、自动接纳阈值与待处理数量。',
fields: [
{ key: 'enabled', label: '启用候选记忆', type: 'boolean' },
{ key: 'mode', label: '运行模式', type: 'select', options: [
- { value: 'off', label: 'Off' },
- { value: 'shadow', label: 'Shadow' },
- { value: 'canary', label: 'Canary' },
- { value: 'active', label: 'Active' },
+ { value: 'off', label: 'Off · 关闭' },
+ { value: 'active', label: 'Active · 规则通过后自动接纳(推荐)' },
+ { value: 'canary', label: 'Canary · 仅高置信度自动接纳' },
+ { value: 'shadow', label: 'Shadow · 全部人工审核' },
] },
{ key: 'minImportance', label: '最低重要度', type: 'number' },
{ key: 'minConfidence', label: '最低置信度', type: 'number' },
@@ -314,7 +314,7 @@ function defaultConfig(): MemoryV2AdminConfig {
timeoutMs: '1500',
fallbackRoute: 'agent_orchestration',
},
- candidateMemory: { enabled: false, mode: 'off', minImportance: '0.7', minConfidence: '0.8', maxPending: '500', persistenceEnabled: false },
+ candidateMemory: { enabled: false, mode: 'active', minImportance: '0.7', minConfidence: '0.8', maxPending: '500', persistenceEnabled: false },
policy: { enabled: false, saveExplicit: true, rejectSensitive: true, requireEvidence: true, retentionDays: '365' },
retriever: { enabled: false, episodicEnabled: true, semanticEnabled: true, preferenceEnabled: true, goalEnabled: true, limit: '12', tokenBudget: '1800', timeoutMs: '1200' },
lifecycle: { enabled: false, dedupeEnabled: true, conflictReview: true, decayEnabled: false, forgettingEnabled: true, compactIntervalHours: '24' },
@@ -954,8 +954,10 @@ export function MemoryV2Page() {
{String(runtimeStatus.memory.personalMemory.health?.state ?? 'unknown')}
{' · '}模式 {runtimeStatus.memory.personalMemory.effectiveMode ?? 'off'}
+ {runtimeStatus.memory.personalMemory.autoReviewEnabled ? ' · 自动审核' : ' · 人工审核'}
{' · '}候选 {runtimeStatus.memory.personalMemory.pendingCandidates ?? 0}
{' · '}接纳 {runtimeStatus.memory.personalMemory.health?.accepted ?? 0}
+ {' · '}自动接纳 {runtimeStatus.memory.personalMemory.health?.autoReviewed ?? 0}
{' · '}拒绝 {runtimeStatus.memory.personalMemory.health?.rejected ?? 0}
{' · '}去重 {runtimeStatus.memory.personalMemory.health?.deduped ?? 0}
@@ -992,6 +994,9 @@ export function MemoryV2Page() {
{' · '}已接纳 {candidatePayload?.counts?.accepted ?? 0}
{' · '}已拒绝 {candidatePayload?.counts?.rejected ?? 0}
+
+ Active 模式下规则通过的候选会自动接纳。此处仅显示 Shadow / Canary 模式下仍需人工确认的例外项。
+