@zooique/memora 1.0.1 → 2.0.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 (163) hide show
  1. package/README.md +4 -4
  2. package/dist/agent/agent.d.ts +66 -99
  3. package/dist/agent/agent.d.ts.map +1 -1
  4. package/dist/agent/agent.js +263 -208
  5. package/dist/agent/agent.js.map +1 -1
  6. package/dist/agent/assembler.d.ts +3 -3
  7. package/dist/agent/assembler.d.ts.map +1 -1
  8. package/dist/agent/assembler.js +10 -9
  9. package/dist/agent/assembler.js.map +1 -1
  10. package/dist/agent/builtinToolHandlers.d.ts +1 -1
  11. package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
  12. package/dist/agent/builtinToolHandlers.js +5 -4
  13. package/dist/agent/builtinToolHandlers.js.map +1 -1
  14. package/dist/agent/loop.d.ts +79 -1
  15. package/dist/agent/loop.d.ts.map +1 -1
  16. package/dist/agent/loop.js +315 -189
  17. package/dist/agent/loop.js.map +1 -1
  18. package/dist/agent/managers/chatLockManager.d.ts +116 -0
  19. package/dist/agent/managers/chatLockManager.d.ts.map +1 -0
  20. package/dist/agent/managers/chatLockManager.js +191 -0
  21. package/dist/agent/managers/chatLockManager.js.map +1 -0
  22. package/dist/agent/managers/insightExtractor.d.ts +31 -3
  23. package/dist/agent/managers/insightExtractor.d.ts.map +1 -1
  24. package/dist/agent/managers/insightExtractor.js +122 -51
  25. package/dist/agent/managers/insightExtractor.js.map +1 -1
  26. package/dist/agent/managers/memoryAdvisor.d.ts +102 -2
  27. package/dist/agent/managers/memoryAdvisor.d.ts.map +1 -1
  28. package/dist/agent/managers/memoryAdvisor.js +262 -4
  29. package/dist/agent/managers/memoryAdvisor.js.map +1 -1
  30. package/dist/agent/managers/memoryDecayScheduler.d.ts +85 -0
  31. package/dist/agent/managers/memoryDecayScheduler.d.ts.map +1 -1
  32. package/dist/agent/managers/memoryDecayScheduler.js +215 -0
  33. package/dist/agent/managers/memoryDecayScheduler.js.map +1 -1
  34. package/dist/agent/managers/memoryInspector.d.ts +222 -14
  35. package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
  36. package/dist/agent/managers/memoryInspector.js +436 -10
  37. package/dist/agent/managers/memoryInspector.js.map +1 -1
  38. package/dist/agent/managers/relationBuilder.d.ts +4 -4
  39. package/dist/agent/managers/relationBuilder.d.ts.map +1 -1
  40. package/dist/agent/managers/relationBuilder.js +3 -2
  41. package/dist/agent/managers/relationBuilder.js.map +1 -1
  42. package/dist/agent/managers/sessionArchiver.d.ts +6 -0
  43. package/dist/agent/managers/sessionArchiver.d.ts.map +1 -1
  44. package/dist/agent/managers/sessionArchiver.js +68 -8
  45. package/dist/agent/managers/sessionArchiver.js.map +1 -1
  46. package/dist/agent/managers/sessionManager.d.ts.map +1 -1
  47. package/dist/agent/managers/sessionManager.js +9 -17
  48. package/dist/agent/managers/sessionManager.js.map +1 -1
  49. package/dist/agent/managers/textPolishManager.d.ts +62 -0
  50. package/dist/agent/managers/textPolishManager.d.ts.map +1 -0
  51. package/dist/agent/managers/textPolishManager.js +99 -0
  52. package/dist/agent/managers/textPolishManager.js.map +1 -0
  53. package/dist/agent/personaMatcher.d.ts +29 -0
  54. package/dist/agent/personaMatcher.d.ts.map +1 -0
  55. package/dist/agent/personaMatcher.js +60 -0
  56. package/dist/agent/personaMatcher.js.map +1 -0
  57. package/dist/agent/toolExecutor.d.ts +2 -2
  58. package/dist/agent/toolExecutor.d.ts.map +1 -1
  59. package/dist/agent/toolExecutor.js +2 -1
  60. package/dist/agent/toolExecutor.js.map +1 -1
  61. package/dist/agent/tracer.d.ts +31 -0
  62. package/dist/agent/tracer.d.ts.map +1 -1
  63. package/dist/agent/tracer.js +31 -0
  64. package/dist/agent/tracer.js.map +1 -1
  65. package/dist/agent/types.d.ts +124 -0
  66. package/dist/agent/types.d.ts.map +1 -1
  67. package/dist/agent/types.js +38 -0
  68. package/dist/agent/types.js.map +1 -1
  69. package/dist/config/loader.d.ts +4 -4
  70. package/dist/config/loader.js +23 -1
  71. package/dist/config/loader.js.map +1 -1
  72. package/dist/eval/evalRunner.d.ts +94 -0
  73. package/dist/eval/evalRunner.d.ts.map +1 -0
  74. package/dist/eval/evalRunner.js +141 -0
  75. package/dist/eval/evalRunner.js.map +1 -0
  76. package/dist/eval/evalTypes.d.ts +21 -0
  77. package/dist/eval/evalTypes.d.ts.map +1 -1
  78. package/dist/eval/evalTypes.js +15 -0
  79. package/dist/eval/evalTypes.js.map +1 -1
  80. package/dist/eval/scenarios.d.ts +33 -0
  81. package/dist/eval/scenarios.d.ts.map +1 -0
  82. package/dist/eval/scenarios.js +109 -0
  83. package/dist/eval/scenarios.js.map +1 -0
  84. package/dist/index.d.ts +41 -7
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +36 -5
  87. package/dist/index.js.map +1 -1
  88. package/dist/llm/abortSignal.d.ts +27 -0
  89. package/dist/llm/abortSignal.d.ts.map +1 -0
  90. package/dist/llm/abortSignal.js +44 -0
  91. package/dist/llm/abortSignal.js.map +1 -0
  92. package/dist/llm/embedding.d.ts +1 -12
  93. package/dist/llm/embedding.d.ts.map +1 -1
  94. package/dist/llm/embedding.js +5 -17
  95. package/dist/llm/embedding.js.map +1 -1
  96. package/dist/llm/openaiCompatible.d.ts.map +1 -1
  97. package/dist/llm/openaiCompatible.js +15 -25
  98. package/dist/llm/openaiCompatible.js.map +1 -1
  99. package/dist/memory/inMemoryStorage.d.ts.map +1 -1
  100. package/dist/memory/inMemoryStorage.js +7 -6
  101. package/dist/memory/inMemoryStorage.js.map +1 -1
  102. package/dist/memory/lockManager.d.ts.map +1 -1
  103. package/dist/memory/lockManager.js +4 -12
  104. package/dist/memory/lockManager.js.map +1 -1
  105. package/dist/memory/projectManager.d.ts +6 -6
  106. package/dist/memory/projectManager.d.ts.map +1 -1
  107. package/dist/memory/projectManager.js +12 -12
  108. package/dist/memory/projectManager.js.map +1 -1
  109. package/dist/memory/projectRegistry.d.ts.map +1 -1
  110. package/dist/memory/projectRegistry.js +4 -12
  111. package/dist/memory/projectRegistry.js.map +1 -1
  112. package/dist/memory/recall.js +2 -2
  113. package/dist/memory/recall.js.map +1 -1
  114. package/dist/memory/sourceValidation.d.ts +6 -0
  115. package/dist/memory/sourceValidation.d.ts.map +1 -1
  116. package/dist/memory/sourceValidation.js +3 -1
  117. package/dist/memory/sourceValidation.js.map +1 -1
  118. package/dist/memory/vectorStore.d.ts +16 -2
  119. package/dist/memory/vectorStore.d.ts.map +1 -1
  120. package/dist/memory/vectorStore.js.map +1 -1
  121. package/dist/persona/personaManager.d.ts +30 -4
  122. package/dist/persona/personaManager.d.ts.map +1 -1
  123. package/dist/persona/personaManager.js +47 -14
  124. package/dist/persona/personaManager.js.map +1 -1
  125. package/dist/skill/skillManager.d.ts.map +1 -1
  126. package/dist/skill/skillManager.js +2 -1
  127. package/dist/skill/skillManager.js.map +1 -1
  128. package/dist/utils/array.d.ts +24 -0
  129. package/dist/utils/array.d.ts.map +1 -0
  130. package/dist/utils/array.js +24 -0
  131. package/dist/utils/array.js.map +1 -0
  132. package/dist/utils/errors.d.ts +10 -8
  133. package/dist/utils/errors.d.ts.map +1 -1
  134. package/dist/utils/errors.js +12 -9
  135. package/dist/utils/errors.js.map +1 -1
  136. package/dist/utils/eventEmitter.d.ts +7 -0
  137. package/dist/utils/eventEmitter.d.ts.map +1 -1
  138. package/dist/utils/eventEmitter.js.map +1 -1
  139. package/dist/utils/objects.d.ts +17 -0
  140. package/dist/utils/objects.d.ts.map +1 -0
  141. package/dist/utils/objects.js +19 -0
  142. package/dist/utils/objects.js.map +1 -0
  143. package/dist/utils/segmenter.d.ts +11 -0
  144. package/dist/utils/segmenter.d.ts.map +1 -1
  145. package/dist/utils/segmenter.js +13 -0
  146. package/dist/utils/segmenter.js.map +1 -1
  147. package/dist/utils/strings.d.ts +22 -1
  148. package/dist/utils/strings.d.ts.map +1 -1
  149. package/dist/utils/strings.js +29 -1
  150. package/dist/utils/strings.js.map +1 -1
  151. package/dist/utils/time.d.ts +18 -3
  152. package/dist/utils/time.d.ts.map +1 -1
  153. package/dist/utils/time.js +24 -8
  154. package/dist/utils/time.js.map +1 -1
  155. package/dist/utils/toError.d.ts +8 -4
  156. package/dist/utils/toError.d.ts.map +1 -1
  157. package/dist/utils/toError.js +25 -5
  158. package/dist/utils/toError.js.map +1 -1
  159. package/package.json +11 -1
  160. package/dist/agent/managers/memoryMutator.d.ts +0 -92
  161. package/dist/agent/managers/memoryMutator.d.ts.map +0 -1
  162. package/dist/agent/managers/memoryMutator.js +0 -94
  163. package/dist/agent/managers/memoryMutator.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,KAAK,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AAEpF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa;IACxB,qBAAqB;;IAErB,+BAA+B;;IAE/B,iBAAiB;;IAEjB,iCAAiC;;IAEjC;;;;;;OAMG;;IAEH,mBAAmB;;IAEnB,+BAA+B;;IAE/B,yBAAyB;;IAEzB,qBAAqB;;IAErB,iBAAiB;;CAET,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAapF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAEtE;AAGD,UAAU,oBAAoB;IAC5B,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW;IACX,QAAQ,EAAE,aAAa,CAAC;IACxB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,qBAAqB;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,oCAAoC;IACpC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;gBAEtB,IAAI,EAAE,oBAAoB;IAWtC;;OAEG;IACH,MAAM,IAAI,MAAM;CAYjB;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,CAAC,EAAE,KAAK,GACZ,WAAW,CAEb;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,CAAC,EAAE,KAAK,GACZ,WAAW,CAEb;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,CAAC,EAAE,KAAK,GACZ,WAAW,CAEb;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,CAAC,EAAE,KAAK,EACb,SAAS,CAAC,EAAE,kBAAkB,GAC7B,WAAW,CAEb;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,CAAC,EAAE,KAAK,GACZ,WAAW,CAEb"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,KAAK,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AAEpF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa;IACxB,qBAAqB;;IAErB,+BAA+B;;IAE/B,iBAAiB;;IAEjB,iCAAiC;;IAEjC,mBAAmB;;IAEnB,+BAA+B;;IAE/B,yBAAyB;;IAEzB,qBAAqB;;IAErB,iBAAiB;;CAET,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAYpF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAEtE;AAGD,UAAU,oBAAoB;IAC5B,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW;IACX,QAAQ,EAAE,aAAa,CAAC;IACxB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,qBAAqB;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,oCAAoC;IACpC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;gBAEtB,IAAI,EAAE,oBAAoB;IAWtC;;OAEG;IACH,MAAM,IAAI,MAAM;CAYjB;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,CAAC,EAAE,KAAK,GACZ,WAAW,CAEb;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAMzD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,CAAC,EAAE,KAAK,GACZ,WAAW,CAEb;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,CAAC,EAAE,KAAK,GACZ,WAAW,CAEb;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,CAAC,EAAE,KAAK,EACb,SAAS,CAAC,EAAE,kBAAkB,GAC7B,WAAW,CAEb;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,CAAC,EAAE,KAAK,GACZ,WAAW,CAEb"}
@@ -34,14 +34,6 @@ export const ToolErrorCode = {
34
34
  PERMISSION_DENIED: 'PERMISSION_DENIED',
35
35
  /** 工具参数错误(可重试 — LLM 可以修正参数格式) */
36
36
  ARGUMENT_ERROR: 'ARGUMENT_ERROR',
37
- /**
38
- * 工具执行超时(可重试)
39
- *
40
- * 预留错误码,当前无业务代码抛出。
41
- * 待 toolExecutor 实现工具执行超时机制后启用(如 Promise.race + AbortSignal)。
42
- * 保留在 RETRYABLE_ERROR_CODES 中以维持公共 API 契约稳定。
43
- */
44
- TOOL_TIMEOUT: 'TOOL_TIMEOUT',
45
37
  /** 用户拒绝写入(不可重试) */
46
38
  WRITE_REJECTED: 'WRITE_REJECTED',
47
39
  /** 目录不存在(可重试 — LLM 可能用错了路径) */
@@ -59,7 +51,6 @@ export const ToolErrorCode = {
59
51
  const RETRYABLE_ERROR_CODES = new Set([
60
52
  ToolErrorCode.FILE_NOT_FOUND,
61
53
  ToolErrorCode.ARGUMENT_ERROR,
62
- ToolErrorCode.TOOL_TIMEOUT,
63
54
  ToolErrorCode.DIR_NOT_FOUND,
64
55
  ToolErrorCode.CUSTOM_TOOL_FAILED,
65
56
  ]);
@@ -107,6 +98,18 @@ export class MemoraError extends Error {
107
98
  export function configError(title, detail, suggestions, cause) {
108
99
  return new MemoraError({ title, detail, suggestions, category: 'config', cause });
109
100
  }
101
+ /**
102
+ * 工厂:对话繁忙错误
103
+ *
104
+ * 用于 chat() 进行中时拒绝其他需要独占 Agent 的操作(切换项目/Provider/会话/重载配置等)。
105
+ * 12 处调用点统一使用此工厂,消除 `configError('对话繁忙', ...)` 的重复模板(ADR-017 枝叶层 2 次提取)。
106
+ *
107
+ * @param action 被拒绝的操作描述(如"切换项目"),拼接到"请等待其结束后再"之后
108
+ * @returns MemoraError(config 类别)
109
+ */
110
+ export function chatBusyError(action) {
111
+ return configError('对话繁忙', `上一轮对话尚未完成,请等待其结束后再${action}`, ['等待上一轮 chat() 的 AsyncGenerator 耗尽(收到 done 事件)']);
112
+ }
110
113
  /**
111
114
  * 工厂:网络错误
112
115
  */
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
@@ -49,6 +49,13 @@ export interface AgentEventMap {
49
49
  skill: string;
50
50
  score: number;
51
51
  };
52
+ /** 归档操作失败(fire-and-forget catch 分支发射,宿主可通知用户) */
53
+ archiveFailed: {
54
+ /** 失败阶段:profile(用户画像)/ insight(洞察提取) */
55
+ stage: 'profile' | 'insight';
56
+ /** 失败原因摘要(error.message,截断 200 字符避免 payload 过大) */
57
+ message: string;
58
+ };
52
59
  }
53
60
  /** 事件名联合类型 */
54
61
  export type AgentEventName = keyof AgentEventMap;
@@ -1 +1 @@
1
- {"version":3,"file":"eventEmitter.d.ts","sourceRoot":"","sources":["../../src/utils/eventEmitter.ts"],"names":[],"mappings":"AAaA,gCAAgC;AAChC,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,WAAW,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,uBAAuB;IACvB,eAAe,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,aAAa;IACb,cAAc,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,kCAAkC;IAClC,cAAc,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,YAAY;IACZ,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,YAAY;IACZ,gBAAgB,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,4CAA4C;IAC5C,gBAAgB,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IACvG,+BAA+B;IAC/B,eAAe,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1E,+BAA+B;IAC/B,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAChD;AAED,cAAc;AACd,MAAM,MAAM,cAAc,GAAG,MAAM,aAAa,CAAC;AAEjD,cAAc;AACd,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAEtD;;;;;GAKG;AACH,qBAAa,iBAAiB,CAAC,QAAQ,SAAS,MAAM;IACpD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoD;IAE9E;;;;OAIG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,QAAQ,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAS5F;;;;OAIG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,QAAQ,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAI7F;;;;OAIG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,QAAQ,GAAG,MAAM,EACpC,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,GACpC,IAAI;IAQP;;;;OAIG;IACH,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,MAAM,QAAQ,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI;IAYvF;;OAEG;IACH,SAAS,CAAC,kBAAkB,IAAI,IAAI;CAGrC"}
1
+ {"version":3,"file":"eventEmitter.d.ts","sourceRoot":"","sources":["../../src/utils/eventEmitter.ts"],"names":[],"mappings":"AAaA,gCAAgC;AAChC,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,WAAW,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,uBAAuB;IACvB,eAAe,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,aAAa;IACb,cAAc,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,kCAAkC;IAClC,cAAc,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,YAAY;IACZ,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,YAAY;IACZ,gBAAgB,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,4CAA4C;IAC5C,gBAAgB,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IACvG,+BAA+B;IAC/B,eAAe,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1E,+BAA+B;IAC/B,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,iDAAiD;IACjD,aAAa,EAAE;QACb,wCAAwC;QACxC,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC;QAC7B,mDAAmD;QACnD,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,cAAc;AACd,MAAM,MAAM,cAAc,GAAG,MAAM,aAAa,CAAC;AAEjD,cAAc;AACd,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAEtD;;;;;GAKG;AACH,qBAAa,iBAAiB,CAAC,QAAQ,SAAS,MAAM;IACpD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoD;IAE9E;;;;OAIG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,QAAQ,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAS5F;;;;OAIG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,QAAQ,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAI7F;;;;OAIG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,QAAQ,GAAG,MAAM,EACpC,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,GACpC,IAAI;IAQP;;;;OAIG;IACH,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,MAAM,QAAQ,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI;IAYvF;;OAEG;IACH,SAAS,CAAC,kBAAkB,IAAI,IAAI;CAGrC"}
@@ -1 +1 @@
1
- {"version":3,"file":"eventEmitter.js","sourceRoot":"","sources":["../../src/utils/eventEmitter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AA8B7C;;;;;GAKG;AACH,MAAM,OAAO,iBAAiB;IACX,SAAS,GAAG,IAAI,GAAG,EAAyC,CAAC;IAE9E;;;;OAIG;IACH,EAAE,CAAoC,KAAQ,EAAE,OAAqC;QACnF,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,OAAmC,CAAC,CAAC;IAC/C,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAoC,KAAQ,EAAE,OAAqC;QACpF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,OAAmC,CAAC,CAAC;IACzE,CAAC;IAED;;;;OAIG;IACH,IAAI,CACF,KAAQ,EACR,OAAqC;QAErC,MAAM,OAAO,GAAG,CAAC,CAAC,IAAiB,EAAE,EAAE;YACrC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAuC,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAiC,CAAC;QACnC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACO,IAAI,CAAoC,KAAQ,EAAE,OAAoB;QAC9E,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QACnC,KAAK,MAAM,OAAO,IAAI,GAAG,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,OAAO,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACO,kBAAkB;QAC1B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACF"}
1
+ {"version":3,"file":"eventEmitter.js","sourceRoot":"","sources":["../../src/utils/eventEmitter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAqC7C;;;;;GAKG;AACH,MAAM,OAAO,iBAAiB;IACX,SAAS,GAAG,IAAI,GAAG,EAAyC,CAAC;IAE9E;;;;OAIG;IACH,EAAE,CAAoC,KAAQ,EAAE,OAAqC;QACnF,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,OAAmC,CAAC,CAAC;IAC/C,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAoC,KAAQ,EAAE,OAAqC;QACpF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,OAAmC,CAAC,CAAC;IACzE,CAAC;IAED;;;;OAIG;IACH,IAAI,CACF,KAAQ,EACR,OAAqC;QAErC,MAAM,OAAO,GAAG,CAAC,CAAC,IAAiB,EAAE,EAAE;YACrC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAuC,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAiC,CAAC;QACnC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACO,IAAI,CAAoC,KAAQ,EAAE,OAAoB;QAC9E,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QACnC,KAAK,MAAM,OAAO,IAAI,GAAG,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,OAAO,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACO,kBAAkB;QAC1B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * 对象类型守卫工具函数
3
+ *
4
+ * 从 lockManager / projectRegistry / spriteConfig 提取的公共对象类型校验函数,
5
+ * 消除跨模块重复的类型守卫代码(ADR-017 枝叶层 2 次提取原则)。
6
+ */
7
+ /**
8
+ * 判断值是否为普通对象(非 null、非数组)
9
+ *
10
+ * 用于校验 JSON.parse 的结果,避免对非对象类型执行展开或属性访问。
11
+ * 三处原私有实现完全一致(lockManager / projectRegistry / spriteConfig)。
12
+ *
13
+ * @param value 待校验的值
14
+ * @returns true 表示是普通对象(类型收窄为 Record<string, unknown>)
15
+ */
16
+ export declare function isPlainObject(value: unknown): value is Record<string, unknown>;
17
+ //# sourceMappingURL=objects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../../src/utils/objects.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE9E"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * 对象类型守卫工具函数
3
+ *
4
+ * 从 lockManager / projectRegistry / spriteConfig 提取的公共对象类型校验函数,
5
+ * 消除跨模块重复的类型守卫代码(ADR-017 枝叶层 2 次提取原则)。
6
+ */
7
+ /**
8
+ * 判断值是否为普通对象(非 null、非数组)
9
+ *
10
+ * 用于校验 JSON.parse 的结果,避免对非对象类型执行展开或属性访问。
11
+ * 三处原私有实现完全一致(lockManager / projectRegistry / spriteConfig)。
12
+ *
13
+ * @param value 待校验的值
14
+ * @returns true 表示是普通对象(类型收窄为 Record<string, unknown>)
15
+ */
16
+ export function isPlainObject(value) {
17
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
18
+ }
19
+ //# sourceMappingURL=objects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objects.js","sourceRoot":"","sources":["../../src/utils/objects.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
@@ -15,6 +15,17 @@ export declare function scoreByKeywords(userInput: string, keywordList: string[]
15
15
  * @returns 分词数组(去标点、去空白、保留中英文 + 数字)
16
16
  */
17
17
  export declare function segmentText(text: string): string[];
18
+ /**
19
+ * 分词后小写化(文本预处理快捷方法)
20
+ *
21
+ * 组合 segmentText + toLowerCase,消除 6 处散落的 `.map((t) => t.toLowerCase())` 模式
22
+ * (ADR-017 枝叶层 2 次提取原则)。
23
+ * 用于关键词匹配/召回场景的文本预处理(大小写不敏感匹配)。
24
+ *
25
+ * @param text 原文
26
+ * @returns 分词后的小写 token 数组
27
+ */
28
+ export declare function segmentLower(text: string): string[];
18
29
  /**
19
30
  * 中文停用词集合
20
31
  * 用于关键词提取时过滤无意义词汇(从 memory/types.ts 迁入,
@@ -1 +1 @@
1
- {"version":3,"file":"segmenter.d.ts","sourceRoot":"","sources":["../../src/utils/segmenter.ts"],"names":[],"mappings":"AAyCA;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAehF;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAclD;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,aAOpB,CAAC"}
1
+ {"version":3,"file":"segmenter.d.ts","sourceRoot":"","sources":["../../src/utils/segmenter.ts"],"names":[],"mappings":"AAyCA;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAehF;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAclD;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEnD;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,aAOpB,CAAC"}
@@ -82,6 +82,19 @@ export function segmentText(text) {
82
82
  }
83
83
  return tokens;
84
84
  }
85
+ /**
86
+ * 分词后小写化(文本预处理快捷方法)
87
+ *
88
+ * 组合 segmentText + toLowerCase,消除 6 处散落的 `.map((t) => t.toLowerCase())` 模式
89
+ * (ADR-017 枝叶层 2 次提取原则)。
90
+ * 用于关键词匹配/召回场景的文本预处理(大小写不敏感匹配)。
91
+ *
92
+ * @param text 原文
93
+ * @returns 分词后的小写 token 数组
94
+ */
95
+ export function segmentLower(text) {
96
+ return segmentText(text).map((t) => t.toLowerCase());
97
+ }
85
98
  /**
86
99
  * 中文停用词集合
87
100
  * 用于关键词提取时过滤无意义词汇(从 memory/types.ts 迁入,
@@ -1 +1 @@
1
- {"version":3,"file":"segmenter.js","sourceRoot":"","sources":["../../src/utils/segmenter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"segmenter.js","sourceRoot":"","sources":["../../src/utils/segmenter.ts"],"names":[],"mappings":"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"}
@@ -8,11 +8,32 @@
8
8
  *
9
9
  * 规则:
10
10
  * - 冒号和空白替换为连字符
11
- * - 只保留字母、数字、中文、连字符、下划线
11
+ * - 只保留字母、数字、中文、连字符、下划号
12
12
  * - 截断到 MAX_SLUG_LENGTH 字符
13
13
  *
14
14
  * @param value 输入字符串
15
15
  * @returns slug 格式的字符串
16
16
  */
17
17
  export declare function slugify(value: string): string;
18
+ /**
19
+ * 截断文本到指定长度,超长时追加后缀(省略号)
20
+ *
21
+ * 统一内核中 15 处散落的 `slice + suffix` 模式(ADR-017 枝叶层 2 次提取)。
22
+ *
23
+ * 与 sprite 的 `shared/truncate.ts` 独立(ADR-002 内核零依赖约束,kernel/sprite 各自维护)。
24
+ *
25
+ * 后缀约定:
26
+ * - 默认 '…'(Unicode U+2026,1 字符):UI 预览场景,简洁
27
+ * - '…[截断]':LLM prompt 场景,明确告知模型"此处被截断,非原文结束"
28
+ * - 调用方可通过 suffix 参数自定义
29
+ *
30
+ * ellipsis 统一:将散落的 '...'(ASCII 3 字符)统一为 '…'(Unicode 1 字符),
31
+ * 与 sprite truncate.ts 保持一致。
32
+ *
33
+ * @param text 原始文本
34
+ * @param maxLen 最大保留长度(后缀不计入;截断后总长度 = maxLen + suffix.length)
35
+ * @param suffix 超长时追加的后缀,默认 '…'
36
+ * @returns 截断后的文本(含后缀),或原文本(未超长时原样返回)
37
+ */
38
+ export declare function truncate(text: string, maxLen: number, suffix?: string): string;
18
39
  //# sourceMappingURL=strings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../../src/utils/strings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAO7C"}
1
+ {"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../../src/utils/strings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAO7C;AAID;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAY,GAAG,MAAM,CAKnF"}
@@ -10,7 +10,7 @@ const MAX_SLUG_LENGTH = 40;
10
10
  *
11
11
  * 规则:
12
12
  * - 冒号和空白替换为连字符
13
- * - 只保留字母、数字、中文、连字符、下划线
13
+ * - 只保留字母、数字、中文、连字符、下划号
14
14
  * - 截断到 MAX_SLUG_LENGTH 字符
15
15
  *
16
16
  * @param value 输入字符串
@@ -24,4 +24,32 @@ export function slugify(value) {
24
24
  .replace(/^-|-$/g, '')
25
25
  .slice(0, MAX_SLUG_LENGTH);
26
26
  }
27
+ // ─── 文本截断 ─────────────────────────────────────────
28
+ /**
29
+ * 截断文本到指定长度,超长时追加后缀(省略号)
30
+ *
31
+ * 统一内核中 15 处散落的 `slice + suffix` 模式(ADR-017 枝叶层 2 次提取)。
32
+ *
33
+ * 与 sprite 的 `shared/truncate.ts` 独立(ADR-002 内核零依赖约束,kernel/sprite 各自维护)。
34
+ *
35
+ * 后缀约定:
36
+ * - 默认 '…'(Unicode U+2026,1 字符):UI 预览场景,简洁
37
+ * - '…[截断]':LLM prompt 场景,明确告知模型"此处被截断,非原文结束"
38
+ * - 调用方可通过 suffix 参数自定义
39
+ *
40
+ * ellipsis 统一:将散落的 '...'(ASCII 3 字符)统一为 '…'(Unicode 1 字符),
41
+ * 与 sprite truncate.ts 保持一致。
42
+ *
43
+ * @param text 原始文本
44
+ * @param maxLen 最大保留长度(后缀不计入;截断后总长度 = maxLen + suffix.length)
45
+ * @param suffix 超长时追加的后缀,默认 '…'
46
+ * @returns 截断后的文本(含后缀),或原文本(未超长时原样返回)
47
+ */
48
+ export function truncate(text, maxLen, suffix = '…') {
49
+ // 未超长直接返回原文本(含 text.length === maxLen 的边界情况)
50
+ if (text.length <= maxLen)
51
+ return text;
52
+ // 超长时截断到 maxLen 并追加后缀
53
+ return text.slice(0, maxLen) + suffix;
54
+ }
27
55
  //# sourceMappingURL=strings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"strings.js","sourceRoot":"","sources":["../../src/utils/strings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gBAAgB;AAChB,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B;;;;;;;;;;GAUG;AACH,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,KAAK;SACT,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,+BAA+B,EAAE,EAAE,CAAC;SAC5C,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"strings.js","sourceRoot":"","sources":["../../src/utils/strings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gBAAgB;AAChB,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B;;;;;;;;;;GAUG;AACH,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,KAAK;SACT,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,+BAA+B,EAAE,EAAE,CAAC;SAC5C,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;AAC/B,CAAC;AAED,qDAAqD;AAErD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,MAAc,EAAE,SAAiB,GAAG;IACzE,6CAA6C;IAC7C,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,IAAI,CAAC;IACvC,sBAAsB;IACtB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC;AACxC,CAAC"}
@@ -3,6 +3,9 @@
3
3
  *
4
4
  * 从 messageHistory.ts 提取的公共时间格式化函数,
5
5
  * 消除跨模块 `new Date().toISOString()` 内联重复。
6
+ *
7
+ * API 对齐:formatDateKey(date) 与精灵 shared/dateUtils.ts 语义一致,
8
+ * 用于格式化任意 Date 为 YYYY-MM-DD(本地时区)。
6
9
  */
7
10
  /**
8
11
  * 获取当前时间的 ISO 8601 时间戳
@@ -10,12 +13,24 @@
10
13
  * @returns 如 "2026-06-21T12:34:56.789Z"
11
14
  */
12
15
  export declare function nowIso(): string;
16
+ /**
17
+ * 格式化 Date 为 YYYY-MM-DD 日期键(本地时区)
18
+ *
19
+ * 使用 getFullYear/getMonth/getDate(本地时区),替代 toISOString().slice(0,10)(UTC)。
20
+ * 修复场景:Asia/Shanghai 凌晨 00:00-08:00 期间 UTC 仍是前一天,导致按日期分组的
21
+ * 计数(chatTurns / dailyMessageCount)写入错误的日期 key。
22
+ *
23
+ * 与精灵 shared/dateUtils.ts:formatDateKey 行为完全对齐。
24
+ *
25
+ * @param date Date 对象
26
+ * @returns YYYY-MM-DD 字符串(本地日期)
27
+ */
28
+ export declare function formatDateKey(date: Date): string;
13
29
  /**
14
30
  * 获取当前日期字符串(YYYY-MM-DD,本地时区)
15
31
  *
16
- * 使用本地时区日期,避免 UTC 偏移导致跨天错位
17
- * (如 Asia/Shanghai 00:00-08:00 期间 UTC 仍是前一天,
18
- * 会话文件会写入"昨天"导致跨天 reset 与 UI 错乱)
32
+ * 委托 formatDateKey(new Date()),避免逻辑重复。
33
+ * 保留无参形态是因为多数调用点只关心"今天",无需先构造 new Date()。
19
34
  *
20
35
  * @returns 如 "2026-06-21"
21
36
  */
@@ -1 +1 @@
1
- {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,wBAAgB,MAAM,IAAI,MAAM,CAE/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAMlC"}
1
+ {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;GAIG;AACH,wBAAgB,MAAM,IAAI,MAAM,CAE/B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAKhD;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC"}
@@ -3,6 +3,9 @@
3
3
  *
4
4
  * 从 messageHistory.ts 提取的公共时间格式化函数,
5
5
  * 消除跨模块 `new Date().toISOString()` 内联重复。
6
+ *
7
+ * API 对齐:formatDateKey(date) 与精灵 shared/dateUtils.ts 语义一致,
8
+ * 用于格式化任意 Date 为 YYYY-MM-DD(本地时区)。
6
9
  */
7
10
  /**
8
11
  * 获取当前时间的 ISO 8601 时间戳
@@ -12,20 +15,33 @@
12
15
  export function nowIso() {
13
16
  return new Date().toISOString();
14
17
  }
18
+ /**
19
+ * 格式化 Date 为 YYYY-MM-DD 日期键(本地时区)
20
+ *
21
+ * 使用 getFullYear/getMonth/getDate(本地时区),替代 toISOString().slice(0,10)(UTC)。
22
+ * 修复场景:Asia/Shanghai 凌晨 00:00-08:00 期间 UTC 仍是前一天,导致按日期分组的
23
+ * 计数(chatTurns / dailyMessageCount)写入错误的日期 key。
24
+ *
25
+ * 与精灵 shared/dateUtils.ts:formatDateKey 行为完全对齐。
26
+ *
27
+ * @param date Date 对象
28
+ * @returns YYYY-MM-DD 字符串(本地日期)
29
+ */
30
+ export function formatDateKey(date) {
31
+ const y = date.getFullYear();
32
+ const m = String(date.getMonth() + 1).padStart(2, '0');
33
+ const d = String(date.getDate()).padStart(2, '0');
34
+ return `${y}-${m}-${d}`;
35
+ }
15
36
  /**
16
37
  * 获取当前日期字符串(YYYY-MM-DD,本地时区)
17
38
  *
18
- * 使用本地时区日期,避免 UTC 偏移导致跨天错位
19
- * (如 Asia/Shanghai 00:00-08:00 期间 UTC 仍是前一天,
20
- * 会话文件会写入"昨天"导致跨天 reset 与 UI 错乱)
39
+ * 委托 formatDateKey(new Date()),避免逻辑重复。
40
+ * 保留无参形态是因为多数调用点只关心"今天",无需先构造 new Date()。
21
41
  *
22
42
  * @returns 如 "2026-06-21"
23
43
  */
24
44
  export function todayDate() {
25
- const now = new Date();
26
- const year = now.getFullYear();
27
- const month = String(now.getMonth() + 1).padStart(2, '0');
28
- const day = String(now.getDate()).padStart(2, '0');
29
- return `${year}-${month}-${day}`;
45
+ return formatDateKey(new Date());
30
46
  }
31
47
  //# sourceMappingURL=time.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,UAAU,MAAM;IACpB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS;IACvB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnD,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;GAIG;AACH,MAAM,UAAU,MAAM;IACpB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,IAAU;IACtC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AACnC,CAAC"}
@@ -4,10 +4,14 @@
4
4
  * 将 catch 块中的 unknown 值安全转换为 Error 对象。
5
5
  * 从 errors.ts 中提取,确保浏览器端可直接 import 而不引入 logging(pino)依赖。
6
6
  *
7
- * 转换规则:
8
- * - Error 实例:原样返回
9
- * - 对象且含 message 属性:包装为 Error
10
- * - 其他:调用 String() 转为 message
7
+ * 转换规则(5 分支,与精灵 shared/toError.ts 行为对齐):
8
+ * 1. Error 实例:原样返回
9
+ * 2. 字符串:包装为 Error
10
+ * 3. 含 message 属性的对象:提取 message 包装为 Error
11
+ * 4. 普通对象(无 message):JSON 序列化(try-catch 防循环引用)
12
+ * 5. 其他类型(number/boolean/symbol/null/undefined):String() 转换
13
+ *
14
+ * null/undefined 返回 '未知错误',比 'null'/'undefined' 更友好。
11
15
  */
12
16
  export declare function toError(err: unknown): Error;
13
17
  //# sourceMappingURL=toError.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"toError.d.ts","sourceRoot":"","sources":["../../src/utils/toError.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAU3C"}
1
+ {"version":3,"file":"toError.d.ts","sourceRoot":"","sources":["../../src/utils/toError.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAwB3C"}
@@ -4,19 +4,39 @@
4
4
  * 将 catch 块中的 unknown 值安全转换为 Error 对象。
5
5
  * 从 errors.ts 中提取,确保浏览器端可直接 import 而不引入 logging(pino)依赖。
6
6
  *
7
- * 转换规则:
8
- * - Error 实例:原样返回
9
- * - 对象且含 message 属性:包装为 Error
10
- * - 其他:调用 String() 转为 message
7
+ * 转换规则(5 分支,与精灵 shared/toError.ts 行为对齐):
8
+ * 1. Error 实例:原样返回
9
+ * 2. 字符串:包装为 Error
10
+ * 3. 含 message 属性的对象:提取 message 包装为 Error
11
+ * 4. 普通对象(无 message):JSON 序列化(try-catch 防循环引用)
12
+ * 5. 其他类型(number/boolean/symbol/null/undefined):String() 转换
13
+ *
14
+ * null/undefined 返回 '未知错误',比 'null'/'undefined' 更友好。
11
15
  */
12
16
  export function toError(err) {
17
+ // 1. Error 实例直接返回(最常见路径)
13
18
  if (err instanceof Error)
14
19
  return err;
20
+ // 2. 字符串包装为 Error
21
+ if (typeof err === 'string')
22
+ return new Error(err);
23
+ // 3. 含 message 属性的对象(如 IPC 序列化错误)提取 message
15
24
  if (typeof err === 'object' &&
16
25
  err !== null &&
17
26
  typeof err.message === 'string') {
18
27
  return new Error(err.message);
19
28
  }
20
- return new Error(String(err));
29
+ // 4. 普通对象(无 message 属性):JSON 序列化保留调试信息,try-catch 防止循环引用抛错
30
+ if (typeof err === 'object' && err !== null) {
31
+ try {
32
+ return new Error(JSON.stringify(err));
33
+ }
34
+ catch {
35
+ // 循环引用等无法序列化的情况,降级到 String()
36
+ return new Error(String(err));
37
+ }
38
+ }
39
+ // 5. 基础类型(number/boolean/symbol/null/undefined)
40
+ return new Error(String(err ?? '未知错误'));
21
41
  }
22
42
  //# sourceMappingURL=toError.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"toError.js","sourceRoot":"","sources":["../../src/utils/toError.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,OAAO,CAAC,GAAY;IAClC,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC;IACrC,IACE,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,OAAQ,GAA6B,CAAC,OAAO,KAAK,QAAQ,EAC1D,CAAC;QACD,OAAO,IAAI,KAAK,CAAE,GAA2B,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"toError.js","sourceRoot":"","sources":["../../src/utils/toError.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,OAAO,CAAC,GAAY;IAClC,yBAAyB;IACzB,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC;IACrC,kBAAkB;IAClB,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;IACnD,4CAA4C;IAC5C,IACE,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,OAAQ,GAA6B,CAAC,OAAO,KAAK,QAAQ,EAC1D,CAAC;QACD,OAAO,IAAI,KAAK,CAAE,GAA2B,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IACD,0DAA0D;IAC1D,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC;YACH,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;YAC7B,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,gDAAgD;IAChD,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC;AAC1C,CAAC"}
package/package.json CHANGED
@@ -1,9 +1,11 @@
1
1
  {
2
2
  "name": "@zooique/memora",
3
- "version": "1.0.1",
3
+ "version": "2.0.0",
4
4
  "description": "通用 Agent 架构(纯逻辑库)— 本地、私有、领域无关,万物皆记忆",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "sideEffects": false,
7
9
  "files": [
8
10
  "dist",
9
11
  "README.md",
@@ -15,6 +17,14 @@
15
17
  "types": "./dist/index.d.ts"
16
18
  }
17
19
  },
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://gitee.com/zooique/memora.git"
23
+ },
24
+ "homepage": "https://gitee.com/zooique/memora#readme",
25
+ "bugs": {
26
+ "url": "https://gitee.com/zooique/memora/issues"
27
+ },
18
28
  "scripts": {
19
29
  "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json",
20
30
  "test": "vitest run",
@@ -1,92 +0,0 @@
1
- /**
2
- * 记忆写入器 — 统一的记忆写操作代理
3
- *
4
- * 从 MemoryInspector 拆分出来,专职负责 IMemoryStorage + IMemoryRelationStore 的写操作。
5
- *
6
- * 设计原则:
7
- * - 与 MemoryInspector 严格分工:本类只写不读,MemoryInspector 只读不写
8
- * - 薄层代理——所有方法直接透传到 IMemoryStorage / IMemoryRelationStore,
9
- * 不增加业务逻辑,仅提供"宿主通过 agent.memoryMutator 访问写操作"的分层入口
10
- * - 静默降级——relationStore 未注入时关系写方法静默 no-op(ADR-014 降级优先)
11
- *
12
- * 与 MemoryInspector 的分工(P1-2 拆分,1.0 接口稳定化):
13
- * - agent.memory(MemoryInspector):snapshot / search / stats / 关系查询 / getById / list 等
14
- * - agent.memoryMutator(MemoryMutator):upsert / delete / restore / purge / purgeExpired /
15
- * addRelation / removeRelation
16
- *
17
- * 详见 ADR-010(Agent 门面)+ 迭代文档 P1-2
18
- */
19
- import type { Memory, MemoryRelation } from '../../memory/types.js';
20
- import type { IMemoryStorage } from '../../memory/storageInterface.js';
21
- import type { IMemoryRelationStore } from '../../memory/relationStore.js';
22
- /**
23
- * 记忆写入器类
24
- *
25
- * 宿主项目通过 agent.memoryMutator 访问写操作,无需绕过 inspector 直接访问 agent.storage
26
- * (后者已废弃,详见 agent.ts)。
27
- */
28
- export declare class MemoryMutator {
29
- private readonly index;
30
- /** 关系存储侧车(可选,ADR-014,未注入时关系写方法静默 no-op) */
31
- private readonly relationStore;
32
- /**
33
- * @param index - 记忆存储(用于 upsert/delete/restore/purge/purgeExpired)
34
- * @param relationStore - 关系存储侧车(可选,用于 addRelation/removeRelation)
35
- */
36
- constructor(index: IMemoryStorage, relationStore?: IMemoryRelationStore | null);
37
- /**
38
- * 插入或更新记忆
39
- *
40
- * @param memory 完整记忆对象
41
- */
42
- upsert(memory: Memory): void;
43
- /**
44
- * 软删除记忆(写入 deletedAt)
45
- *
46
- * @param id 记忆唯一标识(${source}:${name} 格式)
47
- */
48
- delete(id: string): void;
49
- /**
50
- * 恢复软删除的记忆(清除 deletedAt)
51
- *
52
- * @param id 记忆唯一标识
53
- */
54
- restore(id: string): void;
55
- /**
56
- * 物理删除记忆(不可恢复,用于回收站彻底删除)
57
- *
58
- * @param id 记忆唯一标识
59
- */
60
- purge(id: string): void;
61
- /**
62
- * 清理过期的软删除记忆
63
- *
64
- * 物理删除所有 deletedAt 早于 before 的记忆。
65
- * 由宿主项目的定时器调用(默认 30 天保留期)。
66
- *
67
- * @param before 时间阈值,deletedAt 早于此值的记忆将被物理删除
68
- * @returns 被清理的记忆数量
69
- */
70
- purgeExpired(before: Date): number;
71
- /**
72
- * 添加记忆关系(透传 relationStore)
73
- *
74
- * 用于宿主 UI 手动创建关系(关系图右键菜单 → 连线 → 创建关系)。
75
- * relationStore 未注入时静默降级(不阻塞)。
76
- *
77
- * @param relation 关系边数据
78
- */
79
- addRelation(relation: MemoryRelation): void;
80
- /**
81
- * 删除记忆关系(透传 relationStore)
82
- *
83
- * 用于宿主 UI 手动删除关系(关系图右键菜单 → 编辑关系 → 删除)。
84
- * relationStore 未注入时静默降级(不阻塞)。
85
- *
86
- * @param sourceId 关系起点
87
- * @param targetId 关系终点
88
- * @param type 关系类型
89
- */
90
- removeRelation(sourceId: string, targetId: string, type: string): void;
91
- }
92
- //# sourceMappingURL=memoryMutator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memoryMutator.d.ts","sourceRoot":"","sources":["../../../src/agent/managers/memoryMutator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE;;;;;GAKG;AACH,qBAAa,aAAa;IAStB,OAAO,CAAC,QAAQ,CAAC,KAAK;IARxB,2CAA2C;IAC3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAE5D;;;OAGG;gBAEgB,KAAK,EAAE,cAAc,EACtC,aAAa,GAAE,oBAAoB,GAAG,IAAW;IAOnD;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI5B;;;;OAIG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIxB;;;;OAIG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIzB;;;;OAIG;IACH,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIvB;;;;;;;;OAQG;IACH,YAAY,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM;IAMlC;;;;;;;OAOG;IACH,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAK3C;;;;;;;;;OASG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;CAIvE"}