papayu/src/pages/tasks/AgenticResult.tsx
Yuriy e76236dc55 Initial commit: papa-yu v2.4.4
- Schema version (x_schema_version, schema_hash) в prompt/trace
- Кеш read/search/logs/env (ContextCache) в plan-цикле
- Контекст-диета: MAX_FILES=8, MAX_FILE_CHARS=20k, MAX_TOTAL_CHARS=120k
- Plan→Apply двухфазность, NO_CHANGES, path sanitization
- Protected paths, content validation, EOL normalization
- Trace (PAPAYU_TRACE), redaction (PAPAYU_TRACE_RAW)
- Preview diff, undo/redo, transactional apply

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-01-31 11:33:19 +03:00

89 lines
3.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import type { AgenticRunResult, AnalyzeReport } from "@/lib/types";
export interface AgenticResultProps {
agenticResult: AgenticRunResult | null;
lastReport: AnalyzeReport | null;
undoAvailable: boolean;
onUndo: () => void;
onDownloadReport: () => void;
onDownloadDiff: () => void;
}
const sectionStyle: React.CSSProperties = {
marginTop: "16px",
padding: "12px",
background: "#eff6ff",
borderRadius: "8px",
border: "1px solid #bfdbfe",
};
export function AgenticResult({
agenticResult,
lastReport,
undoAvailable,
onUndo,
onDownloadReport,
onDownloadDiff,
}: AgenticResultProps) {
if (!agenticResult) return null;
const lastAttempt = agenticResult.attempts[agenticResult.attempts.length - 1];
const canDownloadDiff = !!lastAttempt?.preview?.diffs?.length;
return (
<section style={sectionStyle}>
<h3 style={{ fontSize: "14px", marginBottom: "8px", fontWeight: 600 }}>Результат исправления</h3>
<p style={{ fontSize: "13px", marginBottom: "10px" }}>{agenticResult.final_summary}</p>
{agenticResult.attempts.length > 0 && (
<div style={{ marginBottom: "10px", overflowX: "auto" }}>
<table style={{ width: "100%", borderCollapse: "collapse", fontSize: "12px" }}>
<thead>
<tr style={{ borderBottom: "1px solid #e2e8f0" }}>
<th style={{ textAlign: "left", padding: "6px 8px" }}>Попытка</th>
<th style={{ textAlign: "left", padding: "6px 8px" }}>Verify</th>
<th style={{ textAlign: "left", padding: "6px 8px" }}>Статус</th>
</tr>
</thead>
<tbody>
{agenticResult.attempts.map((a, i) => (
<tr key={i} style={{ borderBottom: "1px solid #f1f5f9" }}>
<td style={{ padding: "6px 8px" }}>{a.attempt}</td>
<td style={{ padding: "6px 8px" }}>{a.verify.ok ? "✓" : "✗"}</td>
<td style={{ padding: "6px 8px" }}>{!a.verify.ok ? "откачено" : a.apply.ok ? "применено" : "—"}</td>
</tr>
))}
</tbody>
</table>
</div>
)}
<div style={{ display: "flex", gap: "8px", flexWrap: "wrap" }}>
<button
type="button"
onClick={onDownloadReport}
disabled={!lastReport}
style={{ padding: "6px 12px", border: "1px solid #3b82f6", borderRadius: "6px", background: "#fff", fontSize: "12px" }}
>
Скачать отчёт (JSON)
</button>
<button
type="button"
onClick={onDownloadDiff}
disabled={!canDownloadDiff}
style={{ padding: "6px 12px", border: "1px solid #3b82f6", borderRadius: "6px", background: "#fff", fontSize: "12px" }}
>
Скачать изменения (diff)
</button>
{undoAvailable && (
<button
type="button"
onClick={onUndo}
style={{ padding: "6px 12px", border: "1px solid #64748b", borderRadius: "6px", background: "#64748b", color: "#fff", fontSize: "12px" }}
>
Откатить изменения (Undo)
</button>
)}
</div>
</section>
);
}