- components/phase-divider.tsx: PhaseChip (header, next to the session title: phase-colored dot + Probing/Planning/Teaching) and PhaseDivider (the transcript boundary: color-coded dotted rules + a small chip — 'Plan · N nodes' at the plan seam, 'Teaching' at the teach seam; probe never renders, phases only advance). planNodeCount reads the seam message's first plan tree. - chat.tsx: dividers render at MESSAGE boundaries (phaseTimeline, one linear fold) — the seam is the transition to the message's phase, so the seam message's prose sits below its divider. requiresReveal now uses phaseAt3 teach (an occupied node), so probe- AND plan-phase questions auto-open. - Retired the part-level plan-divider (artifact registry): the boundary is message-level, not part-level. Its tests replaced by render-phase-divider tests; core/phases gains tested phaseTimeline.
28 lines
1.2 KiB
TypeScript
28 lines
1.2 KiB
TypeScript
import type { ComponentType } from "react";
|
|
import type { ArtifactPartProps } from "@/src/core";
|
|
import { DemoCard } from "@/components/artifacts/demo-card";
|
|
import { JobCard } from "@/components/artifacts/job-card";
|
|
import { VisualCard } from "@/components/artifacts/visual-card";
|
|
|
|
/**
|
|
* Artifact renderer registry — the extension point for tool-part UI.
|
|
*
|
|
* chat.tsx renders any tool part it doesn't specially handle (i.e. not
|
|
* quiz/ask) by looking the tool name up here. Add your renderer — do NOT
|
|
* edit chat.tsx (see docs/plan.md file-ownership rules).
|
|
*
|
|
* Typical shape: while the part is input-available render an activity card
|
|
* (poll GET /api/jobs?chatId=…; on completion call
|
|
* ChatActionsContext.syncFromServer()); when output-available render the
|
|
* artifact itself from part.output.
|
|
*/
|
|
export const artifactRenderers: Record<string, ComponentType<ArtifactPartProps>> = {
|
|
research: JobCard,
|
|
// plan_* parts render nothing inline by design: the phase seam is a
|
|
// message-level boundary, drawn by PhaseDivider in chat.tsx (the old
|
|
// part-level plan_init divider retired with it).
|
|
// Artifacts (W6 fills in the components):
|
|
demo: DemoCard,
|
|
visual: VisualCard,
|
|
};
|