@j0hanz/fetch-url-mcp 1.2.0 → 1.3.1
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/cache.d.ts +9 -3
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +54 -119
- package/dist/cache.js.map +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +7 -4
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +2 -3
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +19 -27
- package/dist/config.js.map +1 -0
- package/dist/crypto.d.ts +1 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +7 -3
- package/dist/crypto.js.map +1 -0
- package/dist/dom-noise-removal.d.ts +2 -1
- package/dist/dom-noise-removal.d.ts.map +1 -0
- package/dist/dom-noise-removal.js +9 -6
- package/dist/dom-noise-removal.js.map +1 -0
- package/dist/download.d.ts +4 -0
- package/dist/download.d.ts.map +1 -0
- package/dist/download.js +106 -0
- package/dist/download.js.map +1 -0
- package/dist/errors.d.ts +1 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +2 -1
- package/dist/errors.js.map +1 -0
- package/dist/examples/mcp-fetch-url-client.js +19 -3
- package/dist/examples/mcp-fetch-url-client.js.map +1 -1
- package/dist/fetch-content.d.ts +1 -0
- package/dist/fetch-content.d.ts.map +1 -0
- package/dist/fetch-content.js +15 -14
- package/dist/fetch-content.js.map +1 -0
- package/dist/fetch-stream.d.ts +1 -0
- package/dist/fetch-stream.d.ts.map +1 -0
- package/dist/fetch-stream.js +1 -0
- package/dist/fetch-stream.js.map +1 -0
- package/dist/fetch.d.ts +1 -0
- package/dist/fetch.d.ts.map +1 -0
- package/dist/fetch.js +123 -54
- package/dist/fetch.js.map +1 -0
- package/dist/host-normalization.d.ts +1 -0
- package/dist/host-normalization.d.ts.map +1 -0
- package/dist/host-normalization.js +22 -9
- package/dist/host-normalization.js.map +1 -0
- package/dist/http/auth.d.ts +51 -0
- package/dist/http/auth.d.ts.map +1 -0
- package/dist/http/auth.js +344 -0
- package/dist/http/auth.js.map +1 -0
- package/dist/http/health.d.ts +7 -0
- package/dist/http/health.d.ts.map +1 -0
- package/dist/http/health.js +156 -0
- package/dist/http/health.js.map +1 -0
- package/dist/http/helpers.d.ts +58 -0
- package/dist/http/helpers.d.ts.map +1 -0
- package/dist/http/helpers.js +370 -0
- package/dist/http/helpers.js.map +1 -0
- package/dist/{http-native.d.ts → http/native.d.ts} +1 -0
- package/dist/http/native.d.ts.map +1 -0
- package/dist/http/native.js +618 -0
- package/dist/http/native.js.map +1 -0
- package/dist/http/rate-limit.d.ts +13 -0
- package/dist/http/rate-limit.d.ts.map +1 -0
- package/dist/http/rate-limit.js +92 -0
- package/dist/http/rate-limit.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -14
- package/dist/index.js.map +1 -0
- package/dist/instructions.d.ts +2 -0
- package/dist/instructions.d.ts.map +1 -0
- package/dist/instructions.js +41 -0
- package/dist/instructions.js.map +1 -0
- package/dist/ip-blocklist.d.ts +1 -0
- package/dist/ip-blocklist.d.ts.map +1 -0
- package/dist/ip-blocklist.js +13 -8
- package/dist/ip-blocklist.js.map +1 -0
- package/dist/json.d.ts +2 -1
- package/dist/json.d.ts.map +1 -0
- package/dist/json.js +16 -6
- package/dist/json.js.map +1 -0
- package/dist/language-detection.d.ts +1 -0
- package/dist/language-detection.d.ts.map +1 -0
- package/dist/language-detection.js +2 -7
- package/dist/language-detection.js.map +1 -0
- package/dist/markdown-cleanup.d.ts +2 -1
- package/dist/markdown-cleanup.d.ts.map +1 -0
- package/dist/markdown-cleanup.js +52 -54
- package/dist/markdown-cleanup.js.map +1 -0
- package/dist/mcp-validator.d.ts +1 -0
- package/dist/mcp-validator.d.ts.map +1 -0
- package/dist/mcp-validator.js +20 -18
- package/dist/mcp-validator.js.map +1 -0
- package/dist/mcp.d.ts +2 -2
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +35 -344
- package/dist/mcp.js.map +1 -0
- package/dist/observability.d.ts +2 -0
- package/dist/observability.d.ts.map +1 -0
- package/dist/observability.js +32 -6
- package/dist/observability.js.map +1 -0
- package/dist/prompts.d.ts +1 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +15 -3
- package/dist/prompts.js.map +1 -0
- package/dist/resources.d.ts +1 -0
- package/dist/resources.d.ts.map +1 -0
- package/dist/resources.js +46 -25
- package/dist/resources.js.map +1 -0
- package/dist/server-tuning.d.ts +1 -0
- package/dist/server-tuning.d.ts.map +1 -0
- package/dist/server-tuning.js +14 -17
- package/dist/server-tuning.js.map +1 -0
- package/dist/server.d.ts +1 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +29 -35
- package/dist/server.js.map +1 -0
- package/dist/session.d.ts +2 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +58 -29
- package/dist/session.js.map +1 -0
- package/dist/tasks/execution.d.ts +42 -0
- package/dist/tasks/execution.d.ts.map +1 -0
- package/dist/tasks/execution.js +241 -0
- package/dist/tasks/execution.js.map +1 -0
- package/dist/{tasks.d.ts → tasks/manager.d.ts} +12 -0
- package/dist/tasks/manager.d.ts.map +1 -0
- package/dist/{tasks.js → tasks/manager.js} +95 -43
- package/dist/tasks/manager.js.map +1 -0
- package/dist/tasks/owner.d.ts +32 -0
- package/dist/tasks/owner.d.ts.map +1 -0
- package/dist/tasks/owner.js +92 -0
- package/dist/tasks/owner.js.map +1 -0
- package/dist/timer-utils.d.ts +1 -0
- package/dist/timer-utils.d.ts.map +1 -0
- package/dist/timer-utils.js +8 -4
- package/dist/timer-utils.js.map +1 -0
- package/dist/tool-errors.d.ts +12 -0
- package/dist/tool-errors.d.ts.map +1 -0
- package/dist/tool-errors.js +55 -0
- package/dist/tool-errors.js.map +1 -0
- package/dist/tool-pipeline.d.ts +72 -0
- package/dist/tool-pipeline.d.ts.map +1 -0
- package/dist/tool-pipeline.js +408 -0
- package/dist/tool-pipeline.js.map +1 -0
- package/dist/tool-progress.d.ts +32 -0
- package/dist/tool-progress.d.ts.map +1 -0
- package/dist/tool-progress.js +129 -0
- package/dist/tool-progress.js.map +1 -0
- package/dist/tools.d.ts +35 -111
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +150 -610
- package/dist/tools.js.map +1 -0
- package/dist/{transform.d.ts → transform/transform.d.ts} +2 -1
- package/dist/transform/transform.d.ts.map +1 -0
- package/dist/{transform.js → transform/transform.js} +81 -771
- package/dist/transform/transform.js.map +1 -0
- package/dist/{transform-types.d.ts → transform/types.d.ts} +2 -0
- package/dist/transform/types.d.ts.map +1 -0
- package/dist/{transform-types.js → transform/types.js} +1 -0
- package/dist/transform/types.js.map +1 -0
- package/dist/transform/worker-pool.d.ts +93 -0
- package/dist/transform/worker-pool.d.ts.map +1 -0
- package/dist/transform/worker-pool.js +757 -0
- package/dist/transform/worker-pool.js.map +1 -0
- package/dist/transform/workers/transform-child.d.ts +2 -0
- package/dist/transform/workers/transform-child.d.ts.map +1 -0
- package/dist/{workers → transform/workers}/transform-child.js +17 -13
- package/dist/transform/workers/transform-child.js.map +1 -0
- package/dist/transform/workers/transform-worker.d.ts +2 -0
- package/dist/transform/workers/transform-worker.d.ts.map +1 -0
- package/dist/{workers → transform/workers}/transform-worker.js +16 -13
- package/dist/transform/workers/transform-worker.js.map +1 -0
- package/dist/type-guards.d.ts +1 -0
- package/dist/type-guards.d.ts.map +1 -0
- package/dist/type-guards.js +4 -4
- package/dist/type-guards.js.map +1 -0
- package/package.json +6 -7
- package/dist/AGENTS.md +0 -152
- package/dist/http-native.js +0 -1320
- package/dist/instructions.md +0 -113
- package/dist/workers/transform-child.d.ts +0 -1
- package/dist/workers/transform-worker.d.ts +0 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
|
|
1
2
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
3
|
import { Buffer } from 'node:buffer';
|
|
3
4
|
import { randomUUID } from 'node:crypto';
|
|
4
5
|
import { setInterval } from 'node:timers';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { createUnrefTimeout } from './timer-utils.js';
|
|
6
|
+
import { config } from '../config.js';
|
|
7
|
+
import { createUnrefTimeout } from '../timer-utils.js';
|
|
8
8
|
const DEFAULT_TTL_MS = 60_000;
|
|
9
9
|
const MIN_TTL_MS = 1_000;
|
|
10
10
|
const MAX_TTL_MS = 86_400_000;
|
|
@@ -13,13 +13,14 @@ const DEFAULT_OWNER_KEY = 'default';
|
|
|
13
13
|
const DEFAULT_PAGE_SIZE = 50;
|
|
14
14
|
const CLEANUP_INTERVAL_MS = 60_000;
|
|
15
15
|
const MAX_CURSOR_LENGTH = 256;
|
|
16
|
+
const RESULT_DELIVERY_GRACE_MS = 10_000;
|
|
16
17
|
function isTerminalStatus(status) {
|
|
17
18
|
return (status === 'completed' || status === 'failed' || status === 'cancelled');
|
|
18
19
|
}
|
|
19
20
|
function normalizeTaskTtl(ttl) {
|
|
20
21
|
if (!Number.isFinite(ttl))
|
|
21
22
|
return DEFAULT_TTL_MS;
|
|
22
|
-
const rounded = Math.trunc(ttl
|
|
23
|
+
const rounded = Math.trunc(Number(ttl));
|
|
23
24
|
if (rounded < MIN_TTL_MS)
|
|
24
25
|
return MIN_TTL_MS;
|
|
25
26
|
if (rounded > MAX_TTL_MS)
|
|
@@ -28,6 +29,7 @@ function normalizeTaskTtl(ttl) {
|
|
|
28
29
|
}
|
|
29
30
|
class TaskManager {
|
|
30
31
|
tasks = new Map();
|
|
32
|
+
ownerCounts = new Map();
|
|
31
33
|
waiters = new Map();
|
|
32
34
|
constructor() {
|
|
33
35
|
this.startCleanupLoop();
|
|
@@ -40,19 +42,37 @@ class TaskManager {
|
|
|
40
42
|
}
|
|
41
43
|
removeExpiredTasks() {
|
|
42
44
|
const now = Date.now();
|
|
45
|
+
const expired = [];
|
|
43
46
|
for (const [id, task] of this.tasks) {
|
|
44
47
|
if (this.isExpired(task, now)) {
|
|
45
|
-
|
|
48
|
+
expired.push(id);
|
|
46
49
|
}
|
|
47
50
|
}
|
|
51
|
+
for (const id of expired) {
|
|
52
|
+
this.removeTask(id);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
removeTask(taskId) {
|
|
56
|
+
const task = this.tasks.get(taskId);
|
|
57
|
+
if (!task)
|
|
58
|
+
return false;
|
|
59
|
+
this.tasks.delete(taskId);
|
|
60
|
+
this.decrementOwnerCount(task.ownerKey);
|
|
61
|
+
return true;
|
|
48
62
|
}
|
|
49
63
|
countTasksForOwner(ownerKey) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
64
|
+
return this.ownerCounts.get(ownerKey) ?? 0;
|
|
65
|
+
}
|
|
66
|
+
incrementOwnerCount(ownerKey) {
|
|
67
|
+
this.ownerCounts.set(ownerKey, (this.ownerCounts.get(ownerKey) ?? 0) + 1);
|
|
68
|
+
}
|
|
69
|
+
decrementOwnerCount(ownerKey) {
|
|
70
|
+
const previousCount = this.ownerCounts.get(ownerKey) ?? 0;
|
|
71
|
+
if (previousCount > 1) {
|
|
72
|
+
this.ownerCounts.set(ownerKey, previousCount - 1);
|
|
73
|
+
return;
|
|
54
74
|
}
|
|
55
|
-
|
|
75
|
+
this.ownerCounts.delete(ownerKey);
|
|
56
76
|
}
|
|
57
77
|
assertTaskCapacity(ownerKey) {
|
|
58
78
|
const { maxPerOwner, maxTotal } = config.tasks;
|
|
@@ -81,6 +101,7 @@ class TaskManager {
|
|
|
81
101
|
_createdAtMs: now.getTime(),
|
|
82
102
|
};
|
|
83
103
|
this.tasks.set(task.taskId, task);
|
|
104
|
+
this.incrementOwnerCount(ownerKey);
|
|
84
105
|
return task;
|
|
85
106
|
}
|
|
86
107
|
getTask(taskId, ownerKey) {
|
|
@@ -90,7 +111,7 @@ class TaskManager {
|
|
|
90
111
|
if (ownerKey && task.ownerKey !== ownerKey)
|
|
91
112
|
return undefined;
|
|
92
113
|
if (this.isExpired(task)) {
|
|
93
|
-
this.
|
|
114
|
+
this.removeTask(taskId);
|
|
94
115
|
return undefined;
|
|
95
116
|
}
|
|
96
117
|
return task;
|
|
@@ -118,6 +139,7 @@ class TaskManager {
|
|
|
118
139
|
status: 'cancelled',
|
|
119
140
|
statusMessage: 'The task was cancelled by request.',
|
|
120
141
|
});
|
|
142
|
+
this.decrementOwnerCount(task.ownerKey);
|
|
121
143
|
return this.tasks.get(taskId);
|
|
122
144
|
}
|
|
123
145
|
cancelTasksByOwner(ownerKey, statusMessage = 'The task was cancelled because its owner is no longer active.') {
|
|
@@ -133,48 +155,63 @@ class TaskManager {
|
|
|
133
155
|
status: 'cancelled',
|
|
134
156
|
statusMessage,
|
|
135
157
|
});
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
cancelled.push(updated);
|
|
158
|
+
this.decrementOwnerCount(task.ownerKey);
|
|
159
|
+
cancelled.push(task);
|
|
139
160
|
}
|
|
140
161
|
return cancelled;
|
|
141
162
|
}
|
|
142
|
-
collectPage(ownerKey,
|
|
163
|
+
collectPage(ownerKey, anchorTaskId, pageSize) {
|
|
143
164
|
const page = [];
|
|
144
|
-
let
|
|
165
|
+
let collecting = anchorTaskId === null;
|
|
166
|
+
let anchorFound = anchorTaskId === null;
|
|
145
167
|
const now = Date.now();
|
|
168
|
+
const expired = [];
|
|
146
169
|
for (const task of this.tasks.values()) {
|
|
147
170
|
if (task.ownerKey !== ownerKey)
|
|
148
171
|
continue;
|
|
149
172
|
if (this.isExpired(task, now)) {
|
|
150
|
-
|
|
173
|
+
expired.push(task.taskId);
|
|
151
174
|
continue;
|
|
152
175
|
}
|
|
153
|
-
if (
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
176
|
+
if (!collecting) {
|
|
177
|
+
if (task.taskId === anchorTaskId) {
|
|
178
|
+
anchorFound = true;
|
|
179
|
+
collecting = true;
|
|
157
180
|
}
|
|
181
|
+
continue;
|
|
158
182
|
}
|
|
159
|
-
|
|
183
|
+
page.push(task);
|
|
184
|
+
if (page.length > pageSize)
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
for (const id of expired) {
|
|
188
|
+
this.removeTask(id);
|
|
189
|
+
}
|
|
190
|
+
// Anchor task expired between pages; return empty list so callers stop
|
|
191
|
+
// pagination cleanly. Silently falling back to page 0 risks infinite loops
|
|
192
|
+
// for automated clients that always follow nextCursor.
|
|
193
|
+
if (!anchorFound) {
|
|
194
|
+
return [];
|
|
160
195
|
}
|
|
161
196
|
return page;
|
|
162
197
|
}
|
|
163
198
|
listTasks(options) {
|
|
164
199
|
const { ownerKey, cursor, limit } = options;
|
|
165
200
|
const pageSize = limit && limit > 0 ? limit : DEFAULT_PAGE_SIZE;
|
|
166
|
-
|
|
167
|
-
if (
|
|
168
|
-
|
|
201
|
+
let anchorTaskId = null;
|
|
202
|
+
if (cursor !== undefined) {
|
|
203
|
+
const decoded = this.decodeCursor(cursor);
|
|
204
|
+
if (decoded === null) {
|
|
205
|
+
throw new McpError(ErrorCode.InvalidParams, 'Invalid cursor');
|
|
206
|
+
}
|
|
207
|
+
({ anchorTaskId } = decoded);
|
|
169
208
|
}
|
|
170
|
-
const page = this.collectPage(ownerKey,
|
|
209
|
+
const page = this.collectPage(ownerKey, anchorTaskId, pageSize);
|
|
171
210
|
const hasMore = page.length > pageSize;
|
|
172
211
|
if (hasMore) {
|
|
173
212
|
page.pop();
|
|
174
213
|
}
|
|
175
|
-
const nextCursor = hasMore
|
|
176
|
-
? this.encodeCursor(startIndex + page.length)
|
|
177
|
-
: undefined;
|
|
214
|
+
const nextCursor = this.resolveNextCursor(page, hasMore);
|
|
178
215
|
return nextCursor ? { tasks: page, nextCursor } : { tasks: page };
|
|
179
216
|
}
|
|
180
217
|
async waitForTerminalTask(taskId, ownerKey, signal) {
|
|
@@ -184,17 +221,14 @@ class TaskManager {
|
|
|
184
221
|
if (ownerKey && task.ownerKey !== ownerKey)
|
|
185
222
|
return undefined;
|
|
186
223
|
if (this.isExpired(task)) {
|
|
187
|
-
this.
|
|
224
|
+
this.removeTask(taskId);
|
|
188
225
|
return undefined;
|
|
189
226
|
}
|
|
190
227
|
if (isTerminalStatus(task.status))
|
|
191
228
|
return task;
|
|
229
|
+
// isExpired() above guarantees task.ttl has not elapsed; compute deadlineMs
|
|
230
|
+
// for the promise-based timeout below.
|
|
192
231
|
const deadlineMs = task._createdAtMs + task.ttl;
|
|
193
|
-
const now = Date.now();
|
|
194
|
-
if (deadlineMs <= now) {
|
|
195
|
-
this.tasks.delete(taskId);
|
|
196
|
-
return undefined;
|
|
197
|
-
}
|
|
198
232
|
return new Promise((resolve, reject) => {
|
|
199
233
|
const resolveInContext = AsyncLocalStorage.bind((value) => {
|
|
200
234
|
resolve(value);
|
|
@@ -267,7 +301,7 @@ class TaskManager {
|
|
|
267
301
|
settleOnce(() => {
|
|
268
302
|
cleanup();
|
|
269
303
|
removeWaiter();
|
|
270
|
-
this.
|
|
304
|
+
this.removeTask(taskId);
|
|
271
305
|
resolveInContext(undefined);
|
|
272
306
|
});
|
|
273
307
|
})
|
|
@@ -287,25 +321,42 @@ class TaskManager {
|
|
|
287
321
|
isExpired(task, now = Date.now()) {
|
|
288
322
|
return now - task._createdAtMs > task.ttl;
|
|
289
323
|
}
|
|
290
|
-
|
|
291
|
-
|
|
324
|
+
shrinkTtlAfterDelivery(taskId) {
|
|
325
|
+
const task = this.tasks.get(taskId);
|
|
326
|
+
if (!task)
|
|
327
|
+
return;
|
|
328
|
+
if (!isTerminalStatus(task.status))
|
|
329
|
+
return;
|
|
330
|
+
const elapsed = Date.now() - task._createdAtMs;
|
|
331
|
+
const newTtl = elapsed + RESULT_DELIVERY_GRACE_MS;
|
|
332
|
+
if (newTtl < task.ttl) {
|
|
333
|
+
task.ttl = newTtl;
|
|
334
|
+
task.lastUpdatedAt = new Date().toISOString();
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
encodeCursor(taskId) {
|
|
338
|
+
return Buffer.from(taskId, 'utf8').toString('base64url');
|
|
292
339
|
}
|
|
293
340
|
decodeCursor(cursor) {
|
|
294
341
|
try {
|
|
295
342
|
if (!isValidBase64UrlCursor(cursor))
|
|
296
343
|
return null;
|
|
297
344
|
const decoded = Buffer.from(cursor, 'base64url').toString('utf8');
|
|
298
|
-
|
|
345
|
+
// Basic sanity: non-empty and plausible taskId length (UUIDs are 36 chars)
|
|
346
|
+
if (!decoded || decoded.length > 128)
|
|
299
347
|
return null;
|
|
300
|
-
|
|
301
|
-
if (!Number.isFinite(value) || value < 0)
|
|
302
|
-
return null;
|
|
303
|
-
return value;
|
|
348
|
+
return { anchorTaskId: decoded };
|
|
304
349
|
}
|
|
305
350
|
catch {
|
|
306
351
|
return null;
|
|
307
352
|
}
|
|
308
353
|
}
|
|
354
|
+
resolveNextCursor(page, hasMore) {
|
|
355
|
+
if (!hasMore)
|
|
356
|
+
return undefined;
|
|
357
|
+
const lastTask = page.at(-1);
|
|
358
|
+
return lastTask ? this.encodeCursor(lastTask.taskId) : undefined;
|
|
359
|
+
}
|
|
309
360
|
}
|
|
310
361
|
function isValidBase64UrlCursor(cursor) {
|
|
311
362
|
if (!cursor)
|
|
@@ -325,3 +376,4 @@ function isValidBase64UrlCursor(cursor) {
|
|
|
325
376
|
return cursor.length % 4 !== 1;
|
|
326
377
|
}
|
|
327
378
|
export const taskManager = new TaskManager();
|
|
379
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/tasks/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ServerResult } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import type { ProgressNotification } from '../tools.js';
|
|
3
|
+
export interface HandlerExtra {
|
|
4
|
+
sessionId?: string;
|
|
5
|
+
authInfo?: {
|
|
6
|
+
clientId?: string;
|
|
7
|
+
token?: string;
|
|
8
|
+
};
|
|
9
|
+
signal?: AbortSignal;
|
|
10
|
+
requestId?: string | number;
|
|
11
|
+
sendNotification?: (notification: ProgressNotification) => Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export interface ToolCallContext {
|
|
14
|
+
ownerKey: string;
|
|
15
|
+
signal?: AbortSignal;
|
|
16
|
+
requestId?: string | number;
|
|
17
|
+
sendNotification?: (notification: ProgressNotification) => Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
/** Strip keys whose value is `undefined`, returning an object with only the
|
|
20
|
+
* present keys. Return type correctly omits the `undefined` union so the result
|
|
21
|
+
* is compatible with `exactOptionalPropertyTypes`. */
|
|
22
|
+
type Compacted<T extends object> = {
|
|
23
|
+
[K in keyof T as Exclude<T[K], undefined> extends never ? never : K]?: Exclude<T[K], undefined>;
|
|
24
|
+
};
|
|
25
|
+
export declare function compact<T extends object>(obj: T): Compacted<T>;
|
|
26
|
+
export declare function parseHandlerExtra(extra: unknown): HandlerExtra | undefined;
|
|
27
|
+
export declare function resolveTaskOwnerKey(extra?: HandlerExtra): string;
|
|
28
|
+
export declare function resolveToolCallContext(extra?: HandlerExtra): ToolCallContext;
|
|
29
|
+
export declare function isServerResult(value: unknown): value is ServerResult;
|
|
30
|
+
export declare function tryReadToolStructuredError(value: unknown): string | undefined;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=owner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner.d.ts","sourceRoot":"","sources":["../../src/tasks/owner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAIvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAOxD,MAAM,WAAW,YAAY;IAC3B,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;CAC1E;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,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;CAC1E;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,CAyB1E;AAED,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,EAAE,YAAY,GAAG,MAAM,CAMhE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,CAAC,EAAE,YAAY,GAAG,eAAe,CAO5E;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAIpE;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAkB7E"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { isObject } from '../type-guards.js';
|
|
3
|
+
export function compact(obj) {
|
|
4
|
+
const result = {};
|
|
5
|
+
for (const key of Object.keys(obj)) {
|
|
6
|
+
if (obj[key] !== undefined) {
|
|
7
|
+
result[key] = obj[key];
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
return result;
|
|
11
|
+
}
|
|
12
|
+
function normalizeSendNotification(sendNotification) {
|
|
13
|
+
if (typeof sendNotification !== 'function')
|
|
14
|
+
return undefined;
|
|
15
|
+
const notify = sendNotification;
|
|
16
|
+
return async (notification) => {
|
|
17
|
+
await Promise.resolve(notify(notification));
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function normalizeAuthInfo(authInfo) {
|
|
21
|
+
if (!isObject(authInfo))
|
|
22
|
+
return undefined;
|
|
23
|
+
const { clientId, token } = authInfo;
|
|
24
|
+
const normalized = {};
|
|
25
|
+
if (typeof clientId === 'string')
|
|
26
|
+
normalized.clientId = clientId;
|
|
27
|
+
if (typeof token === 'string')
|
|
28
|
+
normalized.token = token;
|
|
29
|
+
return normalized.clientId || normalized.token ? normalized : undefined;
|
|
30
|
+
}
|
|
31
|
+
export function parseHandlerExtra(extra) {
|
|
32
|
+
if (!isObject(extra))
|
|
33
|
+
return undefined;
|
|
34
|
+
const parsed = {};
|
|
35
|
+
const { sessionId, authInfo, signal, requestId, sendNotification } = extra;
|
|
36
|
+
if (typeof sessionId === 'string')
|
|
37
|
+
parsed.sessionId = sessionId;
|
|
38
|
+
const normalizedAuthInfo = normalizeAuthInfo(authInfo);
|
|
39
|
+
if (normalizedAuthInfo) {
|
|
40
|
+
parsed.authInfo = normalizedAuthInfo;
|
|
41
|
+
}
|
|
42
|
+
if (signal instanceof AbortSignal)
|
|
43
|
+
parsed.signal = signal;
|
|
44
|
+
if (typeof requestId === 'string' || typeof requestId === 'number') {
|
|
45
|
+
parsed.requestId = requestId;
|
|
46
|
+
}
|
|
47
|
+
const normalizedSendNotification = normalizeSendNotification(sendNotification);
|
|
48
|
+
if (normalizedSendNotification) {
|
|
49
|
+
parsed.sendNotification = normalizedSendNotification;
|
|
50
|
+
}
|
|
51
|
+
return parsed;
|
|
52
|
+
}
|
|
53
|
+
export function resolveTaskOwnerKey(extra) {
|
|
54
|
+
if (extra?.sessionId)
|
|
55
|
+
return `session:${extra.sessionId}`;
|
|
56
|
+
if (extra?.authInfo?.clientId)
|
|
57
|
+
return `client:${extra.authInfo.clientId}`;
|
|
58
|
+
if (extra?.authInfo?.token)
|
|
59
|
+
return `token:${createHash('sha256').update(extra.authInfo.token).digest('hex')}`;
|
|
60
|
+
return 'default';
|
|
61
|
+
}
|
|
62
|
+
export function resolveToolCallContext(extra) {
|
|
63
|
+
return compact({
|
|
64
|
+
ownerKey: resolveTaskOwnerKey(extra),
|
|
65
|
+
signal: extra?.signal,
|
|
66
|
+
requestId: extra?.requestId,
|
|
67
|
+
sendNotification: extra?.sendNotification,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
export function isServerResult(value) {
|
|
71
|
+
return (isObject(value) && Array.isArray(value.content));
|
|
72
|
+
}
|
|
73
|
+
export function tryReadToolStructuredError(value) {
|
|
74
|
+
if (!isObject(value))
|
|
75
|
+
return undefined;
|
|
76
|
+
const record = value;
|
|
77
|
+
if (!Array.isArray(record.content) || record.content.length === 0)
|
|
78
|
+
return undefined;
|
|
79
|
+
const firstBlock = record.content[0];
|
|
80
|
+
if (!isObject(firstBlock) ||
|
|
81
|
+
firstBlock['type'] !== 'text' ||
|
|
82
|
+
typeof firstBlock['text'] !== 'string')
|
|
83
|
+
return undefined;
|
|
84
|
+
try {
|
|
85
|
+
const parsed = JSON.parse(firstBlock['text']);
|
|
86
|
+
return typeof parsed.error === 'string' ? parsed.error : undefined;
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=owner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner.js","sourceRoot":"","sources":["../../src/tasks/owner.ts"],"names":[],"mappings":"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"}
|
package/dist/timer-utils.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timer-utils.d.ts","sourceRoot":"","sources":["../src/timer-utils.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAsBD,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,CAAC,GACP,kBAAkB,CAAC,CAAC,CAAC,CAcvB"}
|
package/dist/timer-utils.js
CHANGED
|
@@ -3,17 +3,20 @@ import { isError } from './type-guards.js';
|
|
|
3
3
|
function isAbortError(error) {
|
|
4
4
|
return isError(error) && error.name === 'AbortError';
|
|
5
5
|
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const promise = setTimeoutPromise(timeoutMs, value, {
|
|
6
|
+
function createAbortSafeTimeoutPromise(timeoutMs, value, signal) {
|
|
7
|
+
return setTimeoutPromise(timeoutMs, value, {
|
|
9
8
|
ref: false,
|
|
10
|
-
signal
|
|
9
|
+
signal,
|
|
11
10
|
}).catch((err) => {
|
|
12
11
|
if (isAbortError(err)) {
|
|
13
12
|
return new Promise(() => { });
|
|
14
13
|
}
|
|
15
14
|
throw err;
|
|
16
15
|
});
|
|
16
|
+
}
|
|
17
|
+
export function createUnrefTimeout(timeoutMs, value) {
|
|
18
|
+
const controller = new AbortController();
|
|
19
|
+
const promise = createAbortSafeTimeoutPromise(timeoutMs, value, controller.signal);
|
|
17
20
|
return {
|
|
18
21
|
promise,
|
|
19
22
|
cancel: () => {
|
|
@@ -21,3 +24,4 @@ export function createUnrefTimeout(timeoutMs, value) {
|
|
|
21
24
|
},
|
|
22
25
|
};
|
|
23
26
|
}
|
|
27
|
+
//# sourceMappingURL=timer-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timer-utils.js","sourceRoot":"","sources":["../src/timer-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEvE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAO3C,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;AACvD,CAAC;AAED,SAAS,6BAA6B,CACpC,SAAiB,EACjB,KAAQ,EACR,MAAmB;IAEnB,OAAO,iBAAiB,CAAC,SAAS,EAAE,KAAK,EAAE;QACzC,GAAG,EAAE,KAAK;QACV,MAAM;KACP,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QACxB,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,OAAO,CAAI,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,SAAiB,EACjB,KAAQ;IAER,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,6BAA6B,CAC3C,SAAS,EACT,KAAK,EACL,UAAU,CAAC,MAAM,CAClB,CAAC;IAEF,OAAO;QACL,OAAO;QACP,MAAM,EAAE,GAAG,EAAE;YACX,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
type ToolErrorResponse = CallToolResult & {
|
|
3
|
+
isError: true;
|
|
4
|
+
};
|
|
5
|
+
export declare function createToolErrorResponse(message: string, url: string, extra?: {
|
|
6
|
+
code?: string;
|
|
7
|
+
statusCode?: number;
|
|
8
|
+
details?: Record<string, unknown>;
|
|
9
|
+
}): ToolErrorResponse;
|
|
10
|
+
export declare function handleToolError(error: unknown, url: string, fallbackMessage?: string): ToolErrorResponse;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=tool-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-errors.d.ts","sourceRoot":"","sources":["../src/tool-errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAQzE,KAAK,iBAAiB,GAAG,cAAc,GAAG;IACxC,OAAO,EAAE,IAAI,CAAC;CACf,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE;IACN,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,GACA,iBAAiB,CAenB;AAoCD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,MAAM,EACX,eAAe,SAAqB,GACnC,iBAAiB,CAWnB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { FetchError, isSystemError } from './errors.js';
|
|
2
|
+
export function createToolErrorResponse(message, url, extra) {
|
|
3
|
+
const errorContent = {
|
|
4
|
+
error: message,
|
|
5
|
+
...(extra?.code ? { code: extra.code } : {}),
|
|
6
|
+
url,
|
|
7
|
+
...(extra?.statusCode !== undefined
|
|
8
|
+
? { statusCode: extra.statusCode }
|
|
9
|
+
: {}),
|
|
10
|
+
...(extra?.details ? { details: extra.details } : {}),
|
|
11
|
+
};
|
|
12
|
+
return {
|
|
13
|
+
content: [{ type: 'text', text: JSON.stringify(errorContent) }],
|
|
14
|
+
isError: true,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function isValidationError(error) {
|
|
18
|
+
return (error instanceof Error &&
|
|
19
|
+
isSystemError(error) &&
|
|
20
|
+
error.code === 'VALIDATION_ERROR');
|
|
21
|
+
}
|
|
22
|
+
function isHandledToolError(error) {
|
|
23
|
+
return error instanceof FetchError || isValidationError(error);
|
|
24
|
+
}
|
|
25
|
+
function resolveToolErrorMessage(error, fallbackMessage) {
|
|
26
|
+
if (isHandledToolError(error)) {
|
|
27
|
+
return error.message;
|
|
28
|
+
}
|
|
29
|
+
if (error instanceof Error) {
|
|
30
|
+
return `${fallbackMessage}: ${error.message}`;
|
|
31
|
+
}
|
|
32
|
+
return `${fallbackMessage}: Unknown error`;
|
|
33
|
+
}
|
|
34
|
+
function resolveToolErrorCode(error) {
|
|
35
|
+
if (error instanceof FetchError)
|
|
36
|
+
return error.code;
|
|
37
|
+
if (isValidationError(error))
|
|
38
|
+
return 'VALIDATION_ERROR';
|
|
39
|
+
if (error instanceof Error && error.name === 'AbortError')
|
|
40
|
+
return 'ABORTED';
|
|
41
|
+
return 'FETCH_ERROR';
|
|
42
|
+
}
|
|
43
|
+
export function handleToolError(error, url, fallbackMessage = 'Operation failed') {
|
|
44
|
+
const message = resolveToolErrorMessage(error, fallbackMessage);
|
|
45
|
+
const code = resolveToolErrorCode(error);
|
|
46
|
+
if (error instanceof FetchError) {
|
|
47
|
+
return createToolErrorResponse(message, url, {
|
|
48
|
+
code,
|
|
49
|
+
statusCode: error.statusCode,
|
|
50
|
+
details: error.details,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
return createToolErrorResponse(message, url, { code });
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=tool-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-errors.js","sourceRoot":"","sources":["../src/tool-errors.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAUxD,MAAM,UAAU,uBAAuB,CACrC,OAAe,EACf,GAAW,EACX,KAIC;IAED,MAAM,YAAY,GAA4B;QAC5C,KAAK,EAAE,OAAO;QACd,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,GAAG;QACH,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,SAAS;YACjC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE;YAClC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtD,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/D,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,CACL,KAAK,YAAY,KAAK;QACtB,aAAa,CAAC,KAAK,CAAC;QACpB,KAAK,CAAC,IAAI,KAAK,kBAAkB,CAClC,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAc;IAEd,OAAO,KAAK,YAAY,UAAU,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAAc,EACd,eAAuB;IAEvB,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,GAAG,eAAe,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;IAChD,CAAC;IACD,OAAO,GAAG,eAAe,iBAAiB,CAAC;AAC7C,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,KAAK,YAAY,UAAU;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IACnD,IAAI,iBAAiB,CAAC,KAAK,CAAC;QAAE,OAAO,kBAAkB,CAAC;IACxD,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,SAAS,CAAC;IAC5E,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAc,EACd,GAAW,EACX,eAAe,GAAG,kBAAkB;IAEpC,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,OAAO,uBAAuB,CAAC,OAAO,EAAE,GAAG,EAAE;YAC3C,IAAI;YACJ,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,uBAAuB,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { MarkdownTransformResult } from './transform/types.js';
|
|
2
|
+
type JsonRecord = Record<string, unknown>;
|
|
3
|
+
export declare function readUnknown(obj: unknown, key: string): unknown;
|
|
4
|
+
export declare function readString(obj: unknown, key: string): string | undefined;
|
|
5
|
+
export declare function readNestedRecord(obj: unknown, keys: readonly string[]): JsonRecord | undefined;
|
|
6
|
+
export declare function withSignal(signal?: AbortSignal): {
|
|
7
|
+
signal: AbortSignal;
|
|
8
|
+
} | Record<string, never>;
|
|
9
|
+
export declare const TRUNCATION_MARKER = "...[truncated]";
|
|
10
|
+
export interface InlineContentResult {
|
|
11
|
+
content?: string;
|
|
12
|
+
contentSize: number;
|
|
13
|
+
truncated?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function appendTruncationMarker(content: string, marker: string): string;
|
|
16
|
+
interface FetchPipelineOptions<T> {
|
|
17
|
+
url: string;
|
|
18
|
+
cacheNamespace: string;
|
|
19
|
+
signal?: AbortSignal;
|
|
20
|
+
cacheVary?: Record<string, unknown> | string;
|
|
21
|
+
forceRefresh?: boolean;
|
|
22
|
+
transform: (input: {
|
|
23
|
+
buffer: Uint8Array;
|
|
24
|
+
encoding: string;
|
|
25
|
+
truncated?: boolean;
|
|
26
|
+
}, url: string) => T | Promise<T>;
|
|
27
|
+
serialize?: (result: T) => string;
|
|
28
|
+
deserialize?: (cached: string) => T | undefined;
|
|
29
|
+
}
|
|
30
|
+
export interface PipelineResult<T> {
|
|
31
|
+
data: T;
|
|
32
|
+
fromCache: boolean;
|
|
33
|
+
url: string;
|
|
34
|
+
originalUrl?: string;
|
|
35
|
+
finalUrl?: string;
|
|
36
|
+
fetchedAt: string;
|
|
37
|
+
cacheKey?: string | null;
|
|
38
|
+
}
|
|
39
|
+
export declare function executeFetchPipeline<T>(options: FetchPipelineOptions<T>): Promise<PipelineResult<T>>;
|
|
40
|
+
export type MarkdownPipelineResult = MarkdownTransformResult & {
|
|
41
|
+
readonly content: string;
|
|
42
|
+
};
|
|
43
|
+
export declare function parseCachedMarkdownResult(cached: string): MarkdownPipelineResult | undefined;
|
|
44
|
+
export declare const markdownTransform: (input: {
|
|
45
|
+
buffer: Uint8Array;
|
|
46
|
+
encoding: string;
|
|
47
|
+
truncated?: boolean;
|
|
48
|
+
}, url: string, signal?: AbortSignal, skipNoiseRemoval?: boolean) => Promise<MarkdownPipelineResult>;
|
|
49
|
+
export declare function serializeMarkdownResult(result: MarkdownPipelineResult): string;
|
|
50
|
+
interface SharedFetchOptions {
|
|
51
|
+
readonly url: string;
|
|
52
|
+
readonly signal?: AbortSignal;
|
|
53
|
+
readonly cacheVary?: Record<string, unknown> | string;
|
|
54
|
+
readonly forceRefresh?: boolean;
|
|
55
|
+
readonly maxInlineChars?: number;
|
|
56
|
+
readonly transform: (input: {
|
|
57
|
+
buffer: Uint8Array;
|
|
58
|
+
encoding: string;
|
|
59
|
+
truncated?: boolean;
|
|
60
|
+
}, normalizedUrl: string) => MarkdownPipelineResult | Promise<MarkdownPipelineResult>;
|
|
61
|
+
readonly serialize?: (result: MarkdownPipelineResult) => string;
|
|
62
|
+
readonly deserialize?: (cached: string) => MarkdownPipelineResult | undefined;
|
|
63
|
+
}
|
|
64
|
+
interface SharedFetchDeps {
|
|
65
|
+
readonly executeFetchPipeline?: typeof executeFetchPipeline;
|
|
66
|
+
}
|
|
67
|
+
export declare function performSharedFetch(options: SharedFetchOptions, deps?: SharedFetchDeps): Promise<{
|
|
68
|
+
pipeline: PipelineResult<MarkdownPipelineResult>;
|
|
69
|
+
inlineResult: InlineContentResult;
|
|
70
|
+
}>;
|
|
71
|
+
export {};
|
|
72
|
+
//# sourceMappingURL=tool-pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-pipeline.d.ts","sourceRoot":"","sources":["../src/tool-pipeline.ts"],"names":[],"mappings":"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"}
|