diff --git a/apps/web/messages/en.json b/apps/web/messages/en.json index aecffdd8..88abc8dd 100644 --- a/apps/web/messages/en.json +++ b/apps/web/messages/en.json @@ -3682,6 +3682,45 @@ } } }, + "professionalJudgment": { + "title": "AI Agent 專業判斷矩陣", + "badge": "判斷依據 / 信心 / 建議 / Gate", + "summary": "目前顯示 {agents} 位 Agent 的專業判斷;採用證據 {evidence} 件,需 gate / owner review {gates} 件,正式寫入與 Telegram 實送邊界 {live}。", + "items": { + "openclaw": { + "role": "仲裁與風險分級:先看乾跑證據、owner packet 與高風險接受度。", + "judgment": "判斷:乾跑需審 {dryRuns},高風險 {high},已接受 owner response {accepted};未接受前只做候選與審核包。", + "evidence": "證據 {evidence} / packet {packets}", + "confidence": "低/中 {low}/{medium}", + "recommendation": "建議:blocked {blocked} 先維持人工 gate,不升級 runtime。", + "gate": "Gate:OpenClaw owner review {reviews}。" + }, + "hermes": { + "role": "報告與記憶:把工作量、回執、圖表與 RAG / KM 摘要整理成可讀證據。", + "judgment": "判斷:queue 草稿 {drafts}、報告資產 {reports}、圖表來源 {charts};先 no-send preview。", + "evidence": "KM {km} / receipt {receipt}", + "confidence": "ready {ready}/{cadences}", + "recommendation": "建議:{approvals} 個報告/發送/學習決策先進 gate。", + "gate": "Gate:Telegram live / Bot API 實送 {sends}。" + }, + "nemotron": { + "role": "市場與回放:用 no-write replay、scorecard 與版本漂移比較挑戰既有模型配置。", + "judgment": "判斷:回放 {replays}、scorecard {scorecards}、版本漂移候選 {drift};只產比較,不切 provider。", + "evidence": "市場 {market} / stale {stale}", + "confidence": "shadow {passed}/{total}", + "recommendation": "建議:{checkpoints} 個 checkpoint 未批准前不升級模型路由。", + "gate": "Gate:provider / production write 阻擋 {writes}。" + }, + "securitySre": { + "role": "安全與 SRE:負責權限模型、runtime 寫入邊界、Verifier 與高風險回滾條件。", + "judgment": "判斷:gate {gates}、權限類別 {categories}、blocked {blocked};先保障不誤執行。", + "evidence": "Verifier {verifiers} / health {health}", + "confidence": "write {write} / TG {telegram}", + "recommendation": "建議:高風險 {high} 先整理 owner packet 與 rollback owner。", + "gate": "Gate:runtime / write blocked {blocked}。" + } + } + }, "executionQueue": { "title": "全面授權後推進佇列", "badge": "低中風險自動準備 · 高風險等審核", diff --git a/apps/web/messages/zh-TW.json b/apps/web/messages/zh-TW.json index aecffdd8..88abc8dd 100644 --- a/apps/web/messages/zh-TW.json +++ b/apps/web/messages/zh-TW.json @@ -3682,6 +3682,45 @@ } } }, + "professionalJudgment": { + "title": "AI Agent 專業判斷矩陣", + "badge": "判斷依據 / 信心 / 建議 / Gate", + "summary": "目前顯示 {agents} 位 Agent 的專業判斷;採用證據 {evidence} 件,需 gate / owner review {gates} 件,正式寫入與 Telegram 實送邊界 {live}。", + "items": { + "openclaw": { + "role": "仲裁與風險分級:先看乾跑證據、owner packet 與高風險接受度。", + "judgment": "判斷:乾跑需審 {dryRuns},高風險 {high},已接受 owner response {accepted};未接受前只做候選與審核包。", + "evidence": "證據 {evidence} / packet {packets}", + "confidence": "低/中 {low}/{medium}", + "recommendation": "建議:blocked {blocked} 先維持人工 gate,不升級 runtime。", + "gate": "Gate:OpenClaw owner review {reviews}。" + }, + "hermes": { + "role": "報告與記憶:把工作量、回執、圖表與 RAG / KM 摘要整理成可讀證據。", + "judgment": "判斷:queue 草稿 {drafts}、報告資產 {reports}、圖表來源 {charts};先 no-send preview。", + "evidence": "KM {km} / receipt {receipt}", + "confidence": "ready {ready}/{cadences}", + "recommendation": "建議:{approvals} 個報告/發送/學習決策先進 gate。", + "gate": "Gate:Telegram live / Bot API 實送 {sends}。" + }, + "nemotron": { + "role": "市場與回放:用 no-write replay、scorecard 與版本漂移比較挑戰既有模型配置。", + "judgment": "判斷:回放 {replays}、scorecard {scorecards}、版本漂移候選 {drift};只產比較,不切 provider。", + "evidence": "市場 {market} / stale {stale}", + "confidence": "shadow {passed}/{total}", + "recommendation": "建議:{checkpoints} 個 checkpoint 未批准前不升級模型路由。", + "gate": "Gate:provider / production write 阻擋 {writes}。" + }, + "securitySre": { + "role": "安全與 SRE:負責權限模型、runtime 寫入邊界、Verifier 與高風險回滾條件。", + "judgment": "判斷:gate {gates}、權限類別 {categories}、blocked {blocked};先保障不誤執行。", + "evidence": "Verifier {verifiers} / health {health}", + "confidence": "write {write} / TG {telegram}", + "recommendation": "建議:高風險 {high} 先整理 owner packet 與 rollback owner。", + "gate": "Gate:runtime / write blocked {blocked}。" + } + } + }, "executionQueue": { "title": "全面授權後推進佇列", "badge": "低中風險自動準備 · 高風險等審核", diff --git a/apps/web/src/app/[locale]/governance/tabs/automation-inventory-tab.tsx b/apps/web/src/app/[locale]/governance/tabs/automation-inventory-tab.tsx index 2e381691..388a16e5 100644 --- a/apps/web/src/app/[locale]/governance/tabs/automation-inventory-tab.tsx +++ b/apps/web/src/app/[locale]/governance/tabs/automation-inventory-tab.tsx @@ -5831,6 +5831,142 @@ export function AutomationInventoryTab() { icon: , }, ] + const professionalJudgmentEvidenceTotal = ( + candidateDryRunEvidenceCount + + highRiskOwnerQueuePackets + + reportDryRunArtifacts + + reportDryRunQueueDrafts + + visibleReportStatusCharts.length + + visibleReportCharts.length + + runtimeShadowReplays + + criticReviewerScorecards + + operationPermissionCategories + + runtimeVerifierActions + ) + const professionalJudgmentGateTotal = ( + openClawOwnerReview + + hermesOwnerReview + + nemotronOwnerReview + + securitySreOwnerReview + + proofBlockedGates + ) + const globalControlProfessionalJudgmentRows: Array<{ + key: string + agent: string + role: string + judgment: string + evidence: string + confidence: string + recommendation: string + gate: string + tone: 'ok' | 'warn' | 'danger' | 'neutral' + icon: ReactNode + }> = [ + { + key: 'openclaw', + agent: 'OpenClaw', + role: t('globalControl.professionalJudgment.items.openclaw.role'), + judgment: t('globalControl.professionalJudgment.items.openclaw.judgment', { + dryRuns: candidateDryRunNeedsReview, + high: highRiskOwnerQueueItems, + accepted: highRiskOwnerQueueAccepted, + }), + evidence: t('globalControl.professionalJudgment.items.openclaw.evidence', { + evidence: candidateDryRunEvidenceCount, + packets: highRiskOwnerQueuePackets, + }), + confidence: t('globalControl.professionalJudgment.items.openclaw.confidence', { + low: lowMediumWhitelistLow, + medium: lowMediumWhitelistMedium, + }), + recommendation: t('globalControl.professionalJudgment.items.openclaw.recommendation', { + blocked: highRiskOwnerQueueBlocked + operationPermissionBlocked, + }), + gate: t('globalControl.professionalJudgment.items.openclaw.gate', { + reviews: openClawOwnerReview, + }), + tone: openClawOwnerReview + highRiskOwnerQueueBlocked > 0 ? 'warn' : 'ok', + icon: , + }, + { + key: 'hermes', + agent: 'Hermes', + role: t('globalControl.professionalJudgment.items.hermes.role'), + judgment: t('globalControl.professionalJudgment.items.hermes.judgment', { + drafts: reportDryRunQueueDrafts, + reports: reportDryRunArtifacts, + charts: visibleReportStatusCharts.length + visibleReportCharts.length, + }), + evidence: t('globalControl.professionalJudgment.items.hermes.evidence', { + km: taskResultKmDrafts, + receipt: telegramReceiptGates, + }), + confidence: t('globalControl.professionalJudgment.items.hermes.confidence', { + ready: reportRuntimeReady, + cadences: reportCadenceCount, + }), + recommendation: t('globalControl.professionalJudgment.items.hermes.recommendation', { + approvals: hermesOwnerReview, + }), + gate: t('globalControl.professionalJudgment.items.hermes.gate', { + sends: globalControlTelegramSendTotal, + }), + tone: hermesOwnerReview + reportRuntimeBlocked > 0 ? 'warn' : 'ok', + icon: , + }, + { + key: 'nemotron', + agent: 'NemoTron', + role: t('globalControl.professionalJudgment.items.nemotron.role'), + judgment: t('globalControl.professionalJudgment.items.nemotron.judgment', { + replays: runtimeShadowReplays, + scorecards: criticReviewerScorecards, + drift: dependencySupplyChainDriftMonitor.rollups.drift_candidate_count, + }), + evidence: t('globalControl.professionalJudgment.items.nemotron.evidence', { + market: warRoomMarketCandidates, + stale: dependencySupplyChainDriftMonitor.rollups.stale_source_snapshot_count, + }), + confidence: t('globalControl.professionalJudgment.items.nemotron.confidence', { + passed: runtimeShadowPassed, + total: runtimeShadowCandidates, + }), + recommendation: t('globalControl.professionalJudgment.items.nemotron.recommendation', { + checkpoints: runtimeShadowApprovals + criticReviewerPromotionGates, + }), + gate: t('globalControl.professionalJudgment.items.nemotron.gate', { + writes: runtimeShadowProductionWrites + providerRouteDeniedCount, + }), + tone: runtimeShadowBlocked + nemotronOwnerReview > 0 ? 'warn' : 'ok', + icon: , + }, + { + key: 'securitySre', + agent: 'Security / SRE', + role: t('globalControl.professionalJudgment.items.securitySre.role'), + judgment: t('globalControl.professionalJudgment.items.securitySre.judgment', { + gates: operationPermissionGates, + categories: operationPermissionCategories, + blocked: operationPermissionBlocked, + }), + evidence: t('globalControl.professionalJudgment.items.securitySre.evidence', { + verifiers: runtimeVerifierActions, + health: serviceHealthOperatorReviews, + }), + confidence: t('globalControl.professionalJudgment.items.securitySre.confidence', { + write: globalControlLiveWriteAllowedTotal, + telegram: globalControlTelegramSendTotal, + }), + recommendation: t('globalControl.professionalJudgment.items.securitySre.recommendation', { + high: highRiskOwnerQueueItems, + }), + gate: t('globalControl.professionalJudgment.items.securitySre.gate', { + blocked: runtimeWriteBlockedActions + operationPermissionBlocked, + }), + tone: runtimeWriteBlockedActions + operationPermissionBlocked + highRiskOwnerQueueItems > 0 ? 'danger' : 'ok', + icon: , + }, + ] return (
@@ -6149,6 +6285,69 @@ export function AutomationInventoryTab() {
+
+
+
+ {t('globalControl.professionalJudgment.title')} + + {t('globalControl.professionalJudgment.summary', { + agents: globalControlProfessionalJudgmentRows.length, + evidence: professionalJudgmentEvidenceTotal, + gates: professionalJudgmentGateTotal, + live: agentCollaborationLiveBoundaryTotal, + })} + +
+ +
+
+ {globalControlProfessionalJudgmentRows.map(row => { + const color = toneColor(row.tone) + return ( +
+
+
+
+ {row.icon} +
+ + {row.agent} + +
+ +
+ + {row.role} + + + {row.judgment} + +
+ +
+ + {row.recommendation} + + + {row.gate} + +
+ ) + })} +
+
+
@@ -18925,6 +19124,7 @@ export function AutomationInventoryTab() { .automation-inventory-global-control-runway-grid, .automation-inventory-global-control-agent-workload-grid, .automation-inventory-global-control-collaboration-proof-grid, + .automation-inventory-global-control-professional-judgment-grid, .automation-inventory-global-control-execution-queue-grid, .automation-inventory-global-control-execution-queue-meta-grid, .automation-inventory-global-control-domain-grid,