@zooique/memora 0.1.0 → 0.2.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/agent/agent.d.ts +155 -23
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +386 -124
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/assembler.d.ts +8 -2
- package/dist/agent/assembler.d.ts.map +1 -1
- package/dist/agent/assembler.js +17 -6
- package/dist/agent/assembler.js.map +1 -1
- package/dist/agent/builtinToolHandlers.d.ts +1 -1
- package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
- package/dist/agent/builtinToolHandlers.js +5 -3
- package/dist/agent/builtinToolHandlers.js.map +1 -1
- package/dist/agent/builtinTools.d.ts +1 -1
- package/dist/agent/builtinTools.js +2 -2
- package/dist/agent/builtinTools.js.map +1 -1
- package/dist/agent/constants.d.ts +27 -6
- package/dist/agent/constants.d.ts.map +1 -1
- package/dist/agent/constants.js +27 -6
- package/dist/agent/constants.js.map +1 -1
- package/dist/agent/contextManager.d.ts +35 -9
- package/dist/agent/contextManager.d.ts.map +1 -1
- package/dist/agent/contextManager.js +138 -25
- package/dist/agent/contextManager.js.map +1 -1
- package/dist/agent/loop.d.ts +41 -11
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +143 -61
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/managers/archiveCoordinator.d.ts +100 -0
- package/dist/agent/managers/archiveCoordinator.d.ts.map +1 -0
- package/dist/agent/managers/archiveCoordinator.js +127 -0
- package/dist/agent/managers/archiveCoordinator.js.map +1 -0
- package/dist/agent/managers/autoConfigRefiner.d.ts.map +1 -1
- package/dist/agent/managers/autoConfigRefiner.js +1 -1
- package/dist/agent/managers/autoConfigRefiner.js.map +1 -1
- package/dist/agent/managers/configManager.d.ts +13 -2
- package/dist/agent/managers/configManager.d.ts.map +1 -1
- package/dist/agent/managers/configManager.js +13 -5
- package/dist/agent/managers/configManager.js.map +1 -1
- package/dist/agent/managers/insightExtractor.d.ts +36 -3
- package/dist/agent/managers/insightExtractor.d.ts.map +1 -1
- package/dist/agent/managers/insightExtractor.js +48 -11
- package/dist/agent/managers/insightExtractor.js.map +1 -1
- package/dist/agent/managers/memoryAdvisor.d.ts +4 -2
- package/dist/agent/managers/memoryAdvisor.d.ts.map +1 -1
- package/dist/agent/managers/memoryAdvisor.js +6 -4
- package/dist/agent/managers/memoryAdvisor.js.map +1 -1
- package/dist/agent/managers/memoryDecayScheduler.d.ts +113 -0
- package/dist/agent/managers/memoryDecayScheduler.d.ts.map +1 -0
- package/dist/agent/managers/memoryDecayScheduler.js +134 -0
- package/dist/agent/managers/memoryDecayScheduler.js.map +1 -0
- package/dist/agent/managers/memoryInspector.d.ts +70 -10
- package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
- package/dist/agent/managers/memoryInspector.js +97 -23
- package/dist/agent/managers/memoryInspector.js.map +1 -1
- package/dist/agent/managers/sessionArchiver.d.ts +77 -0
- package/dist/agent/managers/sessionArchiver.d.ts.map +1 -0
- package/dist/agent/managers/sessionArchiver.js +175 -0
- package/dist/agent/managers/sessionArchiver.js.map +1 -0
- package/dist/agent/managers/sessionManager.d.ts +10 -0
- package/dist/agent/managers/sessionManager.d.ts.map +1 -1
- package/dist/agent/managers/sessionManager.js +26 -5
- package/dist/agent/managers/sessionManager.js.map +1 -1
- package/dist/agent/managers/workProjection.d.ts +1 -1
- package/dist/agent/managers/workProjection.d.ts.map +1 -1
- package/dist/agent/managers/workProjection.js +13 -10
- package/dist/agent/managers/workProjection.js.map +1 -1
- package/dist/agent/messageHistory.d.ts +1 -22
- package/dist/agent/messageHistory.d.ts.map +1 -1
- package/dist/agent/messageHistory.js +3 -19
- package/dist/agent/messageHistory.js.map +1 -1
- package/dist/agent/toolExecutor.d.ts +5 -18
- package/dist/agent/toolExecutor.d.ts.map +1 -1
- package/dist/agent/toolExecutor.js +7 -7
- package/dist/agent/toolExecutor.js.map +1 -1
- package/dist/agent/tracer.d.ts +8 -1
- package/dist/agent/tracer.d.ts.map +1 -1
- package/dist/agent/tracer.js +8 -1
- package/dist/agent/tracer.js.map +1 -1
- package/dist/agent/types.d.ts +29 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/{managers/userFactExtractor.d.ts → userFactExtractor.d.ts} +2 -2
- package/dist/agent/userFactExtractor.d.ts.map +1 -0
- package/dist/agent/userFactExtractor.js.map +1 -0
- package/dist/config/loader.d.ts +4 -4
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +11 -2
- package/dist/config/loader.js.map +1 -1
- package/dist/eval/evalTypes.js +1 -1
- package/dist/eval/evalTypes.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/llm/embedding.d.ts.map +1 -1
- package/dist/llm/embedding.js +8 -6
- package/dist/llm/embedding.js.map +1 -1
- package/dist/llm/factory.d.ts.map +1 -1
- package/dist/llm/factory.js +2 -1
- package/dist/llm/factory.js.map +1 -1
- package/dist/llm/openaiCompatible.d.ts +9 -0
- package/dist/llm/openaiCompatible.d.ts.map +1 -1
- package/dist/llm/openaiCompatible.js +77 -33
- package/dist/llm/openaiCompatible.js.map +1 -1
- package/dist/llm/provider.d.ts +17 -3
- package/dist/llm/provider.d.ts.map +1 -1
- package/dist/llm/provider.js +6 -2
- package/dist/llm/provider.js.map +1 -1
- package/dist/logging/logger.d.ts.map +1 -1
- package/dist/logging/logger.js +25 -9
- package/dist/logging/logger.js.map +1 -1
- package/dist/memory/hybridMerge.d.ts +54 -0
- package/dist/memory/hybridMerge.d.ts.map +1 -0
- package/dist/memory/hybridMerge.js +36 -0
- package/dist/memory/hybridMerge.js.map +1 -0
- package/dist/memory/inMemoryStorage.d.ts +90 -15
- package/dist/memory/inMemoryStorage.d.ts.map +1 -1
- package/dist/memory/inMemoryStorage.js +179 -28
- package/dist/memory/inMemoryStorage.js.map +1 -1
- package/dist/memory/loader.js +1 -1
- package/dist/memory/loader.js.map +1 -1
- package/dist/memory/projectManager.d.ts +34 -5
- package/dist/memory/projectManager.d.ts.map +1 -1
- package/dist/memory/projectManager.js +98 -62
- package/dist/memory/projectManager.js.map +1 -1
- package/dist/memory/recall.d.ts +7 -18
- package/dist/memory/recall.d.ts.map +1 -1
- package/dist/memory/recall.js +14 -19
- package/dist/memory/recall.js.map +1 -1
- package/dist/memory/storageInterface.d.ts +81 -14
- package/dist/memory/storageInterface.d.ts.map +1 -1
- package/dist/memory/store.js +1 -1
- package/dist/memory/store.js.map +1 -1
- package/dist/memory/types.d.ts +7 -1
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/memory/types.js +5 -1
- package/dist/memory/types.js.map +1 -1
- package/dist/memory/userProfile.d.ts +6 -6
- package/dist/memory/userProfile.d.ts.map +1 -1
- package/dist/memory/userProfile.js +20 -15
- package/dist/memory/userProfile.js.map +1 -1
- package/dist/memory/vectorStore.d.ts +35 -0
- package/dist/memory/vectorStore.d.ts.map +1 -1
- package/dist/memory/vectorStore.js +111 -2
- package/dist/memory/vectorStore.js.map +1 -1
- package/dist/persona/personaManager.d.ts +17 -4
- package/dist/persona/personaManager.d.ts.map +1 -1
- package/dist/persona/personaManager.js +44 -12
- package/dist/persona/personaManager.js.map +1 -1
- package/dist/security/pathGuard.d.ts +29 -7
- package/dist/security/pathGuard.d.ts.map +1 -1
- package/dist/security/pathGuard.js +148 -81
- package/dist/security/pathGuard.js.map +1 -1
- package/dist/skill/skillManager.d.ts +15 -0
- package/dist/skill/skillManager.d.ts.map +1 -1
- package/dist/skill/skillManager.js +25 -3
- package/dist/skill/skillManager.js.map +1 -1
- package/dist/skill/types.d.ts +7 -1
- package/dist/skill/types.d.ts.map +1 -1
- package/dist/utils/errors.d.ts +26 -7
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +10 -18
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/eventEmitter.d.ts +9 -2
- package/dist/utils/eventEmitter.d.ts.map +1 -1
- package/dist/utils/eventEmitter.js +1 -1
- package/dist/utils/eventEmitter.js.map +1 -1
- package/dist/utils/frontmatter.d.ts +8 -1
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +14 -3
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/path.d.ts +5 -1
- package/dist/utils/path.d.ts.map +1 -1
- package/dist/utils/path.js +5 -1
- package/dist/utils/path.js.map +1 -1
- package/dist/utils/safeTimer.d.ts +19 -0
- package/dist/utils/safeTimer.d.ts.map +1 -1
- package/dist/utils/safeTimer.js +27 -0
- package/dist/utils/safeTimer.js.map +1 -1
- package/dist/utils/segmenter.d.ts +0 -12
- package/dist/utils/segmenter.d.ts.map +1 -1
- package/dist/utils/segmenter.js +8 -3
- package/dist/utils/segmenter.js.map +1 -1
- package/dist/utils/strings.d.ts +1 -1
- package/dist/utils/strings.d.ts.map +1 -1
- package/dist/utils/strings.js +4 -2
- package/dist/utils/strings.js.map +1 -1
- package/package.json +1 -1
- package/dist/agent/managers/userFactExtractor.d.ts.map +0 -1
- package/dist/agent/managers/userFactExtractor.js.map +0 -1
- /package/dist/agent/{managers/userFactExtractor.js → userFactExtractor.js} +0 -0
package/dist/llm/provider.js
CHANGED
|
@@ -6,8 +6,12 @@ export class LlmProvider {
|
|
|
6
6
|
/**
|
|
7
7
|
* 是否支持结构化输出(response_format json_schema)
|
|
8
8
|
*
|
|
9
|
-
* 默认 false
|
|
10
|
-
*
|
|
9
|
+
* 默认 false,子类可覆盖。用于非 tool_call 场景的结构化输出约束
|
|
10
|
+
* (如归档摘要强制 JSON、配置建议提取等)。调用方在构造 ChatOptions
|
|
11
|
+
* 时显式传入 response_format,Provider 应将其透传到请求 body。
|
|
12
|
+
*
|
|
13
|
+
* 注意:response_format 不能与 tools 同时使用(OpenAI 协议限制),
|
|
14
|
+
* tool_calls 走独立的 SSE delta 流式协议,无需此约束。
|
|
11
15
|
*/
|
|
12
16
|
supportsStructuredOutput = false;
|
|
13
17
|
}
|
package/dist/llm/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/llm/provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/llm/provider.ts"],"names":[],"mappings":"AAoFA;;;GAGG;AACH,MAAM,OAAgB,WAAW;IAG/B;;;;;;;;;OASG;IACM,wBAAwB,GAAY,KAAK,CAAC;CAOpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logging/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,OAAO,EAAS,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logging/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,OAAO,EAAS,MAAM,8BAA8B,CAAC;AA8PnE;;;;;GAKG;AACH,eAAO,MAAM,MAAM,EAAE,OAapB,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CA4B9D"}
|
package/dist/logging/logger.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { statSync, truncateSync } from 'node:fs';
|
|
2
1
|
import { toError } from '../utils/toError.js';
|
|
3
2
|
// 桥接 utils 层 loggerHolder:utils 运行时不依赖 logging/,
|
|
4
3
|
// 由本模块在加载和 setLogger 时反向注入 logger 实例。
|
|
@@ -146,7 +145,7 @@ async function tryCreatePinoLogger() {
|
|
|
146
145
|
try {
|
|
147
146
|
const pino = (await import('pino')).default;
|
|
148
147
|
const { resolve } = await import('node:path');
|
|
149
|
-
const { mkdirSync, createWriteStream } = await import('node:fs');
|
|
148
|
+
const { mkdirSync, createWriteStream, statSync, truncateSync } = await import('node:fs');
|
|
150
149
|
const { expandHome } = await import('../utils/path.js');
|
|
151
150
|
const dataDir = process.env['MEMORA_DATA_DIR'] ?? '~/.memora';
|
|
152
151
|
const resolvedDataDir = resolve(expandHome(dataDir));
|
|
@@ -157,7 +156,7 @@ async function tryCreatePinoLogger() {
|
|
|
157
156
|
streams.push({ level: 'info', stream: process.stderr });
|
|
158
157
|
}
|
|
159
158
|
// 文件流(结构化 JSON,方便后续分析)
|
|
160
|
-
//
|
|
159
|
+
// 日志轮转保护——超过 10MB 时截断重写,防止长期运行生成巨大文件
|
|
161
160
|
if (fileEnabled) {
|
|
162
161
|
try {
|
|
163
162
|
const logsDir = resolve(resolvedDataDir, 'logs');
|
|
@@ -214,7 +213,16 @@ let _loggerInjected = false;
|
|
|
214
213
|
// 同步初始化 utils 层 logger 桥接(确保 utils 在 pino 异步加载前就有 console fallback)
|
|
215
214
|
setUtilsLogger(_logger);
|
|
216
215
|
// 模块加载时异步尝试升级到 pino(不阻塞模块导入)
|
|
216
|
+
// 竞态守卫:then 回调内检查 _loggerInjected,避免覆盖宿主已注入的 logger
|
|
217
|
+
// 场景:模块加载 → setLogger(custom) 同步执行 → tryCreatePinoLogger 异步 resolve
|
|
218
|
+
// 此时若不加守卫,pino 会覆盖 custom,宿主 logger 静默丢失
|
|
217
219
|
void tryCreatePinoLogger().then((pinoLogger) => {
|
|
220
|
+
// 守卫:宿主已通过 setLogger 注入自定义 logger,不再覆盖
|
|
221
|
+
if (_loggerInjected) {
|
|
222
|
+
// 仍同步桥接到 utils 层(utils 可能尚未收到宿主 logger)
|
|
223
|
+
setUtilsLogger(_logger);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
218
226
|
if (pinoLogger) {
|
|
219
227
|
_logger = pinoLogger;
|
|
220
228
|
_logger.info({ level, prod: isProd, fileEnabled }, 'logger 启动(pino)');
|
|
@@ -265,15 +273,23 @@ export function setLogger(newLogger) {
|
|
|
265
273
|
_logger = newLogger;
|
|
266
274
|
}
|
|
267
275
|
else {
|
|
268
|
-
//
|
|
276
|
+
// 恢复默认:同步先恢复到 console fallback,异步再尝试升级到 pino
|
|
277
|
+
// 与模块加载时一致(先 console,再异步 pino),避免 setLogger(undefined) 后 _logger 仍指向旧实例
|
|
269
278
|
_loggerInjected = false;
|
|
279
|
+
_logger = createConsoleLogger();
|
|
280
|
+
setUtilsLogger(_logger);
|
|
281
|
+
// 竞态守卫:若回调执行前宿主再次调用 setLogger(custom),
|
|
282
|
+
// _loggerInjected 会被置为 true,此时不应覆盖
|
|
270
283
|
void tryCreatePinoLogger().then((pinoLogger) => {
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
284
|
+
// 守卫:恢复过程中宿主又注入了新 logger,不再覆盖
|
|
285
|
+
if (_loggerInjected)
|
|
286
|
+
return;
|
|
287
|
+
if (pinoLogger) {
|
|
288
|
+
_logger = pinoLogger;
|
|
289
|
+
// 桥接注入到 utils 层
|
|
290
|
+
setUtilsLogger(_logger);
|
|
291
|
+
}
|
|
274
292
|
});
|
|
275
293
|
}
|
|
276
|
-
// 同步桥接注入到 utils 层(覆盖异步路径,确保 setLogger 后立即生效)
|
|
277
|
-
setUtilsLogger(_logger);
|
|
278
294
|
}
|
|
279
295
|
//# sourceMappingURL=logger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logging/logger.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logging/logger.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,iDAAiD;AACjD,sCAAsC;AACtC,OAAO,EAAE,SAAS,IAAI,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEtE;;GAEG;AACH,SAAS,MAAM,CAAC,GAAY;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;AAC9B,CAAC;AAED,4BAA4B;AAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,MAAM,CAAC;AAExD,iCAAiC;AACjC,MAAM,qBAAqB,GAAG,6DAA6D,CAAC;AAE5F;;;;GAIG;AACH,MAAM,iBAAiB,GAAG;IACxB,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY;IACtE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU;IAC/C,iBAAiB,EAAE,cAAc;IACjC,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY;CACxD,CAAC;AAEF;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,GAA4B;IACvD,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,QAAQ,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;QAC/B,CAAC;aAAM,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACvE,QAAQ,CAAC,GAAG,CAAC,GAAG,mBAAmB,CAAC,KAAgC,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AACD,aAAa;AACb,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,YAAY,CAAC;AACxD,eAAe;AACf,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,GAAG,CAAC;AAE3D,yCAAyC;AACzC,MAAM,cAAc,GAA2B;IAC7C,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;CACV,CAAC;AAEF,uBAAuB;AACvB,SAAS,SAAS,CAAC,WAAmB;IACpC,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB;IAC1B,OAAO;QACL,IAAI,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;YACtB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBAAE,OAAO;YAC/B,MAAM,IAAI,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;YACjE,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACjC,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACjF,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,IAAI,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;YACtB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBAAE,OAAO;YAC/B,MAAM,IAAI,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;YACjE,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACjC,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACjF,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;YACvB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBAAE,OAAO;YAChC,MAAM,IAAI,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;YACjE,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACjC,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAClF,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QACD,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;YACvB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBAAE,OAAO;YAChC,MAAM,IAAI,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;YACjE,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACjC,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAClF,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,gBAAgB,CAAC,QAKzB;IACC,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QAClC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QAClC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;QACpC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;KACrC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,mBAAmB;IAChC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QAC9C,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;QACzF,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAEvD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,WAAW,CAAC;QAC9D,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAErD,0CAA0C;QAC1C,MAAM,OAAO,GAA4D,EAAE,CAAC;QAE5E,qBAAqB;QACrB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,uBAAuB;QACvB,qCAAqC;QACrC,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;gBACjD,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;gBAEnD,qBAAqB;gBACrB,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO;gBAC/C,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;oBACnC,IAAI,IAAI,CAAC,IAAI,GAAG,aAAa,EAAE,CAAC;wBAC9B,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;wBAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,WAAW,IAAI,CAAC,CAAC;oBACpE,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,yBAAyB;oBACzB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;wBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACjG,CAAC;gBAED,OAAO,CAAC,IAAI,CAAC;oBACX,KAAK,EAAE,MAAM;oBACb,MAAM,EAAE,iBAAiB,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;iBACvD,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,mDAAmD;YACnD,oCAAoC;YACpC,OAAO,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;QACtE,CAAC;QAED,qBAAqB;QACrB,oCAAoC;QACpC,OAAO,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACjG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,8BAA8B;QAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7F,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,IAAI,OAAO,GAAY,mBAAmB,EAAE,CAAC;AAE7C,6CAA6C;AAC7C,IAAI,eAAe,GAAG,KAAK,CAAC;AAE5B,oEAAoE;AACpE,cAAc,CAAC,OAAO,CAAC,CAAC;AAExB,6BAA6B;AAC7B,oDAAoD;AACpD,oEAAoE;AACpE,yCAAyC;AACzC,KAAK,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;IAC7C,uCAAuC;IACvC,IAAI,eAAe,EAAE,CAAC;QACpB,wCAAwC;QACxC,cAAc,CAAC,OAAO,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,GAAG,UAAU,CAAC;QACrB,OAAO,CAAC,IAAI,CACV,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,EACpC,iBAAiB,CAClB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CACV,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EACvB,sCAAsC,CACvC,CAAC;IACJ,CAAC;IACD,uCAAuC;IACvC,cAAc,CAAC,OAAO,CAAC,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,MAAM,GAAY;IAC7B,IAAI,IAAI;QACN,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,IAAI;QACN,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,KAAK;QACP,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,KAAK;QACP,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;CACF,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,SAAS,CAAC,SAA8B;IACtD,IAAI,SAAS,EAAE,CAAC;QACd,kDAAkD;QAClD,IAAI,eAAe,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC7C,OAAO,CAAC,IAAI,CACV,gDAAgD,CACjD,CAAC;QACJ,CAAC;QACD,eAAe,GAAG,IAAI,CAAC;QACvB,OAAO,GAAG,SAAS,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,6CAA6C;QAC7C,wEAAwE;QACxE,eAAe,GAAG,KAAK,CAAC;QACxB,OAAO,GAAG,mBAAmB,EAAE,CAAC;QAChC,cAAc,CAAC,OAAO,CAAC,CAAC;QACxB,uCAAuC;QACvC,mCAAmC;QACnC,KAAK,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;YAC7C,8BAA8B;YAC9B,IAAI,eAAe;gBAAE,OAAO;YAC5B,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,GAAG,UAAU,CAAC;gBACrB,gBAAgB;gBAChB,cAAc,CAAC,OAAO,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 双通道融合排序 — 共享给 recall() 和 searchHybrid()
|
|
3
|
+
*
|
|
4
|
+
* 设计动机:
|
|
5
|
+
* recall.ts 和 memoryInspector.ts 共用"向量通道 + 关键词通道合并排序"逻辑,
|
|
6
|
+
* 集中到此模块实现单点维护。常量(RECALL_LIMIT_MULTIPLIER /
|
|
7
|
+
* VECTOR_SCORE_WEIGHT / MEMORY_SCORE_WEIGHT)与算法同源,
|
|
8
|
+
* agent 直接从本模块导入,不再绕道 recall.ts,遵守"agent 不依赖 memory
|
|
9
|
+
* 内部常量"分层原则。
|
|
10
|
+
*
|
|
11
|
+
* 收益:
|
|
12
|
+
* - 算法单点维护(排序权重调整只需改一处)
|
|
13
|
+
* - 常量与算法同源,agent 直接从 hybridMerge 导入,不再绕道 recall.ts
|
|
14
|
+
*
|
|
15
|
+
* 详见 ADR-004 · 记忆统一模型 + architecture_philosophy_rules.md §6 增量召回
|
|
16
|
+
*/
|
|
17
|
+
import type { Memory } from '../memory/types.js';
|
|
18
|
+
/** 语义搜索召回倍率(在最终 limit 基础上多召回一些,供后续融合排序) */
|
|
19
|
+
export declare const RECALL_LIMIT_MULTIPLIER = 2;
|
|
20
|
+
/** 综合排序时语义相似度权重 */
|
|
21
|
+
export declare const VECTOR_SCORE_WEIGHT = 0.6;
|
|
22
|
+
/** 综合排序时记忆 score 权重 */
|
|
23
|
+
export declare const MEMORY_SCORE_WEIGHT = 0.4;
|
|
24
|
+
/**
|
|
25
|
+
* 双通道合并结果条目
|
|
26
|
+
*
|
|
27
|
+
* 一条记忆在合并 Map 中的状态:memory + 它在向量通道的相似度分数。
|
|
28
|
+
* vectorScore = 0 表示该记忆仅来自关键词通道(未命中向量索引)。
|
|
29
|
+
*/
|
|
30
|
+
export interface HybridMergeEntry {
|
|
31
|
+
/** 记忆对象 */
|
|
32
|
+
memory: Memory;
|
|
33
|
+
/** 向量相似度分数(0~1,仅关键词命中时为 0) */
|
|
34
|
+
vectorScore: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 双通道融合排序的纯函数
|
|
38
|
+
*
|
|
39
|
+
* 算法:按 vectorScore * VECTOR_SCORE_WEIGHT + memory.score * MEMORY_SCORE_WEIGHT 降序排列,
|
|
40
|
+
* 取前 limit 条。
|
|
41
|
+
*
|
|
42
|
+
* 输入:已去重的合并 Map 的 values(或任何可迭代的 HybridMergeEntry)
|
|
43
|
+
* 输出:排序后的数组(前 limit 条)
|
|
44
|
+
*
|
|
45
|
+
* 共享消费者:
|
|
46
|
+
* - recall.ts recall() — 召回时融合排序(+ boost + 写回存储)
|
|
47
|
+
* - memoryInspector.ts searchHybrid() — 搜索时融合排序(→ AgentSearchHit)
|
|
48
|
+
*
|
|
49
|
+
* @param entries - 双通道合并后的条目(调用方负责去重)
|
|
50
|
+
* @param limit - 返回数量上限
|
|
51
|
+
* @returns 排序后的 HybridMergeEntry 数组
|
|
52
|
+
*/
|
|
53
|
+
export declare function hybridMerge(entries: Iterable<HybridMergeEntry>, limit: number): HybridMergeEntry[];
|
|
54
|
+
//# sourceMappingURL=hybridMerge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hybridMerge.d.ts","sourceRoot":"","sources":["../../src/memory/hybridMerge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAIhD,2CAA2C;AAC3C,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,mBAAmB;AACnB,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,uBAAuB;AACvB,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAIvC;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW;IACX,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB;AAID;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EACnC,KAAK,EAAE,MAAM,GACZ,gBAAgB,EAAE,CASpB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// ─── 融合排序常量 ─────────────────────────────────────
|
|
2
|
+
/** 语义搜索召回倍率(在最终 limit 基础上多召回一些,供后续融合排序) */
|
|
3
|
+
export const RECALL_LIMIT_MULTIPLIER = 2;
|
|
4
|
+
/** 综合排序时语义相似度权重 */
|
|
5
|
+
export const VECTOR_SCORE_WEIGHT = 0.6;
|
|
6
|
+
/** 综合排序时记忆 score 权重 */
|
|
7
|
+
export const MEMORY_SCORE_WEIGHT = 0.4;
|
|
8
|
+
// ─── 融合排序纯函数 ───────────────────────────────────
|
|
9
|
+
/**
|
|
10
|
+
* 双通道融合排序的纯函数
|
|
11
|
+
*
|
|
12
|
+
* 算法:按 vectorScore * VECTOR_SCORE_WEIGHT + memory.score * MEMORY_SCORE_WEIGHT 降序排列,
|
|
13
|
+
* 取前 limit 条。
|
|
14
|
+
*
|
|
15
|
+
* 输入:已去重的合并 Map 的 values(或任何可迭代的 HybridMergeEntry)
|
|
16
|
+
* 输出:排序后的数组(前 limit 条)
|
|
17
|
+
*
|
|
18
|
+
* 共享消费者:
|
|
19
|
+
* - recall.ts recall() — 召回时融合排序(+ boost + 写回存储)
|
|
20
|
+
* - memoryInspector.ts searchHybrid() — 搜索时融合排序(→ AgentSearchHit)
|
|
21
|
+
*
|
|
22
|
+
* @param entries - 双通道合并后的条目(调用方负责去重)
|
|
23
|
+
* @param limit - 返回数量上限
|
|
24
|
+
* @returns 排序后的 HybridMergeEntry 数组
|
|
25
|
+
*/
|
|
26
|
+
export function hybridMerge(entries, limit) {
|
|
27
|
+
return [...entries]
|
|
28
|
+
.sort((a, b) => {
|
|
29
|
+
// 综合分数 = 向量相似度 * 0.6 + 记忆 score * 0.4
|
|
30
|
+
const scoreA = a.vectorScore * VECTOR_SCORE_WEIGHT + a.memory.score * MEMORY_SCORE_WEIGHT;
|
|
31
|
+
const scoreB = b.vectorScore * VECTOR_SCORE_WEIGHT + b.memory.score * MEMORY_SCORE_WEIGHT;
|
|
32
|
+
return scoreB - scoreA;
|
|
33
|
+
})
|
|
34
|
+
.slice(0, limit);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=hybridMerge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hybridMerge.js","sourceRoot":"","sources":["../../src/memory/hybridMerge.ts"],"names":[],"mappings":"AAkBA,mDAAmD;AAEnD,2CAA2C;AAC3C,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAEzC,mBAAmB;AACnB,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEvC,uBAAuB;AACvB,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAiBvC,kDAAkD;AAElD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,WAAW,CACzB,OAAmC,EACnC,KAAa;IAEb,OAAO,CAAC,GAAG,OAAO,CAAC;SAChB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACb,sCAAsC;QACtC,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,GAAG,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,mBAAmB,CAAC;QAC1F,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,GAAG,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,mBAAmB,CAAC;QAC1F,OAAO,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACrB,CAAC"}
|
|
@@ -15,74 +15,149 @@ import type { Memory } from '../memory/types.js';
|
|
|
15
15
|
* 内存存储实现
|
|
16
16
|
*
|
|
17
17
|
* 使用 Map 存储记忆,核心操作 O(1)~O(log n)。
|
|
18
|
-
*
|
|
18
|
+
* 优化:维护 source→count 增量缓存,stats()/sourceHealth() 无需全量遍历。
|
|
19
19
|
*/
|
|
20
20
|
export declare class InMemoryStorage implements IMemoryStorage {
|
|
21
21
|
/** 记忆存储(id → Memory) */
|
|
22
22
|
private memories;
|
|
23
|
-
/**
|
|
23
|
+
/** source→count 增量缓存(upsert/delete 时维护,getAllSources 时直接读取) */
|
|
24
24
|
private sourceCountCache;
|
|
25
25
|
/**
|
|
26
26
|
* 插入或更新记忆
|
|
27
27
|
*
|
|
28
28
|
* 自动校验 source 字段,对疑似 typo 发出警告日志。
|
|
29
|
-
*
|
|
29
|
+
* 增量维护 sourceCountCache(仅统计活跃记忆):
|
|
30
|
+
* - 新增活跃记忆:source 计数 +1
|
|
31
|
+
* - 更新同 source 同活跃态:计数不变
|
|
32
|
+
* - 更新换 source:旧 source -1、新 source +1
|
|
33
|
+
* 软删除状态转换维护:
|
|
34
|
+
* - 活跃 → 软删除:source 计数 -1
|
|
35
|
+
* - 软删除 → 活跃:source 计数 +1
|
|
36
|
+
*
|
|
37
|
+
* 软删除校验:
|
|
38
|
+
* 若 existing 已软删除(deletedAt !== undefined)且 newMemory 为活跃态
|
|
39
|
+
* (deletedAt === undefined),抛出错误阻止"通过 upsert 复活软删除记忆"。
|
|
40
|
+
* 调用方必须先显式 restore(id) 恢复记忆后再 upsert。
|
|
41
|
+
* 例外:newMemory 显式带 deletedAt(如测试场景篡改 deletedAt)允许通过,
|
|
42
|
+
* 因为此时调用方明确意图是覆盖软删除状态而非"复活"。
|
|
43
|
+
*
|
|
44
|
+
* 采用 delta 方式:先扣除 existing 的活跃贡献,再加回 newMemory 的活跃贡献。
|
|
45
|
+
* 该方式可统一处理 source 变更 + 软删除状态变更的所有组合,避免分支爆炸。
|
|
30
46
|
*/
|
|
31
47
|
upsert(memory: Memory): void;
|
|
32
48
|
/**
|
|
33
|
-
*
|
|
49
|
+
* 软删除记忆
|
|
50
|
+
*
|
|
51
|
+
* 写入 deletedAt 时间戳,不物理移除 Map 条目。
|
|
52
|
+
* - 召回/搜索/列表/统计自动过滤已软删除的记忆
|
|
53
|
+
* - 可通过 restore(id) 恢复
|
|
54
|
+
* - 回收站保留期过后由 purgeExpired(before) 物理清理
|
|
34
55
|
*
|
|
35
|
-
*
|
|
56
|
+
* 对已软删除的记忆调用为 no-op。
|
|
57
|
+
* 增量维护 sourceCountCache:软删除时对应 source 减 1。
|
|
36
58
|
*/
|
|
37
59
|
delete(id: string): void;
|
|
38
60
|
/**
|
|
39
|
-
*
|
|
61
|
+
* 恢复软删除的记忆
|
|
62
|
+
*
|
|
63
|
+
* 清除 deletedAt 字段,使记忆重新出现在召回/搜索/列表中。
|
|
64
|
+
* 对活跃记忆调用为 no-op。
|
|
65
|
+
* 增量维护 sourceCountCache:恢复时对应 source 加 1。
|
|
66
|
+
*/
|
|
67
|
+
restore(id: string): void;
|
|
68
|
+
/**
|
|
69
|
+
* 物理删除记忆
|
|
70
|
+
*
|
|
71
|
+
* 从 Map 中彻底移除,不可恢复。
|
|
72
|
+
* 用于回收站的"彻底删除"操作,或测试环境的强制清理。
|
|
73
|
+
*
|
|
74
|
+
* 注意:若记忆为活跃态(未软删除),purge 也会减 1 计数,
|
|
75
|
+
* 但正常流程应先软删除再 purge,此时计数已在 delete() 中扣除。
|
|
76
|
+
*/
|
|
77
|
+
purge(id: string): void;
|
|
78
|
+
/**
|
|
79
|
+
* 列出回收站中的软删除记忆
|
|
80
|
+
*
|
|
81
|
+
* 按 deletedAt 降序(最近删除的在前),便于回收站 UI 展示。
|
|
82
|
+
* 返回浅拷贝,避免调用方修改污染存储内部对象。
|
|
83
|
+
*
|
|
84
|
+
* @param limit - 返回数量上限(默认 50)
|
|
85
|
+
* @returns 软删除记忆列表(副本)
|
|
86
|
+
*/
|
|
87
|
+
listDeleted(limit?: number): Memory[];
|
|
88
|
+
/**
|
|
89
|
+
* 按 ID 获取单条软删除记忆
|
|
90
|
+
*
|
|
91
|
+
* 用于 restore/purge 操作前的存在性校验,避免 listDeleted 默认 50 上限
|
|
92
|
+
* 导致回收站超量时操作失效。
|
|
93
|
+
*
|
|
94
|
+
* @param id 记忆唯一标识
|
|
95
|
+
* @returns 软删除记忆(浅拷贝),不存在或未软删除时返回 null
|
|
96
|
+
*/
|
|
97
|
+
getDeletedById(id: string): Memory | null;
|
|
98
|
+
/**
|
|
99
|
+
* 清理过期的软删除记忆
|
|
100
|
+
*
|
|
101
|
+
* 物理删除所有 deletedAt 早于 before 的记忆。
|
|
102
|
+
* 由宿主项目的定时器调用(默认 30 天保留期)。
|
|
103
|
+
*
|
|
104
|
+
* @param before - 时间阈值,deletedAt 早于此值的记忆将被物理删除
|
|
105
|
+
* @returns 被清理的记忆数量
|
|
106
|
+
*/
|
|
107
|
+
purgeExpired(before: Date): number;
|
|
108
|
+
/**
|
|
109
|
+
* 按 ID 获取单条活跃记忆(已软删除的返回 null)
|
|
40
110
|
*
|
|
41
111
|
* 返回浅拷贝,避免调用方修改污染存储内部对象(接口契约:读取隔离)
|
|
42
112
|
*/
|
|
43
113
|
getById(id: string): Memory | null;
|
|
44
114
|
/**
|
|
45
|
-
*
|
|
115
|
+
* 按来源标签获取活跃记忆(自动过滤已软删除的)
|
|
46
116
|
*
|
|
47
117
|
* 返回浅拷贝数组,避免调用方修改污染存储内部对象。
|
|
48
118
|
*
|
|
49
119
|
* @param source - 来源标签(如 'persona'、'rule'、'insight')
|
|
50
|
-
* @returns
|
|
120
|
+
* @returns 该来源的所有活跃记忆(副本),按 score 降序排列
|
|
51
121
|
*/
|
|
52
122
|
getBySource(source: string): Memory[];
|
|
53
123
|
/**
|
|
54
|
-
*
|
|
124
|
+
* 文本搜索活跃记忆(自动过滤已软删除的,内存版)
|
|
55
125
|
*
|
|
56
126
|
* 使用 segmentText() 规范分词,与 SqliteStorage 行为一致。
|
|
57
127
|
* 搜索 content 和 name 字段,按 score 降序排列。
|
|
58
128
|
*
|
|
59
129
|
* @param query - 搜索查询文本
|
|
60
130
|
* @param limit - 返回数量上限(默认 10)
|
|
61
|
-
* @returns
|
|
131
|
+
* @returns 匹配的活跃记忆列表
|
|
62
132
|
*/
|
|
63
133
|
search(query: string, limit?: number): Memory[];
|
|
64
134
|
/**
|
|
65
|
-
*
|
|
135
|
+
* 统计活跃记忆总数(不含已软删除的)
|
|
136
|
+
*
|
|
137
|
+
* 优化:直接累加 sourceCountCache 的所有值,O(sources) 复杂度。
|
|
138
|
+
* 因 sourceCountCache 仅维护活跃记忆计数,求和即为活跃总数。
|
|
66
139
|
*/
|
|
67
140
|
count(): number;
|
|
68
141
|
/**
|
|
69
142
|
* 按来源标签统计记忆数量
|
|
70
143
|
*
|
|
71
|
-
*
|
|
144
|
+
* 优化:直接读取 sourceCountCache,O(1) 复杂度
|
|
145
|
+
* (getAllSources 为 O(sources),因需拷贝 Map,二者复杂度不同)
|
|
72
146
|
* 原实现 O(n) 遍历所有记忆,与增量缓存设计不一致
|
|
73
147
|
*/
|
|
74
148
|
countBySource(source: string): number;
|
|
75
149
|
/**
|
|
76
|
-
*
|
|
150
|
+
* 衰减指定来源的活跃记忆 score(跳过已软删除的)
|
|
77
151
|
*
|
|
78
|
-
* 遍历所有匹配 source
|
|
152
|
+
* 遍历所有匹配 source 的活跃记忆,按时间衰减。
|
|
79
153
|
* 生产环境宿主(SqliteStorage)应重写为 SQL UPDATE 批量操作。
|
|
80
154
|
*/
|
|
81
155
|
decayScores(sources: string[], now: Date): number;
|
|
82
156
|
/**
|
|
83
157
|
* 获取所有 source 标签及其记忆数量
|
|
84
158
|
*
|
|
85
|
-
*
|
|
159
|
+
* 优化:直接读取增量维护的 sourceCountCache。
|
|
160
|
+
* 复杂度为 O(sources)(拷贝 Map),相比全量遍历 O(n) 仍有显著优化。
|
|
86
161
|
*/
|
|
87
162
|
getAllSources(): Map<string, number>;
|
|
88
163
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inMemoryStorage.d.ts","sourceRoot":"","sources":["../../src/memory/inMemoryStorage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"inMemoryStorage.d.ts","sourceRoot":"","sources":["../../src/memory/inMemoryStorage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAQhD;;;;;GAKG;AACH,qBAAa,eAAgB,YAAW,cAAc;IACpD,wBAAwB;IACxB,OAAO,CAAC,QAAQ,CAAkC;IAElD,+DAA+D;IAC/D,OAAO,CAAC,gBAAgB,CAAkC;IAE1D;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IA2C5B;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAWxB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAWzB;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAUvB;;;;;;;;OAQG;IACH,WAAW,CAAC,KAAK,SAAK,GAAG,MAAM,EAAE;IAWjC;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOzC;;;;;;;;OAQG;IACH,YAAY,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM;IAalC;;;;OAIG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOlC;;;;;;;OAOG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAOrC;;;;;;;;;OASG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,EAAE;IAoC3C;;;;;OAKG;IACH,KAAK,IAAI,MAAM;IAMf;;;;;;OAMG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAIrC;;;;;OAKG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,GAAG,MAAM;IAajD;;;;;OAKG;IACH,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAIpC;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb,mBAAmB;IACnB,OAAO,CAAC,oBAAoB;IAI5B,8BAA8B;IAC9B,OAAO,CAAC,oBAAoB;CAS7B"}
|