a2a-memory 0.11.5 → 0.12.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 (274) 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.d.ts +8 -2
  10. package/dist/claude/sync.js +1 -298
  11. package/dist/cli/commands/add.js +1 -80
  12. package/dist/cli/commands/claude-sync.d.ts +3 -3
  13. package/dist/cli/commands/claude-sync.js +1 -70
  14. package/dist/cli/commands/cleanup.js +1 -83
  15. package/dist/cli/commands/config.js +1 -79
  16. package/dist/cli/commands/edit.js +1 -69
  17. package/dist/cli/commands/embed.js +1 -92
  18. package/dist/cli/commands/extract.js +1 -103
  19. package/dist/cli/commands/health.js +1 -105
  20. package/dist/cli/commands/list.js +1 -46
  21. package/dist/cli/commands/migrate-chunks.js +1 -205
  22. package/dist/cli/commands/migrate-file-refs.js +1 -183
  23. package/dist/cli/commands/proficiency.js +1 -146
  24. package/dist/cli/commands/rm.js +1 -64
  25. package/dist/cli/commands/search.js +1 -90
  26. package/dist/cli/commands/setup-wizard.js +1 -387
  27. package/dist/cli/commands/setup.js +1 -170
  28. package/dist/cli/commands/skill.js +1 -151
  29. package/dist/cli/commands/status.js +1 -70
  30. package/dist/cli/commands/sync.js +1 -202
  31. package/dist/cli/commands/team.js +1 -142
  32. package/dist/cli/index.js +1 -87
  33. package/dist/config/manager.js +1 -372
  34. package/dist/db/database.d.ts +36 -0
  35. package/dist/db/database.js +1 -1400
  36. package/dist/embedding/e5-provider.js +1 -147
  37. package/dist/embedding/index.js +1 -34
  38. package/dist/embedding/local-provider.js +1 -157
  39. package/dist/embedding/openai-provider.js +1 -92
  40. package/dist/embedding/quantization.js +1 -89
  41. package/dist/extraction/dedup-manager.js +1 -161
  42. package/dist/extraction/emotion-filter.js +1 -33
  43. package/dist/extraction/extractor.d.ts +0 -3
  44. package/dist/extraction/extractor.js +1 -648
  45. package/dist/extraction/file-reference.js +1 -77
  46. package/dist/extraction/filter.js +1 -86
  47. package/dist/extraction/scorer.js +1 -142
  48. package/dist/extraction/similarity.js +1 -85
  49. package/dist/hooks/client-factory.js +1 -44
  50. package/dist/hooks/post-tool-use.js +1 -518
  51. package/dist/hooks/pre-compact.js +1 -209
  52. package/dist/hooks/session-end.js +1 -633
  53. package/dist/hooks/session-start.js +1 -549
  54. package/dist/hooks/shared.js +1 -110
  55. package/dist/hooks/stop.d.ts +21 -0
  56. package/dist/hooks/stop.js +1 -0
  57. package/dist/hooks/user-prompt-submit.js +1 -316
  58. package/dist/i18n/index.js +1 -2
  59. package/dist/i18n/messages.js +1 -150
  60. package/dist/index.d.ts +1 -1
  61. package/dist/index.js +1 -43
  62. package/dist/lifecycle/cleanup-scheduler.js +1 -137
  63. package/dist/lifecycle/cleanup.d.ts +1 -0
  64. package/dist/lifecycle/cleanup.js +1 -116
  65. package/dist/lifecycle/consolidation.d.ts +22 -0
  66. package/dist/lifecycle/consolidation.js +1 -0
  67. package/dist/lifecycle/index.d.ts +2 -0
  68. package/dist/lifecycle/index.js +1 -13
  69. package/dist/lifecycle/injection-flush.d.ts +24 -0
  70. package/dist/lifecycle/injection-flush.js +1 -0
  71. package/dist/lifecycle/quality-scorer.d.ts +5 -6
  72. package/dist/lifecycle/quality-scorer.js +1 -46
  73. package/dist/lifecycle/tiering.js +1 -246
  74. package/dist/llm/client.js +1 -226
  75. package/dist/llm/index.js +1 -5
  76. package/dist/proficiency/actr-engine.js +1 -106
  77. package/dist/proficiency/detection.js +1 -77
  78. package/dist/proficiency/index.js +1 -9
  79. package/dist/proficiency/tracker.js +1 -173
  80. package/dist/proficiency/types.js +1 -8
  81. package/dist/providers/adapters.js +1 -140
  82. package/dist/providers/detector.js +1 -57
  83. package/dist/search/adaptive-router.js +1 -93
  84. package/dist/search/index.js +1 -9
  85. package/dist/search/ranker.js +1 -171
  86. package/dist/search/reranker.js +1 -155
  87. package/dist/session/parser.js +1 -130
  88. package/dist/skill/evaluator.js +1 -509
  89. package/dist/skill/index.js +1 -7
  90. package/dist/skill/types.js +1 -7
  91. package/dist/sync/client.d.ts +7 -0
  92. package/dist/sync/client.js +1 -597
  93. package/dist/sync/encryption.js +1 -203
  94. package/dist/sync/index.js +1 -12
  95. package/dist/sync/queue.js +1 -214
  96. package/dist/sync/scheduler.js +1 -140
  97. package/dist/sync/synchronizer.js +1 -241
  98. package/dist/sync/team-synchronizer.js +1 -204
  99. package/dist/sync/vector-clock.js +1 -70
  100. package/dist/types/index.d.ts +13 -1
  101. package/dist/types/index.js +1 -132
  102. package/dist/utils/keychain.js +1 -170
  103. package/dist/utils/logger.js +1 -128
  104. package/package.json +15 -10
  105. package/dist/a2a/client.d.ts.map +0 -1
  106. package/dist/a2a/client.js.map +0 -1
  107. package/dist/a2a/discovery.d.ts.map +0 -1
  108. package/dist/a2a/discovery.js.map +0 -1
  109. package/dist/a2a/index.d.ts.map +0 -1
  110. package/dist/a2a/index.js.map +0 -1
  111. package/dist/a2a/types.d.ts.map +0 -1
  112. package/dist/a2a/types.js.map +0 -1
  113. package/dist/adapters/anthropic.d.ts.map +0 -1
  114. package/dist/adapters/anthropic.js.map +0 -1
  115. package/dist/chunking/chunker.d.ts.map +0 -1
  116. package/dist/chunking/chunker.js.map +0 -1
  117. package/dist/claude/sync.d.ts.map +0 -1
  118. package/dist/claude/sync.js.map +0 -1
  119. package/dist/cli/commands/add.d.ts.map +0 -1
  120. package/dist/cli/commands/add.js.map +0 -1
  121. package/dist/cli/commands/claude-sync.d.ts.map +0 -1
  122. package/dist/cli/commands/claude-sync.js.map +0 -1
  123. package/dist/cli/commands/cleanup.d.ts.map +0 -1
  124. package/dist/cli/commands/cleanup.js.map +0 -1
  125. package/dist/cli/commands/config.d.ts.map +0 -1
  126. package/dist/cli/commands/config.js.map +0 -1
  127. package/dist/cli/commands/edit.d.ts.map +0 -1
  128. package/dist/cli/commands/edit.js.map +0 -1
  129. package/dist/cli/commands/embed.d.ts.map +0 -1
  130. package/dist/cli/commands/embed.js.map +0 -1
  131. package/dist/cli/commands/extract.d.ts.map +0 -1
  132. package/dist/cli/commands/extract.js.map +0 -1
  133. package/dist/cli/commands/health.d.ts.map +0 -1
  134. package/dist/cli/commands/health.js.map +0 -1
  135. package/dist/cli/commands/list.d.ts.map +0 -1
  136. package/dist/cli/commands/list.js.map +0 -1
  137. package/dist/cli/commands/migrate-chunks.d.ts.map +0 -1
  138. package/dist/cli/commands/migrate-chunks.js.map +0 -1
  139. package/dist/cli/commands/migrate-file-refs.d.ts.map +0 -1
  140. package/dist/cli/commands/migrate-file-refs.js.map +0 -1
  141. package/dist/cli/commands/proficiency.d.ts.map +0 -1
  142. package/dist/cli/commands/proficiency.js.map +0 -1
  143. package/dist/cli/commands/rm.d.ts.map +0 -1
  144. package/dist/cli/commands/rm.js.map +0 -1
  145. package/dist/cli/commands/search.d.ts.map +0 -1
  146. package/dist/cli/commands/search.js.map +0 -1
  147. package/dist/cli/commands/setup-wizard.d.ts.map +0 -1
  148. package/dist/cli/commands/setup-wizard.js.map +0 -1
  149. package/dist/cli/commands/setup.d.ts.map +0 -1
  150. package/dist/cli/commands/setup.js.map +0 -1
  151. package/dist/cli/commands/skill.d.ts.map +0 -1
  152. package/dist/cli/commands/skill.js.map +0 -1
  153. package/dist/cli/commands/status.d.ts.map +0 -1
  154. package/dist/cli/commands/status.js.map +0 -1
  155. package/dist/cli/commands/sync.d.ts.map +0 -1
  156. package/dist/cli/commands/sync.js.map +0 -1
  157. package/dist/cli/commands/team.d.ts.map +0 -1
  158. package/dist/cli/commands/team.js.map +0 -1
  159. package/dist/cli/index.d.ts.map +0 -1
  160. package/dist/cli/index.js.map +0 -1
  161. package/dist/config/manager.d.ts.map +0 -1
  162. package/dist/config/manager.js.map +0 -1
  163. package/dist/db/database.d.ts.map +0 -1
  164. package/dist/db/database.js.map +0 -1
  165. package/dist/embedding/e5-provider.d.ts.map +0 -1
  166. package/dist/embedding/e5-provider.js.map +0 -1
  167. package/dist/embedding/index.d.ts.map +0 -1
  168. package/dist/embedding/index.js.map +0 -1
  169. package/dist/embedding/local-provider.d.ts.map +0 -1
  170. package/dist/embedding/local-provider.js.map +0 -1
  171. package/dist/embedding/openai-provider.d.ts.map +0 -1
  172. package/dist/embedding/openai-provider.js.map +0 -1
  173. package/dist/embedding/quantization.d.ts.map +0 -1
  174. package/dist/embedding/quantization.js.map +0 -1
  175. package/dist/extraction/dedup-manager.d.ts.map +0 -1
  176. package/dist/extraction/dedup-manager.js.map +0 -1
  177. package/dist/extraction/emotion-filter.d.ts.map +0 -1
  178. package/dist/extraction/emotion-filter.js.map +0 -1
  179. package/dist/extraction/extractor.d.ts.map +0 -1
  180. package/dist/extraction/extractor.js.map +0 -1
  181. package/dist/extraction/file-reference.d.ts.map +0 -1
  182. package/dist/extraction/file-reference.js.map +0 -1
  183. package/dist/extraction/filter.d.ts.map +0 -1
  184. package/dist/extraction/filter.js.map +0 -1
  185. package/dist/extraction/scorer.d.ts.map +0 -1
  186. package/dist/extraction/scorer.js.map +0 -1
  187. package/dist/extraction/similarity.d.ts.map +0 -1
  188. package/dist/extraction/similarity.js.map +0 -1
  189. package/dist/hooks/client-factory.d.ts.map +0 -1
  190. package/dist/hooks/client-factory.js.map +0 -1
  191. package/dist/hooks/post-tool-use.d.ts.map +0 -1
  192. package/dist/hooks/post-tool-use.js.map +0 -1
  193. package/dist/hooks/pre-compact.d.ts.map +0 -1
  194. package/dist/hooks/pre-compact.js.map +0 -1
  195. package/dist/hooks/session-end.d.ts.map +0 -1
  196. package/dist/hooks/session-end.js.map +0 -1
  197. package/dist/hooks/session-start.d.ts.map +0 -1
  198. package/dist/hooks/session-start.js.map +0 -1
  199. package/dist/hooks/shared.d.ts.map +0 -1
  200. package/dist/hooks/shared.js.map +0 -1
  201. package/dist/hooks/user-prompt-submit.d.ts.map +0 -1
  202. package/dist/hooks/user-prompt-submit.js.map +0 -1
  203. package/dist/i18n/index.d.ts.map +0 -1
  204. package/dist/i18n/index.js.map +0 -1
  205. package/dist/i18n/messages.d.ts.map +0 -1
  206. package/dist/i18n/messages.js.map +0 -1
  207. package/dist/index.d.ts.map +0 -1
  208. package/dist/index.js.map +0 -1
  209. package/dist/lifecycle/cleanup-scheduler.d.ts.map +0 -1
  210. package/dist/lifecycle/cleanup-scheduler.js.map +0 -1
  211. package/dist/lifecycle/cleanup.d.ts.map +0 -1
  212. package/dist/lifecycle/cleanup.js.map +0 -1
  213. package/dist/lifecycle/index.d.ts.map +0 -1
  214. package/dist/lifecycle/index.js.map +0 -1
  215. package/dist/lifecycle/quality-scorer.d.ts.map +0 -1
  216. package/dist/lifecycle/quality-scorer.js.map +0 -1
  217. package/dist/lifecycle/tiering.d.ts.map +0 -1
  218. package/dist/lifecycle/tiering.js.map +0 -1
  219. package/dist/llm/client.d.ts.map +0 -1
  220. package/dist/llm/client.js.map +0 -1
  221. package/dist/llm/index.d.ts.map +0 -1
  222. package/dist/llm/index.js.map +0 -1
  223. package/dist/proficiency/actr-engine.d.ts.map +0 -1
  224. package/dist/proficiency/actr-engine.js.map +0 -1
  225. package/dist/proficiency/detection.d.ts.map +0 -1
  226. package/dist/proficiency/detection.js.map +0 -1
  227. package/dist/proficiency/index.d.ts.map +0 -1
  228. package/dist/proficiency/index.js.map +0 -1
  229. package/dist/proficiency/tracker.d.ts.map +0 -1
  230. package/dist/proficiency/tracker.js.map +0 -1
  231. package/dist/proficiency/types.d.ts.map +0 -1
  232. package/dist/proficiency/types.js.map +0 -1
  233. package/dist/providers/adapters.d.ts.map +0 -1
  234. package/dist/providers/adapters.js.map +0 -1
  235. package/dist/providers/detector.d.ts.map +0 -1
  236. package/dist/providers/detector.js.map +0 -1
  237. package/dist/search/adaptive-router.d.ts.map +0 -1
  238. package/dist/search/adaptive-router.js.map +0 -1
  239. package/dist/search/index.d.ts.map +0 -1
  240. package/dist/search/index.js.map +0 -1
  241. package/dist/search/ranker.d.ts.map +0 -1
  242. package/dist/search/ranker.js.map +0 -1
  243. package/dist/search/reranker.d.ts.map +0 -1
  244. package/dist/search/reranker.js.map +0 -1
  245. package/dist/session/parser.d.ts.map +0 -1
  246. package/dist/session/parser.js.map +0 -1
  247. package/dist/skill/evaluator.d.ts.map +0 -1
  248. package/dist/skill/evaluator.js.map +0 -1
  249. package/dist/skill/index.d.ts.map +0 -1
  250. package/dist/skill/index.js.map +0 -1
  251. package/dist/skill/types.d.ts.map +0 -1
  252. package/dist/skill/types.js.map +0 -1
  253. package/dist/sync/client.d.ts.map +0 -1
  254. package/dist/sync/client.js.map +0 -1
  255. package/dist/sync/encryption.d.ts.map +0 -1
  256. package/dist/sync/encryption.js.map +0 -1
  257. package/dist/sync/index.d.ts.map +0 -1
  258. package/dist/sync/index.js.map +0 -1
  259. package/dist/sync/queue.d.ts.map +0 -1
  260. package/dist/sync/queue.js.map +0 -1
  261. package/dist/sync/scheduler.d.ts.map +0 -1
  262. package/dist/sync/scheduler.js.map +0 -1
  263. package/dist/sync/synchronizer.d.ts.map +0 -1
  264. package/dist/sync/synchronizer.js.map +0 -1
  265. package/dist/sync/team-synchronizer.d.ts.map +0 -1
  266. package/dist/sync/team-synchronizer.js.map +0 -1
  267. package/dist/sync/vector-clock.d.ts.map +0 -1
  268. package/dist/sync/vector-clock.js.map +0 -1
  269. package/dist/types/index.d.ts.map +0 -1
  270. package/dist/types/index.js.map +0 -1
  271. package/dist/utils/keychain.d.ts.map +0 -1
  272. package/dist/utils/keychain.js.map +0 -1
  273. package/dist/utils/logger.d.ts.map +0 -1
  274. package/dist/utils/logger.js.map +0 -1
@@ -1,171 +1 @@
1
- /**
2
- * Reciprocal Rank Fusion (RRF) 기반 하이브리드 검색
3
- *
4
- * FTS, Vector, Recency 결과를 통합하여 최적의 검색 결과 제공.
5
- * C-6: 카테고리/티어 부스트, ACT-R recency decay, 가중치 설정 지원.
6
- */
7
- /** Category boost multipliers */
8
- const CATEGORY_BOOST = {
9
- error_solution: 1.2,
10
- code_pattern: 1.2,
11
- decision: 1.1,
12
- convention: 1.1,
13
- skill: 1.5,
14
- context: 1.0,
15
- project_knowledge: 1.0,
16
- learning: 1.0,
17
- };
18
- /** Tier boost multipliers */
19
- const TIER_BOOST = {
20
- semantic: 1.2,
21
- episodic: 1.0,
22
- working: 0.8,
23
- };
24
- /**
25
- * RRF (Reciprocal Rank Fusion) 기반 하이브리드 랭커
26
- *
27
- * RRF 공식: score = sum(weight_i / (k + rank_i)) for each source
28
- * - k: RRF 파라미터 (기본: 60) - 낮을수록 상위 순위에 더 높은 가중치
29
- * - rank: 각 소스에서의 순위 (1부터 시작)
30
- */
31
- export class HybridRanker {
32
- k;
33
- weights;
34
- categoryBoost;
35
- tierBoost;
36
- recencyDecay;
37
- constructor(kOrOptions) {
38
- if (typeof kOrOptions === 'number') {
39
- this.k = kOrOptions;
40
- this.weights = { fts: 1.0, vector: 1.0, recency: 1.0 };
41
- this.categoryBoost = false;
42
- this.tierBoost = false;
43
- this.recencyDecay = false;
44
- }
45
- else {
46
- const opts = kOrOptions ?? {};
47
- this.k = opts.k ?? 60;
48
- this.weights = {
49
- fts: opts.weights?.fts ?? 1.0,
50
- vector: opts.weights?.vector ?? 1.0,
51
- recency: opts.weights?.recency ?? 1.0,
52
- };
53
- this.categoryBoost = opts.categoryBoost ?? false;
54
- this.tierBoost = opts.tierBoost ?? false;
55
- this.recencyDecay = opts.recencyDecay ?? false;
56
- }
57
- }
58
- /**
59
- * FTS + Vector + Recency 결과를 RRF로 통합
60
- */
61
- rank(ftsResults, vectorResults, recencyResults) {
62
- // 입력 크기 제한 (메모리 보호: 각 소스 최대 500개)
63
- const safeFts = ftsResults.slice(0, 500);
64
- const safeVector = vectorResults.slice(0, 500);
65
- const safeRecency = recencyResults?.slice(0, 500);
66
- // 각 메모리별 score 계산을 위한 맵
67
- const scoreMap = new Map();
68
- // FTS 점수 계산
69
- for (let i = 0; i < safeFts.length; i++) {
70
- const result = safeFts[i];
71
- const rank = i + 1;
72
- const score = this.weights.fts / (this.k + rank);
73
- this.addScore(scoreMap, result.memory, score, 'fts', rank);
74
- }
75
- // Vector 점수 계산
76
- for (let i = 0; i < safeVector.length; i++) {
77
- const result = safeVector[i];
78
- const rank = i + 1;
79
- const score = this.weights.vector / (this.k + rank);
80
- this.addScore(scoreMap, result.memory, score, 'vector', rank);
81
- }
82
- // Recency 점수 계산
83
- if (safeRecency && safeRecency.length > 0) {
84
- for (let i = 0; i < safeRecency.length; i++) {
85
- const memory = safeRecency[i];
86
- const rank = i + 1;
87
- let score;
88
- if (this.recencyDecay) {
89
- // ACT-R 식 recency decay: Math.pow(hoursAgo + 1, -0.5)
90
- const hoursAgo = this.getHoursAgo(memory.updatedAt);
91
- score = this.weights.recency * Math.pow(hoursAgo + 1, -0.5);
92
- }
93
- else {
94
- score = this.weights.recency / (this.k + rank);
95
- }
96
- this.addScore(scoreMap, memory, score, 'recency', rank);
97
- }
98
- }
99
- // 카테고리/티어 부스트 적용
100
- if (this.categoryBoost || this.tierBoost) {
101
- for (const entry of scoreMap.values()) {
102
- let boost = 1.0;
103
- if (this.categoryBoost) {
104
- boost *= CATEGORY_BOOST[entry.memory.category] ?? 1.0;
105
- }
106
- if (this.tierBoost) {
107
- boost *= TIER_BOOST[entry.memory.tier] ?? 1.0;
108
- }
109
- entry.totalScore *= boost;
110
- }
111
- }
112
- // 점수 내림차순 정렬
113
- const ranked = Array.from(scoreMap.values())
114
- .sort((a, b) => b.totalScore - a.totalScore)
115
- .map((item) => ({
116
- memory: item.memory,
117
- score: item.totalScore,
118
- sources: item.sources,
119
- parentId: item.memory.parentId, // Child의 Parent 참조 (context expansion용)
120
- }));
121
- return ranked;
122
- }
123
- addScore(scoreMap, memory, score, type, rank) {
124
- const existing = scoreMap.get(memory.id);
125
- if (existing) {
126
- existing.totalScore += score;
127
- existing.sources.push({ type, rank });
128
- }
129
- else {
130
- scoreMap.set(memory.id, {
131
- memory,
132
- totalScore: score,
133
- sources: [{ type, rank }],
134
- });
135
- }
136
- }
137
- getHoursAgo(isoDate) {
138
- const now = Date.now();
139
- const then = new Date(isoDate).getTime();
140
- return Math.max(0, (now - then) / (1000 * 60 * 60));
141
- }
142
- }
143
- /**
144
- * Compute LSH hash for embedding pre-filtering (C-4)
145
- * SimHash-like: pseudo-random hyperplane signs -> hex string
146
- *
147
- * WARNING: Hash collision 가능성 있음 — 동일 hash라도 실제 유사도 검증 필수.
148
- * bits=32 기준 collision 확률 ~1/2^32이나, 대규모 corpus(1M+)에서는 false-positive 발생 가능.
149
- * 따라서 이 함수는 pre-filter 목적으로만 사용하고, 최종 결과는 cosineSimilarity로 재검증.
150
- */
151
- export function computeEmbeddingHash(embedding, bits = 32) {
152
- const hashBits = [];
153
- for (let i = 0; i < bits; i++) {
154
- let sum = 0;
155
- for (let j = 0; j < embedding.length; j++) {
156
- const sign = ((i * 31 + j * 17 + 7) % 2) === 0 ? 1 : -1;
157
- sum += embedding[j] * sign;
158
- }
159
- hashBits.push(sum >= 0 ? 1 : 0);
160
- }
161
- let hex = '';
162
- for (let i = 0; i < bits; i += 4) {
163
- let nibble = 0;
164
- for (let j = 0; j < 4 && i + j < bits; j++) {
165
- nibble |= hashBits[i + j] << (3 - j);
166
- }
167
- hex += nibble.toString(16);
168
- }
169
- return hex;
170
- }
171
- //# sourceMappingURL=ranker.js.map
1
+ function _0x2ec7e0(_0x16abac,_0x587a20){return _0x5cf4(_0x587a20- -0x205,_0x16abac);}(function(_0x3a5381,_0x4bdcbe){function _0x99404f(_0x153c96,_0x2ece00){return _0x5cf4(_0x153c96- -0x39,_0x2ece00);}function _0x2b9e92(_0x479be1,_0x51c1e9){return _0x5cf4(_0x51c1e9-0x22c,_0x479be1);}const _0x306cac=_0x3a5381();while(!![]){try{const _0x406ee3=parseInt(_0x2b9e92(0x363,0x36a))/0x1+parseInt(_0x99404f(0x108,0x116))/0x2+parseInt(_0x2b9e92(0x364,0x381))/0x3+-parseInt(_0x2b9e92(0x383,0x368))/0x4*(-parseInt(_0x99404f(0xfc,0xf7))/0x5)+parseInt(_0x2b9e92(0x38d,0x393))/0x6+-parseInt(_0x2b9e92(0x356,0x36c))/0x7*(parseInt(_0x2b9e92(0x3a8,0x394))/0x8)+-parseInt(_0x2b9e92(0x362,0x37a))/0x9;if(_0x406ee3===_0x4bdcbe)break;else _0x306cac['push'](_0x306cac['shift']());}catch(_0x487db0){_0x306cac['push'](_0x306cac['shift']());}}}(_0x1aca,0x2b9c0));function _0x1a415a(_0x28e161,_0x3118ad){return _0x5cf4(_0x28e161- -0x331,_0x3118ad);}function _0x5cf4(_0x5405cd,_0x35291a){_0x5405cd=_0x5405cd-0x133;const _0x1aca95=_0x1aca();let _0x5cf4a0=_0x1aca95[_0x5405cd];if(_0x5cf4['tdBVva']===undefined){var _0x218991=function(_0x148b79){const _0x3f4efa='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x525b74='',_0x3a1450='';for(let _0xfe0ead=0x0,_0x439d71,_0x18afd6,_0x21bc38=0x0;_0x18afd6=_0x148b79['charAt'](_0x21bc38++);~_0x18afd6&&(_0x439d71=_0xfe0ead%0x4?_0x439d71*0x40+_0x18afd6:_0x18afd6,_0xfe0ead++%0x4)?_0x525b74+=String['fromCharCode'](0xff&_0x439d71>>(-0x2*_0xfe0ead&0x6)):0x0){_0x18afd6=_0x3f4efa['indexOf'](_0x18afd6);}for(let _0x22fd01=0x0,_0x43fefc=_0x525b74['length'];_0x22fd01<_0x43fefc;_0x22fd01++){_0x3a1450+='%'+('00'+_0x525b74['charCodeAt'](_0x22fd01)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3a1450);};_0x5cf4['JwvQAq']=_0x218991,_0x5cf4['fNIneV']={},_0x5cf4['tdBVva']=!![];}const _0x4b7f10=_0x1aca95[0x0],_0x7c60a6=_0x5405cd+_0x4b7f10,_0x29806d=_0x5cf4['fNIneV'][_0x7c60a6];return!_0x29806d?(_0x5cf4a0=_0x5cf4['JwvQAq'](_0x5cf4a0),_0x5cf4['fNIneV'][_0x7c60a6]=_0x5cf4a0):_0x5cf4a0=_0x29806d,_0x5cf4a0;}function _0x1aca(){const _0x400b59=['odyYnJm4rMves1bn','ohrsv2DzzW','y2f0zwDVCNLcBW','Ew9Utg8','svHQzLm','CgfYzw50swq','s1DZDfG','A1fRwK0','mJvuEM9WB20','Cg93','ywrKu2nVCMu','y2f0zwDVCNK','Dg9tDhjPBMC','BNvTyMvY','yuX6tM0','ntu5nMXYyKj4BG','B3n0','mZu0odfJru9eyKO','zNjVBq','mtmYndK4ohrArNv0Cq','nty0mZaWAgXUyxzV','C2XPy2u','BwvTB3j5','CgDyEK0','z2v0sg91CNnbzW','D1zduLa','BwfW','DgLLCG','BM93','D2vPz2H0CW','y21SA2y','whLzrxe','CMvJzw5JEurLyW','mJe4ndCXngrftwH4sG','Bufjyvm','vKnHtw8','Dg90ywXty29Yzq','DxbKyxrLzef0','BgvUz3rO','C2v0','ndi2nZy1zLrovNjV','CxL1vgO','rNb1qwm','zNrZ','DgLLCKjVB3n0','C291CMnLCW','wuPrtwy','DMfSDwvZ','ALDtqwW','rMDwrMe','DMvJDg9Y','suvqvve','ChvZAa','CMvJzw5JEq','z2v0vgLTzq','Bwrfr08','CxvHBgL0EvnJBW','C29YDa'];_0x1aca=function(){return _0x400b59;};return _0x1aca();}const CATEGORY_BOOST={'error_solution':1.2,'code_pattern':1.2,'decision':1.1,'convention':1.1,'skill':1.5,'rule':1.5,'context':0x1,'project_knowledge':0x1,'learning':0x1},TIER_BOOST={'semantic':1.2,'episodic':0x1,'working':0.8};export class HybridRanker{['k'];['weights'];['categoryBo'+_0x2ec7e0(-0xd1,-0xc8)];[_0x1a415a(-0x1d8,-0x1d4)];['recencyDec'+'ay'];constructor(_0x4c0989){function _0xf405fc(_0x41f987,_0x52688d){return _0x2ec7e0(_0x41f987,_0x52688d-0x36d);}function _0x17e4f6(_0x2e06e4,_0x94b06){return _0x2ec7e0(_0x94b06,_0x2e06e4-0x1d5);}if(typeof _0x4c0989===_0xf405fc(0x2be,0x2a2))this['k']=_0x4c0989,this[_0xf405fc(0x2a4,0x2b2)]={'fts':0x1,'vector':0x1,'recency':0x1},this[_0x17e4f6(0x139,0x138)+_0x17e4f6(0x10d,0xf7)]=![],this['tierBoost']=![],this[_0xf405fc(0x29b,0x2b5)+'ay']=![];else{const _0x49c2a6=_0x4c0989??{};this['k']=_0x49c2a6['k']??0x3c,this[_0x17e4f6(0x11a,0x114)]={'fts':_0x49c2a6[_0x17e4f6(0x11a,0x10e)]?.[_0xf405fc(0x2d9,0x2c0)]??0x1,'vector':_0x49c2a6[_0x17e4f6(0x11a,0xfe)]?.[_0xf405fc(0x2cb,0x2c7)]??0x1,'recency':_0x49c2a6['weights']?.[_0x17e4f6(0x132,0x12a)]??0x1},this['categoryBo'+_0xf405fc(0x292,0x2a5)]=_0x49c2a6[_0x17e4f6(0x139,0x129)+_0xf405fc(0x288,0x2a5)]??![],this['tierBoost']=_0x49c2a6[_0x17e4f6(0x129,0x10c)]??![],this[_0xf405fc(0x2a9,0x2b5)+'ay']=_0x49c2a6[_0x17e4f6(0x11d,0x108)+'ay']??![];}}['rank'](_0x17fd61,_0x1c5984,_0x2e33b3){const _0x2e6bc1={'KWstX':function(_0x3f0a03,_0x27e1ec){return _0x3f0a03!==_0x27e1ec;},'yonLo':function(_0x38555f,_0x3ffced){return _0x38555f+_0x3ffced;},'IEPUQ':function(_0x373d15,_0x5cfa15){return _0x373d15*_0x5cfa15;},'npvfj':_0x2e97dc(-0x104,-0xf6),'IXjfS':'LrwZg','cmlkf':_0x2e97dc(-0x112,-0xfe),'QntGX':_0x2e97dc(-0xd8,-0xf3)},_0x3967d5=_0x17fd61[_0x1b15c5(0x4cf,0x4e8)](0x0,0x1f4),_0x55e30c=_0x1c5984['slice'](0x0,0x1f4),_0xbebde5=_0x2e33b3?.['slice'](0x0,0x1f4),_0x420cb3=new Map();for(let _0x335ab8=0x0;_0x335ab8<_0x3967d5[_0x2e97dc(-0x110,-0x102)];_0x335ab8++){const _0x4e2ec2=_0x3967d5[_0x335ab8],_0x6aaff2=_0x335ab8+0x1,_0x17048b=this[_0x2e97dc(-0x11c,-0x10b)][_0x2e97dc(-0x112,-0xfd)]/(this['k']+_0x6aaff2);this[_0x2e97dc(-0x11e,-0x11e)](_0x420cb3,_0x4e2ec2[_0x2e97dc(-0x10d,-0x112)],_0x17048b,_0x2e97dc(-0x10b,-0xfd),_0x6aaff2);}for(let _0x53cbde=0x0;_0x53cbde<_0x55e30c['length'];_0x53cbde++){const _0x129efe=_0x55e30c[_0x53cbde],_0x4daed2=_0x53cbde+0x1,_0x3f0e83=this[_0x1b15c5(0x4d3,0x4f0)][_0x2e97dc(-0xf7,-0xf6)]/(this['k']+_0x4daed2);this['addScore'](_0x420cb3,_0x129efe[_0x2e97dc(-0x128,-0x112)],_0x3f0e83,_0x2e6bc1['npvfj'],_0x4daed2);}if(_0xbebde5&&_0xbebde5[_0x2e97dc(-0x102,-0x102)]>0x0)for(let _0x399a51=0x0;_0x399a51<_0xbebde5[_0x2e97dc(-0xf5,-0x102)];_0x399a51++){if(_0x2e6bc1[_0x1b15c5(0x509,0x511)]!==_0x2e6bc1[_0x1b15c5(0x505,0x4f1)]){const _0x284848=_0xbebde5[_0x399a51],_0x33f9ca=_0x399a51+0x1;let _0xbc6ff7;if(this[_0x1b15c5(0x4f0,0x4f3)+'ay']){const _0x31aa3b=this['getHoursAg'+'o'](_0x284848['updatedAt']);_0xbc6ff7=this['weights'][_0x2e97dc(-0xf5,-0xf3)]*Math[_0x2e97dc(-0x104,-0x11f)](_0x2e6bc1['yonLo'](_0x31aa3b,0x1),-0.5);}else _0xbc6ff7=this['weights'][_0x1b15c5(0x4f3,0x508)]/(this['k']+_0x33f9ca);this[_0x2e97dc(-0x12f,-0x11e)](_0x420cb3,_0x284848,_0xbc6ff7,_0x2e6bc1['QntGX'],_0x33f9ca);}else _0x283052[_0x2e97dc(-0x11c,-0x112)][_0x1b15c5(0x508,0x50b)+'re']!==_0x7477df&&_0x2e6bc1[_0x1b15c5(0x4ec,0x4d9)](_0x19be61[_0x1b15c5(0x4ff,0x4e9)][_0x1b15c5(0x509,0x50b)+'re'],null)&&(_0x3827ed['totalScore']*=_0x2e6bc1[_0x2e97dc(-0xed,-0xeb)](0x1,_0x2e6bc1[_0x1b15c5(0x4f8,0x506)](0.2,_0x205f2d['memory']['qualitySco'+'re'])));}if(this[_0x2e97dc(-0xd9,-0xec)+_0x2e97dc(-0x10c,-0x118)]||this['tierBoost'])for(const _0x611e64 of _0x420cb3['values']()){let _0x5a5d8f=0x1;this[_0x2e97dc(-0xd2,-0xec)+_0x2e97dc(-0x125,-0x118)]&&(_0x5a5d8f*=CATEGORY_BOOST[_0x611e64[_0x2e97dc(-0x10d,-0x112)][_0x1b15c5(0x4ed,0x4de)]]??0x1),this[_0x2e97dc(-0x10d,-0xfc)]&&(_0x5a5d8f*=TIER_BOOST[_0x611e64[_0x2e97dc(-0x128,-0x112)][_0x1b15c5(0x4e9,0x4ee)]]??0x1),_0x611e64['totalScore']*=_0x5a5d8f;}for(const _0x2e9d39 of _0x420cb3[_0x2e97dc(-0x10b,-0xf9)]()){_0x2e9d39[_0x2e97dc(-0x11c,-0x112)][_0x1b15c5(0x505,0x50b)+'re']!==undefined&&_0x2e9d39[_0x1b15c5(0x4ea,0x4e9)]['qualitySco'+'re']!==null&&(_0x2e9d39[_0x2e97dc(-0xf6,-0x104)]*=0x1+_0x2e6bc1[_0x1b15c5(0x515,0x506)](0.2,_0x2e9d39[_0x2e97dc(-0x107,-0x112)][_0x2e97dc(-0xf5,-0xf0)+'re']));}function _0x2e97dc(_0x146e0f,_0x59a6ac){return _0x2ec7e0(_0x146e0f,_0x59a6ac- -0x50);}const _0x210951=Array[_0x1b15c5(0x4e1,0x4e5)](_0x420cb3[_0x2e97dc(-0x115,-0xf9)]())[_0x1b15c5(0x501,0x50c)]((_0x1d873b,_0xad17f2)=>_0xad17f2[_0x2e97dc(-0xfa,-0x104)]-_0x1d873b[_0x1b15c5(0x4f4,0x4f7)])[_0x1b15c5(0x500,0x4ed)](_0x502721=>({'memory':_0x502721[_0x2e97dc(-0x109,-0x112)],'score':_0x502721[_0x2e97dc(-0xef,-0x104)],'sources':_0x502721[_0x2e97dc(-0x103,-0xfb)],'parentId':_0x502721[_0x1b15c5(0x4f3,0x4e9)][_0x1b15c5(0x50d,0x512)]}));function _0x1b15c5(_0x21f094,_0x51a0f9){return _0x2ec7e0(_0x21f094,_0x51a0f9-0x5ab);}return _0x210951;}[_0x1a415a(-0x1fa,-0x1df)](_0x21bd04,_0x27aedb,_0x2574c9,_0x493907,_0x3babfb){function _0x4149b6(_0x62213c,_0x39e4b3){return _0x2ec7e0(_0x39e4b3,_0x62213c-0x470);}function _0x2cc18e(_0x3a8fb6,_0x44419e){return _0x2ec7e0(_0x44419e,_0x3a8fb6-0x151);}const _0x47de2b=_0x21bd04['get'](_0x27aedb['id']);_0x47de2b?(_0x47de2b['totalScore']+=_0x2574c9,_0x47de2b[_0x4149b6(0x3c5,0x3b8)][_0x4149b6(0x3cc,0x3da)]({'type':_0x493907,'rank':_0x3babfb})):_0x21bd04[_0x4149b6(0x3bf,0x3c0)](_0x27aedb['id'],{'memory':_0x27aedb,'totalScore':_0x2574c9,'sources':[{'type':_0x493907,'rank':_0x3babfb}]});}[_0x1a415a(-0x1ec,-0x1d6)+'o'](_0x148cf1){const _0x22dd9b={'qyuTj':function(_0x239d40,_0x1b84f1){return _0x239d40/_0x1b84f1;}};function _0x5cc75f(_0x397b1d,_0x4246c6){return _0x2ec7e0(_0x397b1d,_0x4246c6-0x3c3);}function _0x1412c4(_0x126380,_0x2fbb69){return _0x2ec7e0(_0x126380,_0x2fbb69- -0x36);}const _0xff9153=Date[_0x1412c4(-0x10d,-0xf2)](),_0x559270=new Date(_0x148cf1)[_0x5cc75f(0x328,0x321)]();return Math['max'](0x0,_0x22dd9b[_0x5cc75f(0x31f,0x314)](_0xff9153-_0x559270,0x3e8*0x3c*0x3c));}}export function computeEmbeddingHash(_0x21740e,_0x559021=0x20){function _0x509145(_0x254ef9,_0x310731){return _0x2ec7e0(_0x254ef9,_0x310731-0x2da);}const _0x42543a={'VCaMo':function(_0x38c56b,_0x2ed25d){return _0x38c56b*_0x2ed25d;},'UMnkS':function(_0x6879c4,_0x319b3d){return _0x6879c4+_0x319b3d;},'jWSAl':function(_0x5ad5c9,_0x1f2c9b){return _0x5ad5c9<_0x1f2c9b;},'mAIaS':function(_0x2d86a0,_0x133939){return _0x2d86a0!==_0x133939;},'FgVFa':_0x11981e(-0x243,-0x241),'kQkZM':function(_0x4b8ad3,_0x4c2d6b){return _0x4b8ad3%_0x4c2d6b;},'lxiPB':function(_0x565e11,_0x1c5a83){return _0x565e11>=_0x1c5a83;},'ToWBQ':function(_0x4953b9,_0x499ed0){return _0x4953b9<_0x499ed0;},'XyYEq':function(_0x2724af,_0x57e999){return _0x2724af+_0x57e999;},'lNGQP':function(_0x475319,_0x393c4d){return _0x475319===_0x393c4d;},'YJQMf':_0x11981e(-0x261,-0x24d),'pgXzM':function(_0x27e36a,_0x14397d){return _0x27e36a<<_0x14397d;},'aLzNm':function(_0x2daf89,_0x5d22a2){return _0x2daf89-_0x5d22a2;}},_0x2683b2=[];function _0x11981e(_0x39f6d0,_0x5a7083){return _0x2ec7e0(_0x5a7083,_0x39f6d0- -0x1a2);}for(let _0x35ae83=0x0;_0x42543a[_0x509145(0x241,0x232)](_0x35ae83,_0x559021);_0x35ae83++){let _0x37cd7d=0x0;for(let _0x592e7f=0x0;_0x42543a[_0x509145(0x245,0x232)](_0x592e7f,_0x21740e['length']);_0x592e7f++){if(_0x42543a[_0x11981e(-0x258,-0x243)](_0x11981e(-0x243,-0x259),_0x42543a[_0x509145(0x231,0x233)]))_0x504089[_0x509145(0x214,0x229)](_0x492908['id'],{'memory':_0x29c8d8,'totalScore':_0x39073c,'sources':[{'type':_0x250bf5,'rank':_0xe9539}]});else{const _0x3f4415=_0x42543a[_0x11981e(-0x273,-0x27d)](_0x35ae83*0x1f+_0x592e7f*0x11+0x7,0x2)===0x0?0x1:-0x1;_0x37cd7d+=_0x21740e[_0x592e7f]*_0x3f4415;}}_0x2683b2['push'](_0x42543a['lxiPB'](_0x37cd7d,0x0)?0x1:0x0);}let _0x1669c5='';for(let _0x584f32=0x0;_0x42543a[_0x509145(0x235,0x232)](_0x584f32,_0x559021);_0x584f32+=0x4){let _0x329319=0x0;for(let _0x2c02c6=0x0;_0x42543a['ToWBQ'](_0x2c02c6,0x4)&&_0x42543a['jWSAl'](_0x42543a[_0x11981e(-0x25b,-0x26a)](_0x584f32,_0x2c02c6),_0x559021);_0x2c02c6++){if(_0x42543a['lNGQP'](_0x42543a[_0x509145(0x220,0x230)],'wVCRP'))_0x329319|=_0x42543a[_0x509145(0x21c,0x219)](_0x2683b2[_0x584f32+_0x2c02c6],_0x42543a[_0x11981e(-0x26c,-0x27f)](0x3,_0x2c02c6));else{const _0x1b3d74=this[_0x11981e(-0x262,-0x247)+'o'](_0x576824[_0x509145(0x22c,0x227)]);_0xb25f9d=oKzOSE[_0x11981e(-0x257,-0x269)](this[_0x509145(0x20b,0x21f)]['recency'],_0x3d05f6[_0x509145(0x225,0x20b)](oKzOSE['UMnkS'](_0x1b3d74,0x1),-0.5));}}_0x1669c5+=_0x329319[_0x509145(0x217,0x20e)](0x10);}return _0x1669c5;}
@@ -1,155 +1 @@
1
- /**
2
- * Cross-Encoder Reranker
3
- *
4
- * RRF 하이브리드 검색의 top-N 결과를 정밀 리랭킹합니다.
5
- * @huggingface/transformers 기반 ms-marco-MiniLM-L-6-v2 모델 사용.
6
- *
7
- * 성능:
8
- * - ~5ms/pair (CPU)
9
- * - top-20 → top-5: ~100ms (SessionStart)
10
- * - top-10 → top-3: ~50ms (UserPromptSubmit)
11
- *
12
- * 설치: npm install @huggingface/transformers (optional dependency)
13
- */
14
- const RERANKER_MODEL = 'cross-encoder/ms-marco-MiniLM-L-6-v2';
15
- // 싱글톤 파이프라인
16
- let _rerankerPipeline = null;
17
- let _rerankerLoading = null;
18
- /**
19
- * reranker 파이프라인 지연 로드
20
- */
21
- async function getRerankerPipeline() {
22
- if (_rerankerPipeline)
23
- return _rerankerPipeline;
24
- if (_rerankerLoading)
25
- return _rerankerLoading;
26
- _rerankerLoading = (async () => {
27
- try {
28
- const mod = await Function('return import("@huggingface/transformers")')();
29
- _rerankerPipeline = await mod.pipeline('text-classification', RERANKER_MODEL, {
30
- quantized: true,
31
- });
32
- return _rerankerPipeline;
33
- }
34
- catch (err) {
35
- _rerankerLoading = null;
36
- throw new Error(`Cross-Encoder reranker requires @huggingface/transformers. ` +
37
- `Install: npm install @huggingface/transformers\n` +
38
- `Original error: ${err instanceof Error ? err.message : String(err)}`);
39
- }
40
- })();
41
- return _rerankerLoading;
42
- }
43
- /**
44
- * 텍스트 기반 fallback reranker
45
- * @huggingface/transformers가 없을 때 사용
46
- * BM25 스타일 간단한 키워드 매칭
47
- */
48
- function fallbackScore(query, content) {
49
- const queryTokens = query.toLowerCase().split(/\s+/).filter(t => t.length > 1);
50
- const contentLower = content.toLowerCase();
51
- if (queryTokens.length === 0)
52
- return 0;
53
- let matches = 0;
54
- for (const token of queryTokens) {
55
- if (contentLower.includes(token))
56
- matches++;
57
- }
58
- return matches / queryTokens.length;
59
- }
60
- export class CrossEncoderReranker {
61
- useFallback;
62
- constructor(options) {
63
- this.useFallback = options?.useFallback ?? true;
64
- }
65
- /**
66
- * 후보 메모리를 리랭킹
67
- *
68
- * @param query 검색 쿼리
69
- * @param candidates 리랭킹 대상 메모리 목록
70
- * @param topK 반환할 상위 K개
71
- * @returns 리랭킹된 결과
72
- */
73
- async rerank(query, candidates, topK) {
74
- if (candidates.length === 0)
75
- return [];
76
- if (candidates.length <= topK)
77
- return candidates;
78
- try {
79
- const pipe = await getRerankerPipeline();
80
- // (query, candidate.content) 쌍으로 점수 계산
81
- const pairs = candidates.map(c => ({
82
- text: query,
83
- text_pair: c.memory.content.slice(0, 512), // 모델 최대 길이 제한
84
- }));
85
- const scores = await pipe(pairs);
86
- // 점수와 원본 결합
87
- const scored = candidates.map((candidate, i) => ({
88
- ...candidate,
89
- rerankScore: this.extractScore(scores[i]),
90
- }));
91
- // 리랭킹 점수로 재정렬
92
- scored.sort((a, b) => b.rerankScore - a.rerankScore);
93
- return scored.slice(0, topK).map(({ rerankScore: _rs, ...rest }) => rest);
94
- }
95
- catch {
96
- // transformers 미설치 시 fallback
97
- if (this.useFallback) {
98
- return this.fallbackRerank(query, candidates, topK);
99
- }
100
- return candidates.slice(0, topK);
101
- }
102
- }
103
- /**
104
- * 텍스트 매칭 기반 fallback 리랭킹
105
- */
106
- fallbackRerank(query, candidates, topK) {
107
- const scored = candidates.map(c => ({
108
- ...c,
109
- fallbackScore: fallbackScore(query, c.memory.content),
110
- }));
111
- // 기존 점수 + fallback 점수 가중 평균
112
- scored.sort((a, b) => {
113
- const scoreA = a.score * 0.5 + a.fallbackScore * 0.5;
114
- const scoreB = b.score * 0.5 + b.fallbackScore * 0.5;
115
- return scoreB - scoreA;
116
- });
117
- return scored.slice(0, topK).map(({ fallbackScore: _fs, ...rest }) => rest);
118
- }
119
- /**
120
- * Cross-Encoder 출력에서 relevance score 추출
121
- */
122
- extractScore(output) {
123
- if (typeof output === 'number')
124
- return output;
125
- // { label: 'POSITIVE', score: 0.95 } 형태
126
- if (output && typeof output.score === 'number') {
127
- return output.score;
128
- }
129
- // [{ label, score }, ...] 배열 형태
130
- if (Array.isArray(output) && output.length > 0) {
131
- return output[0].score ?? 0;
132
- }
133
- return 0;
134
- }
135
- /**
136
- * 사용 가능 여부 확인
137
- */
138
- static async isAvailable() {
139
- try {
140
- await Function('return import("@huggingface/transformers")')();
141
- return true;
142
- }
143
- catch {
144
- return false;
145
- }
146
- }
147
- }
148
- /**
149
- * 싱글톤 리셋 (테스트용)
150
- */
151
- export function resetRerankerPipeline() {
152
- _rerankerPipeline = null;
153
- _rerankerLoading = null;
154
- }
155
- //# sourceMappingURL=reranker.js.map
1
+ function _0x2440(){const _0x272664=['sMLqsKC','BNvTyMvY','BK9Sr0e','q3jVC3mTrw5JBW','zMfSBgjHy2TtyW','C3bSAxq','mtKXnLfOyMP2za','vxfICfa','AxnbDMfPBgfIBa','zgvYihjLCMfUAW','CMv0DxjUigLTCa','zMfSBgjHy2Tszq','t3jPz2LUywWGzq','CMvYyw5Ru2nVCG','u3fssvK','DKzez2O','oxvZCu9tqW','y3jVC3mTzw5JBW','BNLAuhG','y09uwNC','BMnOB2G','ywnLl3rYyw5ZzG','mJG5EgDND0fW','Cff5wNK','zMfJzs90CMfUCW','yxrHq2y','u25tueG','Aw5JBhvKzxm','rfj2shm','otiYntG1v01mq3r6','BgvUz3rO','mZi1mJG0DMvovfjo','B3j0kcjaAhvNzW','mZyYodCWwgXcr05r','zxiGCMvXDwLYzq','wK9JA1q','CYbaAhvNz2LUzW','zM9YBwvYCY4G','DuzSq1O','CNjVCJOG','y0v2sxa','y28TtwLUAuXnlq','BwfW','EuzOEMq','iebODwDNAw5NzG','CgLWzwXPBMu','ndi4mZyWv3zqrfrY','C2XPy2u','DxnLrMfSBgjHyW','BLPoDfa','CMvYyw5R','C2nVCMu','AxnbCNjHEq','rNLMuMm','zgvYl21Zlw1HCG','C0PxBvK','tc02lxyY','ndy3mtm5sxDZsxju','B3jL','CMfUAW','zKzVC04','yw5ZzM9YBwvYCW','y29UDgvUDa','Cg0GAw5ZDgfSBa','nteYDMfWA0je','sw5ZDgfSBdOGBG','vLf6BMS','B3jTzxjZcG','tgDbAM0','uuXJEvO','vNb1yw4','BwvZC2fNzq','Aw5NzMfJzs90CG','CKLhvxu','sM1urgy','A3fwv0u','mJaZnJnkuMHzq04','C29YDa','Dg9mB3DLCKnHCW'];_0x2440=function(){return _0x272664;};return _0x2440();}function _0x420c(_0x5501d3,_0x3a21a6){_0x5501d3=_0x5501d3-0x1ac;const _0x244036=_0x2440();let _0x420c55=_0x244036[_0x5501d3];if(_0x420c['hrfAjM']===undefined){var _0x560aa4=function(_0x294f6b){const _0x235404='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1d507e='',_0x8d5b8b='';for(let _0x2478d7=0x0,_0x1c1bab,_0x201664,_0x2634ad=0x0;_0x201664=_0x294f6b['charAt'](_0x2634ad++);~_0x201664&&(_0x1c1bab=_0x2478d7%0x4?_0x1c1bab*0x40+_0x201664:_0x201664,_0x2478d7++%0x4)?_0x1d507e+=String['fromCharCode'](0xff&_0x1c1bab>>(-0x2*_0x2478d7&0x6)):0x0){_0x201664=_0x235404['indexOf'](_0x201664);}for(let _0x358c64=0x0,_0x26642f=_0x1d507e['length'];_0x358c64<_0x26642f;_0x358c64++){_0x8d5b8b+='%'+('00'+_0x1d507e['charCodeAt'](_0x358c64)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x8d5b8b);};_0x420c['XcDdLo']=_0x560aa4,_0x420c['auFuqA']={},_0x420c['hrfAjM']=!![];}const _0xeafba1=_0x244036[0x0],_0x271a88=_0x5501d3+_0xeafba1,_0x5c588f=_0x420c['auFuqA'][_0x271a88];return!_0x5c588f?(_0x420c55=_0x420c['XcDdLo'](_0x420c55),_0x420c['auFuqA'][_0x271a88]=_0x420c55):_0x420c55=_0x5c588f,_0x420c55;}(function(_0x36972a,_0xe58085){function _0x205853(_0x3f01a9,_0x286858){return _0x420c(_0x286858- -0x356,_0x3f01a9);}const _0x78263=_0x36972a();function _0x540de5(_0x4f3f4b,_0x167c15){return _0x420c(_0x167c15-0x1a6,_0x4f3f4b);}while(!![]){try{const _0x3fd31c=parseInt(_0x540de5(0x370,0x362))/0x1*(parseInt(_0x540de5(0x33a,0x352))/0x2)+-parseInt(_0x205853(-0x16e,-0x177))/0x3+parseInt(_0x205853(-0x196,-0x182))/0x4+-parseInt(_0x205853(-0x192,-0x193))/0x5+-parseInt(_0x540de5(0x381,0x36b))/0x6+parseInt(_0x540de5(0x3ac,0x398))/0x7*(parseInt(_0x205853(-0x15a,-0x170))/0x8)+parseInt(_0x540de5(0x364,0x35c))/0x9*(-parseInt(_0x205853(-0x19a,-0x18f))/0xa);if(_0x3fd31c===_0xe58085)break;else _0x78263['push'](_0x78263['shift']());}catch(_0x1b7971){_0x78263['push'](_0x78263['shift']());}}}(_0x2440,0x22085));function _0x264d90(_0x19b444,_0x52b763){return _0x420c(_0x19b444- -0x1e7,_0x52b763);}const RERANKER_MODEL=_0x264d90(-0x30,-0x30)+_0x2dde17(0x232,0x231)+_0x264d90(-0x18,-0x1e)+_0x2dde17(0x243,0x233);let _rerankerPipeline=null,_rerankerLoading=null;async function getRerankerPipeline(){const _0x2156da={'gwGmF':function(_0x2d8a05,_0x22a08d){return _0x2d8a05(_0x22a08d);},'aGJZk':_0x572ec3(0x546,0x55f)+_0x572ec3(0x55c,0x564)+_0x572ec3(0x584,0x570)+_0x572ec3(0x579,0x558)+'\x22)','VQznk':'text-class'+'ification','nchoh':function(_0x5266f2,_0x5a32a2){return _0x5266f2===_0x5a32a2;},'kqVWE':'LgAjm','JiPJG':function(_0x24a945,_0x3da9a1){return _0x24a945+_0x3da9a1;},'nyZPx':function(_0x22b9f3,_0x5c622f){return _0x22b9f3 instanceof _0x5c622f;},'cEvIp':function(_0x518da9,_0x558be5){return _0x518da9(_0x558be5);}};if(_rerankerPipeline)return _rerankerPipeline;if(_rerankerLoading)return _rerankerLoading;function _0x58e1f9(_0x1eaae3,_0x4ee492){return _0x264d90(_0x4ee492- -0x5,_0x1eaae3);}function _0x572ec3(_0x12a62f,_0xb146ae){return _0x264d90(_0x12a62f-0x57d,_0xb146ae);}return _rerankerLoading=((async()=>{function _0x3fc27c(_0x4f6f12,_0x4a7d3f){return _0x572ec3(_0x4a7d3f-0x3b,_0x4f6f12);}function _0x226bc3(_0x29c1c8,_0x470c5a){return _0x572ec3(_0x470c5a- -0x225,_0x29c1c8);}try{const _0x4608d3=await _0x2156da['gwGmF'](Function,_0x2156da['aGJZk'])();return _rerankerPipeline=await _0x4608d3[_0x226bc3(0x326,0x344)](_0x2156da[_0x226bc3(0x356,0x359)],RERANKER_MODEL,{'quantized':!![]}),_rerankerPipeline;}catch(_0x423ec4){if(_0x2156da[_0x3fc27c(0x5b2,0x58b)](_0x2156da[_0x226bc3(0x384,0x362)],_0x3fc27c(0x5a0,0x5bb))){_rerankerLoading=null;throw new Error(_0x2156da[_0x3fc27c(0x5cc,0x5c6)]('Cross-Enco'+'der\x20rerank'+_0x3fc27c(0x590,0x599)+'s\x20@hugging'+_0x226bc3(0x326,0x32f)+_0x226bc3(0x341,0x33c)+(_0x226bc3(0x334,0x358)+_0x226bc3(0x373,0x356)+_0x226bc3(0x369,0x343)+_0x3fc27c(0x5a6,0x58c)+_0x3fc27c(0x5bd,0x5ba)),_0x226bc3(0x30a,0x323)+_0x226bc3(0x345,0x33e)+(_0x2156da[_0x226bc3(0x346,0x329)](_0x423ec4,Error)?_0x423ec4[_0x226bc3(0x34c,0x35e)]:_0x2156da[_0x3fc27c(0x594,0x59f)](String,_0x423ec4))));}else{if(_0x5b90ce['includes'](_0x41a27a))_0x5b7d95++;}}})()),_rerankerLoading;}function fallbackScore(_0x40d484,_0x57d721){function _0x591d67(_0x2ef17f,_0x137b6){return _0x2dde17(_0x2ef17f,_0x137b6-0x20c);}const _0x16b5d0={'sJWmY':function(_0x442907,_0x487be3){return _0x442907/_0x487be3;}},_0x3815b8=_0x40d484[_0x10ea74(0x5c5,0x5ab)+'e']()[_0x591d67(0x440,0x45b)](/\s+/)['filter'](_0x58b6f3=>_0x58b6f3['length']>0x1),_0x5ecaf1=_0x57d721[_0x10ea74(0x5c5,0x5b2)+'e']();function _0x10ea74(_0x2de644,_0x460f3b){return _0x2dde17(_0x460f3b,_0x2de644-0x37c);}if(_0x3815b8[_0x591d67(0x405,0x425)]===0x0)return 0x0;let _0x26f8cf=0x0;for(const _0x63db57 of _0x3815b8){if(_0x5ecaf1[_0x591d67(0x40d,0x422)](_0x63db57))_0x26f8cf++;}return _0x16b5d0[_0x10ea74(0x5ae,0x593)](_0x26f8cf,_0x3815b8['length']);}export class CrossEncoderReranker{['useFallbac'+'k'];constructor(_0x31338e){function _0x3e7e70(_0x2b302c,_0x3cf2b3){return _0x2dde17(_0x3cf2b3,_0x2b302c-0x2f2);}function _0x4dd18f(_0x16abcd,_0x44188b){return _0x2dde17(_0x16abcd,_0x44188b- -0x98);}this[_0x4dd18f(0x194,0x193)+'k']=_0x31338e?.[_0x4dd18f(0x17d,0x193)+'k']??!![];}async[_0x2dde17(0x239,0x22d)](_0x109432,_0x54bf37,_0x10c6ea){const _0x38815e={'Vpuan':function(_0x2f9a43,_0x14f80d){return _0x2f9a43+_0x14f80d;},'JmTDf':function(_0x26915d,_0x599e93){return _0x26915d+_0x599e93;},'uFlCZ':function(_0x42e928,_0x2c94c4){return _0x42e928 instanceof _0x2c94c4;},'UqbpP':function(_0x1fe160,_0x5cdfdd){return _0x1fe160(_0x5cdfdd);},'nZNtP':function(_0x5c2fc7,_0x5caf76){return _0x5c2fc7<=_0x5caf76;},'QLcyZ':function(_0x42c529,_0x253ca4){return _0x42c529(_0x253ca4);},'ataCf':_0x1bb348(0x2a,0x11)};function _0xe0e948(_0x431d0d,_0x5a50fe){return _0x2dde17(_0x5a50fe,_0x431d0d- -0x1c3);}if(_0x54bf37[_0xe0e948(0x56,0x74)]===0x0)return[];if(_0x38815e[_0xe0e948(0x69,0x7e)](_0x54bf37[_0x1bb348(0x2c,0x11)],_0x10c6ea))return _0x54bf37;function _0x1bb348(_0xf8ba37,_0x557dc3){return _0x2dde17(_0x557dc3,_0xf8ba37- -0x1ed);}try{const _0x6380fe=await getRerankerPipeline(),_0x406b20=_0x54bf37['map'](_0x57b40c=>({'text':_0x109432,'text_pair':_0x57b40c['memory'][_0x1bb348(0x4c,0x44)][_0x1bb348(0x3d,0x57)](0x0,0x200)})),_0x258a1d=await _0x38815e[_0xe0e948(0x7d,0x94)](_0x6380fe,_0x406b20),_0x4b6c3b=_0x54bf37['map']((_0x49c568,_0x6da530)=>({..._0x49c568,'rerankScore':this['extractSco'+'re'](_0x258a1d[_0x6da530])}));return _0x4b6c3b[_0xe0e948(0x85,0x84)]((_0x2449a0,_0x32eff6)=>_0x32eff6['rerankScor'+'e']-_0x2449a0[_0x1bb348(0x1b,0x14)+'e']),_0x4b6c3b[_0xe0e948(0x67,0x65)](0x0,_0x10c6ea)[_0xe0e948(0x62,0x69)](({rerankScore:_0x5130b3,..._0xa0f15b})=>_0xa0f15b);}catch{if(_0x1bb348(0x1d,0x42)!==_0x38815e[_0x1bb348(0x27,0x36)]){if(this['useFallbac'+'k'])return this[_0x1bb348(0x19,0x34)+_0x1bb348(0x49,0x4c)](_0x109432,_0x54bf37,_0x10c6ea);return _0x54bf37['slice'](0x0,_0x10c6ea);}else{_0x26642f=null;throw new _0x141916(WHSpLY[_0x1bb348(0x54,0x54)](WHSpLY[_0x1bb348(0x58,0x72)](_0xe0e948(0x8a,0x6e)+_0xe0e948(0x41,0x4f)+_0x1bb348(0x30,0x1f)+_0x1bb348(0x32,0x53)+_0xe0e948(0x50,0x51)+_0x1bb348(0x33,0x4c),_0x1bb348(0x4f,0x65)+_0x1bb348(0x4d,0x40)+_0xe0e948(0x64,0x78)+_0xe0e948(0x4d,0x30)+'ormers\x0a'),_0xe0e948(0x44,0x2c)+'rror:\x20'+(WHSpLY[_0x1bb348(0x34,0x28)](_0x508133,_0x459c22)?_0xbd9330[_0x1bb348(0x55,0x71)]:WHSpLY[_0x1bb348(0x15,-0x1)](_0x526d37,_0x2a4dfb))));}}}[_0x264d90(-0x36,-0x40)+_0x2dde17(0x247,0x236)](_0x43b2a3,_0x297111,_0x5c14ac){const _0x3fd3a3={'XsJND':_0x4b0a11(0x1fc,0x1ed),'cOTZw':_0x4b0a11(0x1f0,0x1cd),'rIGUu':function(_0x42422c,_0x3b563f){return _0x42422c*_0x3b563f;},'SqRIY':function(_0xf76406,_0x4ba2ae){return _0xf76406+_0x4ba2ae;},'exHDo':function(_0x225ce0,_0x4e4366){return _0x225ce0-_0x4e4366;}},_0x4dffd4=_0x297111[_0x4b0a11(0x203,0x208)](_0x57a755=>({..._0x57a755,'fallbackScore':fallbackScore(_0x43b2a3,_0x57a755['memory'][_0x4b0a11(0x217,0x219)])}));function _0x265a59(_0x526356,_0x45d291){return _0x2dde17(_0x45d291,_0x526356- -0x1c7);}function _0x4b0a11(_0x471de4,_0x38ff80){return _0x2dde17(_0x38ff80,_0x471de4- -0x22);}return _0x4dffd4[_0x265a59(0x81,0x84)]((_0x2796d4,_0x3d83fc)=>{function _0x18a503(_0x5864f9,_0x287a0d){return _0x4b0a11(_0x287a0d-0x26,_0x5864f9);}function _0xadd1f7(_0x46b0c5,_0x30dcb3){return _0x4b0a11(_0x30dcb3- -0x7a,_0x46b0c5);}if(_0x3fd3a3['XsJND']===_0x3fd3a3[_0xadd1f7(0x196,0x172)])return _0x483038[0x0]['score']??0x0;else{const _0x291cf5=_0x3fd3a3['rIGUu'](_0x2796d4[_0x18a503(0x22c,0x232)],0.5)+_0x3fd3a3[_0xadd1f7(0x1c7,0x1a8)](_0x2796d4[_0x18a503(0x26d,0x252)+_0x18a503(0x25e,0x239)],0.5),_0x17c45b=_0x3fd3a3[_0x18a503(0x21a,0x20d)](_0x3d83fc[_0xadd1f7(0x185,0x192)]*0.5,_0x3d83fc[_0x18a503(0x257,0x252)+_0xadd1f7(0x1b2,0x199)]*0.5);return _0x3fd3a3['exHDo'](_0x17c45b,_0x291cf5);}}),_0x4dffd4[_0x265a59(0x63,0x80)](0x0,_0x5c14ac)[_0x265a59(0x5e,0x66)](({fallbackScore:_0x312d60,..._0x1780b5})=>_0x1780b5);}['extractSco'+'re'](_0x3bef58){const _0x1f3f1e={'fFosN':function(_0x40eb16,_0x505ece){return _0x40eb16===_0x505ece;},'xsoxQ':function(_0x5b6eb4,_0x510172){return _0x5b6eb4>_0x510172;}};if(_0x1f3f1e[_0x38a4ef(-0x94,-0x8c)](typeof _0x3bef58,'number'))return _0x3bef58;if(_0x3bef58&&typeof _0x3bef58[_0x18e084(0xd8,0xdd)]===_0x18e084(0x119,0xfa))return _0x3bef58[_0x38a4ef(-0x9d,-0x96)];function _0x18e084(_0x11a0d1,_0x4926fe){return _0x2dde17(_0x11a0d1,_0x4926fe- -0x151);}function _0x38a4ef(_0x2e788e,_0x18ce80){return _0x2dde17(_0x18ce80,_0x2e788e- -0x2cb);}if(Array[_0x38a4ef(-0x9c,-0x83)](_0x3bef58)&&_0x1f3f1e['xsoxQ'](_0x3bef58[_0x38a4ef(-0xb2,-0x92)],0x0))return _0x3bef58[0x0]['score']??0x0;return 0x0;}static async[_0x264d90(-0x39,-0x4c)+'e'](){const _0x22d294={'FyfRc':function(_0x335e0d,_0x4206f3){return _0x335e0d(_0x4206f3);},'SnSPH':_0x3f6f12(0x520,0x53a)+_0x28f1e3(0x264,0x265)+_0x3f6f12(0x55e,0x542)+_0x28f1e3(0x281,0x297)+'\x22)','yFhzd':function(_0x395cce,_0x29b1cf){return _0x395cce===_0x29b1cf;},'nOlGA':'yjNhX'};function _0x3f6f12(_0x4fd30a,_0x5a1688){return _0x2dde17(_0x5a1688,_0x4fd30a-0x31b);}function _0x28f1e3(_0x35c719,_0x3e4af9){return _0x2dde17(_0x3e4af9,_0x35c719-0x49);}try{return await _0x22d294[_0x3f6f12(0x54b,0x526)](Function,_0x22d294[_0x28f1e3(0x25e,0x259)])(),!![];}catch{if(_0x22d294[_0x28f1e3(0x26f,0x276)](_0x22d294[_0x3f6f12(0x567,0x562)],_0x22d294[_0x28f1e3(0x295,0x292)]))return![];else this[_0x3f6f12(0x546,0x54b)+'k']=_0x37a293?.[_0x28f1e3(0x274,0x25f)+'k']??!![];}}}function _0x2dde17(_0x282eec,_0x57aa63){return _0x420c(_0x57aa63-0x55,_0x282eec);}export function resetRerankerPipeline(){_rerankerPipeline=null,_rerankerLoading=null;}
@@ -1,130 +1 @@
1
- /**
2
- * Session JSONL Parser
3
- *
4
- * Claude Code 세션 JSONL 파일을 파싱하여 SessionMessage 배열로 변환합니다.
5
- * 세션 파일 위치: ~/.claude/projects/<project-slug>/<session-id>.jsonl
6
- */
7
- import { readFileSync, readdirSync, statSync, existsSync } from 'node:fs';
8
- import { join, basename } from 'node:path';
9
- import { homedir } from 'node:os';
10
- const CLAUDE_PROJECTS_DIR = join(homedir(), '.claude', 'projects');
11
- /**
12
- * JSONL 파일을 파싱하여 SessionMessage 배열 반환
13
- */
14
- export function parseSessionFile(filePath) {
15
- if (!existsSync(filePath)) {
16
- console.error('[a2a] Session file not found:', filePath);
17
- return [];
18
- }
19
- const content = readFileSync(filePath, 'utf-8');
20
- const lines = content.split('\n');
21
- const messages = [];
22
- for (let i = 0; i < lines.length; i++) {
23
- const line = lines[i].trim();
24
- if (!line)
25
- continue;
26
- try {
27
- const parsed = JSON.parse(line);
28
- if (parsed.uuid && parsed.type && parsed.message) {
29
- messages.push(parsed);
30
- }
31
- }
32
- catch {
33
- console.error(`[a2a] Invalid JSON at line ${i + 1} in ${filePath}`);
34
- }
35
- }
36
- return messages;
37
- }
38
- /**
39
- * 프로젝트 경로를 Claude의 디렉토리 slug로 변환
40
- * /Users/name/project → -Users-name-project
41
- */
42
- export function projectPathToSlug(projectPath) {
43
- return projectPath.replace(/\//g, '-');
44
- }
45
- /**
46
- * Claude 디렉토리 slug를 프로젝트 경로로 변환
47
- * -Users-name-project → /Users/name/project
48
- */
49
- export function slugToProjectPath(slug) {
50
- if (slug.startsWith('-')) {
51
- return slug.replace(/-/g, '/');
52
- }
53
- return slug;
54
- }
55
- /**
56
- * JSONL 파일의 줄 수를 빠르게 계산
57
- */
58
- function countLines(filePath) {
59
- const content = readFileSync(filePath, 'utf-8');
60
- return content.split('\n').filter((line) => line.trim().length > 0).length;
61
- }
62
- /**
63
- * 세션 파일 목록 탐색
64
- */
65
- export function findSessionFiles(projectPath) {
66
- if (!existsSync(CLAUDE_PROJECTS_DIR)) {
67
- return [];
68
- }
69
- const results = [];
70
- try {
71
- const projectDirs = projectPath
72
- ? [projectPathToSlug(projectPath)]
73
- : readdirSync(CLAUDE_PROJECTS_DIR);
74
- for (const dir of projectDirs) {
75
- const dirPath = join(CLAUDE_PROJECTS_DIR, dir);
76
- if (!existsSync(dirPath))
77
- continue;
78
- let stat;
79
- try {
80
- stat = statSync(dirPath);
81
- }
82
- catch {
83
- continue;
84
- }
85
- if (!stat.isDirectory())
86
- continue;
87
- let files;
88
- try {
89
- files = readdirSync(dirPath);
90
- }
91
- catch {
92
- continue;
93
- }
94
- for (const file of files) {
95
- if (!file.endsWith('.jsonl'))
96
- continue;
97
- const filePath = join(dirPath, file);
98
- const sessionId = basename(file, '.jsonl');
99
- try {
100
- const fileStat = statSync(filePath);
101
- const messageCount = countLines(filePath);
102
- results.push({
103
- sessionId,
104
- projectPath: slugToProjectPath(dir),
105
- filePath,
106
- messageCount,
107
- sizeBytes: fileStat.size,
108
- modifiedAt: fileStat.mtimeMs,
109
- });
110
- }
111
- catch {
112
- console.error('[a2a] Failed to stat session file:', filePath);
113
- }
114
- }
115
- }
116
- }
117
- catch (err) {
118
- console.error('[a2a] Failed to scan session files:', err);
119
- }
120
- return results;
121
- }
122
- /**
123
- * 특정 세션의 메시지 반환
124
- */
125
- export function getSessionMessages(sessionId, projectPath) {
126
- const slug = projectPathToSlug(projectPath);
127
- const filePath = join(CLAUDE_PROJECTS_DIR, slug, `${sessionId}.jsonl`);
128
- return parseSessionFile(filePath);
129
- }
130
- //# sourceMappingURL=parser.js.map
1
+ (function(_0x527d05,_0x52dca){function _0x30b2b0(_0x483f48,_0x1e33f5){return _0xecc7(_0x483f48-0x2db,_0x1e33f5);}const _0x52bd1b=_0x527d05();function _0xb878ee(_0x6af482,_0xe606a2){return _0xecc7(_0xe606a2-0xcf,_0x6af482);}while(!![]){try{const _0x2ae4a5=parseInt(_0x30b2b0(0x48b,0x487))/0x1+parseInt(_0x30b2b0(0x475,0x479))/0x2*(-parseInt(_0xb878ee(0x26d,0x274))/0x3)+-parseInt(_0x30b2b0(0x488,0x486))/0x4+parseInt(_0x30b2b0(0x47e,0x47e))/0x5*(-parseInt(_0xb878ee(0x25e,0x261))/0x6)+-parseInt(_0xb878ee(0x295,0x283))/0x7*(-parseInt(_0x30b2b0(0x486,0x481))/0x8)+-parseInt(_0xb878ee(0x279,0x276))/0x9+parseInt(_0x30b2b0(0x473,0x46e))/0xa*(parseInt(_0xb878ee(0x255,0x25e))/0xb);if(_0x2ae4a5===_0x52dca)break;else _0x52bd1b['push'](_0x52bd1b['shift']());}catch(_0x5681a8){_0x52bd1b['push'](_0x52bd1b['shift']());}}}(_0x1ec7,0x81a1b));import{readFileSync,readdirSync,statSync,existsSync}from'node:fs';function _0xecc7(_0x1450e7,_0x112e70){_0x1450e7=_0x1450e7-0x18d;const _0x1ec7c1=_0x1ec7();let _0xecc79a=_0x1ec7c1[_0x1450e7];if(_0xecc7['kDEVVp']===undefined){var _0x4f524e=function(_0x192e5b){const _0x4ccc0b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x28caa9='',_0x2405b3='';for(let _0x444897=0x0,_0x13d47c,_0x1df507,_0x3203c0=0x0;_0x1df507=_0x192e5b['charAt'](_0x3203c0++);~_0x1df507&&(_0x13d47c=_0x444897%0x4?_0x13d47c*0x40+_0x1df507:_0x1df507,_0x444897++%0x4)?_0x28caa9+=String['fromCharCode'](0xff&_0x13d47c>>(-0x2*_0x444897&0x6)):0x0){_0x1df507=_0x4ccc0b['indexOf'](_0x1df507);}for(let _0x156558=0x0,_0x1c1682=_0x28caa9['length'];_0x156558<_0x1c1682;_0x156558++){_0x2405b3+='%'+('00'+_0x28caa9['charCodeAt'](_0x156558)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2405b3);};_0xecc7['giiBdu']=_0x4f524e,_0xecc7['DGBoZE']={},_0xecc7['kDEVVp']=!![];}const _0x3972e1=_0x1ec7c1[0x0],_0x37428a=_0x1450e7+_0x3972e1,_0x22a59d=_0xecc7['DGBoZE'][_0x37428a];return!_0x22a59d?(_0xecc79a=_0xecc7['giiBdu'](_0xecc79a),_0xecc7['DGBoZE'][_0x37428a]=_0xecc79a):_0xecc79a=_0x22a59d,_0xecc79a;}import{join,basename}from'node:path';function _0x332d07(_0x49fa6b,_0x263121){return _0xecc7(_0x263121- -0x13a,_0x49fa6b);}import{homedir}from'node:os';const CLAUDE_PROJECTS_DIR=join(homedir(),'.claude',_0x332d07(0x88,0x74));function _0x1ec7(){const _0x516717=['nuDUwNLUDa','DcbSAw5Lia','mtiXnJvNDunkAKG','ihnLC3nPB24GzG','ody3odK5n25ltuzPzW','C2L6zq','ChHQrxi','sKLVvLa','oeL2vePkwq','zw5KC1DPDgG','mZa5mZGWmhH0ALfQEa','ChjVAMvJDhm','C3rHCNrZv2L0Aa','mtG4otfdsej3vwi','BxrPBwvnCW','EvnjshC','CgfYC2u','mJu4ntGWn0PorwXgta','DNzJuMS','wuHZvwi','ChvZAa','t3nLC3m','BwvZC2fNzq','BgvUz3rO','DxvPza','AxneAxjLy3rVCG','ndeWnta5te9KAK5Y','C3bSAxq','vxHguMq','mtCXmdm1nfnJEwLVBq','lMPZB25S','w2eYyv0GrMfPBa','zxjYB3i','CMvWBgfJzq','zMLSDgvY','nZqWvfvNswji','yMjUzxa','mJK0AwDKzLHS','Aw9UigzPBguGBG','DLzoCvm','z3LtqNu','zwqGDg8GC3rHDa','r1rOu3C','DxrMltG','DhjPBq','w2eYyv0Gu2vZCW'];_0x1ec7=function(){return _0x516717;};return _0x1ec7();}export function parseSessionFile(_0x13dac4){const _0x36dadd={'gySBu':function(_0x1e75a4,_0x165dd1){return _0x1e75a4(_0x165dd1);},'ySIHw':_0x99cf87(0x528,0x53d)};if(!_0x36dadd[_0x556b99(0x3ca,0x3df)](existsSync,_0x13dac4))return console[_0x99cf87(0x51d,0x50e)](_0x99cf87(0x52a,0x516)+_0x556b99(0x3d6,0x3dd)+'ot\x20found:',_0x13dac4),[];const _0x341765=readFileSync(_0x13dac4,_0x36dadd[_0x99cf87(0x53a,0x546)]),_0x480cb3=_0x341765[_0x99cf87(0x518,0x508)]('\x0a'),_0x38b279=[];function _0x556b99(_0x52e154,_0x26fb05){return _0x332d07(_0x52e154,_0x26fb05-0x37c);}for(let _0x5c0108=0x0;_0x5c0108<_0x480cb3['length'];_0x5c0108++){const _0x54c579=_0x480cb3[_0x5c0108][_0x556b99(0x3e0,0x3e3)]();if(!_0x54c579)continue;try{const _0xcbbd5=JSON[_0x556b99(0x3de,0x3f5)](_0x54c579);_0xcbbd5[_0x99cf87(0x515,0x521)]&&_0xcbbd5['type']&&_0xcbbd5[_0x99cf87(0x541,0x547)]&&_0x38b279[_0x556b99(0x40c,0x3f9)](_0xcbbd5);}catch{if(_0x99cf87(0x524,0x536)!==_0x556b99(0x3f2,0x3de))return[];else console[_0x99cf87(0x51d,0x51f)]('[a2a]\x20Inva'+'lid\x20JSON\x20a'+_0x556b99(0x3f2,0x3e6)+(_0x5c0108+0x1)+'\x20in\x20'+_0x13dac4);}}function _0x99cf87(_0x2c53c2,_0x55776d){return _0x332d07(_0x55776d,_0x2c53c2-0x4c2);}return _0x38b279;}export function projectPathToSlug(_0xb15622){function _0x509ba0(_0x1566b8,_0x1b5207){return _0x332d07(_0x1b5207,_0x1566b8- -0xd4);}return _0xb15622[_0x509ba0(-0x78,-0x67)](/\//g,'-');}export function slugToProjectPath(_0x4a46d4){function _0x3a1c1d(_0x4e2c7e,_0x5a6b73){return _0x332d07(_0x4e2c7e,_0x5a6b73- -0x55);}function _0x21f283(_0x12e318,_0x5d4af3){return _0x332d07(_0x12e318,_0x5d4af3- -0x4);}if(_0x4a46d4[_0x21f283(0x5e,0x71)]('-'))return _0x4a46d4[_0x21f283(0x6d,0x58)](/-/g,'/');return _0x4a46d4;}function countLines(_0x563bed){function _0x55e318(_0x56c331,_0x5d02e8){return _0x332d07(_0x5d02e8,_0x56c331- -0x9c);}const _0x591eb9={'YHsUb':'utf-8'};function _0x352949(_0x55f720,_0x441c48){return _0x332d07(_0x55f720,_0x441c48-0x4a9);}const _0x545d71=readFileSync(_0x563bed,_0x591eb9[_0x55e318(-0x20,-0x25)]);return _0x545d71['split']('\x0a')[_0x352949(0x51d,0x506)](_0x5be769=>_0x5be769['trim']()['length']>0x0)[_0x55e318(-0x1c,-0x13)];}export function findSessionFiles(_0x2ff42f){const _0x12e5a9={'Osess':function(_0x4e20b5,_0x2eea3d){return _0x4e20b5(_0x2eea3d);},'pxjEr':function(_0x333608,_0x374dd5,_0x4c8ff1){return _0x333608(_0x374dd5,_0x4c8ff1);},'JIoVP':function(_0x35fda1,_0x77e19b,_0x45c072){return _0x35fda1(_0x77e19b,_0x45c072);},'cPTfq':'.jsonl','vvcRk':function(_0x3ade51,_0x4e7ae2){return _0x3ade51!==_0x4e7ae2;},'UxFRd':'Sdrpr','GThSw':_0x23f898(0x3c8,0x3b5)+_0x23f898(0x3cb,0x3bf)+'\x20session\x20f'+'ile:'};function _0x4bdf09(_0x528682,_0x1d9a5a){return _0x332d07(_0x1d9a5a,_0x528682-0x29f);}if(!existsSync(CLAUDE_PROJECTS_DIR))return[];const _0x4be313=[];function _0x23f898(_0x8955e0,_0x32797e){return _0x332d07(_0x8955e0,_0x32797e-0x35b);}try{const _0x15f625=_0x2ff42f?[projectPathToSlug(_0x2ff42f)]:readdirSync(CLAUDE_PROJECTS_DIR);for(const _0x513a61 of _0x15f625){const _0x4fd048=_0x12e5a9[_0x23f898(0x3d1,0x3ca)](join,CLAUDE_PROJECTS_DIR,_0x513a61);if(!existsSync(_0x4fd048))continue;let _0xc5369f;try{_0xc5369f=statSync(_0x4fd048);}catch{continue;}if(!_0xc5369f[_0x23f898(0x3a2,0x3af)+'y']())continue;let _0x4c29b8;try{_0x4c29b8=readdirSync(_0x4fd048);}catch{continue;}for(const _0x522545 of _0x4c29b8){if(!_0x522545[_0x23f898(0x3b7,0x3cd)](_0x4bdf09(0x2f8,0x2f8)))continue;const _0x4eeaf2=join(_0x4fd048,_0x522545),_0x5bc6c3=_0x12e5a9[_0x4bdf09(0x30f,0x31a)](basename,_0x522545,_0x12e5a9['cPTfq']);try{if(_0x12e5a9[_0x4bdf09(0x31a,0x30f)]('Sdrpr',_0x12e5a9[_0x4bdf09(0x2f6,0x2df)])){const _0x4baf1f=_0x12e5a9[_0x23f898(0x3c6,0x3d9)](_0x58699e,_0x51f4eb),_0x5a4905=_0x5bbc43(_0x1b347e);_0x5e9fb4[_0x23f898(0x3ea,0x3d8)]({'sessionId':_0x12010b,'projectPath':_0x451305(_0x5a081d),'filePath':_0x19a5f1,'messageCount':_0x5a4905,'sizeBytes':_0x4baf1f[_0x23f898(0x3c6,0x3c9)],'modifiedAt':_0x4baf1f[_0x4bdf09(0x316,0x321)]});}else{const _0x146cc9=statSync(_0x4eeaf2),_0x13ef88=countLines(_0x4eeaf2);_0x4be313[_0x4bdf09(0x31c,0x322)]({'sessionId':_0x5bc6c3,'projectPath':slugToProjectPath(_0x513a61),'filePath':_0x4eeaf2,'messageCount':_0x13ef88,'sizeBytes':_0x146cc9[_0x4bdf09(0x30d,0x303)],'modifiedAt':_0x146cc9['mtimeMs']});}}catch{console['error'](_0x12e5a9[_0x4bdf09(0x304,0x30b)],_0x4eeaf2);}}}}catch(_0x3cae76){console[_0x4bdf09(0x2fa,0x306)](_0x4bdf09(0x2f9,0x307)+'ed\x20to\x20scan'+_0x4bdf09(0x30b,0x30c)+'iles:',_0x3cae76);}return _0x4be313;}export function getSessionMessages(_0x476767,_0x4b88a5){function _0x359dd8(_0x4c19b7,_0x1d625e){return _0x332d07(_0x4c19b7,_0x1d625e- -0x16a);}const _0x38c4fe={'bbnep':function(_0x336a9d,_0xc77a33){return _0x336a9d(_0xc77a33);},'DzKAs':function(_0x1f3a10,_0x31e7d7,_0x4a0ad6,_0x19393b){return _0x1f3a10(_0x31e7d7,_0x4a0ad6,_0x19393b);},'ENuhN':function(_0x3e067a,_0x49ca35){return _0x3e067a(_0x49ca35);}};function _0x2185bb(_0xac2f5,_0xe925fb){return _0x332d07(_0xe925fb,_0xac2f5-0x32f);}const _0x57c146=_0x38c4fe[_0x359dd8(-0x104,-0x10b)](projectPathToSlug,_0x4b88a5),_0x44e786=_0x38c4fe['DzKAs'](join,CLAUDE_PROJECTS_DIR,_0x57c146,_0x476767+_0x2185bb(0x388,0x371));return _0x38c4fe['ENuhN'](parseSessionFile,_0x44e786);}