@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
|
@@ -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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"}
|
|
@@ -4,12 +4,17 @@
|
|
|
4
4
|
// ============================================================
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.MCPClientBase = void 0;
|
|
7
|
+
const header_vars_ts_1 = require("../utils/header-vars.js");
|
|
7
8
|
/**
|
|
8
9
|
* MCPClient 抽象基类
|
|
9
10
|
* 子类只需实现 send() 和 doConnect() / doDisconnect()
|
|
10
11
|
*/
|
|
11
12
|
class MCPClientBase {
|
|
12
13
|
config;
|
|
14
|
+
/** 默认运行时变量(来自 config.vars) */
|
|
15
|
+
contextVars;
|
|
16
|
+
/** 实际使用的代理地址(由子类在 connect 时解析并写入;stdio 不设置则为 undefined) */
|
|
17
|
+
proxyUrl;
|
|
13
18
|
connected = false;
|
|
14
19
|
requestId = 0;
|
|
15
20
|
/** 调试 trace 回调 */
|
|
@@ -19,6 +24,7 @@ class MCPClientBase {
|
|
|
19
24
|
// ---- 公共接口 ----
|
|
20
25
|
async connect(config) {
|
|
21
26
|
this.config = config;
|
|
27
|
+
this.contextVars = config.vars;
|
|
22
28
|
this.onDebugTrace = config.onDebugTrace;
|
|
23
29
|
await this.doConnect(config);
|
|
24
30
|
this.connected = true;
|
|
@@ -44,8 +50,8 @@ class MCPClientBase {
|
|
|
44
50
|
},
|
|
45
51
|
}));
|
|
46
52
|
}
|
|
47
|
-
async callTool(name, args) {
|
|
48
|
-
const result = await this.call('tools/call', { name, arguments: args });
|
|
53
|
+
async callTool(name, args, vars) {
|
|
54
|
+
const result = await this.call('tools/call', { name, arguments: args }, vars);
|
|
49
55
|
if (result?.isError) {
|
|
50
56
|
const errMsg = result.content?.map(c => c.text || '').join('\n') || 'MCP tool returned error';
|
|
51
57
|
throw new Error(errMsg);
|
|
@@ -66,10 +72,24 @@ class MCPClientBase {
|
|
|
66
72
|
isConnected() {
|
|
67
73
|
return this.connected;
|
|
68
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* 更新运行时变量(如 userId / userMail)。
|
|
77
|
+
* 后续请求(含 callTool 时未单独传入 vars 的情况)将使用更新后的值,
|
|
78
|
+
* 用于注入到 headers / auth 的 ${vars.x} 占位符。
|
|
79
|
+
*/
|
|
80
|
+
setContextVars(vars) {
|
|
81
|
+
this.contextVars = { ...(this.contextVars || {}), ...vars };
|
|
82
|
+
}
|
|
69
83
|
// ---- JSON-RPC 核心 ----
|
|
70
84
|
/** 发送 JSON-RPC 请求并等待响应 */
|
|
71
|
-
call(method, params) {
|
|
85
|
+
call(method, params, vars) {
|
|
72
86
|
const id = ++this.requestId;
|
|
87
|
+
// 合并运行时变量:默认 config.vars(contextVars),本次调用传入的 vars 可覆盖。
|
|
88
|
+
// 关键:合并为局部变量 effectiveVars 并随请求向下传递,绝不写入实例共享字段,
|
|
89
|
+
// 因此同一客户端的并发调用在 vars 上不存在覆盖竞争(消除 vars race)。
|
|
90
|
+
const effectiveVars = { ...this.contextVars, ...(vars || {}) };
|
|
91
|
+
// 对请求参数进行变量插值(${vars.x}/${env.x}/${x}),支持静态参数注入运行时变量
|
|
92
|
+
const resolvedParams = params ? (0, header_vars_ts_1.interpolateValue)(params, effectiveVars) : params;
|
|
73
93
|
const timeout = this.config.timeout || 30000;
|
|
74
94
|
const startTime = Date.now();
|
|
75
95
|
return new Promise((resolve, reject) => {
|
|
@@ -79,14 +99,14 @@ class MCPClientBase {
|
|
|
79
99
|
step: method,
|
|
80
100
|
title: `MCP ${method} 超时`,
|
|
81
101
|
duration: `${Date.now() - startTime}ms`,
|
|
82
|
-
request: this.buildDebugRequest(method,
|
|
102
|
+
request: this.buildDebugRequest(method, resolvedParams),
|
|
83
103
|
error: `MCP call '${method}' timed out after ${timeout}ms`,
|
|
84
104
|
});
|
|
85
105
|
reject(new Error(`MCP call '${method}' timed out after ${timeout}ms`));
|
|
86
106
|
}, timeout);
|
|
87
107
|
this.pending.set(id, { resolve, reject, timer, method, startTime });
|
|
88
108
|
try {
|
|
89
|
-
this.send({ jsonrpc: '2.0', id, method, params });
|
|
109
|
+
this.send({ jsonrpc: '2.0', id, method, params: resolvedParams }, effectiveVars);
|
|
90
110
|
}
|
|
91
111
|
catch (e) {
|
|
92
112
|
clearTimeout(timer);
|
|
@@ -95,7 +115,7 @@ class MCPClientBase {
|
|
|
95
115
|
step: method,
|
|
96
116
|
title: `MCP ${method} 发送失败`,
|
|
97
117
|
duration: `${Date.now() - startTime}ms`,
|
|
98
|
-
request: this.buildDebugRequest(method,
|
|
118
|
+
request: this.buildDebugRequest(method, resolvedParams),
|
|
99
119
|
error: e?.message || String(e),
|
|
100
120
|
exception: { name: e?.name || '', message: e?.message || '', code: e?.code || '' },
|
|
101
121
|
});
|
|
@@ -106,7 +126,7 @@ class MCPClientBase {
|
|
|
106
126
|
/** 发送 JSON-RPC 通知(无 id,无响应) */
|
|
107
127
|
notify(method, params) {
|
|
108
128
|
try {
|
|
109
|
-
this.send({ jsonrpc: '2.0', id: 0, method, params });
|
|
129
|
+
this.send({ jsonrpc: '2.0', id: 0, method, params }, this.contextVars);
|
|
110
130
|
}
|
|
111
131
|
catch {
|
|
112
132
|
// 通知失败静默忽略
|
|
@@ -154,7 +174,7 @@ class MCPClientBase {
|
|
|
154
174
|
if (!this.onDebugTrace)
|
|
155
175
|
return;
|
|
156
176
|
try {
|
|
157
|
-
this.onDebugTrace(trace);
|
|
177
|
+
this.onDebugTrace({ ...trace, proxy: this.proxyUrl });
|
|
158
178
|
}
|
|
159
179
|
catch { /* ignore */ }
|
|
160
180
|
}
|
|
@@ -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"}
|
|
@@ -5,13 +5,14 @@
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.HttpMCPClient = void 0;
|
|
7
7
|
const base_client_ts_1 = require("./base-client.js");
|
|
8
|
-
const
|
|
8
|
+
const proxy_ts_1 = require("../utils/proxy.js");
|
|
9
|
+
const header_vars_ts_1 = require("../utils/header-vars.js");
|
|
9
10
|
class HttpMCPClient extends base_client_ts_1.MCPClientBase {
|
|
10
11
|
endpoint = '';
|
|
11
12
|
sessionId;
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
|
|
13
|
+
proxyDispatcher;
|
|
14
|
+
/** 用户自定义请求头模板(值可含 ${vars.x} / ${env.x} 占位符,发送时解析) */
|
|
15
|
+
headerTemplates;
|
|
15
16
|
/** 结构化鉴权配置 */
|
|
16
17
|
authConfig;
|
|
17
18
|
async doConnect(config) {
|
|
@@ -19,38 +20,41 @@ class HttpMCPClient extends base_client_ts_1.MCPClientBase {
|
|
|
19
20
|
throw new Error(`${config.transport} transport requires an "endpoint" URL in config`);
|
|
20
21
|
}
|
|
21
22
|
this.endpoint = config.endpoint;
|
|
22
|
-
this.proxyUrl = (0,
|
|
23
|
-
this.
|
|
23
|
+
this.proxyUrl = (0, proxy_ts_1.resolveProxyAgentForCategory)(config.proxyCategory, 'MCP:HTTP');
|
|
24
|
+
this.proxyDispatcher = await (0, proxy_ts_1.createProxyDispatcher)(this.proxyUrl);
|
|
25
|
+
this.headerTemplates = config.headers;
|
|
24
26
|
this.authConfig = config.auth;
|
|
25
27
|
this.onDebugTrace = config.onDebugTrace;
|
|
26
28
|
}
|
|
27
29
|
doDisconnect() {
|
|
28
30
|
this.endpoint = '';
|
|
29
31
|
this.sessionId = undefined;
|
|
30
|
-
this.
|
|
32
|
+
this.headerTemplates = undefined;
|
|
31
33
|
this.authConfig = undefined;
|
|
32
34
|
this.proxyUrl = undefined;
|
|
35
|
+
this.proxyDispatcher = undefined;
|
|
33
36
|
}
|
|
34
|
-
/** 根据 auth
|
|
35
|
-
buildAuthHeaders() {
|
|
37
|
+
/** 根据 auth 配置生成鉴权请求头(value 支持 ${vars.x} / ${env.x} 模板)。vars 随请求显式传入,避免共享状态。 */
|
|
38
|
+
buildAuthHeaders(vars) {
|
|
36
39
|
if (!this.authConfig)
|
|
37
40
|
return {};
|
|
38
41
|
const { type, value, name } = this.authConfig;
|
|
42
|
+
const resolved = (0, header_vars_ts_1.interpolateHeaderValue)(value, vars);
|
|
39
43
|
switch (type) {
|
|
40
44
|
case 'bearer':
|
|
41
|
-
return { Authorization: `Bearer ${
|
|
45
|
+
return { Authorization: `Bearer ${resolved}` };
|
|
42
46
|
case 'basic':
|
|
43
47
|
// value 已是 base64(user:pass) 编码
|
|
44
|
-
return { Authorization: `Basic ${
|
|
48
|
+
return { Authorization: `Basic ${resolved}` };
|
|
45
49
|
case 'apiKey':
|
|
46
|
-
return { [name || 'X-API-Key']:
|
|
50
|
+
return { [name || 'X-API-Key']: resolved };
|
|
47
51
|
case 'custom':
|
|
48
|
-
return { [name || 'X-Custom-Auth']:
|
|
52
|
+
return { [name || 'X-Custom-Auth']: resolved };
|
|
49
53
|
default:
|
|
50
54
|
return {};
|
|
51
55
|
}
|
|
52
56
|
}
|
|
53
|
-
send(request) {
|
|
57
|
+
send(request, vars) {
|
|
54
58
|
// 通知(id=0)不需要响应,用 fire-and-forget
|
|
55
59
|
const isNotification = request.id === 0;
|
|
56
60
|
const headers = {
|
|
@@ -62,22 +66,23 @@ class HttpMCPClient extends base_client_ts_1.MCPClientBase {
|
|
|
62
66
|
headers['Mcp-Session-Id'] = this.sessionId;
|
|
63
67
|
}
|
|
64
68
|
// 注入结构化鉴权头(优先于自定义 headers,确保鉴权不被覆盖)
|
|
65
|
-
Object.assign(headers, this.buildAuthHeaders());
|
|
66
|
-
//
|
|
67
|
-
|
|
68
|
-
|
|
69
|
+
Object.assign(headers, this.buildAuthHeaders(vars));
|
|
70
|
+
// 注入用户自定义请求头(最后注入,允许覆盖默认值;支持 ${vars.x}/${env.x} 模板)
|
|
71
|
+
// vars 随本次请求显式传入,同一客户端并发调用互不干扰
|
|
72
|
+
if (this.headerTemplates) {
|
|
73
|
+
Object.assign(headers, (0, header_vars_ts_1.resolveHeaderTemplates)(this.headerTemplates, vars));
|
|
69
74
|
}
|
|
70
75
|
const body = JSON.stringify(request);
|
|
71
76
|
const startTime = Date.now();
|
|
72
|
-
// 使用 Node.js
|
|
77
|
+
// 使用 undici ProxyAgent dispatcher 支持代理(Node.js 原生 fetch 不支持 proxy 选项)
|
|
73
78
|
const fetchOptions = {
|
|
74
79
|
method: 'POST',
|
|
75
80
|
headers,
|
|
76
81
|
body,
|
|
77
82
|
signal: isNotification ? AbortSignal.timeout(10000) : undefined,
|
|
78
83
|
};
|
|
79
|
-
if (this.
|
|
80
|
-
fetchOptions.
|
|
84
|
+
if (this.proxyDispatcher)
|
|
85
|
+
fetchOptions.dispatcher = this.proxyDispatcher;
|
|
81
86
|
fetch(this.endpoint, fetchOptions).then(async (res) => {
|
|
82
87
|
if (isNotification)
|
|
83
88
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../../src/mcp/http-client.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,yCAAyC;AACzC,+DAA+D;;;AAE/D,qDAAiD;AAEjD,
|
|
1
|
+
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../../src/mcp/http-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,51 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
export type ProxyMode
|
|
3
|
-
/** 单分类代理配置 */
|
|
4
|
-
export interface ProxyCategoryConfig {
|
|
5
|
-
mode: ProxyMode;
|
|
6
|
-
/** mode='custom' 时的代理 URL */
|
|
7
|
-
url?: string;
|
|
8
|
-
}
|
|
9
|
-
/** 分类代理设置(LLM / MCP / Fetch 各自独立) */
|
|
10
|
-
export interface ProxySettings {
|
|
11
|
-
llm: ProxyCategoryConfig;
|
|
12
|
-
mcp: ProxyCategoryConfig;
|
|
13
|
-
fetch: ProxyCategoryConfig;
|
|
14
|
-
}
|
|
15
|
-
/** 默认代理设置:全部分类走系统代理 */
|
|
16
|
-
export declare const DEFAULT_PROXY_SETTINGS: ProxySettings;
|
|
17
|
-
/**
|
|
18
|
-
* 从 Windows 注册表读取系统代理配置
|
|
19
|
-
* 仅 Windows 平台生效,其他平台返回 undefined
|
|
20
|
-
* 结果缓存,避免重复查询注册表
|
|
21
|
-
*/
|
|
22
|
-
export declare function getWindowsSystemProxy(): string | undefined;
|
|
23
|
-
/** 清除系统代理缓存(设置变更时可调用) */
|
|
24
|
-
export declare function clearSystemProxyCache(): void;
|
|
25
|
-
/**
|
|
26
|
-
* 获取系统代理 URL
|
|
27
|
-
* 优先级:环境变量 HTTPS_PROXY / HTTP_PROXY / ALL_PROXY > macOS scutil > Windows 注册表
|
|
28
|
-
*/
|
|
29
|
-
export declare function getSystemProxyUrl(): string | undefined;
|
|
30
|
-
/**
|
|
31
|
-
* 根据分类代理配置解析代理 URL
|
|
32
|
-
*
|
|
33
|
-
* - `mode='system'`:自动检测系统代理(环境变量 + macOS scutil + Windows 注册表)
|
|
34
|
-
* - `mode='custom'`:使用用户指定的代理 URL
|
|
35
|
-
* - `mode='direct'`:不走代理,返回 undefined
|
|
36
|
-
*
|
|
37
|
-
* 返回的 URL 可直接传给 Node.js 22.17+ 内置 fetch() 的 proxy 选项,
|
|
38
|
-
* 支持 http://、https://、socks4://、socks5:// 协议。
|
|
39
|
-
*
|
|
40
|
-
* @param category 分类代理配置
|
|
41
|
-
* @param label 日志标签(如 'LLM', 'MCP', 'Fetch')
|
|
42
|
-
* @returns 代理 URL 字符串,无代理时返回 undefined
|
|
43
|
-
*/
|
|
44
|
-
export declare function resolveProxyAgentForCategory(category?: ProxyCategoryConfig, label?: string): string | undefined;
|
|
45
|
-
/**
|
|
46
|
-
* 获取分类代理的有效 URL(用于 axios 等 HTTP 客户端)
|
|
47
|
-
*
|
|
48
|
-
* @returns 代理 URL 字符串,无代理时返回 undefined
|
|
49
|
-
*/
|
|
50
|
-
export declare function resolveProxyUrlForCategory(category?: ProxyCategoryConfig): string | undefined;
|
|
1
|
+
export { DEFAULT_PROXY_SETTINGS, resolveProxyAgentForCategory, createProxyDispatcher, resolveProxyUrlForCategory, } from '../utils/proxy.js';
|
|
2
|
+
export type { ProxyAgentType, ProxyMode, ProxyCategoryConfig, ProxySettings, } from '../utils/proxy.js';
|
|
51
3
|
//# sourceMappingURL=proxy-agent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy-agent.d.ts","sourceRoot":"","sources":["../../../src/mcp/proxy-agent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"proxy-agent.d.ts","sourceRoot":"","sources":["../../../src/mcp/proxy-agent.ts"],"names":[],"mappings":"AASA,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,cAAc,EACd,SAAS,EACT,mBAAmB,EACnB,aAAa,GACd,MAAM,mBAAmB,CAAC"}
|
|
@@ -1,179 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// ============================================================
|
|
3
|
-
//
|
|
3
|
+
// Deprecated re-export shim
|
|
4
4
|
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// 通用代理逻辑已迁移至 utils/proxy.ts。
|
|
7
|
+
// 此文件仅保留作为向后兼容的浅层 re-export,避免外部深层导入
|
|
8
|
+
// (如 `agent-core/mcp/proxy-agent`)失效。新代码请改为从
|
|
9
|
+
// `utils/proxy` 导入。
|
|
5
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.DEFAULT_PROXY_SETTINGS = void 0;
|
|
7
|
-
|
|
8
|
-
exports.
|
|
9
|
-
exports.
|
|
10
|
-
exports.
|
|
11
|
-
exports
|
|
12
|
-
const child_process_1 = require("child_process");
|
|
13
|
-
/** 默认代理设置:全部分类走系统代理 */
|
|
14
|
-
exports.DEFAULT_PROXY_SETTINGS = {
|
|
15
|
-
llm: { mode: 'system' },
|
|
16
|
-
mcp: { mode: 'system' },
|
|
17
|
-
fetch: { mode: 'system' },
|
|
18
|
-
};
|
|
19
|
-
// ---- macOS 系统代理检测 ----
|
|
20
|
-
/**
|
|
21
|
-
* 从 macOS 系统偏好设置读取代理配置
|
|
22
|
-
* 通过 scutil --proxy 查询,仅 macOS 平台生效
|
|
23
|
-
*/
|
|
24
|
-
function getMacOSSystemProxy() {
|
|
25
|
-
if (process.platform !== 'darwin')
|
|
26
|
-
return undefined;
|
|
27
|
-
try {
|
|
28
|
-
const output = (0, child_process_1.execSync)('scutil --proxy', { encoding: 'utf-8', timeout: 3000 });
|
|
29
|
-
const parsed = {};
|
|
30
|
-
// scutil 输出格式: " Key : Value"
|
|
31
|
-
for (const line of output.split('\n')) {
|
|
32
|
-
const m = line.trim().match(/^(\w+)\s*:\s*(.+)$/);
|
|
33
|
-
if (m)
|
|
34
|
-
parsed[m[1]] = m[2].trim();
|
|
35
|
-
}
|
|
36
|
-
// 优先 HTTPS 代理,其次 HTTP 代理,最后 SOCKS 代理
|
|
37
|
-
if (parsed['HTTPSEnable'] === '1' && parsed['HTTPSProxy']) {
|
|
38
|
-
const port = parsed['HTTPSPort'] || '443';
|
|
39
|
-
const url = `http://${parsed['HTTPSProxy']}:${port}`;
|
|
40
|
-
console.debug(`[Proxy] macOS system HTTPS proxy detected: ${url}`);
|
|
41
|
-
return url;
|
|
42
|
-
}
|
|
43
|
-
if (parsed['HTTPEnable'] === '1' && parsed['HTTPProxy']) {
|
|
44
|
-
const port = parsed['HTTPPort'] || '80';
|
|
45
|
-
const url = `http://${parsed['HTTPProxy']}:${port}`;
|
|
46
|
-
console.debug(`[Proxy] macOS system HTTP proxy detected: ${url}`);
|
|
47
|
-
return url;
|
|
48
|
-
}
|
|
49
|
-
if (parsed['SOCKSEnable'] === '1' && parsed['SOCKSProxy']) {
|
|
50
|
-
const port = parsed['SOCKSPort'] || '1080';
|
|
51
|
-
const url = `socks5://${parsed['SOCKSProxy']}:${port}`;
|
|
52
|
-
console.debug(`[Proxy] macOS system SOCKS proxy detected: ${url}`);
|
|
53
|
-
return url;
|
|
54
|
-
}
|
|
55
|
-
return undefined;
|
|
56
|
-
}
|
|
57
|
-
catch {
|
|
58
|
-
return undefined;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
// ---- Windows 系统代理检测 ----
|
|
62
|
-
let _cachedSystemProxy = null;
|
|
63
|
-
/**
|
|
64
|
-
* 从 Windows 注册表读取系统代理配置
|
|
65
|
-
* 仅 Windows 平台生效,其他平台返回 undefined
|
|
66
|
-
* 结果缓存,避免重复查询注册表
|
|
67
|
-
*/
|
|
68
|
-
function getWindowsSystemProxy() {
|
|
69
|
-
if (_cachedSystemProxy !== null)
|
|
70
|
-
return _cachedSystemProxy || undefined;
|
|
71
|
-
if (process.platform !== 'win32') {
|
|
72
|
-
_cachedSystemProxy = undefined;
|
|
73
|
-
return undefined;
|
|
74
|
-
}
|
|
75
|
-
try {
|
|
76
|
-
const regPath = 'HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings';
|
|
77
|
-
const output = (0, child_process_1.execSync)(`reg query "${regPath}" /v ProxyEnable`, { encoding: 'utf-8', timeout: 3000, windowsHide: true });
|
|
78
|
-
const enabledMatch = output.match(/ProxyEnable\s+REG_DWORD\s+0x(\d+)/i);
|
|
79
|
-
if (!enabledMatch || enabledMatch[1] === '0') {
|
|
80
|
-
_cachedSystemProxy = undefined;
|
|
81
|
-
return undefined;
|
|
82
|
-
}
|
|
83
|
-
const serverOutput = (0, child_process_1.execSync)(`reg query "${regPath}" /v ProxyServer`, { encoding: 'utf-8', timeout: 3000, windowsHide: true });
|
|
84
|
-
const serverMatch = serverOutput.match(/ProxyServer\s+REG_SZ\s+(.+)/i);
|
|
85
|
-
if (!serverMatch) {
|
|
86
|
-
_cachedSystemProxy = undefined;
|
|
87
|
-
return undefined;
|
|
88
|
-
}
|
|
89
|
-
const proxyServer = serverMatch[1].trim();
|
|
90
|
-
// Windows 代理可能是 ip:port 格式,需要补全协议
|
|
91
|
-
const proxyUrl = proxyServer.includes('://') ? proxyServer : `http://${proxyServer}`;
|
|
92
|
-
_cachedSystemProxy = proxyUrl;
|
|
93
|
-
console.debug(`[Proxy] Windows system proxy detected: ${proxyUrl}`);
|
|
94
|
-
return proxyUrl;
|
|
95
|
-
}
|
|
96
|
-
catch {
|
|
97
|
-
_cachedSystemProxy = undefined;
|
|
98
|
-
return undefined;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
/** 清除系统代理缓存(设置变更时可调用) */
|
|
102
|
-
function clearSystemProxyCache() {
|
|
103
|
-
_cachedSystemProxy = null;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* 获取系统代理 URL
|
|
107
|
-
* 优先级:环境变量 HTTPS_PROXY / HTTP_PROXY / ALL_PROXY > macOS scutil > Windows 注册表
|
|
108
|
-
*/
|
|
109
|
-
function getSystemProxyUrl() {
|
|
110
|
-
return process.env.HTTPS_PROXY
|
|
111
|
-
|| process.env.https_proxy
|
|
112
|
-
|| process.env.HTTP_PROXY
|
|
113
|
-
|| process.env.http_proxy
|
|
114
|
-
|| process.env.ALL_PROXY
|
|
115
|
-
|| process.env.all_proxy
|
|
116
|
-
|| getMacOSSystemProxy()
|
|
117
|
-
|| getWindowsSystemProxy();
|
|
118
|
-
}
|
|
119
|
-
// ---- Proxy URL 解析 ----
|
|
120
|
-
/**
|
|
121
|
-
* 根据分类代理配置解析代理 URL
|
|
122
|
-
*
|
|
123
|
-
* - `mode='system'`:自动检测系统代理(环境变量 + macOS scutil + Windows 注册表)
|
|
124
|
-
* - `mode='custom'`:使用用户指定的代理 URL
|
|
125
|
-
* - `mode='direct'`:不走代理,返回 undefined
|
|
126
|
-
*
|
|
127
|
-
* 返回的 URL 可直接传给 Node.js 22.17+ 内置 fetch() 的 proxy 选项,
|
|
128
|
-
* 支持 http://、https://、socks4://、socks5:// 协议。
|
|
129
|
-
*
|
|
130
|
-
* @param category 分类代理配置
|
|
131
|
-
* @param label 日志标签(如 'LLM', 'MCP', 'Fetch')
|
|
132
|
-
* @returns 代理 URL 字符串,无代理时返回 undefined
|
|
133
|
-
*/
|
|
134
|
-
function resolveProxyAgentForCategory(category, label = 'Proxy') {
|
|
135
|
-
if (!category)
|
|
136
|
-
return undefined;
|
|
137
|
-
let proxyUrl;
|
|
138
|
-
switch (category.mode) {
|
|
139
|
-
case 'direct':
|
|
140
|
-
console.debug(`[${label}] proxy mode: direct (no proxy)`);
|
|
141
|
-
return undefined;
|
|
142
|
-
case 'custom':
|
|
143
|
-
if (!category.url) {
|
|
144
|
-
console.debug(`[${label}] proxy mode: custom but no URL configured, falling back to direct`);
|
|
145
|
-
return undefined;
|
|
146
|
-
}
|
|
147
|
-
proxyUrl = category.url;
|
|
148
|
-
break;
|
|
149
|
-
case 'system':
|
|
150
|
-
default:
|
|
151
|
-
proxyUrl = getSystemProxyUrl();
|
|
152
|
-
if (!proxyUrl) {
|
|
153
|
-
console.debug(`[${label}] proxy mode: system, no system proxy detected`);
|
|
154
|
-
return undefined;
|
|
155
|
-
}
|
|
156
|
-
break;
|
|
157
|
-
}
|
|
158
|
-
console.debug(`[${label}] using proxy: ${proxyUrl}`);
|
|
159
|
-
return proxyUrl;
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* 获取分类代理的有效 URL(用于 axios 等 HTTP 客户端)
|
|
163
|
-
*
|
|
164
|
-
* @returns 代理 URL 字符串,无代理时返回 undefined
|
|
165
|
-
*/
|
|
166
|
-
function resolveProxyUrlForCategory(category) {
|
|
167
|
-
if (!category)
|
|
168
|
-
return undefined;
|
|
169
|
-
switch (category.mode) {
|
|
170
|
-
case 'direct':
|
|
171
|
-
return undefined;
|
|
172
|
-
case 'custom':
|
|
173
|
-
return category.url || undefined;
|
|
174
|
-
case 'system':
|
|
175
|
-
default:
|
|
176
|
-
return getSystemProxyUrl();
|
|
177
|
-
}
|
|
178
|
-
}
|
|
11
|
+
exports.resolveProxyUrlForCategory = exports.createProxyDispatcher = exports.resolveProxyAgentForCategory = exports.DEFAULT_PROXY_SETTINGS = void 0;
|
|
12
|
+
var proxy_ts_1 = require("../utils/proxy.js");
|
|
13
|
+
Object.defineProperty(exports, "DEFAULT_PROXY_SETTINGS", { enumerable: true, get: function () { return proxy_ts_1.DEFAULT_PROXY_SETTINGS; } });
|
|
14
|
+
Object.defineProperty(exports, "resolveProxyAgentForCategory", { enumerable: true, get: function () { return proxy_ts_1.resolveProxyAgentForCategory; } });
|
|
15
|
+
Object.defineProperty(exports, "createProxyDispatcher", { enumerable: true, get: function () { return proxy_ts_1.createProxyDispatcher; } });
|
|
16
|
+
Object.defineProperty(exports, "resolveProxyUrlForCategory", { enumerable: true, get: function () { return proxy_ts_1.resolveProxyUrlForCategory; } });
|
|
179
17
|
//# sourceMappingURL=proxy-agent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy-agent.js","sourceRoot":"","sources":["../../../src/mcp/proxy-agent.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,
|
|
1
|
+
{"version":3,"file":"proxy-agent.js","sourceRoot":"","sources":["../../../src/mcp/proxy-agent.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,4BAA4B;AAC5B,+DAA+D;AAC/D,EAAE;AACF,6BAA6B;AAC7B,qCAAqC;AACrC,6CAA6C;AAC7C,oBAAoB;;;AAEpB,8CAK2B;AAJzB,kHAAA,sBAAsB,OAAA;AACtB,wHAAA,4BAA4B,OAAA;AAC5B,iHAAA,qBAAqB,OAAA;AACrB,sHAAA,0BAA0B,OAAA"}
|