a2a-memory 0.11.4 → 0.11.6

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 (262) hide show
  1. package/LICENSE +7 -19
  2. package/README.md +1 -1
  3. package/dist/a2a/client.js +1 -252
  4. package/dist/a2a/discovery.js +1 -115
  5. package/dist/a2a/index.js +1 -8
  6. package/dist/a2a/types.js +1 -42
  7. package/dist/adapters/anthropic.js +1 -117
  8. package/dist/chunking/chunker.js +1 -163
  9. package/dist/claude/sync.js +1 -294
  10. package/dist/cli/commands/add.js +1 -80
  11. package/dist/cli/commands/claude-sync.js +1 -70
  12. package/dist/cli/commands/cleanup.js +1 -83
  13. package/dist/cli/commands/config.js +1 -73
  14. package/dist/cli/commands/edit.js +1 -69
  15. package/dist/cli/commands/embed.js +1 -92
  16. package/dist/cli/commands/extract.js +1 -103
  17. package/dist/cli/commands/health.js +1 -105
  18. package/dist/cli/commands/list.js +1 -49
  19. package/dist/cli/commands/migrate-chunks.js +1 -205
  20. package/dist/cli/commands/migrate-file-refs.js +1 -183
  21. package/dist/cli/commands/proficiency.js +1 -146
  22. package/dist/cli/commands/rm.js +1 -64
  23. package/dist/cli/commands/search.js +1 -89
  24. package/dist/cli/commands/setup-wizard.js +1 -387
  25. package/dist/cli/commands/setup.js +1 -170
  26. package/dist/cli/commands/skill.js +1 -151
  27. package/dist/cli/commands/status.js +1 -70
  28. package/dist/cli/commands/sync.js +1 -202
  29. package/dist/cli/commands/team.js +1 -142
  30. package/dist/cli/index.js +1 -87
  31. package/dist/config/manager.js +1 -372
  32. package/dist/db/database.d.ts +10 -1
  33. package/dist/db/database.js +1 -1367
  34. package/dist/embedding/e5-provider.js +1 -147
  35. package/dist/embedding/index.js +1 -34
  36. package/dist/embedding/local-provider.js +1 -157
  37. package/dist/embedding/openai-provider.js +1 -92
  38. package/dist/embedding/quantization.js +1 -89
  39. package/dist/extraction/dedup-manager.js +1 -161
  40. package/dist/extraction/emotion-filter.js +1 -33
  41. package/dist/extraction/extractor.js +1 -642
  42. package/dist/extraction/file-reference.js +1 -77
  43. package/dist/extraction/filter.js +1 -85
  44. package/dist/extraction/scorer.js +1 -142
  45. package/dist/extraction/similarity.js +1 -85
  46. package/dist/hooks/client-factory.js +1 -44
  47. package/dist/hooks/post-tool-use.js +1 -470
  48. package/dist/hooks/pre-compact.js +1 -209
  49. package/dist/hooks/session-end.d.ts +1 -0
  50. package/dist/hooks/session-end.js +1 -623
  51. package/dist/hooks/session-start.js +1 -549
  52. package/dist/hooks/shared.js +1 -110
  53. package/dist/hooks/user-prompt-submit.js +1 -316
  54. package/dist/i18n/index.js +1 -2
  55. package/dist/i18n/messages.js +1 -150
  56. package/dist/index.js +1 -43
  57. package/dist/lifecycle/cleanup-scheduler.js +1 -137
  58. package/dist/lifecycle/cleanup.js +1 -116
  59. package/dist/lifecycle/index.js +1 -13
  60. package/dist/lifecycle/quality-scorer.js +1 -46
  61. package/dist/lifecycle/tiering.js +1 -246
  62. package/dist/llm/client.js +1 -226
  63. package/dist/llm/index.js +1 -5
  64. package/dist/proficiency/actr-engine.js +1 -106
  65. package/dist/proficiency/detection.js +1 -77
  66. package/dist/proficiency/index.js +1 -9
  67. package/dist/proficiency/tracker.js +1 -173
  68. package/dist/proficiency/types.js +1 -8
  69. package/dist/providers/adapters.js +1 -140
  70. package/dist/providers/detector.js +1 -57
  71. package/dist/search/adaptive-router.js +1 -93
  72. package/dist/search/index.js +1 -9
  73. package/dist/search/ranker.js +1 -171
  74. package/dist/search/reranker.js +1 -155
  75. package/dist/session/parser.js +1 -130
  76. package/dist/skill/evaluator.js +1 -509
  77. package/dist/skill/index.js +1 -7
  78. package/dist/skill/types.js +1 -7
  79. package/dist/sync/client.d.ts +1 -0
  80. package/dist/sync/client.js +1 -597
  81. package/dist/sync/encryption.js +1 -203
  82. package/dist/sync/index.js +1 -12
  83. package/dist/sync/queue.js +1 -199
  84. package/dist/sync/scheduler.js +1 -140
  85. package/dist/sync/synchronizer.js +1 -241
  86. package/dist/sync/team-synchronizer.js +1 -204
  87. package/dist/sync/vector-clock.js +1 -70
  88. package/dist/types/index.d.ts +2 -1
  89. package/dist/types/index.js +1 -131
  90. package/dist/utils/keychain.js +1 -170
  91. package/dist/utils/logger.js +1 -128
  92. package/package.json +14 -10
  93. package/dist/a2a/client.d.ts.map +0 -1
  94. package/dist/a2a/client.js.map +0 -1
  95. package/dist/a2a/discovery.d.ts.map +0 -1
  96. package/dist/a2a/discovery.js.map +0 -1
  97. package/dist/a2a/index.d.ts.map +0 -1
  98. package/dist/a2a/index.js.map +0 -1
  99. package/dist/a2a/types.d.ts.map +0 -1
  100. package/dist/a2a/types.js.map +0 -1
  101. package/dist/adapters/anthropic.d.ts.map +0 -1
  102. package/dist/adapters/anthropic.js.map +0 -1
  103. package/dist/chunking/chunker.d.ts.map +0 -1
  104. package/dist/chunking/chunker.js.map +0 -1
  105. package/dist/claude/sync.d.ts.map +0 -1
  106. package/dist/claude/sync.js.map +0 -1
  107. package/dist/cli/commands/add.d.ts.map +0 -1
  108. package/dist/cli/commands/add.js.map +0 -1
  109. package/dist/cli/commands/claude-sync.d.ts.map +0 -1
  110. package/dist/cli/commands/claude-sync.js.map +0 -1
  111. package/dist/cli/commands/cleanup.d.ts.map +0 -1
  112. package/dist/cli/commands/cleanup.js.map +0 -1
  113. package/dist/cli/commands/config.d.ts.map +0 -1
  114. package/dist/cli/commands/config.js.map +0 -1
  115. package/dist/cli/commands/edit.d.ts.map +0 -1
  116. package/dist/cli/commands/edit.js.map +0 -1
  117. package/dist/cli/commands/embed.d.ts.map +0 -1
  118. package/dist/cli/commands/embed.js.map +0 -1
  119. package/dist/cli/commands/extract.d.ts.map +0 -1
  120. package/dist/cli/commands/extract.js.map +0 -1
  121. package/dist/cli/commands/health.d.ts.map +0 -1
  122. package/dist/cli/commands/health.js.map +0 -1
  123. package/dist/cli/commands/list.d.ts.map +0 -1
  124. package/dist/cli/commands/list.js.map +0 -1
  125. package/dist/cli/commands/migrate-chunks.d.ts.map +0 -1
  126. package/dist/cli/commands/migrate-chunks.js.map +0 -1
  127. package/dist/cli/commands/migrate-file-refs.d.ts.map +0 -1
  128. package/dist/cli/commands/migrate-file-refs.js.map +0 -1
  129. package/dist/cli/commands/proficiency.d.ts.map +0 -1
  130. package/dist/cli/commands/proficiency.js.map +0 -1
  131. package/dist/cli/commands/rm.d.ts.map +0 -1
  132. package/dist/cli/commands/rm.js.map +0 -1
  133. package/dist/cli/commands/search.d.ts.map +0 -1
  134. package/dist/cli/commands/search.js.map +0 -1
  135. package/dist/cli/commands/setup-wizard.d.ts.map +0 -1
  136. package/dist/cli/commands/setup-wizard.js.map +0 -1
  137. package/dist/cli/commands/setup.d.ts.map +0 -1
  138. package/dist/cli/commands/setup.js.map +0 -1
  139. package/dist/cli/commands/skill.d.ts.map +0 -1
  140. package/dist/cli/commands/skill.js.map +0 -1
  141. package/dist/cli/commands/status.d.ts.map +0 -1
  142. package/dist/cli/commands/status.js.map +0 -1
  143. package/dist/cli/commands/sync.d.ts.map +0 -1
  144. package/dist/cli/commands/sync.js.map +0 -1
  145. package/dist/cli/commands/team.d.ts.map +0 -1
  146. package/dist/cli/commands/team.js.map +0 -1
  147. package/dist/cli/index.d.ts.map +0 -1
  148. package/dist/cli/index.js.map +0 -1
  149. package/dist/config/manager.d.ts.map +0 -1
  150. package/dist/config/manager.js.map +0 -1
  151. package/dist/db/database.d.ts.map +0 -1
  152. package/dist/db/database.js.map +0 -1
  153. package/dist/embedding/e5-provider.d.ts.map +0 -1
  154. package/dist/embedding/e5-provider.js.map +0 -1
  155. package/dist/embedding/index.d.ts.map +0 -1
  156. package/dist/embedding/index.js.map +0 -1
  157. package/dist/embedding/local-provider.d.ts.map +0 -1
  158. package/dist/embedding/local-provider.js.map +0 -1
  159. package/dist/embedding/openai-provider.d.ts.map +0 -1
  160. package/dist/embedding/openai-provider.js.map +0 -1
  161. package/dist/embedding/quantization.d.ts.map +0 -1
  162. package/dist/embedding/quantization.js.map +0 -1
  163. package/dist/extraction/dedup-manager.d.ts.map +0 -1
  164. package/dist/extraction/dedup-manager.js.map +0 -1
  165. package/dist/extraction/emotion-filter.d.ts.map +0 -1
  166. package/dist/extraction/emotion-filter.js.map +0 -1
  167. package/dist/extraction/extractor.d.ts.map +0 -1
  168. package/dist/extraction/extractor.js.map +0 -1
  169. package/dist/extraction/file-reference.d.ts.map +0 -1
  170. package/dist/extraction/file-reference.js.map +0 -1
  171. package/dist/extraction/filter.d.ts.map +0 -1
  172. package/dist/extraction/filter.js.map +0 -1
  173. package/dist/extraction/scorer.d.ts.map +0 -1
  174. package/dist/extraction/scorer.js.map +0 -1
  175. package/dist/extraction/similarity.d.ts.map +0 -1
  176. package/dist/extraction/similarity.js.map +0 -1
  177. package/dist/hooks/client-factory.d.ts.map +0 -1
  178. package/dist/hooks/client-factory.js.map +0 -1
  179. package/dist/hooks/post-tool-use.d.ts.map +0 -1
  180. package/dist/hooks/post-tool-use.js.map +0 -1
  181. package/dist/hooks/pre-compact.d.ts.map +0 -1
  182. package/dist/hooks/pre-compact.js.map +0 -1
  183. package/dist/hooks/session-end.d.ts.map +0 -1
  184. package/dist/hooks/session-end.js.map +0 -1
  185. package/dist/hooks/session-start.d.ts.map +0 -1
  186. package/dist/hooks/session-start.js.map +0 -1
  187. package/dist/hooks/shared.d.ts.map +0 -1
  188. package/dist/hooks/shared.js.map +0 -1
  189. package/dist/hooks/user-prompt-submit.d.ts.map +0 -1
  190. package/dist/hooks/user-prompt-submit.js.map +0 -1
  191. package/dist/i18n/index.d.ts.map +0 -1
  192. package/dist/i18n/index.js.map +0 -1
  193. package/dist/i18n/messages.d.ts.map +0 -1
  194. package/dist/i18n/messages.js.map +0 -1
  195. package/dist/index.d.ts.map +0 -1
  196. package/dist/index.js.map +0 -1
  197. package/dist/lifecycle/cleanup-scheduler.d.ts.map +0 -1
  198. package/dist/lifecycle/cleanup-scheduler.js.map +0 -1
  199. package/dist/lifecycle/cleanup.d.ts.map +0 -1
  200. package/dist/lifecycle/cleanup.js.map +0 -1
  201. package/dist/lifecycle/index.d.ts.map +0 -1
  202. package/dist/lifecycle/index.js.map +0 -1
  203. package/dist/lifecycle/quality-scorer.d.ts.map +0 -1
  204. package/dist/lifecycle/quality-scorer.js.map +0 -1
  205. package/dist/lifecycle/tiering.d.ts.map +0 -1
  206. package/dist/lifecycle/tiering.js.map +0 -1
  207. package/dist/llm/client.d.ts.map +0 -1
  208. package/dist/llm/client.js.map +0 -1
  209. package/dist/llm/index.d.ts.map +0 -1
  210. package/dist/llm/index.js.map +0 -1
  211. package/dist/proficiency/actr-engine.d.ts.map +0 -1
  212. package/dist/proficiency/actr-engine.js.map +0 -1
  213. package/dist/proficiency/detection.d.ts.map +0 -1
  214. package/dist/proficiency/detection.js.map +0 -1
  215. package/dist/proficiency/index.d.ts.map +0 -1
  216. package/dist/proficiency/index.js.map +0 -1
  217. package/dist/proficiency/tracker.d.ts.map +0 -1
  218. package/dist/proficiency/tracker.js.map +0 -1
  219. package/dist/proficiency/types.d.ts.map +0 -1
  220. package/dist/proficiency/types.js.map +0 -1
  221. package/dist/providers/adapters.d.ts.map +0 -1
  222. package/dist/providers/adapters.js.map +0 -1
  223. package/dist/providers/detector.d.ts.map +0 -1
  224. package/dist/providers/detector.js.map +0 -1
  225. package/dist/search/adaptive-router.d.ts.map +0 -1
  226. package/dist/search/adaptive-router.js.map +0 -1
  227. package/dist/search/index.d.ts.map +0 -1
  228. package/dist/search/index.js.map +0 -1
  229. package/dist/search/ranker.d.ts.map +0 -1
  230. package/dist/search/ranker.js.map +0 -1
  231. package/dist/search/reranker.d.ts.map +0 -1
  232. package/dist/search/reranker.js.map +0 -1
  233. package/dist/session/parser.d.ts.map +0 -1
  234. package/dist/session/parser.js.map +0 -1
  235. package/dist/skill/evaluator.d.ts.map +0 -1
  236. package/dist/skill/evaluator.js.map +0 -1
  237. package/dist/skill/index.d.ts.map +0 -1
  238. package/dist/skill/index.js.map +0 -1
  239. package/dist/skill/types.d.ts.map +0 -1
  240. package/dist/skill/types.js.map +0 -1
  241. package/dist/sync/client.d.ts.map +0 -1
  242. package/dist/sync/client.js.map +0 -1
  243. package/dist/sync/encryption.d.ts.map +0 -1
  244. package/dist/sync/encryption.js.map +0 -1
  245. package/dist/sync/index.d.ts.map +0 -1
  246. package/dist/sync/index.js.map +0 -1
  247. package/dist/sync/queue.d.ts.map +0 -1
  248. package/dist/sync/queue.js.map +0 -1
  249. package/dist/sync/scheduler.d.ts.map +0 -1
  250. package/dist/sync/scheduler.js.map +0 -1
  251. package/dist/sync/synchronizer.d.ts.map +0 -1
  252. package/dist/sync/synchronizer.js.map +0 -1
  253. package/dist/sync/team-synchronizer.d.ts.map +0 -1
  254. package/dist/sync/team-synchronizer.js.map +0 -1
  255. package/dist/sync/vector-clock.d.ts.map +0 -1
  256. package/dist/sync/vector-clock.js.map +0 -1
  257. package/dist/types/index.d.ts.map +0 -1
  258. package/dist/types/index.js.map +0 -1
  259. package/dist/utils/keychain.d.ts.map +0 -1
  260. package/dist/utils/keychain.js.map +0 -1
  261. package/dist/utils/logger.d.ts.map +0 -1
  262. package/dist/utils/logger.js.map +0 -1
@@ -1,150 +1 @@
1
- /**
2
- * i18n Messages
3
- *
4
- * CLI 메시지의 다국어 지원을 위한 메시지 번들.
5
- * 지원 언어: en (English), ko (Korean)
6
- */
7
- const en = {
8
- error: 'Error',
9
- success: 'Success',
10
- warning: 'Warning',
11
- notFound: 'Not found',
12
- done: 'Done',
13
- setupTitle: 'A2A Memory Setup',
14
- setupComplete: 'Setup complete!',
15
- setupDbCreated: 'Database created',
16
- setupHooksRegistered: 'Claude Code hooks registered',
17
- setupAlreadyDone: 'Already configured. Use --force to re-initialize.',
18
- statusTitle: 'A2A Memory Status',
19
- statusMemoryCount: 'Memories',
20
- statusDbSize: 'DB Size',
21
- statusDbPath: 'DB Path',
22
- statusCategories: 'Categories',
23
- statusNoMemories: 'No memories stored yet.',
24
- searchTitle: 'Search Results',
25
- searchNoResults: 'No results found.',
26
- searchResultCount: (count) => `${count} result${count === 1 ? '' : 's'} found`,
27
- listTitle: 'Memory List',
28
- listEmpty: 'No memories match the criteria.',
29
- addTitle: 'Add Memory',
30
- addSuccess: 'Memory added successfully.',
31
- editSuccess: 'Memory updated successfully.',
32
- editNotFound: 'Memory not found.',
33
- rmSuccess: 'Memory deleted.',
34
- rmNotFound: 'Memory not found.',
35
- syncTitle: 'Sync',
36
- syncPushed: (count) => `Pushed ${count} memor${count === 1 ? 'y' : 'ies'}`,
37
- syncPulled: (count) => `Pulled ${count} memor${count === 1 ? 'y' : 'ies'}`,
38
- syncNoChanges: 'No changes to sync.',
39
- syncWatchStarted: 'Watching for changes...',
40
- syncWatchStopped: 'Sync watch stopped.',
41
- extractTitle: 'Extract Memories',
42
- extractNoSessions: 'No session files found.',
43
- extractComplete: (count) => `Extracted ${count} memor${count === 1 ? 'y' : 'ies'}`,
44
- healthTitle: 'A2A Memory Health Check',
45
- healthDbOk: 'OK',
46
- healthDbError: 'Error',
47
- healthConfigOk: 'OK',
48
- cleanupTitle: 'Memory Cleanup',
49
- cleanupComplete: (count) => `Cleaned up ${count} memor${count === 1 ? 'y' : 'ies'}`,
50
- cleanupNone: 'No memories to clean up.',
51
- embedTitle: 'Embedding Management',
52
- embedGenerated: (count) => `Generated ${count} embedding${count === 1 ? '' : 's'}`,
53
- claudeSyncTitle: 'CLAUDE.md Sync',
54
- claudeSyncNotFound: 'CLAUDE.md file not found.',
55
- claudeSyncFile: 'File',
56
- claudeSyncSections: 'Sections',
57
- claudeSyncCreated: 'Created',
58
- claudeSyncUpdated: 'Updated',
59
- claudeSyncSkipped: 'Skipped (unchanged)',
60
- };
61
- const ko = {
62
- error: '오류',
63
- success: '성공',
64
- warning: '경고',
65
- notFound: '찾을 수 없음',
66
- done: '완료',
67
- setupTitle: 'A2A Memory 설정',
68
- setupComplete: '설정이 완료되었습니다!',
69
- setupDbCreated: '데이터베이스 생성됨',
70
- setupHooksRegistered: 'Claude Code 훅 등록됨',
71
- setupAlreadyDone: '이미 설정되어 있습니다. --force로 재초기화하세요.',
72
- statusTitle: 'A2A Memory 상태',
73
- statusMemoryCount: '메모리 수',
74
- statusDbSize: 'DB 크기',
75
- statusDbPath: 'DB 경로',
76
- statusCategories: '카테고리',
77
- statusNoMemories: '저장된 메모리가 없습니다.',
78
- searchTitle: '검색 결과',
79
- searchNoResults: '결과가 없습니다.',
80
- searchResultCount: (count) => `${count}개 결과`,
81
- listTitle: '메모리 목록',
82
- listEmpty: '조건에 맞는 메모리가 없습니다.',
83
- addTitle: '메모리 추가',
84
- addSuccess: '메모리가 추가되었습니다.',
85
- editSuccess: '메모리가 수정되었습니다.',
86
- editNotFound: '메모리를 찾을 수 없습니다.',
87
- rmSuccess: '메모리가 삭제되었습니다.',
88
- rmNotFound: '메모리를 찾을 수 없습니다.',
89
- syncTitle: '동기화',
90
- syncPushed: (count) => `${count}개 메모리 푸시됨`,
91
- syncPulled: (count) => `${count}개 메모리 풀됨`,
92
- syncNoChanges: '동기화할 변경사항이 없습니다.',
93
- syncWatchStarted: '변경사항 감시 중...',
94
- syncWatchStopped: '동기화 감시가 중지되었습니다.',
95
- extractTitle: '메모리 추출',
96
- extractNoSessions: '세션 파일을 찾을 수 없습니다.',
97
- extractComplete: (count) => `${count}개 메모리 추출됨`,
98
- healthTitle: 'A2A Memory 상태 점검',
99
- healthDbOk: '정상',
100
- healthDbError: '오류',
101
- healthConfigOk: '정상',
102
- cleanupTitle: '메모리 정리',
103
- cleanupComplete: (count) => `${count}개 메모리 정리됨`,
104
- cleanupNone: '정리할 메모리가 없습니다.',
105
- embedTitle: '임베딩 관리',
106
- embedGenerated: (count) => `${count}개 임베딩 생성됨`,
107
- claudeSyncTitle: 'CLAUDE.md 동기화',
108
- claudeSyncNotFound: 'CLAUDE.md 파일을 찾을 수 없습니다.',
109
- claudeSyncFile: '파일',
110
- claudeSyncSections: '섹션 수',
111
- claudeSyncCreated: '새로 추가',
112
- claudeSyncUpdated: '업데이트',
113
- claudeSyncSkipped: '스킵 (변경없음)',
114
- };
115
- const bundles = { en, ko };
116
- let currentLocale = 'en';
117
- /**
118
- * Set the current locale
119
- */
120
- export function setLocale(locale) {
121
- currentLocale = locale;
122
- }
123
- /**
124
- * Get the current locale
125
- */
126
- export function getLocale() {
127
- return currentLocale;
128
- }
129
- /**
130
- * Get messages for the current locale
131
- */
132
- export function t() {
133
- return bundles[currentLocale];
134
- }
135
- /**
136
- * Get messages for a specific locale
137
- */
138
- export function getMessages(locale) {
139
- return bundles[locale];
140
- }
141
- /**
142
- * Detect locale from environment
143
- */
144
- export function detectLocale() {
145
- const lang = process.env.LANG || process.env.LC_ALL || process.env.LANGUAGE || '';
146
- if (lang.startsWith('ko'))
147
- return 'ko';
148
- return 'en';
149
- }
150
- //# sourceMappingURL=messages.js.map
1
+ (function(_0x378823,_0x290938){function _0x35a007(_0x31fe06,_0x29b214){return _0x575f(_0x31fe06-0x3d7,_0x29b214);}const _0x34a1c5=_0x378823();function _0x35bf70(_0x4d1059,_0x1f02ad){return _0x575f(_0x4d1059-0x2d5,_0x1f02ad);}while(!![]){try{const _0x2980c6=parseInt(_0x35bf70(0x465,0x47f))/0x1*(parseInt(_0x35a007(0x56f,0x592))/0x2)+-parseInt(_0x35a007(0x54e,0x52e))/0x3*(-parseInt(_0x35bf70(0x434,0x44f))/0x4)+parseInt(_0x35bf70(0x45c,0x46a))/0x5+parseInt(_0x35a007(0x59e,0x58f))/0x6*(-parseInt(_0x35bf70(0x441,0x45f))/0x7)+-parseInt(_0x35bf70(0x43c,0x41c))/0x8*(-parseInt(_0x35bf70(0x448,0x45a))/0x9)+parseInt(_0x35a007(0x535,0x508))/0xa*(-parseInt(_0x35a007(0x550,0x56f))/0xb)+-parseInt(_0x35bf70(0x444,0x475))/0xc;if(_0x2980c6===_0x290938)break;else _0x34a1c5['push'](_0x34a1c5['shift']());}catch(_0x55e286){_0x34a1c5['push'](_0x34a1c5['shift']());}}}(_0x455a,0x77e9f));const en={'error':'Error','success':_0xf7a59f(0x42d,0x42e),'warning':_0xf7a59f(0x448,0x43b),'notFound':_0xf7a59f(0x425,0x41f),'done':_0x249498(0x32b,0x307),'setupTitle':_0xf7a59f(0x415,0x3f6)+_0xf7a59f(0x3eb,0x3df),'setupComplete':_0xf7a59f(0x42c,0x44c)+_0x249498(0x2c6,0x2e5),'setupDbCreated':_0x249498(0x35d,0x341)+_0x249498(0x333,0x2f6),'setupHooksRegistered':_0x249498(0x337,0x31e)+_0xf7a59f(0x3b0,0x3e0)+_0x249498(0x33b,0x32f),'setupAlreadyDone':_0xf7a59f(0x426,0x400)+_0x249498(0x34a,0x32c)+_0xf7a59f(0x434,0x41c)+'e\x20to\x20re-in'+'itialize.','statusTitle':_0xf7a59f(0x3c2,0x3f6)+_0xf7a59f(0x419,0x41b),'statusMemoryCount':_0xf7a59f(0x41b,0x401),'statusDbSize':_0x249498(0x2e6,0x300),'statusDbPath':_0x249498(0x321,0x2fc),'statusCategories':_0x249498(0x2ec,0x2de),'statusNoMemories':'No\x20memorie'+_0xf7a59f(0x45b,0x422)+_0xf7a59f(0x404,0x421),'searchTitle':_0x249498(0x309,0x337)+_0x249498(0x2f7,0x2e6),'searchNoResults':_0xf7a59f(0x453,0x418)+'\x20found.','searchResultCount':_0x34b65a=>_0x34b65a+'\x20result'+(_0x34b65a===0x1?'':'s')+_0xf7a59f(0x411,0x426),'listTitle':'Memory\x20Lis'+'t','listEmpty':_0x249498(0x329,0x2ee)+_0xf7a59f(0x413,0x41d)+_0xf7a59f(0x3c1,0x3fd)+'.','addTitle':_0x249498(0x2f7,0x2cc),'addSuccess':_0xf7a59f(0x42c,0x427)+'ed\x20success'+'fully.','editSuccess':'Memory\x20upd'+_0x249498(0x369,0x33e)+_0x249498(0x307,0x308),'editNotFound':_0x249498(0x2fa,0x32d)+_0x249498(0x303,0x2d6),'rmSuccess':_0xf7a59f(0x455,0x447)+_0x249498(0x2c6,0x2d5),'rmNotFound':_0xf7a59f(0x467,0x43a)+'\x20found.','syncTitle':_0x249498(0x2ef,0x2f5),'syncPushed':_0x64b1b4=>_0x249498(0x33c,0x302)+_0x64b1b4+_0x249498(0x2ec,0x2d1)+(_0x64b1b4===0x1?'y':_0xf7a59f(0x450,0x440)),'syncPulled':_0x286242=>_0x249498(0x33d,0x332)+_0x286242+'\x20memor'+(_0x286242===0x1?'y':_0x249498(0x36c,0x333)),'syncNoChanges':'No\x20changes'+_0x249498(0x294,0x2ca),'syncWatchStarted':_0x249498(0x34a,0x31d)+_0xf7a59f(0x401,0x428)+_0x249498(0x33c,0x32a),'syncWatchStopped':_0x249498(0x2df,0x30d)+_0x249498(0x33c,0x335),'extractTitle':_0xf7a59f(0x458,0x441)+'mories','extractNoSessions':_0xf7a59f(0x40b,0x448)+_0x249498(0x2be,0x2e2)+'nd.','extractComplete':_0x2d384f=>_0xf7a59f(0x3f8,0x420)+_0x2d384f+_0x249498(0x2e1,0x2d1)+(_0x2d384f===0x1?'y':_0x249498(0x31b,0x333)),'healthTitle':_0xf7a59f(0x411,0x3f6)+_0x249498(0x33f,0x328)+_0xf7a59f(0x414,0x412),'healthDbOk':'OK','healthDbError':_0xf7a59f(0x40a,0x43e),'healthConfigOk':'OK','cleanupTitle':_0x249498(0x2ed,0x2dc)+'anup','cleanupComplete':_0x197ce8=>_0xf7a59f(0x400,0x40b)+'\x20'+_0x197ce8+_0x249498(0x2e9,0x2d1)+(_0x197ce8===0x1?'y':_0xf7a59f(0x415,0x440)),'cleanupNone':_0xf7a59f(0x3e0,0x3fb)+_0xf7a59f(0x404,0x408)+_0x249498(0x2a0,0x2d9),'embedTitle':'Embedding\x20'+'Management','embedGenerated':_0x404fc7=>_0xf7a59f(0x401,0x3e7)+_0x404fc7+_0x249498(0x379,0x340)+(_0x404fc7===0x1?'':'s'),'claudeSyncTitle':_0xf7a59f(0x3ff,0x438)+'Sync','claudeSyncNotFound':'CLAUDE.md\x20'+_0x249498(0x2f8,0x324)+_0xf7a59f(0x3ff,0x406),'claudeSyncFile':'File','claudeSyncSections':_0xf7a59f(0x40b,0x3d8),'claudeSyncCreated':_0xf7a59f(0x3b6,0x3f0),'claudeSyncUpdated':_0xf7a59f(0x3cd,0x3e8),'claudeSyncSkipped':'Skipped\x20(u'+'nchanged)'};function _0xf7a59f(_0x17bedd,_0x4c0111){return _0x575f(_0x4c0111-0x27e,_0x17bedd);}const ko={'error':'오류','success':'성공','warning':'경고','notFound':_0xf7a59f(0x459,0x432),'done':'완료','setupTitle':'A2A\x20Memory'+_0x249498(0x35c,0x339),'setupComplete':_0x249498(0x2a4,0x2c8)+'다!','setupDbCreated':_0x249498(0x316,0x2e7),'setupHooksRegistered':_0xf7a59f(0x42a,0x42b)+_0x249498(0x2e4,0x2fd),'setupAlreadyDone':'이미\x20설정되어\x20있습'+_0x249498(0x371,0x33c)+_0xf7a59f(0x41e,0x3ee)+'.','statusTitle':'A2A\x20Memory'+_0x249498(0x319,0x33d),'statusMemoryCount':_0xf7a59f(0x3f8,0x3db),'statusDbSize':_0xf7a59f(0x3de,0x3f9),'statusDbPath':_0x249498(0x324,0x330),'statusCategories':_0x249498(0x2b7,0x2ef),'statusNoMemories':_0x249498(0x2af,0x2eb)+_0xf7a59f(0x406,0x429),'searchTitle':_0xf7a59f(0x3e3,0x3fa),'searchNoResults':_0x249498(0x31d,0x320),'searchResultCount':_0x47c555=>_0x47c555+'개\x20결과','listTitle':'메모리\x20목록','listEmpty':_0xf7a59f(0x455,0x443)+'가\x20없습니다.','addTitle':'메모리\x20추가','addSuccess':_0x249498(0x318,0x311)+_0x249498(0x2f2,0x2df),'editSuccess':_0x249498(0x2fc,0x303)+'니다.','editNotFound':_0xf7a59f(0x43a,0x433)+_0x249498(0x33d,0x317),'rmSuccess':_0x249498(0x2e9,0x2ff)+'니다.','rmNotFound':_0x249498(0x30e,0x326)+_0x249498(0x34a,0x317),'syncTitle':_0x249498(0x2f4,0x306),'syncPushed':_0x3b6d5d=>_0x3b6d5d+_0xf7a59f(0x434,0x407),'syncPulled':_0x53856a=>_0x53856a+'개\x20메모리\x20풀됨','syncNoChanges':_0x249498(0x335,0x322)+_0x249498(0x2ca,0x2d7),'syncWatchStarted':_0x249498(0x2ed,0x2d4)+'..','syncWatchStopped':_0x249498(0x340,0x327)+_0xf7a59f(0x3f1,0x3da),'extractTitle':'메모리\x20추출','extractNoSessions':_0x249498(0x32f,0x323)+'수\x20없습니다.','extractComplete':_0x34a2ea=>_0x34a2ea+_0x249498(0x2b9,0x2f2),'healthTitle':_0x249498(0x2f4,0x2e9)+'\x20상태\x20점검','healthDbOk':'정상','healthDbError':'오류','healthConfigOk':'정상','cleanupTitle':_0xf7a59f(0x447,0x419),'cleanupComplete':_0xa17c98=>_0xa17c98+_0x249498(0x319,0x2f7),'cleanupNone':_0xf7a59f(0x423,0x423)+_0x249498(0x305,0x31c),'embedTitle':_0xf7a59f(0x42e,0x425),'embedGenerated':_0x370bd2=>_0x370bd2+_0xf7a59f(0x412,0x436),'claudeSyncTitle':_0x249498(0x308,0x32b)+_0x249498(0x336,0x306),'claudeSyncNotFound':_0x249498(0x312,0x32b)+_0xf7a59f(0x430,0x42c)+_0xf7a59f(0x460,0x429),'claudeSyncFile':'파일','claudeSyncSections':_0xf7a59f(0x3f6,0x3fe),'claudeSyncCreated':_0xf7a59f(0x3e3,0x411),'claudeSyncUpdated':_0x249498(0x33f,0x30a),'claudeSyncSkipped':_0xf7a59f(0x39b,0x3d6)},bundles={'en':en,'ko':ko};let currentLocale='en';export function setLocale(_0x1c4734){currentLocale=_0x1c4734;}export function getLocale(){return currentLocale;}export function t(){return bundles[currentLocale];}function _0x249498(_0x31c2a5,_0xc0417d){return _0x575f(_0xc0417d-0x171,_0x31c2a5);}export function getMessages(_0xb3646b){return bundles[_0xb3646b];}export function detectLocale(){const _0x29a99f=process.env.LANG||process.env.LC_ALL||process.env.LANGUAGE||'';if(_0x29a99f['startsWith']('ko'))return'ko';return'en';}function _0x575f(_0x32848d,_0x4975ab){_0x32848d=_0x32848d-0x157;const _0x455a65=_0x455a();let _0x575fe0=_0x455a65[_0x32848d];if(_0x575f['flEQsm']===undefined){var _0x2f8ad6=function(_0x5c87d3){const _0x570d6f='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x59c4c9='',_0x4f8718='';for(let _0x1a85ff=0x0,_0x4dfbe7,_0x588d6e,_0x13646b=0x0;_0x588d6e=_0x5c87d3['charAt'](_0x13646b++);~_0x588d6e&&(_0x4dfbe7=_0x1a85ff%0x4?_0x4dfbe7*0x40+_0x588d6e:_0x588d6e,_0x1a85ff++%0x4)?_0x59c4c9+=String['fromCharCode'](0xff&_0x4dfbe7>>(-0x2*_0x1a85ff&0x6)):0x0){_0x588d6e=_0x570d6f['indexOf'](_0x588d6e);}for(let _0x27962d=0x0,_0x81198d=_0x59c4c9['length'];_0x27962d<_0x81198d;_0x27962d++){_0x4f8718+='%'+('00'+_0x59c4c9['charCodeAt'](_0x27962d)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4f8718);};_0x575f['zdKqFq']=_0x2f8ad6,_0x575f['SYrqzy']={},_0x575f['flEQsm']=!![];}const _0x48fa3b=_0x455a65[0x0],_0x48ab1d=_0x32848d+_0x48fa3b,_0x40d45d=_0x575f['SYrqzy'][_0x48ab1d];return!_0x40d45d?(_0x575fe0=_0x575f['zdKqFq'](_0x575fe0),_0x575f['SYrqzy'][_0x48ab1d]=_0x575fe0):_0x575fe0=_0x40d45d,_0x575fe0;}function _0x455a(){const _0x75ee16=['u2vHCMnOifjLCW','mta4Cu5oD0Lm','ioYePoYGLq','twvTB3j5igrLBa','tM8GC2vZC2LVBG','64Ui64UKlIaTlwzVCMm','ioYdGE2dNa','yxrLzcbZDwnJzq','u2v0DxaGy29TCa','igvTyMvKzgLUzW','rgf0ywjHC2uGyW','7isK7kcv7j20ioYzHoUJJoUqMoYxIoYkTEUlIa','7iQK7yk1icJRS4dQSR3SL4BSNyWP','ihrVihn5BMmU','u2vJDgLVBNm','qwrKie1LBw9YEq','65cy7jEi7iQ164Ui64UKlG','66Mu66QO66ASioYiMa','mtbPsKfQwfe','ng1pteTzra','ig1LBw9Y','ifnLDhvW','zsbOB29RCYbYzq','67oa6Rk97ikS7zwTioQWKoYlNcdSPjeU','zxrLzc4','igzVDw5KlG','ioYxHUYkTEUlIoUlPc4','ofbrtND3Ca','ihvWlG','r2vUzxjHDgvKia','vxbKyxrLza','twvTB3j5ienSzq','mZiZoteXtuHUt01b','q2f0zwDVCMLLCW','64Ui64UKlG','nZG1mty0oejiDK9utq','zEUHNcdSNQZSTiJQUldTMztTLzJSHlJSMPq','igzPBgvZigzVDq','q3jLyxrLza','ntC4oduZourLyvLLCG','Bgv0zse','DwX0CW','642W7j207ysW67kG7j207iQKioYdNEYeSEUqQa','ntC5ndq0EvvUq21L','qtjbie1LBw9YEq','mZaZmdy5oe5PEvnIEq','7kca7j6L65cCioUPLoUQQoUMRoQWGcdSL4y','reiG7ygS6RIW','6Rka7iojioQYSoQZVa','tM8GBwvTB3jPzq','7lM07ywm6RoG66AS','zsbJCML0zxjPyq','7is57iwyioYiMa','6RcCioUPLoUQQoUMRcdSTPtSTPZRKkG','qwXYzwfKEsbJBW','twvTB3jPzxm','u3LUyW','CMvHDgvK','6RcCioUPLoUQQoUMRcdSOjxRPQZRKkG','mJuWmti0nuLkufj2zq','B3vUzc4','6RcCioUPLoUQQoUMRcdTKBJSI5ZRKkG','CYb0BYbJBgvHBG','reiGugf0Aa','zsdTM4uG65oX66gD65cO','q2XLyw5Lzcb1Ca','66Mu66QO66AS6RcaioYcREYGNoUqMoYxIoYkTq','reiGu2L6zq','ote3mZm1BeHUseHP','uhvZAgvKia','66Mu66QO66AS6RcaioYiMoYGLEUqMoYxIoYkTq','7ioi66gCioY2LoQWGa','zwnR','64+z6RIW7zMu','rg9Uzq','C3nMDwXSEs4','mMvwAuPZsq','7jEf642W7j207yQ4','tM8GCMvZDwX0CW','66Mu66QO66ASioYGLEUMRa','u3LUyYb3yxrJAa','ifn0yxr1CW','vxnLic0TzM9YyW','CYbTyxrJAcb0Aa','66Mu66QO66AS6RcaioY2LoQWGoUqMoYxIoYkTq','tM90igzVDw5K','rxH0CMfJDgvKia','zxqU','CYbZDg9YzwqGEq','7kcv66AS7zwGioUPLoUQQoUMRoQWGcdSL4y','7jEg7iQ164Ui64UKlG','7j6e67kG65sPioQ0GoUMRa','igzVDw5K','twvTB3j5igfKza','B3iGy2HHBMDLCW','7iQ164Ui64UKlG','v2f0y2HPBMCGzG','q2XHDwrLienVza','7yYm7j287j2eioYWVUYDHcdSIjGG7jEg','6RkW6Ro86RcaioYxHUYkTEUlIoUlPc4','u3vJy2vZCW','64+z6RIW7zMu7zwGioUZGoQYVEYcRo2vREYDTa','7is47iwyio2mJoYDVoYDHcdSSl7SNyqG','zMLSzsbUB3qGzG','7lc+7j2eioYiMcdSL4BSNyW','66Mu66QO66AS66w8ioYWVUYDHcdSIjGG','64+z6RIW7zMuioQWKoYlNoQWGcdSPjhSP4a','ieHLywX0AcbdAa','6RcCioYEHoUYOoUuQsdSG53SHlhRKkG','lI4U','q0XbvurflM1Kia','BMzPz3vYzwqUia','twvTB3j5ig5VDa','v2fYBMLUzW','z2LZDgvYzwq','reiG6Rk966gC','rxjYB3i','uhvSBgvKia','AwvZ','rxH0CMfJDcbnzq','ihn0B3bWzwqU','7kgW6Rg07jEqioUNNUUkLcdRQztRQQJRPQW'];_0x455a=function(){return _0x75ee16;};return _0x455a();}
package/dist/index.js CHANGED
@@ -1,43 +1 @@
1
- /**
2
- * A2A Memory Plugin - Public API
3
- */
4
- export { DEFAULT_CONFIG, SENSITIVE_PATTERNS } from './types/index.js';
5
- // Core modules
6
- export { MemoryDatabase } from './db/database.js';
7
- export { ConfigManager, generateNodeId, getConfigManager, resetConfigManager } from './config/manager.js';
8
- export { parseSessionFile, findSessionFiles, getSessionMessages } from './session/parser.js';
9
- export { extractMemories, extractMemoriesWithLLM, summarizeSession } from './extraction/extractor.js';
10
- export { scoreSignificance } from './extraction/scorer.js';
11
- export { filterSensitiveInfo, isSensitivePath } from './extraction/filter.js';
12
- // Hooks
13
- export { handleSessionStart } from './hooks/session-start.js';
14
- export { handlePostToolUse } from './hooks/post-tool-use.js';
15
- export { handleSessionEnd } from './hooks/session-end.js';
16
- export { handleUserPromptSubmit, resetQueryCache } from './hooks/user-prompt-submit.js';
17
- export { handlePreCompact } from './hooks/pre-compact.js';
18
- export { getSharedDb, closeSharedDb, resetSharedDb, extractSearchKeywords } from './hooks/shared.js';
19
- // Sync
20
- export { A2AClient, MemorySynchronizer, SyncQueue, LocalVectorClock, TeamSynchronizer, SyncScheduler, mapCategory, mapTier, encryptContent, decryptContent, encryptEmbedding, decryptEmbedding, deriveKey, generateEncryptionKey, wrapEncryptedContent, unwrapEncryptedContent, isValidEncryptedPayload, } from './sync/index.js';
21
- // LLM
22
- export { createLLMClient, OpenAILLMClient, AnthropicLLMClient, NoOpLLMClient } from './llm/index.js';
23
- // Embedding
24
- export { createEmbeddingProvider, LocalEmbeddingProvider, OpenAIEmbeddingProvider, E5EmbeddingProvider, resetE5Pipeline, quantizeToFloat32, dequantizeFromFloat32, quantizeToInt8, dequantizeFromInt8, } from './embedding/index.js';
25
- // Search
26
- export { HybridRanker } from './search/index.js';
27
- export { AdaptiveRouter } from './search/adaptive-router.js';
28
- export { CrossEncoderReranker, resetRerankerPipeline } from './search/reranker.js';
29
- // Extraction - DedupManager
30
- export { DedupManager } from './extraction/dedup-manager.js';
31
- // Lifecycle
32
- export { scoreQuality, cleanupMemories, determineTier, rebalanceTiers, promoteOnAccess } from './lifecycle/index.js';
33
- export { createLogger } from './utils/logger.js';
34
- export { createKeychainStore, getKeychainStore, resetKeychainStore } from './utils/keychain.js';
35
- // Claude.md Sync
36
- export { syncClaudeMd, findClaudeMd, parseClaudeMd } from './claude/sync.js';
37
- // i18n
38
- export { t, setLocale, getLocale, detectLocale, getMessages } from './i18n/index.js';
39
- // Proficiency
40
- export { ACTREngine, ProficiencyTracker } from './proficiency/index.js';
41
- // Anthropic Adapter
42
- export { toAnthropicFormat, fromAnthropicFormat, toAnthropicBatch, fromAnthropicBatch, mapCategoryToAnthropicType, mapAnthropicTypeToCategory, } from './adapters/anthropic.js';
43
- //# sourceMappingURL=index.js.map
1
+ (function(_0x3c9347,_0x35bfd8){var _0x491328=_0x3c9347();function _0x30dd23(_0x2da19f,_0xcb142){return _0x3f18(_0x2da19f- -0xea,_0xcb142);}function _0x2ef355(_0x3f1f5e,_0x2c4a80){return _0x3f18(_0x3f1f5e-0x1f8,_0x2c4a80);}while(!![]){try{var _0x4746b6=-parseInt(_0x30dd23(0xd8,0xd6))/0x1+parseInt(_0x30dd23(0xdd,0xdc))/0x2*(parseInt(_0x30dd23(0xde,0xdb))/0x3)+parseInt(_0x2ef355(0x3c1,0x3c4))/0x4*(parseInt(_0x2ef355(0x3be,0x3c2))/0x5)+-parseInt(_0x2ef355(0x3bb,0x3b6))/0x6+parseInt(_0x2ef355(0x3bc,0x3ba))/0x7+-parseInt(_0x30dd23(0xdb,0xd6))/0x8+parseInt(_0x30dd23(0xe0,0xe1))/0x9;if(_0x4746b6===_0x35bfd8)break;else _0x491328['push'](_0x491328['shift']());}catch(_0x3a67c1){_0x491328['push'](_0x491328['shift']());}}}(_0x394e,0xde0c2));export{DEFAULT_CONFIG,SENSITIVE_PATTERNS}from'./types/index.js';export{MemoryDatabase}from'./db/database.js';export{ConfigManager,generateNodeId,getConfigManager,resetConfigManager}from'./config/manager.js';export{parseSessionFile,findSessionFiles,getSessionMessages}from'./session/parser.js';export{extractMemories,extractMemoriesWithLLM,summarizeSession}from'./extraction/extractor.js';export{scoreSignificance}from'./extraction/scorer.js';export{filterSensitiveInfo,isSensitivePath}from'./extraction/filter.js';export{handleSessionStart}from'./hooks/session-start.js';export{handlePostToolUse}from'./hooks/post-tool-use.js';export{handleSessionEnd}from'./hooks/session-end.js';export{handleUserPromptSubmit,resetQueryCache}from'./hooks/user-prompt-submit.js';export{handlePreCompact}from'./hooks/pre-compact.js';export{getSharedDb,closeSharedDb,resetSharedDb,extractSearchKeywords}from'./hooks/shared.js';export{A2AClient,MemorySynchronizer,SyncQueue,LocalVectorClock,TeamSynchronizer,SyncScheduler,mapCategory,mapTier,encryptContent,decryptContent,encryptEmbedding,decryptEmbedding,deriveKey,generateEncryptionKey,wrapEncryptedContent,unwrapEncryptedContent,isValidEncryptedPayload}from'./sync/index.js';export{createLLMClient,OpenAILLMClient,AnthropicLLMClient,NoOpLLMClient}from'./llm/index.js';export{createEmbeddingProvider,LocalEmbeddingProvider,OpenAIEmbeddingProvider,E5EmbeddingProvider,resetE5Pipeline,quantizeToFloat32,dequantizeFromFloat32,quantizeToInt8,dequantizeFromInt8}from'./embedding/index.js';export{HybridRanker}from'./search/index.js';export{AdaptiveRouter}from'./search/adaptive-router.js';export{CrossEncoderReranker,resetRerankerPipeline}from'./search/reranker.js';export{DedupManager}from'./extraction/dedup-manager.js';export{scoreQuality,cleanupMemories,determineTier,rebalanceTiers,promoteOnAccess}from'./lifecycle/index.js';function _0x394e(){var _0x248245=['mtaZodeWnNbjrNffuq','m01KBwffta','mJi1nZq0nfz6BhbdqG','mteZntGXmtDTrw5MyuO','mZKXmdmZDNLYD1Dg','mtG0mJK4nhnmwuHdvW','mZy5mZe1mxnrt1frqW','mtaXmJi1mZz3yNHZsNq','nvD4seLQBq'];_0x394e=function(){return _0x248245;};return _0x394e();}export{createLogger}from'./utils/logger.js';export{createKeychainStore,getKeychainStore,resetKeychainStore}from'./utils/keychain.js';export{syncClaudeMd,findClaudeMd,parseClaudeMd}from'./claude/sync.js';function _0x3f18(_0x1972dc,_0x547417){_0x1972dc=_0x1972dc-0x1c2;var _0x394e74=_0x394e();var _0x3f184a=_0x394e74[_0x1972dc];if(_0x3f18['yXgOKR']===undefined){var _0x5645f2=function(_0x14e810){var _0x4081f8='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x55c77d='',_0x25705e='';for(var _0x3d4b29=0x0,_0x3e7b30,_0x27a324,_0x3d8477=0x0;_0x27a324=_0x14e810['charAt'](_0x3d8477++);~_0x27a324&&(_0x3e7b30=_0x3d4b29%0x4?_0x3e7b30*0x40+_0x27a324:_0x27a324,_0x3d4b29++%0x4)?_0x55c77d+=String['fromCharCode'](0xff&_0x3e7b30>>(-0x2*_0x3d4b29&0x6)):0x0){_0x27a324=_0x4081f8['indexOf'](_0x27a324);}for(var _0xe85cf8=0x0,_0x2e1ffe=_0x55c77d['length'];_0xe85cf8<_0x2e1ffe;_0xe85cf8++){_0x25705e+='%'+('00'+_0x55c77d['charCodeAt'](_0xe85cf8)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x25705e);};_0x3f18['nhovBt']=_0x5645f2,_0x3f18['NUwOfS']={},_0x3f18['yXgOKR']=!![];}var _0x362e63=_0x394e74[0x0],_0x3d2ab0=_0x1972dc+_0x362e63,_0x42166f=_0x3f18['NUwOfS'][_0x3d2ab0];return!_0x42166f?(_0x3f184a=_0x3f18['nhovBt'](_0x3f184a),_0x3f18['NUwOfS'][_0x3d2ab0]=_0x3f184a):_0x3f184a=_0x42166f,_0x3f184a;}export{t,setLocale,getLocale,detectLocale,getMessages}from'./i18n/index.js';export{ACTREngine,ProficiencyTracker}from'./proficiency/index.js';export{toAnthropicFormat,fromAnthropicFormat,toAnthropicBatch,fromAnthropicBatch,mapCategoryToAnthropicType,mapAnthropicTypeToCategory}from'./adapters/anthropic.js';
@@ -1,137 +1 @@
1
- /**
2
- * Cleanup Scheduler
3
- *
4
- * 주기적으로 cleanupMemories()를 실행하는 스케줄러.
5
- * SyncScheduler 패턴 기반.
6
- */
7
- import { cleanupMemories } from './cleanup.js';
8
- export class CleanupScheduler {
9
- db;
10
- config;
11
- options;
12
- logger;
13
- timer = null;
14
- running = false;
15
- cleaning = false;
16
- cleanupCount = 0;
17
- lastCleanupAt = null;
18
- lastResult = null;
19
- startedAt = null;
20
- constructor(db, config, options, logger) {
21
- this.db = db;
22
- this.config = config;
23
- this.options = options;
24
- this.logger = logger;
25
- }
26
- /**
27
- * 스케줄러 시작
28
- */
29
- async start() {
30
- if (this.running) {
31
- this.logger?.warn('CleanupScheduler already running');
32
- return;
33
- }
34
- if (this.options.intervalMs <= 0) {
35
- this.logger?.warn('CleanupScheduler disabled (intervalMs <= 0)');
36
- return;
37
- }
38
- this.running = true;
39
- this.startedAt = new Date();
40
- this.logger?.info('CleanupScheduler started', { intervalMs: this.options.intervalMs });
41
- // 시작 시 즉시 cleanup (옵트인)
42
- if (this.options.cleanupOnStart) {
43
- await this.tick();
44
- }
45
- this.timer = setInterval(() => {
46
- this.tick().catch((err) => {
47
- this.logger?.error('CleanupScheduler tick error', err instanceof Error ? err : new Error(String(err)));
48
- });
49
- }, this.options.intervalMs);
50
- // unref: Node.js 프로세스가 타이머 때문에 종료되지 않는 것을 방지
51
- if (this.timer && typeof this.timer === 'object' && 'unref' in this.timer) {
52
- this.timer.unref();
53
- }
54
- }
55
- /**
56
- * 스케줄러 중지
57
- */
58
- stop() {
59
- if (!this.running)
60
- return;
61
- if (this.timer) {
62
- clearInterval(this.timer);
63
- this.timer = null;
64
- }
65
- this.running = false;
66
- this.logger?.info('CleanupScheduler stopped', { cleanupCount: this.cleanupCount });
67
- }
68
- /**
69
- * 실행 중 여부
70
- */
71
- isRunning() {
72
- return this.running;
73
- }
74
- /**
75
- * 스케줄러 상태
76
- */
77
- getStatus() {
78
- let nextCleanupAt = null;
79
- if (this.running && this.lastCleanupAt) {
80
- const next = new Date(this.lastCleanupAt.getTime() + this.options.intervalMs);
81
- nextCleanupAt = next.toISOString();
82
- }
83
- else if (this.running && this.startedAt) {
84
- const next = new Date(this.startedAt.getTime() + this.options.intervalMs);
85
- nextCleanupAt = next.toISOString();
86
- }
87
- return {
88
- running: this.running,
89
- cleaning: this.cleaning,
90
- cleanupCount: this.cleanupCount,
91
- lastCleanupAt: this.lastCleanupAt?.toISOString() ?? null,
92
- lastResult: this.lastResult,
93
- intervalMs: this.options.intervalMs,
94
- nextCleanupAt,
95
- };
96
- }
97
- /**
98
- * 수동으로 즉시 cleanup 실행 (스케줄러 타이머와 무관)
99
- */
100
- async cleanupNow() {
101
- return this.tick();
102
- }
103
- /**
104
- * 한 번의 cleanup 사이클
105
- */
106
- async tick() {
107
- if (this.cleaning) {
108
- this.logger?.debug('Cleanup already in progress, skipping');
109
- return null;
110
- }
111
- this.cleaning = true;
112
- try {
113
- const result = cleanupMemories(this.db, this.config);
114
- this.cleanupCount++;
115
- this.lastCleanupAt = new Date();
116
- this.lastResult = result;
117
- this.logger?.info('Cleanup completed', {
118
- expired: result.expired,
119
- lowQuality: result.lowQuality,
120
- forced: result.forced,
121
- total: result.total,
122
- });
123
- this.options.onCleanup?.(result);
124
- return result;
125
- }
126
- catch (error) {
127
- const err = error instanceof Error ? error : new Error(String(error));
128
- this.logger?.error('Cleanup failed', err);
129
- this.options.onError?.(err);
130
- return null;
131
- }
132
- finally {
133
- this.cleaning = false;
134
- }
135
- }
136
- }
137
- //# sourceMappingURL=cleanup-scheduler.js.map
1
+ function _0x4588(){const _0x36736d=['D2fYBG','t1b1Bva','y2XLyw5PBMC','Bg9Nz2vY','s0PAChG','mtaXnwnSq1jODq','AxnsDw5UAw5N','CNrLza','B25XAg0','AYbLCNjVCG','Bg93uxvHBgL0Eq','zxHWAxjLza','zwr1BgvYigfSCG','zM9Yy2vK','B2jQzwn0','AfvVrMG','z2v0u3rHDhvZ','BgfZDfjLC3vSDa','zgvIDwC','zxjYB3i','txrltKW','odm1ogffq0zfsq','mJa2mZy4qMjbCK1U','B25fCNjVCG','zwr1BgvYihrPyW','ChbLza','BgfZDenSzwfUDq','CMvHzhKGAw4GCa','AvbNr1C','CNvUBMLUzW','n1nYwLDhtq','B25dBgvHBNvW','z2v0vgLTzq','zxj2ywXnCYa8pq','CM9NCMvZCYWGCW','BxbSzxrLza','C3rVCa','Cef0','B0nnB1m','y29UzMLN','Aw5MBW','C3rHCNrLzef0','m3bsrgLcwa','zwr1BgvYihn0yq','DgLJAW','A2LWCgLUzW','ntyXnJC4n3vPtuX3EG','Dg9ju09tDhjPBG','zvr4vLi','y2XLyw51Ce5VDW','q2XLyw51CcbHBa','zwr1BgvYigrPCW','B3b0Aw9UCW','q2XLyw51CcbMyq','C3rHCNq','mtuXnZK0ouf1A0H3ra','y2XLyw51CenVDq','zLPLwhK','rLHYuMG','idaP','mtbSwgjnDxC','otCZnZbjD0Pnuw0','mtyXntuXmLzSExDuDG','Dw5Yzwy','DgLTzxi','q2XLyw51CfnJAa','zwfKEsbYDw5UAq','Aw50zxj2ywXnCW','Dg90ywW','DgfYDa','mZC1ote2AvHmzfvg','y2f0y2G','r2rnELO'];_0x4588=function(){return _0x36736d;};return _0x4588();}(function(_0x4d432e,_0x46135a){function _0x5398eb(_0x56e672,_0x5d798d){return _0x7927(_0x5d798d- -0x2e1,_0x56e672);}function _0x5628af(_0x25f4f7,_0x3995fe){return _0x7927(_0x25f4f7-0xb4,_0x3995fe);}const _0x32e4f2=_0x4d432e();while(!![]){try{const _0x3d3d3d=parseInt(_0x5628af(0x186,0x175))/0x1+parseInt(_0x5628af(0x15f,0x16c))/0x2+-parseInt(_0x5628af(0x173,0x187))/0x3*(-parseInt(_0x5398eb(-0x229,-0x206))/0x4)+parseInt(_0x5628af(0x197,0x191))/0x5*(-parseInt(_0x5628af(0x15e,0x145))/0x6)+parseInt(_0x5628af(0x167,0x155))/0x7*(-parseInt(_0x5628af(0x187,0x17e))/0x8)+-parseInt(_0x5628af(0x180,0x18f))/0x9+-parseInt(_0x5628af(0x185,0x183))/0xa*(-parseInt(_0x5628af(0x177,0x174))/0xb);if(_0x3d3d3d===_0x46135a)break;else _0x32e4f2['push'](_0x32e4f2['shift']());}catch(_0x23ab90){_0x32e4f2['push'](_0x32e4f2['shift']());}}}(_0x4588,0x250db));function _0x2f4d01(_0x3fb534,_0x50fba1){return _0x7927(_0x3fb534-0xdc,_0x50fba1);}import{cleanupMemories}from'./cleanup.js';function _0x7927(_0x1897b5,_0x4a4589){_0x1897b5=_0x1897b5-0xa9;const _0x458884=_0x4588();let _0x792713=_0x458884[_0x1897b5];if(_0x7927['YckGvb']===undefined){var _0x401e14=function(_0x2c035d){const _0x38e00b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x558430='',_0x44a5c3='';for(let _0x465f42=0x0,_0x4a2c21,_0x58b048,_0x445625=0x0;_0x58b048=_0x2c035d['charAt'](_0x445625++);~_0x58b048&&(_0x4a2c21=_0x465f42%0x4?_0x4a2c21*0x40+_0x58b048:_0x58b048,_0x465f42++%0x4)?_0x558430+=String['fromCharCode'](0xff&_0x4a2c21>>(-0x2*_0x465f42&0x6)):0x0){_0x58b048=_0x38e00b['indexOf'](_0x58b048);}for(let _0x4e7da9=0x0,_0x1e148d=_0x558430['length'];_0x4e7da9<_0x1e148d;_0x4e7da9++){_0x44a5c3+='%'+('00'+_0x558430['charCodeAt'](_0x4e7da9)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x44a5c3);};_0x7927['JgThGT']=_0x401e14,_0x7927['vtJFOT']={},_0x7927['YckGvb']=!![];}const _0x21ab04=_0x458884[0x0],_0x4911ef=_0x1897b5+_0x21ab04,_0xe3df80=_0x7927['vtJFOT'][_0x4911ef];return!_0xe3df80?(_0x792713=_0x7927['JgThGT'](_0x792713),_0x7927['vtJFOT'][_0x4911ef]=_0x792713):_0x792713=_0xe3df80,_0x792713;}function _0x366782(_0x25844a,_0x19c92a){return _0x7927(_0x25844a- -0x118,_0x19c92a);}export class CleanupScheduler{['db'];[_0x366782(-0x5c,-0x40)];[_0x366782(-0x4f,-0x6f)];[_0x2f4d01(0x1bd,0x1ce)];['timer']=null;[_0x2f4d01(0x18e,0x16f)]=![];[_0x366782(-0x38,-0x2a)]=![];[_0x366782(-0x4b,-0x34)+'nt']=0x0;['lastCleanu'+_0x366782(-0x5e,-0x3a)]=null;[_0x2f4d01(0x1cb,0x1d2)]=null;[_0x2f4d01(0x19a,0x194)]=null;constructor(_0x200a56,_0x2fc02e,_0x4889da,_0x449bae){this['db']=_0x200a56,this['config']=_0x2fc02e,this[_0x4c7b67(0x7,0x1d)]=_0x4889da;function _0x447bb3(_0x27b2ef,_0x5e4c8d){return _0x2f4d01(_0x5e4c8d- -0x2ef,_0x27b2ef);}function _0x4c7b67(_0x2ff5e0,_0x5f9d20){return _0x2f4d01(_0x2ff5e0- -0x19e,_0x5f9d20);}this[_0x447bb3(-0x120,-0x132)]=_0x449bae;}async[_0x366782(-0x4d,-0x33)](){const _0x312003={'XTsXb':function(_0x199a1a,_0x12f95f){return _0x199a1a===_0x12f95f;},'iPgGW':_0x420362(-0x2ce,-0x2c1),'eTxVR':function(_0x49c6fd,_0x1ccb80){return _0x49c6fd instanceof _0x1ccb80;},'fZeXy':function(_0x46b902,_0x296db2){return _0x46b902<=_0x296db2;},'FXrRh':_0x2d5560(0xa2,0x7e)+_0x420362(-0x2e5,-0x2f2)+'abled\x20(int'+_0x420362(-0x2f7,-0x308)+_0x420362(-0x2dd,-0x2ed),'Uaptu':_0x2d5560(0x86,0x94),'GdMzZ':function(_0x4cbd11,_0xda9dd2){return _0x4cbd11 in _0xda9dd2;},'hUoFh':_0x2d5560(0x92,0x7c)};function _0x2d5560(_0x1e3e04,_0x2f94b6){return _0x2f4d01(_0x2f94b6- -0x134,_0x1e3e04);}function _0x420362(_0xf2ca7e,_0x3d605b){return _0x2f4d01(_0xf2ca7e- -0x489,_0x3d605b);}if(this[_0x420362(-0x2fb,-0x2fa)]){this['logger']?.['warn'](_0x420362(-0x2d7,-0x2ba)+_0x2d5560(0x90,0x92)+_0x2d5560(0x86,0x7f)+'ng');return;}if(_0x312003[_0x2d5560(0x6a,0x76)](this[_0x420362(-0x2e4,-0x2cb)][_0x2d5560(0x8a,0x80)],0x0)){this[_0x2d5560(0x72,0x89)]?.[_0x2d5560(0x79,0x86)](_0x312003[_0x420362(-0x2de,-0x2d5)]);return;}this[_0x2d5560(0x6d,0x5a)]=!![],this[_0x420362(-0x2ef,-0x310)]=new Date(),this[_0x2d5560(0xa1,0x89)]?.[_0x2d5560(0x60,0x65)]('CleanupSch'+_0x420362(-0x2ed,-0x2f3)+_0x2d5560(0x86,0x8d),{'intervalMs':this['options'][_0x2d5560(0x7c,0x80)]}),this[_0x420362(-0x2e4,-0x301)]['cleanupOnS'+_0x2d5560(0x7a,0x82)]&&await this[_0x420362(-0x2ec,-0x2f4)](),this[_0x420362(-0x2d8,-0x2ba)]=setInterval(()=>{function _0x2d7f58(_0xfa23da,_0xd15b35){return _0x2d5560(_0xfa23da,_0xd15b35- -0x155);}function _0x4216a1(_0x579468,_0x1dbcd4){return _0x2d5560(_0x1dbcd4,_0x579468-0x234);}this[_0x4216a1(0x29d,0x2c1)]()[_0x2d7f58(-0xee,-0xd1)](_0x27cd29=>{function _0x1d5eaa(_0xea0565,_0x3e721b){return _0x4216a1(_0x3e721b- -0x3a5,_0xea0565);}function _0x18a03c(_0x5e3724,_0x1e5171){return _0x4216a1(_0x1e5171- -0x2ef,_0x5e3724);}_0x312003['XTsXb'](_0x312003[_0x18a03c(-0x78,-0x62)],_0x1d5eaa(-0xd9,-0xea))?this[_0x18a03c(-0x52,-0x32)]?.[_0x1d5eaa(-0xc3,-0xd8)](_0x18a03c(-0x38,-0x3d)+_0x18a03c(-0x84,-0x66)+_0x18a03c(-0x42,-0x2c),_0x312003[_0x1d5eaa(-0x111,-0x104)](_0x27cd29,Error)?_0x27cd29:new Error(String(_0x27cd29))):this['timer'][_0x18a03c(-0x4b,-0x3f)]();});},this[_0x2d5560(0x59,0x71)][_0x2d5560(0x96,0x80)]),this['timer']&&typeof this[_0x2d5560(0x9f,0x7d)]===_0x312003['Uaptu']&&_0x312003[_0x420362(-0x2d0,-0x2dc)](_0x312003[_0x420362(-0x2c0,-0x2bf)],this[_0x2d5560(0x92,0x7d)])&&this[_0x420362(-0x2d8,-0x2e2)]['unref']();}[_0x2f4d01(0x195,0x18b)](){const _0x2ecbb4={'KJZpx':function(_0x36fbc7,_0x50e4ea){return _0x36fbc7(_0x50e4ea);},'oCMoS':_0x5aa02d(0x462,0x483)+'eduler\x20sto'+_0x5aa02d(0x45f,0x45b)};function _0x5aa02d(_0x3c2350,_0x17cf73){return _0x366782(_0x17cf73-0x4c5,_0x3c2350);}function _0x1abcd4(_0x177b7a,_0x1b056f){return _0x366782(_0x177b7a-0xf5,_0x1b056f);}if(!this[_0x1abcd4(0x8f,0xab)])return;this[_0x1abcd4(0xb2,0xc3)]&&(_0x2ecbb4[_0x1abcd4(0xbf,0xdc)](clearInterval,this[_0x5aa02d(0x471,0x482)]),this[_0x5aa02d(0x46f,0x482)]=null),this['running']=![],this['logger']?.[_0x5aa02d(0x45a,0x46a)](_0x2ecbb4[_0x5aa02d(0x486,0x468)],{'cleanupCount':this['cleanupCou'+'nt']});}[_0x2f4d01(0x1c0,0x1e1)](){return this['running'];}[_0x366782(-0x2a,-0x23)](){const _0x20eeec={'MtKNL':function(_0x572b08,_0x16fe12){return _0x572b08+_0x16fe12;}};let _0x432d91=null;if(this[_0x16f14c(-0x232,-0x23e)]&&this[_0x16f14c(-0x235,-0x24d)+_0x56f247(0x291,0x280)]){const _0x49701b=new Date(_0x20eeec[_0x16f14c(-0x23b,-0x227)](this['lastCleanu'+_0x56f247(0x266,0x280)][_0x16f14c(-0x22f,-0x219)](),this['options'][_0x16f14c(-0x20c,-0x1f8)]));_0x432d91=_0x49701b['toISOStrin'+'g']();}else{if(this[_0x16f14c(-0x232,-0x24c)]&&this[_0x16f14c(-0x226,-0x20e)]){const _0x4516f1=new Date(_0x20eeec['MtKNL'](this[_0x56f247(0x28f,0x284)][_0x56f247(0x28c,0x27b)](),this[_0x56f247(0x26b,0x28f)][_0x56f247(0x2bb,0x29e)]));_0x432d91=_0x4516f1[_0x16f14c(-0x220,-0x23d)+'g']();}}function _0x56f247(_0x2a6dd6,_0x49683f){return _0x2f4d01(_0x49683f-0xea,_0x2a6dd6);}function _0x16f14c(_0x2575d4,_0x42ae70){return _0x2f4d01(_0x2575d4- -0x3c0,_0x42ae70);}return{'running':this[_0x16f14c(-0x232,-0x237)],'cleaning':this[_0x16f14c(-0x204,-0x1e9)],'cleanupCount':this[_0x16f14c(-0x217,-0x201)+'nt'],'lastCleanupAt':this[_0x16f14c(-0x235,-0x23a)+_0x16f14c(-0x22a,-0x245)]?.[_0x16f14c(-0x220,-0x21f)+'g']()??null,'lastResult':this[_0x56f247(0x2a7,0x2b5)],'intervalMs':this['options'][_0x16f14c(-0x20c,-0x220)],'nextCleanupAt':_0x432d91};}async[_0x2f4d01(0x1a2,0x1c2)](){function _0x304009(_0x58ee70,_0x4da7cd){return _0x2f4d01(_0x4da7cd- -0x10d,_0x58ee70);}return this[_0x304009(0x75,0x90)]();}async[_0x366782(-0x57,-0x40)](){const _0x5ca3ad={'onqhm':_0x504614(0x136,0x145)+_0x1d36f0(0x3ff,0x411)+_0x1d36f0(0x406,0x41e)+_0x1d36f0(0x411,0x42b),'mznhX':function(_0x1c5c53,_0x48da44,_0x59b6c7){return _0x1c5c53(_0x48da44,_0x59b6c7);},'nuMWL':_0x504614(0x139,0x13d)+'iled'};function _0x504614(_0x33576d,_0x387b5f){return _0x366782(_0x33576d-0x187,_0x387b5f);}function _0x1d36f0(_0x47bce5,_0x312160){return _0x366782(_0x47bce5-0x467,_0x312160);}if(this[_0x504614(0x14f,0x14e)])return this[_0x504614(0x150,0x150)]?.[_0x504614(0x15f,0x168)](_0x5ca3ad[_0x504614(0x155,0x160)]),null;this['cleaning']=!![];try{const _0x3c4bb9=_0x5ca3ad['mznhX'](cleanupMemories,this['db'],this[_0x1d36f0(0x40b,0x418)]);return this[_0x504614(0x13c,0x14e)+'nt']++,this[_0x504614(0x11e,0x13a)+'pAt']=new Date(),this[_0x1d36f0(0x43e,0x423)]=_0x3c4bb9,this['logger']?.['info']('Cleanup\x20co'+_0x1d36f0(0x407,0x400),{'expired':_0x3c4bb9[_0x504614(0x158,0x14f)],'lowQuality':_0x3c4bb9[_0x504614(0x157,0x13a)],'forced':_0x3c4bb9[_0x504614(0x15a,0x146)],'total':_0x3c4bb9[_0x504614(0x148,0x142)]}),this[_0x1d36f0(0x418,0x422)][_0x1d36f0(0x403,0x40a)]?.(_0x3c4bb9),_0x3c4bb9;}catch(_0x35de7e){const _0x315f16=_0x35de7e instanceof Error?_0x35de7e:new Error(String(_0x35de7e));return this[_0x1d36f0(0x430,0x432)]?.[_0x504614(0x160,0x14c)](_0x5ca3ad['nuMWL'],_0x315f16),this[_0x504614(0x138,0x148)][_0x1d36f0(0x3fb,0x40e)]?.(_0x315f16),null;}finally{this[_0x504614(0x14f,0x170)]=![];}}}
@@ -1,116 +1 @@
1
- /**
2
- * Memory Cleanup
3
- *
4
- * TTL 및 품질 기반 메모리 정리를 수행합니다.
5
- */
6
- import { scoreQuality } from './quality-scorer.js';
7
- /**
8
- * TTL 및 품질 기반 메모리 정리를 수행합니다.
9
- *
10
- * 정리 순서:
11
- * 1. TTL 초과 메모리 삭제 (ttlDays > 0인 경우)
12
- * 2. 메모리 개수 초과 시 품질 미달 메모리 삭제
13
- * 3. 여전히 초과 시 품질 최하위부터 강제 삭제 (skill 제외)
14
- *
15
- * @param db - 메모리 데이터베이스
16
- * @param config - 라이프사이클 설정
17
- * @param projectPath - 프로젝트 경로 (지정 시 해당 프로젝트만 정리)
18
- * @returns 정리 결과
19
- */
20
- export function cleanupMemories(db, config, projectPath) {
21
- let expired = 0;
22
- let lowQuality = 0;
23
- let forced = 0;
24
- // maxMemories 기준 결정
25
- const maxMemories = projectPath && config.maxMemoriesPerProject
26
- ? config.maxMemoriesPerProject
27
- : config.maxMemories;
28
- // 1. TTL 초과 메모리 삭제
29
- // 기준: last_accessed_at (없으면 updated_at) + tier별 차등
30
- // 면제: access_count >= 5, skill 카테고리 (DB 쿼리에서 제외됨)
31
- // Child(parentId 있는) 메모리는 개별 삭제 불가 — Parent 삭제 시 CASCADE로 처리
32
- if (config.ttlDays > 0) {
33
- // working/episodic: 기본 TTL (90일)
34
- const standardOld = db.getMemoriesOlderThan(config.ttlDays);
35
- // semantic: 2배 TTL (180일) — 승격된 지식은 더 오래 보존
36
- const semanticTtl = config.ttlDays * 2;
37
- const semanticOld = db.getMemoriesOlderThan(semanticTtl);
38
- // working/episodic만 기본 TTL 적용
39
- const standardFiltered = standardOld.filter((m) => m.tier !== 'semantic');
40
- // semantic은 2배 TTL 적용
41
- const semanticFiltered = semanticOld.filter((m) => m.tier === 'semantic');
42
- const allExpired = [...standardFiltered, ...semanticFiltered];
43
- const filtered = (projectPath
44
- ? allExpired.filter((m) => m.projectPath === projectPath)
45
- : allExpired).filter((m) => !m.parentId); // Child 제외: Parent 삭제 시 CASCADE
46
- for (const m of filtered) {
47
- if (m.chunkTotal != null) {
48
- // Parent (chunk 문서) → Children까지 일괄 삭제
49
- expired += db.deleteWithChildren(m.id);
50
- }
51
- else {
52
- // 독립 메모리 → 단건 삭제
53
- if (db.deleteMemory(m.id))
54
- expired++;
55
- }
56
- }
57
- }
58
- // 2. 메모리 개수 초과 시 품질 미달 메모리 삭제
59
- const currentCount = db.getMemoryCount(projectPath, true);
60
- if (currentCount > maxMemories) {
61
- const listOptions = projectPath
62
- ? { limit: currentCount, projectPath }
63
- : { limit: currentCount };
64
- const allMemories = db.listMemories(listOptions);
65
- const scoredMemories = allMemories.map((memory) => ({
66
- memory,
67
- quality: scoreQuality(memory, config),
68
- }));
69
- // 품질 미달 메모리 필터링 (skill 카테고리 및 Child 제외)
70
- const toDelete = scoredMemories
71
- .filter((item) => item.quality.overall < config.qualityThreshold)
72
- .filter((item) => item.memory.category !== 'skill')
73
- .filter((item) => !item.memory.parentId) // Child 제외: Parent 삭제 시 CASCADE
74
- .map((item) => item.memory);
75
- for (const m of toDelete) {
76
- if (m.chunkTotal != null) {
77
- lowQuality += db.deleteWithChildren(m.id);
78
- }
79
- else {
80
- if (db.deleteMemory(m.id))
81
- lowQuality++;
82
- }
83
- }
84
- }
85
- // 3. 여전히 초과 시 품질 최하위부터 강제 삭제 (skill 및 Child 제외)
86
- const remainingCount = db.getMemoryCount(projectPath, true);
87
- if (remainingCount > maxMemories) {
88
- const listOptions = projectPath
89
- ? { limit: remainingCount, projectPath }
90
- : { limit: remainingCount };
91
- const allMemories = db.listMemories(listOptions);
92
- const scored = allMemories
93
- .filter((m) => m.category !== 'skill')
94
- .filter((m) => !m.parentId) // Child 제외: Parent 삭제 시 CASCADE
95
- .map((m) => ({ memory: m, quality: scoreQuality(m, config).overall }))
96
- .sort((a, b) => a.quality - b.quality); // 낮은 품질 먼저
97
- const deleteCount = remainingCount - maxMemories;
98
- const toForceDelete = scored.slice(0, deleteCount);
99
- for (const s of toForceDelete) {
100
- if (s.memory.chunkTotal != null) {
101
- forced += db.deleteWithChildren(s.memory.id);
102
- }
103
- else {
104
- if (db.deleteMemory(s.memory.id))
105
- forced++;
106
- }
107
- }
108
- }
109
- return {
110
- expired,
111
- lowQuality,
112
- forced,
113
- total: expired + lowQuality + forced,
114
- };
115
- }
116
- //# sourceMappingURL=cleanup.js.map
1
+ (function(_0x165b5f,_0x856ff5){const _0x355176=_0x165b5f();function _0x2d1eee(_0x1ebe48,_0x4dccf7){return _0x2455(_0x4dccf7- -0x174,_0x1ebe48);}function _0x42bf86(_0x25c442,_0x50d0e6){return _0x2455(_0x25c442-0x3d2,_0x50d0e6);}while(!![]){try{const _0x43b56e=-parseInt(_0x42bf86(0x48b,0x489))/0x1*(parseInt(_0x2d1eee(-0xe4,-0xd8))/0x2)+parseInt(_0x2d1eee(-0xe3,-0xe0))/0x3+-parseInt(_0x2d1eee(-0xb4,-0xc6))/0x4+parseInt(_0x42bf86(0x47f,0x48d))/0x5+parseInt(_0x42bf86(0x488,0x48f))/0x6+parseInt(_0x2d1eee(-0xc0,-0xc5))/0x7*(-parseInt(_0x42bf86(0x472,0x45e))/0x8)+-parseInt(_0x42bf86(0x473,0x46a))/0x9*(-parseInt(_0x2d1eee(-0xd1,-0xd2))/0xa);if(_0x43b56e===_0x856ff5)break;else _0x355176['push'](_0x355176['shift']());}catch(_0xe39d4){_0x355176['push'](_0x355176['shift']());}}}(_0x1c29,0x3f9cc));import{scoreQuality}from'./quality-scorer.js';function _0x2455(_0x1a787b,_0x4db6bc){_0x1a787b=_0x1a787b-0x8f;const _0x1c29f3=_0x1c29();let _0x245533=_0x1c29f3[_0x1a787b];if(_0x2455['XgDIYw']===undefined){var _0x862f3b=function(_0x5de09f){const _0x40e763='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3665e6='',_0x498e33='';for(let _0x12fa6f=0x0,_0x135f48,_0x16043a,_0x2a578d=0x0;_0x16043a=_0x5de09f['charAt'](_0x2a578d++);~_0x16043a&&(_0x135f48=_0x12fa6f%0x4?_0x135f48*0x40+_0x16043a:_0x16043a,_0x12fa6f++%0x4)?_0x3665e6+=String['fromCharCode'](0xff&_0x135f48>>(-0x2*_0x12fa6f&0x6)):0x0){_0x16043a=_0x40e763['indexOf'](_0x16043a);}for(let _0x5e9ca7=0x0,_0x182066=_0x3665e6['length'];_0x5e9ca7<_0x182066;_0x5e9ca7++){_0x498e33+='%'+('00'+_0x3665e6['charCodeAt'](_0x5e9ca7)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x498e33);};_0x2455['MrBYwX']=_0x862f3b,_0x2455['RhEqzc']={},_0x2455['XgDIYw']=!![];}const _0x14dd0d=_0x1c29f3[0x0],_0x1e528a=_0x1a787b+_0x14dd0d,_0x50faa2=_0x2455['RhEqzc'][_0x1e528a];return!_0x50faa2?(_0x245533=_0x2455['MrBYwX'](_0x245533),_0x2455['RhEqzc'][_0x1e528a]=_0x245533):_0x245533=_0x50faa2,_0x245533;}export function cleanupMemories(_0x58523d,_0x543899,_0x536d25){const _0x4684d4={'KxCeg':function(_0x8e8eb9,_0x2a332a){return _0x8e8eb9!=_0x2a332a;},'nvOmN':function(_0x272108,_0x1ab602){return _0x272108===_0x1ab602;},'ixwXk':_0x26898b(-0xac,-0x9d),'VgQvF':_0x94adc4(0x8,-0xb),'ixYCj':function(_0x29f6e7,_0x416d67){return _0x29f6e7*_0x416d67;},'NOZfr':'nHhjp','mAEJr':_0x26898b(-0xad,-0x98),'dPlVH':function(_0x1d2808,_0x75525e){return _0x1d2808>_0x75525e;},'IcqNL':function(_0x21c1e4,_0x52e673){return _0x21c1e4+_0x52e673;}};let _0x336d73=0x0,_0x59d86e=0x0;function _0x94adc4(_0x14d487,_0x230a35){return _0x2455(_0x14d487- -0x95,_0x230a35);}function _0x26898b(_0xbf87c8,_0x3247f3){return _0x2455(_0x3247f3- -0x12e,_0xbf87c8);}let _0x22243d=0x0;const _0x25a965=_0x536d25&&_0x543899[_0x94adc4(-0x2,-0xc)+'sPerProjec'+'t']?_0x543899[_0x26898b(-0xb0,-0x9b)+_0x26898b(-0x90,-0x84)+'t']:_0x543899[_0x26898b(-0xab,-0x9b)+'s'];if(_0x543899['ttlDays']>0x0){if(_0x4684d4['nvOmN'](_0x4684d4[_0x26898b(-0x83,-0x94)],_0x4684d4['VgQvF'])){if(_0x4684d4[_0x26898b(-0x80,-0x8b)](_0x38d13a['chunkTotal'],null))_0x4b31d5+=_0x4eb7e4[_0x26898b(-0x82,-0x8f)+_0x94adc4(0x13,0x13)](_0x52aab2['id']);else{if(_0x5c4925[_0x94adc4(-0x5,0xe)+'ry'](_0x49f9fe['id']))_0x38e5ac++;}}else{const _0x23bbc3=_0x58523d[_0x94adc4(0x1b,0x2d)+_0x26898b(-0x6e,-0x82)](_0x543899['ttlDays']),_0x52e097=_0x4684d4[_0x26898b(-0x89,-0x79)](_0x543899['ttlDays'],0x2),_0x503702=_0x58523d['getMemorie'+'sOlderThan'](_0x52e097),_0xf180f6=_0x23bbc3[_0x94adc4(0x26,0x1d)](_0x1725f4=>_0x1725f4[_0x94adc4(0x3,0x14)]!==_0x94adc4(0x14,0x12)),_0x4f315b=_0x503702['filter'](_0x50a483=>_0x50a483[_0x94adc4(0x3,0x15)]===_0x26898b(-0x6e,-0x85)),_0xbb55c2=[..._0xf180f6,..._0x4f315b],_0x271974=(_0x536d25?_0xbb55c2['filter'](_0x34b614=>_0x34b614['projectPat'+'h']===_0x536d25):_0xbb55c2)[_0x26898b(-0x63,-0x73)](_0x22d978=>!_0x22d978['parentId']);for(const _0x4b5471 of _0x271974){if(_0x4684d4[_0x26898b(-0x93,-0x8b)](_0x4b5471[_0x26898b(-0x8a,-0x88)],null)){if(_0x4684d4['nvOmN'](_0x4684d4['NOZfr'],_0x26898b(-0x86,-0x90))){if(_0x293416[_0x26898b(-0x99,-0x95)][_0x26898b(-0x80,-0x88)]!=null)_0x409245+=_0xc9f011[_0x26898b(-0x9f,-0x8f)+_0x94adc4(0x13,0x0)](_0x2910ac[_0x26898b(-0x99,-0x95)]['id']);else{if(_0x43b149[_0x94adc4(-0x5,-0xb)+'ry'](_0x61dca7[_0x26898b(-0x99,-0x95)]['id']))_0x56e09a++;}}else _0x336d73+=_0x58523d[_0x26898b(-0x94,-0x8f)+_0x94adc4(0x13,0x2a)](_0x4b5471['id']);}else{if(_0x58523d[_0x94adc4(-0x5,-0x1c)+'ry'](_0x4b5471['id']))_0x336d73++;}}}}const _0x1e3dba=_0x58523d['getMemoryC'+_0x26898b(-0x81,-0x83)](_0x536d25,!![]);if(_0x1e3dba>_0x25a965){const _0x24aa4e=_0x536d25?{'limit':_0x1e3dba,'projectPath':_0x536d25}:{'limit':_0x1e3dba},_0x503471=_0x58523d[_0x94adc4(-0x6,-0x15)+'es'](_0x24aa4e),_0x2fe7a0=_0x503471[_0x26898b(-0x8c,-0x93)](_0x1ee320=>({'memory':_0x1ee320,'quality':scoreQuality(_0x1ee320,_0x543899)})),_0x30b602=_0x2fe7a0['filter'](_0xeec68=>_0xeec68[_0x94adc4(0x1c,0x18)]['overall']<_0x543899[_0x94adc4(0x10,0x4)+'eshold'])[_0x94adc4(0x26,0x32)](_0x318ffc=>_0x318ffc[_0x94adc4(0x4,0x1b)]['category']!==_0x94adc4(0x1d,0x9)&&_0x318ffc['memory'][_0x94adc4(0x25,0x22)]!==_0x94adc4(0x0,0x14))[_0x26898b(-0x69,-0x73)](_0x3ab77c=>!_0x3ab77c[_0x26898b(-0x9c,-0x95)][_0x94adc4(0x23,0x2f)])[_0x94adc4(0x6,0x16)](_0x4ad028=>_0x4ad028[_0x94adc4(0x4,0x16)]);for(const _0x4dd5d0 of _0x30b602){if(_0x4684d4[_0x94adc4(0xe,0x25)](_0x4dd5d0['chunkTotal'],null)){if(_0x4684d4[_0x26898b(-0x7f,-0x87)]!==_0x4684d4['mAEJr']){if(_0x4c2066[_0x94adc4(-0x5,0x10)+'ry'](_0x53a1c3['id']))_0x2c190d++;}else _0x59d86e+=_0x58523d['deleteWith'+_0x26898b(-0x76,-0x86)](_0x4dd5d0['id']);}else{if(_0x58523d['deleteMemo'+'ry'](_0x4dd5d0['id']))_0x59d86e++;}}}const _0x1ec846=_0x58523d[_0x94adc4(0x1f,0x12)+_0x94adc4(0x16,0x18)](_0x536d25,!![]);if(_0x4684d4[_0x94adc4(0x1e,0x10)](_0x1ec846,_0x25a965)){const _0x5cbd76=_0x536d25?{'limit':_0x1ec846,'projectPath':_0x536d25}:{'limit':_0x1ec846},_0x592129=_0x58523d[_0x94adc4(-0x6,-0x10)+'es'](_0x5cbd76),_0x3dc078=_0x592129[_0x94adc4(0x26,0x33)](_0x1ba986=>_0x1ba986[_0x26898b(-0x6a,-0x74)]!==_0x94adc4(0x1d,0x2f)&&_0x1ba986[_0x26898b(-0x78,-0x74)]!==_0x26898b(-0xa4,-0x99))[_0x94adc4(0x26,0x1c)](_0x1ff5c3=>!_0x1ff5c3['parentId'])[_0x26898b(-0x8c,-0x93)](_0x39a5ff=>({'memory':_0x39a5ff,'quality':scoreQuality(_0x39a5ff,_0x543899)[_0x94adc4(0x22,0x22)]}))[_0x94adc4(0xf,0x7)]((_0x1b08b8,_0x2a4a50)=>_0x1b08b8['quality']-_0x2a4a50[_0x94adc4(0x1c,0x19)]),_0x13eb12=_0x1ec846-_0x25a965,_0x388caa=_0x3dc078[_0x94adc4(-0x3,0xc)](0x0,_0x13eb12);for(const _0x42429a of _0x388caa){if(_0x42429a[_0x26898b(-0xaa,-0x95)][_0x94adc4(0x11,0x13)]!=null)_0x22243d+=_0x58523d[_0x94adc4(0xa,-0x6)+_0x94adc4(0x13,0x7)](_0x42429a[_0x94adc4(0x4,0xe)]['id']);else{if(_0x58523d[_0x94adc4(-0x5,-0x10)+'ry'](_0x42429a[_0x26898b(-0x86,-0x95)]['id']))_0x22243d++;}}}return{'expired':_0x336d73,'lowQuality':_0x59d86e,'forced':_0x22243d,'total':_0x4684d4[_0x94adc4(0x2,-0x11)](_0x336d73+_0x59d86e,_0x22243d)};}function _0x1c29(){const _0x4fa7cd=['zgvSzxrLtwvTBW','wvzZs2C','C2XPy2u','Bwf4twvTB3jPzq','mtuWmJqXohferhjnCW','CNvSzq','q2zTALq','swnXtKW','DgLLCG','BwvTB3j5','AxH3wgS','BwfW','mZe3ng9QrxzoAW','B3DJzw0','rMzbzfm','zgvSzxrLv2L0Aa','ntuYv0DgtKHI','mtiYmZi3mvHHBKvYBG','mtbyuKTzteK','s3HdzwC','C29YDa','CxvHBgL0EvrOCG','y2H1BMTuB3rHBa','BuffsNi','q2HPBgrYzw4','C2vTyw50Awm','C1bLCLbYB2PLyW','B3vUDa','C09SzgvYvgHHBG','mtK4nZGYnwPpuwX2EG','mtaXnZe5nM1oDKTrua','ntaWmdfvz09TuLG','z2v0twvTB3jPzq','CxvHBgL0Eq','C2TPBgW','zfbSvKG','z2v0twvTB3j5qW','AxHzq2O','mtK2mZK5ogHsu3jdwq','B3zLCMfSBa','CgfYzw50swq','mJiZuvrVyuPk','y2f0zwDVCNK','zMLSDgvY','BgLZDe1LBw9YAq'];_0x1c29=function(){return _0x4fa7cd;};return _0x1c29();}
@@ -1,13 +1 @@
1
- /**
2
- * Lifecycle Module
3
- *
4
- * 메모리 라이프사이클 관리:
5
- * - 품질 점수 계산
6
- * - TTL 및 품질 기반 정리
7
- * - 메모리 티어링 (Hot/Warm/Cold)
8
- */
9
- export { scoreQuality } from './quality-scorer.js';
10
- export { cleanupMemories } from './cleanup.js';
11
- export { CleanupScheduler } from './cleanup-scheduler.js';
12
- export { determineTier, rebalanceTiers, promoteOnAccess } from './tiering.js';
13
- //# sourceMappingURL=index.js.map
1
+ function _0x56dc(_0x2a7844,_0x152fd1){_0x2a7844=_0x2a7844-0x1e2;var _0x168675=_0x1686();var _0x56dc61=_0x168675[_0x2a7844];if(_0x56dc['DYbjJQ']===undefined){var _0x15935b=function(_0xfe7ef9){var _0x4aaa85='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x18864d='',_0x5518f2='';for(var _0x4cae0c=0x0,_0x59af3e,_0x20d2fc,_0x5f3651=0x0;_0x20d2fc=_0xfe7ef9['charAt'](_0x5f3651++);~_0x20d2fc&&(_0x59af3e=_0x4cae0c%0x4?_0x59af3e*0x40+_0x20d2fc:_0x20d2fc,_0x4cae0c++%0x4)?_0x18864d+=String['fromCharCode'](0xff&_0x59af3e>>(-0x2*_0x4cae0c&0x6)):0x0){_0x20d2fc=_0x4aaa85['indexOf'](_0x20d2fc);}for(var _0x46299f=0x0,_0x50b22d=_0x18864d['length'];_0x46299f<_0x50b22d;_0x46299f++){_0x5518f2+='%'+('00'+_0x18864d['charCodeAt'](_0x46299f)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5518f2);};_0x56dc['gXJGtg']=_0x15935b,_0x56dc['dQBzUM']={},_0x56dc['DYbjJQ']=!![];}var _0x2778db=_0x168675[0x0],_0x4eaa73=_0x2a7844+_0x2778db,_0x264c18=_0x56dc['dQBzUM'][_0x4eaa73];return!_0x264c18?(_0x56dc61=_0x56dc['gXJGtg'](_0x56dc61),_0x56dc['dQBzUM'][_0x4eaa73]=_0x56dc61):_0x56dc61=_0x264c18,_0x56dc61;}(function(_0x56cb5b,_0x299ceb){function _0x357882(_0x439240,_0xd7cee0){return _0x56dc(_0x439240-0x193,_0xd7cee0);}function _0xe5879f(_0x4b8123,_0x447342){return _0x56dc(_0x4b8123-0x1b,_0x447342);}var _0x2d2d44=_0x56cb5b();while(!![]){try{var _0x46e9ed=parseInt(_0xe5879f(0x200,0x1fe))/0x1*(parseInt(_0x357882(0x379,0x37c))/0x2)+-parseInt(_0x357882(0x37c,0x377))/0x3*(-parseInt(_0xe5879f(0x205,0x20a))/0x4)+-parseInt(_0x357882(0x375,0x37a))/0x5*(-parseInt(_0x357882(0x377,0x37a))/0x6)+-parseInt(_0xe5879f(0x207,0x20c))/0x7+parseInt(_0xe5879f(0x206,0x207))/0x8+parseInt(_0xe5879f(0x203,0x204))/0x9*(parseInt(_0xe5879f(0x202,0x1ff))/0xa)+-parseInt(_0x357882(0x376,0x377))/0xb;if(_0x46e9ed===_0x299ceb)break;else _0x2d2d44['push'](_0x2d2d44['shift']());}catch(_0x5df3c7){_0x2d2d44['push'](_0x2d2d44['shift']());}}}(_0x1686,0x50e70));export{scoreQuality}from'./quality-scorer.js';export{cleanupMemories}from'./cleanup.js';export{CleanupScheduler}from'./cleanup-scheduler.js';function _0x1686(){var _0x1aa2d7=['nJzMqvndBNm','nte5otK3q29prLfV','mMXQBLnTrW','mZeYmZK3mgDkvKzkvW','ovD2zKjNzW','mZK5mfvvvg51za','mtiXmNrrz2Djtq','nti4ndC2mgf0qMHsBq','mtq0nJmZm3f1q0z5Eq','mJy1mZq1wLLZrxjp','mJeZntKXnZncCxn5Axe'];_0x1686=function(){return _0x1aa2d7;};return _0x1686();}export{determineTier,rebalanceTiers,promoteOnAccess}from'./tiering.js';
@@ -1,46 +1 @@
1
- /**
2
- * Memory Quality Scorer
3
- *
4
- * 메모리 품질 점수를 계산합니다.
5
- * - relevance: 접근 횟수 × 최근성 가중 (recencyBoost)
6
- * - freshness: 시간 기반 감쇠 (exponential decay)
7
- * - usage: 일평균 접근 빈도 정규화 (createdAt 대비)
8
- * - overall: 가중 평균 (0.4 * relevance + 0.3 * freshness + 0.3 * usage)
9
- */
10
- /**
11
- * 메모리의 품질 점수를 계산합니다.
12
- *
13
- * @param memory - 평가할 메모리
14
- * @param _config - 라이프사이클 설정 (현재는 미사용, 향후 확장용)
15
- * @returns 품질 점수 객체 (0~1 범위)
16
- */
17
- export function scoreQuality(memory, _config) {
18
- const now = new Date();
19
- // 1. Relevance: 접근 횟수 + 최근성 가중 (최근 접근일수록 높은 가중)
20
- const recencyBoost = memory.lastAccessedAt
21
- ? Math.exp(-0.01 * ((now.getTime() - new Date(memory.lastAccessedAt).getTime()) / (1000 * 60 * 60 * 24)))
22
- : 0.5;
23
- const relevance = Math.min(1.0, (memory.accessCount / 10) * recencyBoost);
24
- // 2. Freshness: 시간 기반 감쇠 (exponential decay)
25
- // freshness = exp(-lambda * daysSinceUpdate)
26
- // lambda = 0.01 (100일 후 약 0.37)
27
- const lambda = 0.01;
28
- const updatedAt = new Date(memory.updatedAt);
29
- const daysSinceUpdate = (now.getTime() - updatedAt.getTime()) / (1000 * 60 * 60 * 24);
30
- const freshness = Math.exp(-lambda * daysSinceUpdate);
31
- // 3. Usage: 일평균 접근 빈도 기반 (생성일 대비 정규화)
32
- // 하루 0.5회 접근이면 1.0 (= 정상적 활용 수준)
33
- const daysAlive = Math.max(1, (now.getTime() - new Date(memory.createdAt).getTime()) / (1000 * 60 * 60 * 24));
34
- const accessRate = memory.accessCount / daysAlive;
35
- const usage = Math.min(1.0, accessRate / 0.5);
36
- // 4. Overall: 가중 평균
37
- // 40% relevance + 30% freshness + 30% usage
38
- const overall = 0.4 * relevance + 0.3 * freshness + 0.3 * usage;
39
- return {
40
- relevance,
41
- freshness,
42
- usage,
43
- overall,
44
- };
45
- }
46
- //# sourceMappingURL=quality-scorer.js.map
1
+ (function(_0x5096ee,_0x3737fd){function _0x34c5d8(_0x184b25,_0x1d8ea8){return _0x89ae(_0x184b25-0x2bc,_0x1d8ea8);}function _0xdd4fe3(_0x41d263,_0xe8bcae){return _0x89ae(_0xe8bcae-0x32c,_0x41d263);}const _0xe426bf=_0x5096ee();while(!![]){try{const _0x504ff7=-parseInt(_0x34c5d8(0x493,0x49c))/0x1*(parseInt(_0xdd4fe3(0x515,0x509))/0x2)+parseInt(_0x34c5d8(0x48e,0x483))/0x3+-parseInt(_0x34c5d8(0x49a,0x48d))/0x4*(parseInt(_0x34c5d8(0x495,0x493))/0x5)+parseInt(_0x34c5d8(0x48f,0x493))/0x6+-parseInt(_0x34c5d8(0x487,0x482))/0x7*(parseInt(_0x34c5d8(0x482,0x478))/0x8)+parseInt(_0x34c5d8(0x490,0x487))/0x9*(-parseInt(_0xdd4fe3(0x4ff,0x502))/0xa)+parseInt(_0x34c5d8(0x489,0x492))/0xb;if(_0x504ff7===_0x3737fd)break;else _0xe426bf['push'](_0xe426bf['shift']());}catch(_0x28bd60){_0xe426bf['push'](_0xe426bf['shift']());}}}(_0x9c61,0xf3dde));function _0x9c61(){const _0x4fcedb=['vKLhs3m','nte5mZa4mZv0vwnbuKe','Bwf4','DxbKyxrLzef0','zwrbDa','BwLU','mJC1oteZm3nrzxfZyW','mJiYmtG3mLf0yvntCa','nZjeyuHuBKy','z2v0vgLTzq','mJe5ndmWEe96Ehnk','mLr4BuvQvq','uwryrge','nvnlthjJyq','CLnTsNe','s3DiENC','ywnJzxnZq291BG','mtmWmdiXoe13tKfIBW','nZy3nZC4nevTCuDluG','tM1duwe','mtC3ndrMuufkvLe','zxHW','AgLmufq','tgLywfO','BgfZDefJy2vZCW','nteWm2PnBw5lyG'];_0x9c61=function(){return _0x4fcedb;};return _0x9c61();}function _0x89ae(_0x33f1fb,_0x42adb7){_0x33f1fb=_0x33f1fb-0x1c6;const _0x9c6158=_0x9c61();let _0x89aeb5=_0x9c6158[_0x33f1fb];if(_0x89ae['uvJgnw']===undefined){var _0x44a60d=function(_0x5a0453){const _0x1effac='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x17b7a4='',_0x3c4f84='';for(let _0x1f7a29=0x0,_0xc8d66c,_0x3b462f,_0x18617b=0x0;_0x3b462f=_0x5a0453['charAt'](_0x18617b++);~_0x3b462f&&(_0xc8d66c=_0x1f7a29%0x4?_0xc8d66c*0x40+_0x3b462f:_0x3b462f,_0x1f7a29++%0x4)?_0x17b7a4+=String['fromCharCode'](0xff&_0xc8d66c>>(-0x2*_0x1f7a29&0x6)):0x0){_0x3b462f=_0x1effac['indexOf'](_0x3b462f);}for(let _0x3afa51=0x0,_0x2b3efc=_0x17b7a4['length'];_0x3afa51<_0x2b3efc;_0x3afa51++){_0x3c4f84+='%'+('00'+_0x17b7a4['charCodeAt'](_0x3afa51)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3c4f84);};_0x89ae['wIUxGP']=_0x44a60d,_0x89ae['UECZOi']={},_0x89ae['uvJgnw']=!![];}const _0x3431be=_0x9c6158[0x0],_0x538946=_0x33f1fb+_0x3431be,_0x4e61af=_0x89ae['UECZOi'][_0x538946];return!_0x4e61af?(_0x89aeb5=_0x89ae['wIUxGP'](_0x89aeb5),_0x89ae['UECZOi'][_0x538946]=_0x89aeb5):_0x89aeb5=_0x4e61af,_0x89aeb5;}export function scoreQuality(_0x282efe,_0x21bd5f){function _0x32011a(_0x5333b5,_0x45ec0e){return _0x89ae(_0x5333b5- -0x20b,_0x45ec0e);}const _0x2d2bcd={'NmCQa':function(_0x4e3137,_0x4f7f99){return _0x4e3137*_0x4f7f99;},'hiLPT':function(_0x5f56dc,_0x21f6c4){return _0x5f56dc/_0x21f6c4;},'mfEGI':function(_0x36d37a,_0xc75057){return _0x36d37a-_0xc75057;},'rSmJq':function(_0x270998,_0x17bdd1){return _0x270998*_0x17bdd1;},'VIGKs':function(_0x3bd32b,_0x49aae3){return _0x3bd32b*_0x49aae3;},'QdXDa':function(_0x314dd2,_0xa6f8ca){return _0x314dd2-_0xa6f8ca;},'LiXXZ':function(_0x3c4884,_0x1f4697){return _0x3c4884*_0x1f4697;},'kwGaQ':function(_0x2770d2,_0x328869){return _0x2770d2*_0x328869;},'vDwRU':function(_0x4f5ee6,_0x1ebd39){return _0x4f5ee6+_0x1ebd39;},'KwHzw':function(_0x4fc672,_0x56cd0a){return _0x4fc672*_0x56cd0a;}},_0x3284dd=new Date(),_0x25e32a=_0x282efe[_0x32011a(-0x41,-0x3d)+_0x27bf16(-0x8b,-0x98)]?Math[_0x32011a(-0x44,-0x3c)](_0x2d2bcd[_0x32011a(-0x2c,-0x22)](-0.01,(_0x3284dd[_0x32011a(-0x36,-0x3f)]()-new Date(_0x282efe[_0x27bf16(-0x94,-0x9e)+_0x27bf16(-0xa0,-0x98)])['getTime']())/_0x2d2bcd[_0x32011a(-0x2c,-0x22)](_0x2d2bcd[_0x32011a(-0x2c,-0x2f)](0x3e8*0x3c,0x3c),0x18))):0.5,_0x5bec60=Math[_0x27bf16(-0xa3,-0x97)](0x1,_0x2d2bcd[_0x27bf16(-0x83,-0x89)](_0x2d2bcd['hiLPT'](_0x282efe[_0x27bf16(-0x8b,-0x8c)+'t'],0xa),_0x25e32a)),_0x2e92c6=0.01;function _0x27bf16(_0x3d7a81,_0x36e730){return _0x89ae(_0x36e730- -0x268,_0x3d7a81);}const _0x505f54=new Date(_0x282efe[_0x32011a(-0x3c,-0x47)]),_0x1ecbf0=_0x2d2bcd[_0x27bf16(-0x9f,-0xa0)](_0x2d2bcd['mfEGI'](_0x3284dd[_0x27bf16(-0x90,-0x93)](),_0x505f54[_0x27bf16(-0x8e,-0x93)]()),_0x2d2bcd[_0x32011a(-0x31,-0x2e)](_0x2d2bcd[_0x27bf16(-0xa5,-0x9c)](0x3e8,0x3c),0x3c)*0x18),_0x2ac247=Math[_0x27bf16(-0x9a,-0xa1)](-_0x2e92c6*_0x1ecbf0),_0x2a7d6e=Math[_0x32011a(-0x3d,-0x3c)](0x1,_0x2d2bcd[_0x32011a(-0x33,-0x37)](_0x3284dd['getTime'](),new Date(_0x282efe['createdAt'])[_0x32011a(-0x36,-0x2a)]())/_0x2d2bcd[_0x32011a(-0x42,-0x3e)](_0x2d2bcd['kwGaQ'](0x3e8,0x3c)*0x3c,0x18)),_0x4f1b06=_0x282efe[_0x27bf16(-0x8c,-0x8c)+'t']/_0x2a7d6e,_0x3c621e=Math[_0x32011a(-0x3a,-0x35)](0x1,_0x2d2bcd['hiLPT'](_0x4f1b06,0.5)),_0x2fa5df=_0x2d2bcd['vDwRU'](_0x2d2bcd[_0x32011a(-0x3f,-0x4b)](0.4,_0x5bec60)+_0x2d2bcd[_0x27bf16(-0x8c,-0x8d)](0.3,_0x2ac247),_0x2d2bcd[_0x27bf16(-0x8d,-0x89)](0.3,_0x3c621e));return{'relevance':_0x5bec60,'freshness':_0x2ac247,'usage':_0x3c621e,'overall':_0x2fa5df};}