@zooique/memora 2.0.3 → 3.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 (588) hide show
  1. package/CHANGELOG.md +1028 -0
  2. package/README.en.md +305 -272
  3. package/README.md +303 -260
  4. package/config.example.json +43 -0
  5. package/dist/agent/agent.d.ts +376 -408
  6. package/dist/agent/agent.d.ts.map +1 -1
  7. package/dist/agent/agent.js +1166 -926
  8. package/dist/agent/agent.js.map +1 -1
  9. package/dist/agent/assembler.d.ts +105 -43
  10. package/dist/agent/assembler.d.ts.map +1 -1
  11. package/dist/agent/assembler.js +543 -75
  12. package/dist/agent/assembler.js.map +1 -1
  13. package/dist/agent/budget.d.ts +131 -0
  14. package/dist/agent/budget.d.ts.map +1 -0
  15. package/dist/agent/budget.js +128 -0
  16. package/dist/agent/budget.js.map +1 -0
  17. package/dist/agent/builtinToolHandlers.d.ts +225 -38
  18. package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
  19. package/dist/agent/builtinToolHandlers.js +748 -132
  20. package/dist/agent/builtinToolHandlers.js.map +1 -1
  21. package/dist/agent/builtinTools.d.ts +198 -7
  22. package/dist/agent/builtinTools.d.ts.map +1 -1
  23. package/dist/agent/builtinTools.js +646 -14
  24. package/dist/agent/builtinTools.js.map +1 -1
  25. package/dist/agent/compaction.d.ts +93 -0
  26. package/dist/agent/compaction.d.ts.map +1 -0
  27. package/dist/agent/compaction.js +192 -0
  28. package/dist/agent/compaction.js.map +1 -0
  29. package/dist/agent/constants.d.ts +137 -20
  30. package/dist/agent/constants.d.ts.map +1 -1
  31. package/dist/agent/constants.js +152 -20
  32. package/dist/agent/constants.js.map +1 -1
  33. package/dist/agent/contextManager.d.ts +119 -77
  34. package/dist/agent/contextManager.d.ts.map +1 -1
  35. package/dist/agent/contextManager.js +192 -135
  36. package/dist/agent/contextManager.js.map +1 -1
  37. package/dist/agent/contextPreparer.d.ts +78 -0
  38. package/dist/agent/contextPreparer.d.ts.map +1 -0
  39. package/dist/agent/contextPreparer.js +128 -0
  40. package/dist/agent/contextPreparer.js.map +1 -0
  41. package/dist/agent/duplicateInterceptor.d.ts +67 -0
  42. package/dist/agent/duplicateInterceptor.d.ts.map +1 -0
  43. package/dist/agent/duplicateInterceptor.js +82 -0
  44. package/dist/agent/duplicateInterceptor.js.map +1 -0
  45. package/dist/agent/guardRail.d.ts +166 -0
  46. package/dist/agent/guardRail.d.ts.map +1 -0
  47. package/dist/agent/guardRail.js +333 -0
  48. package/dist/agent/guardRail.js.map +1 -0
  49. package/dist/agent/loop.d.ts +716 -295
  50. package/dist/agent/loop.d.ts.map +1 -1
  51. package/dist/agent/loop.js +2178 -664
  52. package/dist/agent/loop.js.map +1 -1
  53. package/dist/agent/managers/archiveCoordinator.d.ts +14 -171
  54. package/dist/agent/managers/archiveCoordinator.d.ts.map +1 -1
  55. package/dist/agent/managers/archiveCoordinator.js +19 -287
  56. package/dist/agent/managers/archiveCoordinator.js.map +1 -1
  57. package/dist/agent/managers/chatLockManager.d.ts +20 -88
  58. package/dist/agent/managers/chatLockManager.d.ts.map +1 -1
  59. package/dist/agent/managers/chatLockManager.js +31 -103
  60. package/dist/agent/managers/chatLockManager.js.map +1 -1
  61. package/dist/agent/managers/dedupManager.d.ts +31 -115
  62. package/dist/agent/managers/dedupManager.d.ts.map +1 -1
  63. package/dist/agent/managers/dedupManager.js +48 -136
  64. package/dist/agent/managers/dedupManager.js.map +1 -1
  65. package/dist/agent/managers/goalConsistencyChecker.d.ts +42 -0
  66. package/dist/agent/managers/goalConsistencyChecker.d.ts.map +1 -0
  67. package/dist/agent/managers/goalConsistencyChecker.js +178 -0
  68. package/dist/agent/managers/goalConsistencyChecker.js.map +1 -0
  69. package/dist/agent/managers/llmCaller.d.ts +124 -0
  70. package/dist/agent/managers/llmCaller.d.ts.map +1 -0
  71. package/dist/agent/managers/llmCaller.js +417 -0
  72. package/dist/agent/managers/llmCaller.js.map +1 -0
  73. package/dist/agent/managers/llmJudgeHelper.d.ts +8 -25
  74. package/dist/agent/managers/llmJudgeHelper.d.ts.map +1 -1
  75. package/dist/agent/managers/llmJudgeHelper.js +7 -24
  76. package/dist/agent/managers/llmJudgeHelper.js.map +1 -1
  77. package/dist/agent/managers/loopMetrics.d.ts +58 -0
  78. package/dist/agent/managers/loopMetrics.d.ts.map +1 -0
  79. package/dist/agent/managers/loopMetrics.js +68 -0
  80. package/dist/agent/managers/loopMetrics.js.map +1 -0
  81. package/dist/agent/managers/memoryAdvisor.d.ts +27 -120
  82. package/dist/agent/managers/memoryAdvisor.d.ts.map +1 -1
  83. package/dist/agent/managers/memoryAdvisor.js +85 -207
  84. package/dist/agent/managers/memoryAdvisor.js.map +1 -1
  85. package/dist/agent/managers/memoryGovernance.d.ts +10 -42
  86. package/dist/agent/managers/memoryGovernance.d.ts.map +1 -1
  87. package/dist/agent/managers/memoryGovernance.js +19 -36
  88. package/dist/agent/managers/memoryGovernance.js.map +1 -1
  89. package/dist/agent/managers/memoryInspector.d.ts +59 -268
  90. package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
  91. package/dist/agent/managers/memoryInspector.js +91 -442
  92. package/dist/agent/managers/memoryInspector.js.map +1 -1
  93. package/dist/agent/managers/roundSummaryGenerator.d.ts +56 -0
  94. package/dist/agent/managers/roundSummaryGenerator.d.ts.map +1 -0
  95. package/dist/agent/managers/roundSummaryGenerator.js +201 -0
  96. package/dist/agent/managers/roundSummaryGenerator.js.map +1 -0
  97. package/dist/agent/managers/sessionArchiver.d.ts +19 -68
  98. package/dist/agent/managers/sessionArchiver.d.ts.map +1 -1
  99. package/dist/agent/managers/sessionArchiver.js +76 -147
  100. package/dist/agent/managers/sessionArchiver.js.map +1 -1
  101. package/dist/agent/managers/sessionManager.d.ts +286 -57
  102. package/dist/agent/managers/sessionManager.d.ts.map +1 -1
  103. package/dist/agent/managers/sessionManager.js +846 -85
  104. package/dist/agent/managers/sessionManager.js.map +1 -1
  105. package/dist/agent/managers/sessionNamer.d.ts +35 -0
  106. package/dist/agent/managers/sessionNamer.d.ts.map +1 -0
  107. package/dist/agent/managers/sessionNamer.js +104 -0
  108. package/dist/agent/managers/sessionNamer.js.map +1 -0
  109. package/dist/agent/managers/streamAccumulator.d.ts +8 -33
  110. package/dist/agent/managers/streamAccumulator.d.ts.map +1 -1
  111. package/dist/agent/managers/streamAccumulator.js +4 -29
  112. package/dist/agent/managers/streamAccumulator.js.map +1 -1
  113. package/dist/agent/managers/textPolishManager.d.ts +8 -44
  114. package/dist/agent/managers/textPolishManager.d.ts.map +1 -1
  115. package/dist/agent/managers/textPolishManager.js +9 -41
  116. package/dist/agent/managers/textPolishManager.js.map +1 -1
  117. package/dist/agent/managers/toolCallHelpers.d.ts +105 -0
  118. package/dist/agent/managers/toolCallHelpers.d.ts.map +1 -0
  119. package/dist/agent/managers/toolCallHelpers.js +161 -0
  120. package/dist/agent/managers/toolCallHelpers.js.map +1 -0
  121. package/dist/agent/managers/workProjection.d.ts +55 -100
  122. package/dist/agent/managers/workProjection.d.ts.map +1 -1
  123. package/dist/agent/managers/workProjection.js +164 -268
  124. package/dist/agent/managers/workProjection.js.map +1 -1
  125. package/dist/agent/messageHistory.d.ts +134 -84
  126. package/dist/agent/messageHistory.d.ts.map +1 -1
  127. package/dist/agent/messageHistory.js +419 -133
  128. package/dist/agent/messageHistory.js.map +1 -1
  129. package/dist/agent/needsPlanning.d.ts +28 -0
  130. package/dist/agent/needsPlanning.d.ts.map +1 -0
  131. package/dist/agent/needsPlanning.js +68 -0
  132. package/dist/agent/needsPlanning.js.map +1 -0
  133. package/dist/agent/seed/index.d.ts +11 -0
  134. package/dist/agent/seed/index.d.ts.map +1 -0
  135. package/dist/agent/seed/index.js +10 -0
  136. package/dist/agent/seed/index.js.map +1 -0
  137. package/dist/agent/seed/orchestrator.d.ts +83 -0
  138. package/dist/agent/seed/orchestrator.d.ts.map +1 -0
  139. package/dist/agent/seed/orchestrator.js +260 -0
  140. package/dist/agent/seed/orchestrator.js.map +1 -0
  141. package/dist/agent/seed/prepare.d.ts +49 -0
  142. package/dist/agent/seed/prepare.d.ts.map +1 -0
  143. package/dist/agent/seed/prepare.js +107 -0
  144. package/dist/agent/seed/prepare.js.map +1 -0
  145. package/dist/agent/seed/types.d.ts +115 -0
  146. package/dist/agent/seed/types.d.ts.map +1 -0
  147. package/dist/agent/seed/types.js +15 -0
  148. package/dist/agent/seed/types.js.map +1 -0
  149. package/dist/agent/sessionStateMachine.d.ts +78 -0
  150. package/dist/agent/sessionStateMachine.d.ts.map +1 -0
  151. package/dist/agent/sessionStateMachine.js +182 -0
  152. package/dist/agent/sessionStateMachine.js.map +1 -0
  153. package/dist/agent/taskTableRenderer.d.ts +51 -0
  154. package/dist/agent/taskTableRenderer.d.ts.map +1 -0
  155. package/dist/agent/taskTableRenderer.js +115 -0
  156. package/dist/agent/taskTableRenderer.js.map +1 -0
  157. package/dist/agent/toolExecutor.d.ts +236 -10
  158. package/dist/agent/toolExecutor.d.ts.map +1 -1
  159. package/dist/agent/toolExecutor.js +932 -21
  160. package/dist/agent/toolExecutor.js.map +1 -1
  161. package/dist/agent/toolLedger.d.ts +120 -0
  162. package/dist/agent/toolLedger.d.ts.map +1 -0
  163. package/dist/agent/toolLedger.js +149 -0
  164. package/dist/agent/toolLedger.js.map +1 -0
  165. package/dist/agent/toolResultCache.d.ts +134 -0
  166. package/dist/agent/toolResultCache.d.ts.map +1 -0
  167. package/dist/agent/toolResultCache.js +243 -0
  168. package/dist/agent/toolResultCache.js.map +1 -0
  169. package/dist/agent/toolResultOffload.d.ts +59 -0
  170. package/dist/agent/toolResultOffload.d.ts.map +1 -0
  171. package/dist/agent/toolResultOffload.js +70 -0
  172. package/dist/agent/toolResultOffload.js.map +1 -0
  173. package/dist/agent/toolRunner.d.ts +59 -0
  174. package/dist/agent/toolRunner.d.ts.map +1 -0
  175. package/dist/agent/toolRunner.js +147 -0
  176. package/dist/agent/toolRunner.js.map +1 -0
  177. package/dist/agent/tracer.d.ts +99 -107
  178. package/dist/agent/tracer.d.ts.map +1 -1
  179. package/dist/agent/tracer.js +24 -69
  180. package/dist/agent/tracer.js.map +1 -1
  181. package/dist/agent/types.d.ts +510 -169
  182. package/dist/agent/types.d.ts.map +1 -1
  183. package/dist/agent/types.js +2 -51
  184. package/dist/agent/types.js.map +1 -1
  185. package/dist/code-exec/codeExecutionProvider.d.ts +16 -0
  186. package/dist/code-exec/codeExecutionProvider.d.ts.map +1 -0
  187. package/dist/code-exec/codeExecutionProvider.js +57 -0
  188. package/dist/code-exec/codeExecutionProvider.js.map +1 -0
  189. package/dist/code-exec/types.d.ts +37 -0
  190. package/dist/code-exec/types.d.ts.map +1 -0
  191. package/dist/code-exec/types.js +12 -0
  192. package/dist/code-exec/types.js.map +1 -0
  193. package/dist/config/expandEnvVars.d.ts +22 -0
  194. package/dist/config/expandEnvVars.d.ts.map +1 -0
  195. package/dist/config/expandEnvVars.js +38 -0
  196. package/dist/config/expandEnvVars.js.map +1 -0
  197. package/dist/config/loader.d.ts +27 -98
  198. package/dist/config/loader.d.ts.map +1 -1
  199. package/dist/config/loader.js +110 -223
  200. package/dist/config/loader.js.map +1 -1
  201. package/dist/index.d.ts +67 -77
  202. package/dist/index.d.ts.map +1 -1
  203. package/dist/index.js +90 -69
  204. package/dist/index.js.map +1 -1
  205. package/dist/llm/abortSignal.d.ts +2 -3
  206. package/dist/llm/abortSignal.d.ts.map +1 -1
  207. package/dist/llm/abortSignal.js +2 -3
  208. package/dist/llm/abortSignal.js.map +1 -1
  209. package/dist/llm/factory.d.ts +22 -32
  210. package/dist/llm/factory.d.ts.map +1 -1
  211. package/dist/llm/factory.js +29 -46
  212. package/dist/llm/factory.js.map +1 -1
  213. package/dist/llm/openaiCompatible.d.ts +25 -40
  214. package/dist/llm/openaiCompatible.d.ts.map +1 -1
  215. package/dist/llm/openaiCompatible.js +179 -120
  216. package/dist/llm/openaiCompatible.js.map +1 -1
  217. package/dist/llm/provider.d.ts +29 -42
  218. package/dist/llm/provider.d.ts.map +1 -1
  219. package/dist/llm/provider.js +11 -10
  220. package/dist/llm/provider.js.map +1 -1
  221. package/dist/llm/types.d.ts +54 -11
  222. package/dist/llm/types.d.ts.map +1 -1
  223. package/dist/llm/types.js +0 -5
  224. package/dist/llm/types.js.map +1 -1
  225. package/dist/logging/logger.d.ts +8 -31
  226. package/dist/logging/logger.d.ts.map +1 -1
  227. package/dist/logging/logger.js +28 -215
  228. package/dist/logging/logger.js.map +1 -1
  229. package/dist/logging/loggerInterface.d.ts +9 -8
  230. package/dist/logging/loggerInterface.d.ts.map +1 -1
  231. package/dist/memory/gcService.d.ts +164 -0
  232. package/dist/memory/gcService.d.ts.map +1 -0
  233. package/dist/memory/gcService.js +215 -0
  234. package/dist/memory/gcService.js.map +1 -0
  235. package/dist/memory/governance.d.ts +11 -44
  236. package/dist/memory/governance.d.ts.map +1 -1
  237. package/dist/memory/governance.js +11 -64
  238. package/dist/memory/governance.js.map +1 -1
  239. package/dist/memory/inMemoryRoundStore.d.ts +124 -0
  240. package/dist/memory/inMemoryRoundStore.d.ts.map +1 -0
  241. package/dist/memory/inMemoryRoundStore.js +216 -0
  242. package/dist/memory/inMemoryRoundStore.js.map +1 -0
  243. package/dist/memory/inMemorySessionStore.d.ts +92 -0
  244. package/dist/memory/inMemorySessionStore.d.ts.map +1 -0
  245. package/dist/memory/inMemorySessionStore.js +219 -0
  246. package/dist/memory/inMemorySessionStore.js.map +1 -0
  247. package/dist/memory/inMemorySessionViewLoader.d.ts +89 -0
  248. package/dist/memory/inMemorySessionViewLoader.d.ts.map +1 -0
  249. package/dist/memory/inMemorySessionViewLoader.js +183 -0
  250. package/dist/memory/inMemorySessionViewLoader.js.map +1 -0
  251. package/dist/memory/inMemoryStorage.d.ts +25 -175
  252. package/dist/memory/inMemoryStorage.d.ts.map +1 -1
  253. package/dist/memory/inMemoryStorage.js +32 -221
  254. package/dist/memory/inMemoryStorage.js.map +1 -1
  255. package/dist/memory/keywordsTouch.d.ts +20 -0
  256. package/dist/memory/keywordsTouch.d.ts.map +1 -0
  257. package/dist/memory/keywordsTouch.js +25 -0
  258. package/dist/memory/keywordsTouch.js.map +1 -0
  259. package/dist/memory/lockManager.d.ts +2 -2
  260. package/dist/memory/lockManager.d.ts.map +1 -1
  261. package/dist/memory/lockManager.js +6 -8
  262. package/dist/memory/lockManager.js.map +1 -1
  263. package/dist/memory/projectManager.d.ts +30 -129
  264. package/dist/memory/projectManager.d.ts.map +1 -1
  265. package/dist/memory/projectManager.js +39 -189
  266. package/dist/memory/projectManager.js.map +1 -1
  267. package/dist/memory/projectRegistry.d.ts +14 -62
  268. package/dist/memory/projectRegistry.d.ts.map +1 -1
  269. package/dist/memory/projectRegistry.js +27 -111
  270. package/dist/memory/projectRegistry.js.map +1 -1
  271. package/dist/memory/roundStore.d.ts +629 -0
  272. package/dist/memory/roundStore.d.ts.map +1 -0
  273. package/dist/memory/roundStore.js +116 -0
  274. package/dist/memory/roundStore.js.map +1 -0
  275. package/dist/memory/sessionStore.d.ts +70 -61
  276. package/dist/memory/sessionStore.d.ts.map +1 -1
  277. package/dist/memory/sessionStore.js +23 -1
  278. package/dist/memory/sessionStore.js.map +1 -1
  279. package/dist/memory/sessionViewLoader.d.ts +141 -0
  280. package/dist/memory/sessionViewLoader.d.ts.map +1 -0
  281. package/dist/memory/sessionViewLoader.js +65 -0
  282. package/dist/memory/sessionViewLoader.js.map +1 -0
  283. package/dist/memory/sourceValidation.d.ts +10 -12
  284. package/dist/memory/sourceValidation.d.ts.map +1 -1
  285. package/dist/memory/sourceValidation.js +16 -32
  286. package/dist/memory/sourceValidation.js.map +1 -1
  287. package/dist/memory/storageInterface.d.ts +44 -150
  288. package/dist/memory/storageInterface.d.ts.map +1 -1
  289. package/dist/memory/types.d.ts +65 -164
  290. package/dist/memory/types.d.ts.map +1 -1
  291. package/dist/memory/types.js +81 -83
  292. package/dist/memory/types.js.map +1 -1
  293. package/dist/project-search/projectSearchProvider.d.ts +29 -0
  294. package/dist/project-search/projectSearchProvider.d.ts.map +1 -0
  295. package/dist/project-search/projectSearchProvider.js +57 -0
  296. package/dist/project-search/projectSearchProvider.js.map +1 -0
  297. package/dist/project-search/terms.d.ts +14 -0
  298. package/dist/project-search/terms.d.ts.map +1 -0
  299. package/dist/project-search/terms.js +68 -0
  300. package/dist/project-search/terms.js.map +1 -0
  301. package/dist/project-search/types.d.ts +139 -0
  302. package/dist/project-search/types.d.ts.map +1 -0
  303. package/dist/project-search/types.js +8 -0
  304. package/dist/project-search/types.js.map +1 -0
  305. package/dist/role-pack/capabilityMap.d.ts +28 -0
  306. package/dist/role-pack/capabilityMap.d.ts.map +1 -0
  307. package/dist/role-pack/capabilityMap.js +56 -0
  308. package/dist/role-pack/capabilityMap.js.map +1 -0
  309. package/dist/role-pack/constants.d.ts +21 -0
  310. package/dist/role-pack/constants.d.ts.map +1 -0
  311. package/dist/role-pack/constants.js +21 -0
  312. package/dist/role-pack/constants.js.map +1 -0
  313. package/dist/role-pack/rolePackManager.d.ts +269 -0
  314. package/dist/role-pack/rolePackManager.d.ts.map +1 -0
  315. package/dist/role-pack/rolePackManager.js +1082 -0
  316. package/dist/role-pack/rolePackManager.js.map +1 -0
  317. package/dist/role-pack/strategyKeys.d.ts +100 -0
  318. package/dist/role-pack/strategyKeys.d.ts.map +1 -0
  319. package/dist/role-pack/strategyKeys.js +184 -0
  320. package/dist/role-pack/strategyKeys.js.map +1 -0
  321. package/dist/role-pack/strategyResolver.d.ts +109 -0
  322. package/dist/role-pack/strategyResolver.d.ts.map +1 -0
  323. package/dist/role-pack/strategyResolver.js +304 -0
  324. package/dist/role-pack/strategyResolver.js.map +1 -0
  325. package/dist/role-pack/types.d.ts +237 -0
  326. package/dist/role-pack/types.d.ts.map +1 -0
  327. package/dist/role-pack/types.js +8 -0
  328. package/dist/role-pack/types.js.map +1 -0
  329. package/dist/role-pack/validator.d.ts +38 -0
  330. package/dist/role-pack/validator.d.ts.map +1 -0
  331. package/dist/role-pack/validator.js +436 -0
  332. package/dist/role-pack/validator.js.map +1 -0
  333. package/dist/security/pathGuard.d.ts +69 -72
  334. package/dist/security/pathGuard.d.ts.map +1 -1
  335. package/dist/security/pathGuard.js +151 -131
  336. package/dist/security/pathGuard.js.map +1 -1
  337. package/dist/skill/skillLayer3.d.ts +91 -0
  338. package/dist/skill/skillLayer3.d.ts.map +1 -0
  339. package/dist/skill/skillLayer3.js +104 -0
  340. package/dist/skill/skillLayer3.js.map +1 -0
  341. package/dist/skill/skillManager.d.ts +136 -19
  342. package/dist/skill/skillManager.d.ts.map +1 -1
  343. package/dist/skill/skillManager.js +312 -61
  344. package/dist/skill/skillManager.js.map +1 -1
  345. package/dist/skill/skillScriptRunner.d.ts +97 -0
  346. package/dist/skill/skillScriptRunner.d.ts.map +1 -0
  347. package/dist/skill/skillScriptRunner.js +271 -0
  348. package/dist/skill/skillScriptRunner.js.map +1 -0
  349. package/dist/skill/types.d.ts +73 -16
  350. package/dist/skill/types.d.ts.map +1 -1
  351. package/dist/skill/types.js +5 -1
  352. package/dist/skill/types.js.map +1 -1
  353. package/dist/utils/array.d.ts +5 -6
  354. package/dist/utils/array.d.ts.map +1 -1
  355. package/dist/utils/array.js +6 -6
  356. package/dist/utils/array.js.map +1 -1
  357. package/dist/utils/atomicWrite.d.ts +8 -0
  358. package/dist/utils/atomicWrite.d.ts.map +1 -0
  359. package/dist/utils/atomicWrite.js +31 -0
  360. package/dist/utils/atomicWrite.js.map +1 -0
  361. package/dist/utils/backgroundTask.d.ts +38 -0
  362. package/dist/utils/backgroundTask.d.ts.map +1 -0
  363. package/dist/utils/backgroundTask.js +117 -0
  364. package/dist/utils/backgroundTask.js.map +1 -0
  365. package/dist/utils/configResourceManager.d.ts +40 -72
  366. package/dist/utils/configResourceManager.d.ts.map +1 -1
  367. package/dist/utils/configResourceManager.js +78 -76
  368. package/dist/utils/configResourceManager.js.map +1 -1
  369. package/dist/utils/errors.d.ts +44 -69
  370. package/dist/utils/errors.d.ts.map +1 -1
  371. package/dist/utils/errors.js +54 -71
  372. package/dist/utils/errors.js.map +1 -1
  373. package/dist/utils/eventEmitter.d.ts +104 -103
  374. package/dist/utils/eventEmitter.d.ts.map +1 -1
  375. package/dist/utils/eventEmitter.js +37 -45
  376. package/dist/utils/eventEmitter.js.map +1 -1
  377. package/dist/utils/fileSafe.d.ts +20 -0
  378. package/dist/utils/fileSafe.d.ts.map +1 -0
  379. package/dist/utils/fileSafe.js +56 -0
  380. package/dist/utils/fileSafe.js.map +1 -0
  381. package/dist/utils/frontmatter.d.ts +2 -3
  382. package/dist/utils/frontmatter.d.ts.map +1 -1
  383. package/dist/utils/frontmatter.js +2 -3
  384. package/dist/utils/frontmatter.js.map +1 -1
  385. package/dist/utils/hash.d.ts +12 -0
  386. package/dist/utils/hash.d.ts.map +1 -0
  387. package/dist/utils/hash.js +27 -0
  388. package/dist/utils/hash.js.map +1 -0
  389. package/dist/utils/http.d.ts +17 -0
  390. package/dist/utils/http.d.ts.map +1 -0
  391. package/dist/utils/http.js +29 -0
  392. package/dist/utils/http.js.map +1 -0
  393. package/dist/utils/json.d.ts +1 -1
  394. package/dist/utils/json.js +1 -1
  395. package/dist/utils/math.d.ts +25 -3
  396. package/dist/utils/math.d.ts.map +1 -1
  397. package/dist/utils/math.js +32 -16
  398. package/dist/utils/math.js.map +1 -1
  399. package/dist/utils/objects.d.ts +2 -3
  400. package/dist/utils/objects.d.ts.map +1 -1
  401. package/dist/utils/objects.js +2 -3
  402. package/dist/utils/objects.js.map +1 -1
  403. package/dist/utils/recallDefaults.d.ts +16 -0
  404. package/dist/utils/recallDefaults.d.ts.map +1 -0
  405. package/dist/utils/recallDefaults.js +16 -0
  406. package/dist/utils/recallDefaults.js.map +1 -0
  407. package/dist/utils/safeTimer.d.ts +8 -36
  408. package/dist/utils/safeTimer.d.ts.map +1 -1
  409. package/dist/utils/safeTimer.js +9 -37
  410. package/dist/utils/safeTimer.js.map +1 -1
  411. package/dist/utils/scanner.d.ts +97 -17
  412. package/dist/utils/scanner.d.ts.map +1 -1
  413. package/dist/utils/scanner.js +269 -47
  414. package/dist/utils/scanner.js.map +1 -1
  415. package/dist/utils/segmenter.d.ts +20 -19
  416. package/dist/utils/segmenter.d.ts.map +1 -1
  417. package/dist/utils/segmenter.js +230 -97
  418. package/dist/utils/segmenter.js.map +1 -1
  419. package/dist/utils/strings.d.ts +15 -32
  420. package/dist/utils/strings.d.ts.map +1 -1
  421. package/dist/utils/strings.js +25 -44
  422. package/dist/utils/strings.js.map +1 -1
  423. package/dist/utils/time.d.ts +37 -0
  424. package/dist/utils/time.d.ts.map +1 -1
  425. package/dist/utils/time.js +56 -0
  426. package/dist/utils/time.js.map +1 -1
  427. package/dist/utils/toError.d.ts +13 -1
  428. package/dist/utils/toError.d.ts.map +1 -1
  429. package/dist/utils/toError.js +18 -1
  430. package/dist/utils/toError.js.map +1 -1
  431. package/dist/web-fetch/fetchWebFetchProvider.d.ts +14 -0
  432. package/dist/web-fetch/fetchWebFetchProvider.d.ts.map +1 -0
  433. package/dist/web-fetch/fetchWebFetchProvider.js +69 -0
  434. package/dist/web-fetch/fetchWebFetchProvider.js.map +1 -0
  435. package/dist/web-fetch/types.d.ts +30 -0
  436. package/dist/web-fetch/types.d.ts.map +1 -0
  437. package/dist/web-fetch/types.js +7 -0
  438. package/dist/web-fetch/types.js.map +1 -0
  439. package/dist/web-fetch/webFetchProvider.d.ts +10 -0
  440. package/dist/web-fetch/webFetchProvider.d.ts.map +1 -0
  441. package/dist/web-fetch/webFetchProvider.js +28 -0
  442. package/dist/web-fetch/webFetchProvider.js.map +1 -0
  443. package/dist/web-search/fetchWebSearchProvider.d.ts +27 -0
  444. package/dist/web-search/fetchWebSearchProvider.d.ts.map +1 -0
  445. package/dist/web-search/fetchWebSearchProvider.js +199 -0
  446. package/dist/web-search/fetchWebSearchProvider.js.map +1 -0
  447. package/dist/web-search/types.d.ts +46 -0
  448. package/dist/web-search/types.d.ts.map +1 -0
  449. package/dist/web-search/types.js +2 -0
  450. package/dist/{persona → web-search}/types.js.map +1 -1
  451. package/dist/web-search/webSearchProvider.d.ts +10 -0
  452. package/dist/web-search/webSearchProvider.d.ts.map +1 -0
  453. package/dist/web-search/webSearchProvider.js +30 -0
  454. package/dist/web-search/webSearchProvider.js.map +1 -0
  455. package/docs/architecture/role-pack-authoring-guide.md +243 -0
  456. package/docs/architecture/role-pack-spec.md +767 -0
  457. package/docs/memora-api-reference.md +416 -476
  458. package/docs/memora-/346/216/245/345/205/245/346/214/207/345/215/227.md +841 -806
  459. package/docs/role-pack-/345/274/200/346/224/276/351/224/256/346/214/207/345/215/227.md +148 -0
  460. package/package.json +105 -100
  461. package/role-packs/README.md +41 -0
  462. package/role-packs/memora/345/212/251/346/211/213/manifest.json +12 -0
  463. package/role-packs/memora/345/212/251/346/211/213/persona.md +12 -0
  464. package/role-packs/memora/345/212/251/346/211/213/rules.md +4 -0
  465. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/manifest.json +44 -0
  466. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/persona.md +46 -0
  467. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/rules.md +15 -0
  468. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/character-sheet.md +34 -0
  469. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/core-extractor.md +37 -0
  470. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/craft-review.md +69 -0
  471. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/dialogue-craft.md +45 -0
  472. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/emotion-wave.md +46 -0
  473. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/empathy-craft.md +79 -0
  474. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/foreshadow.md +29 -0
  475. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/hotspot-mapping.md +121 -0
  476. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/idea-lever.md +42 -0
  477. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/logline-craft.md +47 -0
  478. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/longform-guard.md +64 -0
  479. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/need-finder.md +40 -0
  480. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/outline-expand.md +46 -0
  481. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/pacing-hook.md +34 -0
  482. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/polish-method.md +113 -0
  483. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/pov-discipline.md +79 -0
  484. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/project-init/SKILL.md +112 -0
  485. 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 +441 -0
  486. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/relationship-web.md +47 -0
  487. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/scene-craft.md +46 -0
  488. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/story-bible.md +60 -0
  489. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/story-structure.md +36 -0
  490. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/style-weaver.md +109 -0
  491. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/three-layer-check.md +27 -0
  492. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/world-builder.md +41 -0
  493. 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 +48 -0
  494. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/persona.md +73 -0
  495. 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 +19 -0
  496. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/api-doc-writer.md +40 -0
  497. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/doc-planner.md +42 -0
  498. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/nutrient-search.md +28 -0
  499. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/seed-finder.md +28 -0
  500. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/ssot-audit.md +34 -0
  501. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/style-guide.md +40 -0
  502. package/dist/agent/guardrail.d.ts +0 -49
  503. package/dist/agent/guardrail.d.ts.map +0 -1
  504. package/dist/agent/guardrail.js +0 -59
  505. package/dist/agent/guardrail.js.map +0 -1
  506. package/dist/agent/managers/autoConfigRefiner.d.ts +0 -39
  507. package/dist/agent/managers/autoConfigRefiner.d.ts.map +0 -1
  508. package/dist/agent/managers/autoConfigRefiner.js +0 -146
  509. package/dist/agent/managers/autoConfigRefiner.js.map +0 -1
  510. package/dist/agent/managers/configManager.d.ts +0 -209
  511. package/dist/agent/managers/configManager.d.ts.map +0 -1
  512. package/dist/agent/managers/configManager.js +0 -331
  513. package/dist/agent/managers/configManager.js.map +0 -1
  514. package/dist/agent/managers/insightExtractor.d.ts +0 -139
  515. package/dist/agent/managers/insightExtractor.d.ts.map +0 -1
  516. package/dist/agent/managers/insightExtractor.js +0 -401
  517. package/dist/agent/managers/insightExtractor.js.map +0 -1
  518. package/dist/agent/managers/memoryDecayScheduler.d.ts +0 -239
  519. package/dist/agent/managers/memoryDecayScheduler.d.ts.map +0 -1
  520. package/dist/agent/managers/memoryDecayScheduler.js +0 -413
  521. package/dist/agent/managers/memoryDecayScheduler.js.map +0 -1
  522. package/dist/agent/managers/relationBuilder.d.ts +0 -131
  523. package/dist/agent/managers/relationBuilder.d.ts.map +0 -1
  524. package/dist/agent/managers/relationBuilder.js +0 -192
  525. package/dist/agent/managers/relationBuilder.js.map +0 -1
  526. package/dist/agent/personaMatcher.d.ts +0 -29
  527. package/dist/agent/personaMatcher.d.ts.map +0 -1
  528. package/dist/agent/personaMatcher.js +0 -60
  529. package/dist/agent/personaMatcher.js.map +0 -1
  530. package/dist/agent/userFactExtractor.d.ts +0 -25
  531. package/dist/agent/userFactExtractor.d.ts.map +0 -1
  532. package/dist/agent/userFactExtractor.js +0 -88
  533. package/dist/agent/userFactExtractor.js.map +0 -1
  534. package/dist/eval/evalRunner.d.ts +0 -94
  535. package/dist/eval/evalRunner.d.ts.map +0 -1
  536. package/dist/eval/evalRunner.js +0 -141
  537. package/dist/eval/evalRunner.js.map +0 -1
  538. package/dist/eval/evalTypes.d.ts +0 -148
  539. package/dist/eval/evalTypes.d.ts.map +0 -1
  540. package/dist/eval/evalTypes.js +0 -118
  541. package/dist/eval/evalTypes.js.map +0 -1
  542. package/dist/eval/scenarios.d.ts +0 -33
  543. package/dist/eval/scenarios.d.ts.map +0 -1
  544. package/dist/eval/scenarios.js +0 -109
  545. package/dist/eval/scenarios.js.map +0 -1
  546. package/dist/llm/embedding.d.ts +0 -79
  547. package/dist/llm/embedding.d.ts.map +0 -1
  548. package/dist/llm/embedding.js +0 -184
  549. package/dist/llm/embedding.js.map +0 -1
  550. package/dist/memory/hybridMerge.d.ts +0 -50
  551. package/dist/memory/hybridMerge.d.ts.map +0 -1
  552. package/dist/memory/hybridMerge.js +0 -51
  553. package/dist/memory/hybridMerge.js.map +0 -1
  554. package/dist/memory/inMemoryRelationStore.d.ts +0 -58
  555. package/dist/memory/inMemoryRelationStore.d.ts.map +0 -1
  556. package/dist/memory/inMemoryRelationStore.js +0 -80
  557. package/dist/memory/inMemoryRelationStore.js.map +0 -1
  558. package/dist/memory/loader.d.ts +0 -51
  559. package/dist/memory/loader.d.ts.map +0 -1
  560. package/dist/memory/loader.js +0 -100
  561. package/dist/memory/loader.js.map +0 -1
  562. package/dist/memory/recall.d.ts +0 -82
  563. package/dist/memory/recall.d.ts.map +0 -1
  564. package/dist/memory/recall.js +0 -157
  565. package/dist/memory/recall.js.map +0 -1
  566. package/dist/memory/relationStore.d.ts +0 -95
  567. package/dist/memory/relationStore.d.ts.map +0 -1
  568. package/dist/memory/relationStore.js +0 -2
  569. package/dist/memory/relationStore.js.map +0 -1
  570. package/dist/memory/store.d.ts +0 -71
  571. package/dist/memory/store.d.ts.map +0 -1
  572. package/dist/memory/store.js +0 -199
  573. package/dist/memory/store.js.map +0 -1
  574. package/dist/memory/userProfile.d.ts +0 -180
  575. package/dist/memory/userProfile.d.ts.map +0 -1
  576. package/dist/memory/userProfile.js +0 -381
  577. package/dist/memory/userProfile.js.map +0 -1
  578. package/dist/memory/vectorStore.d.ts +0 -179
  579. package/dist/memory/vectorStore.d.ts.map +0 -1
  580. package/dist/memory/vectorStore.js +0 -284
  581. package/dist/memory/vectorStore.js.map +0 -1
  582. package/dist/persona/personaManager.d.ts +0 -109
  583. package/dist/persona/personaManager.d.ts.map +0 -1
  584. package/dist/persona/personaManager.js +0 -315
  585. package/dist/persona/personaManager.js.map +0 -1
  586. package/dist/persona/types.d.ts +0 -32
  587. package/dist/persona/types.d.ts.map +0 -1
  588. package/dist/persona/types.js +0 -5
@@ -1,180 +0,0 @@
1
- /**
2
- * 用户画像管理 — 实时归档 + SQLite 持久化
3
- *
4
- * 职责:
5
- * - 每轮对话结束后扫描是否产生新画像条目
6
- * - 5 个子分类:identity / preference / expertise / habit / history
7
- * - 实时归档(用户前脚说"我叫张三"→ 后脚就写入 SQLite)
8
- * - 启动时从 SQLite 全量加载(source = 'profile')
9
- * - confidence 机制:高置信度(≥0.8)直接归档,低置信度首次召回时确认
10
- *
11
- * 设计原则(architecture_philosophy_rules.md §2 永久性分级):
12
- * - 用户画像属于助手记忆,source = 'profile',每轮必召回
13
- * - 实时归档解决"重启进程短期身份丢失"的核心 bug
14
- * - 确认机制防止正则误归档污染画像
15
- * - identity / preference / expertise 实时归档,habit / history 每天归档时提炼
16
- */
17
- import type { IMemoryStorage } from '../memory/storageInterface.js';
18
- /** 用户画像子分类 */
19
- export type ProfileCategory = 'identity' | 'preference' | 'expertise' | 'habit' | 'history';
20
- /** 用户画像条目 */
21
- export interface UserProfileEntry {
22
- /** 画像唯一 ID(格式:profile:user-profile-{category}-{slug}) */
23
- id: string;
24
- /** 子分类 */
25
- category: ProfileCategory;
26
- /**
27
- * 显式字段名
28
- *
29
- * 标识同 category 下的具体字段(如 identity 下 "姓名"/"住址"/"职业"),
30
- * 用于冲突检测——同 category + 同 fieldName 视为同一字段的更新。
31
- */
32
- fieldName: string;
33
- /** 事实值(如 "姓名: 张三") */
34
- value: string;
35
- /** 来源(哪一轮对话提到) */
36
- source: string;
37
- /** 权重(0-1) */
38
- weight: number;
39
- /** 是否已确认(false 表示首次召回时需用户确认) */
40
- confirmed: boolean;
41
- /** 最后更新时间(ISO 8601) */
42
- updatedAt: string;
43
- }
44
- /** extractUserFacts 的原始提取结果 */
45
- export interface ExtractedFact {
46
- category: ProfileCategory;
47
- /**
48
- * 显式字段名
49
- *
50
- * 由提取器显式填充(如 "姓名"/"住址"/"职业"/"偏好"/"工具"/"专长"),
51
- * 冲突检测基于 category + fieldName,即使 value 格式变化(如 LLM 输出无前缀),
52
- * 仍能正确识别冲突。
53
- */
54
- fieldName: string;
55
- value: string;
56
- sourceTurn: string;
57
- /** 置信度 0-1(≥0.8 直接归档,否则标记待确认) */
58
- confidence: number;
59
- }
60
- /**
61
- * 用户画像管理器
62
- */
63
- export declare class UserProfile {
64
- private readonly index;
65
- /** 内存缓存:启动时从 SQLite 全量加载 */
66
- private cache;
67
- constructor(index: IMemoryStorage);
68
- /**
69
- * 启动时从 SQLite 加载所有已确认的画像条目
70
- *
71
- * 存储中只保存已确认的条目(confirmed = true),
72
- * 待确认条目仅存内存缓存,不写入存储。
73
- *
74
- * content 字段使用 JSON 编码存储 category + value 元数据,
75
- * 兼容旧格式(name 字段 "${category}: ${value}")作为降级路径。
76
- */
77
- load(): Promise<UserProfileEntry[]>;
78
- /**
79
- * 实时归档:将提取的用户事实写入存储
80
- *
81
- * 每轮 chat() 结束后,由 Agent 调用 extractUserFacts() 提取事实后传入。
82
- * 高置信度(≥0.8)→ 直接归档为 confirmed
83
- * 低置信度 → 标记 confirmed = false,首次召回时 Agent 向用户确认
84
- *
85
- * @param facts 由 extractUserFacts() 提取的事实列表
86
- */
87
- archiveFacts(facts: ExtractedFact[]): Promise<UserProfileEntry[]>;
88
- /**
89
- * 获取所有已确认的画像条目(system prompt 注入用)
90
- */
91
- getConfirmed(): UserProfileEntry[];
92
- /**
93
- * 获取所有待确认的画像条目(供宿主 UI 展示确认/拒绝操作)
94
- *
95
- * 待确认条目仅存内存缓存(未写入存储),进程重启后丢失。
96
- * 宿主应定期或在新对话后查询此方法,展示给用户确认。
97
- */
98
- getPending(): UserProfileEntry[];
99
- /**
100
- * 构建 system prompt 中的用户画像段
101
- *
102
- * 格式:
103
- * 【用户画像】
104
- * - 身份:张三,男,25岁,住北京
105
- * - 偏好:TypeScript, Python, VS Code
106
- * - 专长:后端开发,系统架构
107
- * - 习惯:上午工作,下午思考
108
- */
109
- buildSystemPrompt(): string;
110
- /**
111
- * 确认待确认条目(用户在对话中确认了)
112
- *
113
- * 确认后写入存储(此前仅存内存缓存)
114
- *
115
- * @param id 条目 ID
116
- */
117
- confirm(id: string): Promise<void>;
118
- /**
119
- * 拒绝待确认条目(用户在对话中否认了)
120
- *
121
- * @param id 条目 ID
122
- */
123
- reject(id: string): Promise<void>;
124
- /**
125
- * 写入单条事实到 SQLite
126
- *
127
- * 冲突解决策略:
128
- * 同分类(identity/preference/expertise/habit/history)的新事实
129
- * 会替换旧事实。因为用户画像是"当前状态"而非"历史记录"。
130
- * 例:"我叫张三" → 后续说"我叫李四" → 只保留"李四",张三被移除。
131
- *
132
- * @returns 成功写入的条目,或 null(写入失败)
133
- */
134
- private upsertFact;
135
- /**
136
- * 删除同分类同字段的旧条目(用户更新了信息)
137
- *
138
- * 当用户说"我叫李四"替换之前的"我叫张三"时,移除旧的 identity/姓名 条目。
139
- *
140
- * 冲突判定基于 `category + fieldName`:
141
- * - 新数据:fact.fieldName 由提取器显式填充,parseContentField 返回 parsed.fieldName
142
- * - 旧数据:parseContentField 降级从 value 前缀提取 fieldName(兼容历史持久化数据)
143
- * - 同 category + 同 fieldName + 不同 value = 用户更新了该字段,删除旧条目
144
- *
145
- * 构建 `category:fieldName` → Memory[] 的 Map 索引,冲突检测从 O(n*m) 降为 O(m)。
146
- *
147
- * @param fact 当前提取到的新事实
148
- */
149
- private removeConflictingEntries;
150
- /**
151
- * 将 UserProfileEntry 转为 Memory(用于写入 SQLite)
152
- *
153
- * content 字段使用 JSON 编码存储 category + value + fieldName 元数据,
154
- * name 字段为固定可读标签,category 通过 content 的 JSON 元数据显式编码。
155
- * 确认状态:仅已确认条目调用此方法(待确认条目不写入存储)
156
- */
157
- private toMemory;
158
- /**
159
- * 从 content 字段解析 category / value / fieldName
160
- *
161
- * 优先从 content JSON 解码元数据,降级到旧格式 name 字段解析,
162
- * 确保已有 SQLite 数据(旧格式 name="${category}: ${value}")兼容加载。
163
- *
164
- * fieldName 解析优先级:
165
- * 1. content JSON 含 fieldName → 直接返回(新数据)
166
- * 2. content JSON 无 fieldName → 从 value 前缀提取(旧 JSON 数据,无 fieldName 字段)
167
- * 3. name 字段旧格式 → 从 value 前缀提取
168
- * 4. 最终降级 → fieldName = 'unknown'(无法识别字段名,冲突检测会跳过)
169
- *
170
- * @param content Memory 的 content 字段(新格式为 JSON,旧格式为纯 value)
171
- * @param name Memory 的 name 字段(旧格式为 "${category}: ${value}")
172
- * @returns 解析出的 category / value / fieldName
173
- */
174
- private parseContentField;
175
- /**
176
- * 分类标签
177
- */
178
- private categoryLabel;
179
- }
180
- //# sourceMappingURL=userProfile.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"userProfile.d.ts","sourceRoot":"","sources":["../../src/memory/userProfile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAOnE,cAAc;AACd,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;AAqD5F,aAAa;AACb,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,EAAE,EAAE,MAAM,CAAC;IACX,UAAU;IACV,QAAQ,EAAE,eAAe,CAAC;IAC1B;;;;;OAKG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,+BAA+B;AAC/B,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,eAAe,CAAC;IAC1B;;;;;;OAMG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,WAAW;IAIV,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHlC,4BAA4B;IAC5B,OAAO,CAAC,KAAK,CAA4C;gBAE5B,KAAK,EAAE,cAAc;IAElD;;;;;;;;OAQG;IACG,IAAI,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAmCzC;;;;;;;;OAQG;IACG,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAYvE;;OAEG;IACH,YAAY,IAAI,gBAAgB,EAAE;IAIlC;;;;;OAKG;IACH,UAAU,IAAI,gBAAgB,EAAE;IAIhC;;;;;;;;;OASG;IACH,iBAAiB,IAAI,MAAM;IA0B3B;;;;;;OAMG;IACG,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxC;;;;OAIG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAavC;;;;;;;;;OASG;YACW,UAAU;IAoDxB;;;;;;;;;;;;;OAaG;YACW,wBAAwB;IA2CtC;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;IAmBhB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,iBAAiB;IAoCzB;;OAEG;IACH,OAAO,CAAC,aAAa;CAUtB"}
@@ -1,381 +0,0 @@
1
- import { SOURCE_LABELS } from '../memory/types.js';
2
- import { logger } from '../logging/logger.js';
3
- import { slugify } from '../utils/strings.js';
4
- import { toError } from '../utils/toError.js';
5
- import { nowIso } from '../utils/time.js';
6
- /** 有效的画像分类列表(模块级常量,消除 parseContentField 内 2 次重复数组) */
7
- const VALID_PROFILE_CATEGORIES = ['identity', 'preference', 'expertise', 'habit', 'history'];
8
- /**
9
- * 从 value 字符串前缀提取字段名(兼容旧数据)
10
- *
11
- * 旧数据 value 格式为 "字段名: 值"(如 "姓名: 张三"),fieldName 未显式存储。
12
- * 本函数从 value 前缀提取字段名,用于:
13
- * - parseContentField 降级路径(旧 JSON 数据无 fieldName 字段)
14
- * - removeConflictingEntries 兼容旧持久化数据
15
- *
16
- * @param value 事实值(可能含 "字段名: " 前缀)
17
- * @returns 提取的字段名;无法提取时返回 'unknown'(冲突检测会跳过该条目)
18
- */
19
- function extractFieldNameFromValue(value) {
20
- const prefix = (value.split(':')[0] ?? '').trim();
21
- return prefix || 'unknown';
22
- }
23
- /**
24
- * 类型守卫:检查未知对象是否为合法的 profile content 结构
25
- *
26
- * 替代 `as { category?: string; value?: string }` 断言,
27
- * 与 lockManager/projectRegistry 的类型守卫风格一致。
28
- *
29
- * fieldName 为可选字段(旧数据可能缺失),不参与结构校验,
30
- * 由 parseContentField 决定降级策略。
31
- *
32
- * @param obj 从 JSON.parse 得到的未知对象
33
- * @returns obj 是否为 { category: ProfileCategory; value: string } 结构
34
- */
35
- function isProfileContent(obj) {
36
- if (typeof obj !== 'object' || obj === null)
37
- return false;
38
- const record = obj;
39
- return (typeof record.category === 'string' &&
40
- typeof record.value === 'string' &&
41
- VALID_PROFILE_CATEGORIES.includes(record.category));
42
- }
43
- /**
44
- * 用户画像管理器
45
- */
46
- export class UserProfile {
47
- index;
48
- /** 内存缓存:启动时从 SQLite 全量加载 */
49
- cache = new Map();
50
- constructor(index) {
51
- this.index = index;
52
- }
53
- /**
54
- * 启动时从 SQLite 加载所有已确认的画像条目
55
- *
56
- * 存储中只保存已确认的条目(confirmed = true),
57
- * 待确认条目仅存内存缓存,不写入存储。
58
- *
59
- * content 字段使用 JSON 编码存储 category + value 元数据,
60
- * 兼容旧格式(name 字段 "${category}: ${value}")作为降级路径。
61
- */
62
- async load() {
63
- const memories = this.index.getBySource(SOURCE_LABELS.PROFILE);
64
- const entries = [];
65
- for (const m of memories) {
66
- // 优先从 content JSON 解码,降级到旧格式 name 解析
67
- const parsed = this.parseContentField(m.content, m.name);
68
- const entry = {
69
- id: m.id,
70
- category: parsed.category,
71
- // fieldName 由 parseContentField 统一填充(新数据直接读,旧数据从 value 前缀降级提取)
72
- fieldName: parsed.fieldName,
73
- value: parsed.value,
74
- source: '',
75
- weight: m.score,
76
- // M10 修复:从 content 还原确认态(旧数据无 confirmed 字段 → 默认已确认,向后兼容)
77
- confirmed: parsed.confirmed,
78
- updatedAt: m.accessedAt,
79
- };
80
- this.cache.set(entry.id, entry);
81
- entries.push(entry);
82
- }
83
- logger.info({
84
- total: entries.length,
85
- confirmed: entries.filter((e) => e.confirmed).length,
86
- pending: entries.filter((e) => !e.confirmed).length,
87
- }, '用户画像加载完成');
88
- return entries;
89
- }
90
- /**
91
- * 实时归档:将提取的用户事实写入存储
92
- *
93
- * 每轮 chat() 结束后,由 Agent 调用 extractUserFacts() 提取事实后传入。
94
- * 高置信度(≥0.8)→ 直接归档为 confirmed
95
- * 低置信度 → 标记 confirmed = false,首次召回时 Agent 向用户确认
96
- *
97
- * @param facts 由 extractUserFacts() 提取的事实列表
98
- */
99
- async archiveFacts(facts) {
100
- // 返回写入的条目列表(供 Agent 发射 memoryAdded 事件)
101
- if (facts.length === 0)
102
- return [];
103
- const written = [];
104
- for (const fact of facts) {
105
- const entry = await this.upsertFact(fact);
106
- if (entry)
107
- written.push(entry);
108
- }
109
- return written;
110
- }
111
- /**
112
- * 获取所有已确认的画像条目(system prompt 注入用)
113
- */
114
- getConfirmed() {
115
- return Array.from(this.cache.values()).filter((e) => e.confirmed);
116
- }
117
- /**
118
- * 获取所有待确认的画像条目(供宿主 UI 展示确认/拒绝操作)
119
- *
120
- * 待确认条目仅存内存缓存(未写入存储),进程重启后丢失。
121
- * 宿主应定期或在新对话后查询此方法,展示给用户确认。
122
- */
123
- getPending() {
124
- return Array.from(this.cache.values()).filter((e) => !e.confirmed);
125
- }
126
- /**
127
- * 构建 system prompt 中的用户画像段
128
- *
129
- * 格式:
130
- * 【用户画像】
131
- * - 身份:张三,男,25岁,住北京
132
- * - 偏好:TypeScript, Python, VS Code
133
- * - 专长:后端开发,系统架构
134
- * - 习惯:上午工作,下午思考
135
- */
136
- buildSystemPrompt() {
137
- const confirmed = this.getConfirmed();
138
- if (confirmed.length === 0)
139
- return '';
140
- // 按分类聚合
141
- const grouped = new Map();
142
- for (const e of confirmed) {
143
- const list = grouped.get(e.category) ?? [];
144
- list.push(e.value
145
- // "姓名: 张三" → "张三"
146
- .replace(/^[^:]+:\s*/, ''));
147
- grouped.set(e.category, list);
148
- }
149
- const lines = ['【用户画像】'];
150
- for (const [cat, vals] of grouped) {
151
- const label = this.categoryLabel(cat);
152
- lines.push(`- ${label}:${vals.join(',')}`);
153
- }
154
- return lines.join('\n');
155
- }
156
- /**
157
- * 确认待确认条目(用户在对话中确认了)
158
- *
159
- * 确认后写入存储(此前仅存内存缓存)
160
- *
161
- * @param id 条目 ID
162
- */
163
- async confirm(id) {
164
- const entry = this.cache.get(id);
165
- if (!entry)
166
- return;
167
- entry.confirmed = true;
168
- // 确认后写入存储(此前仅存内存缓存)
169
- const memory = this.toMemory(entry);
170
- this.index.upsert(memory);
171
- logger.info({ id, category: entry.category, value: entry.value }, '用户画像条目已确认');
172
- }
173
- /**
174
- * 拒绝待确认条目(用户在对话中否认了)
175
- *
176
- * @param id 条目 ID
177
- */
178
- async reject(id) {
179
- this.cache.delete(id);
180
- try {
181
- this.index.delete(id);
182
- }
183
- catch (err) {
184
- // 索引中可能不存在(低置信度条目可能未写入):记录 debug 日志便于排查
185
- logger.debug({ id, err: toError(err).message }, '索引删除失败(条目可能未写入索引)');
186
- }
187
- logger.info({ id }, '用户画像条目已删除(用户否认)');
188
- }
189
- // ── 私有方法 ──────────────────────────────────────
190
- /**
191
- * 写入单条事实到 SQLite
192
- *
193
- * 冲突解决策略:
194
- * 同分类(identity/preference/expertise/habit/history)的新事实
195
- * 会替换旧事实。因为用户画像是"当前状态"而非"历史记录"。
196
- * 例:"我叫张三" → 后续说"我叫李四" → 只保留"李四",张三被移除。
197
- *
198
- * @returns 成功写入的条目,或 null(写入失败)
199
- */
200
- async upsertFact(fact) {
201
- // M3 修复:id 维度纳入 fieldName,与冲突检测维度(category+fieldName)一致。
202
- // 否则不同 fieldName 经 slugify 撞车时分配同一 id → 后写覆盖前写 → 跨字段记忆静默丢失。
203
- const id = `profile:user-profile-${fact.category}-${slugify(fact.fieldName)}-${slugify(fact.value)}`;
204
- // 同分类冲突解决 — 删除旧条目(相同子分类 + 不同值 = 用户更新了信息)
205
- await this.removeConflictingEntries(fact);
206
- const entry = {
207
- id,
208
- category: fact.category,
209
- // 显式存储 fieldName,供冲突检测使用
210
- fieldName: fact.fieldName,
211
- value: fact.value,
212
- source: fact.sourceTurn,
213
- weight: 1.0,
214
- confirmed: fact.confidence >= 0.8, // 高置信度直接确认
215
- updatedAt: nowIso(),
216
- };
217
- // M2 修复:已确认条目不因同 value 的低置信度重提取而降级。
218
- // 同一 id 若缓存中已是 confirmed=true,保留确认态(用户已确认该事实,低置信重提取不应撤销)。
219
- const existingInCache = this.cache.get(id);
220
- if (existingInCache?.confirmed && !entry.confirmed) {
221
- entry.confirmed = true;
222
- }
223
- try {
224
- // M10 修复:待确认条目也持久化(content 含 confirmed=false 标记),
225
- // 重启后由 load() 恢复为 pending,消除"确认前无兜底"的不可逆损失点。
226
- const memory = this.toMemory(entry);
227
- this.index.upsert(memory);
228
- this.cache.set(id, entry);
229
- if (entry.confirmed) {
230
- logger.info({ id, category: fact.category, value: fact.value, confidence: fact.confidence }, '用户画像实时归档(已确认)');
231
- }
232
- else {
233
- logger.info({ id, category: fact.category, value: fact.value, confidence: fact.confidence }, '用户画像待确认');
234
- }
235
- return entry;
236
- }
237
- catch (err) {
238
- logger.warn({ err, id, category: fact.category }, '用户画像归档失败');
239
- return null;
240
- }
241
- }
242
- /**
243
- * 删除同分类同字段的旧条目(用户更新了信息)
244
- *
245
- * 当用户说"我叫李四"替换之前的"我叫张三"时,移除旧的 identity/姓名 条目。
246
- *
247
- * 冲突判定基于 `category + fieldName`:
248
- * - 新数据:fact.fieldName 由提取器显式填充,parseContentField 返回 parsed.fieldName
249
- * - 旧数据:parseContentField 降级从 value 前缀提取 fieldName(兼容历史持久化数据)
250
- * - 同 category + 同 fieldName + 不同 value = 用户更新了该字段,删除旧条目
251
- *
252
- * 构建 `category:fieldName` → Memory[] 的 Map 索引,冲突检测从 O(n*m) 降为 O(m)。
253
- *
254
- * @param fact 当前提取到的新事实
255
- */
256
- async removeConflictingEntries(fact) {
257
- try {
258
- const existing = this.index.getBySource(SOURCE_LABELS.PROFILE);
259
- // 构建 `category:fieldName` → Memory[] 的 Map 索引,冲突检测降为 O(m)
260
- const fieldIndex = new Map();
261
- for (const m of existing) {
262
- const parsed = this.parseContentField(m.content, m.name);
263
- if (parsed.category !== fact.category)
264
- continue;
265
- if (!parsed.fieldName)
266
- continue;
267
- const key = `${parsed.category}:${parsed.fieldName}`;
268
- const list = fieldIndex.get(key);
269
- if (list) {
270
- list.push(m);
271
- }
272
- else {
273
- fieldIndex.set(key, [m]);
274
- }
275
- }
276
- // 在索引中查找同 category + 同 fieldName 的冲突条目
277
- const conflictKey = `${fact.category}:${fact.fieldName}`;
278
- const conflicts = fieldIndex.get(conflictKey);
279
- if (conflicts) {
280
- for (const m of conflicts) {
281
- const parsed = this.parseContentField(m.content, m.name);
282
- if (parsed.value !== fact.value) {
283
- this.index.delete(m.id);
284
- // 同步删除内存缓存中的旧条目,避免 storage 与 cache 不一致
285
- // 导致 getConfirmed() 仍返回已被替换的旧值
286
- this.cache.delete(m.id);
287
- logger.info({ oldId: m.id, oldValue: parsed.value, newValue: fact.value, fieldName: fact.fieldName }, '用户画像冲突已解决');
288
- }
289
- }
290
- }
291
- }
292
- catch (err) {
293
- // 冲突解决失败不阻塞写入
294
- logger.debug({ err: toError(err).message }, '用户画像冲突解决失败');
295
- }
296
- }
297
- /**
298
- * 将 UserProfileEntry 转为 Memory(用于写入 SQLite)
299
- *
300
- * content 字段使用 JSON 编码存储 category + value + fieldName 元数据,
301
- * name 字段为固定可读标签,category 通过 content 的 JSON 元数据显式编码。
302
- * 确认状态:仅已确认条目调用此方法(待确认条目不写入存储)
303
- */
304
- toMemory(entry) {
305
- const now = nowIso();
306
- return {
307
- id: entry.id,
308
- // 序列化 fieldName,与 parseContentField 反序列化对称
309
- content: JSON.stringify({
310
- category: entry.category,
311
- value: entry.value,
312
- fieldName: entry.fieldName,
313
- confirmed: entry.confirmed,
314
- }),
315
- source: SOURCE_LABELS.PROFILE,
316
- name: `用户画像-${entry.category}`,
317
- createdAt: now,
318
- accessedAt: entry.updatedAt || now,
319
- score: entry.weight,
320
- };
321
- }
322
- /**
323
- * 从 content 字段解析 category / value / fieldName
324
- *
325
- * 优先从 content JSON 解码元数据,降级到旧格式 name 字段解析,
326
- * 确保已有 SQLite 数据(旧格式 name="${category}: ${value}")兼容加载。
327
- *
328
- * fieldName 解析优先级:
329
- * 1. content JSON 含 fieldName → 直接返回(新数据)
330
- * 2. content JSON 无 fieldName → 从 value 前缀提取(旧 JSON 数据,无 fieldName 字段)
331
- * 3. name 字段旧格式 → 从 value 前缀提取
332
- * 4. 最终降级 → fieldName = 'unknown'(无法识别字段名,冲突检测会跳过)
333
- *
334
- * @param content Memory 的 content 字段(新格式为 JSON,旧格式为纯 value)
335
- * @param name Memory 的 name 字段(旧格式为 "${category}: ${value}")
336
- * @returns 解析出的 category / value / fieldName
337
- */
338
- parseContentField(content, name) {
339
- // 优先尝试 JSON 解码(新格式)
340
- try {
341
- const parsed = JSON.parse(content);
342
- if (isProfileContent(parsed)) {
343
- // 新数据含 fieldName 直接返回;旧 JSON 数据无 fieldName 时从 value 前缀降级提取
344
- const fieldName = parsed.fieldName ?? extractFieldNameFromValue(parsed.value);
345
- // M10:confirmed 缺失(旧数据)默认 true,向后兼容;新数据按实际标记还原
346
- const confirmed = typeof parsed.confirmed === 'boolean' ? parsed.confirmed : true;
347
- return { category: parsed.category, value: parsed.value, fieldName, confirmed };
348
- }
349
- }
350
- catch {
351
- // content 不是 JSON,降级到旧格式
352
- }
353
- // 降级:从 name 字段解析(旧格式 "${category}: ${value}")
354
- const idx = name.indexOf(':');
355
- if (idx >= 0) {
356
- const category = name.slice(0, idx).trim();
357
- if (VALID_PROFILE_CATEGORIES.includes(category)) {
358
- const value = name.slice(idx + 1).trim() || content;
359
- // 旧格式数据无 fieldName,从 value 前缀提取(如 "姓名: 张三" → "姓名")
360
- return { category, value, fieldName: extractFieldNameFromValue(value), confirmed: true };
361
- }
362
- }
363
- // 最终降级:默认 history 分类(中性默认,避免 identity 高敏感类别污染画像)
364
- // fieldName = 'unknown':无法识别字段名,removeConflictingEntries 会跳过该条目
365
- return { category: 'history', value: content, fieldName: 'unknown', confirmed: true };
366
- }
367
- /**
368
- * 分类标签
369
- */
370
- categoryLabel(cat) {
371
- const labels = {
372
- identity: '身份',
373
- preference: '偏好',
374
- expertise: '专长',
375
- habit: '习惯',
376
- history: '历史',
377
- };
378
- return labels[cat];
379
- }
380
- }
381
- //# sourceMappingURL=userProfile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"userProfile.js","sourceRoot":"","sources":["../../src/memory/userProfile.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,aAAa,EAAe,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAKzC,sDAAsD;AACtD,MAAM,wBAAwB,GAAsB,CAAC,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAEhH;;;;;;;;;;GAUG;AACH,SAAS,yBAAyB,CAAC,KAAa;IAC9C,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,OAAO,MAAM,IAAI,SAAS,CAAC;AAC7B,CAAC;AAYD;;;;;;;;;;;GAWG;AACH,SAAS,gBAAgB,CAAC,GAAY;IACpC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC1D,MAAM,MAAM,GAAG,GAA8B,CAAC;IAC9C,OAAO,CACL,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;QACnC,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;QAChC,wBAAwB,CAAC,QAAQ,CAAC,MAAM,CAAC,QAA2B,CAAC,CACtE,CAAC;AACJ,CAAC;AA4CD;;GAEG;AACH,MAAM,OAAO,WAAW;IAIO;IAH7B,4BAA4B;IACpB,KAAK,GAAkC,IAAI,GAAG,EAAE,CAAC;IAEzD,YAA6B,KAAqB;QAArB,UAAK,GAAL,KAAK,CAAgB;IAAG,CAAC;IAEtD;;;;;;;;OAQG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAuB,EAAE,CAAC;QAEvC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YAC3B,qCAAqC;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACzD,MAAM,KAAK,GAAqB;gBAC9B,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,+DAA+D;gBAC/D,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,CAAC,CAAC,KAAK;gBACf,yDAAyD;gBACzD,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,SAAS,EAAE,CAAC,CAAC,UAAU;aACxB,CAAC;YACA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAED,MAAM,CAAC,IAAI,CACT;YACE,KAAK,EAAE,OAAO,CAAC,MAAM;YACrB,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM;YACpD,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM;SACpD,EACD,UAAU,CACX,CAAC;QAEF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,YAAY,CAAC,KAAsB;QACvC,uCAAuC;QACvC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAElC,MAAM,OAAO,GAAuB,EAAE,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,KAAK;gBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACpE,CAAC;IAED;;;;;OAKG;IACH,UAAU;QACR,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACrE,CAAC;IAED;;;;;;;;;OASG;IACH,iBAAiB;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAEtC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEtC,QAAQ;QACR,MAAM,OAAO,GAAG,IAAI,GAAG,EAA6B,CAAC;QACrD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC3C,IAAI,CAAC,IAAI,CACP,CAAC,CAAC,KAAK;gBACL,kBAAkB;iBACjB,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAC7B,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzB,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;QACvB,oBAAoB;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,WAAW,CAAC,CAAC;IACjF,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtB,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,wCAAwC;YACxC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,mBAAmB,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAC;IACzC,CAAC;IAED,iDAAiD;IAEjD;;;;;;;;;OASG;IACK,KAAK,CAAC,UAAU,CAAC,IAAmB;QAC1C,yDAAyD;QACzD,4DAA4D;QAC5D,MAAM,EAAE,GAAG,wBAAwB,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAErG,yCAAyC;QACzC,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAE1C,MAAM,KAAK,GAAqB;YAC9B,EAAE;YACF,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,yBAAyB;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,UAAU;YACvB,MAAM,EAAE,GAAG;YACX,SAAS,EAAE,IAAI,CAAC,UAAU,IAAI,GAAG,EAAE,WAAW;YAC9C,SAAS,EAAE,MAAM,EAAE;SACpB,CAAC;QAEF,oCAAoC;QACpC,0DAA0D;QAC1D,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3C,IAAI,eAAe,EAAE,SAAS,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACnD,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,IAAI,CAAC;YACH,kDAAkD;YAClD,6CAA6C;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAE1B,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,CACT,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,EAC/E,eAAe,CAChB,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CACT,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,EAC/E,SAAS,CACV,CAAC;YACJ,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,UAAU,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;OAaG;IACK,KAAK,CAAC,wBAAwB,CAAC,IAAmB;QACxD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAE/D,0DAA0D;YAC1D,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoB,CAAC;YAC/C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBACzD,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ;oBAAE,SAAS;gBAChD,IAAI,CAAC,MAAM,CAAC,SAAS;oBAAE,SAAS;gBAChC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrD,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACjC,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACf,CAAC;qBAAM,CAAC;oBACN,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YAED,uCAAuC;YACvC,MAAM,WAAW,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACzD,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC9C,IAAI,SAAS,EAAE,CAAC;gBACd,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;oBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;oBACzD,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;wBAChC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACxB,uCAAuC;wBACvC,+BAA+B;wBAC/B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACxB,MAAM,CAAC,IAAI,CACT,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EACxF,WAAW,CACZ,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,cAAc;YACd,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACK,QAAQ,CAAC,KAAuB;QACtC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,OAAO;YACL,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,2CAA2C;YAC3C,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;gBACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B,CAAC;YACF,MAAM,EAAE,aAAa,CAAC,OAAO;YAC7B,IAAI,EAAE,QAAQ,KAAK,CAAC,QAAQ,EAAE;YAC9B,SAAS,EAAE,GAAG;YACd,UAAU,EAAE,KAAK,CAAC,SAAS,IAAI,GAAG;YAClC,KAAK,EAAE,KAAK,CAAC,MAAM;SACpB,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACK,iBAAiB,CAAC,OAAe,EAAE,IAAY;QAMrD,oBAAoB;QACpB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7B,2DAA2D;gBAC3D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,yBAAyB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC9E,+CAA+C;gBAC/C,MAAM,SAAS,GAAG,OAAO,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;gBAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;YAClF,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;QAED,8CAA8C;QAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAqB,CAAC;YAC9D,IAAI,wBAAwB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC;gBACpD,mDAAmD;gBACnD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,yBAAyB,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAC3F,CAAC;QACH,CAAC;QAED,iDAAiD;QACjD,gEAAgE;QAChE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACxF,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,GAAoB;QACxC,MAAM,MAAM,GAAoC;YAC9C,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,IAAI;SACd,CAAC;QACF,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;CACF"}