inspector/clients/web/src/components/groups/SamplingRequestPanel/SamplingRequestPanel.stories.tsx
cliffhall 2d4fca4fa6 Phase 1: Refactor all 16 element component interfaces to use MCP SDK types
Replace ad-hoc local type definitions in element components with real
MCP SDK types and Inspector wrapper types from core/mcp/types.ts:

Schema-typed primitives:
- LogLevelBadge: LogLevel → LoggingLevel (SDK)
- TransportBadge: "stdio"|"http" → ServerType (core), add sse/streamable-http
- TaskStatusBadge: local TaskStatus → SDK TaskStatus (working/input_required/...)
- ServerStatusIndicator: inline union → ConnectionStatus (core), "failed"→"error"

MCP wrapper consumers:
- AnnotationBadge: label+variant → facet+value with SDK Role type
- CapabilityItem: name:string → capability:keyof ServerCapabilities|ClientCapabilities
- LogEntry: flat props → entry:{receivedAt:Date, params:LoggingMessageNotification["params"]}
- MessageBubble: flat props → message:SamplingMessage|PromptMessage
- ProgressDisplay: flat props → params:ProgressNotification["params"]

Composite-input elements:
- ContentViewer: type+content+mimeType → block:ContentBlock (SDK discriminated union)
- InlineError: message+details → error:{message,data?}
- ConnectionToggle: checked+loading+onChange → status:ConnectionStatus+onConnect/onDisconnect

Also updates all group/screen/view consumers to keep the build green,
and renames CSS variable --inspector-status-failed → --inspector-status-error.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 11:57:53 -04:00

135 lines
2.9 KiB
TypeScript

import type { Meta, StoryObj } from "@storybook/react-vite";
import { fn } from "storybook/test";
import { SamplingRequestPanel } from "./SamplingRequestPanel";
const meta: Meta<typeof SamplingRequestPanel> = {
title: "Groups/SamplingRequestPanel",
component: SamplingRequestPanel,
args: {
responseText: "",
modelUsed: "claude-3-sonnet",
stopReason: "end_turn",
onResponseChange: fn(),
onModelChange: fn(),
onStopReasonChange: fn(),
onAutoRespond: fn(),
onSend: fn(),
onReject: fn(),
},
};
export default meta;
type Story = StoryObj<typeof SamplingRequestPanel>;
export const SimpleRequest: Story = {
args: {
messages: [
{
role: "user",
content: {
type: "text",
text: "What is the capital of France?",
},
},
],
},
};
export const WithModelHints: Story = {
args: {
messages: [
{
role: "user",
content: { type: "text", text: "Summarize this document for me." },
},
],
modelHints: ["claude-3-sonnet", "gpt-4"],
},
};
export const WithPriorities: Story = {
args: {
messages: [
{
role: "user",
content: { type: "text", text: "Translate this text to Spanish." },
},
],
modelHints: ["claude-3-sonnet"],
costPriority: 0.3,
speedPriority: 0.5,
intelligencePriority: 0.9,
},
};
export const WithAllParams: Story = {
args: {
messages: [
{
role: "user",
content: { type: "text", text: "Write a haiku about programming." },
},
{
role: "assistant",
content: { type: "text", text: "Here is a haiku:" },
},
],
maxTokens: 1024,
stopSequences: ["\n\n", "END"],
temperature: 0.7,
includeContext: "thisServer",
},
};
export const WithTools: Story = {
args: {
messages: [
{
role: "user",
content: {
type: "text",
text: "Look up the weather in San Francisco.",
},
},
],
tools: [
{
name: "get_weather",
description: "Get the current weather for a given location.",
inputSchema: {
type: "object",
properties: {
location: { type: "string", description: "City name" },
},
required: ["location"],
},
},
{
name: "search_web",
description: "Search the web for information.",
inputSchema: {
type: "object",
properties: {
query: { type: "string", description: "Search query" },
},
required: ["query"],
},
},
],
toolChoice: "auto",
},
};
export const PrefilledResponse: Story = {
args: {
messages: [
{
role: "user",
content: { type: "text", text: "What is 2 + 2?" },
},
],
responseText: "The answer is 4.",
modelUsed: "claude-3-haiku",
stopReason: "end_turn",
},
};