diff --git a/apps/presentation/dashboard/src/data/chat.ts b/apps/presentation/dashboard/src/data/chat.ts index f6085995b6..09de145891 100644 --- a/apps/presentation/dashboard/src/data/chat.ts +++ b/apps/presentation/dashboard/src/data/chat.ts @@ -395,6 +395,13 @@ export const typedActionProposalSchema = z.object({ gate: z.record(z.string(), z.unknown()).nullable().optional(), error: z.record(z.string(), z.unknown()).nullable().optional(), checkpoint: z.record(z.string(), z.unknown()).nullable().optional(), + failure: z.record(z.string(), z.unknown()).nullable().optional(), + canonical_update_basis: z.object({ + schema_version: z.literal("loopx_chat_canonical_update_basis_v0"), + provider_revision: z.string().min(1), + source_authority: z.enum(["file_v0", "sqlite_v0"]), + registry_sha256: z.string().regex(/^[a-f0-9]{64}$/), + }).optional(), regenerated_from: z.string().nullable().optional(), operation: typedOperationEnvelopeSchema.nullable().optional(), created_at: z.string(), diff --git a/apps/presentation/dashboard/src/features/personal-workspace/context-drawer.tsx b/apps/presentation/dashboard/src/features/personal-workspace/context-drawer.tsx index c8056458f1..d1c99643db 100644 --- a/apps/presentation/dashboard/src/features/personal-workspace/context-drawer.tsx +++ b/apps/presentation/dashboard/src/features/personal-workspace/context-drawer.tsx @@ -267,7 +267,7 @@ export function ContextDrawer({ agents, attentionHistory = [], onSelectAttention : selection.kind === "run" ? t("drawer.runDetails") : selection.kind === "output" ? t("drawer.titleOutput") : selection.kind === "proposal" && selection.item.actionKind === "team.plan" && selection.item.status === "applied" ? t("proposal.teamPlan.resultTitle") - : selection.kind === "proposal" ? t(selection.item.status === "applied" ? "drawer.titleProposalApplied" : "drawer.titleProposalConfirm") + : selection.kind === "proposal" ? t(selection.item.reviewPlan?.retryOriginal ? "drawer.recoverEditResult" : selection.item.status === "applied" ? "drawer.titleProposalApplied" : "drawer.titleProposalConfirm") : selection.kind === "schedule" ? (selection.item.scheduleKind === "heartbeat" ? "Heartbeat" : t("drawer.titleSchedule")) : t("drawer.goalDetails"); const goalId = selection.kind === "proposal" ? selection.item.goalId ?? "manager" @@ -966,7 +966,7 @@ export function ContextDrawer({ agents, attentionHistory = [], onSelectAttention {selection.item.actionKind} · {selection.item.status}
{selection.item.impact}
- {selection.item.reviewPlan && selection.item.actionKind !== "team.plan" ?{selection.item.actionKind === "operation.execute" && selection.item.status === "gated" + {selection.item.reviewPlan && !selection.item.reviewPlan.retryOriginal && selection.item.actionKind !== "team.plan" ?
{selection.item.actionKind === "operation.execute" && selection.item.status === "gated" ? t("actionReview.operation_group_confirmation") : selection.item.actionKind === "operation.execute" && selection.item.reviewPlan.reason === "readback_unverified" ? t("actionReview.operation_result_delivery_pending") @@ -977,7 +977,7 @@ export function ContextDrawer({ agents, attentionHistory = [], onSelectAttention {selection.item.status === "applied" && selection.item.actionKind !== "team.plan" ?
{t("drawer.proposalStale")}
: null} - {selection.item.status === "error" ?{t("drawer.proposalRejected")}
: null} {selection.item.status === "deferred" ?{t("drawer.proposalDeferred")}
: null} {selection.item.status === "gated" ?