fix(types): restore task wire types removed with the task feature (#2248)
This commit is contained in:
parent
c8d7401b46
commit
db28156a23
13 changed files with 556 additions and 71 deletions
7
.changeset/restore-task-wire-types.md
Normal file
7
.changeset/restore-task-wire-types.md
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
'@modelcontextprotocol/core': minor
|
||||
'@modelcontextprotocol/server': minor
|
||||
'@modelcontextprotocol/client': minor
|
||||
---
|
||||
|
||||
Restore the 2025-11-25 task wire types that were removed together with the task feature: the task schemas and inferred types, task members of the request/result/notification unions, the `task` request-params augmentation, the `tasks` capability key, the `isTaskAugmentedRequestParams` guard, and `RELATED_TASK_META_KEY`. The task feature itself remains removed — servers do not advertise the `tasks` capability and inbound `tasks/*` requests receive `-32601` — but the wire surface stays so SDKs interoperate cleanly with peers on the 2025-11-25 revision.
|
||||
|
|
@ -499,7 +499,9 @@ The 2025-11 task side-channel through `Protocol` is removed (was always `@experi
|
|||
| `TaskMessageQueue`, `InMemoryTaskMessageQueue`, `BaseQueuedMessage`, `Queued*`, `CreateTaskServerContext`, `TaskServerContext`, `TaskToolExecution` | removed |
|
||||
| `ResponseMessage`, `BaseResponseMessage`, `ErrorMessage`, `AsyncGeneratorValue`, `TaskStatusMessage`, `TaskCreatedMessage`, `ResultMessage`, `takeResult`, `toArrayAsync` | removed |
|
||||
|
||||
`TaskStore` / `InMemoryTaskStore` / `CreateTaskOptions` / `isTerminal` (storage layer) and `TaskCreationParams` are also removed; they will return with the SEP-2663 server-directed plugin.
|
||||
`TaskStore` / `InMemoryTaskStore` / `CreateTaskOptions` / `isTerminal` (storage layer) are also removed; they will return with the SEP-2663 server-directed plugin.
|
||||
|
||||
NOT removed (wire surface, kept for 2025-11-25 interop): task Zod schemas + inferred types (`Task`, `TaskStatus`, `TaskMetadata`, `RelatedTaskMetadata`, `CreateTaskResult`, `GetTask*`, `ListTasks*`, `CancelTask*`, `TaskStatusNotification*`, `TaskAugmentedRequestParams`), task members of the request/result/notification unions, the `tasks` capability key, `isTaskAugmentedRequestParams`, `RELATED_TASK_META_KEY`. Inbound `tasks/*` requests → `-32601`.
|
||||
|
||||
## 13. Client Behavioral Changes
|
||||
|
||||
|
|
|
|||
|
|
@ -892,7 +892,9 @@ The 2025-11 experimental tasks side-channel woven through `Protocol` has been re
|
|||
- `TaskMessageQueue`, `InMemoryTaskMessageQueue`, `BaseQueuedMessage` and the `Queued*` message types, `CreateTaskServerContext`, `TaskServerContext`, `TaskToolExecution`
|
||||
- `examples/{client,server}/src/simpleTaskInteractive*.ts`
|
||||
|
||||
**Also removed:** the storage layer (`TaskStore`, `InMemoryTaskStore`, `CreateTaskOptions`, `isTerminal`) and `TaskCreationParams`. They will return as part of the SEP-2663 server-directed plugin in a follow-up.
|
||||
**Also removed:** the storage layer (`TaskStore`, `InMemoryTaskStore`, `CreateTaskOptions`, `isTerminal`). It will return as part of the SEP-2663 server-directed plugin in a follow-up.
|
||||
|
||||
**Wire types remain.** The task wire surface defined by the 2025-11-25 protocol revision is still exported, for interoperability with peers on that revision: the task Zod schemas and their inferred types (`Task`, `TaskStatus`, `TaskMetadata`, `RelatedTaskMetadata`, `CreateTaskResult`, `GetTask*`, `GetTaskPayload*`, `ListTasks*`, `CancelTask*`, `TaskStatusNotification*`, `TaskAugmentedRequestParams`), the task members of the request/result/notification unions, the `tasks` capability key, the `isTaskAugmentedRequestParams` guard, and `RELATED_TASK_META_KEY`. Only the behavior is gone: servers built on this SDK do not advertise the `tasks` capability, and inbound `tasks/*` requests receive a standard `-32601` (method not found) error.
|
||||
|
||||
There is no migration path for the removed surface; it was always `@experimental`. Task support is planned to return as an opt-in extension plugin per SEP-2663.
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@ export const SPEC_SCHEMA_NAMES: ReadonlySet<string> = new Set([
|
|||
'CallToolRequestParamsSchema',
|
||||
'CallToolRequestSchema',
|
||||
'CallToolResultSchema',
|
||||
'CancelTaskRequestSchema',
|
||||
'CancelTaskResultSchema',
|
||||
'CancelledNotificationParamsSchema',
|
||||
'CancelledNotificationSchema',
|
||||
'ClientCapabilitiesSchema',
|
||||
|
|
@ -23,6 +25,7 @@ export const SPEC_SCHEMA_NAMES: ReadonlySet<string> = new Set([
|
|||
'CreateMessageRequestSchema',
|
||||
'CreateMessageResultSchema',
|
||||
'CreateMessageResultWithToolsSchema',
|
||||
'CreateTaskResultSchema',
|
||||
'CursorSchema',
|
||||
'ElicitRequestFormParamsSchema',
|
||||
'ElicitRequestParamsSchema',
|
||||
|
|
@ -37,6 +40,10 @@ export const SPEC_SCHEMA_NAMES: ReadonlySet<string> = new Set([
|
|||
'GetPromptRequestParamsSchema',
|
||||
'GetPromptRequestSchema',
|
||||
'GetPromptResultSchema',
|
||||
'GetTaskPayloadRequestSchema',
|
||||
'GetTaskPayloadResultSchema',
|
||||
'GetTaskRequestSchema',
|
||||
'GetTaskResultSchema',
|
||||
'IconSchema',
|
||||
'IconsSchema',
|
||||
'ImageContentSchema',
|
||||
|
|
@ -63,6 +70,8 @@ export const SPEC_SCHEMA_NAMES: ReadonlySet<string> = new Set([
|
|||
'ListResourcesResultSchema',
|
||||
'ListRootsRequestSchema',
|
||||
'ListRootsResultSchema',
|
||||
'ListTasksRequestSchema',
|
||||
'ListTasksResultSchema',
|
||||
'ListToolsRequestSchema',
|
||||
'ListToolsResultSchema',
|
||||
'LoggingLevelSchema',
|
||||
|
|
@ -101,6 +110,7 @@ export const SPEC_SCHEMA_NAMES: ReadonlySet<string> = new Set([
|
|||
'ReadResourceRequestParamsSchema',
|
||||
'ReadResourceRequestSchema',
|
||||
'ReadResourceResultSchema',
|
||||
'RelatedTaskMetadataSchema',
|
||||
'RequestIdSchema',
|
||||
'RequestMetaSchema',
|
||||
'RequestSchema',
|
||||
|
|
@ -130,6 +140,13 @@ export const SPEC_SCHEMA_NAMES: ReadonlySet<string> = new Set([
|
|||
'StringSchemaSchema',
|
||||
'SubscribeRequestParamsSchema',
|
||||
'SubscribeRequestSchema',
|
||||
'TaskAugmentedRequestParamsSchema',
|
||||
'TaskCreationParamsSchema',
|
||||
'TaskMetadataSchema',
|
||||
'TaskSchema',
|
||||
'TaskStatusNotificationParamsSchema',
|
||||
'TaskStatusNotificationSchema',
|
||||
'TaskStatusSchema',
|
||||
'TextContentSchema',
|
||||
'TextResourceContentsSchema',
|
||||
'TitledMultiSelectEnumSchemaSchema',
|
||||
|
|
|
|||
|
|
@ -79,6 +79,7 @@ export {
|
|||
LATEST_PROTOCOL_VERSION,
|
||||
METHOD_NOT_FOUND,
|
||||
PARSE_ERROR,
|
||||
RELATED_TASK_META_KEY,
|
||||
SUPPORTED_PROTOCOL_VERSIONS
|
||||
} from '../../types/constants.js';
|
||||
|
||||
|
|
@ -100,6 +101,7 @@ export {
|
|||
isJSONRPCRequest,
|
||||
isJSONRPCResponse,
|
||||
isJSONRPCResultResponse,
|
||||
isTaskAugmentedRequestParams,
|
||||
parseJSONRPCMessage
|
||||
} from '../../types/guards.js';
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ export const LATEST_PROTOCOL_VERSION = '2025-11-25';
|
|||
export const DEFAULT_NEGOTIATED_PROTOCOL_VERSION = '2025-03-26';
|
||||
export const SUPPORTED_PROTOCOL_VERSIONS = [LATEST_PROTOCOL_VERSION, '2025-06-18', '2025-03-26', '2024-11-05', '2024-10-07'];
|
||||
|
||||
export const RELATED_TASK_META_KEY = 'io.modelcontextprotocol/related-task';
|
||||
|
||||
/* JSON-RPC types */
|
||||
export const JSONRPC_VERSION = '2.0';
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,8 @@ import {
|
|||
JSONRPCNotificationSchema,
|
||||
JSONRPCRequestSchema,
|
||||
JSONRPCResponseSchema,
|
||||
JSONRPCResultResponseSchema
|
||||
JSONRPCResultResponseSchema,
|
||||
TaskAugmentedRequestParamsSchema
|
||||
} from './schemas.js';
|
||||
import type {
|
||||
CallToolResult,
|
||||
|
|
@ -21,7 +22,8 @@ import type {
|
|||
JSONRPCNotification,
|
||||
JSONRPCRequest,
|
||||
JSONRPCResponse,
|
||||
JSONRPCResultResponse
|
||||
JSONRPCResultResponse,
|
||||
TaskAugmentedRequestParams
|
||||
} from './types.js';
|
||||
|
||||
/**
|
||||
|
|
@ -79,6 +81,15 @@ export const isCallToolResult = (value: unknown): value is CallToolResult => {
|
|||
return CallToolResultSchema.safeParse(value).success;
|
||||
};
|
||||
|
||||
/**
|
||||
* Checks if a value is a valid {@linkcode TaskAugmentedRequestParams}.
|
||||
* @param value - The value to check.
|
||||
*
|
||||
* @returns True if the value is a valid {@linkcode TaskAugmentedRequestParams}, false otherwise.
|
||||
*/
|
||||
export const isTaskAugmentedRequestParams = (value: unknown): value is TaskAugmentedRequestParams =>
|
||||
TaskAugmentedRequestParamsSchema.safeParse(value).success;
|
||||
|
||||
export const isInitializeRequest = (value: unknown): value is InitializeRequest => InitializeRequestSchema.safeParse(value).success;
|
||||
|
||||
export const isInitializedNotification = (value: unknown): value is InitializedNotification =>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import * as z from 'zod/v4';
|
||||
|
||||
import { JSONRPC_VERSION } from './constants.js';
|
||||
import { JSONRPC_VERSION, RELATED_TASK_META_KEY } from './constants.js';
|
||||
import type {
|
||||
JSONArray,
|
||||
JSONObject,
|
||||
|
|
@ -27,11 +27,42 @@ export const ProgressTokenSchema = z.union([z.string(), z.number().int()]);
|
|||
*/
|
||||
export const CursorSchema = z.string();
|
||||
|
||||
/**
|
||||
* Task creation parameters, used to ask that the server create a task to represent a request.
|
||||
*/
|
||||
export const TaskCreationParamsSchema = z.looseObject({
|
||||
/**
|
||||
* Requested duration in milliseconds to retain task from creation.
|
||||
*/
|
||||
ttl: z.number().optional(),
|
||||
|
||||
/**
|
||||
* Time in milliseconds to wait between task status requests.
|
||||
*/
|
||||
pollInterval: z.number().optional()
|
||||
});
|
||||
|
||||
export const TaskMetadataSchema = z.object({
|
||||
ttl: z.number().optional()
|
||||
});
|
||||
|
||||
/**
|
||||
* Metadata for associating messages with a task.
|
||||
* Include this in the `_meta` field under the key `io.modelcontextprotocol/related-task`.
|
||||
*/
|
||||
export const RelatedTaskMetadataSchema = z.object({
|
||||
taskId: z.string()
|
||||
});
|
||||
|
||||
export const RequestMetaSchema = z.looseObject({
|
||||
/**
|
||||
* If specified, the caller is requesting out-of-band progress notifications for this request (as represented by notifications/progress). The value of this parameter is an opaque token that will be attached to any subsequent notifications. The receiver is not obligated to provide these notifications.
|
||||
*/
|
||||
progressToken: ProgressTokenSchema.optional()
|
||||
progressToken: ProgressTokenSchema.optional(),
|
||||
/**
|
||||
* If specified, this request is related to the provided task.
|
||||
*/
|
||||
[RELATED_TASK_META_KEY]: RelatedTaskMetadataSchema.optional()
|
||||
});
|
||||
|
||||
/**
|
||||
|
|
@ -44,6 +75,21 @@ export const BaseRequestParamsSchema = z.object({
|
|||
_meta: RequestMetaSchema.optional()
|
||||
});
|
||||
|
||||
/**
|
||||
* Common params for any task-augmented request.
|
||||
*/
|
||||
export const TaskAugmentedRequestParamsSchema = BaseRequestParamsSchema.extend({
|
||||
/**
|
||||
* If specified, the caller is requesting task-augmented execution for this request.
|
||||
* The request will return a `CreateTaskResult` immediately, and the actual result can be
|
||||
* retrieved later via `tasks/result`.
|
||||
*
|
||||
* Task augmentation is subject to capability negotiation - receivers MUST declare support
|
||||
* for task augmentation of specific request types in their capabilities.
|
||||
*/
|
||||
task: TaskMetadataSchema.optional()
|
||||
});
|
||||
|
||||
export const RequestSchema = z.object({
|
||||
method: z.string(),
|
||||
params: BaseRequestParamsSchema.loose().optional()
|
||||
|
|
@ -285,6 +331,72 @@ const ElicitationCapabilitySchema = z.preprocess(
|
|||
)
|
||||
);
|
||||
|
||||
/**
|
||||
* Task capabilities for clients, indicating which request types support task creation.
|
||||
*/
|
||||
export const ClientTasksCapabilitySchema = z.looseObject({
|
||||
/**
|
||||
* Present if the client supports listing tasks.
|
||||
*/
|
||||
list: JSONObjectSchema.optional(),
|
||||
/**
|
||||
* Present if the client supports cancelling tasks.
|
||||
*/
|
||||
cancel: JSONObjectSchema.optional(),
|
||||
/**
|
||||
* Capabilities for task creation on specific request types.
|
||||
*/
|
||||
requests: z
|
||||
.looseObject({
|
||||
/**
|
||||
* Task support for sampling requests.
|
||||
*/
|
||||
sampling: z
|
||||
.looseObject({
|
||||
createMessage: JSONObjectSchema.optional()
|
||||
})
|
||||
.optional(),
|
||||
/**
|
||||
* Task support for elicitation requests.
|
||||
*/
|
||||
elicitation: z
|
||||
.looseObject({
|
||||
create: JSONObjectSchema.optional()
|
||||
})
|
||||
.optional()
|
||||
})
|
||||
.optional()
|
||||
});
|
||||
|
||||
/**
|
||||
* Task capabilities for servers, indicating which request types support task creation.
|
||||
*/
|
||||
export const ServerTasksCapabilitySchema = z.looseObject({
|
||||
/**
|
||||
* Present if the server supports listing tasks.
|
||||
*/
|
||||
list: JSONObjectSchema.optional(),
|
||||
/**
|
||||
* Present if the server supports cancelling tasks.
|
||||
*/
|
||||
cancel: JSONObjectSchema.optional(),
|
||||
/**
|
||||
* Capabilities for task creation on specific request types.
|
||||
*/
|
||||
requests: z
|
||||
.looseObject({
|
||||
/**
|
||||
* Task support for tool requests.
|
||||
*/
|
||||
tools: z
|
||||
.looseObject({
|
||||
call: JSONObjectSchema.optional()
|
||||
})
|
||||
.optional()
|
||||
})
|
||||
.optional()
|
||||
});
|
||||
|
||||
/**
|
||||
* Capabilities a client may support. Known capabilities are defined here, in this schema, but this is not a closed set: any client can define its own, additional capabilities.
|
||||
*/
|
||||
|
|
@ -324,6 +436,10 @@ export const ClientCapabilitiesSchema = z.object({
|
|||
listChanged: z.boolean().optional()
|
||||
})
|
||||
.optional(),
|
||||
/**
|
||||
* Present if the client supports task creation.
|
||||
*/
|
||||
tasks: ClientTasksCapabilitySchema.optional(),
|
||||
/**
|
||||
* Extensions that the client supports. Keys are extension identifiers (vendor-prefix/extension-name).
|
||||
*/
|
||||
|
|
@ -400,6 +516,10 @@ export const ServerCapabilitiesSchema = z.object({
|
|||
listChanged: z.boolean().optional()
|
||||
})
|
||||
.optional(),
|
||||
/**
|
||||
* Present if the server supports task creation.
|
||||
*/
|
||||
tasks: ServerTasksCapabilitySchema.optional(),
|
||||
/**
|
||||
* Extensions that the server supports. Keys are extension identifiers (vendor-prefix/extension-name).
|
||||
*/
|
||||
|
|
@ -496,6 +616,120 @@ export const PaginatedResultSchema = ResultSchema.extend({
|
|||
nextCursor: CursorSchema.optional()
|
||||
});
|
||||
|
||||
/**
|
||||
* The status of a task.
|
||||
* */
|
||||
export const TaskStatusSchema = z.enum(['working', 'input_required', 'completed', 'failed', 'cancelled']);
|
||||
|
||||
/* Tasks */
|
||||
/**
|
||||
* A pollable state object associated with a request.
|
||||
*/
|
||||
export const TaskSchema = z.object({
|
||||
taskId: z.string(),
|
||||
status: TaskStatusSchema,
|
||||
/**
|
||||
* Time in milliseconds to keep task results available after completion.
|
||||
* If `null`, the task has unlimited lifetime until manually cleaned up.
|
||||
*/
|
||||
ttl: z.union([z.number(), z.null()]),
|
||||
/**
|
||||
* ISO 8601 timestamp when the task was created.
|
||||
*/
|
||||
createdAt: z.string(),
|
||||
/**
|
||||
* ISO 8601 timestamp when the task was last updated.
|
||||
*/
|
||||
lastUpdatedAt: z.string(),
|
||||
pollInterval: z.optional(z.number()),
|
||||
/**
|
||||
* Optional diagnostic message for failed tasks or other status information.
|
||||
*/
|
||||
statusMessage: z.optional(z.string())
|
||||
});
|
||||
|
||||
/**
|
||||
* Result returned when a task is created, containing the task data wrapped in a `task` field.
|
||||
*/
|
||||
export const CreateTaskResultSchema = ResultSchema.extend({
|
||||
task: TaskSchema
|
||||
});
|
||||
|
||||
/**
|
||||
* Parameters for task status notification.
|
||||
*/
|
||||
export const TaskStatusNotificationParamsSchema = NotificationsParamsSchema.merge(TaskSchema);
|
||||
|
||||
/**
|
||||
* A notification sent when a task's status changes.
|
||||
*/
|
||||
export const TaskStatusNotificationSchema = NotificationSchema.extend({
|
||||
method: z.literal('notifications/tasks/status'),
|
||||
params: TaskStatusNotificationParamsSchema
|
||||
});
|
||||
|
||||
/**
|
||||
* A request to get the state of a specific task.
|
||||
*/
|
||||
export const GetTaskRequestSchema = RequestSchema.extend({
|
||||
method: z.literal('tasks/get'),
|
||||
params: BaseRequestParamsSchema.extend({
|
||||
taskId: z.string()
|
||||
})
|
||||
});
|
||||
|
||||
/**
|
||||
* The response to a {@linkcode GetTaskRequest | tasks/get} request.
|
||||
*/
|
||||
export const GetTaskResultSchema = ResultSchema.merge(TaskSchema);
|
||||
|
||||
/**
|
||||
* A request to get the result of a specific task.
|
||||
*/
|
||||
export const GetTaskPayloadRequestSchema = RequestSchema.extend({
|
||||
method: z.literal('tasks/result'),
|
||||
params: BaseRequestParamsSchema.extend({
|
||||
taskId: z.string()
|
||||
})
|
||||
});
|
||||
|
||||
/**
|
||||
* The response to a `tasks/result` request.
|
||||
* The structure matches the result type of the original request.
|
||||
* For example, a {@linkcode CallToolRequest | tools/call} task would return the `CallToolResult` structure.
|
||||
*
|
||||
*/
|
||||
export const GetTaskPayloadResultSchema = ResultSchema.loose();
|
||||
|
||||
/**
|
||||
* A request to list tasks.
|
||||
*/
|
||||
export const ListTasksRequestSchema = PaginatedRequestSchema.extend({
|
||||
method: z.literal('tasks/list')
|
||||
});
|
||||
|
||||
/**
|
||||
* The response to a {@linkcode ListTasksRequest | tasks/list} request.
|
||||
*/
|
||||
export const ListTasksResultSchema = PaginatedResultSchema.extend({
|
||||
tasks: z.array(TaskSchema)
|
||||
});
|
||||
|
||||
/**
|
||||
* A request to cancel a specific task.
|
||||
*/
|
||||
export const CancelTaskRequestSchema = RequestSchema.extend({
|
||||
method: z.literal('tasks/cancel'),
|
||||
params: BaseRequestParamsSchema.extend({
|
||||
taskId: z.string()
|
||||
})
|
||||
});
|
||||
|
||||
/**
|
||||
* The response to a {@linkcode CancelTaskRequest | tasks/cancel} request.
|
||||
*/
|
||||
export const CancelTaskResultSchema = ResultSchema.merge(TaskSchema);
|
||||
|
||||
/* Resources */
|
||||
/**
|
||||
* The contents of a specific resource or sub-resource.
|
||||
|
|
@ -1053,12 +1287,12 @@ export const ToolAnnotationsSchema = z.object({
|
|||
*/
|
||||
export const ToolExecutionSchema = z.object({
|
||||
/**
|
||||
* Indicates the tool's preference for task-augmented execution
|
||||
* (`"required"`, `"optional"`, or `"forbidden"`; defaults to `"forbidden"`).
|
||||
* Indicates the tool's preference for task-augmented execution.
|
||||
* - `"required"`: Clients MUST invoke the tool as a task
|
||||
* - `"optional"`: Clients MAY invoke the tool as a task or normal request
|
||||
* - `"forbidden"`: Clients MUST NOT attempt to invoke the tool as a task
|
||||
*
|
||||
* The SDK no longer implements task-augmented execution (SEP-2663). The field is
|
||||
* kept for parity with the spec schema's `ToolExecution` type and will be removed
|
||||
* when the generated spec types next sync.
|
||||
* If not present, defaults to `"forbidden"`.
|
||||
*/
|
||||
taskSupport: z.enum(['required', 'optional', 'forbidden']).optional()
|
||||
});
|
||||
|
|
@ -1175,7 +1409,7 @@ export const CompatibilityCallToolResultSchema = CallToolResultSchema.or(
|
|||
/**
|
||||
* Parameters for a `tools/call` request.
|
||||
*/
|
||||
export const CallToolRequestParamsSchema = BaseRequestParamsSchema.extend({
|
||||
export const CallToolRequestParamsSchema = TaskAugmentedRequestParamsSchema.extend({
|
||||
/**
|
||||
* The name of the tool to call.
|
||||
*/
|
||||
|
|
@ -1373,7 +1607,7 @@ export const SamplingMessageSchema = z.object({
|
|||
/**
|
||||
* Parameters for a `sampling/createMessage` request.
|
||||
*/
|
||||
export const CreateMessageRequestParamsSchema = BaseRequestParamsSchema.extend({
|
||||
export const CreateMessageRequestParamsSchema = TaskAugmentedRequestParamsSchema.extend({
|
||||
messages: z.array(SamplingMessageSchema),
|
||||
/**
|
||||
* The server's preferences for which model to select. The client MAY modify or omit this request.
|
||||
|
|
@ -1612,7 +1846,7 @@ export const PrimitiveSchemaDefinitionSchema = z.union([EnumSchemaSchema, Boolea
|
|||
/**
|
||||
* Parameters for an `elicitation/create` request for form-based elicitation.
|
||||
*/
|
||||
export const ElicitRequestFormParamsSchema = BaseRequestParamsSchema.extend({
|
||||
export const ElicitRequestFormParamsSchema = TaskAugmentedRequestParamsSchema.extend({
|
||||
/**
|
||||
* The elicitation mode.
|
||||
*
|
||||
|
|
@ -1639,7 +1873,7 @@ export const ElicitRequestFormParamsSchema = BaseRequestParamsSchema.extend({
|
|||
/**
|
||||
* Parameters for an {@linkcode ElicitRequest | elicitation/create} request for URL-based elicitation.
|
||||
*/
|
||||
export const ElicitRequestURLParamsSchema = BaseRequestParamsSchema.extend({
|
||||
export const ElicitRequestURLParamsSchema = TaskAugmentedRequestParamsSchema.extend({
|
||||
/**
|
||||
* The elicitation mode.
|
||||
*/
|
||||
|
|
@ -1855,14 +2089,19 @@ export const ClientRequestSchema = z.union([
|
|||
SubscribeRequestSchema,
|
||||
UnsubscribeRequestSchema,
|
||||
CallToolRequestSchema,
|
||||
ListToolsRequestSchema
|
||||
ListToolsRequestSchema,
|
||||
GetTaskRequestSchema,
|
||||
GetTaskPayloadRequestSchema,
|
||||
ListTasksRequestSchema,
|
||||
CancelTaskRequestSchema
|
||||
]);
|
||||
|
||||
export const ClientNotificationSchema = z.union([
|
||||
CancelledNotificationSchema,
|
||||
ProgressNotificationSchema,
|
||||
InitializedNotificationSchema,
|
||||
RootsListChangedNotificationSchema
|
||||
RootsListChangedNotificationSchema,
|
||||
TaskStatusNotificationSchema
|
||||
]);
|
||||
|
||||
export const ClientResultSchema = z.union([
|
||||
|
|
@ -1870,11 +2109,23 @@ export const ClientResultSchema = z.union([
|
|||
CreateMessageResultSchema,
|
||||
CreateMessageResultWithToolsSchema,
|
||||
ElicitResultSchema,
|
||||
ListRootsResultSchema
|
||||
ListRootsResultSchema,
|
||||
GetTaskResultSchema,
|
||||
ListTasksResultSchema,
|
||||
CreateTaskResultSchema
|
||||
]);
|
||||
|
||||
/* Server messages */
|
||||
export const ServerRequestSchema = z.union([PingRequestSchema, CreateMessageRequestSchema, ElicitRequestSchema, ListRootsRequestSchema]);
|
||||
export const ServerRequestSchema = z.union([
|
||||
PingRequestSchema,
|
||||
CreateMessageRequestSchema,
|
||||
ElicitRequestSchema,
|
||||
ListRootsRequestSchema,
|
||||
GetTaskRequestSchema,
|
||||
GetTaskPayloadRequestSchema,
|
||||
ListTasksRequestSchema,
|
||||
CancelTaskRequestSchema
|
||||
]);
|
||||
|
||||
export const ServerNotificationSchema = z.union([
|
||||
CancelledNotificationSchema,
|
||||
|
|
@ -1884,6 +2135,7 @@ export const ServerNotificationSchema = z.union([
|
|||
ResourceListChangedNotificationSchema,
|
||||
ToolListChangedNotificationSchema,
|
||||
PromptListChangedNotificationSchema,
|
||||
TaskStatusNotificationSchema,
|
||||
ElicitationCompleteNotificationSchema
|
||||
]);
|
||||
|
||||
|
|
@ -1897,7 +2149,10 @@ export const ServerResultSchema = z.union([
|
|||
ListResourceTemplatesResultSchema,
|
||||
ReadResourceResultSchema,
|
||||
CallToolResultSchema,
|
||||
ListToolsResultSchema
|
||||
ListToolsResultSchema,
|
||||
GetTaskResultSchema,
|
||||
ListTasksResultSchema,
|
||||
CreateTaskResultSchema
|
||||
]);
|
||||
|
||||
/* Runtime schema lookup — result schemas by method */
|
||||
|
|
@ -1913,11 +2168,15 @@ const resultSchemas: Record<string, z.core.$ZodType> = {
|
|||
'resources/read': ReadResourceResultSchema,
|
||||
'resources/subscribe': EmptyResultSchema,
|
||||
'resources/unsubscribe': EmptyResultSchema,
|
||||
'tools/call': CallToolResultSchema,
|
||||
'tools/call': z.union([CallToolResultSchema, CreateTaskResultSchema]),
|
||||
'tools/list': ListToolsResultSchema,
|
||||
'sampling/createMessage': CreateMessageResultWithToolsSchema,
|
||||
'elicitation/create': ElicitResultSchema,
|
||||
'roots/list': ListRootsResultSchema
|
||||
'sampling/createMessage': z.union([CreateMessageResultWithToolsSchema, CreateTaskResultSchema]),
|
||||
'elicitation/create': z.union([ElicitResultSchema, CreateTaskResultSchema]),
|
||||
'roots/list': ListRootsResultSchema,
|
||||
'tasks/get': GetTaskResultSchema,
|
||||
'tasks/result': ResultSchema,
|
||||
'tasks/list': ListTasksResultSchema,
|
||||
'tasks/cancel': CancelTaskResultSchema
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ import * as schemas from './schemas.js';
|
|||
*
|
||||
* This intentionally excludes internal helper schemas exported from `schemas.ts` that have no
|
||||
* matching public type (e.g. `ListChangedOptionsBaseSchema`, `BaseRequestParamsSchema`,
|
||||
* `NotificationsParamsSchema`).
|
||||
* `NotificationsParamsSchema`, `ClientTasksCapabilitySchema`, `ServerTasksCapabilitySchema`).
|
||||
* Keeping the list explicit means new public spec types must be added here deliberately, and
|
||||
* internals never leak into `SpecTypeName`.
|
||||
*
|
||||
|
|
@ -41,6 +41,8 @@ const SPEC_SCHEMA_KEYS = [
|
|||
'CallToolResultSchema',
|
||||
'CancelledNotificationSchema',
|
||||
'CancelledNotificationParamsSchema',
|
||||
'CancelTaskRequestSchema',
|
||||
'CancelTaskResultSchema',
|
||||
'ClientCapabilitiesSchema',
|
||||
'ClientNotificationSchema',
|
||||
'ClientRequestSchema',
|
||||
|
|
@ -54,6 +56,7 @@ const SPEC_SCHEMA_KEYS = [
|
|||
'CreateMessageRequestParamsSchema',
|
||||
'CreateMessageResultSchema',
|
||||
'CreateMessageResultWithToolsSchema',
|
||||
'CreateTaskResultSchema',
|
||||
'CursorSchema',
|
||||
'ElicitationCompleteNotificationSchema',
|
||||
'ElicitationCompleteNotificationParamsSchema',
|
||||
|
|
@ -68,6 +71,10 @@ const SPEC_SCHEMA_KEYS = [
|
|||
'GetPromptRequestSchema',
|
||||
'GetPromptRequestParamsSchema',
|
||||
'GetPromptResultSchema',
|
||||
'GetTaskPayloadRequestSchema',
|
||||
'GetTaskPayloadResultSchema',
|
||||
'GetTaskRequestSchema',
|
||||
'GetTaskResultSchema',
|
||||
'IconSchema',
|
||||
'IconsSchema',
|
||||
'ImageContentSchema',
|
||||
|
|
@ -94,6 +101,8 @@ const SPEC_SCHEMA_KEYS = [
|
|||
'ListResourceTemplatesResultSchema',
|
||||
'ListRootsRequestSchema',
|
||||
'ListRootsResultSchema',
|
||||
'ListTasksRequestSchema',
|
||||
'ListTasksResultSchema',
|
||||
'ListToolsRequestSchema',
|
||||
'ListToolsResultSchema',
|
||||
'LoggingLevelSchema',
|
||||
|
|
@ -121,6 +130,7 @@ const SPEC_SCHEMA_KEYS = [
|
|||
'ReadResourceRequestSchema',
|
||||
'ReadResourceRequestParamsSchema',
|
||||
'ReadResourceResultSchema',
|
||||
'RelatedTaskMetadataSchema',
|
||||
'RequestSchema',
|
||||
'RequestIdSchema',
|
||||
'RequestMetaSchema',
|
||||
|
|
@ -150,6 +160,13 @@ const SPEC_SCHEMA_KEYS = [
|
|||
'StringSchemaSchema',
|
||||
'SubscribeRequestSchema',
|
||||
'SubscribeRequestParamsSchema',
|
||||
'TaskSchema',
|
||||
'TaskAugmentedRequestParamsSchema',
|
||||
'TaskCreationParamsSchema',
|
||||
'TaskMetadataSchema',
|
||||
'TaskStatusSchema',
|
||||
'TaskStatusNotificationSchema',
|
||||
'TaskStatusNotificationParamsSchema',
|
||||
'TextContentSchema',
|
||||
'TextResourceContentsSchema',
|
||||
'TitledMultiSelectEnumSchemaSchema',
|
||||
|
|
|
|||
|
|
@ -17,6 +17,8 @@ import type {
|
|||
CallToolResultSchema,
|
||||
CancelledNotificationParamsSchema,
|
||||
CancelledNotificationSchema,
|
||||
CancelTaskRequestSchema,
|
||||
CancelTaskResultSchema,
|
||||
ClientCapabilitiesSchema,
|
||||
ClientNotificationSchema,
|
||||
ClientRequestSchema,
|
||||
|
|
@ -30,6 +32,7 @@ import type {
|
|||
CreateMessageRequestSchema,
|
||||
CreateMessageResultSchema,
|
||||
CreateMessageResultWithToolsSchema,
|
||||
CreateTaskResultSchema,
|
||||
CursorSchema,
|
||||
ElicitationCompleteNotificationParamsSchema,
|
||||
ElicitationCompleteNotificationSchema,
|
||||
|
|
@ -44,6 +47,10 @@ import type {
|
|||
GetPromptRequestParamsSchema,
|
||||
GetPromptRequestSchema,
|
||||
GetPromptResultSchema,
|
||||
GetTaskPayloadRequestSchema,
|
||||
GetTaskPayloadResultSchema,
|
||||
GetTaskRequestSchema,
|
||||
GetTaskResultSchema,
|
||||
IconSchema,
|
||||
IconsSchema,
|
||||
ImageContentSchema,
|
||||
|
|
@ -67,6 +74,8 @@ import type {
|
|||
ListResourceTemplatesResultSchema,
|
||||
ListRootsRequestSchema,
|
||||
ListRootsResultSchema,
|
||||
ListTasksRequestSchema,
|
||||
ListTasksResultSchema,
|
||||
ListToolsRequestSchema,
|
||||
ListToolsResultSchema,
|
||||
LoggingLevelSchema,
|
||||
|
|
@ -95,6 +104,7 @@ import type {
|
|||
ReadResourceRequestParamsSchema,
|
||||
ReadResourceRequestSchema,
|
||||
ReadResourceResultSchema,
|
||||
RelatedTaskMetadataSchema,
|
||||
RequestIdSchema,
|
||||
RequestMetaSchema,
|
||||
RequestSchema,
|
||||
|
|
@ -124,6 +134,13 @@ import type {
|
|||
StringSchemaSchema,
|
||||
SubscribeRequestParamsSchema,
|
||||
SubscribeRequestSchema,
|
||||
TaskAugmentedRequestParamsSchema,
|
||||
TaskCreationParamsSchema,
|
||||
TaskMetadataSchema,
|
||||
TaskSchema,
|
||||
TaskStatusNotificationParamsSchema,
|
||||
TaskStatusNotificationSchema,
|
||||
TaskStatusSchema,
|
||||
TextContentSchema,
|
||||
TextResourceContentsSchema,
|
||||
TitledMultiSelectEnumSchemaSchema,
|
||||
|
|
@ -170,6 +187,7 @@ type Infer<Schema extends z.ZodTypeAny> = Flatten<z.infer<Schema>>;
|
|||
export type ProgressToken = Infer<typeof ProgressTokenSchema>;
|
||||
export type Cursor = Infer<typeof CursorSchema>;
|
||||
export type Request = Infer<typeof RequestSchema>;
|
||||
export type TaskAugmentedRequestParams = Infer<typeof TaskAugmentedRequestParamsSchema>;
|
||||
export type RequestMeta = Infer<typeof RequestMetaSchema>;
|
||||
export type Notification = Infer<typeof NotificationSchema>;
|
||||
export type Result = Infer<typeof ResultSchema>;
|
||||
|
|
@ -214,6 +232,24 @@ export type Progress = Infer<typeof ProgressSchema>;
|
|||
export type ProgressNotificationParams = Infer<typeof ProgressNotificationParamsSchema>;
|
||||
export type ProgressNotification = Infer<typeof ProgressNotificationSchema>;
|
||||
|
||||
/* Tasks */
|
||||
export type Task = Infer<typeof TaskSchema>;
|
||||
export type TaskStatus = Infer<typeof TaskStatusSchema>;
|
||||
export type TaskCreationParams = Infer<typeof TaskCreationParamsSchema>;
|
||||
export type TaskMetadata = Infer<typeof TaskMetadataSchema>;
|
||||
export type RelatedTaskMetadata = Infer<typeof RelatedTaskMetadataSchema>;
|
||||
export type CreateTaskResult = Infer<typeof CreateTaskResultSchema>;
|
||||
export type TaskStatusNotificationParams = Infer<typeof TaskStatusNotificationParamsSchema>;
|
||||
export type TaskStatusNotification = Infer<typeof TaskStatusNotificationSchema>;
|
||||
export type GetTaskRequest = Infer<typeof GetTaskRequestSchema>;
|
||||
export type GetTaskResult = Infer<typeof GetTaskResultSchema>;
|
||||
export type GetTaskPayloadRequest = Infer<typeof GetTaskPayloadRequestSchema>;
|
||||
export type ListTasksRequest = Infer<typeof ListTasksRequestSchema>;
|
||||
export type ListTasksResult = Infer<typeof ListTasksResultSchema>;
|
||||
export type CancelTaskRequest = Infer<typeof CancelTaskRequestSchema>;
|
||||
export type CancelTaskResult = Infer<typeof CancelTaskResultSchema>;
|
||||
export type GetTaskPayloadResult = Infer<typeof GetTaskPayloadResultSchema>;
|
||||
|
||||
/* Pagination */
|
||||
export type PaginatedRequestParams = Infer<typeof PaginatedRequestParamsSchema>;
|
||||
export type PaginatedRequest = Infer<typeof PaginatedRequestSchema>;
|
||||
|
|
@ -356,11 +392,15 @@ export type ResultTypeMap = {
|
|||
'resources/read': ReadResourceResult;
|
||||
'resources/subscribe': EmptyResult;
|
||||
'resources/unsubscribe': EmptyResult;
|
||||
'tools/call': CallToolResult;
|
||||
'tools/call': CallToolResult | CreateTaskResult;
|
||||
'tools/list': ListToolsResult;
|
||||
'sampling/createMessage': CreateMessageResult | CreateMessageResultWithTools;
|
||||
'elicitation/create': ElicitResult;
|
||||
'sampling/createMessage': CreateMessageResult | CreateMessageResultWithTools | CreateTaskResult;
|
||||
'elicitation/create': ElicitResult | CreateTaskResult;
|
||||
'roots/list': ListRootsResult;
|
||||
'tasks/get': GetTaskResult;
|
||||
'tasks/result': Result;
|
||||
'tasks/list': ListTasksResult;
|
||||
'tasks/cancel': CancelTaskResult;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -225,7 +225,6 @@ const sdkTypeChecks = {
|
|||
spec = sdk;
|
||||
},
|
||||
ClientNotification: (sdk: WithJSONRPC<SDKTypes.ClientNotification>, spec: SpecTypes.ClientNotification) => {
|
||||
// @ts-expect-error SEP-2663: spec union includes task variants the SDK does not implement
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
|
|
@ -494,12 +493,10 @@ const sdkTypeChecks = {
|
|||
spec = sdk;
|
||||
},
|
||||
ClientRequest: (sdk: WithJSONRPCRequest<SDKTypes.ClientRequest>, spec: SpecTypes.ClientRequest) => {
|
||||
// @ts-expect-error SEP-2663: spec union includes task variants the SDK does not implement
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
ServerRequest: (sdk: WithJSONRPCRequest<SDKTypes.ServerRequest>, spec: SpecTypes.ServerRequest) => {
|
||||
// @ts-expect-error SEP-2663: spec union includes task variants the SDK does not implement
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
|
|
@ -508,7 +505,6 @@ const sdkTypeChecks = {
|
|||
spec = sdk;
|
||||
},
|
||||
ServerNotification: (sdk: WithJSONRPC<SDKTypes.ServerNotification>, spec: SpecTypes.ServerNotification) => {
|
||||
// @ts-expect-error SEP-2663: spec union includes task variants the SDK does not implement
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
|
|
@ -556,10 +552,74 @@ const sdkTypeChecks = {
|
|||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
TaskAugmentedRequestParams: (sdk: SDKTypes.TaskAugmentedRequestParams, spec: SpecTypes.TaskAugmentedRequestParams) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
ToolExecution: (sdk: SDKTypes.ToolExecution, spec: SpecTypes.ToolExecution) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
TaskStatus: (sdk: SDKTypes.TaskStatus, spec: SpecTypes.TaskStatus) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
TaskMetadata: (sdk: SDKTypes.TaskMetadata, spec: SpecTypes.TaskMetadata) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
RelatedTaskMetadata: (sdk: SDKTypes.RelatedTaskMetadata, spec: SpecTypes.RelatedTaskMetadata) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
Task: (sdk: SDKTypes.Task, spec: SpecTypes.Task) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
CreateTaskResult: (sdk: SDKTypes.CreateTaskResult, spec: SpecTypes.CreateTaskResult) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
GetTaskResult: (sdk: SDKTypes.GetTaskResult, spec: SpecTypes.GetTaskResult) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
GetTaskPayloadRequest: (sdk: WithJSONRPCRequest<SDKTypes.GetTaskPayloadRequest>, spec: SpecTypes.GetTaskPayloadRequest) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
ListTasksRequest: (sdk: WithJSONRPCRequest<SDKTypes.ListTasksRequest>, spec: SpecTypes.ListTasksRequest) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
ListTasksResult: (sdk: SDKTypes.ListTasksResult, spec: SpecTypes.ListTasksResult) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
CancelTaskRequest: (sdk: WithJSONRPCRequest<SDKTypes.CancelTaskRequest>, spec: SpecTypes.CancelTaskRequest) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
CancelTaskResult: (sdk: SDKTypes.CancelTaskResult, spec: SpecTypes.CancelTaskResult) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
GetTaskRequest: (sdk: WithJSONRPCRequest<SDKTypes.GetTaskRequest>, spec: SpecTypes.GetTaskRequest) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
GetTaskPayloadResult: (sdk: SDKTypes.GetTaskPayloadResult, spec: SpecTypes.GetTaskPayloadResult) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
TaskStatusNotificationParams: (sdk: SDKTypes.TaskStatusNotificationParams, spec: SpecTypes.TaskStatusNotificationParams) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
TaskStatusNotification: (sdk: WithJSONRPC<SDKTypes.TaskStatusNotification>, spec: SpecTypes.TaskStatusNotification) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
|
||||
/* JSON primitives */
|
||||
JSONValue: (sdk: SDKTypes.JSONValue, spec: SpecTypes.JSONValue) => {
|
||||
|
|
@ -655,6 +715,29 @@ const sdkTypeChecks = {
|
|||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
CreateTaskResultResponse: (sdk: TypedResultResponse<SDKTypes.CreateTaskResult>, spec: SpecTypes.CreateTaskResultResponse) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
GetTaskResultResponse: (sdk: TypedResultResponse<SDKTypes.GetTaskResult>, spec: SpecTypes.GetTaskResultResponse) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
GetTaskPayloadResultResponse: (
|
||||
sdk: TypedResultResponse<SDKTypes.GetTaskPayloadResult>,
|
||||
spec: SpecTypes.GetTaskPayloadResultResponse
|
||||
) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
CancelTaskResultResponse: (sdk: TypedResultResponse<SDKTypes.CancelTaskResult>, spec: SpecTypes.CancelTaskResultResponse) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
ListTasksResultResponse: (sdk: TypedResultResponse<SDKTypes.ListTasksResult>, spec: SpecTypes.ListTasksResultResponse) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
},
|
||||
SetLevelResultResponse: (sdk: TypedResultResponse<SDKTypes.EmptyResult>, spec: SpecTypes.SetLevelResultResponse) => {
|
||||
sdk = spec;
|
||||
spec = sdk;
|
||||
|
|
@ -708,7 +791,7 @@ type AssertExactKeys<
|
|||
type Assert<T extends true> = T;
|
||||
|
||||
/*
|
||||
* Excluded from key-level assertions (22 entries):
|
||||
* Excluded from key-level assertions (23 entries):
|
||||
*
|
||||
* Union types — KnownKeys cannot meaningfully enumerate their members (15):
|
||||
* ClientRequest, ServerRequest, ClientNotification, ServerNotification,
|
||||
|
|
@ -716,12 +799,12 @@ type Assert<T extends true> = T;
|
|||
* SamplingMessageContentBlock, ElicitRequestParams, PrimitiveSchemaDefinition,
|
||||
* SingleSelectEnumSchema, MultiSelectEnumSchema, EnumSchema
|
||||
*
|
||||
* Primitive type aliases — no object keys to compare (7):
|
||||
* Primitive type aliases — no object keys to compare (8):
|
||||
* JSONValue, JSONArray, Role, LoggingLevel, ProgressToken, RequestId,
|
||||
* Cursor
|
||||
* Cursor, TaskStatus
|
||||
*/
|
||||
|
||||
// -- Simple types (86) --
|
||||
// -- Simple types (96) --
|
||||
|
||||
type _K_RequestParams = Assert<AssertExactKeys<SDKTypes.RequestParams, SpecTypes.RequestParams>>;
|
||||
type _K_NotificationParams = Assert<AssertExactKeys<SDKTypes.NotificationParams, SpecTypes.NotificationParams>>;
|
||||
|
|
@ -736,18 +819,14 @@ type _K_ResourceUpdatedNotificationParams = Assert<
|
|||
AssertExactKeys<SDKTypes.ResourceUpdatedNotificationParams, SpecTypes.ResourceUpdatedNotificationParams>
|
||||
>;
|
||||
type _K_GetPromptRequestParams = Assert<AssertExactKeys<SDKTypes.GetPromptRequestParams, SpecTypes.GetPromptRequestParams>>;
|
||||
// @ts-expect-error SEP-2663: spec has optional `task` field; SDK removes task augmentation
|
||||
type _K_CallToolRequestParams = Assert<AssertExactKeys<SDKTypes.CallToolRequestParams, SpecTypes.CallToolRequestParams>>;
|
||||
type _K_SetLevelRequestParams = Assert<AssertExactKeys<SDKTypes.SetLevelRequestParams, SpecTypes.SetLevelRequestParams>>;
|
||||
type _K_LoggingMessageNotificationParams = Assert<
|
||||
AssertExactKeys<SDKTypes.LoggingMessageNotificationParams, SpecTypes.LoggingMessageNotificationParams>
|
||||
>;
|
||||
// @ts-expect-error SEP-2663: spec has optional `task` field; SDK removes task augmentation
|
||||
type _K_CreateMessageRequestParams = Assert<AssertExactKeys<SDKTypes.CreateMessageRequestParams, SpecTypes.CreateMessageRequestParams>>;
|
||||
type _K_CompleteRequestParams = Assert<AssertExactKeys<SDKTypes.CompleteRequestParams, SpecTypes.CompleteRequestParams>>;
|
||||
// @ts-expect-error SEP-2663: spec has optional `task` field; SDK removes task augmentation
|
||||
type _K_ElicitRequestFormParams = Assert<AssertExactKeys<SDKTypes.ElicitRequestFormParams, SpecTypes.ElicitRequestFormParams>>;
|
||||
// @ts-expect-error SEP-2663: spec has optional `task` field; SDK removes task augmentation
|
||||
type _K_ElicitRequestURLParams = Assert<AssertExactKeys<SDKTypes.ElicitRequestURLParams, SpecTypes.ElicitRequestURLParams>>;
|
||||
type _K_PaginatedRequestParams = Assert<AssertExactKeys<SDKTypes.PaginatedRequestParams, SpecTypes.PaginatedRequestParams>>;
|
||||
type _K_BaseMetadata = Assert<AssertExactKeys<SDKTypes.BaseMetadata, SpecTypes.BaseMetadata>>;
|
||||
|
|
@ -805,9 +884,7 @@ type _K_LegacyTitledEnumSchema = Assert<AssertExactKeys<SDKTypes.LegacyTitledEnu
|
|||
type _K_JSONRPCErrorResponse = Assert<AssertExactKeys<SDKTypes.JSONRPCErrorResponse, SpecTypes.JSONRPCErrorResponse>>;
|
||||
type _K_JSONRPCResultResponse = Assert<AssertExactKeys<SDKTypes.JSONRPCResultResponse, SpecTypes.JSONRPCResultResponse>>;
|
||||
type _K_InitializeResult = Assert<AssertExactKeys<SDKTypes.InitializeResult, SpecTypes.InitializeResult>>;
|
||||
// @ts-expect-error SEP-2663: spec has `tasks` capability; SDK removes it
|
||||
type _K_ClientCapabilities = Assert<AssertExactKeys<SDKTypes.ClientCapabilities, SpecTypes.ClientCapabilities>>;
|
||||
// @ts-expect-error SEP-2663: spec has `tasks` capability; SDK removes it
|
||||
type _K_ServerCapabilities = Assert<AssertExactKeys<SDKTypes.ServerCapabilities, SpecTypes.ServerCapabilities>>;
|
||||
type _K_SamplingMessage = Assert<AssertExactKeys<SDKTypes.SamplingMessage, SpecTypes.SamplingMessage>>;
|
||||
type _K_Icon = Assert<AssertExactKeys<SDKTypes.Icon, SpecTypes.Icon>>;
|
||||
|
|
@ -818,9 +895,22 @@ type _K_ToolChoice = Assert<AssertExactKeys<SDKTypes.ToolChoice, SpecTypes.ToolC
|
|||
type _K_ToolUseContent = Assert<AssertExactKeys<SDKTypes.ToolUseContent, SpecTypes.ToolUseContent>>;
|
||||
type _K_ToolResultContent = Assert<AssertExactKeys<SDKTypes.ToolResultContent, SpecTypes.ToolResultContent>>;
|
||||
type _K_Annotations = Assert<AssertExactKeys<SDKTypes.Annotations, SpecTypes.Annotations>>;
|
||||
type _K_TaskAugmentedRequestParams = Assert<AssertExactKeys<SDKTypes.TaskAugmentedRequestParams, SpecTypes.TaskAugmentedRequestParams>>;
|
||||
type _K_ToolExecution = Assert<AssertExactKeys<SDKTypes.ToolExecution, SpecTypes.ToolExecution>>;
|
||||
type _K_TaskMetadata = Assert<AssertExactKeys<SDKTypes.TaskMetadata, SpecTypes.TaskMetadata>>;
|
||||
type _K_RelatedTaskMetadata = Assert<AssertExactKeys<SDKTypes.RelatedTaskMetadata, SpecTypes.RelatedTaskMetadata>>;
|
||||
type _K_Task = Assert<AssertExactKeys<SDKTypes.Task, SpecTypes.Task>>;
|
||||
type _K_CreateTaskResult = Assert<AssertExactKeys<SDKTypes.CreateTaskResult, SpecTypes.CreateTaskResult>>;
|
||||
type _K_GetTaskResult = Assert<AssertExactKeys<SDKTypes.GetTaskResult, SpecTypes.GetTaskResult>>;
|
||||
type _K_ListTasksResult = Assert<AssertExactKeys<SDKTypes.ListTasksResult, SpecTypes.ListTasksResult>>;
|
||||
type _K_CancelTaskResult = Assert<AssertExactKeys<SDKTypes.CancelTaskResult, SpecTypes.CancelTaskResult>>;
|
||||
type _K_GetTaskPayloadResult = Assert<AssertExactKeys<SDKTypes.GetTaskPayloadResult, SpecTypes.GetTaskPayloadResult>>;
|
||||
type _K_TaskStatusNotificationParams = Assert<
|
||||
AssertExactKeys<SDKTypes.TaskStatusNotificationParams, SpecTypes.TaskStatusNotificationParams>
|
||||
>;
|
||||
type _K_JSONObject = Assert<AssertExactKeys<SDKTypes.JSONObject, SpecTypes.JSONObject>>;
|
||||
type _K_MetaObject = Assert<AssertExactKeys<SDKTypes.MetaObject, SpecTypes.MetaObject>>;
|
||||
// @ts-expect-error Genuine mismatch: SDK RequestMetaObject has extra 'io.modelcontextprotocol/related-task' not in spec
|
||||
type _K_RequestMetaObject = Assert<AssertExactKeys<SDKTypes.RequestMetaObject, SpecTypes.RequestMetaObject>>;
|
||||
type _K_ParseError = Assert<AssertExactKeys<SDKTypes.ParseError, SpecTypes.ParseError>>;
|
||||
type _K_InvalidRequestError = Assert<AssertExactKeys<SDKTypes.InvalidRequestError, SpecTypes.InvalidRequestError>>;
|
||||
|
|
@ -828,7 +918,7 @@ type _K_MethodNotFoundError = Assert<AssertExactKeys<SDKTypes.MethodNotFoundErro
|
|||
type _K_InvalidParamsError = Assert<AssertExactKeys<SDKTypes.InvalidParamsError, SpecTypes.InvalidParamsError>>;
|
||||
type _K_InternalError = Assert<AssertExactKeys<SDKTypes.InternalError, SpecTypes.InternalError>>;
|
||||
|
||||
// -- WithJSONRPC-wrapped notification types (10) --
|
||||
// -- WithJSONRPC-wrapped notification types (11) --
|
||||
// SDK notification types do not include `jsonrpc` — the spec types do. We wrap
|
||||
// with WithJSONRPC<> to add the missing field before comparing keys.
|
||||
|
||||
|
|
@ -856,8 +946,9 @@ type _K_LoggingMessageNotification = Assert<
|
|||
AssertExactKeys<WithJSONRPC<SDKTypes.LoggingMessageNotification>, SpecTypes.LoggingMessageNotification>
|
||||
>;
|
||||
type _K_InitializedNotification = Assert<AssertExactKeys<WithJSONRPC<SDKTypes.InitializedNotification>, SpecTypes.InitializedNotification>>;
|
||||
type _K_TaskStatusNotification = Assert<AssertExactKeys<WithJSONRPC<SDKTypes.TaskStatusNotification>, SpecTypes.TaskStatusNotification>>;
|
||||
|
||||
// -- WithJSONRPCRequest-wrapped request types (17) --
|
||||
// -- WithJSONRPCRequest-wrapped request types (21) --
|
||||
// SDK request types do not include `jsonrpc` or `id` — the spec types do. We
|
||||
// wrap with WithJSONRPCRequest<> to add the missing fields before comparing keys.
|
||||
|
||||
|
|
@ -880,8 +971,14 @@ type _K_ListPromptsRequest = Assert<AssertExactKeys<WithJSONRPCRequest<SDKTypes.
|
|||
type _K_GetPromptRequest = Assert<AssertExactKeys<WithJSONRPCRequest<SDKTypes.GetPromptRequest>, SpecTypes.GetPromptRequest>>;
|
||||
type _K_CreateMessageRequest = Assert<AssertExactKeys<WithJSONRPCRequest<SDKTypes.CreateMessageRequest>, SpecTypes.CreateMessageRequest>>;
|
||||
type _K_InitializeRequest = Assert<AssertExactKeys<WithJSONRPCRequest<SDKTypes.InitializeRequest>, SpecTypes.InitializeRequest>>;
|
||||
type _K_GetTaskPayloadRequest = Assert<
|
||||
AssertExactKeys<WithJSONRPCRequest<SDKTypes.GetTaskPayloadRequest>, SpecTypes.GetTaskPayloadRequest>
|
||||
>;
|
||||
type _K_ListTasksRequest = Assert<AssertExactKeys<WithJSONRPCRequest<SDKTypes.ListTasksRequest>, SpecTypes.ListTasksRequest>>;
|
||||
type _K_CancelTaskRequest = Assert<AssertExactKeys<WithJSONRPCRequest<SDKTypes.CancelTaskRequest>, SpecTypes.CancelTaskRequest>>;
|
||||
type _K_GetTaskRequest = Assert<AssertExactKeys<WithJSONRPCRequest<SDKTypes.GetTaskRequest>, SpecTypes.GetTaskRequest>>;
|
||||
|
||||
// -- TypedResultResponse-wrapped types (16) --
|
||||
// -- TypedResultResponse-wrapped types (21) --
|
||||
// The spec defines typed *ResultResponse interfaces that pair JSONRPCResultResponse
|
||||
// with a specific result. We compare TypedResultResponse<SDKInnerType> against the
|
||||
// spec's combined type.
|
||||
|
|
@ -907,6 +1004,17 @@ type _K_ListPromptsResultResponse = Assert<
|
|||
type _K_GetPromptResultResponse = Assert<AssertExactKeys<TypedResultResponse<SDKTypes.GetPromptResult>, SpecTypes.GetPromptResultResponse>>;
|
||||
type _K_ListToolsResultResponse = Assert<AssertExactKeys<TypedResultResponse<SDKTypes.ListToolsResult>, SpecTypes.ListToolsResultResponse>>;
|
||||
type _K_CallToolResultResponse = Assert<AssertExactKeys<TypedResultResponse<SDKTypes.CallToolResult>, SpecTypes.CallToolResultResponse>>;
|
||||
type _K_CreateTaskResultResponse = Assert<
|
||||
AssertExactKeys<TypedResultResponse<SDKTypes.CreateTaskResult>, SpecTypes.CreateTaskResultResponse>
|
||||
>;
|
||||
type _K_GetTaskResultResponse = Assert<AssertExactKeys<TypedResultResponse<SDKTypes.GetTaskResult>, SpecTypes.GetTaskResultResponse>>;
|
||||
type _K_GetTaskPayloadResultResponse = Assert<
|
||||
AssertExactKeys<TypedResultResponse<SDKTypes.GetTaskPayloadResult>, SpecTypes.GetTaskPayloadResultResponse>
|
||||
>;
|
||||
type _K_CancelTaskResultResponse = Assert<
|
||||
AssertExactKeys<TypedResultResponse<SDKTypes.CancelTaskResult>, SpecTypes.CancelTaskResultResponse>
|
||||
>;
|
||||
type _K_ListTasksResultResponse = Assert<AssertExactKeys<TypedResultResponse<SDKTypes.ListTasksResult>, SpecTypes.ListTasksResultResponse>>;
|
||||
type _K_SetLevelResultResponse = Assert<AssertExactKeys<TypedResultResponse<SDKTypes.EmptyResult>, SpecTypes.SetLevelResultResponse>>;
|
||||
type _K_CreateMessageResultResponse = Assert<
|
||||
AssertExactKeys<TypedResultResponse<SDKTypes.CreateMessageResultWithTools>, SpecTypes.CreateMessageResultResponse>
|
||||
|
|
@ -940,14 +1048,15 @@ const KEY_PARITY_EXCLUDED = [
|
|||
'SingleSelectEnumSchema',
|
||||
'MultiSelectEnumSchema',
|
||||
'EnumSchema',
|
||||
// Primitive aliases (7)
|
||||
// Primitive aliases (8)
|
||||
'JSONValue',
|
||||
'JSONArray',
|
||||
'Role',
|
||||
'LoggingLevel',
|
||||
'ProgressToken',
|
||||
'RequestId',
|
||||
'Cursor'
|
||||
'Cursor',
|
||||
'TaskStatus'
|
||||
];
|
||||
|
||||
// This file is .gitignore'd, and fetched by `npm run fetch:spec-types` (called by `npm run test`)
|
||||
|
|
@ -957,29 +1066,7 @@ const SDK_TYPES_FILE = path.resolve(__dirname, '../src/types/types.ts');
|
|||
const MISSING_SDK_TYPES = [
|
||||
// These are inlined in the SDK:
|
||||
'Error', // The inner error object of a JSONRPCError
|
||||
'URLElicitationRequiredError', // In the SDK, but with a custom definition
|
||||
// SEP-2663: 2025-11 experimental tasks removed from the SDK; spec still defines them.
|
||||
'Task',
|
||||
'TaskStatus',
|
||||
'TaskMetadata',
|
||||
'TaskAugmentedRequestParams',
|
||||
'RelatedTaskMetadata',
|
||||
'CreateTaskResult',
|
||||
'CreateTaskResultResponse',
|
||||
'GetTaskRequest',
|
||||
'GetTaskResult',
|
||||
'GetTaskResultResponse',
|
||||
'GetTaskPayloadRequest',
|
||||
'GetTaskPayloadResult',
|
||||
'GetTaskPayloadResultResponse',
|
||||
'ListTasksRequest',
|
||||
'ListTasksResult',
|
||||
'ListTasksResultResponse',
|
||||
'CancelTaskRequest',
|
||||
'CancelTaskResult',
|
||||
'CancelTaskResultResponse',
|
||||
'TaskStatusNotification',
|
||||
'TaskStatusNotificationParams'
|
||||
'URLElicitationRequiredError' // In the SDK, but with a custom definition
|
||||
];
|
||||
|
||||
function extractExportedTypes(source: string): string[] {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
import {
|
||||
CallToolRequestSchema,
|
||||
CallToolResultSchema,
|
||||
ClientCapabilitiesSchema,
|
||||
ClientRequestSchema,
|
||||
CompleteRequestSchema,
|
||||
ContentBlockSchema,
|
||||
CreateMessageRequestSchema,
|
||||
|
|
@ -1012,3 +1014,38 @@ describe('Types', () => {
|
|||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('2025-11-25 task wire interop (task feature removed; wire types remain)', () => {
|
||||
test('tasks/get parses through the client request union', () => {
|
||||
const result = ClientRequestSchema.safeParse({ method: 'tasks/get', params: { taskId: 'task-123' } });
|
||||
expect(result.success).toBe(true);
|
||||
});
|
||||
|
||||
test('task-augmented tools/call params parse and retain the task field', () => {
|
||||
const result = CallToolRequestSchema.safeParse({
|
||||
method: 'tools/call',
|
||||
params: { name: 'echo', arguments: {}, task: { ttl: 60000 } }
|
||||
});
|
||||
expect(result.success).toBe(true);
|
||||
if (result.success) {
|
||||
expect(result.data.params.task).toEqual({ ttl: 60000 });
|
||||
}
|
||||
});
|
||||
|
||||
test('tool execution.taskSupport is accepted', () => {
|
||||
const result = ToolSchema.safeParse({
|
||||
name: 'echo',
|
||||
inputSchema: { type: 'object' },
|
||||
execution: { taskSupport: 'optional' }
|
||||
});
|
||||
expect(result.success).toBe(true);
|
||||
});
|
||||
|
||||
test('capabilities.tasks is retained, not stripped', () => {
|
||||
const result = ClientCapabilitiesSchema.safeParse({ tasks: { list: {}, cancel: {} } });
|
||||
expect(result.success).toBe(true);
|
||||
if (result.success) {
|
||||
expect(result.data.tasks).toEqual({ list: {}, cancel: {} });
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -154,7 +154,9 @@ describe('SPEC_SCHEMA_KEYS allowlist', () => {
|
|||
const INTERNAL_HELPER_SCHEMAS: readonly string[] = [
|
||||
'ListChangedOptionsBaseSchema',
|
||||
'BaseRequestParamsSchema',
|
||||
'NotificationsParamsSchema'
|
||||
'NotificationsParamsSchema',
|
||||
'ClientTasksCapabilitySchema',
|
||||
'ServerTasksCapabilitySchema'
|
||||
];
|
||||
|
||||
it('covers every public protocol schema in schemas.ts (drift guard)', () => {
|
||||
|
|
|
|||
Loading…
Reference in a new issue