aws-runtime-bridge 1.9.60 → 1.9.65
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/AcodeSdkAdapter.d.ts +7 -0
- package/dist/adapter/AcodeSdkAdapter.d.ts.map +1 -1
- package/dist/adapter/AcodeSdkAdapter.js +60 -0
- package/dist/index.js +0 -2
- package/dist/routes/sub-agents.js +16 -23
- package/package/acode/dist/fs-utils.d.ts +9 -0
- package/package/acode/dist/fs-utils.d.ts.map +1 -1
- package/package/acode/dist/fs-utils.js +22 -1
- package/package/acode/dist/runtime.d.ts.map +1 -1
- package/package/acode/dist/runtime.js +11 -3
- package/package/acode/dist/sub-agent-manager.d.ts +36 -0
- package/package/acode/dist/sub-agent-manager.d.ts.map +1 -1
- package/package/acode/dist/sub-agent-manager.js +141 -100
- package/package/acode/dist/sub-agent-store.d.ts +10 -1
- package/package/acode/dist/sub-agent-store.d.ts.map +1 -1
- package/package/acode/dist/sub-agent-store.js +10 -1
- package/package/aws-client-agent-mcp/dist/agent-client.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/agent-client.js +5 -1
- package/package/aws-client-agent-mcp/dist/agent-client.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/logger.d.ts +12 -2
- package/package/aws-client-agent-mcp/dist/logger.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/logger.js +53 -12
- package/package/aws-client-agent-mcp/dist/logger.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/logger.test.js +5 -8
- package/package/aws-client-agent-mcp/dist/logger.test.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.d.ts +16 -75
- package/package/aws-client-agent-mcp/dist/mcp-server.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.js +167 -442
- package/package/aws-client-agent-mcp/dist/mcp-server.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/memory-store.d.ts +0 -6
- package/package/aws-client-agent-mcp/dist/memory-store.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/memory-store.js +2 -22
- package/package/aws-client-agent-mcp/dist/memory-store.js.map +1 -1
- package/package.json +1 -1
- package/dist/routes/memory.d.ts +0 -37
- package/dist/routes/memory.d.ts.map +0 -1
- package/dist/routes/memory.js +0 -162
|
@@ -6,6 +6,7 @@ const STARTUP_TIME = new Date();
|
|
|
6
6
|
const DISABLE_FILE_LOG_VALUES = new Set(["0", "false", "off", "no"]);
|
|
7
7
|
const MAX_BUFFERED_NODE_LOGS = 200;
|
|
8
8
|
let startupLogFilePath;
|
|
9
|
+
let startupLogBaseDir = null;
|
|
9
10
|
let nodeLogSink = null;
|
|
10
11
|
const bufferedNodeLogs = [];
|
|
11
12
|
function pad(value, length = 2) {
|
|
@@ -24,14 +25,6 @@ export function formatStartupTimestamp(date) {
|
|
|
24
25
|
pad(date.getMilliseconds(), 3),
|
|
25
26
|
].join("");
|
|
26
27
|
}
|
|
27
|
-
export function getStartupPathName(startupPath) {
|
|
28
|
-
const normalized = String(startupPath || "").trim().replace(/[\\/]+$/, "");
|
|
29
|
-
if (!normalized) {
|
|
30
|
-
return "workspace";
|
|
31
|
-
}
|
|
32
|
-
const parts = normalized.split(/[\\/]+/).filter(Boolean);
|
|
33
|
-
return parts[parts.length - 1] || "workspace";
|
|
34
|
-
}
|
|
35
28
|
export function sanitizeLogFileNameSegment(segment) {
|
|
36
29
|
const controlCharactersPattern = new RegExp(`[${String.fromCharCode(0)}-${String.fromCharCode(31)}]`, "g");
|
|
37
30
|
const sanitized = segment
|
|
@@ -42,11 +35,19 @@ export function sanitizeLogFileNameSegment(segment) {
|
|
|
42
35
|
.replace(/[. ]+$/g, "");
|
|
43
36
|
return sanitized || "workspace";
|
|
44
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* 构建 MCP 启动日志文件路径。
|
|
40
|
+
* 路径格式:{logDir}/{roleName}-{instanceName}/{startupTimestamp}.log
|
|
41
|
+
* roleName/instanceName 优先使用传入值,未传入时使用环境变量或 "unknown-*" 兜底。
|
|
42
|
+
*/
|
|
45
43
|
export function buildStartupLogFilePath(options = {}) {
|
|
46
|
-
const
|
|
47
|
-
const
|
|
44
|
+
const baseDir = options.logDir || path.join(options.homeDir || os.homedir(), ".aws-bridge", "log");
|
|
45
|
+
const roleName = sanitizeLogFileNameSegment(options.roleName || process.env.AWS_ROLE_NAME || "unknown-role");
|
|
46
|
+
const instanceName = sanitizeLogFileNameSegment(options.instanceName || process.env.AWS_AGENT_ID || "unknown-instance");
|
|
47
|
+
const identityDir = `${roleName}-${instanceName}`;
|
|
48
|
+
const logDir = path.join(baseDir, identityDir);
|
|
48
49
|
const startupTime = formatStartupTimestamp(options.startupTime || STARTUP_TIME);
|
|
49
|
-
return path.join(logDir, `${
|
|
50
|
+
return path.join(logDir, `${startupTime}.log`);
|
|
50
51
|
}
|
|
51
52
|
export function initializeStartupLogFile() {
|
|
52
53
|
if (startupLogFilePath !== undefined) {
|
|
@@ -58,18 +59,58 @@ export function initializeStartupLogFile() {
|
|
|
58
59
|
return null;
|
|
59
60
|
}
|
|
60
61
|
try {
|
|
62
|
+
const envLogDir = process.env.AWS_MCP_LOG_DIR || undefined;
|
|
63
|
+
startupLogBaseDir = envLogDir || path.join(os.homedir(), ".aws-bridge", "log");
|
|
61
64
|
startupLogFilePath = buildStartupLogFilePath({
|
|
62
|
-
logDir:
|
|
65
|
+
logDir: startupLogBaseDir,
|
|
66
|
+
roleName: process.env.AWS_ROLE_NAME || undefined,
|
|
67
|
+
instanceName: process.env.AWS_AGENT_ID || undefined,
|
|
63
68
|
});
|
|
64
69
|
fs.mkdirSync(path.dirname(startupLogFilePath), { recursive: true });
|
|
65
70
|
return startupLogFilePath;
|
|
66
71
|
}
|
|
67
72
|
catch (error) {
|
|
68
73
|
startupLogFilePath = null;
|
|
74
|
+
startupLogBaseDir = null;
|
|
69
75
|
console.warn("[Logger] 无法创建 MCP 启动日志文件:", error);
|
|
70
76
|
return null;
|
|
71
77
|
}
|
|
72
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* 在 Agent 注册后更新日志文件路径的角色-实例标识。
|
|
81
|
+
* 主流程:使用真实的 roleName/instanceName 重新计算路径,若与原路径不同则创建新目录并移动文件。
|
|
82
|
+
*/
|
|
83
|
+
export function updateStartupLogIdentity(roleName, instanceName) {
|
|
84
|
+
if (startupLogFilePath === undefined || startupLogFilePath === null || !startupLogBaseDir) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const oldPath = startupLogFilePath;
|
|
88
|
+
const newPath = buildStartupLogFilePath({
|
|
89
|
+
logDir: startupLogBaseDir,
|
|
90
|
+
roleName,
|
|
91
|
+
instanceName,
|
|
92
|
+
startupTime: STARTUP_TIME,
|
|
93
|
+
});
|
|
94
|
+
if (oldPath === newPath) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
fs.mkdirSync(path.dirname(newPath), { recursive: true });
|
|
99
|
+
fs.renameSync(oldPath, newPath);
|
|
100
|
+
startupLogFilePath = newPath;
|
|
101
|
+
// 清理 rename 后留下的空旧目录
|
|
102
|
+
try {
|
|
103
|
+
fs.rmdirSync(path.dirname(oldPath));
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
// 目录非空或其它原因,忽略
|
|
107
|
+
}
|
|
108
|
+
console.log(`[Logger] MCP 启动日志路径已更新: ${oldPath} -> ${newPath}`);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
console.warn("[Logger] 无法更新 MCP 启动日志身份标识:", error);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
73
114
|
function writeFileLog(level, args) {
|
|
74
115
|
if (startupLogFilePath === undefined) {
|
|
75
116
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAYnC,MAAM,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;AAChC,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACrE,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAEnC,IAAI,kBAA6C,CAAC;AAClD,IAAI,WAAW,GAA0B,IAAI,CAAC;AAC9C,MAAM,gBAAgB,GAAsB,EAAE,CAAC;AAE/C,SAAS,GAAG,CAAC,KAAa,EAAE,MAAM,GAAG,CAAC;IACpC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAU;IAC/C,OAAO;QACL,IAAI,CAAC,WAAW,EAAE;QAClB,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACxB,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,GAAG;QACH,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpB,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACtB,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACtB,GAAG;QACH,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;KAC/B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC;AAED,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +1,24 @@
|
|
|
1
1
|
import assert from "node:assert/strict";
|
|
2
2
|
import * as path from "node:path";
|
|
3
3
|
import { describe, it } from "node:test";
|
|
4
|
-
import { buildStartupLogFilePath, formatStartupTimestamp,
|
|
4
|
+
import { buildStartupLogFilePath, formatStartupTimestamp, sanitizeLogFileNameSegment, } from "./logger.js";
|
|
5
5
|
describe("logger startup log path", () => {
|
|
6
6
|
it("formats startup time for log filenames", () => {
|
|
7
7
|
const startupTime = new Date(2026, 4, 5, 9, 8, 7, 6);
|
|
8
8
|
assert.equal(formatStartupTimestamp(startupTime), "20260505-090807-006");
|
|
9
9
|
});
|
|
10
|
-
it("uses the last startup path segment", () => {
|
|
11
|
-
assert.equal(getStartupPathName("D:/code/AgentsWorkStudio/demo-project/"), "demo-project");
|
|
12
|
-
assert.equal(getStartupPathName("D:\\code\\AgentsWorkStudio\\demo-project\\"), "demo-project");
|
|
13
|
-
});
|
|
14
10
|
it("sanitizes unsafe filename characters", () => {
|
|
15
11
|
assert.equal(sanitizeLogFileNameSegment('demo:bad*name?'), "demo_bad_name_");
|
|
16
12
|
});
|
|
17
|
-
it("builds log path under the aws bridge log directory", () => {
|
|
13
|
+
it("builds log path under the aws bridge log directory with role-instance subdirectory", () => {
|
|
18
14
|
const startupTime = new Date(2026, 4, 5, 9, 8, 7, 6);
|
|
19
15
|
const logFilePath = buildStartupLogFilePath({
|
|
20
16
|
homeDir: "C:/Users/dev",
|
|
21
|
-
|
|
17
|
+
roleName: "测试助手",
|
|
18
|
+
instanceName: "128M",
|
|
22
19
|
startupTime,
|
|
23
20
|
});
|
|
24
|
-
assert.equal(logFilePath, path.join("C:/Users/dev", ".aws-bridge", "log", "
|
|
21
|
+
assert.equal(logFilePath, path.join("C:/Users/dev", ".aws-bridge", "log", "测试助手-128M", "20260505-090807-006.log"));
|
|
25
22
|
});
|
|
26
23
|
});
|
|
27
24
|
//# sourceMappingURL=logger.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.test.js","sourceRoot":"","sources":["../src/logger.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,
|
|
1
|
+
{"version":3,"file":"logger.test.js","sourceRoot":"","sources":["../src/logger.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AAErB,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAErD,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,WAAW,CAAC,EAAE,qBAAqB,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oFAAoF,EAAE,GAAG,EAAE;QAC5F,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,uBAAuB,CAAC;YAC1C,OAAO,EAAE,cAAc;YACvB,QAAQ,EAAE,MAAM;YAChB,YAAY,EAAE,MAAM;YACpB,WAAW;SACZ,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CACV,WAAW,EACX,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,yBAAyB,CAAC,CACxF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -14,6 +14,8 @@ export type BoundFileStatus = 'no_change' | 'content_changed' | 'not_found' | 'n
|
|
|
14
14
|
export interface BoundFileStatusEntry {
|
|
15
15
|
path: string;
|
|
16
16
|
status: BoundFileStatus;
|
|
17
|
+
localMd5?: string;
|
|
18
|
+
serverMd5?: string;
|
|
17
19
|
}
|
|
18
20
|
export declare class McpServer {
|
|
19
21
|
private server;
|
|
@@ -22,7 +24,6 @@ export declare class McpServer {
|
|
|
22
24
|
private memoryStore;
|
|
23
25
|
private roleMemoryStore;
|
|
24
26
|
private sessionContextMemoryStore;
|
|
25
|
-
private memoryStoresShareFile;
|
|
26
27
|
private initialRoleName;
|
|
27
28
|
/** 是否有真实的角色名(非 env 空值 fallback "default-role") */
|
|
28
29
|
private hasRoleName;
|
|
@@ -30,52 +31,16 @@ export declare class McpServer {
|
|
|
30
31
|
private contextManager;
|
|
31
32
|
/** 子 Agent 模式:仅暴露 Memory 工具,拒绝非 Memory 工具调用 */
|
|
32
33
|
private isSubAgent;
|
|
33
|
-
/**
|
|
34
|
-
* 内存级去重缓存:记录本轮已通知过的 listable memory 文件变更状态。
|
|
35
|
-
* key = memoryId,value = 已通知时刻各绑定文件的 MD5 复合哈希。
|
|
36
|
-
* 文件再次变更(MD5 变化)时仍会触发新通知。
|
|
37
|
-
* 进程重启后自动清空(届时重新检测)。
|
|
38
|
-
*/
|
|
39
|
-
private notifiedFileChangeMemoryIds;
|
|
40
|
-
/**
|
|
41
|
-
* Step1「memory 仍处于 updating 状态」提醒的冷却时间戳表。
|
|
42
|
-
* key = memory URI,value = 上次发送「请继续更新」提醒的时间戳。
|
|
43
|
-
* 用于避免 buildMemoryFileChangeNotification 在 polling 周期内对 sticky 的 updating
|
|
44
|
-
* memory 每轮都裸发 _acodeAutoDelegate(进而导致运行层反复 spawn 相同子任务)。
|
|
45
|
-
* 冷却窗口内不再发出该提醒;窗口到期后若 memory 仍未处理,才会重新委托。
|
|
46
|
-
*/
|
|
47
|
-
private lastUpdatePendingNotifyAt;
|
|
48
|
-
/** Step1「仍 updating」提醒的冷却窗口(5 分钟)。冷却期内不重复裸发 _acodeAutoDelegate。 */
|
|
49
|
-
private static readonly UPDATE_PENDING_NOTIFY_COOLDOWN_MS;
|
|
50
|
-
/**
|
|
51
|
-
* 本地缓存 listable 记忆(recently_memory/agent_memory)的文件 MD5 map。
|
|
52
|
-
* 服务端(Java 后端)不持久化 file_md5_map 字段,listByType 返回的记录该字段为 undefined。
|
|
53
|
-
* 必须本地缓存才能让 checkMemoriesFileChanges 有正确的旧 MD5 做对比。
|
|
54
|
-
*/
|
|
55
|
-
private listableMd5Cache;
|
|
56
34
|
/**
|
|
57
35
|
* 租约续期定时器 (v1.21.0)。
|
|
58
36
|
* 每 60 秒续期一次当前 agent 持有的所有 updating memory 的租约。
|
|
59
37
|
*/
|
|
60
38
|
private leaseRenewalTimer;
|
|
39
|
+
private activeLeaseUris;
|
|
61
40
|
private static readonly LEASE_DURATION_MINUTES;
|
|
62
41
|
private static readonly LEASE_RENEW_INTERVAL_MS;
|
|
63
|
-
/**
|
|
64
|
-
* claim 去重缓存 (v1.21.0)。
|
|
65
|
-
* 避免 5s 后台定时器重复调 server claim 同一个 memory。
|
|
66
|
-
* key = memory URI, value = 本地缓存的租约到期时间戳。
|
|
67
|
-
* 仅缓存 claim 成功的 URI,在 lease 到期前不再调 server。
|
|
68
|
-
*/
|
|
69
|
-
private claimedCache;
|
|
70
42
|
/** profile 是否已同步(防止 activelySyncProfile 与 profileHandler 双重同步) */
|
|
71
43
|
private profileSynced;
|
|
72
|
-
/**
|
|
73
|
-
* Memory 通知 null 结果缓存:key → expiresAt 时间戳。
|
|
74
|
-
* 仅缓存 null(无通知)结果,避免 while(true) 每 30s 重复读盘。
|
|
75
|
-
* 有通知时立即投递并清除缓存,不缓存非 null 结果。
|
|
76
|
-
*/
|
|
77
|
-
private memoryNotificationNullCache;
|
|
78
|
-
private static readonly MEMORY_NOTIFICATION_NULL_TTL_MS;
|
|
79
44
|
/**
|
|
80
45
|
* poll_message 单例控制:防止并发调用导致消息被第一个消费后第二个空等。
|
|
81
46
|
* 当已有 poll 在进行时,后续调用直接等待同一个 Promise。
|
|
@@ -167,36 +132,27 @@ export declare class McpServer {
|
|
|
167
132
|
private parseMemoryType;
|
|
168
133
|
private isMemoryType;
|
|
169
134
|
/**
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
*/
|
|
173
|
-
/**
|
|
174
|
-
* 按记忆生命周期选择存储作用域。
|
|
175
|
-
* 主流程:永久记忆(project_memory)始终走本地 roleMemoryStore(.agentswork),
|
|
176
|
-
* 确保本地文件始终有副本,后续部署恢复时可通过 Local → Server 同步回 server。
|
|
177
|
-
* recently_memory/agent_memory/session_context 始终走实例级 server store。
|
|
135
|
+
* 所有类型的记忆统一走服务端(Server 是唯一权威源)。
|
|
136
|
+
* 本地 roleMemoryStore 仅用于 project_memory 的备份写入与启动恢复。
|
|
178
137
|
*/
|
|
179
138
|
private getMemoryStoreForType;
|
|
180
139
|
/**
|
|
181
|
-
*
|
|
182
|
-
* 主流程:先查角色级长期记忆 -> 再查实例级临时/近期记忆,保持旧工具参数可选语义。
|
|
140
|
+
* 读取记忆:直接走服务端(Server 是唯一权威源)。
|
|
183
141
|
*/
|
|
184
142
|
private readMemoryFromScopedStores;
|
|
185
143
|
/**
|
|
186
|
-
*
|
|
187
|
-
* 主流程:按读取优先级查找记录 -> 返回命中的 store 与规范化类型,避免跨作用域误写。
|
|
144
|
+
* 将 project_memory 异步备份到本地文件(纯灾备,不作为读取源)。
|
|
188
145
|
*/
|
|
189
|
-
private
|
|
146
|
+
private backupProjectMemoryToLocal;
|
|
190
147
|
/**
|
|
191
|
-
*
|
|
192
|
-
* 主流程:实例 store 负责 listable 限额;角色 store 只贡献长期 memory 数量。
|
|
148
|
+
* 删除 project_memory 的本地备份文件。
|
|
193
149
|
*/
|
|
194
|
-
private
|
|
150
|
+
private removeProjectMemoryLocalBackup;
|
|
195
151
|
/**
|
|
196
|
-
*
|
|
197
|
-
* 主流程:读取实例级与角色级统计 -> 合并长期 memory count -> 通过 server 广播给 Dashboard。
|
|
152
|
+
* 定位可更新/删除的存储:统一走服务端。
|
|
198
153
|
*/
|
|
199
|
-
private
|
|
154
|
+
private findMemoryStoreForMutation;
|
|
155
|
+
private reportMemoryStatsToServer;
|
|
200
156
|
/**
|
|
201
157
|
* 系统提示词由 runtime adapter 在会话创建时注入,MCP 层面不再负责返回。
|
|
202
158
|
* 详见 startListeningInternal -> profileHandler 中的合并注入逻辑。
|
|
@@ -248,7 +204,7 @@ export declare class McpServer {
|
|
|
248
204
|
private handleDeleteMemory;
|
|
249
205
|
/**
|
|
250
206
|
* 删除单条记忆的内部辅助方法。
|
|
251
|
-
* - skipStats=true 时跳过
|
|
207
|
+
* - skipStats=true 时跳过 reportMemoryStatsToServer 调用,由批量调用方统一上报一次。
|
|
252
208
|
* - 返回 true/false 表示是否实际删除(与 store.deleteMemory 一致)。
|
|
253
209
|
*/
|
|
254
210
|
private deleteMemorySingle;
|
|
@@ -354,13 +310,6 @@ export declare class McpServer {
|
|
|
354
310
|
* @returns 若生成了通知并已前置,返回 true;否则返回 false。
|
|
355
311
|
*/
|
|
356
312
|
private prependMemoryNotification;
|
|
357
|
-
/**
|
|
358
|
-
* 带 null 结果缓存的 Memory 通知构建。
|
|
359
|
-
* 主流程:查缓存 → 命中且未过期则返回 null → 未命中则调 buildFn →
|
|
360
|
-
* 结果为 null 则写入缓存(TTL 60s)→ 结果非 null 则清除缓存并返回。
|
|
361
|
-
* 目的:while(true) 每 30s 轮询时避免重复读盘,有通知时立即投递不受缓存影响。
|
|
362
|
-
*/
|
|
363
|
-
private getCachedMemoryNotification;
|
|
364
313
|
private handlePollMessage;
|
|
365
314
|
/**
|
|
366
315
|
* poll_message 主循环逻辑。
|
|
@@ -383,6 +332,7 @@ export declare class McpServer {
|
|
|
383
332
|
/**
|
|
384
333
|
* 检查本地非紧急通知(memory过期回忆、文件变更、容量整理),返回所有命中的通知。
|
|
385
334
|
* Task 不在此方法中检查,因为 Task 通过服务端 hydrate 以消息形式返回。
|
|
335
|
+
* @param includeFileChange 是否包含文件变更检测,默认 true;循环轮询时传 false 以跳过。
|
|
386
336
|
*/
|
|
387
337
|
private checkAllLocalNonUrgentNotifications;
|
|
388
338
|
private buildPollResult;
|
|
@@ -419,10 +369,6 @@ export declare class McpServer {
|
|
|
419
369
|
* 3. 检查永久记忆的文件变更,先走 Server 原子 claim,再标记本地
|
|
420
370
|
*/
|
|
421
371
|
private buildMemoryFileChangeNotification;
|
|
422
|
-
/**
|
|
423
|
-
* 检查指定 URI 是否在 claim 去重缓存内 (v1.21.0)。
|
|
424
|
-
* 在 lease 有效期内不再重复 claim。
|
|
425
|
-
*/
|
|
426
372
|
private isClaimCached;
|
|
427
373
|
/**
|
|
428
374
|
* 计算某条记忆全部绑定文件的逐文件状态(纯计算,不修改任何状态)。
|
|
@@ -442,12 +388,7 @@ export declare class McpServer {
|
|
|
442
388
|
* Memory 增强功能 (v1.6.0)
|
|
443
389
|
*/
|
|
444
390
|
private calculateFileMd5;
|
|
445
|
-
|
|
446
|
-
* 构建 Memory 文件变更通知的复合去重键。
|
|
447
|
-
* 基于 memoryId + 当前各绑定文件的 MD5 生成,当任意绑定文件内容变化时复合键也随之变化,
|
|
448
|
-
* 从而确保真实文件变更不会因简单 memoryId 去重而静默吞掉。
|
|
449
|
-
*/
|
|
450
|
-
private buildMemoryChangeNotificationKey;
|
|
391
|
+
private verifyFileNotExist;
|
|
451
392
|
private handleGetMessage;
|
|
452
393
|
/**
|
|
453
394
|
* 从服务端补拉未读消息并写入本地缓冲。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA4EH;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,iBAAiB,GAAG,WAAW,GAAG,aAAa,CAAC;AAC5F,oBAAoB;AACpB,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|