@zooique/memora 1.0.1 → 2.0.3
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/README.en.md +272 -0
- package/README.md +150 -38
- package/dist/agent/agent.d.ts +257 -115
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +747 -400
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/assembler.d.ts +32 -16
- package/dist/agent/assembler.d.ts.map +1 -1
- package/dist/agent/assembler.js +83 -47
- package/dist/agent/assembler.js.map +1 -1
- package/dist/agent/builtinToolHandlers.d.ts +27 -2
- package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
- package/dist/agent/builtinToolHandlers.js +78 -5
- package/dist/agent/builtinToolHandlers.js.map +1 -1
- package/dist/agent/constants.d.ts +4 -0
- package/dist/agent/constants.d.ts.map +1 -1
- package/dist/agent/constants.js +4 -0
- package/dist/agent/constants.js.map +1 -1
- package/dist/agent/contextManager.d.ts +8 -0
- package/dist/agent/contextManager.d.ts.map +1 -1
- package/dist/agent/contextManager.js +7 -2
- package/dist/agent/contextManager.js.map +1 -1
- package/dist/agent/guardrail.d.ts +4 -2
- package/dist/agent/guardrail.d.ts.map +1 -1
- package/dist/agent/guardrail.js +13 -5
- package/dist/agent/guardrail.js.map +1 -1
- package/dist/agent/loop.d.ts +137 -15
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +449 -270
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/managers/archiveCoordinator.d.ts +126 -22
- package/dist/agent/managers/archiveCoordinator.d.ts.map +1 -1
- package/dist/agent/managers/archiveCoordinator.js +239 -44
- package/dist/agent/managers/archiveCoordinator.js.map +1 -1
- package/dist/agent/managers/autoConfigRefiner.d.ts.map +1 -1
- package/dist/agent/managers/autoConfigRefiner.js +4 -8
- package/dist/agent/managers/autoConfigRefiner.js.map +1 -1
- package/dist/agent/managers/chatLockManager.d.ts +116 -0
- package/dist/agent/managers/chatLockManager.d.ts.map +1 -0
- package/dist/agent/managers/chatLockManager.js +191 -0
- package/dist/agent/managers/chatLockManager.js.map +1 -0
- package/dist/agent/managers/configManager.d.ts +87 -3
- package/dist/agent/managers/configManager.d.ts.map +1 -1
- package/dist/agent/managers/configManager.js +139 -2
- package/dist/agent/managers/configManager.js.map +1 -1
- package/dist/agent/managers/dedupManager.d.ts +169 -0
- package/dist/agent/managers/dedupManager.d.ts.map +1 -0
- package/dist/agent/managers/dedupManager.js +336 -0
- package/dist/agent/managers/dedupManager.js.map +1 -0
- package/dist/agent/managers/insightExtractor.d.ts +31 -3
- package/dist/agent/managers/insightExtractor.d.ts.map +1 -1
- package/dist/agent/managers/insightExtractor.js +130 -59
- package/dist/agent/managers/insightExtractor.js.map +1 -1
- package/dist/agent/managers/llmJudgeHelper.d.ts +38 -0
- package/dist/agent/managers/llmJudgeHelper.d.ts.map +1 -0
- package/dist/agent/managers/llmJudgeHelper.js +49 -0
- package/dist/agent/managers/llmJudgeHelper.js.map +1 -0
- package/dist/agent/managers/memoryAdvisor.d.ts +102 -2
- package/dist/agent/managers/memoryAdvisor.d.ts.map +1 -1
- package/dist/agent/managers/memoryAdvisor.js +254 -10
- package/dist/agent/managers/memoryAdvisor.js.map +1 -1
- package/dist/agent/managers/memoryDecayScheduler.d.ts +127 -1
- package/dist/agent/managers/memoryDecayScheduler.d.ts.map +1 -1
- package/dist/agent/managers/memoryDecayScheduler.js +283 -4
- package/dist/agent/managers/memoryDecayScheduler.js.map +1 -1
- package/dist/agent/managers/memoryGovernance.d.ts +56 -0
- package/dist/agent/managers/memoryGovernance.d.ts.map +1 -0
- package/dist/agent/managers/memoryGovernance.js +63 -0
- package/dist/agent/managers/memoryGovernance.js.map +1 -0
- package/dist/agent/managers/memoryInspector.d.ts +113 -30
- package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
- package/dist/agent/managers/memoryInspector.js +165 -32
- package/dist/agent/managers/memoryInspector.js.map +1 -1
- package/dist/agent/managers/relationBuilder.d.ts +4 -4
- package/dist/agent/managers/relationBuilder.d.ts.map +1 -1
- package/dist/agent/managers/relationBuilder.js +5 -4
- package/dist/agent/managers/relationBuilder.js.map +1 -1
- package/dist/agent/managers/sessionArchiver.d.ts +12 -1
- package/dist/agent/managers/sessionArchiver.d.ts.map +1 -1
- package/dist/agent/managers/sessionArchiver.js +87 -30
- package/dist/agent/managers/sessionArchiver.js.map +1 -1
- package/dist/agent/managers/sessionManager.d.ts.map +1 -1
- package/dist/agent/managers/sessionManager.js +9 -17
- package/dist/agent/managers/sessionManager.js.map +1 -1
- package/dist/agent/managers/streamAccumulator.d.ts +45 -0
- package/dist/agent/managers/streamAccumulator.d.ts.map +1 -0
- package/dist/agent/managers/streamAccumulator.js +40 -0
- package/dist/agent/managers/streamAccumulator.js.map +1 -0
- package/dist/agent/managers/textPolishManager.d.ts +62 -0
- package/dist/agent/managers/textPolishManager.d.ts.map +1 -0
- package/dist/agent/managers/textPolishManager.js +96 -0
- package/dist/agent/managers/textPolishManager.js.map +1 -0
- package/dist/agent/managers/workProjection.d.ts +16 -1
- package/dist/agent/managers/workProjection.d.ts.map +1 -1
- package/dist/agent/managers/workProjection.js +48 -24
- package/dist/agent/managers/workProjection.js.map +1 -1
- package/dist/agent/personaMatcher.d.ts +29 -0
- package/dist/agent/personaMatcher.d.ts.map +1 -0
- package/dist/agent/personaMatcher.js +60 -0
- package/dist/agent/personaMatcher.js.map +1 -0
- package/dist/agent/toolExecutor.d.ts +24 -4
- package/dist/agent/toolExecutor.d.ts.map +1 -1
- package/dist/agent/toolExecutor.js +30 -4
- package/dist/agent/toolExecutor.js.map +1 -1
- package/dist/agent/tracer.d.ts +31 -0
- package/dist/agent/tracer.d.ts.map +1 -1
- package/dist/agent/tracer.js +31 -0
- package/dist/agent/tracer.js.map +1 -1
- package/dist/agent/types.d.ts +133 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js +38 -0
- package/dist/agent/types.js.map +1 -1
- package/dist/agent/userFactExtractor.d.ts.map +1 -1
- package/dist/agent/userFactExtractor.js +7 -0
- package/dist/agent/userFactExtractor.js.map +1 -1
- package/dist/config/loader.d.ts +124 -236
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +296 -118
- package/dist/config/loader.js.map +1 -1
- package/dist/eval/evalRunner.d.ts +94 -0
- package/dist/eval/evalRunner.d.ts.map +1 -0
- package/dist/eval/evalRunner.js +141 -0
- package/dist/eval/evalRunner.js.map +1 -0
- package/dist/eval/evalTypes.d.ts +21 -0
- package/dist/eval/evalTypes.d.ts.map +1 -1
- package/dist/eval/evalTypes.js +15 -0
- package/dist/eval/evalTypes.js.map +1 -1
- package/dist/eval/scenarios.d.ts +33 -0
- package/dist/eval/scenarios.d.ts.map +1 -0
- package/dist/eval/scenarios.js +109 -0
- package/dist/eval/scenarios.js.map +1 -0
- package/dist/index.d.ts +45 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +45 -5
- package/dist/index.js.map +1 -1
- package/dist/llm/abortSignal.d.ts +27 -0
- package/dist/llm/abortSignal.d.ts.map +1 -0
- package/dist/llm/abortSignal.js +44 -0
- package/dist/llm/abortSignal.js.map +1 -0
- package/dist/llm/embedding.d.ts +13 -12
- package/dist/llm/embedding.d.ts.map +1 -1
- package/dist/llm/embedding.js +5 -17
- package/dist/llm/embedding.js.map +1 -1
- package/dist/llm/factory.d.ts +19 -5
- package/dist/llm/factory.d.ts.map +1 -1
- package/dist/llm/factory.js +19 -37
- package/dist/llm/factory.js.map +1 -1
- package/dist/llm/openaiCompatible.d.ts.map +1 -1
- package/dist/llm/openaiCompatible.js +17 -34
- package/dist/llm/openaiCompatible.js.map +1 -1
- package/dist/logging/logger.d.ts +3 -1
- package/dist/logging/logger.d.ts.map +1 -1
- package/dist/logging/logger.js +47 -50
- package/dist/logging/logger.js.map +1 -1
- package/dist/memory/governance.d.ts +50 -0
- package/dist/memory/governance.d.ts.map +1 -0
- package/dist/memory/governance.js +70 -0
- package/dist/memory/governance.js.map +1 -0
- package/dist/memory/hybridMerge.d.ts +0 -4
- package/dist/memory/hybridMerge.d.ts.map +1 -1
- package/dist/memory/hybridMerge.js +19 -4
- package/dist/memory/hybridMerge.js.map +1 -1
- package/dist/memory/inMemoryRelationStore.d.ts +7 -0
- package/dist/memory/inMemoryRelationStore.d.ts.map +1 -1
- package/dist/memory/inMemoryRelationStore.js +15 -0
- package/dist/memory/inMemoryRelationStore.js.map +1 -1
- package/dist/memory/inMemoryStorage.d.ts +36 -1
- package/dist/memory/inMemoryStorage.d.ts.map +1 -1
- package/dist/memory/inMemoryStorage.js +70 -19
- package/dist/memory/inMemoryStorage.js.map +1 -1
- package/dist/memory/loader.d.ts +2 -0
- package/dist/memory/loader.d.ts.map +1 -1
- package/dist/memory/loader.js +8 -1
- package/dist/memory/loader.js.map +1 -1
- package/dist/memory/lockManager.d.ts +7 -2
- package/dist/memory/lockManager.d.ts.map +1 -1
- package/dist/memory/lockManager.js +35 -17
- package/dist/memory/lockManager.js.map +1 -1
- package/dist/memory/projectManager.d.ts +8 -7
- package/dist/memory/projectManager.d.ts.map +1 -1
- package/dist/memory/projectManager.js +33 -15
- package/dist/memory/projectManager.js.map +1 -1
- package/dist/memory/projectRegistry.d.ts +34 -1
- package/dist/memory/projectRegistry.d.ts.map +1 -1
- package/dist/memory/projectRegistry.js +100 -31
- package/dist/memory/projectRegistry.js.map +1 -1
- package/dist/memory/recall.d.ts +16 -0
- package/dist/memory/recall.d.ts.map +1 -1
- package/dist/memory/recall.js +35 -20
- package/dist/memory/recall.js.map +1 -1
- package/dist/memory/relationStore.d.ts +20 -3
- package/dist/memory/relationStore.d.ts.map +1 -1
- package/dist/memory/sourceValidation.d.ts +17 -0
- package/dist/memory/sourceValidation.d.ts.map +1 -1
- package/dist/memory/sourceValidation.js +27 -3
- package/dist/memory/sourceValidation.js.map +1 -1
- package/dist/memory/storageInterface.d.ts +26 -1
- package/dist/memory/storageInterface.d.ts.map +1 -1
- package/dist/memory/store.d.ts +22 -1
- package/dist/memory/store.d.ts.map +1 -1
- package/dist/memory/store.js +58 -20
- package/dist/memory/store.js.map +1 -1
- package/dist/memory/types.d.ts +44 -31
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/memory/types.js +63 -24
- package/dist/memory/types.js.map +1 -1
- package/dist/memory/userProfile.d.ts +32 -8
- package/dist/memory/userProfile.d.ts.map +1 -1
- package/dist/memory/userProfile.js +105 -44
- package/dist/memory/userProfile.js.map +1 -1
- package/dist/memory/vectorStore.d.ts +16 -8
- package/dist/memory/vectorStore.d.ts.map +1 -1
- package/dist/memory/vectorStore.js +49 -22
- package/dist/memory/vectorStore.js.map +1 -1
- package/dist/persona/personaManager.d.ts +38 -63
- package/dist/persona/personaManager.d.ts.map +1 -1
- package/dist/persona/personaManager.js +136 -202
- package/dist/persona/personaManager.js.map +1 -1
- package/dist/skill/skillManager.d.ts +11 -57
- package/dist/skill/skillManager.d.ts.map +1 -1
- package/dist/skill/skillManager.js +46 -141
- package/dist/skill/skillManager.js.map +1 -1
- package/dist/skill/types.d.ts +2 -3
- package/dist/skill/types.d.ts.map +1 -1
- package/dist/utils/array.d.ts +24 -0
- package/dist/utils/array.d.ts.map +1 -0
- package/dist/utils/array.js +24 -0
- package/dist/utils/array.js.map +1 -0
- package/dist/utils/configResourceManager.d.ts +111 -0
- package/dist/utils/configResourceManager.d.ts.map +1 -0
- package/dist/utils/configResourceManager.js +148 -0
- package/dist/utils/configResourceManager.js.map +1 -0
- package/dist/utils/errors.d.ts +27 -8
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +31 -9
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/eventEmitter.d.ts +88 -4
- package/dist/utils/eventEmitter.d.ts.map +1 -1
- package/dist/utils/eventEmitter.js +23 -0
- package/dist/utils/eventEmitter.js.map +1 -1
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +4 -2
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/math.d.ts +11 -0
- package/dist/utils/math.d.ts.map +1 -1
- package/dist/utils/math.js +17 -0
- package/dist/utils/math.js.map +1 -1
- package/dist/utils/objects.d.ts +17 -0
- package/dist/utils/objects.d.ts.map +1 -0
- package/dist/utils/objects.js +19 -0
- package/dist/utils/objects.js.map +1 -0
- package/dist/utils/segmenter.d.ts +11 -10
- package/dist/utils/segmenter.d.ts.map +1 -1
- package/dist/utils/segmenter.js +23 -1
- package/dist/utils/segmenter.js.map +1 -1
- package/dist/utils/strings.d.ts +22 -1
- package/dist/utils/strings.d.ts.map +1 -1
- package/dist/utils/strings.js +29 -1
- package/dist/utils/strings.js.map +1 -1
- package/dist/utils/time.d.ts +18 -3
- package/dist/utils/time.d.ts.map +1 -1
- package/dist/utils/time.js +24 -8
- package/dist/utils/time.js.map +1 -1
- package/dist/utils/toError.d.ts +8 -4
- package/dist/utils/toError.d.ts.map +1 -1
- package/dist/utils/toError.js +25 -5
- package/dist/utils/toError.js.map +1 -1
- package/docs/memora-api-reference.md +1235 -0
- package/docs/memora-/346/216/245/345/205/245/346/214/207/345/215/227.md +808 -0
- package/package.json +49 -22
- package/dist/agent/managers/memoryMutator.d.ts +0 -92
- package/dist/agent/managers/memoryMutator.d.ts.map +0 -1
- package/dist/agent/managers/memoryMutator.js +0 -94
- package/dist/agent/managers/memoryMutator.js.map +0 -1
package/dist/logging/logger.js
CHANGED
|
@@ -2,6 +2,10 @@ import { toError } from '../utils/toError.js';
|
|
|
2
2
|
// 桥接 utils 层 loggerHolder:utils 运行时不依赖 logging/,
|
|
3
3
|
// 由本模块在加载和 setLogger 时反向注入 logger 实例。
|
|
4
4
|
import { setLogger as setUtilsLogger } from '../utils/loggerHolder.js';
|
|
5
|
+
// Node.js 内置模块静态 import(ADR-002 v0.9:Node.js 内置模块是合法依赖)
|
|
6
|
+
import { resolve } from 'node:path';
|
|
7
|
+
import { mkdirSync, createWriteStream, statSync, truncateSync } from 'node:fs';
|
|
8
|
+
import { expandHome } from '../utils/path.js';
|
|
5
9
|
/**
|
|
6
10
|
* 从 unknown 值提取错误消息(复用零依赖的 toError,避免类型断言)
|
|
7
11
|
*/
|
|
@@ -70,50 +74,43 @@ function shouldLog(targetLevel) {
|
|
|
70
74
|
*/
|
|
71
75
|
function createConsoleLogger() {
|
|
72
76
|
return {
|
|
73
|
-
info: (
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
if (typeof objOrMsg === 'object') {
|
|
111
|
-
console.error(`[DEBUG] ${text}`, JSON.stringify(redactSensitiveKeys(objOrMsg)));
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
console.error(`[DEBUG] ${text}`);
|
|
115
|
-
}
|
|
116
|
-
},
|
|
77
|
+
info: createConsoleLogFn('info'),
|
|
78
|
+
warn: createConsoleLogFn('warn'),
|
|
79
|
+
error: createConsoleLogFn('error'),
|
|
80
|
+
debug: createConsoleLogFn('debug'),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 创建 console fallback 单级别日志方法
|
|
85
|
+
*
|
|
86
|
+
* 消除 createConsoleLogger 内 4 处 info/warn/error/debug 方法的同构实现
|
|
87
|
+
* (ADR-017 枝叶层 2 次提取原则,4 次重复已超阈值)。
|
|
88
|
+
*
|
|
89
|
+
* 共享逻辑:
|
|
90
|
+
* 1. shouldLog 级别过滤
|
|
91
|
+
* 2. 提取 text(字符串直传,对象取 msg 参数)
|
|
92
|
+
* 3. 区分字符串/对象输出(对象路径调用 redactSensitiveKeys 脱敏)
|
|
93
|
+
*
|
|
94
|
+
* @param targetLevel 日志级别('info' | 'warn' | 'error' | 'debug')
|
|
95
|
+
* @returns LogFn 兼容的日志方法
|
|
96
|
+
*/
|
|
97
|
+
function createConsoleLogFn(targetLevel) {
|
|
98
|
+
// 级别前缀(与原实现保持一致,便于日志检索过滤)
|
|
99
|
+
const prefix = `[${targetLevel.toUpperCase()}]`;
|
|
100
|
+
return (objOrMsg, msg) => {
|
|
101
|
+
// 级别过滤:低于当前级别则静默返回
|
|
102
|
+
if (!shouldLog(targetLevel))
|
|
103
|
+
return;
|
|
104
|
+
// 提取文本:字符串入参直接使用,对象入参取 msg 参数
|
|
105
|
+
const text = typeof objOrMsg === 'string' ? objOrMsg : msg ?? '';
|
|
106
|
+
if (typeof objOrMsg === 'object') {
|
|
107
|
+
// 对象路径:脱敏后 JSON 序列化输出(防止 API Key 等敏感数据泄漏到 stderr)
|
|
108
|
+
console.error(`${prefix} ${text}`, JSON.stringify(redactSensitiveKeys(objOrMsg)));
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
// 字符串路径:仅输出前缀 + 文本
|
|
112
|
+
console.error(`${prefix} ${text}`);
|
|
113
|
+
}
|
|
117
114
|
};
|
|
118
115
|
}
|
|
119
116
|
/**
|
|
@@ -143,12 +140,12 @@ function wrapPinoAsLogger(pinoInst) {
|
|
|
143
140
|
*/
|
|
144
141
|
async function tryCreatePinoLogger() {
|
|
145
142
|
try {
|
|
143
|
+
// pino 为可选 peerDependency,必须动态 import(未安装时降级 console)
|
|
144
|
+
// node:path/node:fs 已在文件顶部静态 import(ADR-002 v0.9:Node.js 内置模块是合法依赖)
|
|
146
145
|
const pino = (await import('pino')).default;
|
|
147
|
-
|
|
148
|
-
const
|
|
149
|
-
const
|
|
150
|
-
const dataDir = process.env['MEMORA_DATA_DIR'] ?? '~/.memora';
|
|
151
|
-
const resolvedDataDir = resolve(expandHome(dataDir));
|
|
146
|
+
// 日志目录由宿主通过 MEMORA_DATA_DIR 环境变量注入;未设置时跳过文件日志
|
|
147
|
+
const dataDir = process.env['MEMORA_DATA_DIR'];
|
|
148
|
+
const resolvedDataDir = dataDir ? resolve(expandHome(dataDir)) : null;
|
|
152
149
|
// pino.StreamEntry 类型在 pino 未安装时不可用,用内联类型
|
|
153
150
|
const streams = [];
|
|
154
151
|
// stderr 流(开发环境友好显示)
|
|
@@ -157,7 +154,7 @@ async function tryCreatePinoLogger() {
|
|
|
157
154
|
}
|
|
158
155
|
// 文件流(结构化 JSON,方便后续分析)
|
|
159
156
|
// 日志轮转保护——超过 10MB 时截断重写,防止长期运行生成巨大文件
|
|
160
|
-
if (fileEnabled) {
|
|
157
|
+
if (fileEnabled && resolvedDataDir) {
|
|
161
158
|
try {
|
|
162
159
|
const logsDir = resolve(resolvedDataDir, 'logs');
|
|
163
160
|
mkdirSync(logsDir, { recursive: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logging/logger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logging/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM 治理源列表 — 参与去重 / 冲突检测 / 时效性评估 / 衰减的 source 集合
|
|
3
|
+
*
|
|
4
|
+
* 不含配置型记忆(persona / rule / skill),这些是启动时加载的永驻记忆,
|
|
5
|
+
* 不参与运行时治理。如未来扩展治理范围,仅需修改此数组。
|
|
6
|
+
*/
|
|
7
|
+
export declare const GOVERNANCE_SOURCES: readonly string[];
|
|
8
|
+
/**
|
|
9
|
+
* score 提升量 — "越常用越重要"语义统一
|
|
10
|
+
*
|
|
11
|
+
* 消费者:
|
|
12
|
+
* - recall.ts boostScore:召回时触发(被动)
|
|
13
|
+
* - memoryInspector.writeBoost:用户主动采纳时触发(主动)
|
|
14
|
+
*/
|
|
15
|
+
export declare const BOOST_INCREMENT = 0.05;
|
|
16
|
+
/**
|
|
17
|
+
* score 上限 — 防止 boost 超过 1.0
|
|
18
|
+
*
|
|
19
|
+
* 消费者:recall.ts / memoryInspector.ts
|
|
20
|
+
*/
|
|
21
|
+
export declare const SCORE_CEILING = 1;
|
|
22
|
+
/**
|
|
23
|
+
* score 下限 — 衰减/demote 的底线(MIND2-L3:incrementScore clamp 下限)
|
|
24
|
+
*
|
|
25
|
+
* 消费者:
|
|
26
|
+
* - recall.ts applyDecayToMemory(衰减下限)
|
|
27
|
+
* - InMemoryStorage / SqliteStorage incrementScore(clamp 下限)
|
|
28
|
+
*/
|
|
29
|
+
export declare const DECAY_FLOOR = 0.1;
|
|
30
|
+
/**
|
|
31
|
+
* 衰减:未访问天数阈值(天)— 超过此天数才开始衰减
|
|
32
|
+
*
|
|
33
|
+
* 消费者:
|
|
34
|
+
* - recall.ts applyDecayToMemory(内存衰减判断)
|
|
35
|
+
* - SqliteStorage.decayScores(SQL 衰减 WHERE 条件)
|
|
36
|
+
*
|
|
37
|
+
* 修改时必须同步两处(v2 神木回天:消除跨层重复硬编码)
|
|
38
|
+
*/
|
|
39
|
+
export declare const DECAY_AGE_DAYS = 7;
|
|
40
|
+
/**
|
|
41
|
+
* 衰减:每过一个周期 score 降低量
|
|
42
|
+
*
|
|
43
|
+
* 消费者:
|
|
44
|
+
* - recall.ts applyDecayToMemory(内存衰减计算)
|
|
45
|
+
* - SqliteStorage.decayScores(SQL 衰减 SET 计算)
|
|
46
|
+
*
|
|
47
|
+
* 修改时必须同步两处(v2 神木回天:消除跨层重复硬编码)
|
|
48
|
+
*/
|
|
49
|
+
export declare const DECAY_AMOUNT = 0.02;
|
|
50
|
+
//# sourceMappingURL=governance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"governance.d.ts","sourceRoot":"","sources":["../../src/memory/governance.ts"],"names":[],"mappings":"AAiBA;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAI/C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC;;;;GAIG;AACH,eAAO,MAAM,aAAa,IAAM,CAAC;AAEjC;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,MAAM,CAAC;AAE/B;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,OAAO,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 记忆治理共享常量 — LLM 治理源列表 + score 提升量/上限的统一真理源
|
|
3
|
+
*
|
|
4
|
+
* 设计原因:memoryInspector / memoryAdvisor / memoryDecayScheduler 三个治理模块
|
|
5
|
+
* 各自维护同一份 `[INSIGHT, PROFILE, WORK_PROJECTION]` 列表,存在 5 处独立维护。
|
|
6
|
+
* 提取到共享模块后,未来调整治理范围只需改 1 处(v2 年轮审判 REPEAT-1 闭环)。
|
|
7
|
+
*
|
|
8
|
+
* 同时收纳 score 提升量/上限常量(recall.ts 召回 boost + memoryInspector 采纳反哺 boost),
|
|
9
|
+
* 消除 2 处重复(v2 年轮审判 REPEAT-2 闭环)。
|
|
10
|
+
*
|
|
11
|
+
* 依赖方向:memory/governance.ts 是纯常量模块(零依赖,仅类型 import),
|
|
12
|
+
* 被 agent/managers/ 多个模块消费,符合 agent → memory 单向依赖原则。
|
|
13
|
+
*
|
|
14
|
+
* 详见 ADR-004(记忆统一模型):所有 source 都是开放字符串,治理范围由本文件集中维护。
|
|
15
|
+
*/
|
|
16
|
+
import { SOURCE_LABELS } from '../memory/types.js';
|
|
17
|
+
/**
|
|
18
|
+
* LLM 治理源列表 — 参与去重 / 冲突检测 / 时效性评估 / 衰减的 source 集合
|
|
19
|
+
*
|
|
20
|
+
* 不含配置型记忆(persona / rule / skill),这些是启动时加载的永驻记忆,
|
|
21
|
+
* 不参与运行时治理。如未来扩展治理范围,仅需修改此数组。
|
|
22
|
+
*/
|
|
23
|
+
export const GOVERNANCE_SOURCES = [
|
|
24
|
+
SOURCE_LABELS.INSIGHT,
|
|
25
|
+
SOURCE_LABELS.PROFILE,
|
|
26
|
+
SOURCE_LABELS.WORK_PROJECTION,
|
|
27
|
+
];
|
|
28
|
+
/**
|
|
29
|
+
* score 提升量 — "越常用越重要"语义统一
|
|
30
|
+
*
|
|
31
|
+
* 消费者:
|
|
32
|
+
* - recall.ts boostScore:召回时触发(被动)
|
|
33
|
+
* - memoryInspector.writeBoost:用户主动采纳时触发(主动)
|
|
34
|
+
*/
|
|
35
|
+
export const BOOST_INCREMENT = 0.05;
|
|
36
|
+
/**
|
|
37
|
+
* score 上限 — 防止 boost 超过 1.0
|
|
38
|
+
*
|
|
39
|
+
* 消费者:recall.ts / memoryInspector.ts
|
|
40
|
+
*/
|
|
41
|
+
export const SCORE_CEILING = 1.0;
|
|
42
|
+
/**
|
|
43
|
+
* score 下限 — 衰减/demote 的底线(MIND2-L3:incrementScore clamp 下限)
|
|
44
|
+
*
|
|
45
|
+
* 消费者:
|
|
46
|
+
* - recall.ts applyDecayToMemory(衰减下限)
|
|
47
|
+
* - InMemoryStorage / SqliteStorage incrementScore(clamp 下限)
|
|
48
|
+
*/
|
|
49
|
+
export const DECAY_FLOOR = 0.1;
|
|
50
|
+
/**
|
|
51
|
+
* 衰减:未访问天数阈值(天)— 超过此天数才开始衰减
|
|
52
|
+
*
|
|
53
|
+
* 消费者:
|
|
54
|
+
* - recall.ts applyDecayToMemory(内存衰减判断)
|
|
55
|
+
* - SqliteStorage.decayScores(SQL 衰减 WHERE 条件)
|
|
56
|
+
*
|
|
57
|
+
* 修改时必须同步两处(v2 神木回天:消除跨层重复硬编码)
|
|
58
|
+
*/
|
|
59
|
+
export const DECAY_AGE_DAYS = 7;
|
|
60
|
+
/**
|
|
61
|
+
* 衰减:每过一个周期 score 降低量
|
|
62
|
+
*
|
|
63
|
+
* 消费者:
|
|
64
|
+
* - recall.ts applyDecayToMemory(内存衰减计算)
|
|
65
|
+
* - SqliteStorage.decayScores(SQL 衰减 SET 计算)
|
|
66
|
+
*
|
|
67
|
+
* 修改时必须同步两处(v2 神木回天:消除跨层重复硬编码)
|
|
68
|
+
*/
|
|
69
|
+
export const DECAY_AMOUNT = 0.02;
|
|
70
|
+
//# sourceMappingURL=governance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"governance.js","sourceRoot":"","sources":["../../src/memory/governance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAsB;IACnD,aAAa,CAAC,OAAO;IACrB,aAAa,CAAC,OAAO;IACrB,aAAa,CAAC,eAAe;CAC9B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AAEpC;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AAEjC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC;AAE/B;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEhC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC"}
|
|
@@ -17,10 +17,6 @@
|
|
|
17
17
|
import type { Memory } from '../memory/types.js';
|
|
18
18
|
/** 语义搜索召回倍率(在最终 limit 基础上多召回一些,供后续融合排序) */
|
|
19
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
20
|
/**
|
|
25
21
|
* 双通道合并结果条目
|
|
26
22
|
*
|
|
@@ -1 +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;
|
|
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;AAyBzC;;;;;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"}
|
|
@@ -1,10 +1,25 @@
|
|
|
1
1
|
// ─── 融合排序常量 ─────────────────────────────────────
|
|
2
2
|
/** 语义搜索召回倍率(在最终 limit 基础上多召回一些,供后续融合排序) */
|
|
3
3
|
export const RECALL_LIMIT_MULTIPLIER = 2;
|
|
4
|
-
/**
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
/**
|
|
5
|
+
* 综合排序时语义相似度权重(模块内部使用,非公共 API)
|
|
6
|
+
*
|
|
7
|
+
* 设计理由:向量通道权重高于记忆 score 通道(0.6 > 0.4),因为:
|
|
8
|
+
* - 语义相似度由嵌入模型实时计算,反映查询与内容的语义相关性
|
|
9
|
+
* - 记忆 score 受人工编辑、boost 衰减、初始默认值(0.5)等多因素影响,
|
|
10
|
+
* 不确定性更高
|
|
11
|
+
* - 但记忆 score 仍占 0.4 权重,用于:
|
|
12
|
+
* 1) 抑制向量相似但 score 过低(用户从未认可)的边缘记忆
|
|
13
|
+
* 2) 提升 score 高(频繁召回/人工标注重要)的记忆排名
|
|
14
|
+
* - 0.6/0.4 而非 0.7/0.3 是为避免向量通道压倒性优势,保留 score 通道的话语权
|
|
15
|
+
*/
|
|
16
|
+
const VECTOR_SCORE_WEIGHT = 0.6;
|
|
17
|
+
/**
|
|
18
|
+
* 综合排序时记忆 score 权重(模块内部使用,非公共 API)
|
|
19
|
+
*
|
|
20
|
+
* 与 VECTOR_SCORE_WEIGHT 互补(0.4 = 1 - 0.6),设计理由见 VECTOR_SCORE_WEIGHT 注释
|
|
21
|
+
*/
|
|
22
|
+
const MEMORY_SCORE_WEIGHT = 0.4;
|
|
8
23
|
// ─── 融合排序纯函数 ───────────────────────────────────
|
|
9
24
|
/**
|
|
10
25
|
* 双通道融合排序的纯函数
|
|
@@ -1 +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
|
|
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;;;;;;;;;;;GAWG;AACH,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC;;;;GAIG;AACH,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAiBhC,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"}
|
|
@@ -47,5 +47,12 @@ export declare class InMemoryRelationStore implements IMemoryRelationStore {
|
|
|
47
47
|
* sourceId+targetId+type 唯一定位,删除单条关系。
|
|
48
48
|
*/
|
|
49
49
|
removeRelation(sourceId: string, targetId: string, type: string): void;
|
|
50
|
+
/**
|
|
51
|
+
* 删除某记忆的所有关系(不论方向)
|
|
52
|
+
*
|
|
53
|
+
* 一次性过滤掉 sourceId 或 targetId 等于 memoryId 的所有关系边,
|
|
54
|
+
* 防止记忆删除后留下孤儿边。
|
|
55
|
+
*/
|
|
56
|
+
removeRelationsByMemoryId(memoryId: string): number;
|
|
50
57
|
}
|
|
51
58
|
//# sourceMappingURL=inMemoryRelationStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inMemoryRelationStore.d.ts","sourceRoot":"","sources":["../../src/memory/inMemoryRelationStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,qBAAa,qBAAsB,YAAW,oBAAoB;IAChE,sBAAsB;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAElD;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAe3C;;;;;;;OAOG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,iBAA0B,GAAG,cAAc,EAAE;IAavF;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE;IAIlD;;OAEG;IACH,eAAe,IAAI,cAAc,EAAE;IAInC;;;;OAIG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"inMemoryRelationStore.d.ts","sourceRoot":"","sources":["../../src/memory/inMemoryRelationStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,qBAAa,qBAAsB,YAAW,oBAAoB;IAChE,sBAAsB;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAElD;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAe3C;;;;;;;OAOG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,iBAA0B,GAAG,cAAc,EAAE;IAavF;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE;IAIlD;;OAEG;IACH,eAAe,IAAI,cAAc,EAAE;IAInC;;;;OAIG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAStE;;;;;OAKG;IACH,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAWpD"}
|
|
@@ -61,5 +61,20 @@ export class InMemoryRelationStore {
|
|
|
61
61
|
this.relations.splice(idx, 1);
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* 删除某记忆的所有关系(不论方向)
|
|
66
|
+
*
|
|
67
|
+
* 一次性过滤掉 sourceId 或 targetId 等于 memoryId 的所有关系边,
|
|
68
|
+
* 防止记忆删除后留下孤儿边。
|
|
69
|
+
*/
|
|
70
|
+
removeRelationsByMemoryId(memoryId) {
|
|
71
|
+
const before = this.relations.length;
|
|
72
|
+
const remaining = this.relations.filter((r) => r.sourceId !== memoryId && r.targetId !== memoryId);
|
|
73
|
+
const removed = before - remaining.length;
|
|
74
|
+
// 直接替换数组引用,避免 splice 在循环中性能问题
|
|
75
|
+
this.relations.length = 0;
|
|
76
|
+
this.relations.push(...remaining);
|
|
77
|
+
return removed;
|
|
78
|
+
}
|
|
64
79
|
}
|
|
65
80
|
//# sourceMappingURL=inMemoryRelationStore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inMemoryRelationStore.js","sourceRoot":"","sources":["../../src/memory/inMemoryRelationStore.ts"],"names":[],"mappings":"AAkBA,MAAM,OAAO,qBAAqB;IAChC,sBAAsB;IACL,SAAS,GAAqB,EAAE,CAAC;IAElD;;;;OAIG;IACH,WAAW,CAAC,QAAwB;QAClC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAC1C,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;YAChC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;YAChC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAC3B,CAAC;QACF,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACrB,mCAAmC;YACnC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,YAAY,CAAC,QAAgB,EAAE,YAA+B,MAAM;QAClE,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACtF,CAAC;QACD,iCAAiC;QACjC,OAAO,IAAI,CAAC,SAAS;aAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC;aACjE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,IAAY;QAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,QAAgB,EAAE,QAAgB,EAAE,IAAY;QAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAC7E,CAAC;QACF,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"inMemoryRelationStore.js","sourceRoot":"","sources":["../../src/memory/inMemoryRelationStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -81,7 +81,8 @@ export declare class InMemoryStorage implements IMemoryStorage {
|
|
|
81
81
|
* 按 deletedAt 降序(最近删除的在前),便于回收站 UI 展示。
|
|
82
82
|
* 返回浅拷贝,避免调用方修改污染存储内部对象。
|
|
83
83
|
*
|
|
84
|
-
* @param limit -
|
|
84
|
+
* @param limit - 返回数量上限。`limit <= 0` 或 `undefined` 表示不设上限(返回全部);
|
|
85
|
+
* 正整数 N 表示返回最近 N 条。默认 undefined(全部)。
|
|
85
86
|
* @returns 软删除记忆列表(副本)
|
|
86
87
|
*/
|
|
87
88
|
listDeleted(limit?: number): Memory[];
|
|
@@ -131,6 +132,17 @@ export declare class InMemoryStorage implements IMemoryStorage {
|
|
|
131
132
|
* @returns 匹配的活跃记忆列表
|
|
132
133
|
*/
|
|
133
134
|
search(query: string, limit?: number): Memory[];
|
|
135
|
+
/**
|
|
136
|
+
* 排序 + 截断 + 浅拷贝三件套
|
|
137
|
+
*
|
|
138
|
+
* 消除 search() 内 3 次重复的 .sort(byScoreDesc).slice(0, limit).map((m) => ({ ...m })) 模式
|
|
139
|
+
* (ADR-017 枝叶层 2 次提取原则,3 次重复已超阈值)。
|
|
140
|
+
*
|
|
141
|
+
* @param memories 待处理的记忆数组
|
|
142
|
+
* @param limit 返回数量上限
|
|
143
|
+
* @returns 排序截断后的浅拷贝记忆数组
|
|
144
|
+
*/
|
|
145
|
+
private sortCopyLimit;
|
|
134
146
|
/**
|
|
135
147
|
* 统计活跃记忆总数(不含已软删除的)
|
|
136
148
|
*
|
|
@@ -153,6 +165,29 @@ export declare class InMemoryStorage implements IMemoryStorage {
|
|
|
153
165
|
* 生产环境宿主(SqliteStorage)应重写为 SQL UPDATE 批量操作。
|
|
154
166
|
*/
|
|
155
167
|
decayScores(sources: string[], now: Date): number;
|
|
168
|
+
/**
|
|
169
|
+
* 原子增加记忆 score(MIND2-L3:消除 boost read-modify-write 并发冲突)
|
|
170
|
+
*
|
|
171
|
+
* score = clamp(score + delta, DECAY_FLOOR, SCORE_CEILING),同时更新 accessedAt。
|
|
172
|
+
* JS 单线程下与同步 storage 调用天然原子。
|
|
173
|
+
*
|
|
174
|
+
* @param id 记忆 ID
|
|
175
|
+
* @param delta 增量(正数 boost,负数可降级)
|
|
176
|
+
* @param now 当前时间(ISO 8601)
|
|
177
|
+
* @returns 记忆不存在/软删除时返回 false,成功返回 true
|
|
178
|
+
*/
|
|
179
|
+
incrementScore(id: string, delta: number, now: string): boolean;
|
|
180
|
+
/**
|
|
181
|
+
* 原子设置记忆 score 绝对值(MIND2-L3:消除 demote spread 旧快照覆盖其他字段)
|
|
182
|
+
*
|
|
183
|
+
* 直接设置 score = newScore,不 clamp(调用方负责传合法值)。同时更新 accessedAt。
|
|
184
|
+
*
|
|
185
|
+
* @param id 记忆 ID
|
|
186
|
+
* @param newScore 新 score 绝对值
|
|
187
|
+
* @param now 当前时间(ISO 8601)
|
|
188
|
+
* @returns 记忆不存在/软删除时返回 false,成功返回 true
|
|
189
|
+
*/
|
|
190
|
+
setScore(id: string, newScore: number, now: string): boolean;
|
|
156
191
|
/**
|
|
157
192
|
* 获取所有 source 标签及其记忆数量
|
|
158
193
|
*
|
|
@@ -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;AAUhD;;;;;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;;;;;;;;;OASG;IACH,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAYrC;;;;;;;;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;IA2B3C;;;;;;;;;OASG;IACH,OAAO,CAAC,aAAa;IAOrB;;;;;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;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAU/D;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAQ5D;;;;;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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { validateSource } from '../memory/sourceValidation.js';
|
|
2
|
-
import {
|
|
2
|
+
import { segmentLower } from '../utils/segmenter.js';
|
|
3
|
+
import { byScoreDesc } from '../utils/array.js';
|
|
3
4
|
import { configError } from '../utils/errors.js';
|
|
4
5
|
import { logger } from '../logging/logger.js';
|
|
5
6
|
import { applyDecayToMemory } from '../memory/recall.js';
|
|
6
7
|
import { nowIso } from '../utils/time.js';
|
|
8
|
+
import { DECAY_FLOOR, SCORE_CEILING } from '../memory/governance.js';
|
|
7
9
|
/**
|
|
8
10
|
* 内存存储实现
|
|
9
11
|
*
|
|
@@ -133,18 +135,20 @@ export class InMemoryStorage {
|
|
|
133
135
|
* 按 deletedAt 降序(最近删除的在前),便于回收站 UI 展示。
|
|
134
136
|
* 返回浅拷贝,避免调用方修改污染存储内部对象。
|
|
135
137
|
*
|
|
136
|
-
* @param limit -
|
|
138
|
+
* @param limit - 返回数量上限。`limit <= 0` 或 `undefined` 表示不设上限(返回全部);
|
|
139
|
+
* 正整数 N 表示返回最近 N 条。默认 undefined(全部)。
|
|
137
140
|
* @returns 软删除记忆列表(副本)
|
|
138
141
|
*/
|
|
139
|
-
listDeleted(limit
|
|
140
|
-
|
|
142
|
+
listDeleted(limit) {
|
|
143
|
+
const all = Array.from(this.memories.values())
|
|
141
144
|
.filter((m) => m.deletedAt !== undefined)
|
|
142
145
|
.sort((a, b) => {
|
|
143
146
|
// deletedAt 非 undefined 已由 filter 保证,降序排列(最近在前)
|
|
144
147
|
return b.deletedAt > a.deletedAt ? 1 : b.deletedAt < a.deletedAt ? -1 : 0;
|
|
145
148
|
})
|
|
146
|
-
.slice(0, limit)
|
|
147
149
|
.map((m) => ({ ...m }));
|
|
150
|
+
// limit <= 0 或 undefined 表示不设上限(与 storageInterface 契约一致)
|
|
151
|
+
return limit !== undefined && limit > 0 ? all.slice(0, limit) : all;
|
|
148
152
|
}
|
|
149
153
|
/**
|
|
150
154
|
* 按 ID 获取单条软删除记忆
|
|
@@ -206,7 +210,7 @@ export class InMemoryStorage {
|
|
|
206
210
|
getBySource(source) {
|
|
207
211
|
return Array.from(this.memories.values())
|
|
208
212
|
.filter((m) => m.source === source && m.deletedAt === undefined)
|
|
209
|
-
.sort(
|
|
213
|
+
.sort(byScoreDesc)
|
|
210
214
|
.map((m) => ({ ...m }));
|
|
211
215
|
}
|
|
212
216
|
/**
|
|
@@ -224,29 +228,37 @@ export class InMemoryStorage {
|
|
|
224
228
|
const activeMemories = Array.from(this.memories.values()).filter((m) => m.deletedAt === undefined);
|
|
225
229
|
// 空查询:按 score 降序返回(浅拷贝,读取隔离)
|
|
226
230
|
if (!query.trim()) {
|
|
227
|
-
return activeMemories
|
|
228
|
-
.sort((a, b) => b.score - a.score)
|
|
229
|
-
.slice(0, limit)
|
|
230
|
-
.map((m) => ({ ...m }));
|
|
231
|
+
return this.sortCopyLimit(activeMemories, limit);
|
|
231
232
|
}
|
|
232
233
|
// 规范分词(与 recall.ts extractKeywords 共用 segmentText)
|
|
233
|
-
const tokens =
|
|
234
|
+
const tokens = segmentLower(query);
|
|
234
235
|
// 若分词后无有效 token,降级为按 score 返回
|
|
235
236
|
if (tokens.length === 0) {
|
|
236
|
-
return activeMemories
|
|
237
|
-
.sort((a, b) => b.score - a.score)
|
|
238
|
-
.slice(0, limit)
|
|
239
|
-
.map((m) => ({ ...m }));
|
|
237
|
+
return this.sortCopyLimit(activeMemories, limit);
|
|
240
238
|
}
|
|
241
239
|
const results = activeMemories.filter((m) => {
|
|
242
240
|
const text = `${m.content} ${m.name}`.toLowerCase();
|
|
243
241
|
// 任一 token 命中即可
|
|
244
242
|
return tokens.some((t) => text.includes(t));
|
|
245
243
|
});
|
|
246
|
-
// 按 score
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
244
|
+
// 按 score 降序排序,返回浅拷贝(避免调用方修改污染存储内部对象)
|
|
245
|
+
return this.sortCopyLimit(results, limit);
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* 排序 + 截断 + 浅拷贝三件套
|
|
249
|
+
*
|
|
250
|
+
* 消除 search() 内 3 次重复的 .sort(byScoreDesc).slice(0, limit).map((m) => ({ ...m })) 模式
|
|
251
|
+
* (ADR-017 枝叶层 2 次提取原则,3 次重复已超阈值)。
|
|
252
|
+
*
|
|
253
|
+
* @param memories 待处理的记忆数组
|
|
254
|
+
* @param limit 返回数量上限
|
|
255
|
+
* @returns 排序截断后的浅拷贝记忆数组
|
|
256
|
+
*/
|
|
257
|
+
sortCopyLimit(memories, limit) {
|
|
258
|
+
return memories
|
|
259
|
+
.sort(byScoreDesc)
|
|
260
|
+
.slice(0, limit)
|
|
261
|
+
.map((m) => ({ ...m }));
|
|
250
262
|
}
|
|
251
263
|
/**
|
|
252
264
|
* 统计活跃记忆总数(不含已软删除的)
|
|
@@ -290,6 +302,45 @@ export class InMemoryStorage {
|
|
|
290
302
|
}
|
|
291
303
|
return count;
|
|
292
304
|
}
|
|
305
|
+
/**
|
|
306
|
+
* 原子增加记忆 score(MIND2-L3:消除 boost read-modify-write 并发冲突)
|
|
307
|
+
*
|
|
308
|
+
* score = clamp(score + delta, DECAY_FLOOR, SCORE_CEILING),同时更新 accessedAt。
|
|
309
|
+
* JS 单线程下与同步 storage 调用天然原子。
|
|
310
|
+
*
|
|
311
|
+
* @param id 记忆 ID
|
|
312
|
+
* @param delta 增量(正数 boost,负数可降级)
|
|
313
|
+
* @param now 当前时间(ISO 8601)
|
|
314
|
+
* @returns 记忆不存在/软删除时返回 false,成功返回 true
|
|
315
|
+
*/
|
|
316
|
+
incrementScore(id, delta, now) {
|
|
317
|
+
const memory = this.memories.get(id);
|
|
318
|
+
// 记忆不存在或已软删除 → 返回 false(与 boostScores 原有"静默跳过"语义一致)
|
|
319
|
+
if (!memory || memory.deletedAt !== undefined)
|
|
320
|
+
return false;
|
|
321
|
+
// clamp 到 [DECAY_FLOOR, SCORE_CEILING],与 boostScore 原逻辑一致
|
|
322
|
+
memory.score = Math.max(DECAY_FLOOR, Math.min(SCORE_CEILING, memory.score + delta));
|
|
323
|
+
memory.accessedAt = now;
|
|
324
|
+
return true;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* 原子设置记忆 score 绝对值(MIND2-L3:消除 demote spread 旧快照覆盖其他字段)
|
|
328
|
+
*
|
|
329
|
+
* 直接设置 score = newScore,不 clamp(调用方负责传合法值)。同时更新 accessedAt。
|
|
330
|
+
*
|
|
331
|
+
* @param id 记忆 ID
|
|
332
|
+
* @param newScore 新 score 绝对值
|
|
333
|
+
* @param now 当前时间(ISO 8601)
|
|
334
|
+
* @returns 记忆不存在/软删除时返回 false,成功返回 true
|
|
335
|
+
*/
|
|
336
|
+
setScore(id, newScore, now) {
|
|
337
|
+
const memory = this.memories.get(id);
|
|
338
|
+
if (!memory || memory.deletedAt !== undefined)
|
|
339
|
+
return false;
|
|
340
|
+
memory.score = newScore;
|
|
341
|
+
memory.accessedAt = now;
|
|
342
|
+
return true;
|
|
343
|
+
}
|
|
293
344
|
/**
|
|
294
345
|
* 获取所有 source 标签及其记忆数量
|
|
295
346
|
*
|