@axiom-lattice/core 2.1.78 → 2.1.80
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/chunk-C5HUS7YV.mjs +331 -0
- package/dist/chunk-C5HUS7YV.mjs.map +1 -0
- package/dist/chunk-FN4TRQK4.mjs +1258 -0
- package/dist/chunk-FN4TRQK4.mjs.map +1 -0
- package/dist/compile-SYSKVQHB.mjs +9 -0
- package/dist/compile-SYSKVQHB.mjs.map +1 -0
- package/dist/index.d.mts +122 -3
- package/dist/index.d.ts +122 -3
- package/dist/index.js +2602 -765
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +776 -588
- package/dist/index.mjs.map +1 -1
- package/dist/memory_lattice-E66HTTVV.mjs +13 -0
- package/dist/memory_lattice-E66HTTVV.mjs.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
// src/memory_lattice/DefaultMemorySaver.ts
|
|
2
|
+
import { MemorySaver } from "@langchain/langgraph";
|
|
3
|
+
|
|
4
|
+
// src/base/BaseLatticeManager.ts
|
|
5
|
+
var _BaseLatticeManager = class _BaseLatticeManager {
|
|
6
|
+
/**
|
|
7
|
+
* 受保护的构造函数,防止外部直接实例化
|
|
8
|
+
*/
|
|
9
|
+
constructor() {
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* 获取管理器实例(由子类实现)
|
|
13
|
+
*/
|
|
14
|
+
static getInstance() {
|
|
15
|
+
throw new Error("\u5FC5\u987B\u7531\u5B50\u7C7B\u5B9E\u73B0");
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* 构造完整的键名,包含类型前缀和租户ID
|
|
19
|
+
* @param tenantId 租户ID,全局共享使用 "default"
|
|
20
|
+
* @param key 原始键名
|
|
21
|
+
*/
|
|
22
|
+
getFullKey(tenantId, key) {
|
|
23
|
+
return `${this.getLatticeType()}:${tenantId}:${key}`;
|
|
24
|
+
}
|
|
25
|
+
// ========== 带租户的新API ==========
|
|
26
|
+
/**
|
|
27
|
+
* 带租户的注册项目
|
|
28
|
+
* @param tenantId 租户ID
|
|
29
|
+
* @param key 项目键名(不含前缀)
|
|
30
|
+
* @param item 项目实例
|
|
31
|
+
*/
|
|
32
|
+
registerWithTenant(tenantId, key, item) {
|
|
33
|
+
const fullKey = this.getFullKey(tenantId, key);
|
|
34
|
+
if (_BaseLatticeManager.registry.has(fullKey)) {
|
|
35
|
+
throw new Error(`\u9879\u76EE "${fullKey}" \u5DF2\u7ECF\u5B58\u5728\uFF0C\u65E0\u6CD5\u91CD\u590D\u6CE8\u518C`);
|
|
36
|
+
}
|
|
37
|
+
_BaseLatticeManager.registry.set(fullKey, item);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 带租户的获取指定项目(同步)
|
|
41
|
+
* @param tenantId 租户ID
|
|
42
|
+
* @param key 项目键名(不含前缀)
|
|
43
|
+
*/
|
|
44
|
+
getWithTenant(tenantId, key) {
|
|
45
|
+
const fullKey = this.getFullKey(tenantId, key);
|
|
46
|
+
return _BaseLatticeManager.registry.get(fullKey);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 带租户的获取指定项目(异步,支持从store回退加载)
|
|
50
|
+
* 如果内存中不存在且子类实现了loadItemFromStore,则尝试从store加载
|
|
51
|
+
* @param tenantId 租户ID
|
|
52
|
+
* @param key 项目键名(不含前缀)
|
|
53
|
+
* @returns 项目实例,如果未找到则返回undefined
|
|
54
|
+
*/
|
|
55
|
+
async getOrLoadWithTenant(tenantId, key) {
|
|
56
|
+
const item = this.getWithTenant(tenantId, key);
|
|
57
|
+
if (item !== void 0) {
|
|
58
|
+
return item;
|
|
59
|
+
}
|
|
60
|
+
if (this.loadItemFromStore) {
|
|
61
|
+
const loadedItem = await this.loadItemFromStore(tenantId, key);
|
|
62
|
+
if (loadedItem !== void 0) {
|
|
63
|
+
this.registerWithTenant(tenantId, key, loadedItem);
|
|
64
|
+
return loadedItem;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return void 0;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 带租户的检查项目是否存在(同步)
|
|
71
|
+
* @param tenantId 租户ID
|
|
72
|
+
* @param key 项目键名(不含前缀)
|
|
73
|
+
*/
|
|
74
|
+
hasWithTenant(tenantId, key) {
|
|
75
|
+
const fullKey = this.getFullKey(tenantId, key);
|
|
76
|
+
return _BaseLatticeManager.registry.has(fullKey);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 带租户的检查项目是否存在(异步,支持从store回退加载)
|
|
80
|
+
* 如果内存中不存在且子类实现了loadItemFromStore,则尝试从store加载
|
|
81
|
+
* @param tenantId 租户ID
|
|
82
|
+
* @param key 项目键名(不含前缀)
|
|
83
|
+
* @returns 如果存在或能从store加载则返回true
|
|
84
|
+
*/
|
|
85
|
+
async hasOrLoadWithTenant(tenantId, key) {
|
|
86
|
+
if (this.hasWithTenant(tenantId, key)) {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
if (this.loadItemFromStore) {
|
|
90
|
+
const loadedItem = await this.loadItemFromStore(tenantId, key);
|
|
91
|
+
if (loadedItem !== void 0) {
|
|
92
|
+
this.registerWithTenant(tenantId, key, loadedItem);
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* 带租户的移除项目
|
|
100
|
+
* @param tenantId 租户ID
|
|
101
|
+
* @param key 项目键名(不含前缀)
|
|
102
|
+
*/
|
|
103
|
+
removeWithTenant(tenantId, key) {
|
|
104
|
+
const fullKey = this.getFullKey(tenantId, key);
|
|
105
|
+
return _BaseLatticeManager.registry.delete(fullKey);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* 获取指定租户的所有项目
|
|
109
|
+
* @param tenantId 租户ID
|
|
110
|
+
*/
|
|
111
|
+
getAllByTenant(tenantId) {
|
|
112
|
+
const prefix = `${this.getLatticeType()}:${tenantId}:`;
|
|
113
|
+
const result = [];
|
|
114
|
+
for (const [key, value] of _BaseLatticeManager.registry.entries()) {
|
|
115
|
+
if (key.startsWith(prefix)) {
|
|
116
|
+
result.push(value);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* 清空指定租户的所有项目
|
|
123
|
+
* @param tenantId 租户ID
|
|
124
|
+
*/
|
|
125
|
+
clearByTenant(tenantId) {
|
|
126
|
+
const prefix = `${this.getLatticeType()}:${tenantId}:`;
|
|
127
|
+
const keysToDelete = [];
|
|
128
|
+
for (const key of _BaseLatticeManager.registry.keys()) {
|
|
129
|
+
if (key.startsWith(prefix)) {
|
|
130
|
+
keysToDelete.push(key);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
for (const key of keysToDelete) {
|
|
134
|
+
_BaseLatticeManager.registry.delete(key);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// ========== 向后兼容的旧API(使用 default 租户) ==========
|
|
138
|
+
/**
|
|
139
|
+
* 注册项目(向后兼容,使用 "default" 租户)
|
|
140
|
+
* @deprecated Use registerWithTenant(tenantId, key, item) instead
|
|
141
|
+
* @param key 项目键名(不含前缀)
|
|
142
|
+
* @param item 项目实例
|
|
143
|
+
*/
|
|
144
|
+
register(key, item) {
|
|
145
|
+
this.registerWithTenant("default", key, item);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* 获取指定项目(向后兼容,使用 "default" 租户)
|
|
149
|
+
* @deprecated Use getWithTenant(tenantId, key) instead
|
|
150
|
+
* @param key 项目键名(不含前缀)
|
|
151
|
+
*/
|
|
152
|
+
get(key) {
|
|
153
|
+
return this.getWithTenant("default", key);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* 获取所有当前类型的项目(向后兼容,包含所有租户)
|
|
157
|
+
*/
|
|
158
|
+
getAll() {
|
|
159
|
+
const prefix = `${this.getLatticeType()}:`;
|
|
160
|
+
const result = [];
|
|
161
|
+
for (const [key, value] of _BaseLatticeManager.registry.entries()) {
|
|
162
|
+
if (key.startsWith(prefix)) {
|
|
163
|
+
result.push(value);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* 检查项目是否存在(向后兼容,使用 "default" 租户)
|
|
170
|
+
* @deprecated Use hasWithTenant(tenantId, key) instead
|
|
171
|
+
* @param key 项目键名(不含前缀)
|
|
172
|
+
*/
|
|
173
|
+
has(key) {
|
|
174
|
+
return this.hasWithTenant("default", key);
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* 移除项目(向后兼容,使用 "default" 租户)
|
|
178
|
+
* @deprecated Use removeWithTenant(tenantId, key) instead
|
|
179
|
+
* @param key 项目键名(不含前缀)
|
|
180
|
+
*/
|
|
181
|
+
remove(key) {
|
|
182
|
+
return this.removeWithTenant("default", key);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* 清空当前类型的所有项目(向后兼容,包含所有租户)
|
|
186
|
+
*/
|
|
187
|
+
clear() {
|
|
188
|
+
const prefix = `${this.getLatticeType()}:`;
|
|
189
|
+
const keysToDelete = [];
|
|
190
|
+
for (const key of _BaseLatticeManager.registry.keys()) {
|
|
191
|
+
if (key.startsWith(prefix)) {
|
|
192
|
+
keysToDelete.push(key);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
for (const key of keysToDelete) {
|
|
196
|
+
_BaseLatticeManager.registry.delete(key);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* 获取当前类型的项目数量(向后兼容,包含所有租户)
|
|
201
|
+
*/
|
|
202
|
+
count() {
|
|
203
|
+
const prefix = `${this.getLatticeType()}:`;
|
|
204
|
+
let count = 0;
|
|
205
|
+
for (const key of _BaseLatticeManager.registry.keys()) {
|
|
206
|
+
if (key.startsWith(prefix)) {
|
|
207
|
+
count++;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return count;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* 获取当前类型的项目键名列表(向后兼容,包含所有租户)
|
|
214
|
+
* 返回格式: {tenantId}:{key}
|
|
215
|
+
*/
|
|
216
|
+
keys() {
|
|
217
|
+
const prefix = `${this.getLatticeType()}:`;
|
|
218
|
+
const prefixLength = prefix.length;
|
|
219
|
+
const result = [];
|
|
220
|
+
for (const key of _BaseLatticeManager.registry.keys()) {
|
|
221
|
+
if (key.startsWith(prefix)) {
|
|
222
|
+
result.push(key.substring(prefixLength));
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return result;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* 获取当前类型的项目键名列表(仅指定租户,不含租户前缀)
|
|
229
|
+
* @param tenantId 租户ID
|
|
230
|
+
*/
|
|
231
|
+
keysByTenant(tenantId) {
|
|
232
|
+
const prefix = `${this.getLatticeType()}:${tenantId}:`;
|
|
233
|
+
const prefixLength = prefix.length;
|
|
234
|
+
const result = [];
|
|
235
|
+
for (const key of _BaseLatticeManager.registry.keys()) {
|
|
236
|
+
if (key.startsWith(prefix)) {
|
|
237
|
+
result.push(key.substring(prefixLength));
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return result;
|
|
241
|
+
}
|
|
242
|
+
};
|
|
243
|
+
// 全局统一的Lattice注册表
|
|
244
|
+
_BaseLatticeManager.registry = /* @__PURE__ */ new Map();
|
|
245
|
+
var BaseLatticeManager = _BaseLatticeManager;
|
|
246
|
+
|
|
247
|
+
// src/memory_lattice/MemoryLatticeManager.ts
|
|
248
|
+
import { MemoryType } from "@axiom-lattice/protocols";
|
|
249
|
+
var _MemoryLatticeManager = class _MemoryLatticeManager extends BaseLatticeManager {
|
|
250
|
+
/**
|
|
251
|
+
* 私有构造函数,防止外部直接实例化
|
|
252
|
+
*/
|
|
253
|
+
constructor() {
|
|
254
|
+
super();
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* 获取单例实例
|
|
258
|
+
*/
|
|
259
|
+
static getInstance() {
|
|
260
|
+
if (!_MemoryLatticeManager.instance) {
|
|
261
|
+
_MemoryLatticeManager.instance = new _MemoryLatticeManager();
|
|
262
|
+
}
|
|
263
|
+
return _MemoryLatticeManager.instance;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* 获取Lattice类型
|
|
267
|
+
*/
|
|
268
|
+
getLatticeType() {
|
|
269
|
+
return "memory";
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* 注册检查点保存器
|
|
273
|
+
* @param key 保存器键名
|
|
274
|
+
* @param saver 检查点保存器实例
|
|
275
|
+
*/
|
|
276
|
+
registerCheckpointSaver(key, saver) {
|
|
277
|
+
if (_MemoryLatticeManager.checkpointSavers.has(key)) {
|
|
278
|
+
console.warn(`\u68C0\u67E5\u70B9\u4FDD\u5B58\u5668 "${key}" \u5DF2\u7ECF\u5B58\u5728\uFF0C\u5C06\u4F1A\u8986\u76D6\u65E7\u7684\u68C0\u67E5\u70B9\u4FDD\u5B58\u5668`);
|
|
279
|
+
}
|
|
280
|
+
_MemoryLatticeManager.checkpointSavers.set(key, saver);
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* 获取检查点保存器
|
|
284
|
+
* @param key 保存器键名
|
|
285
|
+
*/
|
|
286
|
+
getCheckpointSaver(key) {
|
|
287
|
+
const saver = _MemoryLatticeManager.checkpointSavers.get(key);
|
|
288
|
+
if (!saver) {
|
|
289
|
+
throw new Error(`\u68C0\u67E5\u70B9\u4FDD\u5B58\u5668 "${key}" \u4E0D\u5B58\u5728`);
|
|
290
|
+
}
|
|
291
|
+
return saver;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* 获取所有已注册的检查点保存器键名
|
|
295
|
+
*/
|
|
296
|
+
getCheckpointSaverKeys() {
|
|
297
|
+
return Array.from(_MemoryLatticeManager.checkpointSavers.keys());
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* 检查检查点保存器是否存在
|
|
301
|
+
* @param key 保存器键名
|
|
302
|
+
*/
|
|
303
|
+
hasCheckpointSaver(key) {
|
|
304
|
+
return _MemoryLatticeManager.checkpointSavers.has(key);
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* 移除检查点保存器
|
|
308
|
+
* @param key 保存器键名
|
|
309
|
+
*/
|
|
310
|
+
removeCheckpointSaver(key) {
|
|
311
|
+
return _MemoryLatticeManager.checkpointSavers.delete(key);
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
// 检查点保存器注册表
|
|
315
|
+
_MemoryLatticeManager.checkpointSavers = /* @__PURE__ */ new Map();
|
|
316
|
+
var MemoryLatticeManager = _MemoryLatticeManager;
|
|
317
|
+
var getCheckpointSaver = (key) => MemoryLatticeManager.getInstance().getCheckpointSaver(key);
|
|
318
|
+
var registerCheckpointSaver = (key, saver) => MemoryLatticeManager.getInstance().registerCheckpointSaver(key, saver);
|
|
319
|
+
|
|
320
|
+
// src/memory_lattice/DefaultMemorySaver.ts
|
|
321
|
+
var memory = new MemorySaver();
|
|
322
|
+
registerCheckpointSaver("default", memory);
|
|
323
|
+
|
|
324
|
+
export {
|
|
325
|
+
BaseLatticeManager,
|
|
326
|
+
MemoryType,
|
|
327
|
+
MemoryLatticeManager,
|
|
328
|
+
getCheckpointSaver,
|
|
329
|
+
registerCheckpointSaver
|
|
330
|
+
};
|
|
331
|
+
//# sourceMappingURL=chunk-C5HUS7YV.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/memory_lattice/DefaultMemorySaver.ts","../src/base/BaseLatticeManager.ts","../src/memory_lattice/MemoryLatticeManager.ts"],"sourcesContent":["import { MemorySaver } from \"@langchain/langgraph\";\nimport { registerCheckpointSaver } from \"./MemoryLatticeManager\";\nconst memory = new MemorySaver();\nregisterCheckpointSaver(\"default\", memory);\n","/**\n * BaseLatticeManager - 抽象基类,为各种Lattice管理器提供通用功能\n * 使用统一的Lattice注册表,不同类型的Lattice通过前缀区分\n * 支持租户隔离,键格式: {type}:{tenantId}:{key}\n * @template TItem - 管理的项目类型\n */\nexport abstract class BaseLatticeManager<TItem = any> {\n // 全局统一的Lattice注册表\n protected static registry: Map<string, any> = new Map();\n\n /**\n * 受保护的构造函数,防止外部直接实例化\n */\n protected constructor() {\n // 空实现\n }\n\n /**\n * 获取管理器实例(由子类实现)\n */\n public static getInstance(): BaseLatticeManager<any> {\n throw new Error(\"必须由子类实现\");\n }\n\n /**\n * 获取Lattice类型,用于构造键前缀\n * 子类必须重写此方法以提供唯一的类型标识符\n */\n protected abstract getLatticeType(): string;\n\n /**\n * 从store异步加载单个项目(可选实现)\n * 子类可以重写此方法以支持从持久化存储加载单个项目\n * 方法名使用 loadItemFromStore 以避免与子类可能已有的 loadFromStore 冲突\n * @param tenantId 租户ID\n * @param key 项目键名\n * @returns 加载的项目,如果未找到则返回undefined\n */\n protected async loadItemFromStore?(tenantId: string, key: string): Promise<TItem | undefined>;\n\n /**\n * 构造完整的键名,包含类型前缀和租户ID\n * @param tenantId 租户ID,全局共享使用 \"default\"\n * @param key 原始键名\n */\n protected getFullKey(tenantId: string, key: string): string {\n return `${this.getLatticeType()}:${tenantId}:${key}`;\n }\n\n // ========== 带租户的新API ==========\n\n /**\n * 带租户的注册项目\n * @param tenantId 租户ID\n * @param key 项目键名(不含前缀)\n * @param item 项目实例\n */\n public registerWithTenant(tenantId: string, key: string, item: TItem): void {\n const fullKey = this.getFullKey(tenantId, key);\n if (BaseLatticeManager.registry.has(fullKey)) {\n throw new Error(`项目 \"${fullKey}\" 已经存在,无法重复注册`);\n }\n\n BaseLatticeManager.registry.set(fullKey, item);\n }\n\n /**\n * 带租户的获取指定项目(同步)\n * @param tenantId 租户ID\n * @param key 项目键名(不含前缀)\n */\n public getWithTenant(tenantId: string, key: string): TItem | undefined {\n const fullKey = this.getFullKey(tenantId, key);\n return BaseLatticeManager.registry.get(fullKey) as TItem | undefined;\n }\n\n /**\n * 带租户的获取指定项目(异步,支持从store回退加载)\n * 如果内存中不存在且子类实现了loadItemFromStore,则尝试从store加载\n * @param tenantId 租户ID\n * @param key 项目键名(不含前缀)\n * @returns 项目实例,如果未找到则返回undefined\n */\n public async getOrLoadWithTenant(tenantId: string, key: string): Promise<TItem | undefined> {\n // 先尝试从内存获取\n const item = this.getWithTenant(tenantId, key);\n if (item !== undefined) {\n return item;\n }\n\n // 如果内存未命中且支持从store加载\n if (this.loadItemFromStore) {\n const loadedItem = await this.loadItemFromStore(tenantId, key);\n if (loadedItem !== undefined) {\n // 加载成功后注册到内存\n this.registerWithTenant(tenantId, key, loadedItem);\n return loadedItem;\n }\n }\n\n return undefined;\n }\n\n /**\n * 带租户的检查项目是否存在(同步)\n * @param tenantId 租户ID\n * @param key 项目键名(不含前缀)\n */\n public hasWithTenant(tenantId: string, key: string): boolean {\n const fullKey = this.getFullKey(tenantId, key);\n return BaseLatticeManager.registry.has(fullKey);\n }\n\n /**\n * 带租户的检查项目是否存在(异步,支持从store回退加载)\n * 如果内存中不存在且子类实现了loadItemFromStore,则尝试从store加载\n * @param tenantId 租户ID\n * @param key 项目键名(不含前缀)\n * @returns 如果存在或能从store加载则返回true\n */\n public async hasOrLoadWithTenant(tenantId: string, key: string): Promise<boolean> {\n // 先检查内存\n if (this.hasWithTenant(tenantId, key)) {\n return true;\n }\n\n // 如果内存未命中且支持从store加载\n if (this.loadItemFromStore) {\n const loadedItem = await this.loadItemFromStore(tenantId, key);\n if (loadedItem !== undefined) {\n // 加载成功后注册到内存\n this.registerWithTenant(tenantId, key, loadedItem);\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * 带租户的移除项目\n * @param tenantId 租户ID\n * @param key 项目键名(不含前缀)\n */\n public removeWithTenant(tenantId: string, key: string): boolean {\n const fullKey = this.getFullKey(tenantId, key);\n return BaseLatticeManager.registry.delete(fullKey);\n }\n\n /**\n * 获取指定租户的所有项目\n * @param tenantId 租户ID\n */\n public getAllByTenant(tenantId: string): TItem[] {\n const prefix = `${this.getLatticeType()}:${tenantId}:`;\n const result: TItem[] = [];\n\n for (const [key, value] of BaseLatticeManager.registry.entries()) {\n if (key.startsWith(prefix)) {\n result.push(value as TItem);\n }\n }\n\n return result;\n }\n\n /**\n * 清空指定租户的所有项目\n * @param tenantId 租户ID\n */\n public clearByTenant(tenantId: string): void {\n const prefix = `${this.getLatticeType()}:${tenantId}:`;\n const keysToDelete: string[] = [];\n\n for (const key of BaseLatticeManager.registry.keys()) {\n if (key.startsWith(prefix)) {\n keysToDelete.push(key);\n }\n }\n\n for (const key of keysToDelete) {\n BaseLatticeManager.registry.delete(key);\n }\n }\n\n // ========== 向后兼容的旧API(使用 default 租户) ==========\n\n /**\n * 注册项目(向后兼容,使用 \"default\" 租户)\n * @deprecated Use registerWithTenant(tenantId, key, item) instead\n * @param key 项目键名(不含前缀)\n * @param item 项目实例\n */\n public register(key: string, item: TItem): void {\n this.registerWithTenant(\"default\", key, item);\n }\n\n /**\n * 获取指定项目(向后兼容,使用 \"default\" 租户)\n * @deprecated Use getWithTenant(tenantId, key) instead\n * @param key 项目键名(不含前缀)\n */\n public get(key: string): TItem | undefined {\n return this.getWithTenant(\"default\", key);\n }\n\n /**\n * 获取所有当前类型的项目(向后兼容,包含所有租户)\n */\n public getAll(): TItem[] {\n const prefix = `${this.getLatticeType()}:`;\n const result: TItem[] = [];\n\n for (const [key, value] of BaseLatticeManager.registry.entries()) {\n if (key.startsWith(prefix)) {\n result.push(value as TItem);\n }\n }\n\n return result;\n }\n\n /**\n * 检查项目是否存在(向后兼容,使用 \"default\" 租户)\n * @deprecated Use hasWithTenant(tenantId, key) instead\n * @param key 项目键名(不含前缀)\n */\n public has(key: string): boolean {\n return this.hasWithTenant(\"default\", key);\n }\n\n /**\n * 移除项目(向后兼容,使用 \"default\" 租户)\n * @deprecated Use removeWithTenant(tenantId, key) instead\n * @param key 项目键名(不含前缀)\n */\n public remove(key: string): boolean {\n return this.removeWithTenant(\"default\", key);\n }\n\n /**\n * 清空当前类型的所有项目(向后兼容,包含所有租户)\n */\n public clear(): void {\n const prefix = `${this.getLatticeType()}:`;\n const keysToDelete: string[] = [];\n\n for (const key of BaseLatticeManager.registry.keys()) {\n if (key.startsWith(prefix)) {\n keysToDelete.push(key);\n }\n }\n\n for (const key of keysToDelete) {\n BaseLatticeManager.registry.delete(key);\n }\n }\n\n /**\n * 获取当前类型的项目数量(向后兼容,包含所有租户)\n */\n public count(): number {\n const prefix = `${this.getLatticeType()}:`;\n let count = 0;\n\n for (const key of BaseLatticeManager.registry.keys()) {\n if (key.startsWith(prefix)) {\n count++;\n }\n }\n\n return count;\n }\n\n /**\n * 获取当前类型的项目键名列表(向后兼容,包含所有租户)\n * 返回格式: {tenantId}:{key}\n */\n public keys(): string[] {\n const prefix = `${this.getLatticeType()}:`;\n const prefixLength = prefix.length;\n const result: string[] = [];\n\n for (const key of BaseLatticeManager.registry.keys()) {\n if (key.startsWith(prefix)) {\n result.push(key.substring(prefixLength));\n }\n }\n\n return result;\n }\n\n /**\n * 获取当前类型的项目键名列表(仅指定租户,不含租户前缀)\n * @param tenantId 租户ID\n */\n public keysByTenant(tenantId: string): string[] {\n const prefix = `${this.getLatticeType()}:${tenantId}:`;\n const prefixLength = prefix.length;\n const result: string[] = [];\n\n for (const key of BaseLatticeManager.registry.keys()) {\n if (key.startsWith(prefix)) {\n result.push(key.substring(prefixLength));\n }\n }\n\n return result;\n }\n}\n","/**\n * MemoryLatticeManager\n *\n * 记忆Lattice管理器,负责管理和注册检查点保存器\n */\n\nimport { BaseCheckpointSaver } from \"@langchain/langgraph-checkpoint\";\nimport { BaseLatticeManager } from \"../base/BaseLatticeManager\";\nimport { MemoryLatticeProtocol, MemoryType } from \"@axiom-lattice/protocols\";\n\n// Re-export types from protocols\nexport { MemoryType };\n\n/**\n * 记忆Lattice管理器类\n */\nexport class MemoryLatticeManager extends BaseLatticeManager {\n private static instance: MemoryLatticeManager;\n\n // 检查点保存器注册表\n private static checkpointSavers: Map<string, BaseCheckpointSaver> = new Map();\n\n /**\n * 私有构造函数,防止外部直接实例化\n */\n private constructor() {\n super();\n }\n\n /**\n * 获取单例实例\n */\n public static getInstance(): MemoryLatticeManager {\n if (!MemoryLatticeManager.instance) {\n MemoryLatticeManager.instance = new MemoryLatticeManager();\n }\n return MemoryLatticeManager.instance;\n }\n\n /**\n * 获取Lattice类型\n */\n protected getLatticeType(): string {\n return \"memory\";\n }\n\n /**\n * 注册检查点保存器\n * @param key 保存器键名\n * @param saver 检查点保存器实例\n */\n public registerCheckpointSaver(\n key: string,\n saver: BaseCheckpointSaver\n ): void {\n if (MemoryLatticeManager.checkpointSavers.has(key)) {\n console.warn(`检查点保存器 \"${key}\" 已经存在,将会覆盖旧的检查点保存器`);\n }\n\n MemoryLatticeManager.checkpointSavers.set(key, saver);\n }\n\n /**\n * 获取检查点保存器\n * @param key 保存器键名\n */\n public getCheckpointSaver(key: string): BaseCheckpointSaver {\n const saver = MemoryLatticeManager.checkpointSavers.get(key);\n if (!saver) {\n throw new Error(`检查点保存器 \"${key}\" 不存在`);\n }\n return saver;\n }\n\n /**\n * 获取所有已注册的检查点保存器键名\n */\n public getCheckpointSaverKeys(): string[] {\n return Array.from(MemoryLatticeManager.checkpointSavers.keys());\n }\n\n /**\n * 检查检查点保存器是否存在\n * @param key 保存器键名\n */\n public hasCheckpointSaver(key: string): boolean {\n return MemoryLatticeManager.checkpointSavers.has(key);\n }\n\n /**\n * 移除检查点保存器\n * @param key 保存器键名\n */\n public removeCheckpointSaver(key: string): boolean {\n return MemoryLatticeManager.checkpointSavers.delete(key);\n }\n}\n\nexport const getCheckpointSaver = (key: string) =>\n MemoryLatticeManager.getInstance().getCheckpointSaver(key);\n\nexport const registerCheckpointSaver = (\n key: string,\n saver: BaseCheckpointSaver\n) => MemoryLatticeManager.getInstance().registerCheckpointSaver(key, saver);\n"],"mappings":"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","names":[]}
|