@zooique/memora 1.0.1 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/README.en.md +272 -0
  2. package/README.md +150 -38
  3. package/dist/agent/agent.d.ts +257 -115
  4. package/dist/agent/agent.d.ts.map +1 -1
  5. package/dist/agent/agent.js +747 -400
  6. package/dist/agent/agent.js.map +1 -1
  7. package/dist/agent/assembler.d.ts +32 -16
  8. package/dist/agent/assembler.d.ts.map +1 -1
  9. package/dist/agent/assembler.js +83 -47
  10. package/dist/agent/assembler.js.map +1 -1
  11. package/dist/agent/builtinToolHandlers.d.ts +27 -2
  12. package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
  13. package/dist/agent/builtinToolHandlers.js +78 -5
  14. package/dist/agent/builtinToolHandlers.js.map +1 -1
  15. package/dist/agent/constants.d.ts +4 -0
  16. package/dist/agent/constants.d.ts.map +1 -1
  17. package/dist/agent/constants.js +4 -0
  18. package/dist/agent/constants.js.map +1 -1
  19. package/dist/agent/contextManager.d.ts +8 -0
  20. package/dist/agent/contextManager.d.ts.map +1 -1
  21. package/dist/agent/contextManager.js +7 -2
  22. package/dist/agent/contextManager.js.map +1 -1
  23. package/dist/agent/guardrail.d.ts +4 -2
  24. package/dist/agent/guardrail.d.ts.map +1 -1
  25. package/dist/agent/guardrail.js +13 -5
  26. package/dist/agent/guardrail.js.map +1 -1
  27. package/dist/agent/loop.d.ts +137 -15
  28. package/dist/agent/loop.d.ts.map +1 -1
  29. package/dist/agent/loop.js +449 -270
  30. package/dist/agent/loop.js.map +1 -1
  31. package/dist/agent/managers/archiveCoordinator.d.ts +126 -22
  32. package/dist/agent/managers/archiveCoordinator.d.ts.map +1 -1
  33. package/dist/agent/managers/archiveCoordinator.js +239 -44
  34. package/dist/agent/managers/archiveCoordinator.js.map +1 -1
  35. package/dist/agent/managers/autoConfigRefiner.d.ts.map +1 -1
  36. package/dist/agent/managers/autoConfigRefiner.js +4 -8
  37. package/dist/agent/managers/autoConfigRefiner.js.map +1 -1
  38. package/dist/agent/managers/chatLockManager.d.ts +116 -0
  39. package/dist/agent/managers/chatLockManager.d.ts.map +1 -0
  40. package/dist/agent/managers/chatLockManager.js +191 -0
  41. package/dist/agent/managers/chatLockManager.js.map +1 -0
  42. package/dist/agent/managers/configManager.d.ts +87 -3
  43. package/dist/agent/managers/configManager.d.ts.map +1 -1
  44. package/dist/agent/managers/configManager.js +139 -2
  45. package/dist/agent/managers/configManager.js.map +1 -1
  46. package/dist/agent/managers/dedupManager.d.ts +169 -0
  47. package/dist/agent/managers/dedupManager.d.ts.map +1 -0
  48. package/dist/agent/managers/dedupManager.js +336 -0
  49. package/dist/agent/managers/dedupManager.js.map +1 -0
  50. package/dist/agent/managers/insightExtractor.d.ts +31 -3
  51. package/dist/agent/managers/insightExtractor.d.ts.map +1 -1
  52. package/dist/agent/managers/insightExtractor.js +130 -59
  53. package/dist/agent/managers/insightExtractor.js.map +1 -1
  54. package/dist/agent/managers/llmJudgeHelper.d.ts +38 -0
  55. package/dist/agent/managers/llmJudgeHelper.d.ts.map +1 -0
  56. package/dist/agent/managers/llmJudgeHelper.js +49 -0
  57. package/dist/agent/managers/llmJudgeHelper.js.map +1 -0
  58. package/dist/agent/managers/memoryAdvisor.d.ts +102 -2
  59. package/dist/agent/managers/memoryAdvisor.d.ts.map +1 -1
  60. package/dist/agent/managers/memoryAdvisor.js +254 -10
  61. package/dist/agent/managers/memoryAdvisor.js.map +1 -1
  62. package/dist/agent/managers/memoryDecayScheduler.d.ts +127 -1
  63. package/dist/agent/managers/memoryDecayScheduler.d.ts.map +1 -1
  64. package/dist/agent/managers/memoryDecayScheduler.js +283 -4
  65. package/dist/agent/managers/memoryDecayScheduler.js.map +1 -1
  66. package/dist/agent/managers/memoryGovernance.d.ts +56 -0
  67. package/dist/agent/managers/memoryGovernance.d.ts.map +1 -0
  68. package/dist/agent/managers/memoryGovernance.js +63 -0
  69. package/dist/agent/managers/memoryGovernance.js.map +1 -0
  70. package/dist/agent/managers/memoryInspector.d.ts +113 -30
  71. package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
  72. package/dist/agent/managers/memoryInspector.js +165 -32
  73. package/dist/agent/managers/memoryInspector.js.map +1 -1
  74. package/dist/agent/managers/relationBuilder.d.ts +4 -4
  75. package/dist/agent/managers/relationBuilder.d.ts.map +1 -1
  76. package/dist/agent/managers/relationBuilder.js +5 -4
  77. package/dist/agent/managers/relationBuilder.js.map +1 -1
  78. package/dist/agent/managers/sessionArchiver.d.ts +12 -1
  79. package/dist/agent/managers/sessionArchiver.d.ts.map +1 -1
  80. package/dist/agent/managers/sessionArchiver.js +87 -30
  81. package/dist/agent/managers/sessionArchiver.js.map +1 -1
  82. package/dist/agent/managers/sessionManager.d.ts.map +1 -1
  83. package/dist/agent/managers/sessionManager.js +9 -17
  84. package/dist/agent/managers/sessionManager.js.map +1 -1
  85. package/dist/agent/managers/streamAccumulator.d.ts +45 -0
  86. package/dist/agent/managers/streamAccumulator.d.ts.map +1 -0
  87. package/dist/agent/managers/streamAccumulator.js +40 -0
  88. package/dist/agent/managers/streamAccumulator.js.map +1 -0
  89. package/dist/agent/managers/textPolishManager.d.ts +62 -0
  90. package/dist/agent/managers/textPolishManager.d.ts.map +1 -0
  91. package/dist/agent/managers/textPolishManager.js +96 -0
  92. package/dist/agent/managers/textPolishManager.js.map +1 -0
  93. package/dist/agent/managers/workProjection.d.ts +16 -1
  94. package/dist/agent/managers/workProjection.d.ts.map +1 -1
  95. package/dist/agent/managers/workProjection.js +48 -24
  96. package/dist/agent/managers/workProjection.js.map +1 -1
  97. package/dist/agent/personaMatcher.d.ts +29 -0
  98. package/dist/agent/personaMatcher.d.ts.map +1 -0
  99. package/dist/agent/personaMatcher.js +60 -0
  100. package/dist/agent/personaMatcher.js.map +1 -0
  101. package/dist/agent/toolExecutor.d.ts +24 -4
  102. package/dist/agent/toolExecutor.d.ts.map +1 -1
  103. package/dist/agent/toolExecutor.js +30 -4
  104. package/dist/agent/toolExecutor.js.map +1 -1
  105. package/dist/agent/tracer.d.ts +31 -0
  106. package/dist/agent/tracer.d.ts.map +1 -1
  107. package/dist/agent/tracer.js +31 -0
  108. package/dist/agent/tracer.js.map +1 -1
  109. package/dist/agent/types.d.ts +133 -0
  110. package/dist/agent/types.d.ts.map +1 -1
  111. package/dist/agent/types.js +38 -0
  112. package/dist/agent/types.js.map +1 -1
  113. package/dist/agent/userFactExtractor.d.ts.map +1 -1
  114. package/dist/agent/userFactExtractor.js +7 -0
  115. package/dist/agent/userFactExtractor.js.map +1 -1
  116. package/dist/config/loader.d.ts +124 -236
  117. package/dist/config/loader.d.ts.map +1 -1
  118. package/dist/config/loader.js +296 -118
  119. package/dist/config/loader.js.map +1 -1
  120. package/dist/eval/evalRunner.d.ts +94 -0
  121. package/dist/eval/evalRunner.d.ts.map +1 -0
  122. package/dist/eval/evalRunner.js +141 -0
  123. package/dist/eval/evalRunner.js.map +1 -0
  124. package/dist/eval/evalTypes.d.ts +21 -0
  125. package/dist/eval/evalTypes.d.ts.map +1 -1
  126. package/dist/eval/evalTypes.js +15 -0
  127. package/dist/eval/evalTypes.js.map +1 -1
  128. package/dist/eval/scenarios.d.ts +33 -0
  129. package/dist/eval/scenarios.d.ts.map +1 -0
  130. package/dist/eval/scenarios.js +109 -0
  131. package/dist/eval/scenarios.js.map +1 -0
  132. package/dist/index.d.ts +45 -6
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +45 -5
  135. package/dist/index.js.map +1 -1
  136. package/dist/llm/abortSignal.d.ts +27 -0
  137. package/dist/llm/abortSignal.d.ts.map +1 -0
  138. package/dist/llm/abortSignal.js +44 -0
  139. package/dist/llm/abortSignal.js.map +1 -0
  140. package/dist/llm/embedding.d.ts +13 -12
  141. package/dist/llm/embedding.d.ts.map +1 -1
  142. package/dist/llm/embedding.js +5 -17
  143. package/dist/llm/embedding.js.map +1 -1
  144. package/dist/llm/factory.d.ts +19 -5
  145. package/dist/llm/factory.d.ts.map +1 -1
  146. package/dist/llm/factory.js +19 -37
  147. package/dist/llm/factory.js.map +1 -1
  148. package/dist/llm/openaiCompatible.d.ts.map +1 -1
  149. package/dist/llm/openaiCompatible.js +17 -34
  150. package/dist/llm/openaiCompatible.js.map +1 -1
  151. package/dist/logging/logger.d.ts +3 -1
  152. package/dist/logging/logger.d.ts.map +1 -1
  153. package/dist/logging/logger.js +47 -50
  154. package/dist/logging/logger.js.map +1 -1
  155. package/dist/memory/governance.d.ts +50 -0
  156. package/dist/memory/governance.d.ts.map +1 -0
  157. package/dist/memory/governance.js +70 -0
  158. package/dist/memory/governance.js.map +1 -0
  159. package/dist/memory/hybridMerge.d.ts +0 -4
  160. package/dist/memory/hybridMerge.d.ts.map +1 -1
  161. package/dist/memory/hybridMerge.js +19 -4
  162. package/dist/memory/hybridMerge.js.map +1 -1
  163. package/dist/memory/inMemoryRelationStore.d.ts +7 -0
  164. package/dist/memory/inMemoryRelationStore.d.ts.map +1 -1
  165. package/dist/memory/inMemoryRelationStore.js +15 -0
  166. package/dist/memory/inMemoryRelationStore.js.map +1 -1
  167. package/dist/memory/inMemoryStorage.d.ts +36 -1
  168. package/dist/memory/inMemoryStorage.d.ts.map +1 -1
  169. package/dist/memory/inMemoryStorage.js +70 -19
  170. package/dist/memory/inMemoryStorage.js.map +1 -1
  171. package/dist/memory/loader.d.ts +2 -0
  172. package/dist/memory/loader.d.ts.map +1 -1
  173. package/dist/memory/loader.js +8 -1
  174. package/dist/memory/loader.js.map +1 -1
  175. package/dist/memory/lockManager.d.ts +7 -2
  176. package/dist/memory/lockManager.d.ts.map +1 -1
  177. package/dist/memory/lockManager.js +35 -17
  178. package/dist/memory/lockManager.js.map +1 -1
  179. package/dist/memory/projectManager.d.ts +8 -7
  180. package/dist/memory/projectManager.d.ts.map +1 -1
  181. package/dist/memory/projectManager.js +33 -15
  182. package/dist/memory/projectManager.js.map +1 -1
  183. package/dist/memory/projectRegistry.d.ts +34 -1
  184. package/dist/memory/projectRegistry.d.ts.map +1 -1
  185. package/dist/memory/projectRegistry.js +100 -31
  186. package/dist/memory/projectRegistry.js.map +1 -1
  187. package/dist/memory/recall.d.ts +16 -0
  188. package/dist/memory/recall.d.ts.map +1 -1
  189. package/dist/memory/recall.js +35 -20
  190. package/dist/memory/recall.js.map +1 -1
  191. package/dist/memory/relationStore.d.ts +20 -3
  192. package/dist/memory/relationStore.d.ts.map +1 -1
  193. package/dist/memory/sourceValidation.d.ts +17 -0
  194. package/dist/memory/sourceValidation.d.ts.map +1 -1
  195. package/dist/memory/sourceValidation.js +27 -3
  196. package/dist/memory/sourceValidation.js.map +1 -1
  197. package/dist/memory/storageInterface.d.ts +26 -1
  198. package/dist/memory/storageInterface.d.ts.map +1 -1
  199. package/dist/memory/store.d.ts +22 -1
  200. package/dist/memory/store.d.ts.map +1 -1
  201. package/dist/memory/store.js +58 -20
  202. package/dist/memory/store.js.map +1 -1
  203. package/dist/memory/types.d.ts +44 -31
  204. package/dist/memory/types.d.ts.map +1 -1
  205. package/dist/memory/types.js +63 -24
  206. package/dist/memory/types.js.map +1 -1
  207. package/dist/memory/userProfile.d.ts +32 -8
  208. package/dist/memory/userProfile.d.ts.map +1 -1
  209. package/dist/memory/userProfile.js +105 -44
  210. package/dist/memory/userProfile.js.map +1 -1
  211. package/dist/memory/vectorStore.d.ts +16 -8
  212. package/dist/memory/vectorStore.d.ts.map +1 -1
  213. package/dist/memory/vectorStore.js +49 -22
  214. package/dist/memory/vectorStore.js.map +1 -1
  215. package/dist/persona/personaManager.d.ts +38 -63
  216. package/dist/persona/personaManager.d.ts.map +1 -1
  217. package/dist/persona/personaManager.js +136 -202
  218. package/dist/persona/personaManager.js.map +1 -1
  219. package/dist/skill/skillManager.d.ts +11 -57
  220. package/dist/skill/skillManager.d.ts.map +1 -1
  221. package/dist/skill/skillManager.js +46 -141
  222. package/dist/skill/skillManager.js.map +1 -1
  223. package/dist/skill/types.d.ts +2 -3
  224. package/dist/skill/types.d.ts.map +1 -1
  225. package/dist/utils/array.d.ts +24 -0
  226. package/dist/utils/array.d.ts.map +1 -0
  227. package/dist/utils/array.js +24 -0
  228. package/dist/utils/array.js.map +1 -0
  229. package/dist/utils/configResourceManager.d.ts +111 -0
  230. package/dist/utils/configResourceManager.d.ts.map +1 -0
  231. package/dist/utils/configResourceManager.js +148 -0
  232. package/dist/utils/configResourceManager.js.map +1 -0
  233. package/dist/utils/errors.d.ts +27 -8
  234. package/dist/utils/errors.d.ts.map +1 -1
  235. package/dist/utils/errors.js +31 -9
  236. package/dist/utils/errors.js.map +1 -1
  237. package/dist/utils/eventEmitter.d.ts +88 -4
  238. package/dist/utils/eventEmitter.d.ts.map +1 -1
  239. package/dist/utils/eventEmitter.js +23 -0
  240. package/dist/utils/eventEmitter.js.map +1 -1
  241. package/dist/utils/frontmatter.d.ts.map +1 -1
  242. package/dist/utils/frontmatter.js +4 -2
  243. package/dist/utils/frontmatter.js.map +1 -1
  244. package/dist/utils/math.d.ts +11 -0
  245. package/dist/utils/math.d.ts.map +1 -1
  246. package/dist/utils/math.js +17 -0
  247. package/dist/utils/math.js.map +1 -1
  248. package/dist/utils/objects.d.ts +17 -0
  249. package/dist/utils/objects.d.ts.map +1 -0
  250. package/dist/utils/objects.js +19 -0
  251. package/dist/utils/objects.js.map +1 -0
  252. package/dist/utils/segmenter.d.ts +11 -10
  253. package/dist/utils/segmenter.d.ts.map +1 -1
  254. package/dist/utils/segmenter.js +23 -1
  255. package/dist/utils/segmenter.js.map +1 -1
  256. package/dist/utils/strings.d.ts +22 -1
  257. package/dist/utils/strings.d.ts.map +1 -1
  258. package/dist/utils/strings.js +29 -1
  259. package/dist/utils/strings.js.map +1 -1
  260. package/dist/utils/time.d.ts +18 -3
  261. package/dist/utils/time.d.ts.map +1 -1
  262. package/dist/utils/time.js +24 -8
  263. package/dist/utils/time.js.map +1 -1
  264. package/dist/utils/toError.d.ts +8 -4
  265. package/dist/utils/toError.d.ts.map +1 -1
  266. package/dist/utils/toError.js +25 -5
  267. package/dist/utils/toError.js.map +1 -1
  268. package/docs/memora-api-reference.md +1235 -0
  269. package/docs/memora-/346/216/245/345/205/245/346/214/207/345/215/227.md +808 -0
  270. package/package.json +49 -22
  271. package/dist/agent/managers/memoryMutator.d.ts +0 -92
  272. package/dist/agent/managers/memoryMutator.d.ts.map +0 -1
  273. package/dist/agent/managers/memoryMutator.js +0 -94
  274. package/dist/agent/managers/memoryMutator.js.map +0 -1
@@ -1,48 +1,39 @@
1
1
  /**
2
- * 角色管理器 — 加载、切换、注入角色人格(personas/ 目录 + SQLite 存储)
2
+ * 角色管理器 — 继承 ConfigResourceManager,扩展角色特定逻辑
3
3
  *
4
4
  * 职责:
5
- * - 从 configDir/personas/*.md 加载角色文件
6
- * - 解析 frontmatter(name / keywords / description)
7
- * - 写入 SQLite 索引(source: persona, score: 1.0)
5
+ * - 从 configDir/personas/*.md 加载角色文件(委托基类扫描)
6
+ * - 解析 frontmatter(name / keywords / description / traits.*)
8
7
  * - 将激活角色注入到 system prompt 顶部
9
8
  * - 支持运行时切换角色 + 关键词自动匹配
9
+ * - 角色切换时间窗口缓冲(防抖锁)
10
10
  *
11
- * 设计原则(architecture_philosophy_rules.md §1):
12
- * - Persona 遵循"万物皆记忆"——存入 SQLite 作为 persona 来源记忆
13
- * - 召回管线做特殊处理:bootstrap 只取当前激活角色的 1 条 persona 记忆
14
- * - 角色可被会话关键词动态匹配自动切换,也可手动指定
15
- *
16
- * 目录约定:
17
- * - 单层角色:只有宿主程序级 <configDir>/personas/*.md
18
- * - 目录名 personas/ 与代码 Persona 术语一致,区别于用户身份信息
11
+ * 设计原则:
12
+ * - Persona 遵循"万物皆记忆"——角色提示作为 system prompt 注入
13
+ * - 与 SkillManager 共享 ConfigResourceManager 基类(消除重复扫描/匹配/生命周期)
14
+ * - 角色特有状态(activePersona/mode/切换缓冲)保留在子类
19
15
  */
20
- import { scoreByKeywords } from '../utils/segmenter.js';
21
- import { SOURCE_LABELS } from '../memory/types.js';
22
16
  import { logger } from '../logging/logger.js';
23
17
  import { configError } from '../utils/errors.js';
24
- import { scanMarkdownDir, parseKeywords, resolveSubdir } from '../utils/scanner.js';
18
+ import { ConfigResourceManager } from '../utils/configResourceManager.js';
19
+ import { parseKeywords } from '../utils/scanner.js';
25
20
  import { safeSetTimeout, clearSafeTimeout } from '../utils/safeTimer.js';
26
- import { nowIso } from '../utils/time.js';
21
+ /**
22
+ * 关键词匹配高置信度阈值:≥ 此值直接返回(低置信度由 agent 层决定是否调 LLM)
23
+ */
24
+ const KEYWORD_HIGH_CONFIDENCE_THRESHOLD = 0.3;
27
25
  /**
28
26
  * 从 frontmatter 解析 traits.* 键值对
29
- *
30
- * 遍历 frontmatter 中以 "traits." 开头的键,提取数值。
31
- * 非数值或超出 0-1 范围的值被静默忽略(防御性解析)。
32
- *
33
- * @param fm frontmatter 键值对映射
34
- * @returns traits 对象,无有效键时返回 undefined
35
27
  */
36
28
  function parseTraits(fm) {
37
29
  const traits = {};
38
30
  for (const [key, value] of Object.entries(fm)) {
39
31
  if (!key.startsWith('traits.'))
40
32
  continue;
41
- const traitName = key.slice(7); // 去掉 'traits.' 前缀
33
+ const traitName = key.slice(7);
42
34
  if (!traitName)
43
35
  continue;
44
36
  const num = Number(value);
45
- // 防御性校验:必须是有效数值且在 0-1 范围内
46
37
  if (Number.isFinite(num) && num >= 0 && num <= 1) {
47
38
  traits[traitName] = num;
48
39
  }
@@ -50,93 +41,112 @@ function parseTraits(fm) {
50
41
  return Object.keys(traits).length > 0 ? traits : undefined;
51
42
  }
52
43
  /**
53
- * 角色管理器(personas/ + SQLite + 关键词匹配)
44
+ * 角色管理器
54
45
  */
55
- export class PersonaManager {
56
- configDir;
57
- index;
46
+ export class PersonaManager extends ConfigResourceManager {
58
47
  /** 当前激活的角色 */
59
48
  activePersona = null;
60
- /** 角色列表缓存(启动时扫描一次) */
61
- personaList = [];
62
49
  /** 激活模式 */
63
50
  mode = 'auto';
64
51
  /** 角色切换时间戳列表(用于时间窗口缓冲) */
65
52
  switchTimestamps = [];
66
- /** 缓冲区开关(60s 内 3 次切换后锁定) */
53
+ /** 缓冲区开关(30s 内 5 次切换后锁定) */
67
54
  switchLocked = false;
68
55
  /** 锁定恢复计时器 */
69
56
  unlockTimer = null;
70
- /** 时间窗口:60 秒 */
71
- static SWITCH_WINDOW_MS = 60_000;
72
- /** 窗口内最大切换次数 */
73
- static MAX_SWITCHES_IN_WINDOW = 3;
74
- /** 锁定后自动恢复时间:5 分钟 */
75
- static AUTO_UNLOCK_MS = 300_000;
57
+ /** 锁定自动恢复时间戳(ms epoch) */
58
+ unlockAt = null;
59
+ /** 时间窗口:30 秒 */
60
+ static SWITCH_WINDOW_MS = 30_000;
61
+ /** 窗口内最大切换次数:5 次 */
62
+ static MAX_SWITCHES_IN_WINDOW = 5;
63
+ /** 锁定后自动恢复时间:2 分钟 */
64
+ static AUTO_UNLOCK_MS = 120_000;
76
65
  /**
77
66
  * @param configDir 配置目录(角色文件在 <configDir>/personas/ 下)
78
- * @param index SQLite 索引(用于写入 persona 记忆)
79
67
  */
80
- constructor(configDir, index) {
81
- this.configDir = configDir;
82
- this.index = index;
68
+ constructor(configDir) {
69
+ super(configDir, 'personas');
83
70
  }
71
+ // ── 生命周期 ───────────────────────────────────
84
72
  /**
85
- * 启动时加载:扫描目录 + 激活指定角色 + 写入 SQLite
73
+ * 启动时加载:扫描目录 + 激活指定角色
86
74
  *
87
75
  * @param activePersona 要激活的角色名(可选,不传则使用第一个找到的角色)
88
76
  * @returns 激活角色的 system prompt 段
89
77
  */
90
78
  async load(activePersona) {
91
- this.personaList = await this.scanPersonas();
92
- if (this.personaList.length === 0) {
79
+ await this.loadItems(activePersona);
80
+ logger.info({ persona: this.activePersona?.name }, '角色已激活');
81
+ return this.buildSystemPrompt();
82
+ }
83
+ /**
84
+ * 重载角色:清空内存缓存 + 重新扫描 + 保持当前激活角色
85
+ */
86
+ async reload() {
87
+ const oldActiveName = this.activePersona?.name;
88
+ const count = await super.reload();
89
+ // 保持当前激活角色(若仍存在),否则回退到第一个
90
+ if (oldActiveName) {
91
+ const found = this.items.find((p) => p.name === oldActiveName);
92
+ if (found) {
93
+ this.activePersona = found;
94
+ }
95
+ else {
96
+ this.activePersona = this.items[0] ?? this.createDefaultPersona();
97
+ logger.warn({ oldActive: oldActiveName, newActive: this.activePersona.name }, '激活角色已被删除,回退到默认');
98
+ }
99
+ }
100
+ else {
101
+ this.activePersona = this.items[0] ?? this.createDefaultPersona();
102
+ }
103
+ logger.info({ count, active: this.activePersona.name }, '角色已重载');
104
+ return count;
105
+ }
106
+ // ── 加载后钩子(选择激活角色) ─────────────────────
107
+ /**
108
+ * load() 完成后选择激活角色
109
+ *
110
+ * @param _items 已加载的角色列表
111
+ * @param activeName 指定的激活角色名(options 参数)
112
+ */
113
+ onAfterLoad(_items, activeName) {
114
+ if (this.items.length === 0) {
93
115
  logger.warn({ personaCount: 0 }, '未找到任何角色文件,将使用默认角色');
94
116
  this.activePersona = this.createDefaultPersona();
95
- this.writePersonaToIndex(this.activePersona);
96
- return this.buildSystemPrompt();
117
+ return;
97
118
  }
98
- logger.info({ count: this.personaList.length, names: this.personaList.map((p) => p.name) }, '角色文件加载完成');
99
- // 写入 SQLite 索引(persona 遵循万物皆记忆)
100
- this.writeAllToIndex();
101
- // 激活指定角色
102
- if (activePersona) {
103
- const found = this.personaList.find((p) => p.name === activePersona);
119
+ if (activeName) {
120
+ const found = this.items.find((p) => p.name === activeName);
104
121
  if (found) {
105
122
  this.activePersona = found;
106
123
  }
107
124
  else {
108
- logger.warn({ requested: activePersona }, '未找到指定角色,使用第一个');
109
- // QC-17 移除非空断言:personaList 已在第 72 行检查非空
110
- this.activePersona = this.personaList[0] ?? this.createDefaultPersona();
125
+ logger.warn({ requested: activeName }, '未找到指定角色,使用第一个');
126
+ this.activePersona = this.items[0] ?? this.createDefaultPersona();
111
127
  }
112
128
  }
113
129
  else {
114
- // QC-17 移除非空断言:personaList 已在第 72 行检查非空
115
- this.activePersona = this.personaList[0] ?? this.createDefaultPersona();
130
+ this.activePersona = this.items[0] ?? this.createDefaultPersona();
116
131
  }
117
132
  logger.info({ persona: this.activePersona.name }, '角色已激活');
118
- return this.buildSystemPrompt();
119
133
  }
120
- /**
121
- * 获取当前激活的角色名(用于 bootstrap 过滤)
122
- */
134
+ // ── 角色管理 ──────────────────────────────────────
135
+ /** 当前激活的角色名 */
123
136
  get activeName() {
124
137
  return this.activePersona?.name ?? 'default';
125
138
  }
126
- /**
127
- * 获取当前激活角色对象(Phase 2.1:AffectController 需要 traits 字段)
128
- *
129
- * 返回 null 时表示未加载任何角色(使用默认行为)。
130
- */
139
+ /** 获取当前激活角色对象 */
131
140
  getActive() {
132
141
  return this.activePersona;
133
142
  }
143
+ /** 获取角色列表(委托基类) */
144
+ get list() {
145
+ return this.items;
146
+ }
134
147
  /**
135
148
  * 切换角色(带时间窗口缓冲)
136
149
  *
137
- * 错误策略统一(IX-03):角色不存在时抛 MemoraError,与 switchProject 一致。
138
- * 交换锁定时仍返回当前 prompt(非错误,是限流保护)。
139
- *
140
150
  * @param name 角色名
141
151
  * @returns 新角色的 system prompt 段
142
152
  * @throws MemoraError 如果角色不存在
@@ -144,19 +154,18 @@ export class PersonaManager {
144
154
  switchPersona(name) {
145
155
  // 缓冲区检查(限流保护,非错误)
146
156
  if (this.switchLocked) {
147
- logger.info({ persona: name }, '角色切换已锁定(60s 内超过 3 次),保持当前');
157
+ logger.info({ persona: name }, '角色切换已锁定(30s 内超过 5 次),保持当前');
148
158
  return this.buildSystemPrompt();
149
159
  }
150
- const found = this.personaList.find((p) => p.name === name);
160
+ const found = this.items.find((p) => p.name === name);
151
161
  if (!found) {
152
- // 统一错误策略:找不到目标时抛错,而非静默保持当前
153
162
  throw configError('角色切换失败', `角色 "${name}" 不存在`, [
154
163
  '使用 persona.list 查看可用角色',
155
164
  '在 agent-config/personas/ 目录下创建该角色配置文件',
156
165
  ]);
157
166
  }
158
167
  if (this.activePersona?.name === name) {
159
- return this.buildSystemPrompt(); // 同一角色,不需要切换
168
+ return this.buildSystemPrompt();
160
169
  }
161
170
  this.activePersona = found;
162
171
  this.recordSwitch();
@@ -164,13 +173,7 @@ export class PersonaManager {
164
173
  return this.buildSystemPrompt();
165
174
  }
166
175
  /**
167
- * 根据用户输入自动匹配最合适的角色
168
- *
169
- * 匹配条件:
170
- * - 当前模式为 'auto'(非手动锁定)
171
- * - 缓冲区未锁定
172
- * - 匹配得分 ≥ 0.5
173
- * - 匹配的角色与当前角色不同
176
+ * 根据用户输入自动匹配最合适的角色(关键词高置信度匹配)
174
177
  *
175
178
  * @param userInput 用户输入文本
176
179
  * @returns 匹配的角色名,无匹配返回 null
@@ -180,104 +183,79 @@ export class PersonaManager {
180
183
  return null;
181
184
  if (this.switchLocked)
182
185
  return null;
183
- if (this.personaList.length === 0)
186
+ if (this.items.length === 0)
184
187
  return null;
185
- const matches = [];
186
- for (const persona of this.personaList) {
187
- if (persona.keywords.length === 0)
188
- continue;
189
- const score = scoreByKeywords(userInput, persona.keywords);
190
- if (score > 0) {
191
- matches.push({ name: persona.name, score });
192
- }
188
+ const keywordBest = this.findBestKeywordMatch(userInput, KEYWORD_HIGH_CONFIDENCE_THRESHOLD);
189
+ if (keywordBest) {
190
+ if (this.activePersona?.name === keywordBest.item.name)
191
+ return null;
192
+ return keywordBest.item.name;
193
193
  }
194
- if (matches.length === 0)
195
- return null;
196
- matches.sort((a, b) => b.score - a.score);
197
- // QC-17 移除非空断言:matches 已在第 174 行检查非空
198
- const best = matches[0];
199
- if (!best)
200
- return null;
201
- if (best.score < 0.5)
202
- return null;
203
- if (this.activePersona?.name === best.name)
204
- return null;
205
- return best.name;
194
+ return null;
206
195
  }
207
196
  /**
208
- * 设置激活模式
209
- *
210
- * @param mode 'auto'(自动匹配)| 'manual'(手动固定)
197
+ * 检查是否满足自动匹配的前置条件
211
198
  */
199
+ canAutoMatch() {
200
+ return this.mode === 'auto' && !this.switchLocked && this.items.length > 0;
201
+ }
202
+ /** 设置激活模式 */
212
203
  setMode(mode) {
213
204
  this.mode = mode;
214
- // 切回自动模式时清除锁定状态
215
205
  if (mode === 'auto' && this.switchLocked) {
216
206
  this.switchLocked = false;
217
207
  this.switchTimestamps = [];
208
+ this.unlockAt = null;
218
209
  logger.info({ mode: this.mode }, '角色切换锁定已解除(模式切回自动)');
219
210
  }
220
211
  }
212
+ /** 获取角色切换锁定状态 */
213
+ getSwitchLockStatus() {
214
+ return { locked: this.switchLocked, unlockAt: this.unlockAt };
215
+ }
221
216
  /** 获取当前激活模式 */
222
217
  get currentMode() {
223
218
  return this.mode;
224
219
  }
225
- /**
226
- * 获取角色列表
227
- */
228
- get list() {
229
- return this.personaList;
230
- }
231
220
  /**
232
221
  * 清理定时器资源(Agent.close() 时调用)
233
- *
234
- * PersonaManager 持有 unlockTimer(角色切换防抖锁的自动恢复计时器),
235
- * 若不清理,Agent 关闭后定时器仍会触发回调,在已关闭的实例上执行引发异常。
236
222
  */
237
223
  close() {
238
224
  if (this.unlockTimer) {
239
225
  clearSafeTimeout(this.unlockTimer);
240
226
  this.unlockTimer = null;
241
227
  }
228
+ this.switchLocked = false;
229
+ this.unlockAt = null;
230
+ this.switchTimestamps = [];
242
231
  }
243
232
  /**
244
- * 重载角色:清空内存缓存 + 重新扫描目录 + 同步 SQLite 索引 + 保持当前激活角色
233
+ * 删除角色
245
234
  *
246
- * 事件驱动重载:confirmConfigSuggestion 写入 persona 文件后或用户手动编辑
247
- * personas/ 目录后,调用此方法使当前会话立即生效,无需重启 Agent。
235
+ * 若删除的是激活角色,自动回退到列表第一个或默认角色。
248
236
  *
249
- * 激活角色保持策略:
250
- * - 若当前激活角色在重载后仍存在 → 更新为重载后的版本(内容可能已变更)
251
- * - 若当前激活角色已被删除 → 回退到列表第一个角色(与 load() 默认行为一致)
252
- *
253
- * @returns 重载后的角色数量
237
+ * @param name 角色名
238
+ * @returns true 删除成功;false 角色不存在
254
239
  */
255
- async reload() {
256
- const oldActiveName = this.activePersona?.name;
257
- this.personaList = await this.scanPersonas();
258
- this.writeAllToIndex();
259
- // 保持当前激活角色(若仍存在),否则回退到第一个
260
- if (oldActiveName) {
261
- const found = this.personaList.find((p) => p.name === oldActiveName);
262
- if (found) {
263
- this.activePersona = found;
264
- }
265
- else {
266
- this.activePersona = this.personaList[0] ?? this.createDefaultPersona();
267
- logger.warn({ oldActive: oldActiveName, newActive: this.activePersona.name }, '激活角色已被删除,回退到默认');
268
- }
240
+ deletePersona(name) {
241
+ // 先检查是否为激活角色(删除前捕获,因 deleteItem 会改变 items)
242
+ const isActive = this.activePersona?.name === name;
243
+ const deleted = this.deleteItem(name);
244
+ if (!deleted)
245
+ return false;
246
+ // 若删除的是激活角色,回退
247
+ if (isActive) {
248
+ this.activePersona = this.items[0] ?? this.createDefaultPersona();
249
+ logger.warn({ deleted: name, newActive: this.activePersona.name }, '激活角色已被删除,回退到默认');
269
250
  }
270
- else {
271
- this.activePersona = this.personaList[0] ?? this.createDefaultPersona();
272
- }
273
- logger.info({ count: this.personaList.length, active: this.activePersona.name }, '角色已重载');
274
- return this.personaList.length;
251
+ return true;
275
252
  }
253
+ // ── 系统提示 ──────────────────────────────────────
276
254
  /**
277
255
  * 构建 system prompt 中的角色段
278
256
  */
279
257
  buildSystemPrompt(name) {
280
- const p = name ? this.personaList.find((item) => item.name === name) : this.activePersona;
258
+ const p = name ? this.items.find((item) => item.name === name) : this.activePersona;
281
259
  if (!p)
282
260
  return '';
283
261
  const meta = [`【当前角色】${p.name}`];
@@ -285,85 +263,41 @@ export class PersonaManager {
285
263
  meta.push(p.description);
286
264
  return `${meta.join(' · ')}\n\n${p.content}`;
287
265
  }
266
+ // ── 基类抽象方法实现 ──────────────────────────────
267
+ createEntry(entry) {
268
+ const fm = entry.frontmatter;
269
+ return {
270
+ name: entry.name,
271
+ id: fm['id'] ?? `persona:${entry.name}`,
272
+ description: fm['description'],
273
+ keywords: parseKeywords(fm),
274
+ content: entry.body.trim(),
275
+ filePath: entry.filePath,
276
+ traits: parseTraits(fm),
277
+ };
278
+ }
288
279
  // ── 私有方法 ──────────────────────────────────────
289
280
  /**
290
281
  * 记录一次角色切换(时间窗口缓冲)
291
282
  */
292
283
  recordSwitch() {
293
284
  const now = Date.now();
294
- // 清理过期记录
295
285
  this.switchTimestamps = this.switchTimestamps.filter((t) => now - t < PersonaManager.SWITCH_WINDOW_MS);
296
286
  this.switchTimestamps.push(now);
297
287
  if (this.switchTimestamps.length >= PersonaManager.MAX_SWITCHES_IN_WINDOW) {
298
- logger.warn({ count: this.switchTimestamps.length }, '角色切换过于频繁,锁定 5 分钟');
288
+ logger.warn({ count: this.switchTimestamps.length }, '角色切换过于频繁,锁定 2 分钟');
299
289
  this.switchLocked = true;
300
- // 5 分钟后自动解锁
290
+ this.unlockAt = now + PersonaManager.AUTO_UNLOCK_MS;
301
291
  if (this.unlockTimer)
302
292
  clearSafeTimeout(this.unlockTimer);
303
293
  this.unlockTimer = safeSetTimeout(() => {
304
294
  this.switchLocked = false;
305
295
  this.switchTimestamps = [];
296
+ this.unlockAt = null;
306
297
  logger.info({ mode: this.mode }, '角色切换锁定已自动解除');
307
298
  }, PersonaManager.AUTO_UNLOCK_MS);
308
299
  }
309
300
  }
310
- /**
311
- * 扫描单层目录,加载角色列表
312
- */
313
- async scanPersonas() {
314
- const list = [];
315
- const personasDir = resolveSubdir(this.configDir, 'personas');
316
- if (!personasDir)
317
- return list;
318
- const entries = await scanMarkdownDir(personasDir);
319
- for (const entry of entries) {
320
- const fm = entry.frontmatter;
321
- list.push({
322
- name: entry.name,
323
- id: fm['id'] ?? `persona:${entry.name}`,
324
- description: fm['description'],
325
- keywords: parseKeywords(fm),
326
- content: entry.body.trim(),
327
- filePath: entry.filePath,
328
- // Phase 2.1:解析 traits.* 键值对(如 traits.playfulness: 0.7)
329
- traits: parseTraits(fm),
330
- });
331
- }
332
- return list;
333
- }
334
- /**
335
- * 将所有角色写入 SQLite 索引
336
- *
337
- * 本函数循环体内无 await,作为同步函数实现。
338
- */
339
- writeAllToIndex() {
340
- if (!this.index)
341
- return;
342
- for (const persona of this.personaList) {
343
- this.writePersonaToIndex(persona);
344
- }
345
- logger.info({ count: this.personaList.length }, '角色记忆已写入 SQLite');
346
- }
347
- /**
348
- * 将单个角色写入 SQLite 索引
349
- *
350
- * 函数体无 await,作为同步函数实现。index.upsert 是同步方法。
351
- */
352
- writePersonaToIndex(persona) {
353
- if (!this.index)
354
- return;
355
- const now = nowIso();
356
- const memory = {
357
- id: persona.id,
358
- content: persona.content,
359
- source: SOURCE_LABELS.PERSONA,
360
- name: persona.name,
361
- createdAt: now,
362
- accessedAt: now,
363
- score: 1.0,
364
- };
365
- this.index.upsert(memory);
366
- }
367
301
  /**
368
302
  * 创建默认角色
369
303
  */
@@ -1 +1 @@
1
- {"version":3,"file":"personaManager.js","sourceRoot":"","sources":["../../src/persona/personaManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"personaManager.js","sourceRoot":"","sources":["../../src/persona/personaManager.ts"],"names":[],"mappings":"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"}