@cicctencent/agent-core 0.1.70 → 0.1.73
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/cjs/a2a/client.d.ts +39 -11
- package/dist/cjs/a2a/client.d.ts.map +1 -1
- package/dist/cjs/a2a/client.js +69 -22
- package/dist/cjs/a2a/client.js.map +1 -1
- package/dist/cjs/a2a/rest-client.d.ts +35 -9
- package/dist/cjs/a2a/rest-client.d.ts.map +1 -1
- package/dist/cjs/a2a/rest-client.js +65 -18
- package/dist/cjs/a2a/rest-client.js.map +1 -1
- package/dist/cjs/a2a/rest-runner.d.ts +6 -0
- package/dist/cjs/a2a/rest-runner.d.ts.map +1 -1
- package/dist/cjs/a2a/rest-runner.js +19 -7
- package/dist/cjs/a2a/rest-runner.js.map +1 -1
- package/dist/cjs/a2a/runner.d.ts +6 -0
- package/dist/cjs/a2a/runner.d.ts.map +1 -1
- package/dist/cjs/a2a/runner.js +24 -7
- package/dist/cjs/a2a/runner.js.map +1 -1
- package/dist/cjs/index.d.ts +5 -2
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +15 -10
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/interaction/service.d.ts +14 -0
- package/dist/cjs/interaction/service.d.ts.map +1 -1
- package/dist/cjs/interaction/service.js +114 -31
- package/dist/cjs/interaction/service.js.map +1 -1
- package/dist/cjs/interaction/store.d.ts +1 -0
- package/dist/cjs/interaction/store.d.ts.map +1 -1
- package/dist/cjs/interaction/store.js +10 -0
- package/dist/cjs/interaction/store.js.map +1 -1
- package/dist/cjs/interaction/types.d.ts +5 -1
- package/dist/cjs/interaction/types.d.ts.map +1 -1
- package/dist/cjs/interaction/types.js.map +1 -1
- package/dist/cjs/llm/debug.d.ts.map +1 -1
- package/dist/cjs/llm/debug.js +4 -1
- package/dist/cjs/llm/debug.js.map +1 -1
- package/dist/cjs/mcp/base-client.d.ts +19 -4
- package/dist/cjs/mcp/base-client.d.ts.map +1 -1
- package/dist/cjs/mcp/base-client.js +28 -8
- package/dist/cjs/mcp/base-client.js.map +1 -1
- package/dist/cjs/mcp/http-client.d.ts +5 -5
- package/dist/cjs/mcp/http-client.d.ts.map +1 -1
- package/dist/cjs/mcp/http-client.js +26 -21
- package/dist/cjs/mcp/http-client.js.map +1 -1
- package/dist/cjs/mcp/proxy-agent.d.ts +2 -50
- package/dist/cjs/mcp/proxy-agent.d.ts.map +1 -1
- package/dist/cjs/mcp/proxy-agent.js +12 -174
- package/dist/cjs/mcp/proxy-agent.js.map +1 -1
- package/dist/cjs/mcp/stdio-client.d.ts +1 -1
- package/dist/cjs/mcp/stdio-client.d.ts.map +1 -1
- package/dist/cjs/mcp/stdio-client.js +1 -1
- package/dist/cjs/mcp/stdio-client.js.map +1 -1
- package/dist/cjs/mcp/types.d.ts +8 -2
- package/dist/cjs/mcp/types.d.ts.map +1 -1
- package/dist/cjs/tool/ask-user.d.ts.map +1 -1
- package/dist/cjs/tool/ask-user.js +2 -0
- package/dist/cjs/tool/ask-user.js.map +1 -1
- package/dist/cjs/tool/delegate.d.ts +12 -1
- package/dist/cjs/tool/delegate.d.ts.map +1 -1
- package/dist/cjs/tool/delegate.js +21 -5
- package/dist/cjs/tool/delegate.js.map +1 -1
- package/dist/cjs/utils/header-vars.d.ts +18 -0
- package/dist/cjs/utils/header-vars.d.ts.map +1 -0
- package/dist/cjs/utils/header-vars.js +71 -0
- package/dist/cjs/utils/header-vars.js.map +1 -0
- package/dist/cjs/utils/proxy-agent.d.ts +53 -0
- package/dist/cjs/utils/proxy-agent.d.ts.map +1 -0
- package/dist/cjs/utils/proxy-agent.js +154 -0
- package/dist/cjs/utils/proxy-agent.js.map +1 -0
- package/dist/cjs/utils/proxy.d.ts +53 -0
- package/dist/cjs/utils/proxy.d.ts.map +1 -0
- package/dist/cjs/utils/proxy.js +148 -0
- package/dist/cjs/utils/proxy.js.map +1 -0
- package/dist/cjs/utils/system-proxy.d.ts +15 -0
- package/dist/cjs/utils/system-proxy.d.ts.map +1 -0
- package/dist/cjs/utils/system-proxy.js +133 -0
- package/dist/cjs/utils/system-proxy.js.map +1 -0
- package/dist/esm/a2a/client.d.ts +39 -11
- package/dist/esm/a2a/client.d.ts.map +1 -1
- package/dist/esm/a2a/client.js +69 -22
- package/dist/esm/a2a/client.js.map +1 -1
- package/dist/esm/a2a/rest-client.d.ts +35 -9
- package/dist/esm/a2a/rest-client.d.ts.map +1 -1
- package/dist/esm/a2a/rest-client.js +65 -18
- package/dist/esm/a2a/rest-client.js.map +1 -1
- package/dist/esm/a2a/rest-runner.d.ts +6 -0
- package/dist/esm/a2a/rest-runner.d.ts.map +1 -1
- package/dist/esm/a2a/rest-runner.js +19 -7
- package/dist/esm/a2a/rest-runner.js.map +1 -1
- package/dist/esm/a2a/runner.d.ts +6 -0
- package/dist/esm/a2a/runner.d.ts.map +1 -1
- package/dist/esm/a2a/runner.js +24 -7
- package/dist/esm/a2a/runner.js.map +1 -1
- package/dist/esm/index.d.ts +5 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/interaction/service.d.ts +14 -0
- package/dist/esm/interaction/service.d.ts.map +1 -1
- package/dist/esm/interaction/service.js +114 -31
- package/dist/esm/interaction/service.js.map +1 -1
- package/dist/esm/interaction/store.d.ts +1 -0
- package/dist/esm/interaction/store.d.ts.map +1 -1
- package/dist/esm/interaction/store.js +10 -0
- package/dist/esm/interaction/store.js.map +1 -1
- package/dist/esm/interaction/types.d.ts +5 -1
- package/dist/esm/interaction/types.d.ts.map +1 -1
- package/dist/esm/interaction/types.js.map +1 -1
- package/dist/esm/llm/debug.d.ts.map +1 -1
- package/dist/esm/llm/debug.js +4 -1
- package/dist/esm/llm/debug.js.map +1 -1
- package/dist/esm/mcp/base-client.d.ts +19 -4
- package/dist/esm/mcp/base-client.d.ts.map +1 -1
- package/dist/esm/mcp/base-client.js +28 -8
- package/dist/esm/mcp/base-client.js.map +1 -1
- package/dist/esm/mcp/http-client.d.ts +5 -5
- package/dist/esm/mcp/http-client.d.ts.map +1 -1
- package/dist/esm/mcp/http-client.js +25 -20
- package/dist/esm/mcp/http-client.js.map +1 -1
- package/dist/esm/mcp/proxy-agent.d.ts +2 -50
- package/dist/esm/mcp/proxy-agent.d.ts.map +1 -1
- package/dist/esm/mcp/proxy-agent.js +7 -168
- package/dist/esm/mcp/proxy-agent.js.map +1 -1
- package/dist/esm/mcp/stdio-client.d.ts +1 -1
- package/dist/esm/mcp/stdio-client.d.ts.map +1 -1
- package/dist/esm/mcp/stdio-client.js +1 -1
- package/dist/esm/mcp/stdio-client.js.map +1 -1
- package/dist/esm/mcp/types.d.ts +8 -2
- package/dist/esm/mcp/types.d.ts.map +1 -1
- package/dist/esm/tool/ask-user.d.ts.map +1 -1
- package/dist/esm/tool/ask-user.js +2 -0
- package/dist/esm/tool/ask-user.js.map +1 -1
- package/dist/esm/tool/delegate.d.ts +12 -1
- package/dist/esm/tool/delegate.d.ts.map +1 -1
- package/dist/esm/tool/delegate.js +21 -5
- package/dist/esm/tool/delegate.js.map +1 -1
- package/dist/esm/utils/header-vars.d.ts +18 -0
- package/dist/esm/utils/header-vars.d.ts.map +1 -0
- package/dist/esm/utils/header-vars.js +65 -0
- package/dist/esm/utils/header-vars.js.map +1 -0
- package/dist/esm/utils/proxy-agent.d.ts +53 -0
- package/dist/esm/utils/proxy-agent.d.ts.map +1 -0
- package/dist/esm/utils/proxy-agent.js +115 -0
- package/dist/esm/utils/proxy-agent.js.map +1 -0
- package/dist/esm/utils/proxy.d.ts +53 -0
- package/dist/esm/utils/proxy.d.ts.map +1 -0
- package/dist/esm/utils/proxy.js +109 -0
- package/dist/esm/utils/proxy.js.map +1 -0
- package/dist/esm/utils/system-proxy.d.ts +15 -0
- package/dist/esm/utils/system-proxy.d.ts.map +1 -0
- package/dist/esm/utils/system-proxy.js +128 -0
- package/dist/esm/utils/system-proxy.js.map +1 -0
- package/package.json +1 -1
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
// InteractionService — 用户交互请求管理
|
|
3
3
|
// 管理 pending 交互请求,支持暂停/恢复 Agent 运行
|
|
4
4
|
// ============================================================
|
|
5
|
+
/** 跨进程轮询间隔(毫秒) */
|
|
6
|
+
const CROSS_PROCESS_POLL_INTERVAL_MS = 1000;
|
|
5
7
|
/**
|
|
6
8
|
* InteractionService — 管理用户交互请求的生命周期
|
|
7
9
|
*
|
|
@@ -20,19 +22,85 @@ export class InteractionService {
|
|
|
20
22
|
this.store = store;
|
|
21
23
|
this.defaultTimeoutMs = defaultTimeoutMs;
|
|
22
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* 清理 waiter:清除超时和轮询定时器,从 map 中删除并返回
|
|
27
|
+
*/
|
|
28
|
+
clearWaiter(requestId) {
|
|
29
|
+
const waiter = this.waiters.get(requestId);
|
|
30
|
+
if (waiter) {
|
|
31
|
+
clearTimeout(waiter.timeout);
|
|
32
|
+
clearInterval(waiter.pollInterval);
|
|
33
|
+
if (waiter.abortSignal && waiter.abortListener) {
|
|
34
|
+
waiter.abortSignal.removeEventListener('abort', waiter.abortListener);
|
|
35
|
+
}
|
|
36
|
+
this.waiters.delete(requestId);
|
|
37
|
+
}
|
|
38
|
+
return waiter;
|
|
39
|
+
}
|
|
23
40
|
/**
|
|
24
41
|
* 创建交互请求并返回 Promise,等待用户回答
|
|
25
42
|
*/
|
|
26
43
|
requestInteraction(params) {
|
|
27
44
|
const request = this.createInteraction(params);
|
|
28
45
|
return new Promise((resolve, reject) => {
|
|
46
|
+
let settled = false;
|
|
47
|
+
// 包装 resolve/reject:调用时自动清理 timeout、pollInterval 和 abortListener,保证资源一定释放
|
|
48
|
+
const safeResolve = (answer) => {
|
|
49
|
+
if (settled)
|
|
50
|
+
return;
|
|
51
|
+
settled = true;
|
|
52
|
+
this.clearWaiter(request.requestId);
|
|
53
|
+
resolve(answer);
|
|
54
|
+
};
|
|
55
|
+
const safeReject = (reason) => {
|
|
56
|
+
if (settled)
|
|
57
|
+
return;
|
|
58
|
+
settled = true;
|
|
59
|
+
this.clearWaiter(request.requestId);
|
|
60
|
+
reject(reason);
|
|
61
|
+
};
|
|
62
|
+
if (params.abortSignal?.aborted) {
|
|
63
|
+
this.store.update(request.requestId, { status: 'cancelled' });
|
|
64
|
+
safeReject(new Error(`Interaction request ${request.requestId} was cancelled by abort`));
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
29
67
|
const timeout = setTimeout(() => {
|
|
30
|
-
this.waiters.delete(request.requestId);
|
|
31
|
-
request.status = 'expired';
|
|
32
68
|
this.store.update(request.requestId, { status: 'expired' });
|
|
33
|
-
|
|
69
|
+
safeReject(new Error(`Interaction request ${request.requestId} timed out after ${request.timeoutMs}ms`));
|
|
34
70
|
}, request.timeoutMs);
|
|
35
|
-
|
|
71
|
+
// 跨进程轮询:定期检测 store 中状态变化(其他进程 answer/cancel 后触发)
|
|
72
|
+
const pollInterval = setInterval(() => {
|
|
73
|
+
const current = this.store.get(request.requestId);
|
|
74
|
+
if (!current)
|
|
75
|
+
return; // 可能还未写入,忽略
|
|
76
|
+
if (current.status === 'answered') {
|
|
77
|
+
safeResolve(current.answer ?? { requestId: request.requestId, action: 'submit' });
|
|
78
|
+
}
|
|
79
|
+
else if (current.status === 'cancelled') {
|
|
80
|
+
safeReject(new Error(`Interaction request ${request.requestId} was cancelled`));
|
|
81
|
+
}
|
|
82
|
+
else if (current.status === 'expired') {
|
|
83
|
+
safeReject(new Error(`Interaction request ${request.requestId} expired`));
|
|
84
|
+
}
|
|
85
|
+
}, CROSS_PROCESS_POLL_INTERVAL_MS);
|
|
86
|
+
const abortListener = params.abortSignal
|
|
87
|
+
? () => {
|
|
88
|
+
this.store.update(request.requestId, { status: 'cancelled' });
|
|
89
|
+
safeReject(new Error(`Interaction request ${request.requestId} was cancelled by abort`));
|
|
90
|
+
}
|
|
91
|
+
: undefined;
|
|
92
|
+
if (params.abortSignal && abortListener) {
|
|
93
|
+
params.abortSignal.addEventListener('abort', abortListener, { once: true });
|
|
94
|
+
}
|
|
95
|
+
// 存入 waiter 的是 safeResolve/safeReject,外部调用时自动清理定时器
|
|
96
|
+
this.waiters.set(request.requestId, {
|
|
97
|
+
resolve: safeResolve,
|
|
98
|
+
reject: safeReject,
|
|
99
|
+
timeout,
|
|
100
|
+
pollInterval,
|
|
101
|
+
abortSignal: params.abortSignal,
|
|
102
|
+
abortListener,
|
|
103
|
+
});
|
|
36
104
|
// 通知前端:创建请求后立即触发 emit 回调,将 interaction-request 事件推送到 SSE,
|
|
37
105
|
// 否则前端永远收不到交互请求,用户无法作答,最终工具执行超时。
|
|
38
106
|
try {
|
|
@@ -73,40 +141,39 @@ export class InteractionService {
|
|
|
73
141
|
}
|
|
74
142
|
/**
|
|
75
143
|
* 回答交互请求
|
|
144
|
+
* 先更新 store(跨进程可见),再尝试 resolve 本地 waiter。
|
|
145
|
+
* 即使本地 waiter 不存在(跨进程场景),store 已更新,轮询方会检测到。
|
|
76
146
|
*/
|
|
77
147
|
answerInteraction(requestId, answer) {
|
|
78
148
|
const request = this.store.get(requestId);
|
|
79
149
|
if (!request || request.status !== 'pending')
|
|
80
150
|
return false;
|
|
151
|
+
// 先更新 store(跨进程可见),包含 answer 数据供轮询方读取
|
|
152
|
+
this.store.update(requestId, { status: 'answered', answeredAt: Date.now(), answer });
|
|
153
|
+
// 尝试 resolve 本地 waiter(同进程立即响应);safeResolve 会自动清理定时器
|
|
81
154
|
const waiter = this.waiters.get(requestId);
|
|
82
|
-
if (
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
this.waiters.delete(requestId);
|
|
87
|
-
// 更新状态
|
|
88
|
-
request.status = 'answered';
|
|
89
|
-
request.answeredAt = Date.now();
|
|
90
|
-
this.store.update(requestId, { status: 'answered', answeredAt: Date.now() });
|
|
91
|
-
// 解析 Promise
|
|
92
|
-
waiter.resolve(answer);
|
|
155
|
+
if (waiter) {
|
|
156
|
+
waiter.resolve(answer);
|
|
157
|
+
}
|
|
158
|
+
// 即使没有本地 waiter(跨进程场景),store 已更新,轮询方会检测到
|
|
93
159
|
return true;
|
|
94
160
|
}
|
|
95
161
|
/**
|
|
96
162
|
* 取消交互请求
|
|
163
|
+
* 先更新 store(跨进程可见),再尝试 reject 本地 waiter。
|
|
164
|
+
* 即使本地 waiter 不存在(跨进程场景),store 已更新,轮询方会检测到。
|
|
97
165
|
*/
|
|
98
166
|
cancelInteraction(requestId) {
|
|
99
167
|
const request = this.store.get(requestId);
|
|
100
168
|
if (!request || request.status !== 'pending')
|
|
101
169
|
return false;
|
|
102
|
-
|
|
103
|
-
if (!waiter)
|
|
104
|
-
return false;
|
|
105
|
-
clearTimeout(waiter.timeout);
|
|
106
|
-
this.waiters.delete(requestId);
|
|
107
|
-
request.status = 'cancelled';
|
|
170
|
+
// 先更新 store
|
|
108
171
|
this.store.update(requestId, { status: 'cancelled' });
|
|
109
|
-
|
|
172
|
+
// 尝试 reject 本地 waiter;safeReject 会自动清理定时器
|
|
173
|
+
const waiter = this.waiters.get(requestId);
|
|
174
|
+
if (waiter) {
|
|
175
|
+
waiter.reject(new Error(`Interaction request ${requestId} was cancelled`));
|
|
176
|
+
}
|
|
110
177
|
return true;
|
|
111
178
|
}
|
|
112
179
|
/**
|
|
@@ -130,6 +197,15 @@ export class InteractionService {
|
|
|
130
197
|
this.cancelInteraction(req.requestId);
|
|
131
198
|
}
|
|
132
199
|
}
|
|
200
|
+
/**
|
|
201
|
+
* 取消线程下所有 pending 请求(包含使用子会话 ID 创建的交互)
|
|
202
|
+
*/
|
|
203
|
+
cancelAllForThread(threadId) {
|
|
204
|
+
const pending = this.store.listPendingByThread(threadId);
|
|
205
|
+
for (const req of pending) {
|
|
206
|
+
this.cancelInteraction(req.requestId);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
133
209
|
/**
|
|
134
210
|
* 清理已完成/已过期/已取消的请求
|
|
135
211
|
*/
|
|
@@ -137,25 +213,32 @@ export class InteractionService {
|
|
|
137
213
|
let count = 0;
|
|
138
214
|
const now = Date.now();
|
|
139
215
|
// 遍历所有 waiter(它们对应的都是 pending 请求)
|
|
140
|
-
for (const [requestId
|
|
216
|
+
for (const [requestId] of this.waiters) {
|
|
141
217
|
const request = this.store.get(requestId);
|
|
142
218
|
if (!request) {
|
|
143
|
-
|
|
144
|
-
this.waiters.
|
|
219
|
+
// 请求已被删除,reject 并自动清理定时器
|
|
220
|
+
this.waiters.get(requestId)?.reject(new Error(`Interaction request ${requestId} not found during cleanup`));
|
|
221
|
+
count++;
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
if (request.status === 'answered') {
|
|
225
|
+
this.waiters.get(requestId)?.resolve(request.answer ?? { requestId, action: 'submit' });
|
|
226
|
+
count++;
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
if (request.status === 'cancelled') {
|
|
230
|
+
this.waiters.get(requestId)?.reject(new Error(`Interaction request ${requestId} was cancelled`));
|
|
145
231
|
count++;
|
|
146
232
|
continue;
|
|
147
233
|
}
|
|
148
|
-
if (request.status
|
|
149
|
-
|
|
150
|
-
this.waiters.delete(requestId);
|
|
234
|
+
if (request.status === 'expired') {
|
|
235
|
+
this.waiters.get(requestId)?.reject(new Error(`Interaction request ${requestId} expired`));
|
|
151
236
|
count++;
|
|
152
237
|
continue;
|
|
153
238
|
}
|
|
154
239
|
if (now - request.createdAt > olderThanMs) {
|
|
155
|
-
clearTimeout(waiter.timeout);
|
|
156
|
-
this.waiters.delete(requestId);
|
|
157
240
|
this.store.update(requestId, { status: 'expired' });
|
|
158
|
-
|
|
241
|
+
this.waiters.get(requestId)?.reject(new Error(`Interaction request ${requestId} expired during cleanup`));
|
|
159
242
|
count++;
|
|
160
243
|
}
|
|
161
244
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/interaction/service.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,gCAAgC;AAChC,mCAAmC;AACnC,+DAA+D;
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/interaction/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ export declare class InMemoryInteractionStore implements InteractionStore {
|
|
|
4
4
|
save(request: InteractionRequest): void;
|
|
5
5
|
get(requestId: string): InteractionRequest | undefined;
|
|
6
6
|
listPending(sessionId: string): InteractionRequest[];
|
|
7
|
+
listPendingByThread(threadId: string | number): InteractionRequest[];
|
|
7
8
|
update(requestId: string, updates: Partial<InteractionRequest>): void;
|
|
8
9
|
delete(requestId: string): void;
|
|
9
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/interaction/store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEvE,qBAAa,wBAAyB,YAAW,gBAAgB;IAC/D,OAAO,CAAC,QAAQ,CAAyC;IAEzD,IAAI,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAIvC,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAKtD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,EAAE;IAUpD,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;IAOrE,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAGhC"}
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/interaction/store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEvE,qBAAa,wBAAyB,YAAW,gBAAgB;IAC/D,OAAO,CAAC,QAAQ,CAAyC;IAEzD,IAAI,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAIvC,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAKtD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,EAAE;IAUpD,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,kBAAkB,EAAE;IAWpE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;IAOrE,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAGhC"}
|
|
@@ -19,6 +19,16 @@ export class InMemoryInteractionStore {
|
|
|
19
19
|
}
|
|
20
20
|
return results.sort((a, b) => b.createdAt - a.createdAt);
|
|
21
21
|
}
|
|
22
|
+
listPendingByThread(threadId) {
|
|
23
|
+
const normalizedThreadId = String(threadId);
|
|
24
|
+
const results = [];
|
|
25
|
+
for (const r of this.requests.values()) {
|
|
26
|
+
if (r.threadId != null && String(r.threadId) === normalizedThreadId && r.status === 'pending') {
|
|
27
|
+
results.push({ ...r });
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return results.sort((a, b) => b.createdAt - a.createdAt);
|
|
31
|
+
}
|
|
22
32
|
update(requestId, updates) {
|
|
23
33
|
const existing = this.requests.get(requestId);
|
|
24
34
|
if (existing) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/interaction/store.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,kCAAkC;AAClC,+DAA+D;AAI/D,MAAM,OAAO,wBAAwB;IAC3B,QAAQ,GAAG,IAAI,GAAG,EAA8B,CAAC;IAEzD,IAAI,CAAC,OAA2B;QAC9B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,GAAG,CAAC,SAAiB;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAClC,CAAC;IAED,WAAW,CAAC,SAAiB;QAC3B,MAAM,OAAO,GAAyB,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACxD,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,SAAiB,EAAE,OAAoC;QAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,MAAM,CAAC,SAAiB;QACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/interaction/store.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,kCAAkC;AAClC,+DAA+D;AAI/D,MAAM,OAAO,wBAAwB;IAC3B,QAAQ,GAAG,IAAI,GAAG,EAA8B,CAAC;IAEzD,IAAI,CAAC,OAA2B;QAC9B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,GAAG,CAAC,SAAiB;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAClC,CAAC;IAED,WAAW,CAAC,SAAiB;QAC3B,MAAM,OAAO,GAAyB,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACxD,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3D,CAAC;IAED,mBAAmB,CAAC,QAAyB;QAC3C,MAAM,kBAAkB,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAyB,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,kBAAkB,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9F,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,SAAiB,EAAE,OAAoC;QAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,MAAM,CAAC,SAAiB;QACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -51,6 +51,8 @@ export interface InteractionRequest {
|
|
|
51
51
|
createdAt: number;
|
|
52
52
|
/** 回答时间(毫秒时间戳) */
|
|
53
53
|
answeredAt?: number;
|
|
54
|
+
/** 用户回答(answered 状态时存在,跨进程轮询方通过此字段获取答案) */
|
|
55
|
+
answer?: InteractionAnswer;
|
|
54
56
|
/** 扩展字段(上层可附加任意数据,如 permissionId 用于权限审批联动) */
|
|
55
57
|
meta?: Record<string, unknown>;
|
|
56
58
|
}
|
|
@@ -68,7 +70,7 @@ export interface InteractionAnswer {
|
|
|
68
70
|
/** 交互请求事件(SSE 发送给前端) */
|
|
69
71
|
export interface InteractionRequestEvent {
|
|
70
72
|
type: 'interaction-request';
|
|
71
|
-
data: Omit<InteractionRequest, 'status' | 'createdAt' | 'answeredAt'>;
|
|
73
|
+
data: Omit<InteractionRequest, 'status' | 'createdAt' | 'answeredAt' | 'answer'>;
|
|
72
74
|
}
|
|
73
75
|
/** 交互回答事件(SSE 发送给前端,通知前端该请求已处理) */
|
|
74
76
|
export interface InteractionAnswerEvent {
|
|
@@ -87,6 +89,8 @@ export interface InteractionStore {
|
|
|
87
89
|
get(requestId: string): InteractionRequest | undefined;
|
|
88
90
|
/** 获取会话下所有 pending 请求 */
|
|
89
91
|
listPending(sessionId: string): InteractionRequest[];
|
|
92
|
+
/** 获取线程下所有 pending 请求(用于取消主会话及子会话交互) */
|
|
93
|
+
listPendingByThread(threadId: string | number): InteractionRequest[];
|
|
90
94
|
/** 更新交互请求状态 */
|
|
91
95
|
update(requestId: string, updates: Partial<InteractionRequest>): void;
|
|
92
96
|
/** 删除交互请求 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/interaction/types.ts"],"names":[],"mappings":"AAKA,aAAa;AACb,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,QAAQ,GAAG,cAAc,GAAG,OAAO,GAAG,UAAU,CAAC;AAE3F,aAAa;AACb,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,WAAW,GAAG,MAAM,CAAC;AAEpE,aAAa;AACb,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;AAEjF,WAAW;AACX,MAAM,WAAW,iBAAiB;IAChC,aAAa;IACb,EAAE,EAAE,MAAM,CAAC;IACX,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU;IACV,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kBAAkB;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,WAAW;AACX,MAAM,WAAW,kBAAkB;IACjC,cAAc;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY;IACZ,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,2BAA2B;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS;IACT,MAAM,EAAE,iBAAiB,CAAC;IAC1B,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW;IACX,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS;IACT,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC9B,yCAAyC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW;IACX,MAAM,EAAE,iBAAiB,CAAC;IAC1B,kBAAkB;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,WAAW;AACX,MAAM,WAAW,iBAAiB;IAChC,YAAY;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW;IACX,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC9B;AAED,wBAAwB;AACxB,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/interaction/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/interaction/types.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,4BAA4B;AAC5B,6BAA6B;AAC7B,+DAA+D;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/interaction/types.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,4BAA4B;AAC5B,6BAA6B;AAC7B,+DAA+D;AA6G/D,kBAAkB;AAClB,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../src/llm/debug.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAgB,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../src/llm/debug.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAgB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGjE,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAED,uCAAuC;AACvC,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAS/E;AAED,MAAM,WAAW,uBAAuB;IACtC,eAAe;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,cAAc,CAAC,EAAE,WAAW,CAAC;IAC7B,kCAAkC;IAClC,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACtC,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,QAAQ,CAAC,CAwDnB"}
|
package/dist/esm/llm/debug.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
// 提供统一的 fetch 包装(fetchWithDiagnostics),在调试模式下捕获
|
|
6
6
|
// 请求域名、解析到的目标 IP(DNS)、代理配置、耗时、HTTP 状态等信息,
|
|
7
7
|
// 并通过 LLMDebugCallback 抛给上层(LLMCaller → AgentEvent)。
|
|
8
|
+
import { createProxyDispatcher } from "../utils/proxy.js";
|
|
8
9
|
/** 从 URL 中提取 host(含端口),解析失败返回原始 URL */
|
|
9
10
|
export function extractHost(url) {
|
|
10
11
|
try {
|
|
@@ -57,13 +58,15 @@ export async function fetchWithDiagnostics(url, init, opts) {
|
|
|
57
58
|
else
|
|
58
59
|
externalSignal.addEventListener('abort', () => controller.abort(), { once: true });
|
|
59
60
|
}
|
|
61
|
+
// 创建 ProxyAgent dispatcher(仅在有代理时)
|
|
62
|
+
const dispatcher = await createProxyDispatcher(opts.proxy);
|
|
60
63
|
let res;
|
|
61
64
|
let errMsg;
|
|
62
65
|
try {
|
|
63
66
|
res = await fetch(url, {
|
|
64
67
|
...init,
|
|
65
68
|
signal: controller.signal,
|
|
66
|
-
...(
|
|
69
|
+
...(dispatcher ? { dispatcher } : {}),
|
|
67
70
|
});
|
|
68
71
|
}
|
|
69
72
|
catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../../src/llm/debug.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,yBAAyB;AACzB,+DAA+D;AAC/D,EAAE;AACF,gDAAgD;AAChD,0CAA0C;AAC1C,qDAAqD;
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../../src/llm/debug.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,10 @@ interface JsonRpcResponse {
|
|
|
25
25
|
*/
|
|
26
26
|
export declare abstract class MCPClientBase implements MCPClient {
|
|
27
27
|
protected config: MCPServerConfig;
|
|
28
|
+
/** 默认运行时变量(来自 config.vars) */
|
|
29
|
+
protected contextVars?: Record<string, unknown>;
|
|
30
|
+
/** 实际使用的代理地址(由子类在 connect 时解析并写入;stdio 不设置则为 undefined) */
|
|
31
|
+
protected proxyUrl?: string;
|
|
28
32
|
protected connected: boolean;
|
|
29
33
|
private requestId;
|
|
30
34
|
/** 调试 trace 回调 */
|
|
@@ -35,15 +39,25 @@ export declare abstract class MCPClientBase implements MCPClient {
|
|
|
35
39
|
protected abstract doConnect(config: MCPServerConfig): Promise<void>;
|
|
36
40
|
/** 断开物理连接 */
|
|
37
41
|
protected abstract doDisconnect(): void;
|
|
38
|
-
/**
|
|
39
|
-
|
|
42
|
+
/**
|
|
43
|
+
* 发送 JSON-RPC 消息到 MCP 服务端
|
|
44
|
+
* @param vars 本次请求生效的运行时变量(contextVars + 调用时传入的 vars 合并),随请求显式传递,
|
|
45
|
+
* 不作为实例共享状态,从而消除同一客户端并发调用时的 vars race。
|
|
46
|
+
*/
|
|
47
|
+
protected abstract send(request: JsonRpcRequest, vars?: Record<string, unknown>): void;
|
|
40
48
|
connect(config: MCPServerConfig): Promise<void>;
|
|
41
49
|
listTools(): Promise<ToolDefinition[]>;
|
|
42
|
-
callTool(name: string, args: Record<string, unknown>): Promise<string>;
|
|
50
|
+
callTool(name: string, args: Record<string, unknown>, vars?: Record<string, unknown>): Promise<string>;
|
|
43
51
|
disconnect(): void;
|
|
44
52
|
isConnected(): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* 更新运行时变量(如 userId / userMail)。
|
|
55
|
+
* 后续请求(含 callTool 时未单独传入 vars 的情况)将使用更新后的值,
|
|
56
|
+
* 用于注入到 headers / auth 的 ${vars.x} 占位符。
|
|
57
|
+
*/
|
|
58
|
+
setContextVars(vars: Record<string, unknown>): void;
|
|
45
59
|
/** 发送 JSON-RPC 请求并等待响应 */
|
|
46
|
-
protected call(method: string, params?: Record<string, unknown>): Promise<unknown>;
|
|
60
|
+
protected call(method: string, params?: Record<string, unknown>, vars?: Record<string, unknown>): Promise<unknown>;
|
|
47
61
|
/** 发送 JSON-RPC 通知(无 id,无响应) */
|
|
48
62
|
protected notify(method: string, params?: Record<string, unknown>): void;
|
|
49
63
|
/** 子类收到 JSON-RPC 响应时调用此方法 */
|
|
@@ -58,6 +72,7 @@ export declare abstract class MCPClientBase implements MCPClient {
|
|
|
58
72
|
payload?: any;
|
|
59
73
|
error?: string;
|
|
60
74
|
exception?: any;
|
|
75
|
+
proxy?: string;
|
|
61
76
|
}): void;
|
|
62
77
|
}
|
|
63
78
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-client.d.ts","sourceRoot":"","sources":["../../../src/mcp/base-client.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"base-client.d.ts","sourceRoot":"","sources":["../../../src/mcp/base-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
// ============================================================
|
|
2
2
|
// MCPClientBase — JSON-RPC 2.0 基础层
|
|
3
3
|
// ============================================================
|
|
4
|
+
import { interpolateValue } from "../utils/header-vars.js";
|
|
4
5
|
/**
|
|
5
6
|
* MCPClient 抽象基类
|
|
6
7
|
* 子类只需实现 send() 和 doConnect() / doDisconnect()
|
|
7
8
|
*/
|
|
8
9
|
export class MCPClientBase {
|
|
9
10
|
config;
|
|
11
|
+
/** 默认运行时变量(来自 config.vars) */
|
|
12
|
+
contextVars;
|
|
13
|
+
/** 实际使用的代理地址(由子类在 connect 时解析并写入;stdio 不设置则为 undefined) */
|
|
14
|
+
proxyUrl;
|
|
10
15
|
connected = false;
|
|
11
16
|
requestId = 0;
|
|
12
17
|
/** 调试 trace 回调 */
|
|
@@ -16,6 +21,7 @@ export class MCPClientBase {
|
|
|
16
21
|
// ---- 公共接口 ----
|
|
17
22
|
async connect(config) {
|
|
18
23
|
this.config = config;
|
|
24
|
+
this.contextVars = config.vars;
|
|
19
25
|
this.onDebugTrace = config.onDebugTrace;
|
|
20
26
|
await this.doConnect(config);
|
|
21
27
|
this.connected = true;
|
|
@@ -41,8 +47,8 @@ export class MCPClientBase {
|
|
|
41
47
|
},
|
|
42
48
|
}));
|
|
43
49
|
}
|
|
44
|
-
async callTool(name, args) {
|
|
45
|
-
const result = await this.call('tools/call', { name, arguments: args });
|
|
50
|
+
async callTool(name, args, vars) {
|
|
51
|
+
const result = await this.call('tools/call', { name, arguments: args }, vars);
|
|
46
52
|
if (result?.isError) {
|
|
47
53
|
const errMsg = result.content?.map(c => c.text || '').join('\n') || 'MCP tool returned error';
|
|
48
54
|
throw new Error(errMsg);
|
|
@@ -63,10 +69,24 @@ export class MCPClientBase {
|
|
|
63
69
|
isConnected() {
|
|
64
70
|
return this.connected;
|
|
65
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* 更新运行时变量(如 userId / userMail)。
|
|
74
|
+
* 后续请求(含 callTool 时未单独传入 vars 的情况)将使用更新后的值,
|
|
75
|
+
* 用于注入到 headers / auth 的 ${vars.x} 占位符。
|
|
76
|
+
*/
|
|
77
|
+
setContextVars(vars) {
|
|
78
|
+
this.contextVars = { ...(this.contextVars || {}), ...vars };
|
|
79
|
+
}
|
|
66
80
|
// ---- JSON-RPC 核心 ----
|
|
67
81
|
/** 发送 JSON-RPC 请求并等待响应 */
|
|
68
|
-
call(method, params) {
|
|
82
|
+
call(method, params, vars) {
|
|
69
83
|
const id = ++this.requestId;
|
|
84
|
+
// 合并运行时变量:默认 config.vars(contextVars),本次调用传入的 vars 可覆盖。
|
|
85
|
+
// 关键:合并为局部变量 effectiveVars 并随请求向下传递,绝不写入实例共享字段,
|
|
86
|
+
// 因此同一客户端的并发调用在 vars 上不存在覆盖竞争(消除 vars race)。
|
|
87
|
+
const effectiveVars = { ...this.contextVars, ...(vars || {}) };
|
|
88
|
+
// 对请求参数进行变量插值(${vars.x}/${env.x}/${x}),支持静态参数注入运行时变量
|
|
89
|
+
const resolvedParams = params ? interpolateValue(params, effectiveVars) : params;
|
|
70
90
|
const timeout = this.config.timeout || 30000;
|
|
71
91
|
const startTime = Date.now();
|
|
72
92
|
return new Promise((resolve, reject) => {
|
|
@@ -76,14 +96,14 @@ export class MCPClientBase {
|
|
|
76
96
|
step: method,
|
|
77
97
|
title: `MCP ${method} 超时`,
|
|
78
98
|
duration: `${Date.now() - startTime}ms`,
|
|
79
|
-
request: this.buildDebugRequest(method,
|
|
99
|
+
request: this.buildDebugRequest(method, resolvedParams),
|
|
80
100
|
error: `MCP call '${method}' timed out after ${timeout}ms`,
|
|
81
101
|
});
|
|
82
102
|
reject(new Error(`MCP call '${method}' timed out after ${timeout}ms`));
|
|
83
103
|
}, timeout);
|
|
84
104
|
this.pending.set(id, { resolve, reject, timer, method, startTime });
|
|
85
105
|
try {
|
|
86
|
-
this.send({ jsonrpc: '2.0', id, method, params });
|
|
106
|
+
this.send({ jsonrpc: '2.0', id, method, params: resolvedParams }, effectiveVars);
|
|
87
107
|
}
|
|
88
108
|
catch (e) {
|
|
89
109
|
clearTimeout(timer);
|
|
@@ -92,7 +112,7 @@ export class MCPClientBase {
|
|
|
92
112
|
step: method,
|
|
93
113
|
title: `MCP ${method} 发送失败`,
|
|
94
114
|
duration: `${Date.now() - startTime}ms`,
|
|
95
|
-
request: this.buildDebugRequest(method,
|
|
115
|
+
request: this.buildDebugRequest(method, resolvedParams),
|
|
96
116
|
error: e?.message || String(e),
|
|
97
117
|
exception: { name: e?.name || '', message: e?.message || '', code: e?.code || '' },
|
|
98
118
|
});
|
|
@@ -103,7 +123,7 @@ export class MCPClientBase {
|
|
|
103
123
|
/** 发送 JSON-RPC 通知(无 id,无响应) */
|
|
104
124
|
notify(method, params) {
|
|
105
125
|
try {
|
|
106
|
-
this.send({ jsonrpc: '2.0', id: 0, method, params });
|
|
126
|
+
this.send({ jsonrpc: '2.0', id: 0, method, params }, this.contextVars);
|
|
107
127
|
}
|
|
108
128
|
catch {
|
|
109
129
|
// 通知失败静默忽略
|
|
@@ -151,7 +171,7 @@ export class MCPClientBase {
|
|
|
151
171
|
if (!this.onDebugTrace)
|
|
152
172
|
return;
|
|
153
173
|
try {
|
|
154
|
-
this.onDebugTrace(trace);
|
|
174
|
+
this.onDebugTrace({ ...trace, proxy: this.proxyUrl });
|
|
155
175
|
}
|
|
156
176
|
catch { /* ignore */ }
|
|
157
177
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-client.js","sourceRoot":"","sources":["../../../src/mcp/base-client.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,mCAAmC;AACnC,+DAA+D;
|
|
1
|
+
{"version":3,"file":"base-client.js","sourceRoot":"","sources":["../../../src/mcp/base-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,21 +3,21 @@ import type { MCPServerConfig } from './types.js';
|
|
|
3
3
|
export declare class HttpMCPClient extends MCPClientBase {
|
|
4
4
|
private endpoint;
|
|
5
5
|
private sessionId?;
|
|
6
|
-
private
|
|
7
|
-
/**
|
|
8
|
-
private
|
|
6
|
+
private proxyDispatcher?;
|
|
7
|
+
/** 用户自定义请求头模板(值可含 ${vars.x} / ${env.x} 占位符,发送时解析) */
|
|
8
|
+
private headerTemplates?;
|
|
9
9
|
/** 结构化鉴权配置 */
|
|
10
10
|
private authConfig?;
|
|
11
11
|
protected doConnect(config: MCPServerConfig): Promise<void>;
|
|
12
12
|
protected doDisconnect(): void;
|
|
13
|
-
/** 根据 auth
|
|
13
|
+
/** 根据 auth 配置生成鉴权请求头(value 支持 ${vars.x} / ${env.x} 模板)。vars 随请求显式传入,避免共享状态。 */
|
|
14
14
|
private buildAuthHeaders;
|
|
15
15
|
protected send(request: {
|
|
16
16
|
jsonrpc: string;
|
|
17
17
|
id: number;
|
|
18
18
|
method: string;
|
|
19
19
|
params?: Record<string, unknown>;
|
|
20
|
-
}): void;
|
|
20
|
+
}, vars?: Record<string, unknown>): void;
|
|
21
21
|
/** 解析 SSE 文本块中的 JSON-RPC 响应 */
|
|
22
22
|
private parseSSE;
|
|
23
23
|
private headersToObject;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../src/mcp/http-client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../src/mcp/http-client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,qBAAa,aAAc,SAAQ,aAAa;IAC9C,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,qDAAqD;IACrD,OAAO,CAAC,eAAe,CAAC,CAAyB;IACjD,cAAc;IACd,OAAO,CAAC,UAAU,CAAC,CAAiD;cACpD,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjE,SAAS,CAAC,YAAY,IAAI,IAAI;IAS9B,+EAA+E;IAC/E,OAAO,CAAC,gBAAgB;IAmBxB,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAgHhJ,+BAA+B;IAC/B,OAAO,CAAC,QAAQ;IAmBhB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;CAe3B"}
|