aws-runtime-bridge 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapter/adapter.test.js +4 -4
- package/dist/adapter/types.d.ts.map +1 -1
- package/dist/adapter/types.js +0 -7
- package/dist/adapter/types.test.js +5 -53
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -2
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +4 -0
- package/dist/routes/instance.d.ts.map +1 -1
- package/dist/routes/instance.js +88 -34
- package/dist/routes/runtime-binding.d.ts.map +1 -1
- package/dist/routes/runtime-binding.js +59 -2
- package/dist/routes/sessions.js +1 -1
- package/dist/routes/terminal.d.ts.map +1 -1
- package/dist/routes/terminal.js +48 -14
- package/dist/routes/terminal.test.js +6 -2
- package/dist/services/agent-process-manager.js +4 -4
- package/dist/services/auto-register.d.ts +12 -1
- package/dist/services/auto-register.d.ts.map +1 -1
- package/dist/services/auto-register.js +206 -42
- package/dist/services/aws-client-agent-mcp.test.js +3 -0
- package/dist/services/mcp-launch-binding-queue.d.ts +36 -0
- package/dist/services/mcp-launch-binding-queue.d.ts.map +1 -0
- package/dist/services/mcp-launch-binding-queue.js +92 -0
- package/dist/services/mcp-launch-binding-queue.test.d.ts +2 -0
- package/dist/services/mcp-launch-binding-queue.test.d.ts.map +1 -0
- package/dist/services/mcp-launch-binding-queue.test.js +107 -0
- package/dist/services/orphan-monitor.js +1 -1
- package/dist/services/process-detector.d.ts +1 -1
- package/dist/services/process-detector.d.ts.map +1 -1
- package/dist/services/process-detector.js +2 -11
- package/dist/services/process-registry.d.ts +1 -0
- package/dist/services/process-registry.d.ts.map +1 -1
- package/dist/services/process-registry.js +129 -108
- package/dist/services/runtime-binding.d.ts +11 -1
- package/dist/services/runtime-binding.d.ts.map +1 -1
- package/dist/services/runtime-binding.js +130 -4
- package/dist/services/terminal-persistence.d.ts.map +1 -1
- package/dist/services/terminal-persistence.js +47 -37
- package/dist/services/terminal-persistence.test.js +47 -1
- package/dist/utils/file-utils.d.ts +3 -0
- package/dist/utils/file-utils.d.ts.map +1 -1
- package/dist/utils/file-utils.js +32 -0
- package/package/aws-client-agent-mcp/README.md +288 -288
- package/package.json +76 -76
- package/dist/routes/aws-mcp.d.ts +0 -10
- package/dist/routes/aws-mcp.d.ts.map +0 -1
- package/dist/routes/aws-mcp.js +0 -74
- package/dist/routes/aws-mcp.test.d.ts +0 -2
- package/dist/routes/aws-mcp.test.d.ts.map +0 -1
- package/dist/routes/aws-mcp.test.js +0 -42
- package/dist/routes/memory.d.ts +0 -13
- package/dist/routes/memory.d.ts.map +0 -1
- package/dist/routes/memory.js +0 -429
- package/dist/services/aws-mcp-http.d.ts +0 -11
- package/dist/services/aws-mcp-http.d.ts.map +0 -1
- package/dist/services/aws-mcp-http.js +0 -225
- package/dist/services/aws-mcp-http.test.d.ts +0 -2
- package/dist/services/aws-mcp-http.test.d.ts.map +0 -1
- package/dist/services/aws-mcp-http.test.js +0 -27
- package/dist/services/easytier-manager.d.ts +0 -106
- package/dist/services/easytier-manager.d.ts.map +0 -1
- package/dist/services/easytier-manager.js +0 -331
- package/dist/services/easytier-manager.test.d.ts +0 -5
- package/dist/services/easytier-manager.test.d.ts.map +0 -1
- package/dist/services/easytier-manager.test.js +0 -98
- package/dist/services/memory-service.d.ts +0 -195
- package/dist/services/memory-service.d.ts.map +0 -1
- package/dist/services/memory-service.js +0 -650
- package/dist/services/session-lookup.d.ts +0 -20
- package/dist/services/session-lookup.d.ts.map +0 -1
- package/dist/services/session-lookup.js +0 -43
- package/dist/services/user-api-key-service.d.ts +0 -28
- package/dist/services/user-api-key-service.d.ts.map +0 -1
- package/dist/services/user-api-key-service.js +0 -75
- package/node_modules/@cc-switch/sdk/dist/adapters/common.d.ts +0 -38
- package/node_modules/@cc-switch/sdk/dist/adapters/common.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/adapters/common.js +0 -47
- package/node_modules/@cc-switch/sdk/dist/adapters/index.d.ts +0 -5
- package/node_modules/@cc-switch/sdk/dist/adapters/index.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/adapters/index.js +0 -28
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-claude.d.ts +0 -10
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-claude.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-claude.js +0 -39
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-claudecode.d.ts +0 -10
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-claudecode.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-claudecode.js +0 -40
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-opencode.d.ts +0 -18
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-opencode.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-opencode.js +0 -63
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-opencode.test.d.ts +0 -2
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-opencode.test.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-opencode.test.js +0 -86
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-placeholder.d.ts +0 -9
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-placeholder.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/adapters/mcp-placeholder.js +0 -14
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-claude.d.ts +0 -10
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-claude.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-claude.js +0 -51
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-claudecode.d.ts +0 -10
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-claudecode.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-claudecode.js +0 -51
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-opencode.d.ts +0 -10
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-opencode.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-opencode.js +0 -51
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-placeholder.d.ts +0 -9
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-placeholder.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/adapters/skill-placeholder.js +0 -14
- package/node_modules/@cc-switch/sdk/dist/services/instance-service.d.ts +0 -78
- package/node_modules/@cc-switch/sdk/dist/services/instance-service.d.ts.map +0 -1
- package/node_modules/@cc-switch/sdk/dist/services/instance-service.js +0 -180
- package/package/cc-switch-sdk/dist/adapters/common.d.ts +0 -38
- package/package/cc-switch-sdk/dist/adapters/common.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/adapters/common.js +0 -47
- package/package/cc-switch-sdk/dist/adapters/index.d.ts +0 -5
- package/package/cc-switch-sdk/dist/adapters/index.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/adapters/index.js +0 -28
- package/package/cc-switch-sdk/dist/adapters/mcp-claude.d.ts +0 -10
- package/package/cc-switch-sdk/dist/adapters/mcp-claude.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/adapters/mcp-claude.js +0 -39
- package/package/cc-switch-sdk/dist/adapters/mcp-claudecode.d.ts +0 -10
- package/package/cc-switch-sdk/dist/adapters/mcp-claudecode.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/adapters/mcp-claudecode.js +0 -40
- package/package/cc-switch-sdk/dist/adapters/mcp-opencode.d.ts +0 -18
- package/package/cc-switch-sdk/dist/adapters/mcp-opencode.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/adapters/mcp-opencode.js +0 -63
- package/package/cc-switch-sdk/dist/adapters/mcp-opencode.test.d.ts +0 -2
- package/package/cc-switch-sdk/dist/adapters/mcp-opencode.test.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/adapters/mcp-opencode.test.js +0 -86
- package/package/cc-switch-sdk/dist/adapters/mcp-placeholder.d.ts +0 -9
- package/package/cc-switch-sdk/dist/adapters/mcp-placeholder.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/adapters/mcp-placeholder.js +0 -14
- package/package/cc-switch-sdk/dist/adapters/skill-claude.d.ts +0 -10
- package/package/cc-switch-sdk/dist/adapters/skill-claude.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/adapters/skill-claude.js +0 -51
- package/package/cc-switch-sdk/dist/adapters/skill-claudecode.d.ts +0 -10
- package/package/cc-switch-sdk/dist/adapters/skill-claudecode.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/adapters/skill-claudecode.js +0 -51
- package/package/cc-switch-sdk/dist/adapters/skill-opencode.d.ts +0 -10
- package/package/cc-switch-sdk/dist/adapters/skill-opencode.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/adapters/skill-opencode.js +0 -51
- package/package/cc-switch-sdk/dist/adapters/skill-placeholder.d.ts +0 -9
- package/package/cc-switch-sdk/dist/adapters/skill-placeholder.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/adapters/skill-placeholder.js +0 -14
- package/package/cc-switch-sdk/dist/services/instance-service.d.ts +0 -78
- package/package/cc-switch-sdk/dist/services/instance-service.d.ts.map +0 -1
- package/package/cc-switch-sdk/dist/services/instance-service.js +0 -180
package/dist/routes/memory.js
DELETED
|
@@ -1,429 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 记忆 API 路由
|
|
3
|
-
*
|
|
4
|
-
* 提供记忆的 CRUD 操作 REST API
|
|
5
|
-
* 记忆存储在项目根目录下的 vibe-coding/memory/ 目录
|
|
6
|
-
*
|
|
7
|
-
* 权限控制:
|
|
8
|
-
* - 创建时需提供 creatorId, creatorName,可选 isPublic(默认私有)
|
|
9
|
-
* - 读取/搜索/列出时需提供 requestorId,只返回自己的记忆 + 公开的记忆
|
|
10
|
-
* - 更新/删除时需提供操作者 ID,只有创建者可操作自己的记忆
|
|
11
|
-
*/
|
|
12
|
-
import { Router } from "express";
|
|
13
|
-
import { validateInternalApiKey } from "../middleware/auth.js";
|
|
14
|
-
import { createLogger } from "../utils/logger.js";
|
|
15
|
-
import { getMemoryDirPath, memoryService, } from "../services/memory-service.js";
|
|
16
|
-
const log = createLogger("memory-routes");
|
|
17
|
-
export const memoryRouter = Router();
|
|
18
|
-
/**
|
|
19
|
-
* 创建记忆
|
|
20
|
-
* POST /runtime/memory/create
|
|
21
|
-
*
|
|
22
|
-
* 请求体参数:
|
|
23
|
-
* - workspacePath: 工作目录(必需)
|
|
24
|
-
* - memory_type: 记忆类型(必需)
|
|
25
|
-
* - uri: 记忆 URI(必需)
|
|
26
|
-
* - content: 记忆内容(必需)
|
|
27
|
-
* - creatorId: 创建者 Agent ID(必需)
|
|
28
|
-
* - creatorName: 创建者显示名(必需)
|
|
29
|
-
* - isPublic: 是否公开(可选,默认 false)
|
|
30
|
-
*/
|
|
31
|
-
memoryRouter.post("/memory/create", validateInternalApiKey, async (req, res) => {
|
|
32
|
-
const { workspacePath, memory_type, uri, content, creatorId, creatorName, isPublic, } = req.body || {};
|
|
33
|
-
try {
|
|
34
|
-
const normalizedWorkspace = workspacePath
|
|
35
|
-
? String(workspacePath).trim()
|
|
36
|
-
: "";
|
|
37
|
-
if (!normalizedWorkspace) {
|
|
38
|
-
res.status(400).json({ error: "workspacePath is required" });
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
if (!memory_type || !uri || !content) {
|
|
42
|
-
res
|
|
43
|
-
.status(400)
|
|
44
|
-
.json({ error: "memory_type, uri, content are required" });
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
if (!creatorId || !creatorName) {
|
|
48
|
-
res.status(400).json({ error: "creatorId, creatorName are required" });
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
const input = {
|
|
52
|
-
memory_type: memory_type,
|
|
53
|
-
uri: String(uri),
|
|
54
|
-
content: String(content),
|
|
55
|
-
creatorId: String(creatorId),
|
|
56
|
-
creatorName: String(creatorName),
|
|
57
|
-
isPublic: isPublic === true, // 默认 false,只有显式传 true 才为公开
|
|
58
|
-
};
|
|
59
|
-
const record = await memoryService.createMemory(normalizedWorkspace, input);
|
|
60
|
-
const memoryDir = await getMemoryDirPath(normalizedWorkspace);
|
|
61
|
-
res.json({
|
|
62
|
-
ok: true,
|
|
63
|
-
record,
|
|
64
|
-
memoryDir,
|
|
65
|
-
visibility: record.isPublic ? "公开(小组内可读取)" : "私有",
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
catch (error) {
|
|
69
|
-
const err = error;
|
|
70
|
-
log.error(`[memory/create] ${err.message}`);
|
|
71
|
-
res.status(400).json({ error: err.message });
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
/**
|
|
75
|
-
* 读取记忆
|
|
76
|
-
* POST /runtime/memory/read
|
|
77
|
-
*
|
|
78
|
-
* 请求体参数:
|
|
79
|
-
* - workspacePath: 工作目录(必需)
|
|
80
|
-
* - uri: 记忆 URI(必需)
|
|
81
|
-
* - memory_type: 记忆类型(可选)
|
|
82
|
-
* - requestorId: 请求者 Agent ID(必需,用于权限判断)
|
|
83
|
-
*/
|
|
84
|
-
memoryRouter.post("/memory/read", validateInternalApiKey, async (req, res) => {
|
|
85
|
-
const { workspacePath, uri, memory_type, requestorId } = req.body || {};
|
|
86
|
-
try {
|
|
87
|
-
const normalizedWorkspace = workspacePath
|
|
88
|
-
? String(workspacePath).trim()
|
|
89
|
-
: "";
|
|
90
|
-
if (!normalizedWorkspace) {
|
|
91
|
-
res.status(400).json({ error: "workspacePath is required" });
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
if (!uri) {
|
|
95
|
-
res.status(400).json({ error: "uri is required" });
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
if (!requestorId) {
|
|
99
|
-
res.status(400).json({ error: "requestorId is required" });
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
const input = {
|
|
103
|
-
uri: String(uri),
|
|
104
|
-
memory_type: memory_type,
|
|
105
|
-
requestorId: String(requestorId),
|
|
106
|
-
};
|
|
107
|
-
const record = await memoryService.readMemory(normalizedWorkspace, input);
|
|
108
|
-
if (!record) {
|
|
109
|
-
res.json({
|
|
110
|
-
ok: true,
|
|
111
|
-
found: false,
|
|
112
|
-
message: `Memory not found or no access: ${uri}`,
|
|
113
|
-
});
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
res.json({
|
|
117
|
-
ok: true,
|
|
118
|
-
found: true,
|
|
119
|
-
record,
|
|
120
|
-
// 标注来源信息(如果是他人公开的记忆)
|
|
121
|
-
isOwn: record.isOwn,
|
|
122
|
-
source: record.source,
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
catch (error) {
|
|
126
|
-
const err = error;
|
|
127
|
-
log.error(`[memory/read] ${err.message}`);
|
|
128
|
-
res.status(400).json({ error: err.message });
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
/**
|
|
132
|
-
* 更新记忆
|
|
133
|
-
* POST /runtime/memory/update
|
|
134
|
-
*
|
|
135
|
-
* 请求体参数:
|
|
136
|
-
* - workspacePath: 工作目录(必需)
|
|
137
|
-
* - uri: 记忆 URI(必需)
|
|
138
|
-
* - memory_type: 记忆类型(可选)
|
|
139
|
-
* - old_string + new_string: 精确替换
|
|
140
|
-
* - append: 追加内容
|
|
141
|
-
* - editorId: 编辑者 Agent ID(必需,用于权限校验和记录)
|
|
142
|
-
* - editorName: 编辑者显示名(必需)
|
|
143
|
-
*/
|
|
144
|
-
memoryRouter.post("/memory/update", validateInternalApiKey, async (req, res) => {
|
|
145
|
-
const { workspacePath, uri, memory_type, old_string, new_string, append, editorId, editorName, } = req.body || {};
|
|
146
|
-
try {
|
|
147
|
-
const normalizedWorkspace = workspacePath
|
|
148
|
-
? String(workspacePath).trim()
|
|
149
|
-
: "";
|
|
150
|
-
if (!normalizedWorkspace) {
|
|
151
|
-
res.status(400).json({ error: "workspacePath is required" });
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
if (!uri) {
|
|
155
|
-
res.status(400).json({ error: "uri is required" });
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
158
|
-
if (!editorId || !editorName) {
|
|
159
|
-
res.status(400).json({ error: "editorId, editorName are required" });
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
if (!old_string && !new_string && !append) {
|
|
163
|
-
res
|
|
164
|
-
.status(400)
|
|
165
|
-
.json({ error: "need old_string+new_string or append parameter" });
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
const input = {
|
|
169
|
-
uri: String(uri),
|
|
170
|
-
memory_type: memory_type,
|
|
171
|
-
old_string: old_string ? String(old_string) : undefined,
|
|
172
|
-
new_string: new_string ? String(new_string) : undefined,
|
|
173
|
-
append: append ? String(append) : undefined,
|
|
174
|
-
editorId: String(editorId),
|
|
175
|
-
editorName: String(editorName),
|
|
176
|
-
};
|
|
177
|
-
const record = await memoryService.updateMemory(normalizedWorkspace, input);
|
|
178
|
-
res.json({
|
|
179
|
-
ok: true,
|
|
180
|
-
record,
|
|
181
|
-
lastEditor: record.lastEditorName
|
|
182
|
-
? `${record.lastEditorName} (${record.lastEditorId})`
|
|
183
|
-
: undefined,
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
catch (error) {
|
|
187
|
-
const err = error;
|
|
188
|
-
log.error(`[memory/update] ${err.message}`);
|
|
189
|
-
res.status(400).json({ error: err.message });
|
|
190
|
-
}
|
|
191
|
-
});
|
|
192
|
-
/**
|
|
193
|
-
* 删除记忆
|
|
194
|
-
* POST /runtime/memory/delete
|
|
195
|
-
*
|
|
196
|
-
* 请求体参数:
|
|
197
|
-
* - workspacePath: 工作目录(必需)
|
|
198
|
-
* - uri: 记忆 URI(必需)
|
|
199
|
-
* - memory_type: 记忆类型(可选)
|
|
200
|
-
* - requestorId: 请求者 Agent ID(必需,只有创建者可删除)
|
|
201
|
-
*/
|
|
202
|
-
memoryRouter.post("/memory/delete", validateInternalApiKey, async (req, res) => {
|
|
203
|
-
const { workspacePath, uri, memory_type, requestorId } = req.body || {};
|
|
204
|
-
try {
|
|
205
|
-
const normalizedWorkspace = workspacePath
|
|
206
|
-
? String(workspacePath).trim()
|
|
207
|
-
: "";
|
|
208
|
-
if (!normalizedWorkspace) {
|
|
209
|
-
res.status(400).json({ error: "workspacePath is required" });
|
|
210
|
-
return;
|
|
211
|
-
}
|
|
212
|
-
if (!uri) {
|
|
213
|
-
res.status(400).json({ error: "uri is required" });
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
if (!requestorId) {
|
|
217
|
-
res.status(400).json({ error: "requestorId is required" });
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
const input = {
|
|
221
|
-
uri: String(uri),
|
|
222
|
-
memory_type: memory_type,
|
|
223
|
-
requestorId: String(requestorId),
|
|
224
|
-
};
|
|
225
|
-
const result = await memoryService.deleteMemory(normalizedWorkspace, input);
|
|
226
|
-
res.json({
|
|
227
|
-
ok: true,
|
|
228
|
-
deleted: result.deleted,
|
|
229
|
-
uri,
|
|
230
|
-
reason: result.deleted ? undefined : result.reason,
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
catch (error) {
|
|
234
|
-
const err = error;
|
|
235
|
-
log.error(`[memory/delete] ${err.message}`);
|
|
236
|
-
res.status(400).json({ error: err.message });
|
|
237
|
-
}
|
|
238
|
-
});
|
|
239
|
-
/**
|
|
240
|
-
* 搜索记忆
|
|
241
|
-
* POST /runtime/memory/search
|
|
242
|
-
*
|
|
243
|
-
* 请求体参数:
|
|
244
|
-
* - workspacePath: 工作目录(必需)
|
|
245
|
-
* - query: 搜索关键词(必需)
|
|
246
|
-
* - memory_type: 记忆类型过滤(可选)
|
|
247
|
-
* - limit: 结果数量限制(可选,默认 10)
|
|
248
|
-
* - requestorId: 请求者 Agent ID(必需,只返回自己的 + 公开的)
|
|
249
|
-
*/
|
|
250
|
-
memoryRouter.post("/memory/search", validateInternalApiKey, async (req, res) => {
|
|
251
|
-
const { workspacePath, query, memory_type, limit, requestorId } = req.body || {};
|
|
252
|
-
try {
|
|
253
|
-
const normalizedWorkspace = workspacePath
|
|
254
|
-
? String(workspacePath).trim()
|
|
255
|
-
: "";
|
|
256
|
-
if (!normalizedWorkspace) {
|
|
257
|
-
res.status(400).json({ error: "workspacePath is required" });
|
|
258
|
-
return;
|
|
259
|
-
}
|
|
260
|
-
if (!query) {
|
|
261
|
-
res.status(400).json({ error: "query is required" });
|
|
262
|
-
return;
|
|
263
|
-
}
|
|
264
|
-
if (!requestorId) {
|
|
265
|
-
res.status(400).json({ error: "requestorId is required" });
|
|
266
|
-
return;
|
|
267
|
-
}
|
|
268
|
-
const input = {
|
|
269
|
-
query: String(query),
|
|
270
|
-
memory_type: memory_type,
|
|
271
|
-
limit: typeof limit === "number" ? limit : 10,
|
|
272
|
-
requestorId: String(requestorId),
|
|
273
|
-
};
|
|
274
|
-
const result = await memoryService.searchMemory(normalizedWorkspace, input);
|
|
275
|
-
// 为结果添加来源标注
|
|
276
|
-
const annotatedResults = result.results.map((r) => ({
|
|
277
|
-
...r,
|
|
278
|
-
isOwn: r.isOwn,
|
|
279
|
-
source: r.source,
|
|
280
|
-
}));
|
|
281
|
-
res.json({
|
|
282
|
-
ok: true,
|
|
283
|
-
query: result.query,
|
|
284
|
-
results: annotatedResults,
|
|
285
|
-
count: annotatedResults.length,
|
|
286
|
-
totalFound: result.totalFound,
|
|
287
|
-
});
|
|
288
|
-
}
|
|
289
|
-
catch (error) {
|
|
290
|
-
const err = error;
|
|
291
|
-
log.error(`[memory/search] ${err.message}`);
|
|
292
|
-
res.status(400).json({ error: err.message });
|
|
293
|
-
}
|
|
294
|
-
});
|
|
295
|
-
/**
|
|
296
|
-
* 按类型列出记忆
|
|
297
|
-
* POST /runtime/memory/list
|
|
298
|
-
*
|
|
299
|
-
* 请求体参数:
|
|
300
|
-
* - workspacePath: 工作目录(必需)
|
|
301
|
-
* - memory_type: 记忆类型(必需,task_list 或 recently_memory)
|
|
302
|
-
* - requestorId: 请求者 Agent ID(必需,只返回自己的 + 公开的)
|
|
303
|
-
*/
|
|
304
|
-
memoryRouter.post("/memory/list", validateInternalApiKey, async (req, res) => {
|
|
305
|
-
const { workspacePath, memory_type, requestorId } = req.body || {};
|
|
306
|
-
try {
|
|
307
|
-
const normalizedWorkspace = workspacePath
|
|
308
|
-
? String(workspacePath).trim()
|
|
309
|
-
: "";
|
|
310
|
-
if (!normalizedWorkspace) {
|
|
311
|
-
res.status(400).json({ error: "workspacePath is required" });
|
|
312
|
-
return;
|
|
313
|
-
}
|
|
314
|
-
if (!memory_type) {
|
|
315
|
-
res.status(400).json({
|
|
316
|
-
error: "memory_type is required (task_list or recently_memory)",
|
|
317
|
-
});
|
|
318
|
-
return;
|
|
319
|
-
}
|
|
320
|
-
const type = memory_type;
|
|
321
|
-
if (type !== "task_list" && type !== "recently_memory") {
|
|
322
|
-
res
|
|
323
|
-
.status(400)
|
|
324
|
-
.json({ error: "memory_type must be task_list or recently_memory" });
|
|
325
|
-
return;
|
|
326
|
-
}
|
|
327
|
-
if (!requestorId) {
|
|
328
|
-
res.status(400).json({ error: "requestorId is required" });
|
|
329
|
-
return;
|
|
330
|
-
}
|
|
331
|
-
const input = {
|
|
332
|
-
memory_type: type,
|
|
333
|
-
requestorId: String(requestorId),
|
|
334
|
-
};
|
|
335
|
-
const records = await memoryService.listByType(normalizedWorkspace, input);
|
|
336
|
-
// 为结果添加来源标注
|
|
337
|
-
const annotatedRecords = records.map((r) => ({
|
|
338
|
-
...r,
|
|
339
|
-
isOwn: r.isOwn,
|
|
340
|
-
source: r.source,
|
|
341
|
-
}));
|
|
342
|
-
res.json({
|
|
343
|
-
ok: true,
|
|
344
|
-
memory_type: type,
|
|
345
|
-
count: annotatedRecords.length,
|
|
346
|
-
records: annotatedRecords,
|
|
347
|
-
});
|
|
348
|
-
}
|
|
349
|
-
catch (error) {
|
|
350
|
-
const err = error;
|
|
351
|
-
log.error(`[memory/list] ${err.message}`);
|
|
352
|
-
res.status(400).json({ error: err.message });
|
|
353
|
-
}
|
|
354
|
-
});
|
|
355
|
-
/**
|
|
356
|
-
* 归档短期记忆
|
|
357
|
-
* POST /runtime/memory/archive
|
|
358
|
-
*
|
|
359
|
-
* 请求体参数:
|
|
360
|
-
* - workspacePath: 工作目录(必需)
|
|
361
|
-
* - uri: 记忆 URI(必需)
|
|
362
|
-
* - requestorId: 请求者 Agent ID(必需,只有创建者可归档)
|
|
363
|
-
*/
|
|
364
|
-
memoryRouter.post("/memory/archive", validateInternalApiKey, async (req, res) => {
|
|
365
|
-
const { workspacePath, uri, requestorId } = req.body || {};
|
|
366
|
-
try {
|
|
367
|
-
const normalizedWorkspace = workspacePath
|
|
368
|
-
? String(workspacePath).trim()
|
|
369
|
-
: "";
|
|
370
|
-
if (!normalizedWorkspace) {
|
|
371
|
-
res.status(400).json({ error: "workspacePath is required" });
|
|
372
|
-
return;
|
|
373
|
-
}
|
|
374
|
-
if (!uri) {
|
|
375
|
-
res.status(400).json({ error: "uri is required" });
|
|
376
|
-
return;
|
|
377
|
-
}
|
|
378
|
-
if (!requestorId) {
|
|
379
|
-
res.status(400).json({ error: "requestorId is required" });
|
|
380
|
-
return;
|
|
381
|
-
}
|
|
382
|
-
const record = await memoryService.archiveRecentlyMemory(normalizedWorkspace, String(uri), String(requestorId));
|
|
383
|
-
res.json({
|
|
384
|
-
ok: true,
|
|
385
|
-
archived: true,
|
|
386
|
-
record,
|
|
387
|
-
message: `已归档到长期记忆(cold-memory.json)`,
|
|
388
|
-
});
|
|
389
|
-
}
|
|
390
|
-
catch (error) {
|
|
391
|
-
const err = error;
|
|
392
|
-
log.error(`[memory/archive] ${err.message}`);
|
|
393
|
-
res.status(400).json({ error: err.message });
|
|
394
|
-
}
|
|
395
|
-
});
|
|
396
|
-
/**
|
|
397
|
-
* 获取记忆统计信息
|
|
398
|
-
* POST /runtime/memory/stats
|
|
399
|
-
*
|
|
400
|
-
* 请求体参数:
|
|
401
|
-
* - workspacePath: 工作目录(必需)
|
|
402
|
-
* - requestorId: 请求者 Agent ID(可选,用于计算可访问数量)
|
|
403
|
-
*/
|
|
404
|
-
memoryRouter.post("/memory/stats", validateInternalApiKey, async (req, res) => {
|
|
405
|
-
const { workspacePath, requestorId } = req.body || {};
|
|
406
|
-
try {
|
|
407
|
-
const normalizedWorkspace = workspacePath
|
|
408
|
-
? String(workspacePath).trim()
|
|
409
|
-
: "";
|
|
410
|
-
if (!normalizedWorkspace) {
|
|
411
|
-
res.status(400).json({ error: "workspacePath is required" });
|
|
412
|
-
return;
|
|
413
|
-
}
|
|
414
|
-
const stats = await memoryService.getStats(normalizedWorkspace, requestorId ? String(requestorId) : undefined);
|
|
415
|
-
res.json({
|
|
416
|
-
ok: true,
|
|
417
|
-
stats,
|
|
418
|
-
memoryDir: stats.memoryDir,
|
|
419
|
-
summary: requestorId
|
|
420
|
-
? `总计 ${stats.total} 条记忆,其中 ${stats.own} 条属于你,${stats.public} 条公开,${stats.accessible} 条可访问`
|
|
421
|
-
: `总计 ${stats.total} 条记忆`,
|
|
422
|
-
});
|
|
423
|
-
}
|
|
424
|
-
catch (error) {
|
|
425
|
-
const err = error;
|
|
426
|
-
log.error(`[memory/stats] ${err.message}`);
|
|
427
|
-
res.status(400).json({ error: err.message });
|
|
428
|
-
}
|
|
429
|
-
});
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
-
export interface AwsMcpContext {
|
|
3
|
-
agentId: string;
|
|
4
|
-
workspacePath?: string;
|
|
5
|
-
}
|
|
6
|
-
export declare const AWS_MCP_TOOLS: Tool[];
|
|
7
|
-
export declare function normalizeAwsMcpArgs(args: unknown): Record<string, unknown>;
|
|
8
|
-
export declare function mapAwsMcpToolName(toolName: string): string;
|
|
9
|
-
export declare function injectAwsMcpContext(toolName: string, args: Record<string, unknown>, context: AwsMcpContext): Record<string, unknown>;
|
|
10
|
-
export declare function callAwsMcpTool(toolName: string, args: unknown, context: AwsMcpContext): Promise<unknown>;
|
|
11
|
-
//# sourceMappingURL=aws-mcp-http.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"aws-mcp-http.d.ts","sourceRoot":"","sources":["../../src/services/aws-mcp-http.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAW/D,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA0BD,eAAO,MAAM,aAAa,EAAE,IAAI,EAwH/B,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE1E;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQ1D;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUpI;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAa9G"}
|
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
import axios from 'axios';
|
|
2
|
-
import { schedulerBaseUrl } from '../config.js';
|
|
3
|
-
import { createLogger } from '../utils/logger.js';
|
|
4
|
-
const log = createLogger('aws-mcp-http');
|
|
5
|
-
const DEFAULT_INTERNAL_API_KEY = 'agentswork-internal-dev-key';
|
|
6
|
-
const DEFAULT_TOOL_TIMEOUT_MS = 30000;
|
|
7
|
-
const POLL_MESSAGE_TIMEOUT_MS = 65000;
|
|
8
|
-
export const AWS_MCP_TOOLS = [
|
|
9
|
-
{
|
|
10
|
-
name: 'get_colleague',
|
|
11
|
-
description: '获取当前 Agent 可见的同事 Agent 列表,包含在线和离线状态。',
|
|
12
|
-
inputSchema: { type: 'object', properties: {}, required: [] },
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
name: 'get_group_rooms',
|
|
16
|
-
description: '获取当前 Agent 在关系图中可发现的群组列表,包括项目公共群聊以及自己所在的小组群。',
|
|
17
|
-
inputSchema: { type: 'object', properties: {}, required: [] },
|
|
18
|
-
},
|
|
19
|
-
{
|
|
20
|
-
name: 'get_profile',
|
|
21
|
-
description: '获取当前 Agent 的个人信息,包括 ID、显示名称、角色名称、Prompt、在线状态等。',
|
|
22
|
-
inputSchema: { type: 'object', properties: {}, required: [] },
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
name: 'get_status',
|
|
26
|
-
description: '获取当前 Agent 的运行状态(连接状态、消息循环状态等)。',
|
|
27
|
-
inputSchema: { type: 'object', properties: {}, required: [] },
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
name: 'send_group',
|
|
31
|
-
description: '向公共群聊发送消息,所有在线参与者都能收到。回复群消息时建议传入消息中的 projectName,确保回复到正确的项目群聊。',
|
|
32
|
-
inputSchema: {
|
|
33
|
-
type: 'object',
|
|
34
|
-
properties: {
|
|
35
|
-
content: { type: 'string', description: '消息内容' },
|
|
36
|
-
projectName: { type: 'string', description: '目标项目名(可选)。不传则使用 Agent 所属项目(由服务端决定)。' },
|
|
37
|
-
roomId: { type: 'string', description: '目标群聊房间 ID(可选)。' },
|
|
38
|
-
},
|
|
39
|
-
required: ['content'],
|
|
40
|
-
},
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
name: 'send_private',
|
|
44
|
-
description: '发送私信给指定用户。支持两种模式:通知式(waitReply=false)和调用式(waitReply=true,阻塞等待回复)。',
|
|
45
|
-
inputSchema: {
|
|
46
|
-
type: 'object',
|
|
47
|
-
properties: {
|
|
48
|
-
targetId: { type: 'string', description: '目标用户ID' },
|
|
49
|
-
content: { type: 'string', description: '消息内容' },
|
|
50
|
-
waitReply: { type: 'boolean', description: '是否等待对方回复(调用式)。' },
|
|
51
|
-
replyToCallId: { type: 'string', description: '回复的调用ID(用于回复调用式消息)' },
|
|
52
|
-
timeoutMs: { type: 'number', description: '等待回复的超时时间(毫秒,可选)。' },
|
|
53
|
-
},
|
|
54
|
-
required: ['targetId', 'content'],
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
name: 'poll_message',
|
|
59
|
-
description: '获取未读消息(包括群消息和私信),持续阻塞等待直到有新消息,这是获取消息的主要接口。',
|
|
60
|
-
inputSchema: { type: 'object', properties: {}, required: [] },
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
name: 'get_message',
|
|
64
|
-
description: '获取未读消息(非阻塞),从消息缓冲区获取消息,立即返回,若当前没有任务应使用 poll_message。',
|
|
65
|
-
inputSchema: { type: 'object', properties: {}, required: [] },
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
name: 'get_dm_history',
|
|
69
|
-
description: '获取私信历史消息。可以获取与特定用户的对话历史,或获取所有私信历史。',
|
|
70
|
-
inputSchema: {
|
|
71
|
-
type: 'object',
|
|
72
|
-
properties: {
|
|
73
|
-
targetUserId: { type: 'string', description: '目标用户ID(可选)。' },
|
|
74
|
-
limit: { type: 'number', description: '获取最近历史消息的数量(默认50)' },
|
|
75
|
-
since: { type: 'string', description: '起始时间(ISO 8601 格式,可选)。' },
|
|
76
|
-
},
|
|
77
|
-
required: [],
|
|
78
|
-
},
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
name: 'get_group_history',
|
|
82
|
-
description: '获取公共群聊的历史消息。',
|
|
83
|
-
inputSchema: {
|
|
84
|
-
type: 'object',
|
|
85
|
-
properties: {
|
|
86
|
-
limit: { type: 'number', description: '获取最近历史消息的数量(默认50)' },
|
|
87
|
-
roomId: { type: 'string', description: '目标群聊房间 ID(可选)。' },
|
|
88
|
-
since: { type: 'string', description: '起始时间(ISO 8601 格式,可选)。' },
|
|
89
|
-
},
|
|
90
|
-
required: [],
|
|
91
|
-
},
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
name: 'hire_colleague',
|
|
95
|
-
description: '向人事部发起招聘同事请求,直接按创建角色实例所需参数创建一个新的 Agent 同事。',
|
|
96
|
-
inputSchema: { type: 'object', properties: {}, required: [] },
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
name: 'hire_colleagues_batch',
|
|
100
|
-
description: '向人事部发起批量招聘同事请求,一次提交多个待审批招聘项。',
|
|
101
|
-
inputSchema: { type: 'object', properties: {}, required: [] },
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
name: 'my_task',
|
|
105
|
-
description: '获取当前 Agent 被分配的流程线任务列表。',
|
|
106
|
-
inputSchema: { type: 'object', properties: {}, required: [] },
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
name: 'start_task',
|
|
110
|
-
description: '将流程线任务节点标记为处理中。',
|
|
111
|
-
inputSchema: { type: 'object', properties: { nodeId: { type: 'string' } }, required: ['nodeId'] },
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
name: 'submit_task_result',
|
|
115
|
-
description: '提交流程线任务的执行结果。',
|
|
116
|
-
inputSchema: { type: 'object', properties: { nodeId: { type: 'string' }, outputPayload: { type: 'string' } }, required: ['nodeId', 'outputPayload'] },
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
name: 'reject_task',
|
|
120
|
-
description: '拒绝对前序节点输出的任务,任务将回退到前一个节点重新执行。',
|
|
121
|
-
inputSchema: { type: 'object', properties: { nodeId: { type: 'string' }, reason: { type: 'string' } }, required: ['nodeId', 'reason'] },
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
name: 'terminate_task',
|
|
125
|
-
description: '终止整个流程线任务。',
|
|
126
|
-
inputSchema: { type: 'object', properties: { taskInstanceId: { type: 'string' }, reason: { type: 'string' } }, required: ['taskInstanceId', 'reason'] },
|
|
127
|
-
},
|
|
128
|
-
];
|
|
129
|
-
export function normalizeAwsMcpArgs(args) {
|
|
130
|
-
return args && typeof args === 'object' && !Array.isArray(args) ? { ...args } : {};
|
|
131
|
-
}
|
|
132
|
-
export function mapAwsMcpToolName(toolName) {
|
|
133
|
-
const mapping = {
|
|
134
|
-
get_colleague: 'discover_colleague',
|
|
135
|
-
get_group_rooms: 'discover_group_rooms',
|
|
136
|
-
send_group: 'send_group_message',
|
|
137
|
-
send_private: 'send_dm',
|
|
138
|
-
};
|
|
139
|
-
return mapping[toolName] || toolName;
|
|
140
|
-
}
|
|
141
|
-
export function injectAwsMcpContext(toolName, args, context) {
|
|
142
|
-
const nextArgs = { ...args, agentId: context.agentId };
|
|
143
|
-
if (context.workspacePath && nextArgs.workspacePath == null) {
|
|
144
|
-
nextArgs.workspacePath = context.workspacePath;
|
|
145
|
-
}
|
|
146
|
-
if (toolName === 'send_private') {
|
|
147
|
-
nextArgs.requireReply = Boolean(nextArgs.waitReply);
|
|
148
|
-
delete nextArgs.waitReply;
|
|
149
|
-
}
|
|
150
|
-
return nextArgs;
|
|
151
|
-
}
|
|
152
|
-
export async function callAwsMcpTool(toolName, args, context) {
|
|
153
|
-
const normalizedArgs = normalizeAwsMcpArgs(args);
|
|
154
|
-
if (toolName === 'get_status') {
|
|
155
|
-
return { agentId: context.agentId, isConnected: true, transport: 'http', bridge: 'aws-runtime-bridge' };
|
|
156
|
-
}
|
|
157
|
-
if (toolName === 'poll_message') {
|
|
158
|
-
return pollMessages(context, true);
|
|
159
|
-
}
|
|
160
|
-
if (toolName === 'get_message') {
|
|
161
|
-
return pollMessages(context, false);
|
|
162
|
-
}
|
|
163
|
-
return callSchedulerMcpTool(mapAwsMcpToolName(toolName), injectAwsMcpContext(toolName, normalizedArgs, context));
|
|
164
|
-
}
|
|
165
|
-
async function pollMessages(context, blockIfEmpty) {
|
|
166
|
-
const direct = await callSchedulerMcpTool('get_dm_messages', {
|
|
167
|
-
agentId: context.agentId,
|
|
168
|
-
blockIfEmpty,
|
|
169
|
-
});
|
|
170
|
-
const directMessages = Array.isArray(direct.messages) ? direct.messages : [];
|
|
171
|
-
const groupResult = await fetchAllUnreadGroupMessages(context);
|
|
172
|
-
return {
|
|
173
|
-
directMessages,
|
|
174
|
-
groupMessages: groupResult.messages,
|
|
175
|
-
...(groupResult.errors.length > 0 ? { groupErrors: groupResult.errors } : {}),
|
|
176
|
-
fromBuffer: false,
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
async function fetchAllUnreadGroupMessages(context) {
|
|
180
|
-
const messages = [];
|
|
181
|
-
const errors = [];
|
|
182
|
-
try {
|
|
183
|
-
const rooms = await callSchedulerMcpTool('discover_group_rooms', { agentId: context.agentId });
|
|
184
|
-
const groups = Array.isArray(rooms.groups) ? rooms.groups : [];
|
|
185
|
-
if (groups.length === 0) {
|
|
186
|
-
const result = await callSchedulerMcpTool('get_group_messages', { agentId: context.agentId });
|
|
187
|
-
return { messages: Array.isArray(result.messages) ? result.messages : [], errors };
|
|
188
|
-
}
|
|
189
|
-
for (const group of groups) {
|
|
190
|
-
try {
|
|
191
|
-
const result = await callSchedulerMcpTool('get_group_messages', {
|
|
192
|
-
agentId: context.agentId,
|
|
193
|
-
projectName: group.projectName,
|
|
194
|
-
roomId: group.id,
|
|
195
|
-
});
|
|
196
|
-
if (Array.isArray(result.messages)) {
|
|
197
|
-
messages.push(...result.messages);
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
catch (error) {
|
|
201
|
-
errors.push(`group ${group.id || 'unknown'}: ${error instanceof Error ? error.message : String(error)}`);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
catch (error) {
|
|
206
|
-
const message = `discover groups failed: ${error instanceof Error ? error.message : String(error)}`;
|
|
207
|
-
log.warn(message);
|
|
208
|
-
errors.push(message);
|
|
209
|
-
}
|
|
210
|
-
return { messages, errors };
|
|
211
|
-
}
|
|
212
|
-
async function callSchedulerMcpTool(tool, args) {
|
|
213
|
-
const response = await axios.post(new URL('/mcp/call', schedulerBaseUrl).toString(), { tool, arguments: args }, {
|
|
214
|
-
headers: {
|
|
215
|
-
'Content-Type': 'application/json',
|
|
216
|
-
'X-Internal-API-Key': process.env.AWS_INTERNAL_API_KEY || DEFAULT_INTERNAL_API_KEY,
|
|
217
|
-
},
|
|
218
|
-
timeout: tool === 'get_dm_messages' && args.blockIfEmpty === true ? POLL_MESSAGE_TIMEOUT_MS : DEFAULT_TOOL_TIMEOUT_MS,
|
|
219
|
-
});
|
|
220
|
-
const data = typeof response.data === 'string' ? JSON.parse(response.data) : response.data;
|
|
221
|
-
if (data?.error) {
|
|
222
|
-
throw new Error(String(data.error));
|
|
223
|
-
}
|
|
224
|
-
return data;
|
|
225
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"aws-mcp-http.test.d.ts","sourceRoot":"","sources":["../../src/services/aws-mcp-http.test.ts"],"names":[],"mappings":""}
|