@zooique/memora 4.0.0 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/CHANGELOG.md +235 -1743
  2. package/README.en.md +43 -36
  3. package/README.md +308 -303
  4. package/dist/agent/agent.d.ts +46 -82
  5. package/dist/agent/agent.d.ts.map +1 -1
  6. package/dist/agent/agent.js +153 -220
  7. package/dist/agent/agent.js.map +1 -1
  8. package/dist/agent/assembler.d.ts +3 -16
  9. package/dist/agent/assembler.d.ts.map +1 -1
  10. package/dist/agent/assembler.js +76 -47
  11. package/dist/agent/assembler.js.map +1 -1
  12. package/dist/agent/backgroundTasks.d.ts +8 -1
  13. package/dist/agent/backgroundTasks.d.ts.map +1 -1
  14. package/dist/agent/backgroundTasks.js +8 -1
  15. package/dist/agent/backgroundTasks.js.map +1 -1
  16. package/dist/agent/budget.d.ts +23 -5
  17. package/dist/agent/budget.d.ts.map +1 -1
  18. package/dist/agent/budget.js +8 -2
  19. package/dist/agent/budget.js.map +1 -1
  20. package/dist/agent/builtinToolHandlers.d.ts +50 -10
  21. package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
  22. package/dist/agent/builtinToolHandlers.js +67 -20
  23. package/dist/agent/builtinToolHandlers.js.map +1 -1
  24. package/dist/agent/builtinTools.d.ts +16 -0
  25. package/dist/agent/builtinTools.d.ts.map +1 -1
  26. package/dist/agent/builtinTools.js +15 -4
  27. package/dist/agent/builtinTools.js.map +1 -1
  28. package/dist/agent/constants.d.ts +0 -6
  29. package/dist/agent/constants.d.ts.map +1 -1
  30. package/dist/agent/constants.js +7 -8
  31. package/dist/agent/constants.js.map +1 -1
  32. package/dist/agent/contextManager.d.ts +8 -0
  33. package/dist/agent/contextManager.d.ts.map +1 -1
  34. package/dist/agent/contextManager.js +45 -3
  35. package/dist/agent/contextManager.js.map +1 -1
  36. package/dist/agent/contextPreparer.d.ts +1 -1
  37. package/dist/agent/contextPreparer.d.ts.map +1 -1
  38. package/dist/agent/contextPreparer.js +15 -10
  39. package/dist/agent/contextPreparer.js.map +1 -1
  40. package/dist/agent/guardRail.d.ts +25 -10
  41. package/dist/agent/guardRail.d.ts.map +1 -1
  42. package/dist/agent/guardRail.js +154 -46
  43. package/dist/agent/guardRail.js.map +1 -1
  44. package/dist/agent/loop.d.ts +46 -13
  45. package/dist/agent/loop.d.ts.map +1 -1
  46. package/dist/agent/loop.js +145 -32
  47. package/dist/agent/loop.js.map +1 -1
  48. package/dist/agent/managers/archiveCoordinator.d.ts +15 -3
  49. package/dist/agent/managers/archiveCoordinator.d.ts.map +1 -1
  50. package/dist/agent/managers/archiveCoordinator.js +13 -7
  51. package/dist/agent/managers/archiveCoordinator.js.map +1 -1
  52. package/dist/agent/managers/chatLockManager.d.ts +3 -9
  53. package/dist/agent/managers/chatLockManager.d.ts.map +1 -1
  54. package/dist/agent/managers/chatLockManager.js +7 -25
  55. package/dist/agent/managers/chatLockManager.js.map +1 -1
  56. package/dist/agent/managers/llmCaller.d.ts.map +1 -1
  57. package/dist/agent/managers/llmCaller.js +27 -1
  58. package/dist/agent/managers/llmCaller.js.map +1 -1
  59. package/dist/agent/managers/memoryInspector.d.ts +12 -7
  60. package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
  61. package/dist/agent/managers/memoryInspector.js +32 -19
  62. package/dist/agent/managers/memoryInspector.js.map +1 -1
  63. package/dist/agent/managers/roundSummaryGenerator.d.ts +3 -1
  64. package/dist/agent/managers/roundSummaryGenerator.d.ts.map +1 -1
  65. package/dist/agent/managers/roundSummaryGenerator.js +14 -4
  66. package/dist/agent/managers/roundSummaryGenerator.js.map +1 -1
  67. package/dist/agent/managers/sessionArchiver.d.ts +20 -6
  68. package/dist/agent/managers/sessionArchiver.d.ts.map +1 -1
  69. package/dist/agent/managers/sessionArchiver.js +19 -5
  70. package/dist/agent/managers/sessionArchiver.js.map +1 -1
  71. package/dist/agent/managers/sessionManager.d.ts +21 -88
  72. package/dist/agent/managers/sessionManager.d.ts.map +1 -1
  73. package/dist/agent/managers/sessionManager.js +77 -278
  74. package/dist/agent/managers/sessionManager.js.map +1 -1
  75. package/dist/agent/seed/orchestrator.d.ts.map +1 -1
  76. package/dist/agent/seed/orchestrator.js +3 -3
  77. package/dist/agent/seed/orchestrator.js.map +1 -1
  78. package/dist/agent/seed/prepare.d.ts.map +1 -1
  79. package/dist/agent/seed/prepare.js +9 -4
  80. package/dist/agent/seed/prepare.js.map +1 -1
  81. package/dist/agent/seed/types.d.ts +11 -4
  82. package/dist/agent/seed/types.d.ts.map +1 -1
  83. package/dist/agent/seed/types.js +2 -2
  84. package/dist/agent/toolExecutor.d.ts +69 -18
  85. package/dist/agent/toolExecutor.d.ts.map +1 -1
  86. package/dist/agent/toolExecutor.js +188 -28
  87. package/dist/agent/toolExecutor.js.map +1 -1
  88. package/dist/agent/toolResultCache.js +1 -1
  89. package/dist/agent/toolRunner.d.ts +4 -2
  90. package/dist/agent/toolRunner.d.ts.map +1 -1
  91. package/dist/agent/toolRunner.js +7 -4
  92. package/dist/agent/toolRunner.js.map +1 -1
  93. package/dist/agent/types.d.ts +8 -25
  94. package/dist/agent/types.d.ts.map +1 -1
  95. package/dist/index.d.ts +9 -20
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +35 -32
  98. package/dist/index.js.map +1 -1
  99. package/dist/logging/logger.d.ts +4 -1
  100. package/dist/logging/logger.d.ts.map +1 -1
  101. package/dist/logging/logger.js +5 -2
  102. package/dist/logging/logger.js.map +1 -1
  103. package/dist/memory/gcService.d.ts.map +1 -1
  104. package/dist/memory/gcService.js +3 -5
  105. package/dist/memory/gcService.js.map +1 -1
  106. package/dist/memory/inMemorySessionStore.d.ts +2 -2
  107. package/dist/memory/inMemorySessionStore.js +2 -2
  108. package/dist/memory/inMemoryStorage.d.ts +4 -3
  109. package/dist/memory/inMemoryStorage.d.ts.map +1 -1
  110. package/dist/memory/inMemoryStorage.js +2 -2
  111. package/dist/memory/inMemoryStorage.js.map +1 -1
  112. package/dist/memory/nodeSqliteStorage.d.ts +17 -0
  113. package/dist/memory/nodeSqliteStorage.d.ts.map +1 -0
  114. package/dist/memory/nodeSqliteStorage.js +393 -0
  115. package/dist/memory/nodeSqliteStorage.js.map +1 -0
  116. package/dist/memory/projectManager.d.ts +10 -20
  117. package/dist/memory/projectManager.d.ts.map +1 -1
  118. package/dist/memory/projectManager.js +27 -41
  119. package/dist/memory/projectManager.js.map +1 -1
  120. package/dist/memory/roundStore.d.ts +76 -1
  121. package/dist/memory/roundStore.d.ts.map +1 -1
  122. package/dist/memory/roundStore.js.map +1 -1
  123. package/dist/memory/roundSummaryLookup.d.ts +26 -0
  124. package/dist/memory/roundSummaryLookup.d.ts.map +1 -0
  125. package/dist/memory/roundSummaryLookup.js +19 -0
  126. package/dist/memory/roundSummaryLookup.js.map +1 -0
  127. package/dist/memory/sessionStore.d.ts +19 -2
  128. package/dist/memory/sessionStore.d.ts.map +1 -1
  129. package/dist/memory/sessionStore.js.map +1 -1
  130. package/dist/memory/sourceValidation.d.ts +2 -13
  131. package/dist/memory/sourceValidation.d.ts.map +1 -1
  132. package/dist/memory/sourceValidation.js +5 -16
  133. package/dist/memory/sourceValidation.js.map +1 -1
  134. package/dist/memory/storageInterface.d.ts +26 -16
  135. package/dist/memory/storageInterface.d.ts.map +1 -1
  136. package/dist/memory/supersedeResolve.d.ts +39 -0
  137. package/dist/memory/supersedeResolve.d.ts.map +1 -0
  138. package/dist/memory/supersedeResolve.js +16 -0
  139. package/dist/memory/supersedeResolve.js.map +1 -0
  140. package/dist/memory/types.d.ts +3 -2
  141. package/dist/memory/types.d.ts.map +1 -1
  142. package/dist/memory/types.js +2 -1
  143. package/dist/memory/types.js.map +1 -1
  144. package/dist/role-pack/rolePackManager.d.ts +33 -24
  145. package/dist/role-pack/rolePackManager.d.ts.map +1 -1
  146. package/dist/role-pack/rolePackManager.js +48 -42
  147. package/dist/role-pack/rolePackManager.js.map +1 -1
  148. package/dist/role-pack/strategyKeys.d.ts +8 -0
  149. package/dist/role-pack/strategyKeys.d.ts.map +1 -1
  150. package/dist/role-pack/strategyKeys.js +10 -0
  151. package/dist/role-pack/strategyKeys.js.map +1 -1
  152. package/dist/role-pack/strategyResolver.d.ts +6 -1
  153. package/dist/role-pack/strategyResolver.d.ts.map +1 -1
  154. package/dist/role-pack/strategyResolver.js +20 -2
  155. package/dist/role-pack/strategyResolver.js.map +1 -1
  156. package/dist/role-pack/types.d.ts +5 -1
  157. package/dist/role-pack/types.d.ts.map +1 -1
  158. package/dist/security/confirmEntries.d.ts +21 -6
  159. package/dist/security/confirmEntries.d.ts.map +1 -1
  160. package/dist/security/confirmEntries.js +21 -6
  161. package/dist/security/confirmEntries.js.map +1 -1
  162. package/dist/security/pathGuard.d.ts +44 -10
  163. package/dist/security/pathGuard.d.ts.map +1 -1
  164. package/dist/security/pathGuard.js +70 -10
  165. package/dist/security/pathGuard.js.map +1 -1
  166. package/dist/utils/backgroundTask.d.ts +56 -34
  167. package/dist/utils/backgroundTask.d.ts.map +1 -1
  168. package/dist/utils/backgroundTask.js +130 -99
  169. package/dist/utils/backgroundTask.js.map +1 -1
  170. package/dist/utils/errors.d.ts +3 -2
  171. package/dist/utils/errors.d.ts.map +1 -1
  172. package/dist/utils/errors.js +3 -2
  173. package/dist/utils/errors.js.map +1 -1
  174. package/dist/utils/eventEmitter.d.ts +20 -22
  175. package/dist/utils/eventEmitter.d.ts.map +1 -1
  176. package/dist/utils/eventEmitter.js +0 -3
  177. package/dist/utils/eventEmitter.js.map +1 -1
  178. package/dist/utils/time.d.ts +3 -3
  179. package/dist/utils/time.d.ts.map +1 -1
  180. package/dist/utils/time.js +3 -3
  181. package/dist/utils/time.js.map +1 -1
  182. package/dist/utils/toError.d.ts +1 -1
  183. package/dist/utils/toError.js +1 -1
  184. package/dist/web-fetch/loginWall.d.ts +39 -0
  185. package/dist/web-fetch/loginWall.d.ts.map +1 -0
  186. package/dist/web-fetch/loginWall.js +78 -0
  187. package/dist/web-fetch/loginWall.js.map +1 -0
  188. package/dist/web-fetch/types.d.ts +8 -0
  189. package/dist/web-fetch/types.d.ts.map +1 -1
  190. package/dist/web-fetch/webFetchProvider.d.ts.map +1 -1
  191. package/dist/web-fetch/webFetchProvider.js +3 -1
  192. package/dist/web-fetch/webFetchProvider.js.map +1 -1
  193. package/dist/web-search/fetchWebSearchProvider.js +28 -23
  194. package/dist/web-search/fetchWebSearchProvider.js.map +1 -1
  195. package/docs/architecture/role-pack-authoring-guide.md +7 -1
  196. package/docs/architecture/role-pack-spec.md +11 -6
  197. package/docs/memora-api-reference.md +1354 -1276
  198. package/docs/memora-/345/215/207/347/272/247/346/214/207/345/215/227-4.x-/345/210/260-5.0.0.md +385 -0
  199. package/docs/memora-/346/216/245/345/205/245/346/214/207/345/215/227.md +89 -49
  200. package/docs/role-pack-/345/274/200/346/224/276/351/224/256/346/214/207/345/215/227.md +148 -148
  201. package/package.json +13 -4
  202. package/role-packs/README.md +41 -40
  203. package/role-packs/memora/345/212/251/346/211/213/rules.md +5 -4
  204. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/manifest.json +1 -0
  205. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/persona.md +46 -46
  206. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/rules.md +17 -16
  207. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/emotion-wave.md +46 -46
  208. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/foreshadow.md +29 -29
  209. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/outline-expand.md +73 -48
  210. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/project-init/scripts/init-novel-project.mjs +445 -441
  211. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/story-bible.md +62 -62
  212. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/manifest.json +1 -0
  213. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/rules.md +2 -1
  214. package/dist/agent/managers/dedupManager.d.ts +0 -85
  215. package/dist/agent/managers/dedupManager.d.ts.map +0 -1
  216. package/dist/agent/managers/dedupManager.js +0 -248
  217. package/dist/agent/managers/dedupManager.js.map +0 -1
  218. package/dist/agent/managers/goalConsistencyChecker.d.ts +0 -42
  219. package/dist/agent/managers/goalConsistencyChecker.d.ts.map +0 -1
  220. package/dist/agent/managers/goalConsistencyChecker.js +0 -178
  221. package/dist/agent/managers/goalConsistencyChecker.js.map +0 -1
  222. package/dist/agent/managers/llmJudgeHelper.d.ts +0 -21
  223. package/dist/agent/managers/llmJudgeHelper.d.ts.map +0 -1
  224. package/dist/agent/managers/llmJudgeHelper.js +0 -32
  225. package/dist/agent/managers/llmJudgeHelper.js.map +0 -1
  226. package/dist/agent/managers/memoryAdvisor.d.ts +0 -105
  227. package/dist/agent/managers/memoryAdvisor.d.ts.map +0 -1
  228. package/dist/agent/managers/memoryAdvisor.js +0 -322
  229. package/dist/agent/managers/memoryAdvisor.js.map +0 -1
  230. package/dist/agent/managers/memoryGovernance.d.ts +0 -24
  231. package/dist/agent/managers/memoryGovernance.d.ts.map +0 -1
  232. package/dist/agent/managers/memoryGovernance.js +0 -46
  233. package/dist/agent/managers/memoryGovernance.js.map +0 -1
  234. package/dist/memory/governance.d.ts +0 -17
  235. package/dist/memory/governance.d.ts.map +0 -1
  236. package/dist/memory/governance.js +0 -17
  237. package/dist/memory/governance.js.map +0 -1
  238. package/dist/memory/projectRegistry.d.ts +0 -47
  239. package/dist/memory/projectRegistry.d.ts.map +0 -1
  240. package/dist/memory/projectRegistry.js +0 -151
  241. package/dist/memory/projectRegistry.js.map +0 -1
  242. package/dist/utils/recallDefaults.d.ts +0 -16
  243. package/dist/utils/recallDefaults.d.ts.map +0 -1
  244. package/dist/utils/recallDefaults.js +0 -16
  245. package/dist/utils/recallDefaults.js.map +0 -1
@@ -1,26 +1,35 @@
1
1
  /**
2
- * 项目管理器 — 多项目生命周期编排(单 Agent 模型)。
3
- * 职责:项目初始化编排(关旧项目→加锁→加载资源→构建上下文)、Agent 级资源管理
4
- * (memora.db 全局共享不随切换重建)、两层记忆加载。注册表/锁文件委托专职模块 ProjectRegistry / LockManager。
5
- * 原则:memora.db 只有一个(Agent 级);项目切换不重建库,只更新安全守卫+重扫项目规则;
6
- * 项目级 .memora/ 仅存放 rules 与 skills(无 memora.db)。
2
+ * 项目管理器 — 单个项目的生命周期编排(单 Agent 模型)。
3
+ * 职责:项目初始化编排(加锁 → 确保 Agent 级存储 → 构建上下文)、关闭与锁释放。
4
+ * 边界(2026-10-18 定案):一个 Agent 绑定一个项目;**多项目由宿主创建多个 Agent 实例**,
5
+ * 内核既不提供单实例内切换、也不维护跨项目名单(历史 `switchProject` / `projects.json`
6
+ * 注册表整链已随 PR-SWITCH-1 删除)。项目名只从路径推断,内核不落任何跨项目状态。
7
7
  */
8
- import { resolve, join } from 'node:path';
8
+ import { resolve } from 'node:path';
9
9
  import { mkdir } from 'node:fs/promises';
10
10
  import { InMemoryStorage } from '../memory/inMemoryStorage.js';
11
11
  import { logger } from '../logging/logger.js';
12
12
  import { expandHome } from '../utils/path.js';
13
- import { ProjectRegistry } from '../memory/projectRegistry.js';
14
13
  import { LockManager } from '../memory/lockManager.js';
14
+ /**
15
+ * 从路径推断项目名称(取最后一段目录名,无法推断返回 'unnamed')。
16
+ * 原为 ProjectRegistry 静态方法,注册表整链删除后摘为本模块级纯函数——项目名是
17
+ * `ProjectContext.projectName` 的唯一来源,推断逻辑不该随注册表一起消失。
18
+ */
19
+ function inferProjectName(projectPath) {
20
+ const parts = projectPath.replace(/[/\\]+$/, '').split(/[/\\]/);
21
+ return parts[parts.length - 1] || 'unnamed';
22
+ }
15
23
  // ─── 类 ──────────────────────────────────────────────────
16
24
  /**
17
- * 项目管理器:管理多项目生命周期——初始化当前项目(加锁+加载两层配置)、
18
- * 切换到新项目(解锁旧+锁新)、退出清理锁文件。注册表/锁文件委托专职模块,本类聚焦编排。
25
+ * 项目管理器:**单个**项目的生命周期编排——初始化(加锁 → 确保存储 → 构建上下文)、
26
+ * 关闭与锁释放。一个 Agent 绑定一个项目(2026-10-18 形态定案),因此本类**不持跨项目状态**:
27
+ * 无切换入口、无注册表、无项目名单。多项目由宿主各建一个 Agent 实例。
19
28
  */
20
29
  export class ProjectManager {
21
30
  /** Agent 级数据目录(宿主传入;内核不假设其下的文件形态) */
22
31
  agentDataDir;
23
- /** Agent 级存储实例(全局共享,不随项目切换重建) */
32
+ /** Agent 级存储实例(实例内唯一,init 后不再重建) */
24
33
  agentIndex = null;
25
34
  /** 当前打开的项目路径 */
26
35
  currentProjectPath = null;
@@ -28,26 +37,17 @@ export class ProjectManager {
28
37
  externalStorage;
29
38
  /** SecurityGuard 工厂函数(Agent 层注入) */
30
39
  createSecurityGuard;
31
- /** 项目注册表(专职 projects.json) */
32
- registry;
33
40
  /** 锁文件管理器(专职 .memora/.lock) */
34
41
  lockManager;
35
42
  constructor(options) {
36
- const { dataDir, storage, registryDir, createSecurityGuard } = options;
37
- const memoraHome = resolve(expandHome(dataDir));
38
- this.agentDataDir = memoraHome;
39
- // 注册表目录:显式指定时用之(典型为用户级路径,使注册表跨项目共享);
40
- // 缺省随 dataDir——此时注册表能否跨项目取决于调用方传的 dataDir 是共享还是项目级,
41
- // 内核不做假设:项目级 dataDir 下每个项目只注册自身,按名切换不成立(switchProject 已加守卫)。
42
- const registryHome = registryDir ? resolve(expandHome(registryDir)) : memoraHome;
43
+ const { dataDir, storage, createSecurityGuard } = options;
44
+ this.agentDataDir = resolve(expandHome(dataDir));
43
45
  this.externalStorage = storage ?? null;
44
46
  this.createSecurityGuard = createSecurityGuard;
45
- // 注册表/锁文件委托专职模块
46
- this.registry = new ProjectRegistry(join(registryHome, 'projects.json'));
47
47
  this.lockManager = new LockManager();
48
48
  }
49
49
  /**
50
- * 确保 Agent 级资源(存储实例)已初始化,生命周期内共享不随项目切换重建。
50
+ * 确保 Agent 级资源(存储实例)已初始化,Agent 实例生命周期内保持同一实例。
51
51
  * 构造注入的外部实例直接用,否则内部 InMemoryStorage(非持久化,仅开发/测试)。
52
52
  */
53
53
  async ensureAgentResources() {
@@ -64,11 +64,11 @@ export class ProjectManager {
64
64
  return { index: this.agentIndex };
65
65
  }
66
66
  /**
67
- * 初始化项目:关闭旧项目→取项目级锁→确保共享存储→构建上下文。
67
+ * 初始化项目:防重入释放旧锁→取项目级锁→确保存储→构建上下文。
68
68
  * 任一步失败释放锁并重置状态,防锁文件残留导致下次启动检测失败。
69
69
  */
70
70
  async initProject(projectPath, projectName, configDir) {
71
- // 1) 关闭旧项目(释放旧锁,不关 Agent 级 DB)
71
+ // 1) 防重入:本实例已打开过项目则先释放旧锁(不关 Agent 级 DB)
72
72
  if (this.currentProjectPath) {
73
73
  await this.closeProject();
74
74
  }
@@ -93,7 +93,7 @@ export class ProjectManager {
93
93
  }
94
94
  }
95
95
  /**
96
- * 构建项目上下文:bootstrap 过滤(恒为空,设定记忆归角色包层)+ 安全守卫创建 + 项目注册 + 日志。
96
+ * 构建项目上下文:bootstrap 过滤(恒为空,设定记忆归角色包层)+ 安全守卫创建 + 名称推断 + 日志。
97
97
  */
98
98
  buildProjectContext(projectPath, projectName, memoraDir, index, configDir) {
99
99
  // 设定记忆唯一归角色包内容层,由 assembler 角色包路径接管,恒为空数组
@@ -102,9 +102,7 @@ export class ProjectManager {
102
102
  const security = this.createSecurityGuard
103
103
  ? this.createSecurityGuard(projectPath, memoraDir, configDir, this.agentDataDir)
104
104
  : null;
105
- // 注册到项目表(委托 ProjectRegistry)
106
- const name = projectName || ProjectRegistry.inferProjectName(projectPath);
107
- this.registry.register(projectPath, name);
105
+ const name = projectName || inferProjectName(projectPath);
108
106
  logger.info({
109
107
  projectPath,
110
108
  projectName: name,
@@ -125,7 +123,7 @@ export class ProjectManager {
125
123
  await this.lockManager.release();
126
124
  this.currentProjectPath = null;
127
125
  }
128
- /** 完全关闭:释放项目锁 + 关闭 Agent 级数据库(应在 Agent 整体关闭而非项目切换时调用) */
126
+ /** 完全关闭:释放项目锁 + 关闭 Agent 级数据库(由 `Agent.close()` 调用) */
129
127
  async shutdown() {
130
128
  if (this.currentProjectPath) {
131
129
  await this.closeProject();
@@ -140,18 +138,6 @@ export class ProjectManager {
140
138
  this.agentIndex = null;
141
139
  }
142
140
  }
143
- /** 列出已注册项目(委托 ProjectRegistry) */
144
- get list() {
145
- return this.registry.list;
146
- }
147
- /** 注册项目(委托 ProjectRegistry) */
148
- registerProject(projectPath, name) {
149
- this.registry.register(projectPath, name);
150
- }
151
- /** 移除项目(委托 ProjectRegistry) */
152
- unregisterProject(projectPath) {
153
- this.registry.unregister(projectPath);
154
- }
155
141
  /** 当前项目路径 */
156
142
  get currentProject() {
157
143
  return this.currentProjectPath;
@@ -1 +1 @@
1
- {"version":3,"file":"projectManager.js","sourceRoot":"","sources":["../../src/memory/projectManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projectManager.js","sourceRoot":"","sources":["../../src/memory/projectManager.ts"],"names":[],"mappings":"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"}
@@ -204,6 +204,7 @@ export type ProcessEvent = {
204
204
  id: string;
205
205
  name: string;
206
206
  source: string;
207
+ /** 正文(5.0.0 起可选:老数据无) */ content?: string;
207
208
  };
208
209
  }
209
210
  /**
@@ -351,7 +352,7 @@ export type ProcessEvent = {
351
352
  * 裁决证据事件(悬案取证轨,Round.evidence 元素)
352
353
  *
353
354
  * 定位:给「带伤悬案」提供跨会话可回溯的个案证据(回显命中 = 模型规避还是防重误拦、
354
- * 空响应是否偏爱会议轮),消费方是人工/抽样裁决,不是 UI 重放——
355
+ * 空响应是否偏爱会议轮、搜索 query 与结果面的归因对齐),消费方是人工/抽样裁决,不是 UI 重放——
355
356
  * 故不进 processEvents(宿主 UI 过程轨),由内核单点追加到在途 Round,
356
357
  * 宿主整对象 JSON 持久化天然携带。
357
358
  *
@@ -426,6 +427,80 @@ export type RoundEvidenceEvent = {
426
427
  */
427
428
  [dedupField: string]: string | number | undefined;
428
429
  };
430
+ } | {
431
+ /**
432
+ * web_search 执行结果留痕(SEARCH-QUALITY-1 P1-1:「搜不准」归因取证)
433
+ *
434
+ * 定位:结果质量争议的第一现场不在结果页,在 **query 本身**——旧台账只留「搜到什么」,
435
+ * 没留「搜的是什么」,归因只能猜。本变体把 query/endpoint/count/titles 落进取证轨,
436
+ * 复现争议时可直接对齐「模型问了什么 ⇄ 引擎回了什么」,裁决软引导/端点选择/解析缺陷。
437
+ * 零结果(count=0)同样留痕——「没搜到」与「搜到了但不对」是同级的归因现场。
438
+ */
439
+ type: 'web_search_result';
440
+ /** 事件时刻(ISO 8601) */
441
+ ts: string;
442
+ /** 事件时刻是否会议轮(判据见类型注释) */
443
+ meetingRound: boolean;
444
+ payload: {
445
+ /**
446
+ * 本次搜索的工具调用唯一 ID(= tool_start.payload.toolCallId)。
447
+ *
448
+ * 宿主渲染重放时据此把证据**唯一配对**回对应的 web_search 工具行,
449
+ * 替代旧的「按 query 文本猜 + 行序消费」启发式(同 query 多次搜索 / 被硬拦
450
+ * 的搜索会张冠李戴)。**可选**:旧持久化轮次的证据无此字段,缺失时宿主回退
451
+ * query 游标启发式(保不带伤——历史轮不因此丢证据渲染)。
452
+ */
453
+ toolCallId?: string;
454
+ /** LLM 实际发出的查询串(归因第一现场) */
455
+ query: string;
456
+ /** 实际服务的搜索后端(降级分型证据;提供方未打标时缺省) */
457
+ endpoint?: string;
458
+ /** 结果条数(0 = 零结果搜索) */
459
+ count: number;
460
+ /** 结果标题(净化 + 截断后):定位「搜到了什么」的最小证据面(全量计数看 count) */
461
+ titles: string[];
462
+ };
463
+ } | {
464
+ /**
465
+ * search_memories 命中明细留痕(MEM-EVENT-3:重放可重建的落盘副本)
466
+ *
467
+ * 定位:`memoryRecalled` 是**实时专属**事件(不进 processEvents),宿主重放历史轮时无数据源,
468
+ * 命中明细整块消失——用户回看时「这次到底参考了哪几条记忆」永久不可考。本变体把
469
+ * 同一份明细写进取证轨(Round.evidence 随轮落盘),与 web_search_result 同一条通道、
470
+ * 同一处置:**实时面照旧走事件(即时可见),落盘面走证据(可回看)**,二者同源一次发射。
471
+ *
472
+ * 与 `memoryRecalled` 载荷的差异(刻意,不是漏项):`count` 保留原值(发射时命中条数),
473
+ * `hits` 全量(不截断——条数上限真源仍是 parseLimit 的 50,不另立证据侧常量)。
474
+ *
475
+ * ⚠ 未命中(hits 为空)不进本轨:内核 `memoryRecalled` 本身只在有命中时发射,
476
+ * 证据轨不为「查了但没查到」造第二条路径(查询行为已在 tool_start/tool_result 可见)。
477
+ */
478
+ type: 'memory_hits';
479
+ /** 事件时刻(ISO 8601) */
480
+ ts: string;
481
+ /** 事件时刻是否会议轮(判据见类型注释) */
482
+ meetingRound: boolean;
483
+ payload: {
484
+ /**
485
+ * 本次召回的 tool_call 唯一 ID(= tool_start.payload.toolCallId)。
486
+ *
487
+ * 宿主重放时据此把命中明细**唯一配对**回对应的 search_memories 工具行。
488
+ * **可选**:旧内核(4.1.x 首版)不发该字段,缺失时宿主走轮次级兜底落位
489
+ * (保不带伤——历史轮不因缺配对键而丢明细)。
490
+ */
491
+ toolCallId?: string;
492
+ /** LLM 实际发出的检索词(与 web_search 的 query 同语义:归因第一现场) */
493
+ query: string;
494
+ /** 发射时命中条数(= hits.length,保留原字段供纯计数消费方) */
495
+ count: number;
496
+ /** 命中明细(记忆 id 全局唯一,兼宿主反馈寻址键);contentPreview 可选 = 跨 dist 契约(4.x 载荷无) */
497
+ hits: {
498
+ id: string;
499
+ name: string;
500
+ source: string;
501
+ contentPreview?: string;
502
+ }[];
503
+ };
429
504
  };
430
505
  /**
431
506
  * 问答闭环(Round)
@@ -1 +1 @@
1
- {"version":3,"file":"roundStore.d.ts","sourceRoot":"","sources":["../../src/memory/roundStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"roundStore.d.ts","sourceRoot":"","sources":["../../src/memory/roundStore.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"roundStore.js","sourceRoot":"","sources":["../../src/memory/roundStore.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoGH;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,cAAc,CAAC,MAAmB;IAChD,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,aAAa,CAAC;AAC3D,CAAC;AAicD,uDAAuD;AAEvD,mCAAmC;AACnC,MAAM,UAAU,eAAe;IAC7B,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACvD,OAAO,SAAS,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;IACxC,CAAC;IACD,iBAAiB;IACjB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvD,OAAO,SAAS,SAAS,GAAG,MAAM,EAAE,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACvD,OAAO,OAAO,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;IACtC,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvD,OAAO,OAAO,SAAS,GAAG,MAAM,EAAE,CAAC;AACrC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,OAAO;QACL,EAAE;QACF,WAAW,EAAE;YACX,EAAE,EAAE,iBAAiB,EAAE;YACvB,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,WAAW;YACpB,SAAS,EAAE,GAAG;SACf;QACD,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,GAAG;QACd,QAAQ,EAAE,CAAC;KACZ,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAY,EACZ,gBAAwB,EACxB,UAA8C;IAE9C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,OAAO;QACL,GAAG,KAAK;QACR,gBAAgB,EAAE;YAChB,EAAE,EAAE,iBAAiB,EAAE;YACvB,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,gBAAgB;YACzB,SAAS,EAAE,GAAG;YACd,UAAU;SACX;QACD,MAAM,EAAE,UAAU;QAClB,WAAW,EAAE,GAAG;KACjB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"roundStore.js","sourceRoot":"","sources":["../../src/memory/roundStore.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoGH;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,cAAc,CAAC,MAAmB;IAChD,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,aAAa,CAAC;AAC3D,CAAC;AA6gBD,uDAAuD;AAEvD,mCAAmC;AACnC,MAAM,UAAU,eAAe;IAC7B,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACvD,OAAO,SAAS,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;IACxC,CAAC;IACD,iBAAiB;IACjB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvD,OAAO,SAAS,SAAS,GAAG,MAAM,EAAE,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACvD,OAAO,OAAO,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;IACtC,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvD,OAAO,OAAO,SAAS,GAAG,MAAM,EAAE,CAAC;AACrC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,OAAO;QACL,EAAE;QACF,WAAW,EAAE;YACX,EAAE,EAAE,iBAAiB,EAAE;YACvB,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,WAAW;YACpB,SAAS,EAAE,GAAG;SACf;QACD,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,GAAG;QACd,QAAQ,EAAE,CAAC;KACZ,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAY,EACZ,gBAAwB,EACxB,UAA8C;IAE9C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,OAAO;QACL,GAAG,KAAK;QACR,gBAAgB,EAAE;YAChB,EAAE,EAAE,iBAAiB,EAAE;YACvB,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,gBAAgB;YACzB,SAAS,EAAE,GAAG;YACd,UAAU;SACX;QACD,MAAM,EAAE,UAAU;QAClB,WAAW,EAAE,GAAG;KACjB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * round-summary 派生寻址 —— 按 roundId 反查派生摘要(单一真理源)
3
+ *
4
+ * 定案(memory-as-summary.md §5.1):Round 是物理唯一真理源,round-summary 按
5
+ * `roundId` 顶层字段溯源,Round 侧不持有反向指针 ⇒「Round 退出 → 派生摘要处置」
6
+ * 的**选择集**只在本文件定义一次,两条消费路径共用:
7
+ * - 宿主联动(删会话/回溯截断/孤儿清扫)→ MemoryInspector.softDeleteRoundSummaries(软删 + 脱钩溯源,可恢复)
8
+ * - 内核 GC(孤儿轮引用归零)→ GCService.cleanUpRoundSummary(物理 purge,系统治理决定)
9
+ * ⚠️ 只共用「选哪些」;「怎么处置」(软删 vs purge)分叉是有意语义,勿折叠(见 §5.1 删除规则表)。
10
+ *
11
+ * 依赖方向:本文件在 memory/ 层,仅类型 import,agent/managers 与 memory 内部均可单向消费。
12
+ */
13
+ import type { IMemoryStorage } from '../memory/storageInterface.js';
14
+ import type { Memory } from '../memory/types.js';
15
+ /**
16
+ * 按 roundId 集合反查活跃 round-summary(覆盖全部会话命名空间的两段式 ID)
17
+ *
18
+ * 两段式摘要 ID `round-summary:{sessionName}:{roundId}` 含会话段,同轮可能被多会话
19
+ * 引用 —— 故按顶层 roundId 字段寻址,不解析 ID 字符串。
20
+ *
21
+ * @param storage 记忆库(两条路径各自持有,本函数只读不写)
22
+ * @param roundIds 目标轮次 ID 集合(单轮场景传单元素集合)
23
+ * @returns 命中的活跃摘要(仅内存活跃面;软删摘要不在其中,语义见 IMemoryStorage.getBySource)
24
+ */
25
+ export declare function findRoundSummaries(storage: IMemoryStorage, roundIds: ReadonlySet<string>): Memory[];
26
+ //# sourceMappingURL=roundSummaryLookup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roundSummaryLookup.d.ts","sourceRoot":"","sources":["../../src/memory/roundSummaryLookup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,GAC5B,MAAM,EAAE,CAKV"}
@@ -0,0 +1,19 @@
1
+ import { SOURCE_LABELS } from '../memory/types.js';
2
+ /**
3
+ * 按 roundId 集合反查活跃 round-summary(覆盖全部会话命名空间的两段式 ID)
4
+ *
5
+ * 两段式摘要 ID `round-summary:{sessionName}:{roundId}` 含会话段,同轮可能被多会话
6
+ * 引用 —— 故按顶层 roundId 字段寻址,不解析 ID 字符串。
7
+ *
8
+ * @param storage 记忆库(两条路径各自持有,本函数只读不写)
9
+ * @param roundIds 目标轮次 ID 集合(单轮场景传单元素集合)
10
+ * @returns 命中的活跃摘要(仅内存活跃面;软删摘要不在其中,语义见 IMemoryStorage.getBySource)
11
+ */
12
+ export function findRoundSummaries(storage, roundIds) {
13
+ if (roundIds.size === 0)
14
+ return [];
15
+ return storage
16
+ .getBySource(SOURCE_LABELS.ROUND_SUMMARY)
17
+ .filter((m) => m.roundId !== undefined && roundIds.has(m.roundId));
18
+ }
19
+ //# sourceMappingURL=roundSummaryLookup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roundSummaryLookup.js","sourceRoot":"","sources":["../../src/memory/roundSummaryLookup.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAuB,EACvB,QAA6B;IAE7B,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,OAAO,OAAO;SACX,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC;SACxC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACvE,CAAC"}
@@ -32,8 +32,8 @@ export interface ISessionStore {
32
32
  /**
33
33
  * 列出全部会话标题元数据,**必须按 updatedAt 降序**(最近活跃在前)。
34
34
  *
35
- * 排序方向是本接口契约的一部分,不是各实现自由:`SessionManager.restoreMostRecentSession`
36
- * 视 `[0]` 为「最近活跃会话」的唯一真理源;升序实现会让「恢复最近会话」恢复成最旧会话。
35
+ * 排序方向是本接口契约的一部分,不是各实现自由:宿主(chatPanel 构造器)视 `[0]` 为
36
+ * 「最近活跃会话」的唯一真理源(打开面板时定位初始会话);升序实现会让初始定位落到最旧会话。
37
37
  */
38
38
  listSessionMetas(): SessionMeta[];
39
39
  /** 追加 Round ID 到会话 */
@@ -68,6 +68,23 @@ export interface SessionMeta {
68
68
  updatedAt: string;
69
69
  /** 会话消息条数(命名信号与列表展示) */
70
70
  messageCount: number;
71
+ /**
72
+ * 上次**实际完成归档**时的消息数快照(防重判据的落盘副本,2026-10-19 起)。
73
+ *
74
+ * ⚠️ 与上方 `messageCount` **语义不同、不可复用**:
75
+ * - `messageCount` = 会话**当前**消息总数(列表展示 / 命名信号,随对话增长);
76
+ * - 本字段 = **上次归档那一刻**的消息数(防重用,只在归档写入成功后更新)。
77
+ *
78
+ * 为何要落盘:`SessionArchiver` 的内存快照(`Map`)随进程销毁清零,重启后首次触发会
79
+ * 对「内容未变、早归档过」的会话**重复烧一次 LLM**——手动归档入口(manual 模式「移入
80
+ * 留存区」)落地后这条路径变成用户可见的重复开销,故判据须跨进程存活。
81
+ *
82
+ * 判据可靠性:对话记录 append-only(单条消息不删)⇒ 本值等于当前消息数 = 内容未变。
83
+ * 缺省 `undefined`(老数据 / 从未归档)= 无归档记录 ⇒ **不跳过**(自然降级,不多不少一次)。
84
+ *
85
+ * 单点:`SessionArchiver` 唯一写入与读取(`getSessionMeta` 读、`updateSessionMeta` 写)。
86
+ */
87
+ archivedMessageCount?: number;
71
88
  /** 创建时间(ISO 8601) */
72
89
  createdAt?: string;
73
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sessionStore.d.ts","sourceRoot":"","sources":["../../src/memory/sessionStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAE5B;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,CAAC;IAG9D,mCAAmC;IACnC,YAAY,IAAI,MAAM,EAAE,CAAC;IACzB,gCAAgC;IAChC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IAC3D,oEAAoE;IACpE,eAAe,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACzD,oDAAoD;IACpD,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IACvE;;;;;OAKG;IACH,gBAAgB,IAAI,WAAW,EAAE,CAAC;IAGlC,sBAAsB;IACtB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACxD,+BAA+B;IAC/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5D,wBAAwB;IACxB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzC,qCAAqC;IACrC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACzD,eAAe;IACf,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACvC,6BAA6B;IAC7B,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAGlB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAS3E;AAED,gCAAgC;AAChC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAIxE;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4CAA4C;IAC5C,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
1
+ {"version":3,"file":"sessionStore.d.ts","sourceRoot":"","sources":["../../src/memory/sessionStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAE5B;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,CAAC;IAG9D,mCAAmC;IACnC,YAAY,IAAI,MAAM,EAAE,CAAC;IACzB,gCAAgC;IAChC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IAC3D,oEAAoE;IACpE,eAAe,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACzD,oDAAoD;IACpD,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IACvE;;;;;OAKG;IACH,gBAAgB,IAAI,WAAW,EAAE,CAAC;IAGlC,sBAAsB;IACtB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACxD,+BAA+B;IAC/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5D,wBAAwB;IACxB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzC,qCAAqC;IACrC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACzD,eAAe;IACf,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACvC,6BAA6B;IAC7B,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAGlB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,YAAY,EAAE,MAAM,CAAC;IAGrB;;;;;;;;;;;;;;;OAeG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAS3E;AAED,gCAAgC;AAChC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAIxE;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4CAA4C;IAC5C,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -1 +1 @@
1
- {"version":3,"file":"sessionStore.js","sourceRoot":"","sources":["../../src/memory/sessionStore.ts"],"names":[],"mappings":"AAuFA;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAA6B;IACjE,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,wBAAwB;IACxB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IAC7C,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IACpC,wBAAwB;IACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IACvC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,kBAAkB,CAAC,IAA6B;IAC9D,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IACvC,OAAO,QAAQ,IAAI,EAAE,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"sessionStore.js","sourceRoot":"","sources":["../../src/memory/sessionStore.ts"],"names":[],"mappings":"AA2GA;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAA6B;IACjE,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,wBAAwB;IACxB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IAC7C,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IACpC,wBAAwB;IACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IACvC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,kBAAkB,CAAC,IAA6B;IAC9D,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IACvC,OAAO,QAAQ,IAAI,EAAE,CAAC;AACxB,CAAC"}
@@ -18,18 +18,6 @@ export type SourceValidationSeverity = 'block' | 'warn';
18
18
  * @returns 转义后的字符串
19
19
  */
20
20
  export declare function escapeLike(str: string): string;
21
- /**
22
- * 截取字符串前 maxLen 字符后转义 LIKE 通配符
23
- *
24
- * 用于将用户输入 / round-summary 记忆文本作为关键词搜索 SQL LIKE 查询的输入。
25
- * 截断避免超长输入导致 LIKE 解析性能问题,转义防止通配符被当作模式符。
26
- * 同 `escapeLike`:SQL 侧必须写 `LIKE ? ESCAPE '\'`,否则转义后的模式查不到字面值。
27
- *
28
- * @param text - 原始文本(用户输入 / round-summary 内容)
29
- * @param maxLen - 最大截取长度,默认 50
30
- * @returns 截断 + 转义后的字符串
31
- */
32
- export declare function escapeLikeSnippet(text: string, maxLen?: number): string;
33
21
  /**
34
22
  * 校验 source 字段是否为已知标签
35
23
  *
@@ -52,7 +40,8 @@ export declare function validateSource(source: string): {
52
40
  /**
53
41
  * 简单 Levenshtein 距离计算(仅用于短字符串,不做优化)
54
42
  *
55
- * 同文件 :121 用于标签 typo 检测;另导出供 DedupManager(语义去重场景的名称相似度)复用。
43
+ * 供本文件 `validateSource` 的标签 typo 检测使用(同文件上方)。历史上另供 `DedupManager`
44
+ * 做名称相似度复用,该类已随 GOVERNANCE-SRC-1(2026-10-18)整链退役。
56
45
  */
57
46
  export declare function levenshtein(a: string, b: string): number;
58
47
  //# sourceMappingURL=sourceValidation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sourceValidation.d.ts","sourceRoot":"","sources":["../../src/memory/sourceValidation.ts"],"names":[],"mappings":"AAeA;;;;;;GAMG;AACH,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,MAAM,CAAC;AAUxD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAK,GAAG,MAAM,CAEnE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG;IAC9C,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CA0DA;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA2BxD"}
1
+ {"version":3,"file":"sourceValidation.d.ts","sourceRoot":"","sources":["../../src/memory/sourceValidation.ts"],"names":[],"mappings":"AAiBA;;;;;;GAMG;AACH,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,MAAM,CAAC;AAUxD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG;IAC9C,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CA0DA;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA2BxD"}
@@ -4,7 +4,9 @@
4
4
  * 职责:
5
5
  * - escapeLike:转义 SQL LIKE 通配符(须配套 SQL 的 `ESCAPE '\'` 子句,否则转义失效)
6
6
  * - validateSource:校验 source 字段安全性和拼写
7
- * - levenshtein:简单编辑距离计算(输入限短字符串;本文件 :121 用于标签 typo 检测,另导出供 DedupManager 名称相似度复用)
7
+ * - levenshtein:简单编辑距离计算(输入限短字符串;供本文件 `validateSource` 做标签 typo 检测)。
8
+ * 曾另供 `DedupManager`(名称相似度)复用,该类已随 GOVERNANCE-SRC-1(2026-10-18)整链退役,
9
+ * 现仅余 `validateSource` 一个生产消费方 + 自身单测。
8
10
  *
9
11
  * 设计原则:
10
12
  * - source 是开放字符串,新增来源无需改代码
@@ -33,20 +35,6 @@ const KNOWN_SOURCES = new Set(Object.values(SOURCE_LABELS));
33
35
  export function escapeLike(str) {
34
36
  return str.replace(/[%_]/g, '\\$&');
35
37
  }
36
- /**
37
- * 截取字符串前 maxLen 字符后转义 LIKE 通配符
38
- *
39
- * 用于将用户输入 / round-summary 记忆文本作为关键词搜索 SQL LIKE 查询的输入。
40
- * 截断避免超长输入导致 LIKE 解析性能问题,转义防止通配符被当作模式符。
41
- * 同 `escapeLike`:SQL 侧必须写 `LIKE ? ESCAPE '\'`,否则转义后的模式查不到字面值。
42
- *
43
- * @param text - 原始文本(用户输入 / round-summary 内容)
44
- * @param maxLen - 最大截取长度,默认 50
45
- * @returns 截断 + 转义后的字符串
46
- */
47
- export function escapeLikeSnippet(text, maxLen = 50) {
48
- return escapeLike(text.slice(0, maxLen));
49
- }
50
38
  /**
51
39
  * 校验 source 字段是否为已知标签
52
40
  *
@@ -115,7 +103,8 @@ export function validateSource(source) {
115
103
  /**
116
104
  * 简单 Levenshtein 距离计算(仅用于短字符串,不做优化)
117
105
  *
118
- * 同文件 :121 用于标签 typo 检测;另导出供 DedupManager(语义去重场景的名称相似度)复用。
106
+ * 供本文件 `validateSource` 的标签 typo 检测使用(同文件上方)。历史上另供 `DedupManager`
107
+ * 做名称相似度复用,该类已随 GOVERNANCE-SRC-1(2026-10-18)整链退役。
119
108
  */
120
109
  export function levenshtein(a, b) {
121
110
  if (a.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"sourceValidation.js","sourceRoot":"","sources":["../../src/memory/sourceValidation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sourceValidation.js","sourceRoot":"","sources":["../../src/memory/sourceValidation.ts"],"names":[],"mappings":"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"}
@@ -1,33 +1,34 @@
1
1
  /**
2
2
  * 记忆存储接口 — Memora 内核与具体数据库实现的解耦边界
3
3
  *
4
- * 内核(agent/ + memory/ + persona/ + skill/)不依赖具体数据库:宿主(如泊文 Electron
5
- * 主进程)持有 better-sqlite3 实例并实现此接口注入 Agent;测试用 InMemoryStorage;不注入时
6
- * Agent 内部用 InMemoryStorage 作 fallback(重启后数据丢失)。方法保持同步语义,调用方已有
7
- * await 调用仍安全。软删除语义:delete 写入 deletedAt,查询类方法自动过滤已删除记忆,
4
+ * 内核业务模块不依赖具体数据库:宿主实现此接口注入 Agent(vscode 宿主默认直接用内核
5
+ * `createNodeSqliteStorage()`;SQLite 不可用时**仅当尚未迁移**才降级旧 JSON,已有 `.db`
6
+ * 则响亮失败——见宿主 `memoryStorage.ts`「禁数据分叉」);测试用 InMemoryStorage;
7
+ * 不注入时 Agent 内部用 InMemoryStorage 作 fallback(重启后数据丢失)。方法保持同步语义,
8
+ * 调用方已有 await 调用仍安全。软删除语义:delete 写入 deletedAt,查询类方法自动过滤已删除记忆,
8
9
  * restore 恢复,purge 物理删,listDeleted/purgeExpired 管理回收站。
9
10
  */
10
11
  import type { Memory } from '../memory/types.js';
11
12
  /**
12
- * 记忆存储接口 — 所有方法同步(对齐 better-sqlite3),可后续新增 IAsyncMemoryStorage 支持异步后端。
13
+ * 记忆存储接口 — 所有方法同步(对齐 node:sqlite 同步 API),可后续新增 IAsyncMemoryStorage 支持异步后端。
13
14
  *
14
- * ⚠️ 契约隐含假设(宿主实现须知):同步语义要求单次调用低延迟。JSON 文件落地实现(如 vscode 宿主
15
- * workspaceStorage)在记忆量增长时,upsert 等写路径会触发全量 `JSON.stringify` 重写,
16
- * 1 万条规模即达 MB 级单次同步 I/O,会阻塞事件循环。因此:**生产由宿主注入持久化实现**——当前
17
- * vscode 宿主为 JSON 文件(WorkspaceStorage,小规模够用);记忆量增长时建议宿主评估更优存储
18
- * (如 better-sqlite3,同步语义与本接口对齐);InMemoryStorage 仅用于测试与未注入时 fallback。
15
+ * ⚠️ 契约隐含假设(宿主实现须知):同步语义要求单次调用低延迟。5.0.0 起内核自带
16
+ * `createNodeSqliteStorage()`(node:sqlite 内建模块延迟加载,零三方依赖,WAL)——宿主优先用它,
17
+ * 不必自引三方驱动。JSON 全量重写实现(记忆量增长时 upsert 触发全量 `JSON.stringify`,1 万条
18
+ * 规模即达 MB 级单次同步 I/O,会阻塞事件循环)自 5.0.0 起降为「环境不支持 SQLite **且
19
+ * 尚未迁移**」时的降级档,不再是默认形态(已迁移后不可用 = 响亮失败,禁真源分叉)。
19
20
  */
20
21
  export interface IMemoryStorage {
21
22
  /**
22
23
  * 插入或更新记忆;source 为开放字符串可自定义,但写入须经 validateSource 统一校验
23
- *(内核 inMemoryStorage 与宿主 workspaceStorage 均接入 block/warn 分级拦截)。
24
+ *(内核 inMemoryStorage 与宿主 JSON 降级实现 WorkspaceStorage 均接入 block/warn 分级拦截)。
24
25
  * 契约:整对象覆盖、无 CAS 乐观锁——单 Agent 设计假设;
25
26
  * 多 Agent 并发写同会话需扩展版本字段/条件更新,内核当前不承诺并发一致性。
26
27
  */
27
28
  upsert(memory: Memory): void;
28
29
  /**
29
30
  * 软删除(移入回收站):写入 deletedAt,不物理移除;对已软删除的记忆为 no-op。
30
- * 召回/搜索/列表/统计自动过滤,可 restore 恢复,回收站保留期满由 purgeExpired 物理清理
31
+ * 召回/搜索/列表/统计自动过滤,可 restore 恢复;回收站保留期归宿主策略,物理清理由宿主入口显式触发(purgeExpired)
31
32
  */
32
33
  delete(id: string): void;
33
34
  /** 恢复软删除记忆(清除 deletedAt);对活跃记忆为 no-op */
@@ -60,9 +61,10 @@ export interface IMemoryStorage {
60
61
  /**
61
62
  * 关键词搜索活跃记忆。宿主实现:Intl.Segmenter 分词 + 停用词过滤,
62
63
  * LIKE 匹配 content/name,按 accessedAt 降序(最近使用优先)返回 top N。
63
- * SQL 后端配合 `escapeLike()` 转义后,必须写成 `LIKE ? ESCAPE '\'`——
64
- * 缺 ESCAPE 子句则转义后的模式匹配不到含 `%`/`_` 的字面值,查询静默返回空。
65
- * InMemoryStorage 用 segmentText() 分词 + includes 匹配(无 SQL 转义语义)
64
+ * SQL 后端须自行转义 LIKE 通配符(`%` → `\%`、`_` → `\_`)后写成
65
+ * `LIKE ? ESCAPE '\'`——缺 ESCAPE 子句则转义后的模式匹配不到含 `%`/`_` 的字面值,
66
+ * 查询静默返回空(内核自带 SQLite 实现即按此规则,见 nodeSqliteStorage)。
67
+ * InMemoryStorage 用分词 + includes 匹配(无 SQL 转义语义)
66
68
  * @param limit - 返回上限(默认 10)
67
69
  */
68
70
  search(query: string, limit?: number): Memory[];
@@ -79,7 +81,7 @@ export interface IMemoryStorage {
79
81
  */
80
82
  touch(id: string, now: string): boolean;
81
83
  /**
82
- * 获取所有 source 标签及活跃记忆数量;替代 stats()/sourceHealth() 的全量遍历,
84
+ * 获取所有 source 标签及活跃记忆数量;供 MemoryInspector.stats() 一次取来源分布,
83
85
  * 宿主用 SQL GROUP BY source,InMemoryStorage 维护增量 source→count 缓存
84
86
  */
85
87
  getAllSources(): Map<string, number>;
@@ -90,4 +92,12 @@ export interface IMemoryStorage {
90
92
  */
91
93
  close?(): void;
92
94
  }
95
+ /**
96
+ * 只读存储视图 —— `IMemoryStorage` 的**读方法子集**(`Pick` 派生,与接口同步、不会漂移)。
97
+ *
98
+ * 用途:只读宿主(如 memora-mcp 的 `readOnlyFileStore`)需要「读记忆」但不该有能力写——把只读保证
99
+ * **由结构表达**(外部拿不到写方法),而不是靠「约定不乱调」。
100
+ * 实现侧(`createNodeSqliteStorage(path, { readOnly: true })`)返回的正是本视图对应的对象。
101
+ */
102
+ export type ReadOnlyMemoryStorage = Pick<IMemoryStorage, 'getById' | 'getBySource' | 'search' | 'count' | 'countBySource' | 'getAllSources' | 'listDeleted' | 'getDeletedById' | 'close'>;
93
103
  //# sourceMappingURL=storageInterface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storageInterface.d.ts","sourceRoot":"","sources":["../../src/memory/storageInterface.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7B;;;OAGG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzB,yCAAyC;IACzC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B,iCAAiC;IACjC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAExB;;;;OAIG;IACH,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAEtC;;;;OAIG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAE1C;;;;;OAKG;IACH,YAAY,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC;IAEnC,qDAAqD;IACrD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAEnC,6BAA6B;IAC7B,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAEtC;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAEhD;;OAEG;IACH,KAAK,IAAI,MAAM,CAAC;IAEhB,6CAA6C;IAC7C,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAEtC;;;;OAIG;IACH,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAExC;;;OAGG;IACH,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErC;;;;OAIG;IACH,KAAK,CAAC,IAAI,IAAI,CAAC;CAChB"}
1
+ {"version":3,"file":"storageInterface.d.ts","sourceRoot":"","sources":["../../src/memory/storageInterface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7B;;;OAGG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzB,yCAAyC;IACzC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B,iCAAiC;IACjC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAExB;;;;OAIG;IACH,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAEtC;;;;OAIG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAE1C;;;;;OAKG;IACH,YAAY,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC;IAEnC,qDAAqD;IACrD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAEnC,6BAA6B;IAC7B,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAEtC;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAEhD;;OAEG;IACH,KAAK,IAAI,MAAM,CAAC;IAEhB,6CAA6C;IAC7C,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAEtC;;;;OAIG;IACH,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAExC;;;OAGG;IACH,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErC;;;;OAIG;IACH,KAAK,CAAC,IAAI,IAAI,CAAC;CAChB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,IAAI,CACtC,cAAc,EACZ,SAAS,GACT,aAAa,GACb,QAAQ,GACR,OAAO,GACP,eAAe,GACf,eAAe,GACf,aAAa,GACb,gBAAgB,GAChB,OAAO,CACV,CAAC"}