@contextvm/mcp-sdk 1.27.1-contextvm.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +141 -0
- package/dist/cjs/client/index.d.ts +588 -0
- package/dist/cjs/client/index.d.ts.map +1 -0
- package/dist/cjs/client/index.js +629 -0
- package/dist/cjs/client/index.js.map +1 -0
- package/dist/cjs/client/stdio.d.ts +77 -0
- package/dist/cjs/client/stdio.d.ts.map +1 -0
- package/dist/cjs/client/stdio.js +199 -0
- package/dist/cjs/client/stdio.js.map +1 -0
- package/dist/cjs/experimental/index.d.ts +13 -0
- package/dist/cjs/experimental/index.d.ts.map +1 -0
- package/dist/cjs/experimental/index.js +29 -0
- package/dist/cjs/experimental/index.js.map +1 -0
- package/dist/cjs/experimental/tasks/client.d.ts +121 -0
- package/dist/cjs/experimental/tasks/client.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/client.js +188 -0
- package/dist/cjs/experimental/tasks/client.js.map +1 -0
- package/dist/cjs/experimental/tasks/helpers.d.ts +47 -0
- package/dist/cjs/experimental/tasks/helpers.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/helpers.js +68 -0
- package/dist/cjs/experimental/tasks/helpers.js.map +1 -0
- package/dist/cjs/experimental/tasks/index.d.ts +16 -0
- package/dist/cjs/experimental/tasks/index.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/index.js +39 -0
- package/dist/cjs/experimental/tasks/index.js.map +1 -0
- package/dist/cjs/experimental/tasks/interfaces.d.ts +232 -0
- package/dist/cjs/experimental/tasks/interfaces.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/interfaces.js +19 -0
- package/dist/cjs/experimental/tasks/interfaces.js.map +1 -0
- package/dist/cjs/experimental/tasks/mcp-server.d.ts +77 -0
- package/dist/cjs/experimental/tasks/mcp-server.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/mcp-server.js +36 -0
- package/dist/cjs/experimental/tasks/mcp-server.js.map +1 -0
- package/dist/cjs/experimental/tasks/server.d.ts +170 -0
- package/dist/cjs/experimental/tasks/server.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/server.js +250 -0
- package/dist/cjs/experimental/tasks/server.js.map +1 -0
- package/dist/cjs/experimental/tasks/stores/in-memory.d.ts +94 -0
- package/dist/cjs/experimental/tasks/stores/in-memory.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/stores/in-memory.js +251 -0
- package/dist/cjs/experimental/tasks/stores/in-memory.js.map +1 -0
- package/dist/cjs/experimental/tasks/types.d.ts +10 -0
- package/dist/cjs/experimental/tasks/types.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/types.js +28 -0
- package/dist/cjs/experimental/tasks/types.js.map +1 -0
- package/dist/cjs/inMemory.d.ts +31 -0
- package/dist/cjs/inMemory.d.ts.map +1 -0
- package/dist/cjs/inMemory.js +51 -0
- package/dist/cjs/inMemory.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/server/completable.d.ts +38 -0
- package/dist/cjs/server/completable.d.ts.map +1 -0
- package/dist/cjs/server/completable.js +48 -0
- package/dist/cjs/server/completable.js.map +1 -0
- package/dist/cjs/server/index.d.ts +196 -0
- package/dist/cjs/server/index.d.ts.map +1 -0
- package/dist/cjs/server/index.js +444 -0
- package/dist/cjs/server/index.js.map +1 -0
- package/dist/cjs/server/mcp.d.ts +364 -0
- package/dist/cjs/server/mcp.d.ts.map +1 -0
- package/dist/cjs/server/mcp.js +918 -0
- package/dist/cjs/server/mcp.js.map +1 -0
- package/dist/cjs/server/stdio.d.ts +28 -0
- package/dist/cjs/server/stdio.d.ts.map +1 -0
- package/dist/cjs/server/stdio.js +82 -0
- package/dist/cjs/server/stdio.js.map +1 -0
- package/dist/cjs/server/zod-compat.d.ts +84 -0
- package/dist/cjs/server/zod-compat.d.ts.map +1 -0
- package/dist/cjs/server/zod-compat.js +244 -0
- package/dist/cjs/server/zod-compat.js.map +1 -0
- package/dist/cjs/server/zod-json-schema-compat.d.ts +12 -0
- package/dist/cjs/server/zod-json-schema-compat.d.ts.map +1 -0
- package/dist/cjs/server/zod-json-schema-compat.js +79 -0
- package/dist/cjs/server/zod-json-schema-compat.js.map +1 -0
- package/dist/cjs/shared/auth-info.d.ts +32 -0
- package/dist/cjs/shared/auth-info.d.ts.map +1 -0
- package/dist/cjs/shared/auth-info.js +3 -0
- package/dist/cjs/shared/auth-info.js.map +1 -0
- package/dist/cjs/shared/metadataUtils.d.ts +16 -0
- package/dist/cjs/shared/metadataUtils.d.ts.map +1 -0
- package/dist/cjs/shared/metadataUtils.js +25 -0
- package/dist/cjs/shared/metadataUtils.js.map +1 -0
- package/dist/cjs/shared/protocol.d.ts +443 -0
- package/dist/cjs/shared/protocol.d.ts.map +1 -0
- package/dist/cjs/shared/protocol.js +1104 -0
- package/dist/cjs/shared/protocol.js.map +1 -0
- package/dist/cjs/shared/responseMessage.d.ts +45 -0
- package/dist/cjs/shared/responseMessage.d.ts.map +1 -0
- package/dist/cjs/shared/responseMessage.js +23 -0
- package/dist/cjs/shared/responseMessage.js.map +1 -0
- package/dist/cjs/shared/stdio.d.ts +13 -0
- package/dist/cjs/shared/stdio.d.ts.map +1 -0
- package/dist/cjs/shared/stdio.js +37 -0
- package/dist/cjs/shared/stdio.js.map +1 -0
- package/dist/cjs/shared/toolNameValidation.d.ts +31 -0
- package/dist/cjs/shared/toolNameValidation.d.ts.map +1 -0
- package/dist/cjs/shared/toolNameValidation.js +97 -0
- package/dist/cjs/shared/toolNameValidation.js.map +1 -0
- package/dist/cjs/shared/transport.d.ts +89 -0
- package/dist/cjs/shared/transport.d.ts.map +1 -0
- package/dist/cjs/shared/transport.js +43 -0
- package/dist/cjs/shared/transport.js.map +1 -0
- package/dist/cjs/shared/uriTemplate.d.ts +25 -0
- package/dist/cjs/shared/uriTemplate.d.ts.map +1 -0
- package/dist/cjs/shared/uriTemplate.js +243 -0
- package/dist/cjs/shared/uriTemplate.js.map +1 -0
- package/dist/cjs/spec.types.d.ts +2299 -0
- package/dist/cjs/spec.types.d.ts.map +1 -0
- package/dist/cjs/spec.types.js +27 -0
- package/dist/cjs/spec.types.js.map +1 -0
- package/dist/cjs/types.d.ts +8137 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +2092 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/validation/ajv-provider.d.ts +53 -0
- package/dist/cjs/validation/ajv-provider.d.ts.map +1 -0
- package/dist/cjs/validation/ajv-provider.js +94 -0
- package/dist/cjs/validation/ajv-provider.js.map +1 -0
- package/dist/cjs/validation/cfworker-provider.d.ts +51 -0
- package/dist/cjs/validation/cfworker-provider.d.ts.map +1 -0
- package/dist/cjs/validation/cfworker-provider.js +69 -0
- package/dist/cjs/validation/cfworker-provider.js.map +1 -0
- package/dist/cjs/validation/index.d.ts +29 -0
- package/dist/cjs/validation/index.d.ts.map +1 -0
- package/dist/cjs/validation/index.js +30 -0
- package/dist/cjs/validation/index.js.map +1 -0
- package/dist/cjs/validation/types.d.ts +65 -0
- package/dist/cjs/validation/types.d.ts.map +1 -0
- package/dist/cjs/validation/types.js +3 -0
- package/dist/cjs/validation/types.js.map +1 -0
- package/dist/esm/client/index.d.ts +588 -0
- package/dist/esm/client/index.d.ts.map +1 -0
- package/dist/esm/client/index.js +624 -0
- package/dist/esm/client/index.js.map +1 -0
- package/dist/esm/client/stdio.d.ts +77 -0
- package/dist/esm/client/stdio.d.ts.map +1 -0
- package/dist/esm/client/stdio.js +191 -0
- package/dist/esm/client/stdio.js.map +1 -0
- package/dist/esm/experimental/index.d.ts +13 -0
- package/dist/esm/experimental/index.d.ts.map +1 -0
- package/dist/esm/experimental/index.js +13 -0
- package/dist/esm/experimental/index.js.map +1 -0
- package/dist/esm/experimental/tasks/client.d.ts +121 -0
- package/dist/esm/experimental/tasks/client.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/client.js +184 -0
- package/dist/esm/experimental/tasks/client.js.map +1 -0
- package/dist/esm/experimental/tasks/helpers.d.ts +47 -0
- package/dist/esm/experimental/tasks/helpers.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/helpers.js +64 -0
- package/dist/esm/experimental/tasks/helpers.js.map +1 -0
- package/dist/esm/experimental/tasks/index.d.ts +16 -0
- package/dist/esm/experimental/tasks/index.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/index.js +20 -0
- package/dist/esm/experimental/tasks/index.js.map +1 -0
- package/dist/esm/experimental/tasks/interfaces.d.ts +232 -0
- package/dist/esm/experimental/tasks/interfaces.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/interfaces.js +16 -0
- package/dist/esm/experimental/tasks/interfaces.js.map +1 -0
- package/dist/esm/experimental/tasks/mcp-server.d.ts +77 -0
- package/dist/esm/experimental/tasks/mcp-server.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/mcp-server.js +32 -0
- package/dist/esm/experimental/tasks/mcp-server.js.map +1 -0
- package/dist/esm/experimental/tasks/server.d.ts +170 -0
- package/dist/esm/experimental/tasks/server.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/server.js +246 -0
- package/dist/esm/experimental/tasks/server.js.map +1 -0
- package/dist/esm/experimental/tasks/stores/in-memory.d.ts +94 -0
- package/dist/esm/experimental/tasks/stores/in-memory.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/stores/in-memory.js +246 -0
- package/dist/esm/experimental/tasks/stores/in-memory.js.map +1 -0
- package/dist/esm/experimental/tasks/types.d.ts +10 -0
- package/dist/esm/experimental/tasks/types.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/types.js +10 -0
- package/dist/esm/experimental/tasks/types.js.map +1 -0
- package/dist/esm/inMemory.d.ts +31 -0
- package/dist/esm/inMemory.d.ts.map +1 -0
- package/dist/esm/inMemory.js +47 -0
- package/dist/esm/inMemory.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/server/completable.d.ts +38 -0
- package/dist/esm/server/completable.d.ts.map +1 -0
- package/dist/esm/server/completable.js +41 -0
- package/dist/esm/server/completable.js.map +1 -0
- package/dist/esm/server/index.d.ts +196 -0
- package/dist/esm/server/index.d.ts.map +1 -0
- package/dist/esm/server/index.js +440 -0
- package/dist/esm/server/index.js.map +1 -0
- package/dist/esm/server/mcp.d.ts +364 -0
- package/dist/esm/server/mcp.d.ts.map +1 -0
- package/dist/esm/server/mcp.js +913 -0
- package/dist/esm/server/mcp.js.map +1 -0
- package/dist/esm/server/stdio.d.ts +28 -0
- package/dist/esm/server/stdio.d.ts.map +1 -0
- package/dist/esm/server/stdio.js +75 -0
- package/dist/esm/server/stdio.js.map +1 -0
- package/dist/esm/server/zod-compat.d.ts +84 -0
- package/dist/esm/server/zod-compat.d.ts.map +1 -0
- package/dist/esm/server/zod-compat.js +209 -0
- package/dist/esm/server/zod-compat.js.map +1 -0
- package/dist/esm/server/zod-json-schema-compat.d.ts +12 -0
- package/dist/esm/server/zod-json-schema-compat.d.ts.map +1 -0
- package/dist/esm/server/zod-json-schema-compat.js +51 -0
- package/dist/esm/server/zod-json-schema-compat.js.map +1 -0
- package/dist/esm/shared/auth-info.d.ts +32 -0
- package/dist/esm/shared/auth-info.d.ts.map +1 -0
- package/dist/esm/shared/auth-info.js +2 -0
- package/dist/esm/shared/auth-info.js.map +1 -0
- package/dist/esm/shared/metadataUtils.d.ts +16 -0
- package/dist/esm/shared/metadataUtils.d.ts.map +1 -0
- package/dist/esm/shared/metadataUtils.js +22 -0
- package/dist/esm/shared/metadataUtils.js.map +1 -0
- package/dist/esm/shared/protocol.d.ts +443 -0
- package/dist/esm/shared/protocol.d.ts.map +1 -0
- package/dist/esm/shared/protocol.js +1099 -0
- package/dist/esm/shared/protocol.js.map +1 -0
- package/dist/esm/shared/responseMessage.d.ts +45 -0
- package/dist/esm/shared/responseMessage.d.ts.map +1 -0
- package/dist/esm/shared/responseMessage.js +19 -0
- package/dist/esm/shared/responseMessage.js.map +1 -0
- package/dist/esm/shared/stdio.d.ts +13 -0
- package/dist/esm/shared/stdio.d.ts.map +1 -0
- package/dist/esm/shared/stdio.js +31 -0
- package/dist/esm/shared/stdio.js.map +1 -0
- package/dist/esm/shared/toolNameValidation.d.ts +31 -0
- package/dist/esm/shared/toolNameValidation.d.ts.map +1 -0
- package/dist/esm/shared/toolNameValidation.js +92 -0
- package/dist/esm/shared/toolNameValidation.js.map +1 -0
- package/dist/esm/shared/transport.d.ts +89 -0
- package/dist/esm/shared/transport.d.ts.map +1 -0
- package/dist/esm/shared/transport.js +39 -0
- package/dist/esm/shared/transport.js.map +1 -0
- package/dist/esm/shared/uriTemplate.d.ts +25 -0
- package/dist/esm/shared/uriTemplate.d.ts.map +1 -0
- package/dist/esm/shared/uriTemplate.js +239 -0
- package/dist/esm/shared/uriTemplate.js.map +1 -0
- package/dist/esm/spec.types.d.ts +2299 -0
- package/dist/esm/spec.types.d.ts.map +1 -0
- package/dist/esm/spec.types.js +24 -0
- package/dist/esm/spec.types.js.map +1 -0
- package/dist/esm/types.d.ts +8137 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +2052 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/validation/ajv-provider.d.ts +53 -0
- package/dist/esm/validation/ajv-provider.d.ts.map +1 -0
- package/dist/esm/validation/ajv-provider.js +87 -0
- package/dist/esm/validation/ajv-provider.js.map +1 -0
- package/dist/esm/validation/cfworker-provider.d.ts +51 -0
- package/dist/esm/validation/cfworker-provider.d.ts.map +1 -0
- package/dist/esm/validation/cfworker-provider.js +65 -0
- package/dist/esm/validation/cfworker-provider.js.map +1 -0
- package/dist/esm/validation/index.d.ts +29 -0
- package/dist/esm/validation/index.d.ts.map +1 -0
- package/dist/esm/validation/index.js +29 -0
- package/dist/esm/validation/index.js.map +1 -0
- package/dist/esm/validation/types.d.ts +65 -0
- package/dist/esm/validation/types.d.ts.map +1 -0
- package/dist/esm/validation/types.js +2 -0
- package/dist/esm/validation/types.js.map +1 -0
- package/package.json +124 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Experimental server task features for MCP SDK.
|
|
3
|
+
* WARNING: These APIs are experimental and may change without notice.
|
|
4
|
+
*
|
|
5
|
+
* @experimental
|
|
6
|
+
*/
|
|
7
|
+
import type { Server } from '../../server/index.js';
|
|
8
|
+
import type { RequestOptions } from '../../shared/protocol.js';
|
|
9
|
+
import type { ResponseMessage } from '../../shared/responseMessage.js';
|
|
10
|
+
import type { AnySchema, SchemaOutput } from '../../server/zod-compat.js';
|
|
11
|
+
import type { ServerRequest, Notification, Request, Result, GetTaskResult, ListTasksResult, CancelTaskResult, CreateMessageRequestParams, CreateMessageResult, ElicitRequestFormParams, ElicitRequestURLParams, ElicitResult } from '../../types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Experimental task features for low-level MCP servers.
|
|
14
|
+
*
|
|
15
|
+
* Access via `server.experimental.tasks`:
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const stream = server.experimental.tasks.requestStream(request, schema, options);
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* For high-level server usage with task-based tools, use `McpServer.experimental.tasks` instead.
|
|
21
|
+
*
|
|
22
|
+
* @experimental
|
|
23
|
+
*/
|
|
24
|
+
export declare class ExperimentalServerTasks<RequestT extends Request = Request, NotificationT extends Notification = Notification, ResultT extends Result = Result> {
|
|
25
|
+
private readonly _server;
|
|
26
|
+
constructor(_server: Server<RequestT, NotificationT, ResultT>);
|
|
27
|
+
/**
|
|
28
|
+
* Sends a request and returns an AsyncGenerator that yields response messages.
|
|
29
|
+
* The generator is guaranteed to end with either a 'result' or 'error' message.
|
|
30
|
+
*
|
|
31
|
+
* This method provides streaming access to request processing, allowing you to
|
|
32
|
+
* observe intermediate task status updates for task-augmented requests.
|
|
33
|
+
*
|
|
34
|
+
* @param request - The request to send
|
|
35
|
+
* @param resultSchema - Zod schema for validating the result
|
|
36
|
+
* @param options - Optional request options (timeout, signal, task creation params, etc.)
|
|
37
|
+
* @returns AsyncGenerator that yields ResponseMessage objects
|
|
38
|
+
*
|
|
39
|
+
* @experimental
|
|
40
|
+
*/
|
|
41
|
+
requestStream<T extends AnySchema>(request: ServerRequest | RequestT, resultSchema: T, options?: RequestOptions): AsyncGenerator<ResponseMessage<SchemaOutput<T>>, void, void>;
|
|
42
|
+
/**
|
|
43
|
+
* Sends a sampling request and returns an AsyncGenerator that yields response messages.
|
|
44
|
+
* The generator is guaranteed to end with either a 'result' or 'error' message.
|
|
45
|
+
*
|
|
46
|
+
* For task-augmented requests, yields 'taskCreated' and 'taskStatus' messages
|
|
47
|
+
* before the final result.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* const stream = server.experimental.tasks.createMessageStream({
|
|
52
|
+
* messages: [{ role: 'user', content: { type: 'text', text: 'Hello' } }],
|
|
53
|
+
* maxTokens: 100
|
|
54
|
+
* }, {
|
|
55
|
+
* onprogress: (progress) => {
|
|
56
|
+
* // Handle streaming tokens via progress notifications
|
|
57
|
+
* console.log('Progress:', progress.message);
|
|
58
|
+
* }
|
|
59
|
+
* });
|
|
60
|
+
*
|
|
61
|
+
* for await (const message of stream) {
|
|
62
|
+
* switch (message.type) {
|
|
63
|
+
* case 'taskCreated':
|
|
64
|
+
* console.log('Task created:', message.task.taskId);
|
|
65
|
+
* break;
|
|
66
|
+
* case 'taskStatus':
|
|
67
|
+
* console.log('Task status:', message.task.status);
|
|
68
|
+
* break;
|
|
69
|
+
* case 'result':
|
|
70
|
+
* console.log('Final result:', message.result);
|
|
71
|
+
* break;
|
|
72
|
+
* case 'error':
|
|
73
|
+
* console.error('Error:', message.error);
|
|
74
|
+
* break;
|
|
75
|
+
* }
|
|
76
|
+
* }
|
|
77
|
+
* ```
|
|
78
|
+
*
|
|
79
|
+
* @param params - The sampling request parameters
|
|
80
|
+
* @param options - Optional request options (timeout, signal, task creation params, onprogress, etc.)
|
|
81
|
+
* @returns AsyncGenerator that yields ResponseMessage objects
|
|
82
|
+
*
|
|
83
|
+
* @experimental
|
|
84
|
+
*/
|
|
85
|
+
createMessageStream(params: CreateMessageRequestParams, options?: RequestOptions): AsyncGenerator<ResponseMessage<CreateMessageResult>, void, void>;
|
|
86
|
+
/**
|
|
87
|
+
* Sends an elicitation request and returns an AsyncGenerator that yields response messages.
|
|
88
|
+
* The generator is guaranteed to end with either a 'result' or 'error' message.
|
|
89
|
+
*
|
|
90
|
+
* For task-augmented requests (especially URL-based elicitation), yields 'taskCreated'
|
|
91
|
+
* and 'taskStatus' messages before the final result.
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* const stream = server.experimental.tasks.elicitInputStream({
|
|
96
|
+
* mode: 'url',
|
|
97
|
+
* message: 'Please authenticate',
|
|
98
|
+
* elicitationId: 'auth-123',
|
|
99
|
+
* url: 'https://example.com/auth'
|
|
100
|
+
* }, {
|
|
101
|
+
* task: { ttl: 300000 } // Task-augmented for long-running auth flow
|
|
102
|
+
* });
|
|
103
|
+
*
|
|
104
|
+
* for await (const message of stream) {
|
|
105
|
+
* switch (message.type) {
|
|
106
|
+
* case 'taskCreated':
|
|
107
|
+
* console.log('Task created:', message.task.taskId);
|
|
108
|
+
* break;
|
|
109
|
+
* case 'taskStatus':
|
|
110
|
+
* console.log('Task status:', message.task.status);
|
|
111
|
+
* break;
|
|
112
|
+
* case 'result':
|
|
113
|
+
* console.log('User action:', message.result.action);
|
|
114
|
+
* break;
|
|
115
|
+
* case 'error':
|
|
116
|
+
* console.error('Error:', message.error);
|
|
117
|
+
* break;
|
|
118
|
+
* }
|
|
119
|
+
* }
|
|
120
|
+
* ```
|
|
121
|
+
*
|
|
122
|
+
* @param params - The elicitation request parameters
|
|
123
|
+
* @param options - Optional request options (timeout, signal, task creation params, etc.)
|
|
124
|
+
* @returns AsyncGenerator that yields ResponseMessage objects
|
|
125
|
+
*
|
|
126
|
+
* @experimental
|
|
127
|
+
*/
|
|
128
|
+
elicitInputStream(params: ElicitRequestFormParams | ElicitRequestURLParams, options?: RequestOptions): AsyncGenerator<ResponseMessage<ElicitResult>, void, void>;
|
|
129
|
+
/**
|
|
130
|
+
* Gets the current status of a task.
|
|
131
|
+
*
|
|
132
|
+
* @param taskId - The task identifier
|
|
133
|
+
* @param options - Optional request options
|
|
134
|
+
* @returns The task status
|
|
135
|
+
*
|
|
136
|
+
* @experimental
|
|
137
|
+
*/
|
|
138
|
+
getTask(taskId: string, options?: RequestOptions): Promise<GetTaskResult>;
|
|
139
|
+
/**
|
|
140
|
+
* Retrieves the result of a completed task.
|
|
141
|
+
*
|
|
142
|
+
* @param taskId - The task identifier
|
|
143
|
+
* @param resultSchema - Zod schema for validating the result
|
|
144
|
+
* @param options - Optional request options
|
|
145
|
+
* @returns The task result
|
|
146
|
+
*
|
|
147
|
+
* @experimental
|
|
148
|
+
*/
|
|
149
|
+
getTaskResult<T extends AnySchema>(taskId: string, resultSchema?: T, options?: RequestOptions): Promise<SchemaOutput<T>>;
|
|
150
|
+
/**
|
|
151
|
+
* Lists tasks with optional pagination.
|
|
152
|
+
*
|
|
153
|
+
* @param cursor - Optional pagination cursor
|
|
154
|
+
* @param options - Optional request options
|
|
155
|
+
* @returns List of tasks with optional next cursor
|
|
156
|
+
*
|
|
157
|
+
* @experimental
|
|
158
|
+
*/
|
|
159
|
+
listTasks(cursor?: string, options?: RequestOptions): Promise<ListTasksResult>;
|
|
160
|
+
/**
|
|
161
|
+
* Cancels a running task.
|
|
162
|
+
*
|
|
163
|
+
* @param taskId - The task identifier
|
|
164
|
+
* @param options - Optional request options
|
|
165
|
+
*
|
|
166
|
+
* @experimental
|
|
167
|
+
*/
|
|
168
|
+
cancelTask(taskId: string, options?: RequestOptions): Promise<CancelTaskResult>;
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/experimental/tasks/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,KAAK,EACR,aAAa,EACb,YAAY,EACZ,OAAO,EACP,MAAM,EACN,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,0BAA0B,EAC1B,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACf,MAAM,gBAAgB,CAAC;AAGxB;;;;;;;;;;;GAWG;AACH,qBAAa,uBAAuB,CAChC,QAAQ,SAAS,OAAO,GAAG,OAAO,EAClC,aAAa,SAAS,YAAY,GAAG,YAAY,EACjD,OAAO,SAAS,MAAM,GAAG,MAAM;IAEnB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC;IAE9E;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,CAAC,SAAS,SAAS,EAC7B,OAAO,EAAE,aAAa,GAAG,QAAQ,EACjC,YAAY,EAAE,CAAC,EACf,OAAO,CAAC,EAAE,cAAc,GACzB,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IAY/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0CG;IACH,mBAAmB,CACf,MAAM,EAAE,0BAA0B,EAClC,OAAO,CAAC,EAAE,cAAc,GACzB,cAAc,CAAC,eAAe,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IAuDnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;IACH,iBAAiB,CACb,MAAM,EAAE,uBAAuB,GAAG,sBAAsB,EACxD,OAAO,CAAC,EAAE,cAAc,GACzB,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IAoC5D;;;;;;;;OAQG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAK/E;;;;;;;;;OASG;IACG,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAY9H;;;;;;;;OAQG;IACG,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAQpF;;;;;;;OAOG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAOxF"}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Experimental server task features for MCP SDK.
|
|
3
|
+
* WARNING: These APIs are experimental and may change without notice.
|
|
4
|
+
*
|
|
5
|
+
* @experimental
|
|
6
|
+
*/
|
|
7
|
+
import { CreateMessageResultSchema, ElicitResultSchema } from '../../types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Experimental task features for low-level MCP servers.
|
|
10
|
+
*
|
|
11
|
+
* Access via `server.experimental.tasks`:
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const stream = server.experimental.tasks.requestStream(request, schema, options);
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* For high-level server usage with task-based tools, use `McpServer.experimental.tasks` instead.
|
|
17
|
+
*
|
|
18
|
+
* @experimental
|
|
19
|
+
*/
|
|
20
|
+
export class ExperimentalServerTasks {
|
|
21
|
+
constructor(_server) {
|
|
22
|
+
this._server = _server;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Sends a request and returns an AsyncGenerator that yields response messages.
|
|
26
|
+
* The generator is guaranteed to end with either a 'result' or 'error' message.
|
|
27
|
+
*
|
|
28
|
+
* This method provides streaming access to request processing, allowing you to
|
|
29
|
+
* observe intermediate task status updates for task-augmented requests.
|
|
30
|
+
*
|
|
31
|
+
* @param request - The request to send
|
|
32
|
+
* @param resultSchema - Zod schema for validating the result
|
|
33
|
+
* @param options - Optional request options (timeout, signal, task creation params, etc.)
|
|
34
|
+
* @returns AsyncGenerator that yields ResponseMessage objects
|
|
35
|
+
*
|
|
36
|
+
* @experimental
|
|
37
|
+
*/
|
|
38
|
+
requestStream(request, resultSchema, options) {
|
|
39
|
+
return this._server.requestStream(request, resultSchema, options);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Sends a sampling request and returns an AsyncGenerator that yields response messages.
|
|
43
|
+
* The generator is guaranteed to end with either a 'result' or 'error' message.
|
|
44
|
+
*
|
|
45
|
+
* For task-augmented requests, yields 'taskCreated' and 'taskStatus' messages
|
|
46
|
+
* before the final result.
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* const stream = server.experimental.tasks.createMessageStream({
|
|
51
|
+
* messages: [{ role: 'user', content: { type: 'text', text: 'Hello' } }],
|
|
52
|
+
* maxTokens: 100
|
|
53
|
+
* }, {
|
|
54
|
+
* onprogress: (progress) => {
|
|
55
|
+
* // Handle streaming tokens via progress notifications
|
|
56
|
+
* console.log('Progress:', progress.message);
|
|
57
|
+
* }
|
|
58
|
+
* });
|
|
59
|
+
*
|
|
60
|
+
* for await (const message of stream) {
|
|
61
|
+
* switch (message.type) {
|
|
62
|
+
* case 'taskCreated':
|
|
63
|
+
* console.log('Task created:', message.task.taskId);
|
|
64
|
+
* break;
|
|
65
|
+
* case 'taskStatus':
|
|
66
|
+
* console.log('Task status:', message.task.status);
|
|
67
|
+
* break;
|
|
68
|
+
* case 'result':
|
|
69
|
+
* console.log('Final result:', message.result);
|
|
70
|
+
* break;
|
|
71
|
+
* case 'error':
|
|
72
|
+
* console.error('Error:', message.error);
|
|
73
|
+
* break;
|
|
74
|
+
* }
|
|
75
|
+
* }
|
|
76
|
+
* ```
|
|
77
|
+
*
|
|
78
|
+
* @param params - The sampling request parameters
|
|
79
|
+
* @param options - Optional request options (timeout, signal, task creation params, onprogress, etc.)
|
|
80
|
+
* @returns AsyncGenerator that yields ResponseMessage objects
|
|
81
|
+
*
|
|
82
|
+
* @experimental
|
|
83
|
+
*/
|
|
84
|
+
createMessageStream(params, options) {
|
|
85
|
+
// Access client capabilities via the server
|
|
86
|
+
const clientCapabilities = this._server.getClientCapabilities();
|
|
87
|
+
// Capability check - only required when tools/toolChoice are provided
|
|
88
|
+
if ((params.tools || params.toolChoice) && !clientCapabilities?.sampling?.tools) {
|
|
89
|
+
throw new Error('Client does not support sampling tools capability.');
|
|
90
|
+
}
|
|
91
|
+
// Message structure validation - always validate tool_use/tool_result pairs.
|
|
92
|
+
// These may appear even without tools/toolChoice in the current request when
|
|
93
|
+
// a previous sampling request returned tool_use and this is a follow-up with results.
|
|
94
|
+
if (params.messages.length > 0) {
|
|
95
|
+
const lastMessage = params.messages[params.messages.length - 1];
|
|
96
|
+
const lastContent = Array.isArray(lastMessage.content) ? lastMessage.content : [lastMessage.content];
|
|
97
|
+
const hasToolResults = lastContent.some(c => c.type === 'tool_result');
|
|
98
|
+
const previousMessage = params.messages.length > 1 ? params.messages[params.messages.length - 2] : undefined;
|
|
99
|
+
const previousContent = previousMessage
|
|
100
|
+
? Array.isArray(previousMessage.content)
|
|
101
|
+
? previousMessage.content
|
|
102
|
+
: [previousMessage.content]
|
|
103
|
+
: [];
|
|
104
|
+
const hasPreviousToolUse = previousContent.some(c => c.type === 'tool_use');
|
|
105
|
+
if (hasToolResults) {
|
|
106
|
+
if (lastContent.some(c => c.type !== 'tool_result')) {
|
|
107
|
+
throw new Error('The last message must contain only tool_result content if any is present');
|
|
108
|
+
}
|
|
109
|
+
if (!hasPreviousToolUse) {
|
|
110
|
+
throw new Error('tool_result blocks are not matching any tool_use from the previous message');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (hasPreviousToolUse) {
|
|
114
|
+
// Extract tool_use IDs from previous message and tool_result IDs from current message
|
|
115
|
+
const toolUseIds = new Set(previousContent.filter(c => c.type === 'tool_use').map(c => c.id));
|
|
116
|
+
const toolResultIds = new Set(lastContent.filter(c => c.type === 'tool_result').map(c => c.toolUseId));
|
|
117
|
+
if (toolUseIds.size !== toolResultIds.size || ![...toolUseIds].every(id => toolResultIds.has(id))) {
|
|
118
|
+
throw new Error('ids of tool_result blocks and tool_use blocks from previous message do not match');
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return this.requestStream({
|
|
123
|
+
method: 'sampling/createMessage',
|
|
124
|
+
params
|
|
125
|
+
}, CreateMessageResultSchema, options);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Sends an elicitation request and returns an AsyncGenerator that yields response messages.
|
|
129
|
+
* The generator is guaranteed to end with either a 'result' or 'error' message.
|
|
130
|
+
*
|
|
131
|
+
* For task-augmented requests (especially URL-based elicitation), yields 'taskCreated'
|
|
132
|
+
* and 'taskStatus' messages before the final result.
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```typescript
|
|
136
|
+
* const stream = server.experimental.tasks.elicitInputStream({
|
|
137
|
+
* mode: 'url',
|
|
138
|
+
* message: 'Please authenticate',
|
|
139
|
+
* elicitationId: 'auth-123',
|
|
140
|
+
* url: 'https://example.com/auth'
|
|
141
|
+
* }, {
|
|
142
|
+
* task: { ttl: 300000 } // Task-augmented for long-running auth flow
|
|
143
|
+
* });
|
|
144
|
+
*
|
|
145
|
+
* for await (const message of stream) {
|
|
146
|
+
* switch (message.type) {
|
|
147
|
+
* case 'taskCreated':
|
|
148
|
+
* console.log('Task created:', message.task.taskId);
|
|
149
|
+
* break;
|
|
150
|
+
* case 'taskStatus':
|
|
151
|
+
* console.log('Task status:', message.task.status);
|
|
152
|
+
* break;
|
|
153
|
+
* case 'result':
|
|
154
|
+
* console.log('User action:', message.result.action);
|
|
155
|
+
* break;
|
|
156
|
+
* case 'error':
|
|
157
|
+
* console.error('Error:', message.error);
|
|
158
|
+
* break;
|
|
159
|
+
* }
|
|
160
|
+
* }
|
|
161
|
+
* ```
|
|
162
|
+
*
|
|
163
|
+
* @param params - The elicitation request parameters
|
|
164
|
+
* @param options - Optional request options (timeout, signal, task creation params, etc.)
|
|
165
|
+
* @returns AsyncGenerator that yields ResponseMessage objects
|
|
166
|
+
*
|
|
167
|
+
* @experimental
|
|
168
|
+
*/
|
|
169
|
+
elicitInputStream(params, options) {
|
|
170
|
+
// Access client capabilities via the server
|
|
171
|
+
const clientCapabilities = this._server.getClientCapabilities();
|
|
172
|
+
const mode = params.mode ?? 'form';
|
|
173
|
+
// Capability check based on mode
|
|
174
|
+
switch (mode) {
|
|
175
|
+
case 'url': {
|
|
176
|
+
if (!clientCapabilities?.elicitation?.url) {
|
|
177
|
+
throw new Error('Client does not support url elicitation.');
|
|
178
|
+
}
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
case 'form': {
|
|
182
|
+
if (!clientCapabilities?.elicitation?.form) {
|
|
183
|
+
throw new Error('Client does not support form elicitation.');
|
|
184
|
+
}
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Normalize params to ensure mode is set for form mode (defaults to 'form' per spec)
|
|
189
|
+
const normalizedParams = mode === 'form' && params.mode === undefined ? { ...params, mode: 'form' } : params;
|
|
190
|
+
// Cast to ServerRequest needed because TypeScript can't narrow the union type
|
|
191
|
+
// based on the discriminated 'method' field when constructing the object literal
|
|
192
|
+
return this.requestStream({
|
|
193
|
+
method: 'elicitation/create',
|
|
194
|
+
params: normalizedParams
|
|
195
|
+
}, ElicitResultSchema, options);
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Gets the current status of a task.
|
|
199
|
+
*
|
|
200
|
+
* @param taskId - The task identifier
|
|
201
|
+
* @param options - Optional request options
|
|
202
|
+
* @returns The task status
|
|
203
|
+
*
|
|
204
|
+
* @experimental
|
|
205
|
+
*/
|
|
206
|
+
async getTask(taskId, options) {
|
|
207
|
+
return this._server.getTask({ taskId }, options);
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Retrieves the result of a completed task.
|
|
211
|
+
*
|
|
212
|
+
* @param taskId - The task identifier
|
|
213
|
+
* @param resultSchema - Zod schema for validating the result
|
|
214
|
+
* @param options - Optional request options
|
|
215
|
+
* @returns The task result
|
|
216
|
+
*
|
|
217
|
+
* @experimental
|
|
218
|
+
*/
|
|
219
|
+
async getTaskResult(taskId, resultSchema, options) {
|
|
220
|
+
return this._server.getTaskResult({ taskId }, resultSchema, options);
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Lists tasks with optional pagination.
|
|
224
|
+
*
|
|
225
|
+
* @param cursor - Optional pagination cursor
|
|
226
|
+
* @param options - Optional request options
|
|
227
|
+
* @returns List of tasks with optional next cursor
|
|
228
|
+
*
|
|
229
|
+
* @experimental
|
|
230
|
+
*/
|
|
231
|
+
async listTasks(cursor, options) {
|
|
232
|
+
return this._server.listTasks(cursor ? { cursor } : undefined, options);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Cancels a running task.
|
|
236
|
+
*
|
|
237
|
+
* @param taskId - The task identifier
|
|
238
|
+
* @param options - Optional request options
|
|
239
|
+
*
|
|
240
|
+
* @experimental
|
|
241
|
+
*/
|
|
242
|
+
async cancelTask(taskId, options) {
|
|
243
|
+
return this._server.cancelTask({ taskId }, options);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../src/experimental/tasks/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory implementations of TaskStore and TaskMessageQueue.
|
|
3
|
+
* WARNING: These APIs are experimental and may change without notice.
|
|
4
|
+
*
|
|
5
|
+
* @experimental
|
|
6
|
+
*/
|
|
7
|
+
import { Task, RequestId, Result, Request } from '../../../types.js';
|
|
8
|
+
import { TaskStore, TaskMessageQueue, QueuedMessage, CreateTaskOptions } from '../interfaces.js';
|
|
9
|
+
/**
|
|
10
|
+
* A simple in-memory implementation of TaskStore for demonstration purposes.
|
|
11
|
+
*
|
|
12
|
+
* This implementation stores all tasks in memory and provides automatic cleanup
|
|
13
|
+
* based on the ttl duration specified in the task creation parameters.
|
|
14
|
+
*
|
|
15
|
+
* Note: This is not suitable for production use as all data is lost on restart.
|
|
16
|
+
* For production, consider implementing TaskStore with a database or distributed cache.
|
|
17
|
+
*
|
|
18
|
+
* @experimental
|
|
19
|
+
*/
|
|
20
|
+
export declare class InMemoryTaskStore implements TaskStore {
|
|
21
|
+
private tasks;
|
|
22
|
+
private cleanupTimers;
|
|
23
|
+
/**
|
|
24
|
+
* Generates a unique task ID.
|
|
25
|
+
* Uses 16 bytes of random data encoded as hex (32 characters).
|
|
26
|
+
*/
|
|
27
|
+
private generateTaskId;
|
|
28
|
+
createTask(taskParams: CreateTaskOptions, requestId: RequestId, request: Request, _sessionId?: string): Promise<Task>;
|
|
29
|
+
getTask(taskId: string, _sessionId?: string): Promise<Task | null>;
|
|
30
|
+
storeTaskResult(taskId: string, status: 'completed' | 'failed', result: Result, _sessionId?: string): Promise<void>;
|
|
31
|
+
getTaskResult(taskId: string, _sessionId?: string): Promise<Result>;
|
|
32
|
+
updateTaskStatus(taskId: string, status: Task['status'], statusMessage?: string, _sessionId?: string): Promise<void>;
|
|
33
|
+
listTasks(cursor?: string, _sessionId?: string): Promise<{
|
|
34
|
+
tasks: Task[];
|
|
35
|
+
nextCursor?: string;
|
|
36
|
+
}>;
|
|
37
|
+
/**
|
|
38
|
+
* Cleanup all timers (useful for testing or graceful shutdown)
|
|
39
|
+
*/
|
|
40
|
+
cleanup(): void;
|
|
41
|
+
/**
|
|
42
|
+
* Get all tasks (useful for debugging)
|
|
43
|
+
*/
|
|
44
|
+
getAllTasks(): Task[];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* A simple in-memory implementation of TaskMessageQueue for demonstration purposes.
|
|
48
|
+
*
|
|
49
|
+
* This implementation stores messages in memory, organized by task ID and optional session ID.
|
|
50
|
+
* Messages are stored in FIFO queues per task.
|
|
51
|
+
*
|
|
52
|
+
* Note: This is not suitable for production use in distributed systems.
|
|
53
|
+
* For production, consider implementing TaskMessageQueue with Redis or other distributed queues.
|
|
54
|
+
*
|
|
55
|
+
* @experimental
|
|
56
|
+
*/
|
|
57
|
+
export declare class InMemoryTaskMessageQueue implements TaskMessageQueue {
|
|
58
|
+
private queues;
|
|
59
|
+
/**
|
|
60
|
+
* Generates a queue key from taskId.
|
|
61
|
+
* SessionId is intentionally ignored because taskIds are globally unique
|
|
62
|
+
* and tasks need to be accessible across HTTP requests/sessions.
|
|
63
|
+
*/
|
|
64
|
+
private getQueueKey;
|
|
65
|
+
/**
|
|
66
|
+
* Gets or creates a queue for the given task and session.
|
|
67
|
+
*/
|
|
68
|
+
private getQueue;
|
|
69
|
+
/**
|
|
70
|
+
* Adds a message to the end of the queue for a specific task.
|
|
71
|
+
* Atomically checks queue size and throws if maxSize would be exceeded.
|
|
72
|
+
* @param taskId The task identifier
|
|
73
|
+
* @param message The message to enqueue
|
|
74
|
+
* @param sessionId Optional session ID for binding the operation to a specific session
|
|
75
|
+
* @param maxSize Optional maximum queue size - if specified and queue is full, throws an error
|
|
76
|
+
* @throws Error if maxSize is specified and would be exceeded
|
|
77
|
+
*/
|
|
78
|
+
enqueue(taskId: string, message: QueuedMessage, sessionId?: string, maxSize?: number): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Removes and returns the first message from the queue for a specific task.
|
|
81
|
+
* @param taskId The task identifier
|
|
82
|
+
* @param sessionId Optional session ID for binding the query to a specific session
|
|
83
|
+
* @returns The first message, or undefined if the queue is empty
|
|
84
|
+
*/
|
|
85
|
+
dequeue(taskId: string, sessionId?: string): Promise<QueuedMessage | undefined>;
|
|
86
|
+
/**
|
|
87
|
+
* Removes and returns all messages from the queue for a specific task.
|
|
88
|
+
* @param taskId The task identifier
|
|
89
|
+
* @param sessionId Optional session ID for binding the query to a specific session
|
|
90
|
+
* @returns Array of all messages that were in the queue
|
|
91
|
+
*/
|
|
92
|
+
dequeueAll(taskId: string, sessionId?: string): Promise<QueuedMessage[]>;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=in-memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory.d.ts","sourceRoot":"","sources":["../../../../../src/experimental/tasks/stores/in-memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAc,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAU7G;;;;;;;;;;GAUG;AACH,qBAAa,iBAAkB,YAAW,SAAS;IAC/C,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,aAAa,CAAoD;IAEzE;;;OAGG;IACH,OAAO,CAAC,cAAc;IAIhB,UAAU,CAAC,UAAU,EAAE,iBAAiB,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0CrH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAKlE,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCnH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAanE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCpH,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA0BtG;;OAEG;IACH,OAAO,IAAI,IAAI;IAQf;;OAEG;IACH,WAAW,IAAI,IAAI,EAAE;CAGxB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,wBAAyB,YAAW,gBAAgB;IAC7D,OAAO,CAAC,MAAM,CAAsC;IAEpD;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAUhB;;;;;;;;OAQG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1G;;;;;OAKG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAKrF;;;;;OAKG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAMjF"}
|