@j0hanz/fetch-url-mcp 1.12.6 → 1.12.8
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/dist/http/auth.d.ts +2 -2
- package/dist/http/auth.d.ts.map +1 -1
- package/dist/http/auth.js +15 -16
- package/dist/http/index.d.ts +6 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +5 -0
- package/dist/http/native.d.ts +73 -0
- package/dist/http/native.d.ts.map +1 -1
- package/dist/http/native.js +585 -62
- package/dist/http/rate-limit.d.ts +1 -1
- package/dist/http/rate-limit.d.ts.map +1 -1
- package/dist/http/rate-limit.js +5 -6
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +69 -8
- package/dist/lib/config.js +2 -2
- package/dist/lib/core.d.ts +56 -4
- package/dist/lib/core.d.ts.map +1 -1
- package/dist/lib/core.js +162 -11
- package/dist/lib/error/classes.d.ts +19 -0
- package/dist/lib/error/classes.d.ts.map +1 -0
- package/dist/lib/error/classes.js +107 -0
- package/dist/lib/error/classify.d.ts +4 -0
- package/dist/lib/error/classify.d.ts.map +1 -0
- package/dist/lib/error/classify.js +154 -0
- package/dist/lib/error/codes.d.ts +23 -0
- package/dist/lib/error/codes.d.ts.map +1 -0
- package/dist/lib/error/codes.js +22 -0
- package/dist/lib/error/index.d.ts +6 -0
- package/dist/lib/error/index.d.ts.map +1 -0
- package/dist/lib/error/index.js +5 -0
- package/dist/lib/{error-messages.d.ts → error/messages.d.ts} +2 -2
- package/dist/lib/error/messages.d.ts.map +1 -0
- package/dist/lib/{error-messages.js → error/messages.js} +13 -13
- package/dist/lib/{tool-errors.d.ts → error/payload.d.ts} +7 -13
- package/dist/lib/error/payload.d.ts.map +1 -0
- package/dist/lib/error/payload.js +108 -0
- package/dist/lib/mcp-interop.d.ts +1 -0
- package/dist/lib/mcp-interop.d.ts.map +1 -1
- package/dist/lib/mcp-interop.js +17 -9
- package/dist/lib/net/http.d.ts.map +1 -0
- package/dist/lib/{http.js → net/http.js} +11 -14
- package/dist/lib/net/index.d.ts +4 -0
- package/dist/lib/net/index.d.ts.map +1 -0
- package/dist/lib/net/index.js +3 -0
- package/dist/lib/{fetch-pipeline.d.ts → net/pipeline.d.ts} +3 -3
- package/dist/lib/net/pipeline.d.ts.map +1 -0
- package/dist/lib/{fetch-pipeline.js → net/pipeline.js} +7 -9
- package/dist/lib/{url.d.ts → net/url.d.ts} +2 -2
- package/dist/lib/net/url.d.ts.map +1 -0
- package/dist/lib/{url.js → net/url.js} +6 -8
- package/dist/lib/utils.d.ts +3 -18
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +33 -105
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +6 -3
- package/dist/schemas.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +12 -14
- package/dist/tasks/index.d.ts +2 -0
- package/dist/tasks/index.d.ts.map +1 -0
- package/dist/tasks/index.js +1 -0
- package/dist/tasks/manager.d.ts +123 -1
- package/dist/tasks/manager.d.ts.map +1 -1
- package/dist/tasks/manager.js +753 -18
- package/dist/tools/{fetch-url.d.ts → index.d.ts} +4 -5
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/{fetch-url.js → index.js} +14 -31
- package/dist/transform/index.d.ts +279 -0
- package/dist/transform/index.d.ts.map +1 -0
- package/dist/transform/index.js +5234 -0
- package/package.json +2 -2
- package/dist/cli.d.ts +0 -19
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -65
- package/dist/http/health.d.ts +0 -8
- package/dist/http/health.d.ts.map +0 -1
- package/dist/http/health.js +0 -152
- package/dist/http/helpers.d.ts +0 -68
- package/dist/http/helpers.d.ts.map +0 -1
- package/dist/http/helpers.js +0 -404
- package/dist/lib/error-codes.d.ts +0 -11
- package/dist/lib/error-codes.d.ts.map +0 -1
- package/dist/lib/error-codes.js +0 -15
- package/dist/lib/error-messages.d.ts.map +0 -1
- package/dist/lib/fetch-pipeline.d.ts.map +0 -1
- package/dist/lib/http.d.ts.map +0 -1
- package/dist/lib/logger-names.d.ts +0 -14
- package/dist/lib/logger-names.d.ts.map +0 -1
- package/dist/lib/logger-names.js +0 -13
- package/dist/lib/session.d.ts +0 -44
- package/dist/lib/session.d.ts.map +0 -1
- package/dist/lib/session.js +0 -137
- package/dist/lib/tool-errors.d.ts.map +0 -1
- package/dist/lib/tool-errors.js +0 -252
- package/dist/lib/url.d.ts.map +0 -1
- package/dist/lib/zod.d.ts +0 -3
- package/dist/lib/zod.d.ts.map +0 -1
- package/dist/lib/zod.js +0 -27
- package/dist/tasks/call-contract.d.ts +0 -25
- package/dist/tasks/call-contract.d.ts.map +0 -1
- package/dist/tasks/call-contract.js +0 -59
- package/dist/tasks/execution.d.ts +0 -16
- package/dist/tasks/execution.d.ts.map +0 -1
- package/dist/tasks/execution.js +0 -241
- package/dist/tasks/handlers.d.ts +0 -11
- package/dist/tasks/handlers.d.ts.map +0 -1
- package/dist/tasks/handlers.js +0 -157
- package/dist/tasks/owner.d.ts +0 -43
- package/dist/tasks/owner.d.ts.map +0 -1
- package/dist/tasks/owner.js +0 -144
- package/dist/tasks/registry.d.ts +0 -20
- package/dist/tasks/registry.d.ts.map +0 -1
- package/dist/tasks/registry.js +0 -40
- package/dist/tasks/waiters.d.ts +0 -27
- package/dist/tasks/waiters.d.ts.map +0 -1
- package/dist/tasks/waiters.js +0 -114
- package/dist/tools/fetch-url.d.ts.map +0 -1
- package/dist/transform/dom-prep.d.ts +0 -16
- package/dist/transform/dom-prep.d.ts.map +0 -1
- package/dist/transform/dom-prep.js +0 -1287
- package/dist/transform/html-translators.d.ts +0 -5
- package/dist/transform/html-translators.d.ts.map +0 -1
- package/dist/transform/html-translators.js +0 -697
- package/dist/transform/markdown-cleanup.d.ts +0 -10
- package/dist/transform/markdown-cleanup.d.ts.map +0 -1
- package/dist/transform/markdown-cleanup.js +0 -542
- package/dist/transform/metadata.d.ts +0 -18
- package/dist/transform/metadata.d.ts.map +0 -1
- package/dist/transform/metadata.js +0 -462
- package/dist/transform/next-flight.d.ts +0 -2
- package/dist/transform/next-flight.d.ts.map +0 -1
- package/dist/transform/next-flight.js +0 -374
- package/dist/transform/shared.d.ts +0 -8
- package/dist/transform/shared.d.ts.map +0 -1
- package/dist/transform/shared.js +0 -137
- package/dist/transform/transform.d.ts +0 -38
- package/dist/transform/transform.d.ts.map +0 -1
- package/dist/transform/transform.js +0 -1041
- package/dist/transform/types.d.ts +0 -124
- package/dist/transform/types.d.ts.map +0 -1
- package/dist/transform/types.js +0 -5
- package/dist/transform/worker-pool.d.ts +0 -76
- package/dist/transform/worker-pool.d.ts.map +0 -1
- package/dist/transform/worker-pool.js +0 -725
- /package/dist/lib/{http.d.ts → net/http.d.ts} +0 -0
package/dist/tasks/handlers.js
DELETED
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import {} from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
|
-
import { CallToolRequestSchema, ErrorCode, } from '@modelcontextprotocol/sdk/types.js';
|
|
4
|
-
import { z } from 'zod';
|
|
5
|
-
import { logDebug, logWarn, runWithRequestContext } from '../lib/core.js';
|
|
6
|
-
import { LOG_TASKS } from '../lib/logger-names.js';
|
|
7
|
-
import { createMcpError, getSdkCallToolHandler } from '../lib/mcp-interop.js';
|
|
8
|
-
import { parseExtendedCallToolRequest, withRelatedTaskMeta, } from './call-contract.js';
|
|
9
|
-
import { abortTaskExecution, emitTaskStatusNotification, handleToolCallRequest, throwTaskNotFound, toTaskSummary, } from './execution.js';
|
|
10
|
-
import { taskManager } from './manager.js';
|
|
11
|
-
import { isServerResult, parseHandlerExtra, resolveTaskOwnerKey, resolveToolCallContext, } from './owner.js';
|
|
12
|
-
import { hasRegisteredTaskCapableTools, hasTaskCapableTool, } from './registry.js';
|
|
13
|
-
export { cancelTasksForOwner, abortAllTaskExecutions } from './execution.js';
|
|
14
|
-
/* -------------------------------------------------------------------------------------------------
|
|
15
|
-
* Task handler schemas and registration
|
|
16
|
-
* ------------------------------------------------------------------------------------------------- */
|
|
17
|
-
const TaskGetSchema = z.looseObject({
|
|
18
|
-
method: z.literal('tasks/get', 'Expected "tasks/get"'),
|
|
19
|
-
params: z.looseObject({ taskId: z.string('Expected string') }, 'Expected object'),
|
|
20
|
-
}, 'Invalid request');
|
|
21
|
-
const TaskListSchema = z.looseObject({
|
|
22
|
-
method: z.literal('tasks/list', 'Expected "tasks/list"'),
|
|
23
|
-
params: z
|
|
24
|
-
.looseObject({
|
|
25
|
-
cursor: z.string('Expected string').optional(),
|
|
26
|
-
}, 'Expected object')
|
|
27
|
-
.optional(),
|
|
28
|
-
}, 'Invalid request');
|
|
29
|
-
const TaskCancelSchema = z.looseObject({
|
|
30
|
-
method: z.literal('tasks/cancel', 'Expected "tasks/cancel"'),
|
|
31
|
-
params: z.looseObject({ taskId: z.string('Expected string') }, 'Expected object'),
|
|
32
|
-
}, 'Invalid request');
|
|
33
|
-
const TaskResultSchema = z.looseObject({
|
|
34
|
-
method: z.literal('tasks/result', 'Expected "tasks/result"'),
|
|
35
|
-
params: z.looseObject({ taskId: z.string('Expected string') }, 'Expected object'),
|
|
36
|
-
}, 'Invalid request');
|
|
37
|
-
function resolveOwnerScopedExtra(extra) {
|
|
38
|
-
const parsedExtra = parseHandlerExtra(extra);
|
|
39
|
-
return {
|
|
40
|
-
parsedExtra,
|
|
41
|
-
ownerKey: resolveTaskOwnerKey(parsedExtra),
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
function throwStoredTaskError(task) {
|
|
45
|
-
if (task.error) {
|
|
46
|
-
throw createMcpError(task.error.code, task.error.message, task.error.data);
|
|
47
|
-
}
|
|
48
|
-
throw createMcpError(ErrorCode.InternalError, task.statusMessage ?? 'Execution failed', { taskId: task.taskId });
|
|
49
|
-
}
|
|
50
|
-
export function registerTaskHandlers(server, options) {
|
|
51
|
-
const sdkCallToolHandler = getSdkCallToolHandler(server);
|
|
52
|
-
const taskCapableToolsRegistered = hasRegisteredTaskCapableTools(server);
|
|
53
|
-
const requireInterception = options?.requireInterception ?? true;
|
|
54
|
-
if (!sdkCallToolHandler) {
|
|
55
|
-
if (taskCapableToolsRegistered && requireInterception) {
|
|
56
|
-
throw Error('Task-capable tools are registered but SDK tools/call interception is unavailable. Upgrade compatibility or disable strict interception with TASKS_REQUIRE_INTERCEPTION=false.');
|
|
57
|
-
}
|
|
58
|
-
logWarn('Task call interception disabled: SDK tools/call handler unavailable; task-capable tools require MCP SDK compatibility update', { sdkVersion: 'unknown' }, LOG_TASKS);
|
|
59
|
-
}
|
|
60
|
-
if (sdkCallToolHandler) {
|
|
61
|
-
server.server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
|
|
62
|
-
const parsedExtra = parseHandlerExtra(extra);
|
|
63
|
-
const requestId = parsedExtra?.requestId !== undefined
|
|
64
|
-
? String(parsedExtra.requestId)
|
|
65
|
-
: randomUUID();
|
|
66
|
-
return runWithRequestContext({
|
|
67
|
-
requestId,
|
|
68
|
-
operationId: requestId,
|
|
69
|
-
...(parsedExtra?.sessionId
|
|
70
|
-
? { sessionId: parsedExtra.sessionId }
|
|
71
|
-
: {}),
|
|
72
|
-
}, () => {
|
|
73
|
-
const toolName = request.params.name;
|
|
74
|
-
// Only intercept task-capable tools managed by the local task registry.
|
|
75
|
-
// Delegate all other tools to the SDK handler to avoid shadowing future tools.
|
|
76
|
-
if (!hasTaskCapableTool(server, toolName)) {
|
|
77
|
-
return sdkCallToolHandler(request, extra);
|
|
78
|
-
}
|
|
79
|
-
const parsed = parseExtendedCallToolRequest(request);
|
|
80
|
-
const context = resolveToolCallContext(parsedExtra, parsed.params._meta);
|
|
81
|
-
logDebug('Intercepted task-capable tool call', {
|
|
82
|
-
tool: toolName,
|
|
83
|
-
taskRequested: parsed.params.task !== undefined,
|
|
84
|
-
hasProgressToken: parsed.params._meta?.progressToken !== undefined,
|
|
85
|
-
}, LOG_TASKS);
|
|
86
|
-
return handleToolCallRequest(server, parsed, context);
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
server.server.setRequestHandler(TaskGetSchema, (request, extra) => {
|
|
91
|
-
const { taskId } = request.params;
|
|
92
|
-
const { ownerKey } = resolveOwnerScopedExtra(extra);
|
|
93
|
-
logDebug('tasks/get requested', { taskId }, LOG_TASKS);
|
|
94
|
-
const task = taskManager.getTask(taskId, ownerKey);
|
|
95
|
-
if (!task)
|
|
96
|
-
throwTaskNotFound();
|
|
97
|
-
return toTaskSummary(task);
|
|
98
|
-
});
|
|
99
|
-
server.server.setRequestHandler(TaskResultSchema, async (request, extra) => {
|
|
100
|
-
const { taskId } = request.params;
|
|
101
|
-
const { parsedExtra, ownerKey } = resolveOwnerScopedExtra(extra);
|
|
102
|
-
logDebug('tasks/result requested', { taskId }, LOG_TASKS);
|
|
103
|
-
const task = await taskManager.waitForTerminalTask(taskId, ownerKey, parsedExtra?.signal);
|
|
104
|
-
if (!task)
|
|
105
|
-
throwTaskNotFound();
|
|
106
|
-
try {
|
|
107
|
-
if (task.status === 'cancelled') {
|
|
108
|
-
throwStoredTaskError(task);
|
|
109
|
-
}
|
|
110
|
-
if (task.status === 'failed') {
|
|
111
|
-
if (task.error) {
|
|
112
|
-
throwStoredTaskError(task);
|
|
113
|
-
}
|
|
114
|
-
const failedResult = (task.result ?? null);
|
|
115
|
-
if (failedResult) {
|
|
116
|
-
return withRelatedTaskMeta(failedResult, task.taskId);
|
|
117
|
-
}
|
|
118
|
-
throwStoredTaskError(task);
|
|
119
|
-
}
|
|
120
|
-
const result = isServerResult(task.result)
|
|
121
|
-
? task.result
|
|
122
|
-
: { content: [] };
|
|
123
|
-
return withRelatedTaskMeta(result, task.taskId);
|
|
124
|
-
}
|
|
125
|
-
finally {
|
|
126
|
-
// Shrink TTL only after the result has been fully constructed and
|
|
127
|
-
// is about to be delivered — avoids premature expiry if result
|
|
128
|
-
// construction throws.
|
|
129
|
-
taskManager.shrinkTtlAfterDelivery(taskId);
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
server.server.setRequestHandler(TaskListSchema, (request, extra) => {
|
|
133
|
-
const { ownerKey } = resolveOwnerScopedExtra(extra);
|
|
134
|
-
const cursor = request.params?.cursor;
|
|
135
|
-
logDebug('tasks/list requested', { hasCursor: cursor !== undefined }, LOG_TASKS);
|
|
136
|
-
const { tasks, nextCursor } = taskManager.listTasks(cursor === undefined ? { ownerKey } : { ownerKey, cursor });
|
|
137
|
-
return {
|
|
138
|
-
tasks: tasks.map((task) => toTaskSummary(task)),
|
|
139
|
-
nextCursor,
|
|
140
|
-
};
|
|
141
|
-
});
|
|
142
|
-
server.server.setRequestHandler(TaskCancelSchema, (request, extra) => {
|
|
143
|
-
const { taskId } = request.params;
|
|
144
|
-
const { ownerKey } = resolveOwnerScopedExtra(extra);
|
|
145
|
-
logDebug('tasks/cancel requested', { taskId }, LOG_TASKS);
|
|
146
|
-
const task = taskManager.cancelTask(taskId, ownerKey);
|
|
147
|
-
if (!task)
|
|
148
|
-
throwTaskNotFound();
|
|
149
|
-
abortTaskExecution(taskId);
|
|
150
|
-
emitTaskStatusNotification(server, task);
|
|
151
|
-
return toTaskSummary(task);
|
|
152
|
-
});
|
|
153
|
-
return {
|
|
154
|
-
interceptedToolsCall: sdkCallToolHandler !== null,
|
|
155
|
-
taskCapableToolsRegistered,
|
|
156
|
-
};
|
|
157
|
-
}
|
package/dist/tasks/owner.d.ts
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import type { ServerResult } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
-
import type { ProgressNotification, ToolHandlerExtra } from '../lib/mcp-interop.js';
|
|
3
|
-
import { type ToolCallRequestMeta } from './call-contract.js';
|
|
4
|
-
interface HandlerExtra {
|
|
5
|
-
sessionId?: string;
|
|
6
|
-
authInfo?: {
|
|
7
|
-
clientId?: string;
|
|
8
|
-
token?: string;
|
|
9
|
-
};
|
|
10
|
-
signal?: AbortSignal;
|
|
11
|
-
requestId?: string | number;
|
|
12
|
-
sendNotification?: (notification: ProgressNotification) => Promise<void>;
|
|
13
|
-
requestInfo?: unknown;
|
|
14
|
-
}
|
|
15
|
-
export interface ToolExecutionContext {
|
|
16
|
-
ownerKey: string;
|
|
17
|
-
sessionId?: string;
|
|
18
|
-
signal?: AbortSignal;
|
|
19
|
-
requestId?: string | number;
|
|
20
|
-
sendNotification?: (notification: ProgressNotification) => Promise<void>;
|
|
21
|
-
requestMeta?: ToolCallRequestMeta;
|
|
22
|
-
}
|
|
23
|
-
export type ToolCallContext = ToolExecutionContext;
|
|
24
|
-
interface AuthIdentity {
|
|
25
|
-
clientId?: string;
|
|
26
|
-
token?: string;
|
|
27
|
-
}
|
|
28
|
-
/** Strip keys whose value is `undefined`, returning an object with only the
|
|
29
|
-
* present keys. Return type correctly omits the `undefined` union so the result
|
|
30
|
-
* is compatible with `exactOptionalPropertyTypes`. */
|
|
31
|
-
type Compacted<T extends object> = {
|
|
32
|
-
[K in keyof T as Exclude<T[K], undefined> extends never ? never : K]?: Exclude<T[K], undefined>;
|
|
33
|
-
};
|
|
34
|
-
export declare function compact<T extends object>(obj: T): Compacted<T>;
|
|
35
|
-
export declare function parseHandlerExtra(extra: unknown): HandlerExtra | undefined;
|
|
36
|
-
export declare function buildAuthenticatedOwnerKey(authInfo?: AuthIdentity): string | undefined;
|
|
37
|
-
export declare function resolveTaskOwnerKey(extra?: HandlerExtra): string;
|
|
38
|
-
export declare function resolveToolCallContext(extra?: HandlerExtra, requestMeta?: ToolCallRequestMeta): ToolCallContext;
|
|
39
|
-
export declare function buildToolHandlerExtra(context: ToolExecutionContext, requestMeta?: ToolCallRequestMeta): ToolHandlerExtra;
|
|
40
|
-
export declare function withRequestContextIfMissing<TParams, TResult, TExtra = unknown>(handler: (params: TParams, extra?: TExtra) => Promise<TResult>): (params: TParams, extra?: TExtra) => Promise<TResult>;
|
|
41
|
-
export declare function isServerResult(value: unknown): value is ServerResult;
|
|
42
|
-
export {};
|
|
43
|
-
//# sourceMappingURL=owner.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"owner.d.ts","sourceRoot":"","sources":["../../src/tasks/owner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAOvE,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAM5B,UAAU,YAAY;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC;AAED,MAAM,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAEnD,UAAU,YAAY;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;sDAEsD;AACtD,KAAK,SAAS,CAAC,CAAC,SAAS,MAAM,IAAI;KAChC,CAAC,IAAI,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,SAAS,KAAK,GACnD,KAAK,GACL,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;CAClC,CAAC;AAEF,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAQ9D;AA2BD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CA0B1E;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,CAAC,EAAE,YAAY,GACtB,MAAM,GAAG,SAAS,CAUpB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,EAAE,YAAY,GAAG,MAAM,CAWhE;AAuDD,wBAAgB,sBAAsB,CACpC,KAAK,CAAC,EAAE,YAAY,EACpB,WAAW,CAAC,EAAE,mBAAmB,GAChC,eAAe,CAEjB;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,oBAAoB,EAC7B,WAAW,CAAC,EAAE,mBAAmB,GAChC,gBAAgB,CAOlB;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,EAC5E,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAC7D,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAmBvD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE"}
|
package/dist/tasks/owner.js
DELETED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
import { hash, randomUUID } from 'node:crypto';
|
|
2
|
-
import { getRequestId, resolveMcpSessionOwnerKey, runWithRequestContext, } from '../lib/core.js';
|
|
3
|
-
import { isObject } from '../lib/utils.js';
|
|
4
|
-
import { sanitizeToolCallMeta, } from './call-contract.js';
|
|
5
|
-
export function compact(obj) {
|
|
6
|
-
const result = {};
|
|
7
|
-
for (const key of Object.keys(obj)) {
|
|
8
|
-
if (obj[key] !== undefined) {
|
|
9
|
-
result[key] = obj[key];
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
return result;
|
|
13
|
-
}
|
|
14
|
-
function normalizeSendNotification(sendNotification) {
|
|
15
|
-
if (typeof sendNotification !== 'function')
|
|
16
|
-
return undefined;
|
|
17
|
-
const notify = sendNotification;
|
|
18
|
-
return async (notification) => {
|
|
19
|
-
await Promise.resolve(notify(notification));
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
function normalizeAuthInfo(authInfo) {
|
|
23
|
-
if (!isObject(authInfo))
|
|
24
|
-
return undefined;
|
|
25
|
-
const { clientId, token } = authInfo;
|
|
26
|
-
const normalized = {};
|
|
27
|
-
if (typeof clientId === 'string')
|
|
28
|
-
normalized.clientId = clientId;
|
|
29
|
-
if (typeof token === 'string')
|
|
30
|
-
normalized.token = token;
|
|
31
|
-
return normalized.clientId || normalized.token ? normalized : undefined;
|
|
32
|
-
}
|
|
33
|
-
export function parseHandlerExtra(extra) {
|
|
34
|
-
if (!isObject(extra))
|
|
35
|
-
return undefined;
|
|
36
|
-
const parsed = {};
|
|
37
|
-
const { authInfo, signal, requestId, sendNotification } = extra;
|
|
38
|
-
const sessionId = resolveSessionIdFromExtra(extra);
|
|
39
|
-
if (sessionId)
|
|
40
|
-
parsed.sessionId = sessionId;
|
|
41
|
-
const normalizedAuthInfo = normalizeAuthInfo(authInfo);
|
|
42
|
-
if (normalizedAuthInfo) {
|
|
43
|
-
parsed.authInfo = normalizedAuthInfo;
|
|
44
|
-
}
|
|
45
|
-
if (signal instanceof AbortSignal)
|
|
46
|
-
parsed.signal = signal;
|
|
47
|
-
if (typeof requestId === 'string' || typeof requestId === 'number') {
|
|
48
|
-
parsed.requestId = requestId;
|
|
49
|
-
}
|
|
50
|
-
const normalizedSendNotification = normalizeSendNotification(sendNotification);
|
|
51
|
-
if (normalizedSendNotification) {
|
|
52
|
-
parsed.sendNotification = normalizedSendNotification;
|
|
53
|
-
}
|
|
54
|
-
return parsed;
|
|
55
|
-
}
|
|
56
|
-
export function buildAuthenticatedOwnerKey(authInfo) {
|
|
57
|
-
const authClientId = typeof authInfo?.clientId === 'string' ? authInfo.clientId : '';
|
|
58
|
-
const authToken = typeof authInfo?.token === 'string' ? authInfo.token : '';
|
|
59
|
-
if (authClientId || authToken) {
|
|
60
|
-
return `auth:${hash('sha256', `${authClientId}:${authToken}`, 'hex')}`;
|
|
61
|
-
}
|
|
62
|
-
return undefined;
|
|
63
|
-
}
|
|
64
|
-
export function resolveTaskOwnerKey(extra) {
|
|
65
|
-
const authenticatedOwnerKey = buildAuthenticatedOwnerKey(extra?.authInfo);
|
|
66
|
-
if (authenticatedOwnerKey)
|
|
67
|
-
return authenticatedOwnerKey;
|
|
68
|
-
if (extra?.sessionId) {
|
|
69
|
-
return (resolveMcpSessionOwnerKey(extra.sessionId) ?? `session:${extra.sessionId}`);
|
|
70
|
-
}
|
|
71
|
-
return 'default';
|
|
72
|
-
}
|
|
73
|
-
function resolveRequestIdFromExtra(extra) {
|
|
74
|
-
if (!isObject(extra))
|
|
75
|
-
return undefined;
|
|
76
|
-
const { requestId } = extra;
|
|
77
|
-
if (typeof requestId === 'string')
|
|
78
|
-
return requestId;
|
|
79
|
-
if (typeof requestId === 'number')
|
|
80
|
-
return String(requestId);
|
|
81
|
-
return undefined;
|
|
82
|
-
}
|
|
83
|
-
function getHeaderString(headers, name) {
|
|
84
|
-
const value = headers[name];
|
|
85
|
-
if (typeof value === 'string')
|
|
86
|
-
return value;
|
|
87
|
-
if (!Array.isArray(value))
|
|
88
|
-
return undefined;
|
|
89
|
-
return value.find((entry) => typeof entry === 'string');
|
|
90
|
-
}
|
|
91
|
-
function resolveSessionIdFromExtra(extra) {
|
|
92
|
-
if (!isObject(extra))
|
|
93
|
-
return undefined;
|
|
94
|
-
const { sessionId } = extra;
|
|
95
|
-
if (typeof sessionId === 'string')
|
|
96
|
-
return sessionId;
|
|
97
|
-
const { requestInfo } = extra;
|
|
98
|
-
if (!isObject(requestInfo))
|
|
99
|
-
return undefined;
|
|
100
|
-
const { headers } = requestInfo;
|
|
101
|
-
if (!isObject(headers))
|
|
102
|
-
return undefined;
|
|
103
|
-
return (getHeaderString(headers, 'mcp-session-id') ??
|
|
104
|
-
getHeaderString(headers, 'x-mcp-session-id'));
|
|
105
|
-
}
|
|
106
|
-
function resolveToolExecutionContext(extra, requestMeta) {
|
|
107
|
-
return compact({
|
|
108
|
-
ownerKey: resolveTaskOwnerKey(extra),
|
|
109
|
-
sessionId: extra?.sessionId,
|
|
110
|
-
signal: extra?.signal,
|
|
111
|
-
requestId: extra?.requestId,
|
|
112
|
-
sendNotification: extra?.sendNotification,
|
|
113
|
-
requestMeta: sanitizeToolCallMeta(requestMeta),
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
export function resolveToolCallContext(extra, requestMeta) {
|
|
117
|
-
return resolveToolExecutionContext(extra, requestMeta);
|
|
118
|
-
}
|
|
119
|
-
export function buildToolHandlerExtra(context, requestMeta) {
|
|
120
|
-
return compact({
|
|
121
|
-
signal: context.signal,
|
|
122
|
-
requestId: context.requestId,
|
|
123
|
-
sendNotification: context.sendNotification,
|
|
124
|
-
_meta: sanitizeToolCallMeta(requestMeta ?? context.requestMeta),
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
export function withRequestContextIfMissing(handler) {
|
|
128
|
-
return async (params, extra) => {
|
|
129
|
-
const existingRequestId = getRequestId();
|
|
130
|
-
if (existingRequestId) {
|
|
131
|
-
return handler(params, extra);
|
|
132
|
-
}
|
|
133
|
-
const derivedRequestId = resolveRequestIdFromExtra(extra) ?? randomUUID();
|
|
134
|
-
const derivedSessionId = resolveSessionIdFromExtra(extra);
|
|
135
|
-
return runWithRequestContext({
|
|
136
|
-
requestId: derivedRequestId,
|
|
137
|
-
operationId: derivedRequestId,
|
|
138
|
-
...(derivedSessionId ? { sessionId: derivedSessionId } : {}),
|
|
139
|
-
}, () => handler(params, extra));
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
export function isServerResult(value) {
|
|
143
|
-
return isObject(value) && Array.isArray(value['content']);
|
|
144
|
-
}
|
package/dist/tasks/registry.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
-
import type { ServerResult } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
-
import type { ToolHandlerExtra } from '../lib/mcp-interop.js';
|
|
4
|
-
export type TaskCapableToolSupport = 'required' | 'optional' | 'forbidden';
|
|
5
|
-
export interface TaskCapableToolDescriptor<TArgs = unknown> {
|
|
6
|
-
name: string;
|
|
7
|
-
parseArguments: (args: unknown) => TArgs;
|
|
8
|
-
execute: (args: TArgs, extra?: ToolHandlerExtra) => Promise<ServerResult>;
|
|
9
|
-
getCompletionStatusMessage?: (result: ServerResult) => string | undefined;
|
|
10
|
-
taskSupport?: TaskCapableToolSupport;
|
|
11
|
-
immediateResponse?: string;
|
|
12
|
-
}
|
|
13
|
-
export declare function registerTaskCapableTool<TArgs>(server: McpServer, descriptor: TaskCapableToolDescriptor<TArgs>): void;
|
|
14
|
-
export declare function unregisterTaskCapableTool(server: McpServer, name: string): void;
|
|
15
|
-
export declare function getTaskCapableTool(server: McpServer, name: string): TaskCapableToolDescriptor | undefined;
|
|
16
|
-
export declare function getTaskCapableToolSupport(server: McpServer, name: string): TaskCapableToolSupport | undefined;
|
|
17
|
-
export declare function hasTaskCapableTool(server: McpServer, name: string): boolean;
|
|
18
|
-
export declare function hasRegisteredTaskCapableTools(server: McpServer): boolean;
|
|
19
|
-
export declare function setTaskCapableToolSupport(server: McpServer, name: string, support: TaskCapableToolSupport): void;
|
|
20
|
-
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tasks/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAGvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;AAE3E,MAAM,WAAW,yBAAyB,CAAC,KAAK,GAAG,OAAO;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,KAAK,CAAC;IACzC,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,gBAAgB,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1E,0BAA0B,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1E,WAAW,CAAC,EAAE,sBAAsB,CAAC;IACrC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAqBD,wBAAgB,uBAAuB,CAAC,KAAK,EAC3C,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,yBAAyB,CAAC,KAAK,CAAC,GAC3C,IAAI,CAKN;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,MAAM,GACX,IAAI,CAEN;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,MAAM,GACX,yBAAyB,GAAG,SAAS,CAEvC;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,MAAM,GACX,sBAAsB,GAAG,SAAS,CAEpC;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3E;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAExE;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,sBAAsB,GAC9B,IAAI,CAIN"}
|
package/dist/tasks/registry.js
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { registerServerLifecycleCleanup } from '../lib/mcp-interop.js';
|
|
2
|
-
const taskCapableToolsByServer = new WeakMap();
|
|
3
|
-
function getServerToolMap(server) {
|
|
4
|
-
let toolMap = taskCapableToolsByServer.get(server);
|
|
5
|
-
if (toolMap)
|
|
6
|
-
return toolMap;
|
|
7
|
-
toolMap = new Map();
|
|
8
|
-
taskCapableToolsByServer.set(server, toolMap);
|
|
9
|
-
registerServerLifecycleCleanup(server, () => {
|
|
10
|
-
taskCapableToolsByServer.delete(server);
|
|
11
|
-
});
|
|
12
|
-
return toolMap;
|
|
13
|
-
}
|
|
14
|
-
export function registerTaskCapableTool(server, descriptor) {
|
|
15
|
-
getServerToolMap(server).set(descriptor.name, {
|
|
16
|
-
...descriptor,
|
|
17
|
-
taskSupport: descriptor.taskSupport ?? 'optional',
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
export function unregisterTaskCapableTool(server, name) {
|
|
21
|
-
getServerToolMap(server).delete(name);
|
|
22
|
-
}
|
|
23
|
-
export function getTaskCapableTool(server, name) {
|
|
24
|
-
return getServerToolMap(server).get(name);
|
|
25
|
-
}
|
|
26
|
-
export function getTaskCapableToolSupport(server, name) {
|
|
27
|
-
return getServerToolMap(server).get(name)?.taskSupport;
|
|
28
|
-
}
|
|
29
|
-
export function hasTaskCapableTool(server, name) {
|
|
30
|
-
return getServerToolMap(server).has(name);
|
|
31
|
-
}
|
|
32
|
-
export function hasRegisteredTaskCapableTools(server) {
|
|
33
|
-
return getServerToolMap(server).size > 0;
|
|
34
|
-
}
|
|
35
|
-
export function setTaskCapableToolSupport(server, name, support) {
|
|
36
|
-
const descriptor = getServerToolMap(server).get(name);
|
|
37
|
-
if (!descriptor)
|
|
38
|
-
return;
|
|
39
|
-
descriptor.taskSupport = support;
|
|
40
|
-
}
|
package/dist/tasks/waiters.d.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
interface WaitableTask {
|
|
2
|
-
taskId: string;
|
|
3
|
-
ownerKey: string;
|
|
4
|
-
status: string;
|
|
5
|
-
ttl: number;
|
|
6
|
-
_createdAtMs: number;
|
|
7
|
-
}
|
|
8
|
-
type TaskWaiter<TTask extends WaitableTask> = (task: TTask) => void;
|
|
9
|
-
export declare class TaskWaiterRegistry<TTask extends WaitableTask> {
|
|
10
|
-
private readonly isTerminalStatus;
|
|
11
|
-
private waiters;
|
|
12
|
-
constructor(isTerminalStatus: (status: TTask['status']) => boolean);
|
|
13
|
-
add(taskId: string, waiter: TaskWaiter<TTask>): void;
|
|
14
|
-
remove(taskId: string, waiter: TaskWaiter<TTask> | null): void;
|
|
15
|
-
notify(task: TTask): void;
|
|
16
|
-
}
|
|
17
|
-
export declare function waitForTerminalTask<TTask extends WaitableTask>(options: {
|
|
18
|
-
taskId: string;
|
|
19
|
-
ownerKey: string;
|
|
20
|
-
signal?: AbortSignal;
|
|
21
|
-
lookupTask: (taskId: string, ownerKey: string) => TTask | undefined;
|
|
22
|
-
removeTask: (taskId: string) => void;
|
|
23
|
-
registry: TaskWaiterRegistry<TTask>;
|
|
24
|
-
isTerminalStatus: (status: TTask['status']) => boolean;
|
|
25
|
-
}): Promise<TTask | undefined>;
|
|
26
|
-
export {};
|
|
27
|
-
//# sourceMappingURL=waiters.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"waiters.d.ts","sourceRoot":"","sources":["../../src/tasks/waiters.ts"],"names":[],"mappings":"AAQA,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,KAAK,UAAU,CAAC,KAAK,SAAS,YAAY,IAAI,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC;AAEpE,qBAAa,kBAAkB,CAAC,KAAK,SAAS,YAAY;IAItD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAHnC,OAAO,CAAC,OAAO,CAA6C;gBAGzC,gBAAgB,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,OAAO;IAGzE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI;IASpD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI;IAY9D,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI;CAS1B;AAED,wBAAsB,mBAAmB,CAAC,KAAK,SAAS,YAAY,EAAE,OAAO,EAAE;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,KAAK,GAAG,SAAS,CAAC;IACpE,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACpC,gBAAgB,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC;CACxD,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CA2F7B"}
|
package/dist/tasks/waiters.js
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
-
import { ErrorCode } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
-
import { createMcpError } from '../lib/mcp-interop.js';
|
|
4
|
-
import { toError } from '../lib/utils.js';
|
|
5
|
-
import { createUnrefTimeout } from '../lib/utils.js';
|
|
6
|
-
export class TaskWaiterRegistry {
|
|
7
|
-
isTerminalStatus;
|
|
8
|
-
waiters = new Map();
|
|
9
|
-
constructor(isTerminalStatus) {
|
|
10
|
-
this.isTerminalStatus = isTerminalStatus;
|
|
11
|
-
}
|
|
12
|
-
add(taskId, waiter) {
|
|
13
|
-
let set = this.waiters.get(taskId);
|
|
14
|
-
if (!set) {
|
|
15
|
-
set = new Set();
|
|
16
|
-
this.waiters.set(taskId, set);
|
|
17
|
-
}
|
|
18
|
-
set.add(waiter);
|
|
19
|
-
}
|
|
20
|
-
remove(taskId, waiter) {
|
|
21
|
-
if (!waiter)
|
|
22
|
-
return;
|
|
23
|
-
const set = this.waiters.get(taskId);
|
|
24
|
-
if (!set)
|
|
25
|
-
return;
|
|
26
|
-
set.delete(waiter);
|
|
27
|
-
if (set.size === 0) {
|
|
28
|
-
this.waiters.delete(taskId);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
notify(task) {
|
|
32
|
-
if (!this.isTerminalStatus(task.status))
|
|
33
|
-
return;
|
|
34
|
-
const waiters = this.waiters.get(task.taskId);
|
|
35
|
-
if (!waiters)
|
|
36
|
-
return;
|
|
37
|
-
this.waiters.delete(task.taskId);
|
|
38
|
-
for (const waiter of waiters)
|
|
39
|
-
waiter(task);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
export async function waitForTerminalTask(options) {
|
|
43
|
-
const task = options.lookupTask(options.taskId, options.ownerKey);
|
|
44
|
-
if (!task)
|
|
45
|
-
return undefined;
|
|
46
|
-
if (options.isTerminalStatus(task.status))
|
|
47
|
-
return task;
|
|
48
|
-
const deadlineMs = task._createdAtMs + task.ttl;
|
|
49
|
-
const { promise, resolve, reject } = Promise.withResolvers();
|
|
50
|
-
const resolveInContext = AsyncLocalStorage.bind((value) => {
|
|
51
|
-
resolve(value);
|
|
52
|
-
});
|
|
53
|
-
const rejectInContext = AsyncLocalStorage.bind((error) => {
|
|
54
|
-
reject(toError(error));
|
|
55
|
-
});
|
|
56
|
-
let settled = false;
|
|
57
|
-
let waiter = null;
|
|
58
|
-
let deadlineTimeout;
|
|
59
|
-
const cleanup = () => {
|
|
60
|
-
if (deadlineTimeout) {
|
|
61
|
-
deadlineTimeout.cancel();
|
|
62
|
-
deadlineTimeout = undefined;
|
|
63
|
-
}
|
|
64
|
-
if (options.signal) {
|
|
65
|
-
options.signal.removeEventListener('abort', onAbort);
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
const settleOnce = (fn) => {
|
|
69
|
-
if (settled)
|
|
70
|
-
return;
|
|
71
|
-
settled = true;
|
|
72
|
-
fn();
|
|
73
|
-
};
|
|
74
|
-
const onAbort = () => {
|
|
75
|
-
settleOnce(() => {
|
|
76
|
-
cleanup();
|
|
77
|
-
options.registry.remove(options.taskId, waiter);
|
|
78
|
-
rejectInContext(createMcpError(ErrorCode.ConnectionClosed, 'Request was cancelled'));
|
|
79
|
-
});
|
|
80
|
-
};
|
|
81
|
-
waiter = (updated) => {
|
|
82
|
-
settleOnce(() => {
|
|
83
|
-
cleanup();
|
|
84
|
-
if (updated.ownerKey !== options.ownerKey) {
|
|
85
|
-
resolveInContext(undefined);
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
resolveInContext(updated);
|
|
89
|
-
});
|
|
90
|
-
};
|
|
91
|
-
if (options.signal?.aborted) {
|
|
92
|
-
onAbort();
|
|
93
|
-
return promise;
|
|
94
|
-
}
|
|
95
|
-
options.registry.add(options.taskId, waiter);
|
|
96
|
-
if (options.signal) {
|
|
97
|
-
options.signal.addEventListener('abort', onAbort, { once: true });
|
|
98
|
-
}
|
|
99
|
-
const timeoutMs = Math.max(0, deadlineMs - Date.now());
|
|
100
|
-
deadlineTimeout = createUnrefTimeout(timeoutMs, { timeout: true });
|
|
101
|
-
void deadlineTimeout.promise
|
|
102
|
-
.then(() => {
|
|
103
|
-
settleOnce(() => {
|
|
104
|
-
cleanup();
|
|
105
|
-
options.registry.remove(options.taskId, waiter);
|
|
106
|
-
options.removeTask(options.taskId);
|
|
107
|
-
rejectInContext(createMcpError(ErrorCode.InvalidParams, 'Task expired', {
|
|
108
|
-
taskId: options.taskId,
|
|
109
|
-
}));
|
|
110
|
-
});
|
|
111
|
-
})
|
|
112
|
-
.catch(rejectInContext);
|
|
113
|
-
return promise;
|
|
114
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-url.d.ts","sourceRoot":"","sources":["../../src/tools/fetch-url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EACV,YAAY,EAEb,MAAM,oCAAoC,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAY7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EAGL,KAAK,gBAAgB,EAErB,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAU/B,OAAO,EACL,mBAAmB,EAIpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAIL,KAAK,sBAAsB,EAE5B,MAAM,sBAAsB,CAAC;AAE9B,KAAK,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEzD,UAAU,gBAAgB;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,mBAAmB,cAAc,CAAC;AA2F/C,wBAAgB,0BAA0B,CACxC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACzC,YAAY,EAAE,CAUhB;AAuCD,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,YAAY,GACnB,MAAM,GAAG,SAAS,CAUpB;AAED,qBAAa,oBAAoB;IAI7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;gBAGhB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,MAAM;IAGlC,WAAW,IAAI,IAAI;IAInB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAM1C,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAQxC,aAAa,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAQvC,OAAO,CAAC,QAAQ;CAiCjB;AA8FD,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,aAAa,EACpB,KAAK,CAAC,EAAE,gBAAgB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CAa3B;AAqBD,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI,CAAC;CAC3D;AAqBD,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,wBAAwB,CAuCzE"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { ExtractedArticle } from './types.js';
|
|
2
|
-
export declare const WP_PHOTON_HOST_PATTERN: RegExp;
|
|
3
|
-
export declare function extractNoscriptImages(document: Document): void;
|
|
4
|
-
export declare function resolveDocumentBody(document: Document): Element;
|
|
5
|
-
export declare function serializeDocumentForMarkdown(document: Document, fallback: string): string;
|
|
6
|
-
/** Surface hidden tab panels, then strip unselected tab triggers. */
|
|
7
|
-
export declare function normalizeTabContent(document: Document): void;
|
|
8
|
-
export declare function surfaceCodeEditorContent(document: Document): void;
|
|
9
|
-
export declare function stripDocsControls(document: Document): void;
|
|
10
|
-
export declare function stripScreenReaderText(document: Document): void;
|
|
11
|
-
export declare function runDocsControlPass(document: Document): void;
|
|
12
|
-
export declare function prepareDocumentForMarkdown(document: Document, baseUrl?: string, signal?: AbortSignal): void;
|
|
13
|
-
export declare function removeNoiseFromHtml(html: string, document?: Document, baseUrl?: string, signal?: AbortSignal): string;
|
|
14
|
-
export declare function getVisibleTextLength(htmlOrDocument: string | Document): number;
|
|
15
|
-
export declare function evaluateArticleContent(article: ExtractedArticle, document: Document): Document | null;
|
|
16
|
-
//# sourceMappingURL=dom-prep.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dom-prep.d.ts","sourceRoot":"","sources":["../../src/transform/dom-prep.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AA+mBnD,eAAO,MAAM,sBAAsB,QAAmB,CAAC;AAyCvD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CA6B9D;AAuBD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAY/D;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,MAAM,GACf,MAAM,CASR;AA0CD,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAG5D;AA0RD,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CA2BjE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAE1D;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAY9D;AAWD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAQ3D;AAuDD,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,WAAW,GACnB,IAAI,CAON;AA4BD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,QAAQ,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,WAAW,GACnB,MAAM,CAcR;AA0ED,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,MAAM,GAAG,QAAQ,GAChC,MAAM,CAaR;AAiMD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,QAAQ,GACjB,QAAQ,GAAG,IAAI,CAsCjB"}
|