aws-runtime-bridge 1.1.1 → 1.1.2
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/package/aws-client-agent-mcp/dist/agent-client.d.ts +166 -0
- package/package/aws-client-agent-mcp/dist/agent-client.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/agent-client.js +602 -0
- package/package/aws-client-agent-mcp/dist/agent-client.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/agent-client.test.d.ts +2 -0
- package/package/aws-client-agent-mcp/dist/agent-client.test.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/agent-client.test.js +534 -0
- package/package/aws-client-agent-mcp/dist/agent-client.test.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/config.d.ts +22 -0
- package/package/aws-client-agent-mcp/dist/config.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/config.js +106 -0
- package/package/aws-client-agent-mcp/dist/config.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/config.test.d.ts +2 -0
- package/package/aws-client-agent-mcp/dist/config.test.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/config.test.js +139 -0
- package/package/aws-client-agent-mcp/dist/config.test.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/constants.d.ts +15 -0
- package/package/aws-client-agent-mcp/dist/constants.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/constants.js +19 -0
- package/package/aws-client-agent-mcp/dist/constants.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/http-client.d.ts +28 -0
- package/package/aws-client-agent-mcp/dist/http-client.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/http-client.js +96 -0
- package/package/aws-client-agent-mcp/dist/http-client.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/http-client.test.d.ts +2 -0
- package/package/aws-client-agent-mcp/dist/http-client.test.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/http-client.test.js +228 -0
- package/package/aws-client-agent-mcp/dist/http-client.test.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/index.d.ts +14 -0
- package/package/aws-client-agent-mcp/dist/index.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/index.js +30 -0
- package/package/aws-client-agent-mcp/dist/index.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/logger.d.ts +7 -0
- package/package/aws-client-agent-mcp/dist/logger.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/logger.js +19 -0
- package/package/aws-client-agent-mcp/dist/logger.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/mcp-server.d.ts +77 -0
- package/package/aws-client-agent-mcp/dist/mcp-server.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/mcp-server.js +438 -0
- package/package/aws-client-agent-mcp/dist/mcp-server.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/mcp-server.test.d.ts +2 -0
- package/package/aws-client-agent-mcp/dist/mcp-server.test.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/mcp-server.test.js +624 -0
- package/package/aws-client-agent-mcp/dist/mcp-server.test.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts +78 -0
- package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/mcp-tools.js +420 -0
- package/package/aws-client-agent-mcp/dist/mcp-tools.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/memory-store.d.ts +61 -0
- package/package/aws-client-agent-mcp/dist/memory-store.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/memory-store.js +268 -0
- package/package/aws-client-agent-mcp/dist/memory-store.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/memory-store.test.d.ts +2 -0
- package/package/aws-client-agent-mcp/dist/memory-store.test.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/memory-store.test.js +164 -0
- package/package/aws-client-agent-mcp/dist/memory-store.test.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/message-buffer.d.ts +87 -0
- package/package/aws-client-agent-mcp/dist/message-buffer.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/message-buffer.js +185 -0
- package/package/aws-client-agent-mcp/dist/message-buffer.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/message-buffer.test.d.ts +2 -0
- package/package/aws-client-agent-mcp/dist/message-buffer.test.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/message-buffer.test.js +44 -0
- package/package/aws-client-agent-mcp/dist/message-buffer.test.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/messageContent.d.ts +53 -0
- package/package/aws-client-agent-mcp/dist/messageContent.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/messageContent.js +125 -0
- package/package/aws-client-agent-mcp/dist/messageContent.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/runtime-launch-binding.d.ts +3 -0
- package/package/aws-client-agent-mcp/dist/runtime-launch-binding.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/runtime-launch-binding.js +50 -0
- package/package/aws-client-agent-mcp/dist/runtime-launch-binding.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/runtime-launch-binding.test.d.ts +2 -0
- package/package/aws-client-agent-mcp/dist/runtime-launch-binding.test.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/runtime-launch-binding.test.js +90 -0
- package/package/aws-client-agent-mcp/dist/runtime-launch-binding.test.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/status-reporter.d.ts +66 -0
- package/package/aws-client-agent-mcp/dist/status-reporter.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/status-reporter.js +237 -0
- package/package/aws-client-agent-mcp/dist/status-reporter.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/status-reporter.test.d.ts +2 -0
- package/package/aws-client-agent-mcp/dist/status-reporter.test.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/status-reporter.test.js +19 -0
- package/package/aws-client-agent-mcp/dist/status-reporter.test.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/types.d.ts +309 -0
- package/package/aws-client-agent-mcp/dist/types.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/types.js +9 -0
- package/package/aws-client-agent-mcp/dist/types.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/websocket-client.d.ts +94 -0
- package/package/aws-client-agent-mcp/dist/websocket-client.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/websocket-client.js +316 -0
- package/package/aws-client-agent-mcp/dist/websocket-client.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/websocket-client.test.d.ts +2 -0
- package/package/aws-client-agent-mcp/dist/websocket-client.test.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/websocket-client.test.js +191 -0
- package/package/aws-client-agent-mcp/dist/websocket-client.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 配置管理模块
|
|
3
|
+
* 负责读取环境变量配置
|
|
4
|
+
*
|
|
5
|
+
* 注意:Agent 角色配置(roleName, prompt 等)由后端从 runtime-bridge 获取
|
|
6
|
+
* MCP 客户端只需要传递 workspacePath
|
|
7
|
+
*/
|
|
8
|
+
import { logger } from "./logger.js";
|
|
9
|
+
const DEFAULT_SERVER_URL = "ws://localhost:8080/ws/agent";
|
|
10
|
+
const DEFAULT_HEARTBEAT_INTERVAL = 3000; // 3秒发送一次心跳
|
|
11
|
+
const DEFAULT_HEARTBEAT_TIMEOUT = 9000; // 9秒未收到心跳响应则断开并重连
|
|
12
|
+
const DEFAULT_RECONNECT_INTERVAL = 200;
|
|
13
|
+
const DEFAULT_MAX_RECONNECT_ATTEMPTS = -1;
|
|
14
|
+
const DEFAULT_INTERNAL_API_KEY = "agentswork-internal-dev-key";
|
|
15
|
+
export class ConfigManager {
|
|
16
|
+
agentConfig = null;
|
|
17
|
+
serverConfig = null;
|
|
18
|
+
/**
|
|
19
|
+
* 加载配置
|
|
20
|
+
* MCP 客户端只提供 workspacePath,角色配置由后端从 runtime-bridge 获取
|
|
21
|
+
*/
|
|
22
|
+
loadConfig() {
|
|
23
|
+
const workspacePath = process.env.AWS_WORKSPACE_PATH || process.cwd();
|
|
24
|
+
this.agentConfig = {
|
|
25
|
+
roleName: process.env.AWS_ROLE_NAME || "",
|
|
26
|
+
agentId: process.env.AWS_AGENT_ID || undefined,
|
|
27
|
+
projectName: process.env.AWS_PROJECT_NAME || "default",
|
|
28
|
+
workspacePath: workspacePath,
|
|
29
|
+
prompt: process.env.AWS_PROMPT || "",
|
|
30
|
+
describe: "",
|
|
31
|
+
};
|
|
32
|
+
logger.info(`[Config] MCP 客户端配置已加载`);
|
|
33
|
+
logger.info(`[Config] 工作目录: ${this.agentConfig.workspacePath}`);
|
|
34
|
+
logger.info(`[Config] 项目名: ${this.agentConfig.projectName}`);
|
|
35
|
+
if (this.agentConfig.agentId) {
|
|
36
|
+
logger.info(`[Config] 预设 AgentID: ${this.agentConfig.agentId}`);
|
|
37
|
+
}
|
|
38
|
+
const internalApiKey = process.env.AWS_INTERNAL_API_KEY || DEFAULT_INTERNAL_API_KEY;
|
|
39
|
+
this.serverConfig = {
|
|
40
|
+
serverUrl: process.env.AWS_SERVER_URL || DEFAULT_SERVER_URL,
|
|
41
|
+
heartbeatInterval: parseInt(process.env.AWS_HEARTBEAT_INTERVAL ||
|
|
42
|
+
String(DEFAULT_HEARTBEAT_INTERVAL), 10),
|
|
43
|
+
heartbeatTimeout: parseInt(process.env.AWS_HEARTBEAT_TIMEOUT || String(DEFAULT_HEARTBEAT_TIMEOUT), 10),
|
|
44
|
+
reconnectInterval: DEFAULT_RECONNECT_INTERVAL,
|
|
45
|
+
maxReconnectAttempts: DEFAULT_MAX_RECONNECT_ATTEMPTS,
|
|
46
|
+
internalApiKey,
|
|
47
|
+
runtimeAccessToken: process.env.AWS_RUNTIME_ACCESS_TOKEN || undefined,
|
|
48
|
+
userId: process.env.AWS_USER_ID || undefined,
|
|
49
|
+
runtimeBridgeBaseUrl: process.env.AWS_RUNTIME_BRIDGE_BASE_URL || undefined,
|
|
50
|
+
mcpHttpUrl: process.env.AWS_MCP_HTTP_URL || undefined,
|
|
51
|
+
};
|
|
52
|
+
logger.info(`[Config] 服务器地址: ${this.serverConfig.serverUrl}`);
|
|
53
|
+
if (!process.env.AWS_INTERNAL_API_KEY) {
|
|
54
|
+
logger.warn("[Config] 未配置 AWS_INTERNAL_API_KEY,当前使用默认开发密钥");
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
applyRuntimeLaunchBinding(binding) {
|
|
58
|
+
if (!this.agentConfig || !this.serverConfig) {
|
|
59
|
+
throw new Error("配置未加载,请先调用 loadConfig()");
|
|
60
|
+
}
|
|
61
|
+
const agentId = String(binding.agentId || "").trim();
|
|
62
|
+
if (agentId) {
|
|
63
|
+
this.agentConfig.agentId = agentId;
|
|
64
|
+
}
|
|
65
|
+
const workspacePath = String(binding.workspacePath || "").trim();
|
|
66
|
+
if (workspacePath) {
|
|
67
|
+
this.agentConfig.workspacePath = workspacePath;
|
|
68
|
+
}
|
|
69
|
+
const runtimeAccessToken = String(binding.runtimeAccessToken || "").trim();
|
|
70
|
+
if (runtimeAccessToken) {
|
|
71
|
+
this.serverConfig.runtimeAccessToken = runtimeAccessToken;
|
|
72
|
+
}
|
|
73
|
+
const userId = String(binding.userId || "").trim();
|
|
74
|
+
if (userId) {
|
|
75
|
+
this.serverConfig.userId = userId;
|
|
76
|
+
}
|
|
77
|
+
const serverUrl = String(binding.serverUrl || binding.schedulerBaseUrl || "").trim();
|
|
78
|
+
if (serverUrl) {
|
|
79
|
+
this.serverConfig.serverUrl = serverUrl.includes("/ws/agent")
|
|
80
|
+
? serverUrl
|
|
81
|
+
: `${serverUrl.replace(/\/$/, "")}/ws/agent`.replace(/^http:/, "ws:").replace(/^https:/, "wss:");
|
|
82
|
+
}
|
|
83
|
+
const mcpHttpUrl = String(binding.mcpHttpUrl || "").trim();
|
|
84
|
+
if (mcpHttpUrl) {
|
|
85
|
+
this.serverConfig.mcpHttpUrl = mcpHttpUrl;
|
|
86
|
+
}
|
|
87
|
+
else if (binding.schedulerBaseUrl) {
|
|
88
|
+
this.serverConfig.mcpHttpUrl = `${String(binding.schedulerBaseUrl).replace(/\/$/, "")}/mcp/call`;
|
|
89
|
+
}
|
|
90
|
+
logger.info(`[Config] 已应用 runtime-bridge 启动绑定: agentId=${this.agentConfig.agentId || "(空)"}`);
|
|
91
|
+
}
|
|
92
|
+
getAgentConfig() {
|
|
93
|
+
if (!this.agentConfig) {
|
|
94
|
+
throw new Error("配置未加载,请先调用 loadConfig()");
|
|
95
|
+
}
|
|
96
|
+
return this.agentConfig;
|
|
97
|
+
}
|
|
98
|
+
getServerConfig() {
|
|
99
|
+
if (!this.serverConfig) {
|
|
100
|
+
throw new Error("配置未加载,请先调用 loadConfig()");
|
|
101
|
+
}
|
|
102
|
+
return this.serverConfig;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
export const configManager = new ConfigManager();
|
|
106
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../src/config.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { describe, it, beforeEach, afterEach } from 'node:test';
|
|
3
|
+
import { ConfigManager } from './config.js';
|
|
4
|
+
describe('ConfigManager', () => {
|
|
5
|
+
const originalEnv = { ...process.env };
|
|
6
|
+
let configManager;
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
configManager = new ConfigManager();
|
|
9
|
+
// 清理环境变量
|
|
10
|
+
delete process.env.AWS_SERVER_URL;
|
|
11
|
+
delete process.env.AWS_HEARTBEAT_INTERVAL;
|
|
12
|
+
delete process.env.AWS_WORKSPACE_PATH;
|
|
13
|
+
delete process.env.AWS_ROLE_NAME;
|
|
14
|
+
delete process.env.AWS_AGENT_ID;
|
|
15
|
+
delete process.env.AWS_PROJECT_NAME;
|
|
16
|
+
delete process.env.AWS_PROMPT;
|
|
17
|
+
delete process.env.AWS_INTERNAL_API_KEY;
|
|
18
|
+
delete process.env.AWS_MCP_HTTP_URL;
|
|
19
|
+
});
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
// 恢复环境变量
|
|
22
|
+
process.env = { ...originalEnv };
|
|
23
|
+
});
|
|
24
|
+
describe('loadConfig', () => {
|
|
25
|
+
it('loads default values when no env vars set', () => {
|
|
26
|
+
configManager.loadConfig();
|
|
27
|
+
const agentConfig = configManager.getAgentConfig();
|
|
28
|
+
const serverConfig = configManager.getServerConfig();
|
|
29
|
+
assert.equal(agentConfig.roleName, '');
|
|
30
|
+
assert.equal(agentConfig.projectName, 'default');
|
|
31
|
+
assert.equal(serverConfig.serverUrl, 'ws://localhost:8080/ws/agent');
|
|
32
|
+
assert.equal(serverConfig.heartbeatInterval, 15000);
|
|
33
|
+
});
|
|
34
|
+
it('loads custom server URL from env', () => {
|
|
35
|
+
process.env.AWS_SERVER_URL = 'wss://custom.example.com/ws/agent';
|
|
36
|
+
configManager.loadConfig();
|
|
37
|
+
const serverConfig = configManager.getServerConfig();
|
|
38
|
+
assert.equal(serverConfig.serverUrl, 'wss://custom.example.com/ws/agent');
|
|
39
|
+
});
|
|
40
|
+
it('loads custom heartbeat interval from env', () => {
|
|
41
|
+
process.env.AWS_HEARTBEAT_INTERVAL = '30000';
|
|
42
|
+
configManager.loadConfig();
|
|
43
|
+
const serverConfig = configManager.getServerConfig();
|
|
44
|
+
assert.equal(serverConfig.heartbeatInterval, 30000);
|
|
45
|
+
});
|
|
46
|
+
it('loads workspace path from env', () => {
|
|
47
|
+
process.env.AWS_WORKSPACE_PATH = '/custom/workspace';
|
|
48
|
+
configManager.loadConfig();
|
|
49
|
+
const agentConfig = configManager.getAgentConfig();
|
|
50
|
+
assert.equal(agentConfig.workspacePath, '/custom/workspace');
|
|
51
|
+
});
|
|
52
|
+
it('uses cwd as default workspace path', () => {
|
|
53
|
+
configManager.loadConfig();
|
|
54
|
+
const agentConfig = configManager.getAgentConfig();
|
|
55
|
+
assert.equal(agentConfig.workspacePath, process.cwd());
|
|
56
|
+
});
|
|
57
|
+
it('loads role name from env', () => {
|
|
58
|
+
process.env.AWS_ROLE_NAME = 'backend-expert';
|
|
59
|
+
configManager.loadConfig();
|
|
60
|
+
const agentConfig = configManager.getAgentConfig();
|
|
61
|
+
assert.equal(agentConfig.roleName, 'backend-expert');
|
|
62
|
+
});
|
|
63
|
+
it('loads agent ID from env', () => {
|
|
64
|
+
process.env.AWS_AGENT_ID = 'agent-123';
|
|
65
|
+
configManager.loadConfig();
|
|
66
|
+
const agentConfig = configManager.getAgentConfig();
|
|
67
|
+
assert.equal(agentConfig.agentId, 'agent-123');
|
|
68
|
+
});
|
|
69
|
+
it('loads project name from env', () => {
|
|
70
|
+
process.env.AWS_PROJECT_NAME = 'my-project';
|
|
71
|
+
configManager.loadConfig();
|
|
72
|
+
const agentConfig = configManager.getAgentConfig();
|
|
73
|
+
assert.equal(agentConfig.projectName, 'my-project');
|
|
74
|
+
});
|
|
75
|
+
it('loads prompt from env', () => {
|
|
76
|
+
process.env.AWS_PROMPT = 'You are a helpful assistant';
|
|
77
|
+
configManager.loadConfig();
|
|
78
|
+
const agentConfig = configManager.getAgentConfig();
|
|
79
|
+
assert.equal(agentConfig.prompt, 'You are a helpful assistant');
|
|
80
|
+
});
|
|
81
|
+
it('loads internal API key from env', () => {
|
|
82
|
+
process.env.AWS_INTERNAL_API_KEY = 'secret-key';
|
|
83
|
+
configManager.loadConfig();
|
|
84
|
+
const serverConfig = configManager.getServerConfig();
|
|
85
|
+
assert.equal(serverConfig.internalApiKey, 'secret-key');
|
|
86
|
+
});
|
|
87
|
+
it('uses default internal API key when not set', () => {
|
|
88
|
+
configManager.loadConfig();
|
|
89
|
+
const serverConfig = configManager.getServerConfig();
|
|
90
|
+
assert.equal(serverConfig.internalApiKey, 'agentswork-internal-dev-key');
|
|
91
|
+
});
|
|
92
|
+
it('loads mcpHttpUrl from env', () => {
|
|
93
|
+
process.env.AWS_MCP_HTTP_URL = 'http://custom:3000/mcp/call';
|
|
94
|
+
configManager.loadConfig();
|
|
95
|
+
const serverConfig = configManager.getServerConfig();
|
|
96
|
+
assert.equal(serverConfig.mcpHttpUrl, 'http://custom:3000/mcp/call');
|
|
97
|
+
});
|
|
98
|
+
it('sets undefined mcpHttpUrl when not set', () => {
|
|
99
|
+
configManager.loadConfig();
|
|
100
|
+
const serverConfig = configManager.getServerConfig();
|
|
101
|
+
assert.equal(serverConfig.mcpHttpUrl, undefined);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
describe('getAgentConfig', () => {
|
|
105
|
+
it('throws error when config not loaded', () => {
|
|
106
|
+
assert.throws(() => configManager.getAgentConfig(), /配置未加载/);
|
|
107
|
+
});
|
|
108
|
+
it('returns config after loadConfig called', () => {
|
|
109
|
+
configManager.loadConfig();
|
|
110
|
+
const config = configManager.getAgentConfig();
|
|
111
|
+
assert.ok(config);
|
|
112
|
+
assert.ok(typeof config === 'object');
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe('getServerConfig', () => {
|
|
116
|
+
it('throws error when config not loaded', () => {
|
|
117
|
+
assert.throws(() => configManager.getServerConfig(), /配置未加载/);
|
|
118
|
+
});
|
|
119
|
+
it('returns config after loadConfig called', () => {
|
|
120
|
+
configManager.loadConfig();
|
|
121
|
+
const config = configManager.getServerConfig();
|
|
122
|
+
assert.ok(config);
|
|
123
|
+
assert.ok(typeof config === 'object');
|
|
124
|
+
assert.equal(config.reconnectInterval, 200);
|
|
125
|
+
assert.equal(config.maxReconnectAttempts, -1);
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
describe('multiple loadConfig calls', () => {
|
|
129
|
+
it('overwrites previous config on subsequent calls', () => {
|
|
130
|
+
process.env.AWS_SERVER_URL = 'ws://first:8080/ws/agent';
|
|
131
|
+
configManager.loadConfig();
|
|
132
|
+
assert.equal(configManager.getServerConfig().serverUrl, 'ws://first:8080/ws/agent');
|
|
133
|
+
process.env.AWS_SERVER_URL = 'ws://second:8080/ws/agent';
|
|
134
|
+
configManager.loadConfig();
|
|
135
|
+
assert.equal(configManager.getServerConfig().serverUrl, 'ws://second:8080/ws/agent');
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
//# sourceMappingURL=config.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.test.js","sourceRoot":"","sources":["../src/config.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 常量定义
|
|
3
|
+
*/
|
|
4
|
+
export declare const DEFAULT_SERVER_URL = "ws://localhost:8080/ws/agent";
|
|
5
|
+
export declare const DEFAULT_HEARTBEAT_INTERVAL = 15000;
|
|
6
|
+
export declare const DEFAULT_RECONNECT_INTERVAL = 200;
|
|
7
|
+
export declare const DEFAULT_MAX_RECONNECT_ATTEMPTS = -1;
|
|
8
|
+
export declare const DEFAULT_INTERNAL_API_KEY = "agentswork-internal-dev-key";
|
|
9
|
+
export declare const REGISTER_RETRY_INTERVAL_MS = 5000;
|
|
10
|
+
export declare const REGISTER_MAX_RETRIES = -1;
|
|
11
|
+
export declare const MESSAGE_POLL_INTERVAL_MS = 1000;
|
|
12
|
+
export declare const MESSAGE_ERROR_RETRY_MS = 5000;
|
|
13
|
+
export declare const MCP_SERVER_NAME = "aws-client-agent-mcp";
|
|
14
|
+
export declare const MCP_SERVER_VERSION = "1.0.0";
|
|
15
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,eAAO,MAAM,kBAAkB,iCAAiC,CAAC;AACjE,eAAO,MAAM,0BAA0B,QAAQ,CAAC;AAChD,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,8BAA8B,KAAK,CAAC;AACjD,eAAO,MAAM,wBAAwB,gCAAgC,CAAC;AAGtE,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAC/C,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAGvC,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAG3C,eAAO,MAAM,eAAe,yBAAyB,CAAC;AACtD,eAAO,MAAM,kBAAkB,UAAU,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 常量定义
|
|
3
|
+
*/
|
|
4
|
+
// 服务器配置
|
|
5
|
+
export const DEFAULT_SERVER_URL = 'ws://localhost:8080/ws/agent';
|
|
6
|
+
export const DEFAULT_HEARTBEAT_INTERVAL = 15000;
|
|
7
|
+
export const DEFAULT_RECONNECT_INTERVAL = 200;
|
|
8
|
+
export const DEFAULT_MAX_RECONNECT_ATTEMPTS = -1; // -1 表示无限重试
|
|
9
|
+
export const DEFAULT_INTERNAL_API_KEY = 'agentswork-internal-dev-key';
|
|
10
|
+
// 注册配置
|
|
11
|
+
export const REGISTER_RETRY_INTERVAL_MS = 5000;
|
|
12
|
+
export const REGISTER_MAX_RETRIES = -1; // -1 表示无限重试
|
|
13
|
+
// 消息轮询配置
|
|
14
|
+
export const MESSAGE_POLL_INTERVAL_MS = 1000;
|
|
15
|
+
export const MESSAGE_ERROR_RETRY_MS = 5000;
|
|
16
|
+
// MCP Server 信息
|
|
17
|
+
export const MCP_SERVER_NAME = 'aws-client-agent-mcp';
|
|
18
|
+
export const MCP_SERVER_VERSION = '1.0.0';
|
|
19
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,QAAQ;AACR,MAAM,CAAC,MAAM,kBAAkB,GAAG,8BAA8B,CAAC;AACjE,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAChD,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAC9C,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY;AAC9D,MAAM,CAAC,MAAM,wBAAwB,GAAG,6BAA6B,CAAC;AAEtE,OAAO;AACP,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY;AAEpD,SAAS;AACT,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAC7C,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAE3C,gBAAgB;AAChB,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,CAAC;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP 客户端模块
|
|
3
|
+
* 封装 MCP Tool 的 HTTP 调用
|
|
4
|
+
*/
|
|
5
|
+
import type { ServerConfig } from "./types.js";
|
|
6
|
+
export interface McpToolResponse<T = unknown> {
|
|
7
|
+
error?: string;
|
|
8
|
+
[key: string]: unknown;
|
|
9
|
+
}
|
|
10
|
+
export declare class HttpClient {
|
|
11
|
+
private serverConfig;
|
|
12
|
+
private mcpHttpUrl;
|
|
13
|
+
constructor(serverConfig: ServerConfig);
|
|
14
|
+
/**
|
|
15
|
+
* 调用 MCP Tool
|
|
16
|
+
*/
|
|
17
|
+
callTool<T = unknown>(toolName: string, args: Record<string, unknown>): Promise<T>;
|
|
18
|
+
private ensureRuntimeAccessToken;
|
|
19
|
+
/**
|
|
20
|
+
* 解析 MCP HTTP URL
|
|
21
|
+
*/
|
|
22
|
+
private resolveMcpHttpUrl;
|
|
23
|
+
/**
|
|
24
|
+
* 获取 MCP HTTP URL
|
|
25
|
+
*/
|
|
26
|
+
getMcpHttpUrl(): string;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=http-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,OAAO;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,UAAU,CAAS;gBAEf,YAAY,EAAE,YAAY;IAKtC;;OAEG;IACG,QAAQ,CAAC,CAAC,GAAG,OAAO,EACxB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,CAAC,CAAC;YAyCC,wBAAwB;IAuCtC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACH,aAAa,IAAI,MAAM;CAGxB"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP 客户端模块
|
|
3
|
+
* 封装 MCP Tool 的 HTTP 调用
|
|
4
|
+
*/
|
|
5
|
+
import { logger } from "./logger.js";
|
|
6
|
+
export class HttpClient {
|
|
7
|
+
serverConfig;
|
|
8
|
+
mcpHttpUrl;
|
|
9
|
+
constructor(serverConfig) {
|
|
10
|
+
this.serverConfig = serverConfig;
|
|
11
|
+
this.mcpHttpUrl = this.resolveMcpHttpUrl();
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* 调用 MCP Tool
|
|
15
|
+
*/
|
|
16
|
+
async callTool(toolName, args) {
|
|
17
|
+
await this.ensureRuntimeAccessToken();
|
|
18
|
+
const headers = {
|
|
19
|
+
"Content-Type": "application/json",
|
|
20
|
+
};
|
|
21
|
+
if (this.serverConfig.internalApiKey) {
|
|
22
|
+
headers["X-Internal-API-Key"] = this.serverConfig.internalApiKey;
|
|
23
|
+
}
|
|
24
|
+
if (this.serverConfig.runtimeAccessToken) {
|
|
25
|
+
headers["X-Runtime-Token"] = this.serverConfig.runtimeAccessToken;
|
|
26
|
+
headers["Authorization"] =
|
|
27
|
+
`Bearer ${this.serverConfig.runtimeAccessToken}`;
|
|
28
|
+
}
|
|
29
|
+
const response = await fetch(this.mcpHttpUrl, {
|
|
30
|
+
method: "POST",
|
|
31
|
+
headers,
|
|
32
|
+
body: JSON.stringify({
|
|
33
|
+
tool: toolName,
|
|
34
|
+
arguments: args,
|
|
35
|
+
}),
|
|
36
|
+
});
|
|
37
|
+
if (!response.ok) {
|
|
38
|
+
throw new Error(`MCP Tool 调用失败: ${response.status} ${response.statusText}`);
|
|
39
|
+
}
|
|
40
|
+
const result = (await response.json());
|
|
41
|
+
if (result.error) {
|
|
42
|
+
throw new Error(`MCP Tool 错误: ${result.error}`);
|
|
43
|
+
}
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
async ensureRuntimeAccessToken() {
|
|
47
|
+
if (this.serverConfig.runtimeAccessToken ||
|
|
48
|
+
!this.serverConfig.runtimeBridgeBaseUrl) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const url = `${this.serverConfig.runtimeBridgeBaseUrl.replace(/\/$/, "")}/runtime/binding/request-token`;
|
|
52
|
+
logger.info("[HttpClient] runtime token missing, requesting one from runtime-bridge");
|
|
53
|
+
const response = await fetch(url, {
|
|
54
|
+
method: "POST",
|
|
55
|
+
headers: { "Content-Type": "application/json" },
|
|
56
|
+
body: JSON.stringify({
|
|
57
|
+
userId: this.serverConfig.userId,
|
|
58
|
+
serverUrl: this.serverConfig.serverUrl,
|
|
59
|
+
}),
|
|
60
|
+
});
|
|
61
|
+
if (!response.ok) {
|
|
62
|
+
throw new Error(`无法从 runtime-bridge 获取 runtime token: ${response.status} ${response.statusText}`);
|
|
63
|
+
}
|
|
64
|
+
const payload = (await response.json());
|
|
65
|
+
if (!payload.runtimeAccessToken) {
|
|
66
|
+
throw new Error(payload.error || "runtime-bridge 未返回 runtime token");
|
|
67
|
+
}
|
|
68
|
+
this.serverConfig.runtimeAccessToken = payload.runtimeAccessToken;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 解析 MCP HTTP URL
|
|
72
|
+
*/
|
|
73
|
+
resolveMcpHttpUrl() {
|
|
74
|
+
const configured = this.serverConfig.mcpHttpUrl;
|
|
75
|
+
if (configured && configured.trim().length > 0) {
|
|
76
|
+
const normalized = configured.trim();
|
|
77
|
+
if (normalized.endsWith("/mcp/call")) {
|
|
78
|
+
return normalized;
|
|
79
|
+
}
|
|
80
|
+
return `${normalized.replace(/\/$/, "")}/mcp/call`;
|
|
81
|
+
}
|
|
82
|
+
// 从 WebSocket URL 推导 HTTP URL
|
|
83
|
+
const wsUrl = this.serverConfig.serverUrl;
|
|
84
|
+
return wsUrl
|
|
85
|
+
.replace("ws://", "http://")
|
|
86
|
+
.replace("wss://", "https://")
|
|
87
|
+
.replace("/ws/agent", "/mcp/call");
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* 获取 MCP HTTP URL
|
|
91
|
+
*/
|
|
92
|
+
getMcpHttpUrl() {
|
|
93
|
+
return this.mcpHttpUrl;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=http-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.test.d.ts","sourceRoot":"","sources":["../src/http-client.test.ts"],"names":[],"mappings":""}
|