@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.
Files changed (146) hide show
  1. package/dist/http/auth.d.ts +2 -2
  2. package/dist/http/auth.d.ts.map +1 -1
  3. package/dist/http/auth.js +15 -16
  4. package/dist/http/index.d.ts +6 -0
  5. package/dist/http/index.d.ts.map +1 -0
  6. package/dist/http/index.js +5 -0
  7. package/dist/http/native.d.ts +73 -0
  8. package/dist/http/native.d.ts.map +1 -1
  9. package/dist/http/native.js +585 -62
  10. package/dist/http/rate-limit.d.ts +1 -1
  11. package/dist/http/rate-limit.d.ts.map +1 -1
  12. package/dist/http/rate-limit.js +5 -6
  13. package/dist/index.d.ts +17 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +69 -8
  16. package/dist/lib/config.js +2 -2
  17. package/dist/lib/core.d.ts +56 -4
  18. package/dist/lib/core.d.ts.map +1 -1
  19. package/dist/lib/core.js +162 -11
  20. package/dist/lib/error/classes.d.ts +19 -0
  21. package/dist/lib/error/classes.d.ts.map +1 -0
  22. package/dist/lib/error/classes.js +107 -0
  23. package/dist/lib/error/classify.d.ts +4 -0
  24. package/dist/lib/error/classify.d.ts.map +1 -0
  25. package/dist/lib/error/classify.js +154 -0
  26. package/dist/lib/error/codes.d.ts +23 -0
  27. package/dist/lib/error/codes.d.ts.map +1 -0
  28. package/dist/lib/error/codes.js +22 -0
  29. package/dist/lib/error/index.d.ts +6 -0
  30. package/dist/lib/error/index.d.ts.map +1 -0
  31. package/dist/lib/error/index.js +5 -0
  32. package/dist/lib/{error-messages.d.ts → error/messages.d.ts} +2 -2
  33. package/dist/lib/error/messages.d.ts.map +1 -0
  34. package/dist/lib/{error-messages.js → error/messages.js} +13 -13
  35. package/dist/lib/{tool-errors.d.ts → error/payload.d.ts} +7 -13
  36. package/dist/lib/error/payload.d.ts.map +1 -0
  37. package/dist/lib/error/payload.js +108 -0
  38. package/dist/lib/mcp-interop.d.ts +1 -0
  39. package/dist/lib/mcp-interop.d.ts.map +1 -1
  40. package/dist/lib/mcp-interop.js +17 -9
  41. package/dist/lib/net/http.d.ts.map +1 -0
  42. package/dist/lib/{http.js → net/http.js} +11 -14
  43. package/dist/lib/net/index.d.ts +4 -0
  44. package/dist/lib/net/index.d.ts.map +1 -0
  45. package/dist/lib/net/index.js +3 -0
  46. package/dist/lib/{fetch-pipeline.d.ts → net/pipeline.d.ts} +3 -3
  47. package/dist/lib/net/pipeline.d.ts.map +1 -0
  48. package/dist/lib/{fetch-pipeline.js → net/pipeline.js} +7 -9
  49. package/dist/lib/{url.d.ts → net/url.d.ts} +2 -2
  50. package/dist/lib/net/url.d.ts.map +1 -0
  51. package/dist/lib/{url.js → net/url.js} +6 -8
  52. package/dist/lib/utils.d.ts +3 -18
  53. package/dist/lib/utils.d.ts.map +1 -1
  54. package/dist/lib/utils.js +33 -105
  55. package/dist/resources/index.d.ts.map +1 -1
  56. package/dist/resources/index.js +6 -3
  57. package/dist/schemas.d.ts +1 -1
  58. package/dist/server.d.ts.map +1 -1
  59. package/dist/server.js +12 -14
  60. package/dist/tasks/index.d.ts +2 -0
  61. package/dist/tasks/index.d.ts.map +1 -0
  62. package/dist/tasks/index.js +1 -0
  63. package/dist/tasks/manager.d.ts +123 -1
  64. package/dist/tasks/manager.d.ts.map +1 -1
  65. package/dist/tasks/manager.js +753 -18
  66. package/dist/tools/{fetch-url.d.ts → index.d.ts} +4 -5
  67. package/dist/tools/index.d.ts.map +1 -0
  68. package/dist/tools/{fetch-url.js → index.js} +14 -31
  69. package/dist/transform/index.d.ts +279 -0
  70. package/dist/transform/index.d.ts.map +1 -0
  71. package/dist/transform/index.js +5234 -0
  72. package/package.json +2 -2
  73. package/dist/cli.d.ts +0 -19
  74. package/dist/cli.d.ts.map +0 -1
  75. package/dist/cli.js +0 -65
  76. package/dist/http/health.d.ts +0 -8
  77. package/dist/http/health.d.ts.map +0 -1
  78. package/dist/http/health.js +0 -152
  79. package/dist/http/helpers.d.ts +0 -68
  80. package/dist/http/helpers.d.ts.map +0 -1
  81. package/dist/http/helpers.js +0 -404
  82. package/dist/lib/error-codes.d.ts +0 -11
  83. package/dist/lib/error-codes.d.ts.map +0 -1
  84. package/dist/lib/error-codes.js +0 -15
  85. package/dist/lib/error-messages.d.ts.map +0 -1
  86. package/dist/lib/fetch-pipeline.d.ts.map +0 -1
  87. package/dist/lib/http.d.ts.map +0 -1
  88. package/dist/lib/logger-names.d.ts +0 -14
  89. package/dist/lib/logger-names.d.ts.map +0 -1
  90. package/dist/lib/logger-names.js +0 -13
  91. package/dist/lib/session.d.ts +0 -44
  92. package/dist/lib/session.d.ts.map +0 -1
  93. package/dist/lib/session.js +0 -137
  94. package/dist/lib/tool-errors.d.ts.map +0 -1
  95. package/dist/lib/tool-errors.js +0 -252
  96. package/dist/lib/url.d.ts.map +0 -1
  97. package/dist/lib/zod.d.ts +0 -3
  98. package/dist/lib/zod.d.ts.map +0 -1
  99. package/dist/lib/zod.js +0 -27
  100. package/dist/tasks/call-contract.d.ts +0 -25
  101. package/dist/tasks/call-contract.d.ts.map +0 -1
  102. package/dist/tasks/call-contract.js +0 -59
  103. package/dist/tasks/execution.d.ts +0 -16
  104. package/dist/tasks/execution.d.ts.map +0 -1
  105. package/dist/tasks/execution.js +0 -241
  106. package/dist/tasks/handlers.d.ts +0 -11
  107. package/dist/tasks/handlers.d.ts.map +0 -1
  108. package/dist/tasks/handlers.js +0 -157
  109. package/dist/tasks/owner.d.ts +0 -43
  110. package/dist/tasks/owner.d.ts.map +0 -1
  111. package/dist/tasks/owner.js +0 -144
  112. package/dist/tasks/registry.d.ts +0 -20
  113. package/dist/tasks/registry.d.ts.map +0 -1
  114. package/dist/tasks/registry.js +0 -40
  115. package/dist/tasks/waiters.d.ts +0 -27
  116. package/dist/tasks/waiters.d.ts.map +0 -1
  117. package/dist/tasks/waiters.js +0 -114
  118. package/dist/tools/fetch-url.d.ts.map +0 -1
  119. package/dist/transform/dom-prep.d.ts +0 -16
  120. package/dist/transform/dom-prep.d.ts.map +0 -1
  121. package/dist/transform/dom-prep.js +0 -1287
  122. package/dist/transform/html-translators.d.ts +0 -5
  123. package/dist/transform/html-translators.d.ts.map +0 -1
  124. package/dist/transform/html-translators.js +0 -697
  125. package/dist/transform/markdown-cleanup.d.ts +0 -10
  126. package/dist/transform/markdown-cleanup.d.ts.map +0 -1
  127. package/dist/transform/markdown-cleanup.js +0 -542
  128. package/dist/transform/metadata.d.ts +0 -18
  129. package/dist/transform/metadata.d.ts.map +0 -1
  130. package/dist/transform/metadata.js +0 -462
  131. package/dist/transform/next-flight.d.ts +0 -2
  132. package/dist/transform/next-flight.d.ts.map +0 -1
  133. package/dist/transform/next-flight.js +0 -374
  134. package/dist/transform/shared.d.ts +0 -8
  135. package/dist/transform/shared.d.ts.map +0 -1
  136. package/dist/transform/shared.js +0 -137
  137. package/dist/transform/transform.d.ts +0 -38
  138. package/dist/transform/transform.d.ts.map +0 -1
  139. package/dist/transform/transform.js +0 -1041
  140. package/dist/transform/types.d.ts +0 -124
  141. package/dist/transform/types.d.ts.map +0 -1
  142. package/dist/transform/types.js +0 -5
  143. package/dist/transform/worker-pool.d.ts +0 -76
  144. package/dist/transform/worker-pool.d.ts.map +0 -1
  145. package/dist/transform/worker-pool.js +0 -725
  146. /package/dist/lib/{http.d.ts → net/http.d.ts} +0 -0
@@ -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
- }
@@ -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"}
@@ -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
- }
@@ -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"}
@@ -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
- }
@@ -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"}
@@ -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"}