toolhome 0.6.6 → 0.6.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/README.md +27 -0
- package/README.zh.md +27 -0
- package/dist/server/app.d.ts.map +1 -1
- package/dist/server/app.js +1 -1
- package/dist/server/app.js.map +1 -1
- package/dist/server/cli/main.js +7 -0
- package/dist/server/cli/main.js.map +1 -1
- package/dist/server/config.d.ts +12 -0
- package/dist/server/config.d.ts.map +1 -1
- package/dist/server/config.js +4 -0
- package/dist/server/config.js.map +1 -1
- package/dist/server/data-plane/compact-protocol.d.ts +111 -0
- package/dist/server/data-plane/compact-protocol.d.ts.map +1 -0
- package/dist/server/data-plane/compact-protocol.js +416 -0
- package/dist/server/data-plane/compact-protocol.js.map +1 -0
- package/dist/server/data-plane/compact-state.d.ts +28 -0
- package/dist/server/data-plane/compact-state.d.ts.map +1 -0
- package/dist/server/data-plane/compact-state.js +97 -0
- package/dist/server/data-plane/compact-state.js.map +1 -0
- package/dist/server/data-plane/data-plane.d.ts.map +1 -1
- package/dist/server/data-plane/data-plane.js +4 -0
- package/dist/server/data-plane/data-plane.js.map +1 -1
- package/dist/server/data-plane/gateway-server.d.ts +7 -1
- package/dist/server/data-plane/gateway-server.d.ts.map +1 -1
- package/dist/server/data-plane/gateway-server.js +424 -38
- package/dist/server/data-plane/gateway-server.js.map +1 -1
- package/dist/server/data-plane/registry.d.ts +1 -0
- package/dist/server/data-plane/registry.d.ts.map +1 -1
- package/dist/server/data-plane/registry.js +3 -0
- package/dist/server/data-plane/registry.js.map +1 -1
- package/dist/server/data-plane/tool-catalog.d.ts +71 -0
- package/dist/server/data-plane/tool-catalog.d.ts.map +1 -0
- package/dist/server/data-plane/tool-catalog.js +667 -0
- package/dist/server/data-plane/tool-catalog.js.map +1 -0
- package/dist/server/node/local-gateway.d.ts +20 -0
- package/dist/server/node/local-gateway.d.ts.map +1 -1
- package/dist/server/node/local-gateway.js +85 -1
- package/dist/server/node/local-gateway.js.map +1 -1
- package/dist/server/upstream/adapter.d.ts +39 -2
- package/dist/server/upstream/adapter.d.ts.map +1 -1
- package/dist/server/upstream/adapter.js +37 -6
- package/dist/server/upstream/adapter.js.map +1 -1
- package/dist/server/upstream/manager.d.ts +9 -2
- package/dist/server/upstream/manager.d.ts.map +1 -1
- package/dist/server/upstream/manager.js +24 -4
- package/dist/server/upstream/manager.js.map +1 -1
- package/package.json +1 -1
- package/skills/toolhome/SKILL.md +23 -0
- package/skills/toolhome/references/cli-reference.md +19 -0
- package/skills/toolhome/references/deployment.md +3 -0
- package/skills/toolhome/references/troubleshooting.md +18 -0
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire contract for the compact discovery surface: the two fixed tools
|
|
3
|
+
* (`search`/`exec`), argument validation, budgets and the shared machine
|
|
4
|
+
* readable error shape. Everything here is deterministic and makes no network
|
|
5
|
+
* or subprocess calls.
|
|
6
|
+
*/
|
|
7
|
+
export const COMPACT_PROTOCOL_VERSION = '1';
|
|
8
|
+
export const DEFAULT_RANK_ALGORITHM = 'field-score';
|
|
9
|
+
export const RANK_ALGORITHM = DEFAULT_RANK_ALGORITHM;
|
|
10
|
+
/** Output budgets, measured on the complete MCP result package. */
|
|
11
|
+
export const COMPACT_BUDGETS = {
|
|
12
|
+
/** Fixed search+exec description and schema, estimated tokens. */
|
|
13
|
+
fixedSchemaTokens: 2_000,
|
|
14
|
+
serversBytes: 8 * 1_024,
|
|
15
|
+
findSummaryBytes: 8 * 1_024,
|
|
16
|
+
findDefinitionBytes: 16 * 1_024,
|
|
17
|
+
describeBytes: 16 * 1_024,
|
|
18
|
+
/** Error results fit the smallest discovery budget even with oversized input. */
|
|
19
|
+
errorBytes: 8 * 1_024,
|
|
20
|
+
};
|
|
21
|
+
function defaultCallEffect(code) {
|
|
22
|
+
// Discovery-side failures reject before any upstream invocation is submitted.
|
|
23
|
+
// Continuation/upstream failures cannot prove the original call did not run.
|
|
24
|
+
return code === 'continuation_rejected' || code === 'upstream_failure'
|
|
25
|
+
? 'may_have_run'
|
|
26
|
+
: 'not_started';
|
|
27
|
+
}
|
|
28
|
+
function defaultNextStep(code) {
|
|
29
|
+
switch (code) {
|
|
30
|
+
case 'invalid_arguments':
|
|
31
|
+
return { action: 'fix_arguments', guidance: 'Correct the arguments and retry.' };
|
|
32
|
+
case 'unknown_server':
|
|
33
|
+
return { action: 'retry_search', arguments: { action: 'servers' } };
|
|
34
|
+
case 'unknown_tool':
|
|
35
|
+
return { action: 'retry_search', arguments: { action: 'find' } };
|
|
36
|
+
case 'invalid_cursor':
|
|
37
|
+
return { action: 'retry_search', arguments: { action: 'servers' } };
|
|
38
|
+
case 'catalog_unavailable':
|
|
39
|
+
return { action: 'refresh_catalog' };
|
|
40
|
+
case 'definition_changed':
|
|
41
|
+
return { action: 'describe', guidance: 'Re-fetch the current definition before executing.' };
|
|
42
|
+
case 'definition_too_large':
|
|
43
|
+
return {
|
|
44
|
+
action: 'use_full',
|
|
45
|
+
guidance: 'Use the original full or individual endpoint for this tool.',
|
|
46
|
+
};
|
|
47
|
+
case 'individual_endpoint_required':
|
|
48
|
+
return {
|
|
49
|
+
action: 'use_individual',
|
|
50
|
+
guidance: 'Use the individual /mcp/{server} endpoint for exact upstream semantics.',
|
|
51
|
+
};
|
|
52
|
+
case 'upstream_failure':
|
|
53
|
+
return { action: 'check_status', guidance: 'Check the call status before retrying.' };
|
|
54
|
+
case 'continuation_rejected':
|
|
55
|
+
return { action: 'check_status' };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function compactData(code, message, options) {
|
|
59
|
+
const data = {
|
|
60
|
+
kind: 'error',
|
|
61
|
+
code,
|
|
62
|
+
message,
|
|
63
|
+
source: options.source ?? 'gateway',
|
|
64
|
+
callEffect: options.callEffect ?? defaultCallEffect(code),
|
|
65
|
+
nextStep: options.nextStep ?? defaultNextStep(code),
|
|
66
|
+
};
|
|
67
|
+
if (options.retryable !== undefined)
|
|
68
|
+
data.retryable = options.retryable;
|
|
69
|
+
if (options.details !== undefined)
|
|
70
|
+
data.details = options.details;
|
|
71
|
+
return data;
|
|
72
|
+
}
|
|
73
|
+
export class CompactError extends Error {
|
|
74
|
+
options;
|
|
75
|
+
code;
|
|
76
|
+
constructor(code, message, options = {}) {
|
|
77
|
+
super(message);
|
|
78
|
+
this.options = options;
|
|
79
|
+
this.name = 'CompactError';
|
|
80
|
+
this.code = code;
|
|
81
|
+
}
|
|
82
|
+
get source() {
|
|
83
|
+
return this.options.source ?? 'gateway';
|
|
84
|
+
}
|
|
85
|
+
get callEffect() {
|
|
86
|
+
return this.options.callEffect ?? defaultCallEffect(this.code);
|
|
87
|
+
}
|
|
88
|
+
get nextStep() {
|
|
89
|
+
return this.options.nextStep ?? defaultNextStep(this.code);
|
|
90
|
+
}
|
|
91
|
+
toData() {
|
|
92
|
+
return compactData(this.code, this.message, this.options);
|
|
93
|
+
}
|
|
94
|
+
static isInstance(value) {
|
|
95
|
+
return value instanceof CompactError;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
export function invalidArguments(message, details) {
|
|
99
|
+
return new CompactError('invalid_arguments', message, { details });
|
|
100
|
+
}
|
|
101
|
+
export function unknownServerError(server) {
|
|
102
|
+
return new CompactError('unknown_server', `Unknown server: ${server}`, {
|
|
103
|
+
details: { server },
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
export function unknownToolError(tool) {
|
|
107
|
+
// Never leak whether a hidden/disabled/foreign tool exists.
|
|
108
|
+
return new CompactError('unknown_tool', `Unknown tool: ${tool}`, { details: { tool } });
|
|
109
|
+
}
|
|
110
|
+
export function invalidCursorError() {
|
|
111
|
+
return new CompactError('invalid_cursor', 'The catalog cursor is invalid or stale');
|
|
112
|
+
}
|
|
113
|
+
export function definitionTooLargeError(details) {
|
|
114
|
+
return new CompactError('definition_too_large', 'Tool definition exceeds the response budget', {
|
|
115
|
+
details,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
// ── Results ───────────────────────────────────────────────────────────────
|
|
119
|
+
export function jsonToolResult(payload) {
|
|
120
|
+
return {
|
|
121
|
+
content: [{ type: 'text', text: JSON.stringify(payload) }],
|
|
122
|
+
structuredContent: payload,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function errorResult(data) {
|
|
126
|
+
return {
|
|
127
|
+
content: [{ type: 'text', text: JSON.stringify(data) }],
|
|
128
|
+
structuredContent: data,
|
|
129
|
+
isError: true,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function clampText(value, limit) {
|
|
133
|
+
const points = Array.from(value);
|
|
134
|
+
return points.length <= limit ? value : points.slice(0, limit).join('');
|
|
135
|
+
}
|
|
136
|
+
function leanNextStep(step) {
|
|
137
|
+
return {
|
|
138
|
+
action: step.action,
|
|
139
|
+
...(step.guidance === undefined ? {} : { guidance: clampText(step.guidance, 200) }),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Errors share the discovery budgets: oversized tool ids, messages or details
|
|
144
|
+
* are dropped/clamped so the complete package stays inside `errorBytes`.
|
|
145
|
+
*/
|
|
146
|
+
export function compactErrorResult(error) {
|
|
147
|
+
const data = error.toData();
|
|
148
|
+
const full = errorResult(data);
|
|
149
|
+
if (resultByteLength(full) <= COMPACT_BUDGETS.errorBytes)
|
|
150
|
+
return full;
|
|
151
|
+
const lean = {
|
|
152
|
+
kind: 'error',
|
|
153
|
+
code: data.code,
|
|
154
|
+
message: clampText(data.message, 300),
|
|
155
|
+
source: data.source,
|
|
156
|
+
callEffect: data.callEffect,
|
|
157
|
+
nextStep: leanNextStep(data.nextStep),
|
|
158
|
+
...(data.retryable === undefined ? {} : { retryable: data.retryable }),
|
|
159
|
+
};
|
|
160
|
+
const leanResult = errorResult(lean);
|
|
161
|
+
if (resultByteLength(leanResult) <= COMPACT_BUDGETS.errorBytes)
|
|
162
|
+
return leanResult;
|
|
163
|
+
return errorResult({
|
|
164
|
+
kind: 'error',
|
|
165
|
+
code: data.code,
|
|
166
|
+
message: clampText(data.message, 120),
|
|
167
|
+
source: data.source,
|
|
168
|
+
callEffect: data.callEffect,
|
|
169
|
+
nextStep: { action: data.nextStep.action },
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
/** Byte length of the complete MCP result package (text + structuredContent). */
|
|
173
|
+
export function resultByteLength(result) {
|
|
174
|
+
return Buffer.byteLength(JSON.stringify(result), 'utf8');
|
|
175
|
+
}
|
|
176
|
+
/** Deterministic token estimate used for the fixed-schema budget gate. */
|
|
177
|
+
export function estimateTokens(value) {
|
|
178
|
+
return Math.ceil(Buffer.byteLength(JSON.stringify(value), 'utf8') / 4);
|
|
179
|
+
}
|
|
180
|
+
// ── Tool schemas ──────────────────────────────────────────────────────────
|
|
181
|
+
export const SEARCH_TOOL_NAME = 'search';
|
|
182
|
+
export const EXEC_TOOL_NAME = 'exec';
|
|
183
|
+
export const SEARCH_ACTIONS = ['servers', 'find', 'describe'];
|
|
184
|
+
export const SEARCH_DETAILS = ['summary', 'definition'];
|
|
185
|
+
const parameterSchema = { type: 'object', additionalProperties: true };
|
|
186
|
+
/**
|
|
187
|
+
* Fixed `search` schema. `additionalProperties: false` keeps per-action
|
|
188
|
+
* combinations strict; the handler validates which fields each action accepts.
|
|
189
|
+
*/
|
|
190
|
+
export const searchInputSchema = {
|
|
191
|
+
type: 'object',
|
|
192
|
+
properties: {
|
|
193
|
+
action: {
|
|
194
|
+
type: 'string',
|
|
195
|
+
enum: [...SEARCH_ACTIONS],
|
|
196
|
+
description: 'servers: inspect this gateway; find: rank tools for a task; describe: full contract.',
|
|
197
|
+
},
|
|
198
|
+
query: {
|
|
199
|
+
type: 'string',
|
|
200
|
+
minLength: 1,
|
|
201
|
+
maxLength: 512,
|
|
202
|
+
description: 'find: task description. English action/object keywords improve matching.',
|
|
203
|
+
},
|
|
204
|
+
server: {
|
|
205
|
+
type: 'string',
|
|
206
|
+
description: 'find: exact server slug returned by action=servers.',
|
|
207
|
+
},
|
|
208
|
+
tool: {
|
|
209
|
+
type: 'string',
|
|
210
|
+
description: 'describe: exact tool identifier returned by find.',
|
|
211
|
+
},
|
|
212
|
+
limit: {
|
|
213
|
+
type: 'integer',
|
|
214
|
+
minimum: 1,
|
|
215
|
+
maximum: 50,
|
|
216
|
+
description: 'servers default 20/max 50; find default 5/max 10 (definition max 3).',
|
|
217
|
+
},
|
|
218
|
+
cursor: {
|
|
219
|
+
type: 'string',
|
|
220
|
+
description: 'servers: pagination cursor from a previous directory response.',
|
|
221
|
+
},
|
|
222
|
+
detail: {
|
|
223
|
+
type: 'string',
|
|
224
|
+
enum: [...SEARCH_DETAILS],
|
|
225
|
+
description: 'find: summary (default) or definition for up to 3 complete contracts.',
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
required: ['action'],
|
|
229
|
+
additionalProperties: false,
|
|
230
|
+
};
|
|
231
|
+
export const execInputSchema = {
|
|
232
|
+
type: 'object',
|
|
233
|
+
properties: {
|
|
234
|
+
tool: {
|
|
235
|
+
type: 'string',
|
|
236
|
+
description: 'Exact tool identifier returned by find/describe.',
|
|
237
|
+
},
|
|
238
|
+
arguments: {
|
|
239
|
+
...parameterSchema,
|
|
240
|
+
description: 'Arguments matching the describe-returned inputSchema.',
|
|
241
|
+
},
|
|
242
|
+
definition: {
|
|
243
|
+
type: 'string',
|
|
244
|
+
description: 'Optional describe-returned definition fingerprint.',
|
|
245
|
+
},
|
|
246
|
+
},
|
|
247
|
+
required: ['tool', 'arguments'],
|
|
248
|
+
additionalProperties: false,
|
|
249
|
+
};
|
|
250
|
+
export const searchTool = {
|
|
251
|
+
name: SEARCH_TOOL_NAME,
|
|
252
|
+
title: 'Search tools',
|
|
253
|
+
description: 'Find upstream MCP tools by task without knowing server names. Use action=servers to inspect this gateway, action=find for ranked summaries (optionally detail=definition), and action=describe for a selected tool\u2019s complete arguments schema. For Chinese tasks, include English action/object keywords. Execute the exact returned identifier with exec. Cached entries do not guarantee live availability.',
|
|
254
|
+
inputSchema: searchInputSchema,
|
|
255
|
+
annotations: { readOnlyHint: true },
|
|
256
|
+
};
|
|
257
|
+
export const execTool = {
|
|
258
|
+
name: EXEC_TOOL_NAME,
|
|
259
|
+
title: 'Execute tool',
|
|
260
|
+
description: 'Execute one discovered MCP tool with arguments matching its complete inputSchema. Use the definition fingerprint to detect changes. This tool may perform reads or writes depending on its target; upstream annotations appear in discovery results.',
|
|
261
|
+
inputSchema: execInputSchema,
|
|
262
|
+
annotations: { openWorldHint: true },
|
|
263
|
+
};
|
|
264
|
+
/** The two fixed compact tools; the list is constant even with an empty catalog. */
|
|
265
|
+
export function compactTools() {
|
|
266
|
+
return [searchTool, execTool];
|
|
267
|
+
}
|
|
268
|
+
export function estimateCompactToolsTokens() {
|
|
269
|
+
return estimateTokens(compactTools());
|
|
270
|
+
}
|
|
271
|
+
// ── Apps execution boundary ───────────────────────────────────────────────
|
|
272
|
+
function isRecord(value) {
|
|
273
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
274
|
+
}
|
|
275
|
+
/** MCP App tools are launched through the individual endpoint, not a generic exec. */
|
|
276
|
+
export function appResourceUri(tool) {
|
|
277
|
+
const meta = tool._meta;
|
|
278
|
+
if (!isRecord(meta))
|
|
279
|
+
return null;
|
|
280
|
+
if (typeof meta['ui/resourceUri'] === 'string')
|
|
281
|
+
return meta['ui/resourceUri'];
|
|
282
|
+
const ui = meta.ui;
|
|
283
|
+
if (isRecord(ui) && typeof ui.resourceUri === 'string')
|
|
284
|
+
return ui.resourceUri;
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
export function executionBoundaryForTool(tool) {
|
|
288
|
+
return appResourceUri(tool) === null ? 'exec' : 'individualEndpoint';
|
|
289
|
+
}
|
|
290
|
+
function readString(value) {
|
|
291
|
+
return typeof value === 'string' ? value : null;
|
|
292
|
+
}
|
|
293
|
+
function readInteger(value) {
|
|
294
|
+
return typeof value === 'number' && Number.isInteger(value) ? value : null;
|
|
295
|
+
}
|
|
296
|
+
const allowedKeysByAction = {
|
|
297
|
+
servers: new Set(['action', 'limit', 'cursor']),
|
|
298
|
+
find: new Set(['action', 'query', 'server', 'limit', 'detail']),
|
|
299
|
+
describe: new Set(['action', 'tool']),
|
|
300
|
+
};
|
|
301
|
+
function assertNoUnknownKeys(input, allowed, action) {
|
|
302
|
+
for (const key of Object.keys(input)) {
|
|
303
|
+
if (!allowed.has(key)) {
|
|
304
|
+
throw invalidArguments(`Argument "${key}" is not valid for action "${action}"`);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
export function parseSearchArgs(input) {
|
|
309
|
+
if (!isRecord(input)) {
|
|
310
|
+
throw invalidArguments('search arguments must be an object');
|
|
311
|
+
}
|
|
312
|
+
const actionValue = input.action;
|
|
313
|
+
const action = readString(actionValue);
|
|
314
|
+
if (action === null || !SEARCH_ACTIONS.includes(action)) {
|
|
315
|
+
throw invalidArguments(`action must be one of ${SEARCH_ACTIONS.join(', ')}`, {
|
|
316
|
+
action: actionValue,
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
const typedAction = action;
|
|
320
|
+
assertNoUnknownKeys(input, allowedKeysByAction[typedAction], typedAction);
|
|
321
|
+
if (typedAction === 'servers') {
|
|
322
|
+
const limit = parseLimit(input.limit, 20, 50);
|
|
323
|
+
const cursorValue = input.cursor;
|
|
324
|
+
if (cursorValue !== undefined) {
|
|
325
|
+
const cursor = readString(cursorValue);
|
|
326
|
+
if (cursor === null || cursor.length === 0) {
|
|
327
|
+
throw invalidArguments('cursor must be a non-empty string');
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
return {
|
|
331
|
+
action: 'servers',
|
|
332
|
+
limit,
|
|
333
|
+
...(cursorValue === undefined ? {} : { cursor: cursorValue }),
|
|
334
|
+
detail: 'summary',
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
if (typedAction === 'find') {
|
|
338
|
+
const query = readString(input.query);
|
|
339
|
+
if (query === null || query.trim().length === 0) {
|
|
340
|
+
throw invalidArguments('query is required for action=find');
|
|
341
|
+
}
|
|
342
|
+
if (query.length > 512) {
|
|
343
|
+
throw invalidArguments('query must be at most 512 characters', { length: query.length });
|
|
344
|
+
}
|
|
345
|
+
const serverValue = input.server;
|
|
346
|
+
if (serverValue !== undefined) {
|
|
347
|
+
const server = readString(serverValue);
|
|
348
|
+
if (server === null || server.length === 0) {
|
|
349
|
+
throw invalidArguments('server must be a non-empty string');
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
const detailValue = input.detail;
|
|
353
|
+
let detail = 'summary';
|
|
354
|
+
if (detailValue !== undefined) {
|
|
355
|
+
const parsedDetail = readString(detailValue);
|
|
356
|
+
if (parsedDetail === null || !SEARCH_DETAILS.includes(parsedDetail)) {
|
|
357
|
+
throw invalidArguments(`detail must be one of ${SEARCH_DETAILS.join(', ')}`);
|
|
358
|
+
}
|
|
359
|
+
detail = parsedDetail;
|
|
360
|
+
}
|
|
361
|
+
const maxLimit = detail === 'definition' ? 3 : 10;
|
|
362
|
+
const defaultLimit = detail === 'definition' ? 3 : 5;
|
|
363
|
+
const limit = parseLimit(input.limit, defaultLimit, maxLimit);
|
|
364
|
+
return {
|
|
365
|
+
action: 'find',
|
|
366
|
+
query,
|
|
367
|
+
limit,
|
|
368
|
+
detail,
|
|
369
|
+
...(serverValue === undefined ? {} : { server: serverValue }),
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
const tool = readString(input.tool);
|
|
373
|
+
if (tool === null || tool.length === 0) {
|
|
374
|
+
throw invalidArguments('tool is required for action=describe');
|
|
375
|
+
}
|
|
376
|
+
return { action: 'describe', tool, limit: 1, detail: 'summary' };
|
|
377
|
+
}
|
|
378
|
+
function parseLimit(value, defaultValue, max) {
|
|
379
|
+
if (value === undefined)
|
|
380
|
+
return defaultValue;
|
|
381
|
+
const limit = readInteger(value);
|
|
382
|
+
if (limit === null || limit < 1 || limit > max) {
|
|
383
|
+
throw invalidArguments(`limit must be an integer between 1 and ${max}`, { limit: value });
|
|
384
|
+
}
|
|
385
|
+
return limit;
|
|
386
|
+
}
|
|
387
|
+
export function parseExecArgs(input) {
|
|
388
|
+
if (!isRecord(input)) {
|
|
389
|
+
throw invalidArguments('exec arguments must be an object');
|
|
390
|
+
}
|
|
391
|
+
for (const key of Object.keys(input)) {
|
|
392
|
+
if (key !== 'tool' && key !== 'arguments' && key !== 'definition') {
|
|
393
|
+
throw invalidArguments(`Argument "${key}" is not valid for exec`);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
const tool = readString(input.tool);
|
|
397
|
+
if (tool === null || tool.length === 0) {
|
|
398
|
+
throw invalidArguments('tool is required for exec');
|
|
399
|
+
}
|
|
400
|
+
// The schema marks arguments as required; a missing field must not silently
|
|
401
|
+
// become `{}` and pass an unintended no-op invocation.
|
|
402
|
+
if (input.arguments === undefined || !isRecord(input.arguments)) {
|
|
403
|
+
throw invalidArguments('arguments object is required for exec');
|
|
404
|
+
}
|
|
405
|
+
const args = input.arguments;
|
|
406
|
+
let definition;
|
|
407
|
+
if (input.definition !== undefined) {
|
|
408
|
+
const parsed = readString(input.definition);
|
|
409
|
+
if (parsed === null || parsed.length === 0) {
|
|
410
|
+
throw invalidArguments('definition must be a non-empty string');
|
|
411
|
+
}
|
|
412
|
+
definition = parsed;
|
|
413
|
+
}
|
|
414
|
+
return { tool, arguments: args, ...(definition === undefined ? {} : { definition }) };
|
|
415
|
+
}
|
|
416
|
+
//# sourceMappingURL=compact-protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compact-protocol.js","sourceRoot":"","sources":["../../../src/data-plane/compact-protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Tool } from '@modelcontextprotocol/server';
|
|
2
|
+
export interface CompactInvocation {
|
|
3
|
+
id: string;
|
|
4
|
+
key: string;
|
|
5
|
+
serverId: string;
|
|
6
|
+
exposedTool: string;
|
|
7
|
+
tool: Tool;
|
|
8
|
+
arguments: Record<string, unknown>;
|
|
9
|
+
definition: string;
|
|
10
|
+
revision: string;
|
|
11
|
+
upstreamRequestState?: string;
|
|
12
|
+
expiresAt: number;
|
|
13
|
+
bytes: number;
|
|
14
|
+
busy: boolean;
|
|
15
|
+
timer: ReturnType<typeof setTimeout>;
|
|
16
|
+
}
|
|
17
|
+
/** Process-local contracts and pending invocations never enter the global snapshot. */
|
|
18
|
+
export declare class CompactState {
|
|
19
|
+
#private;
|
|
20
|
+
observe(key: string, serverId: string, revision: string, tool: Tool): boolean;
|
|
21
|
+
observed(key: string, revision: string): Tool | undefined;
|
|
22
|
+
retain(input: Omit<CompactInvocation, 'id' | 'expiresAt' | 'bytes' | 'busy' | 'timer'>, timeoutMs: number, terminate: (invocation: CompactInvocation) => Promise<void>): CompactInvocation | null;
|
|
23
|
+
invocation(id: string): CompactInvocation | undefined;
|
|
24
|
+
release(id: string): void;
|
|
25
|
+
revoke(keep: (invocation: CompactInvocation) => boolean, terminate: (invocation: CompactInvocation) => Promise<void>): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
export declare function compactContractFingerprint(tool: Tool, instructions?: string): string;
|
|
28
|
+
//# sourceMappingURL=compact-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compact-state.d.ts","sourceRoot":"","sources":["../../../src/data-plane/compact-state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAWzD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;CACtC;AAMD,uFAAuF;AACvF,qBAAa,YAAY;;IAIvB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAwB5E;IAED,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAUxD;IAED,MAAM,CACJ,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,EAC/E,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,CAAC,UAAU,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,GAC1D,iBAAiB,GAAG,IAAI,CAyB1B;IAED,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEpD;IAED,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAIxB;IAEK,MAAM,CACV,IAAI,EAAE,CAAC,UAAU,EAAE,iBAAiB,KAAK,OAAO,EAChD,SAAS,EAAE,CAAC,UAAU,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,GAC1D,OAAO,CAAC,IAAI,CAAC,CAMf;CAKF;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAEpF"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { fingerprint } from '../upstream/stable-json.js';
|
|
3
|
+
const observationTtl = 15 * 60_000;
|
|
4
|
+
const maxBytes = 8 * 1024 * 1024;
|
|
5
|
+
const maxContractBytes = 256 * 1024;
|
|
6
|
+
/** Process-local contracts and pending invocations never enter the global snapshot. */
|
|
7
|
+
export class CompactState {
|
|
8
|
+
#observations = new Map();
|
|
9
|
+
#invocations = new Map();
|
|
10
|
+
observe(key, serverId, revision, tool) {
|
|
11
|
+
const bytes = Buffer.byteLength(JSON.stringify(tool));
|
|
12
|
+
if (bytes > maxContractBytes)
|
|
13
|
+
return false;
|
|
14
|
+
this.#observations.delete(key);
|
|
15
|
+
for (const [id, value] of this.#observations) {
|
|
16
|
+
if (value.expiresAt <= Date.now())
|
|
17
|
+
this.#observations.delete(id);
|
|
18
|
+
}
|
|
19
|
+
const serverEntries = [...this.#observations].filter(([, value]) => value.serverId === serverId);
|
|
20
|
+
while (serverEntries.length >= 32)
|
|
21
|
+
this.#observations.delete(serverEntries.shift()[0]);
|
|
22
|
+
while (this.#observationBytes() + bytes > maxBytes) {
|
|
23
|
+
const first = this.#observations.keys().next().value;
|
|
24
|
+
if (first === undefined)
|
|
25
|
+
break;
|
|
26
|
+
this.#observations.delete(first);
|
|
27
|
+
}
|
|
28
|
+
this.#observations.set(key, {
|
|
29
|
+
tool: structuredClone(tool),
|
|
30
|
+
revision,
|
|
31
|
+
bytes,
|
|
32
|
+
serverId,
|
|
33
|
+
expiresAt: Date.now() + observationTtl,
|
|
34
|
+
});
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
observed(key, revision) {
|
|
38
|
+
const value = this.#observations.get(key);
|
|
39
|
+
if (!value)
|
|
40
|
+
return undefined;
|
|
41
|
+
if (value.expiresAt <= Date.now() || value.revision !== revision) {
|
|
42
|
+
this.#observations.delete(key);
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
this.#observations.delete(key);
|
|
46
|
+
this.#observations.set(key, value);
|
|
47
|
+
return structuredClone(value.tool);
|
|
48
|
+
}
|
|
49
|
+
retain(input, timeoutMs, terminate) {
|
|
50
|
+
const bytes = Buffer.byteLength(JSON.stringify(input));
|
|
51
|
+
if (bytes > maxContractBytes ||
|
|
52
|
+
this.#invocations.size >= 256 ||
|
|
53
|
+
[...this.#invocations.values()].reduce((total, item) => total + item.bytes, 0) + bytes >
|
|
54
|
+
maxBytes) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
const id = randomUUID();
|
|
58
|
+
const invocation = {
|
|
59
|
+
...structuredClone(input),
|
|
60
|
+
id,
|
|
61
|
+
bytes,
|
|
62
|
+
busy: false,
|
|
63
|
+
expiresAt: Date.now() + timeoutMs,
|
|
64
|
+
timer: setTimeout(() => {
|
|
65
|
+
this.release(id);
|
|
66
|
+
void terminate(invocation).catch(() => undefined);
|
|
67
|
+
}, timeoutMs),
|
|
68
|
+
};
|
|
69
|
+
invocation.timer.unref();
|
|
70
|
+
this.#invocations.set(id, invocation);
|
|
71
|
+
return invocation;
|
|
72
|
+
}
|
|
73
|
+
invocation(id) {
|
|
74
|
+
return this.#invocations.get(id);
|
|
75
|
+
}
|
|
76
|
+
release(id) {
|
|
77
|
+
const value = this.#invocations.get(id);
|
|
78
|
+
if (value)
|
|
79
|
+
clearTimeout(value.timer);
|
|
80
|
+
this.#invocations.delete(id);
|
|
81
|
+
}
|
|
82
|
+
async revoke(keep, terminate) {
|
|
83
|
+
for (const value of [...this.#invocations.values()]) {
|
|
84
|
+
if (keep(value))
|
|
85
|
+
continue;
|
|
86
|
+
this.release(value.id);
|
|
87
|
+
await terminate(value);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
#observationBytes() {
|
|
91
|
+
return [...this.#observations.values()].reduce((total, value) => total + value.bytes, 0);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
export function compactContractFingerprint(tool, instructions) {
|
|
95
|
+
return fingerprint({ tool, instructions: instructions ?? '' });
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=compact-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compact-state.js","sourceRoot":"","sources":["../../../src/data-plane/compact-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-plane.d.ts","sourceRoot":"","sources":["../../../src/data-plane/data-plane.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAaxD,qBAAa,SAAS;;IAYpB,YACE,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,kBAAkB,EAC5B,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EAWf;IAED,SAAS,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,6FA0C3E;IAEK,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKxC;IAED,eAAe,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"data-plane.d.ts","sourceRoot":"","sources":["../../../src/data-plane/data-plane.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAaxD,qBAAa,SAAS;;IAYpB,YACE,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,kBAAkB,EAC5B,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EAWf;IAED,SAAS,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,6FA0C3E;IAEK,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKxC;IAED,eAAe,IAAI,IAAI,CAYtB;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAQ3B;CAiPF"}
|
|
@@ -72,6 +72,9 @@ export class DataPlane {
|
|
|
72
72
|
this.registryChanged();
|
|
73
73
|
}
|
|
74
74
|
registryChanged() {
|
|
75
|
+
void this.#factory
|
|
76
|
+
.catalogChanged()
|
|
77
|
+
.catch((error) => this.#logger.warn('Pending invocation cleanup failed', { error: String(error) }));
|
|
75
78
|
this.#aggregate.modern.notify.toolsChanged();
|
|
76
79
|
this.#aggregate.modern.notify.promptsChanged();
|
|
77
80
|
this.#aggregate.modern.notify.resourcesChanged();
|
|
@@ -81,6 +84,7 @@ export class DataPlane {
|
|
|
81
84
|
}
|
|
82
85
|
async close() {
|
|
83
86
|
this.#unsubscribe();
|
|
87
|
+
await this.#factory.close();
|
|
84
88
|
await Promise.allSettled([
|
|
85
89
|
this.#closeEndpoint(this.#aggregate),
|
|
86
90
|
...[...this.#individual.values()].map((handler) => this.#closeEndpoint(handler)),
|