Files
learnharness/components/artifacts/index.ts
T

28 lines
1.2 KiB
TypeScript
Raw Normal View History

2026-08-22 09:06:24 +03:00
import type { ComponentType } from "react";
import type { ArtifactPartProps } from "@/src/core";
import { DemoCard } from "@/components/artifacts/demo-card";
2026-08-22 09:36:15 +03:00
import { JobCard } from "@/components/artifacts/job-card";
import { VisualCard } from "@/components/artifacts/visual-card";
2026-08-22 09:06:24 +03:00
/**
* 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>> = {
2026-08-22 09:36:15 +03:00
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,
2026-08-22 09:06:24 +03:00
};