diff --git a/components/ai-elements/reasoning.tsx b/components/ai-elements/reasoning.tsx index ecb828d..92a2293 100644 --- a/components/ai-elements/reasoning.tsx +++ b/components/ai-elements/reasoning.tsx @@ -137,7 +137,7 @@ const defaultGetThinkingMessage = (isStreaming: boolean) => { if (isStreaming) { return Thinking...; } - return

Agent's thinking

; + return

AGENT THINKING

; }; export const ReasoningTrigger = memo( diff --git a/components/answered-card.tsx b/components/answered-card.tsx index ce95bda..9a53f4f 100644 --- a/components/answered-card.tsx +++ b/components/answered-card.tsx @@ -41,7 +41,7 @@ export function AnsweredCard({ answer }: { answer: QuestionAnswerData }) { ThinkingBlock, instead of an inset inside the answer. Same muted rail as before; the label is now plain "Your thinking". */} {answer.readingThinking && ( - + )}
@@ -139,7 +139,7 @@ export function AnsweredCard({ answer }: { answer: QuestionAnswerData }) { thinking is the identical collapsible ThinkingBlock — it just happens to sit inside the quiz container. Same placement, same trigger, same 50%-italic quote block on expand. */ - + )} {/* px-3→removed: card p-4 + box px-3 double-inset sat the "Why" label deeper diff --git a/components/practice-cards.tsx b/components/practice-cards.tsx index 6f86520..ac25c0f 100644 --- a/components/practice-cards.tsx +++ b/components/practice-cards.tsx @@ -1,6 +1,7 @@ "use client"; import { MessageResponse } from "@/components/ai-elements/message"; +import { cn } from "@/lib/utils"; import type { ArtifactPartProps } from "@/src/core"; /** @@ -54,6 +55,19 @@ const OUTCOME_LABEL: Record = { dismissed: "Dismissed", }; +/* The outcome chips (owner round 3, 2026-10-05): the EXACT register of the + * quiz cards' correct/incorrect bubbles. Colors per outcome — solved reads + * green (the "correct" twin), solved-with-hints amber (succeeded with + * cost), surrendered red (the problem beat the learner), moved on muted + * (the agent's call, not a verdict against him). */ +const OUTCOME_CHIP: Record = { + solved: "bg-green-500/15 text-green-500", + solvedWithHints: "bg-amber-500/15 text-amber-500", + movedOn: "bg-muted text-muted-foreground", + surrendered: "bg-red-500/15 text-red-500", + dismissed: "bg-muted text-muted-foreground", +}; + export function ConcludeCard({ part }: ArtifactPartProps) { // The conclusion redesigned (owner round, 2026-10-05): the SOLUTION is // the hero — the modelSolution committed at pose time (part.reveal, the @@ -79,26 +93,36 @@ export function ConcludeCard({ part }: ArtifactPartProps) { return (
-
- {OUTCOME_LABEL[outcome] ?? "Concluded"} + {/* The heading row (owner round 3, 2026-10-05): plain 'Concluded' + eyebrow + the outcome in the quiz cards' EXACT chip register — + no more two same-weight headings stacked. */} +
+ Concluded + {(OUTCOME_LABEL[outcome] ?? "") !== "" && outcome !== "dismissed" && ( + + {OUTCOME_LABEL[outcome]} + + )}
- {/* LABELED SECTIONS (owner round 2, 2026-10-05): 'Solved' alone over - unlabeled prose didn't read as the model solution — the hero now - carries its own label, and the verdict section mirrors it. Same - register as the quiz cards' section labels. */} - {reveal.length > 0 && ( -
-
Model solution
-
- {reveal} -
+ {/* The verdict — plain prose under the heading, no 'Verdict:' label + (owner round 3): the same quiet 50% register as quiz explanations. */} + {verdict.length > 0 && ( +
+ {verdict}
)} - {verdict.length > 0 && ( -
- Verdict: - {verdict} -
+ {/* Then the divider, then the labeled model solution (Slice G: the + hero is the pose's commitment, verbatim). */} + {reveal.length > 0 && ( + <> +
+
+
Model solution
+
+ {reveal} +
+
+ )}
); @@ -108,5 +132,5 @@ export function ThinkingCard({ data }: { data: PracticeThinkingData }) { // The unified row (owner rounds, 2026-10-05): one style, one label — // collapsed arrival, "Your thinking", 50%-italic quote block on expand. // Legacy records' commit flag is deliberately unread (one lane now). - return ; + return ; } diff --git a/components/practice-dock.tsx b/components/practice-dock.tsx index 4cbd724..3362dec 100644 --- a/components/practice-dock.tsx +++ b/components/practice-dock.tsx @@ -105,7 +105,7 @@ export function PracticeDock({ problemCallId, input, expanded, onExpand, onSubmi className="m-1.5 rounded-xl border border-border/70 bg-background/60 transition-colors focus-within:border-primary/50" >
- Your thinking + YOUR THINKING