@migor/agentia 0.7.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +115 -1
- package/README.md +10 -6
- package/dist/AGENTS.md +27 -6
- package/dist/engine/loop-result.d.ts +72 -0
- package/dist/engine/loop-result.js +80 -0
- package/dist/engine/loop-result.js.map +1 -0
- package/dist/engine/loop.d.ts +3 -40
- package/dist/engine/loop.js +31 -125
- package/dist/engine/loop.js.map +1 -1
- package/dist/engine/resume-input.d.ts +26 -0
- package/dist/engine/resume-input.js +39 -0
- package/dist/engine/resume-input.js.map +1 -0
- package/dist/engine/retry.d.ts +8 -0
- package/dist/engine/retry.js +10 -0
- package/dist/engine/retry.js.map +1 -1
- package/dist/engine/run-config.d.ts +28 -0
- package/dist/engine/run-config.js +75 -0
- package/dist/engine/run-config.js.map +1 -0
- package/dist/engine/stop-reason.d.ts +27 -0
- package/dist/engine/stop-reason.js +76 -0
- package/dist/engine/stop-reason.js.map +1 -0
- package/dist/engine/text.d.ts +10 -0
- package/dist/engine/text.js +6 -0
- package/dist/engine/text.js.map +1 -0
- package/dist/engine/tool-context.d.ts +32 -0
- package/dist/engine/tool-context.js +18 -0
- package/dist/engine/tool-context.js.map +1 -0
- package/dist/engine/tool-events.d.ts +42 -0
- package/dist/engine/tool-events.js +64 -0
- package/dist/engine/tool-events.js.map +1 -0
- package/dist/engine/turn-request.d.ts +24 -0
- package/dist/engine/turn-request.js +12 -0
- package/dist/engine/turn-request.js.map +1 -0
- package/dist/engine/turn.d.ts +3 -25
- package/dist/engine/turn.js +43 -155
- package/dist/engine/turn.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/integrations/anthropic.d.ts +5 -0
- package/dist/integrations/anthropic.js +29 -2
- package/dist/integrations/anthropic.js.map +1 -1
- package/dist/integrations/mcp-http.d.ts +43 -0
- package/dist/integrations/mcp-http.js +250 -0
- package/dist/integrations/mcp-http.js.map +1 -0
- package/dist/integrations/mcp-stdio.d.ts +46 -0
- package/dist/integrations/mcp-stdio.js +230 -0
- package/dist/integrations/mcp-stdio.js.map +1 -0
- package/dist/integrations/mcp.d.ts +37 -72
- package/dist/integrations/mcp.js +9 -468
- package/dist/integrations/mcp.js.map +1 -1
- package/dist/integrations/metrics-otlp.d.ts +42 -0
- package/dist/integrations/metrics-otlp.js +178 -0
- package/dist/integrations/metrics-otlp.js.map +1 -0
- package/dist/integrations/metrics-render.d.ts +2 -0
- package/dist/integrations/metrics-render.js +145 -0
- package/dist/integrations/metrics-render.js.map +1 -0
- package/dist/integrations/metrics-state.d.ts +191 -0
- package/dist/integrations/metrics-state.js +363 -0
- package/dist/integrations/metrics-state.js.map +1 -0
- package/dist/integrations/metrics.d.ts +3 -86
- package/dist/integrations/metrics.js +28 -648
- package/dist/integrations/metrics.js.map +1 -1
- package/dist/integrations/openai.js +4 -3
- package/dist/integrations/openai.js.map +1 -1
- package/dist/store/fsStore.d.ts +1 -1
- package/dist/store/fsStore.js +5 -2
- package/dist/store/fsStore.js.map +1 -1
- package/dist/toolkit/tool.js +1 -0
- package/dist/toolkit/tool.js.map +1 -1
- package/dist/transport/approval-policy.d.ts +30 -0
- package/dist/transport/approval-policy.js +37 -0
- package/dist/transport/approval-policy.js.map +1 -0
- package/dist/transport/async.d.ts +13 -5
- package/dist/transport/async.js +143 -150
- package/dist/transport/async.js.map +1 -1
- package/dist/transport/drain-gate.d.ts +28 -0
- package/dist/transport/drain-gate.js +62 -0
- package/dist/transport/drain-gate.js.map +1 -0
- package/dist/transport/http-route.d.ts +55 -0
- package/dist/transport/http-route.js +72 -0
- package/dist/transport/http-route.js.map +1 -0
- package/dist/transport/http-shapes.d.ts +57 -0
- package/dist/transport/http-shapes.js +56 -0
- package/dist/transport/http-shapes.js.map +1 -0
- package/dist/transport/http.d.ts +5 -21
- package/dist/transport/http.js +176 -232
- package/dist/transport/http.js.map +1 -1
- package/dist/transport/resume-policy.d.ts +40 -0
- package/dist/transport/resume-policy.js +25 -0
- package/dist/transport/resume-policy.js.map +1 -0
- package/dist/transport/slot-pool.d.ts +24 -0
- package/dist/transport/slot-pool.js +43 -0
- package/dist/transport/slot-pool.js.map +1 -0
- package/dist/transport/task-waiters.d.ts +25 -0
- package/dist/transport/task-waiters.js +63 -0
- package/dist/transport/task-waiters.js.map +1 -0
- package/package.json +5 -4
package/dist/integrations/mcp.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { spawn } from 'node:child_process';
|
|
2
1
|
import { TIMED_OUT, TimeoutError, withTimeout } from '../core/timeout.js';
|
|
3
2
|
import { combineSignals, releaseCombinedSignal } from '../core/abort.js';
|
|
4
3
|
/** 缺省超时:MCP server 可能去连外部系统,60s 是「明显卡死」与「慢但正常」的分界 */
|
|
@@ -134,8 +133,6 @@ export async function mcpTools(client, opts = {}) {
|
|
|
134
133
|
}
|
|
135
134
|
return tools;
|
|
136
135
|
}
|
|
137
|
-
/** `close()` 里 SIGTERM → SIGKILL 的宽限期(毫秒) */
|
|
138
|
-
export const MCP_CLOSE_GRACE_MS = 2_000;
|
|
139
136
|
/**
|
|
140
137
|
* 缺省 `clientInfo`(`initialize` 握手要发,协议要求该字段存在)。
|
|
141
138
|
*
|
|
@@ -143,14 +140,14 @@ export const MCP_CLOSE_GRACE_MS = 2_000;
|
|
|
143
140
|
* `src/index.ts`),且 `scripts/release-surface.mjs` 的发版面按**精确版本串**计数 ——
|
|
144
141
|
* 这里多一处版本字面量会让它的 count 断言失配。需要真实版本请自行传 `clientInfo`。
|
|
145
142
|
*/
|
|
146
|
-
const DEFAULT_CLIENT_INFO = {
|
|
143
|
+
export const DEFAULT_CLIENT_INFO = {
|
|
147
144
|
name: 'agentia',
|
|
148
145
|
version: '0.0.0',
|
|
149
146
|
};
|
|
150
147
|
/** `initialize` 缺省请求的协议版本(e2e 已验证的版本;要对齐新版 server 请显式传) */
|
|
151
|
-
const DEFAULT_PROTOCOL_VERSION = '2024-11-05';
|
|
148
|
+
export const DEFAULT_PROTOCOL_VERSION = '2024-11-05';
|
|
152
149
|
/** 把可能很大的值截成可读片段(错误消息要能进日志,不能是一兆的 JSON) */
|
|
153
|
-
function brief(value, max = 200) {
|
|
150
|
+
export function brief(value, max = 200) {
|
|
154
151
|
let s;
|
|
155
152
|
try {
|
|
156
153
|
s = typeof value === 'string' ? value : JSON.stringify(value);
|
|
@@ -163,7 +160,7 @@ function brief(value, max = 200) {
|
|
|
163
160
|
return s.length > max ? `${s.slice(0, max)}…` : s;
|
|
164
161
|
}
|
|
165
162
|
/** JSON-RPC 错误对象 → `Error`(`code` 进文案:`classifyError` 只认数值 `status`,这里不冒充它) */
|
|
166
|
-
function jsonRpcError(err) {
|
|
163
|
+
export function jsonRpcError(err) {
|
|
167
164
|
if (typeof err === 'object' && err !== null) {
|
|
168
165
|
const { code, message } = err;
|
|
169
166
|
return new Error(`MCP error ${String(code)}: ${String(message)}`);
|
|
@@ -171,474 +168,18 @@ function jsonRpcError(err) {
|
|
|
171
168
|
return new Error(`MCP error: ${brief(err)}`);
|
|
172
169
|
}
|
|
173
170
|
/** server 混进 stdout / SSE 的非 JSON 行 */
|
|
174
|
-
function isJsonRpcResponse(msg) {
|
|
171
|
+
export function isJsonRpcResponse(msg) {
|
|
175
172
|
return (typeof msg === 'object' && msg !== null && typeof msg.id === 'number');
|
|
176
173
|
}
|
|
177
174
|
/** 从一条已解析的报文里取结果;带 `error` 则抛 */
|
|
178
|
-
function unwrap(msg, method) {
|
|
175
|
+
export function unwrap(msg, method) {
|
|
179
176
|
if (msg.error !== undefined)
|
|
180
177
|
throw jsonRpcError(msg.error);
|
|
181
178
|
if (!('result' in msg))
|
|
182
179
|
throw new Error(`MCP ${method}:响应里既没有 result 也没有 error`);
|
|
183
180
|
return msg.result;
|
|
184
181
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
*
|
|
189
|
-
* 进程与握手都是**惰性**的 —— 构造不产生副作用,第一次 `listTools` / `callTool` 才 spawn;
|
|
190
|
-
* 握手只做一次(并发调用共享同一次握手)。
|
|
191
|
-
*
|
|
192
|
-
* 三处非显然的坑,这里都兜住了(此前 `scripts/e2e-mcp.ts` 内联的那 94 行踩过):
|
|
193
|
-
* 1. spawn **失败**(命令不存在 → `ENOENT`)是异步的 `'error'` 事件,不是抛出 ——
|
|
194
|
-
* 没有监听器就是未捕获异常、直接把宿主进程带崩,所以必须接住并拒绝在途请求;
|
|
195
|
-
* 2. 分帧:一条报文可能跨多个 chunk,必须自己攒 buffer 按 `\n` 切;
|
|
196
|
-
* 3. **协议层 `isError: true` 必须转成抛错** —— 否则模型收到一条「成功」的结果,
|
|
197
|
-
* trace 也把它记成成功的调用(`McpClientLike` 的约定,见其注释)。
|
|
198
|
-
*/
|
|
199
|
-
export function createStdioMcpConnector(cmd, opts = {}) {
|
|
200
|
-
const bin = cmd[0];
|
|
201
|
-
if (typeof bin !== 'string' || bin === '') {
|
|
202
|
-
throw new Error('createStdioMcpConnector:cmd 不能为空(需要可执行文件 + 参数)');
|
|
203
|
-
}
|
|
204
|
-
const rest = cmd.slice(1);
|
|
205
|
-
const timeoutMs = opts.timeoutMs ?? MCP_DEFAULT_TIMEOUT_MS;
|
|
206
|
-
const clientInfo = opts.clientInfo ?? DEFAULT_CLIENT_INFO;
|
|
207
|
-
const protocolVersion = opts.protocolVersion ?? DEFAULT_PROTOCOL_VERSION;
|
|
208
|
-
let proc = null;
|
|
209
|
-
let fatal = null;
|
|
210
|
-
let closed = false;
|
|
211
|
-
let exited = false;
|
|
212
|
-
let buf = '';
|
|
213
|
-
let nextId = 1;
|
|
214
|
-
let ready = null;
|
|
215
|
-
let resolveExit = null;
|
|
216
|
-
const exitPromise = new Promise((r) => {
|
|
217
|
-
resolveExit = r;
|
|
218
|
-
});
|
|
219
|
-
const pending = new Map();
|
|
220
|
-
const markExited = () => {
|
|
221
|
-
exited = true;
|
|
222
|
-
resolveExit?.();
|
|
223
|
-
};
|
|
224
|
-
/** 进程已死 / 已 close 时一次性拒绝全部在途请求 —— 不留永久挂起的 promise */
|
|
225
|
-
const fail = (err) => {
|
|
226
|
-
fatal = err;
|
|
227
|
-
for (const p of pending.values())
|
|
228
|
-
p.reject(err);
|
|
229
|
-
pending.clear();
|
|
230
|
-
};
|
|
231
|
-
const guard = (p, label) => withDeadline(p, timeoutMs, label);
|
|
232
|
-
const ensureProc = () => {
|
|
233
|
-
if (closed)
|
|
234
|
-
throw new Error('MCP 连接器已 close —— 请重新创建一个');
|
|
235
|
-
if (fatal)
|
|
236
|
-
throw fatal;
|
|
237
|
-
if (proc)
|
|
238
|
-
return proc;
|
|
239
|
-
const spawnOpts = {
|
|
240
|
-
stdio: ['pipe', 'pipe', opts.stderr ?? 'inherit'],
|
|
241
|
-
// exactOptionalPropertyTypes:可选字段不能赋 undefined,只能条件展开
|
|
242
|
-
...(opts.env ? { env: { ...process.env, ...opts.env } } : {}),
|
|
243
|
-
...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),
|
|
244
|
-
};
|
|
245
|
-
const p = spawn(bin, rest, spawnOpts);
|
|
246
|
-
proc = p;
|
|
247
|
-
p.on('error', (err) => {
|
|
248
|
-
// 见函数头第 1 条:这个监听器不是可选的
|
|
249
|
-
fail(err instanceof Error ? err : new Error(String(err)));
|
|
250
|
-
markExited();
|
|
251
|
-
});
|
|
252
|
-
p.on('exit', (code, signal) => {
|
|
253
|
-
if (!closed) {
|
|
254
|
-
fail(new Error(`MCP server 进程已退出(code=${code ?? 'null'} signal=${signal ?? 'null'})`));
|
|
255
|
-
}
|
|
256
|
-
markExited();
|
|
257
|
-
});
|
|
258
|
-
// 'exit' 在 spawn 失败时可能不触发,'close' 一定会 —— close() 靠它才不会白等
|
|
259
|
-
p.on('close', markExited);
|
|
260
|
-
// 进程已死时写 stdin 会异步报 EPIPE;真实原因由上面的 'error' / 'exit' 给出
|
|
261
|
-
p.stdin?.on('error', () => {
|
|
262
|
-
/* 吞掉:EPIPE 是「进程没了」的次生现象,不是根因 */
|
|
263
|
-
});
|
|
264
|
-
p.stdout?.setEncoding('utf8');
|
|
265
|
-
p.stdout?.on('data', (chunk) => {
|
|
266
|
-
buf += chunk;
|
|
267
|
-
for (;;) {
|
|
268
|
-
const nl = buf.indexOf('\n');
|
|
269
|
-
if (nl < 0)
|
|
270
|
-
break;
|
|
271
|
-
const line = buf.slice(0, nl);
|
|
272
|
-
buf = buf.slice(nl + 1);
|
|
273
|
-
if (line.trim() === '')
|
|
274
|
-
continue;
|
|
275
|
-
let msg;
|
|
276
|
-
try {
|
|
277
|
-
msg = JSON.parse(line);
|
|
278
|
-
}
|
|
279
|
-
catch {
|
|
280
|
-
continue; // MCP 规定 stdout 只走协议,但 server 混日志进来是常事
|
|
281
|
-
}
|
|
282
|
-
if (!isJsonRpcResponse(msg))
|
|
283
|
-
continue; // 通知(无 id)不配对
|
|
284
|
-
const waiter = pending.get(msg.id);
|
|
285
|
-
if (!waiter)
|
|
286
|
-
continue;
|
|
287
|
-
pending.delete(msg.id);
|
|
288
|
-
try {
|
|
289
|
-
waiter.resolve(unwrap(msg, 'response'));
|
|
290
|
-
}
|
|
291
|
-
catch (e) {
|
|
292
|
-
waiter.reject(e instanceof Error ? e : new Error(String(e)));
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
});
|
|
296
|
-
return p;
|
|
297
|
-
};
|
|
298
|
-
const write = (payload) => {
|
|
299
|
-
const p = ensureProc();
|
|
300
|
-
p.stdin?.write(`${JSON.stringify(payload)}\n`);
|
|
301
|
-
};
|
|
302
|
-
const send = (method, params, abandoned) => {
|
|
303
|
-
if (closed)
|
|
304
|
-
return Promise.reject(new Error('MCP 连接器已 close —— 请重新创建一个'));
|
|
305
|
-
if (fatal)
|
|
306
|
-
return Promise.reject(fatal);
|
|
307
|
-
const id = nextId++;
|
|
308
|
-
return new Promise((resolve, reject) => {
|
|
309
|
-
try {
|
|
310
|
-
ensureProc();
|
|
311
|
-
}
|
|
312
|
-
catch (e) {
|
|
313
|
-
reject(e instanceof Error ? e : new Error(String(e)));
|
|
314
|
-
return;
|
|
315
|
-
}
|
|
316
|
-
pending.set(id, { resolve, reject });
|
|
317
|
-
// 裁判放弃等待 ≠ 条目自动回收:超时的调用(引擎 toolTimeoutMs 或桥兜底)只是
|
|
318
|
-
// 不再 await,pending 里的 {resolve,reject} 会留到「server 终于回包 / 进程死 /
|
|
319
|
-
// close」—— 对「活着但不回包」的 server 就是无界泄漏。裁判表过态就删条目:
|
|
320
|
-
// 之后回包到了也没人等(:441 的 pending.get 落空即忽略,语义安全)。
|
|
321
|
-
if (abandoned !== undefined) {
|
|
322
|
-
const drop = () => {
|
|
323
|
-
pending.delete(id);
|
|
324
|
-
};
|
|
325
|
-
if (abandoned.aborted)
|
|
326
|
-
drop();
|
|
327
|
-
else
|
|
328
|
-
abandoned.addEventListener('abort', drop, { once: true });
|
|
329
|
-
}
|
|
330
|
-
write({ jsonrpc: '2.0', id, method, params });
|
|
331
|
-
});
|
|
332
|
-
};
|
|
333
|
-
/** 握手只做一次;失败是**粘性**的(连接器已不可用 → 重建,而不是半初始化态) */
|
|
334
|
-
const ensureReady = () => {
|
|
335
|
-
if (ready)
|
|
336
|
-
return ready;
|
|
337
|
-
ready = (async () => {
|
|
338
|
-
const init = await guard(send('initialize', { protocolVersion, capabilities: {}, clientInfo }), 'initialize');
|
|
339
|
-
// 协商结果以 server 回的那个为准(协议允许 server 降级或选自己的版本)
|
|
340
|
-
void init;
|
|
341
|
-
write({ jsonrpc: '2.0', method: 'notifications/initialized', params: {} });
|
|
342
|
-
})();
|
|
343
|
-
return ready;
|
|
344
|
-
};
|
|
345
|
-
const request = async (method, params, abandoned) => {
|
|
346
|
-
await ensureReady();
|
|
347
|
-
return send(method, params, abandoned);
|
|
348
|
-
};
|
|
349
|
-
const listTools = async () => {
|
|
350
|
-
const r = await guard(request('tools/list', {}), 'tools/list');
|
|
351
|
-
if (typeof r !== 'object' || r === null) {
|
|
352
|
-
throw new Error(`MCP tools/list 返回了非对象:${brief(r)}`);
|
|
353
|
-
}
|
|
354
|
-
const listed = r.tools;
|
|
355
|
-
if (listed === undefined)
|
|
356
|
-
return [];
|
|
357
|
-
if (!Array.isArray(listed)) {
|
|
358
|
-
// 响亮失败:把协议不符吞成空菜单,用户看到的是「一个工具都没有」而不是「server 坏了」
|
|
359
|
-
throw new Error(`MCP tools/list 的 tools 不是数组:${brief(listed)}`);
|
|
360
|
-
}
|
|
361
|
-
return listed;
|
|
362
|
-
};
|
|
363
|
-
const callTool = async (name, args, callOpts) => {
|
|
364
|
-
const r = await request('tools/call', { name, arguments: args }, callOpts?.abandoned);
|
|
365
|
-
// 承重:协议层 isError 只有连接器看得见(见函数头第 3 条)
|
|
366
|
-
if (typeof r === 'object' && r !== null && r.isError) {
|
|
367
|
-
throw new Error(`MCP 工具 ${name} 返回 isError: ${brief(r.content)}`);
|
|
368
|
-
}
|
|
369
|
-
return r;
|
|
370
|
-
};
|
|
371
|
-
return {
|
|
372
|
-
listTools,
|
|
373
|
-
callTool,
|
|
374
|
-
async close() {
|
|
375
|
-
if (closed)
|
|
376
|
-
return;
|
|
377
|
-
closed = true;
|
|
378
|
-
fail(new Error('MCP 连接器已 close —— 请重新创建一个'));
|
|
379
|
-
const p = proc;
|
|
380
|
-
proc = null;
|
|
381
|
-
if (!p)
|
|
382
|
-
return;
|
|
383
|
-
p.kill('SIGTERM');
|
|
384
|
-
if (exited)
|
|
385
|
-
return;
|
|
386
|
-
const killTimer = setTimeout(() => {
|
|
387
|
-
try {
|
|
388
|
-
p.kill('SIGKILL');
|
|
389
|
-
}
|
|
390
|
-
catch {
|
|
391
|
-
/* 已经死了 */
|
|
392
|
-
}
|
|
393
|
-
// ⚠️ 这里**不** resolve:SIGKILL 不可被捕获,'exit'/'close' 必达 —— 继续等真的退出。
|
|
394
|
-
// 到点即返回是 2026-09-18 之前的行为:调用方以为进程没了,实际还留着一个孤儿。
|
|
395
|
-
}, MCP_CLOSE_GRACE_MS);
|
|
396
|
-
try {
|
|
397
|
-
await exitPromise;
|
|
398
|
-
}
|
|
399
|
-
finally {
|
|
400
|
-
clearTimeout(killTimer);
|
|
401
|
-
}
|
|
402
|
-
},
|
|
403
|
-
};
|
|
404
|
-
}
|
|
405
|
-
/**
|
|
406
|
-
* **StreamableHTTP 连接器**:一个 endpoint,POST JSON-RPC(MCP 2025-03-26 起的
|
|
407
|
-
* Streamable HTTP 传输)。
|
|
408
|
-
*
|
|
409
|
-
* - 两种响应形态**都要接**:`application/json`(整条报文)与 `text/event-stream`
|
|
410
|
-
* (报文按 SSE 帧下发,server 应在发完响应后关流);
|
|
411
|
-
* - 会话:`initialize` 响应里的 `Mcp-Session-Id` 会被记住并在后续请求上回带
|
|
412
|
-
* (后续响应不带该头时**不覆盖**);`close()` 尽力 `DELETE` 终止会话;
|
|
413
|
-
* **会话过期自愈**:带会话 id 收到 `404` ⇒ 视为「会话已终止、该请求未被 server 执行」
|
|
414
|
-
* ⇒ 丢会话 → 重新握手 → 把这一次**重试一次**(只一次,不再循环)。自愈是静默的,
|
|
415
|
-
* 所以给了 `onSessionExpired` 钩子给你计数 / 告警 —— 否则它和「静默失效」没区别。
|
|
416
|
-
* - 协议版本:请求头 `MCP-Protocol-Version` 带**协商到的**版本(2025-06-18 起要求,
|
|
417
|
-
* 老 server 忽略未知头);
|
|
418
|
-
* - HTTP 层失败**挂数值 `status`** ⇒ `engine/errors.ts::classifyError` 自动分流
|
|
419
|
-
* (429 → `rate_limit` 可重试 / ≥500 → `server` 可重试 / 其余 4xx → `api` 不可重试)。
|
|
420
|
-
*/
|
|
421
|
-
export function createStreamableHttpMcpConnector(url, opts = {}) {
|
|
422
|
-
if (typeof url !== 'string' || url === '') {
|
|
423
|
-
throw new Error('createStreamableHttpMcpConnector:url 不能为空');
|
|
424
|
-
}
|
|
425
|
-
const fetchImpl = opts.fetchImpl ?? fetch;
|
|
426
|
-
const timeoutMs = opts.timeoutMs ?? MCP_DEFAULT_TIMEOUT_MS;
|
|
427
|
-
const clientInfo = opts.clientInfo ?? DEFAULT_CLIENT_INFO;
|
|
428
|
-
const requestedVersion = opts.protocolVersion ?? DEFAULT_PROTOCOL_VERSION;
|
|
429
|
-
const baseHeaders = {
|
|
430
|
-
'content-type': 'application/json',
|
|
431
|
-
// MCP 规定客户端必须同时接受两种响应形态(否则 server 无法按规范回 SSE)
|
|
432
|
-
accept: 'application/json, text/event-stream',
|
|
433
|
-
...opts.headers,
|
|
434
|
-
};
|
|
435
|
-
let sessionId = null;
|
|
436
|
-
let negotiated = requestedVersion;
|
|
437
|
-
let closed = false;
|
|
438
|
-
let ready = null;
|
|
439
|
-
let reinit = null;
|
|
440
|
-
let nextId = 1;
|
|
441
|
-
const guard = (p, label) => withDeadline(p, timeoutMs, label);
|
|
442
|
-
/** HTTP 层失败:带上数值 `status`,让 `classifyError` 能按状态分流 */
|
|
443
|
-
const httpError = (status, method, body) => {
|
|
444
|
-
const e = new Error(`MCP ${method} HTTP ${status}${body ? `:${body}` : ''}`);
|
|
445
|
-
e.status = status;
|
|
446
|
-
return e;
|
|
447
|
-
};
|
|
448
|
-
const readText = async (res) => {
|
|
449
|
-
try {
|
|
450
|
-
return await res.text();
|
|
451
|
-
}
|
|
452
|
-
catch {
|
|
453
|
-
return '';
|
|
454
|
-
}
|
|
455
|
-
};
|
|
456
|
-
const post = async (payload, o = {}) => {
|
|
457
|
-
if (closed)
|
|
458
|
-
throw new Error('MCP 连接器已 close —— 请重新创建一个');
|
|
459
|
-
const headers = { ...baseHeaders };
|
|
460
|
-
if (sessionId !== null)
|
|
461
|
-
headers['mcp-session-id'] = sessionId;
|
|
462
|
-
if (o.withVersion)
|
|
463
|
-
headers['mcp-protocol-version'] = negotiated;
|
|
464
|
-
const res = await fetchImpl(url, { method: 'POST', headers, body: JSON.stringify(payload) });
|
|
465
|
-
// 会话 id 只在 initialize 响应里出现;后续响应不带时**不能**把它清成 null
|
|
466
|
-
const sid = res.headers.get('mcp-session-id');
|
|
467
|
-
if (sid !== null && sid !== '')
|
|
468
|
-
sessionId = sid;
|
|
469
|
-
return res;
|
|
470
|
-
};
|
|
471
|
-
/** 非 SSE 报文(单条 JSON-RPC)→ 取 result;SSE 里可能有别的通知帧,只取与 `id` 配对的 */
|
|
472
|
-
const pickResult = (msg, id, method) => {
|
|
473
|
-
// id 必须**等值**配对(与 SSE 分支同款):只验「是带 id 的响应」会把别的请求的
|
|
474
|
-
// 结果当本次的返回(代理串包/通知帧),静默错值比报错难查得多。
|
|
475
|
-
if (!isJsonRpcResponse(msg) || msg.id !== id) {
|
|
476
|
-
throw new Error(`MCP ${method}:响应里没有 id 为 ${id} 的 JSON-RPC 报文`);
|
|
477
|
-
}
|
|
478
|
-
return unwrap(msg, method);
|
|
479
|
-
};
|
|
480
|
-
/**
|
|
481
|
-
* 从响应取结果。SSE 分支一次性读完整个 body 再解析 —— StreamableHTTP 约定 server 发完
|
|
482
|
-
* 响应即关流,读全比手写增量解析器稳(`text/event-stream` 里 `data:` 行按规范可跨多行拼接)。
|
|
483
|
-
*/
|
|
484
|
-
const readResult = async (res, id, method) => {
|
|
485
|
-
const ct = (res.headers.get('content-type') ?? '').toLowerCase();
|
|
486
|
-
const text = await readText(res);
|
|
487
|
-
if (ct.includes('text/event-stream')) {
|
|
488
|
-
for (const frame of text.split(/\r?\n\r?\n/)) {
|
|
489
|
-
const data = frame
|
|
490
|
-
.split(/\r?\n/)
|
|
491
|
-
.filter((l) => l.startsWith('data:'))
|
|
492
|
-
.map((l) => l.slice(5).trim())
|
|
493
|
-
.join('');
|
|
494
|
-
if (data === '')
|
|
495
|
-
continue;
|
|
496
|
-
let msg;
|
|
497
|
-
try {
|
|
498
|
-
msg = JSON.parse(data);
|
|
499
|
-
}
|
|
500
|
-
catch {
|
|
501
|
-
continue;
|
|
502
|
-
}
|
|
503
|
-
if (isJsonRpcResponse(msg) && msg.id === id)
|
|
504
|
-
return unwrap(msg, method);
|
|
505
|
-
}
|
|
506
|
-
throw new Error(`MCP ${method}:SSE 响应里没有 id 为 ${id} 的报文`);
|
|
507
|
-
}
|
|
508
|
-
if (text.trim() === '') {
|
|
509
|
-
throw new Error(`MCP ${method}:响应体为空(期望 id 为 ${id} 的 JSON-RPC 报文)`);
|
|
510
|
-
}
|
|
511
|
-
let msg;
|
|
512
|
-
try {
|
|
513
|
-
msg = JSON.parse(text);
|
|
514
|
-
}
|
|
515
|
-
catch {
|
|
516
|
-
throw new Error(`MCP ${method}:响应不是合法 JSON:${brief(text)}`);
|
|
517
|
-
}
|
|
518
|
-
return pickResult(msg, id, method);
|
|
519
|
-
};
|
|
520
|
-
/**
|
|
521
|
-
* 一次 JSON-RPC 往返,带**会话过期自愈**(2026-09-18;MCP Streamable HTTP 的规范语义)。
|
|
522
|
-
*
|
|
523
|
-
* 带会话 id 收到 `404` 的含义是「这个会话我不认识」⇒ **该请求没有被执行** ——
|
|
524
|
-
* 所以丢掉会话、重新握手、把这一次**重试一次**是安全的(不会重复执行副作用)。
|
|
525
|
-
* 规范也是这么要求的:客户端**必须**新建会话(不带会话 id 重新 `initialize`)。
|
|
526
|
-
*
|
|
527
|
-
* **只重试一次**:第二次再 404 说明对面不是「会话过期」而是别的问题,直接抛(不循环)。
|
|
528
|
-
* 自愈本身是静默的,但可通过 `onSessionExpired` 观测 —— 否则它和「静默失效」没区别。
|
|
529
|
-
*/
|
|
530
|
-
/**
|
|
531
|
-
* 会话过期自愈的互斥:并发请求同时吃到 404 时**共享同一次重握手**。
|
|
532
|
-
* 没有这层时,两个并发调用各自执行 `ready = null`(第二个会把第一个刚建的握手
|
|
533
|
-
* Promise 抹掉)⇒ 双 initialize 并发跑、`sessionId` 互相覆盖,重试带着被覆盖的
|
|
534
|
-
* 会话再 404 且不再重试。`onSessionExpired` 仍按 404 逐次记(每个 404 都是事实),
|
|
535
|
-
* 共享的只是「重握手」这个动作。
|
|
536
|
-
*/
|
|
537
|
-
const reinitialize = () => {
|
|
538
|
-
if (reinit)
|
|
539
|
-
return reinit;
|
|
540
|
-
reinit = (async () => {
|
|
541
|
-
sessionId = null;
|
|
542
|
-
ready = null; // 下一次 ensureReady 会新建会话
|
|
543
|
-
await ensureReady();
|
|
544
|
-
})().finally(() => {
|
|
545
|
-
reinit = null;
|
|
546
|
-
});
|
|
547
|
-
return reinit;
|
|
548
|
-
};
|
|
549
|
-
const rpc = async (method, params, withVersion, allowReinit = true) => {
|
|
550
|
-
const id = nextId++;
|
|
551
|
-
const res = await post({ jsonrpc: '2.0', id, method, params }, { withVersion });
|
|
552
|
-
if (res.status === 404 && sessionId !== null && allowReinit) {
|
|
553
|
-
await readText(res); // 排空,别把连接晾着
|
|
554
|
-
opts.onSessionExpired?.();
|
|
555
|
-
await reinitialize();
|
|
556
|
-
return rpc(method, params, withVersion, false);
|
|
557
|
-
}
|
|
558
|
-
if (!res.ok)
|
|
559
|
-
throw httpError(res.status, method, await readText(res));
|
|
560
|
-
// 计时裁判权在调用方(initialize / notifications / tools/list 都在调用点自带
|
|
561
|
-
// guard —— 它们是装配期路径、没有别的裁判);`tools/call` 不在此起计时器:
|
|
562
|
-
// 它的裁判是引擎的 `toolTimeoutMs`(spec §10 2026-09-17 ① 超时单源化)——
|
|
563
|
-
// 再包一层 guard 就是双计时器,同一事件两本账(stdio 侧就没有这层)。
|
|
564
|
-
return readResult(res, id, method);
|
|
565
|
-
};
|
|
566
|
-
const ensureReady = () => {
|
|
567
|
-
if (ready)
|
|
568
|
-
return ready;
|
|
569
|
-
ready = (async () => {
|
|
570
|
-
const init = await guard(rpc('initialize', { protocolVersion: requestedVersion, capabilities: {}, clientInfo }, false), 'initialize');
|
|
571
|
-
if (typeof init === 'object' && init !== null) {
|
|
572
|
-
const v = init.protocolVersion;
|
|
573
|
-
if (typeof v === 'string' && v !== '')
|
|
574
|
-
negotiated = v;
|
|
575
|
-
}
|
|
576
|
-
const res = await guard(post({ jsonrpc: '2.0', method: 'notifications/initialized', params: {} }, { withVersion: true }), 'notifications/initialized');
|
|
577
|
-
if (!res.ok) {
|
|
578
|
-
throw httpError(res.status, 'notifications/initialized', await readText(res));
|
|
579
|
-
}
|
|
580
|
-
await readText(res); // 排空:202 + 空体是合法应答,但别把连接晾着
|
|
581
|
-
})();
|
|
582
|
-
return ready;
|
|
583
|
-
};
|
|
584
|
-
const listTools = async () => {
|
|
585
|
-
await ensureReady();
|
|
586
|
-
const r = await guard(rpc('tools/list', {}, true), 'tools/list');
|
|
587
|
-
if (typeof r !== 'object' || r === null) {
|
|
588
|
-
throw new Error(`MCP tools/list 返回了非对象:${brief(r)}`);
|
|
589
|
-
}
|
|
590
|
-
const listed = r.tools;
|
|
591
|
-
if (listed === undefined)
|
|
592
|
-
return [];
|
|
593
|
-
if (!Array.isArray(listed)) {
|
|
594
|
-
throw new Error(`MCP tools/list 的 tools 不是数组:${brief(listed)}`);
|
|
595
|
-
}
|
|
596
|
-
return listed;
|
|
597
|
-
};
|
|
598
|
-
const callTool = async (name, args) => {
|
|
599
|
-
await ensureReady();
|
|
600
|
-
const r = await rpc('tools/call', { name, arguments: args }, true);
|
|
601
|
-
// 承重同 stdio:协议层 isError 只有连接器看得见
|
|
602
|
-
if (typeof r === 'object' && r !== null && r.isError) {
|
|
603
|
-
throw new Error(`MCP 工具 ${name} 返回 isError: ${brief(r.content)}`);
|
|
604
|
-
}
|
|
605
|
-
return r;
|
|
606
|
-
};
|
|
607
|
-
return {
|
|
608
|
-
listTools,
|
|
609
|
-
callTool,
|
|
610
|
-
async close() {
|
|
611
|
-
if (closed)
|
|
612
|
-
return;
|
|
613
|
-
closed = true;
|
|
614
|
-
const sid = sessionId;
|
|
615
|
-
sessionId = null;
|
|
616
|
-
if (sid === null)
|
|
617
|
-
return;
|
|
618
|
-
try {
|
|
619
|
-
// 尽力终止会话(MCP 约定的显式关闭);server 不认这个方法也不该让 close() 抛。
|
|
620
|
-
//
|
|
621
|
-
// ⚠️ **必须过 `guard`**:这里此前直接 `await fetchImpl(...)`。下面的 catch 只兜得住
|
|
622
|
-
// **抛错**,兜不住**挂死** —— server 接受连接后不回(半开 / 卡在代理后面),
|
|
623
|
-
// `close()` 就永久挂住,而调用方(宿主停机路径)会一直等它。**挂住比失败更糟**,
|
|
624
|
-
// 与「best-effort、不抛错」的承诺相悖。fetch 与排空**一起**进 guard:
|
|
625
|
-
// 只护住响应头、body 照样能卡(`readText` 读的是 body)。
|
|
626
|
-
await guard((async () => {
|
|
627
|
-
const res = await fetchImpl(url, {
|
|
628
|
-
method: 'DELETE',
|
|
629
|
-
headers: {
|
|
630
|
-
...baseHeaders,
|
|
631
|
-
'mcp-session-id': sid,
|
|
632
|
-
'mcp-protocol-version': negotiated,
|
|
633
|
-
},
|
|
634
|
-
});
|
|
635
|
-
await readText(res);
|
|
636
|
-
})(), 'close');
|
|
637
|
-
}
|
|
638
|
-
catch {
|
|
639
|
-
/* 关闭是尽力而为(超时也走这里 —— guard 抛 TimeoutError) */
|
|
640
|
-
}
|
|
641
|
-
},
|
|
642
|
-
};
|
|
643
|
-
}
|
|
182
|
+
// 两个内置连接器(2026-09-20 起各居其文件;公共面不变,index.ts 仍从这里取)
|
|
183
|
+
export { createStdioMcpConnector, MCP_CLOSE_GRACE_MS } from './mcp-stdio.js';
|
|
184
|
+
export { createStreamableHttpMcpConnector } from './mcp-http.js';
|
|
644
185
|
//# sourceMappingURL=mcp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/integrations/mcp.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/integrations/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { MetricsState } from './metrics-state.js';
|
|
2
|
+
/**
|
|
3
|
+
* metricsSink 的 **OTLP/JSON 导出**(E5):从 `MetricsState` 组装 payload + POST 到
|
|
4
|
+
* `${endpoint}/v1/metrics`。只读状态、不改账。module 级 export,不进公共面(`src/index.ts`)。
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* OTLP metrics 导出失败(带数值 `status`)。
|
|
8
|
+
*
|
|
9
|
+
* 为什么不能抛裸 `Error`:`engine/errors.ts` 的分类是鸭子类型,只看数据属性。
|
|
10
|
+
* 裸 Error 会被判 `unknown` + `retryable:false` —— 宿主在 `onExportError` 里拿不到
|
|
11
|
+
* status,也就没法区分「collector 拒收(4xx,改配置)」与「collector 挂了(5xx,等它回来)」。
|
|
12
|
+
* 形状与 `otlp.ts` 的 `OtlpExportError` 一致(同层两处导出器不该有两种错误形状)。
|
|
13
|
+
*
|
|
14
|
+
* 注:本处抛错由 `onExportError` 接住并按「观测失败不得击穿业务」吞掉 —— 带 status 是为了
|
|
15
|
+
* **可判断**,不是为了让谁重试。
|
|
16
|
+
*/
|
|
17
|
+
export declare class MetricsExportError extends Error {
|
|
18
|
+
readonly status: number;
|
|
19
|
+
constructor(status: number, message: string);
|
|
20
|
+
}
|
|
21
|
+
/** `buildOtlpPayload` 的组装入参(值都来自 `metricsSink` 的已校验选项) */
|
|
22
|
+
export interface OtlpMetricsOptions {
|
|
23
|
+
/** 指标名前缀(同 `MetricsSinkOptions.prefix`) */
|
|
24
|
+
prefix: string;
|
|
25
|
+
/** OTLP resource 的 `service.name` */
|
|
26
|
+
serviceName: string;
|
|
27
|
+
/** sink 创建时刻(epoch 毫秒)—— 所有数据点的 `startTimeUnixNano` */
|
|
28
|
+
startedAtMs: number;
|
|
29
|
+
/** resource 的额外属性(除自动加的 `service.name`) */
|
|
30
|
+
resourceAttributes?: Record<string, string>;
|
|
31
|
+
}
|
|
32
|
+
/** `flushOtlpMetrics` 的入参 = payload 组装入参 + 传输入参 */
|
|
33
|
+
export interface OtlpFlushOptions extends OtlpMetricsOptions {
|
|
34
|
+
/** 采集端基地址(尾部斜杠已去掉) */
|
|
35
|
+
endpoint: string;
|
|
36
|
+
/** 单次导出请求超时(毫秒);非正数 = 不限 */
|
|
37
|
+
timeoutMs: number;
|
|
38
|
+
/** 导出失败回调(观测失败不得击穿业务) */
|
|
39
|
+
onExportError?: (err: unknown) => void;
|
|
40
|
+
}
|
|
41
|
+
export declare function buildOtlpPayload(state: MetricsState, opts: OtlpMetricsOptions): unknown;
|
|
42
|
+
export declare function flushOtlpMetrics(state: MetricsState, opts: OtlpFlushOptions): Promise<void>;
|