feat: add evidence audit panel shell

This commit is contained in:
732642856
2026-07-21 15:11:21 +08:00
parent 3427b30fd4
commit 19b8491b18
4 changed files with 60 additions and 1 deletions
+2 -1
View File
@@ -1,5 +1,6 @@
import { ChatMessageContent } from "@/components/chat-message-content";
import { ClaimBoundaryBadge } from "@/components/claim-boundary-badge";
import { EvidenceAuditPanel } from "@/components/evidence-audit-panel";
import type { ChatMessageView } from "@/lib/chat-message-view";
export function AgentAvatar() {
@@ -24,7 +25,7 @@ export function ChatMessageRow({ message }: { readonly message: ChatMessageView
{message.role === "assistant" ? (
message.state === "thinking"
? <div className="thinking"><i /><i /><i /></div>
: <><ClaimBoundaryBadge status={message.techniqueTruth} /><ChatMessageContent text={message.text} /></>
: <><ClaimBoundaryBadge status={message.techniqueTruth} /><EvidenceAuditPanel claimStatus={message.techniqueTruth} /><ChatMessageContent text={message.text} /></>
) : <p>{message.text}</p>}
</div>
</div>
@@ -0,0 +1,33 @@
type AuditRow = {
label: string;
status: "required" | "partial" | "blocked";
boundary: string;
};
const defaultAuditRows: AuditRow[] = [
{ label: "D1 / Natal", status: "required", boundary: "基础命盘层" },
{ label: "Varga: D9 / D10 / D2 / D11", status: "required", boundary: "按问题域调用,不混用" },
{ label: "Vimshottari Dasha", status: "required", boundary: "阶段证据之一" },
{ label: "Narayana Dasha", status: "required", boundary: "应期/校时必须交叉" },
{ label: "Transit / Gochara", status: "partial", boundary: "精确日/月仍需 holdout" },
{ label: "Shadbala / Ashtakavarga", status: "partial", boundary: "组件 parity 未全闭环" },
{ label: "Functional Benefic/Malefic", status: "required", boundary: "不能只看自然吉凶" },
{ label: "MEVG / Real Case Calibration", status: "blocked", boundary: "外部校准不足时降级" },
];
export function EvidenceAuditPanel({ claimStatus }: { readonly claimStatus?: string }) {
return (
<details className="evidence-audit-panel">
<summary> · {claimStatus || "unknown"}</summary>
<div className="evidence-audit-table" role="table" aria-label="Technique Audit Table">
{defaultAuditRows.map((row) => (
<div className="evidence-audit-row" role="row" key={row.label}>
<span role="cell">{row.label}</span>
<b role="cell" data-status={row.status}>{row.status}</b>
<small role="cell">{row.boundary}</small>
</div>
))}
</div>
</details>
);
}