Stands up the type-only prerequisites for the v2 UX component
interfaces refactor per specification/v2_ux_interfaces_plan.md.
Phase 0.1 — MCP SDK dependency:
- Add @modelcontextprotocol/sdk ^1.29.0 and zod ^4.3.6 to both the
root package.json and clients/web/package.json so component files
can import Tool / Prompt / Resource / Task / LoggingLevel / etc.
directly from the SDK.
Phase 0.2 — Inspector wrapper-types module:
- Create core/mcp/types.ts mirroring the type-only subset of v1.5's
core/mcp/types.ts: MCPServerConfig (discriminated union), ServerType,
MCPConfig, ConnectionStatus, StderrLogEntry, MessageEntry (Date
timestamps, not ISO strings), FetchRequestEntry(+Base), ServerState,
and the *Invocation types. Adds v2-only wrappers
InspectorResourceSubscription and InspectorServerJsonDraft.
- Add core/mcp/taskNotificationSchemas.ts for the Inspector-owned
notifications/tasks/list_changed signal (not in the SDK).
- Add core/mcp/elicitationCreateMessage.ts re-exporting ElicitRequest
and ElicitResult plus an InspectorPendingElicitation interface for
typing the pending-queue.
- Add core/json/jsonUtils.ts for the shared JsonValue / JsonObject
types used inside core/mcp/types.ts.
- Copy v1.5's clients/web/src/utils/jsonUtils.ts (JsonSchemaType) and
schemaUtils.ts (AJV-backed validators) verbatim so SchemaForm can
switch off its local JsonSchema type.
- Copy v1.5's clients/web/src/lib/types/customHeaders.ts verbatim for
ServerSettingsForm and the experimental panel.
- Add clients/web/src/types/navigation.ts with InspectorTab (UI-routing
concept, lives with the web client rather than in core/).
- Wire tsconfig.app.json + vite.config.ts with the @inspector/core/*
path alias so component files can import from core/ without
relative-path hell.
Phase 0.3 — Vet (likely) hedges in v2_ux_interfaces.md:
- Follow-up sweep on commit 2ef257da. Replaces the remaining
useMcpClient references with useInspectorClient, ties pending
elicitation / sampling callbacks to the in-InspectorClient queue
rather than a non-existent useElicitation / useSampling hook,
corrects Task references to the SDK type (not an InspectorTask
wrapper), corrects log hook wiring to useMessageLog, and strikes
all remaining v2-only hooks with explicit "no v1.5 analog"
annotations. grep "likely" specification/v2_ux_interfaces.md now
returns zero results.
Phase 0.4 — Local-redeclaration inventory:
- specification/v2_ux_interfaces_phase_0_4_inventory.md enumerates
every ad hoc local type (JsonSchema, LogLevel, TaskStatus,
PromptItem, ResourceItem, ToolListItemProps, RootEntry, KeyValuePair,
inline ConnectionStatus / transport unions) that will be replaced
in Phases 1–4, including the file it lives in, every site that
re-imports it, and the SDK / wrapper type that replaces it. Intended
for the Phase 0 PR description and as a running checklist during
the refactor.
Build state: npm run build / lint / format:check all pass in
clients/web.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
23 lines
1.3 KiB
TypeScript
23 lines
1.3 KiB
TypeScript
/**
|
|
* Notification schema for notifications/tasks/list_changed (server → client).
|
|
*
|
|
* The SDK exports list_changed schemas for resources, prompts, tools, and roots, and
|
|
* TaskStatusNotificationSchema for notifications/tasks/status, but no schema for
|
|
* notifications/tasks/list_changed. Mainline (v1) does not register a schema for it
|
|
* either: they use client.fallbackNotificationHandler so any unmatched notification
|
|
* (including tasks/list_changed) is passed to onNotification, and App branches on
|
|
* notification.method === "notifications/tasks/list_changed". We register specific
|
|
* handlers only (no fallback), so we define this schema to handle the notification.
|
|
*
|
|
* List-changed notifications have no defined params (they are signals to refetch);
|
|
* the SDK uses params: NotificationsParamsSchema.optional() for other list_changed
|
|
* types (which is private, so we can't import it). We accept optional params only
|
|
* so the notification parses; we do not use any params in the handler.
|
|
*/
|
|
import { NotificationSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
import { z } from "zod/v4";
|
|
|
|
export const TasksListChangedNotificationSchema = NotificationSchema.extend({
|
|
method: z.literal("notifications/tasks/list_changed"),
|
|
params: z.record(z.string(), z.unknown()).optional(),
|
|
});
|