a2a-memory 0.11.5 → 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 (259) 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 -298
  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 -79
  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 -46
  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 -90
  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.js +1 -1400
  33. package/dist/embedding/e5-provider.js +1 -147
  34. package/dist/embedding/index.js +1 -34
  35. package/dist/embedding/local-provider.js +1 -157
  36. package/dist/embedding/openai-provider.js +1 -92
  37. package/dist/embedding/quantization.js +1 -89
  38. package/dist/extraction/dedup-manager.js +1 -161
  39. package/dist/extraction/emotion-filter.js +1 -33
  40. package/dist/extraction/extractor.js +1 -648
  41. package/dist/extraction/file-reference.js +1 -77
  42. package/dist/extraction/filter.js +1 -86
  43. package/dist/extraction/scorer.js +1 -142
  44. package/dist/extraction/similarity.js +1 -85
  45. package/dist/hooks/client-factory.js +1 -44
  46. package/dist/hooks/post-tool-use.js +1 -518
  47. package/dist/hooks/pre-compact.js +1 -209
  48. package/dist/hooks/session-end.js +1 -633
  49. package/dist/hooks/session-start.js +1 -549
  50. package/dist/hooks/shared.js +1 -110
  51. package/dist/hooks/user-prompt-submit.js +1 -316
  52. package/dist/i18n/index.js +1 -2
  53. package/dist/i18n/messages.js +1 -150
  54. package/dist/index.js +1 -43
  55. package/dist/lifecycle/cleanup-scheduler.js +1 -137
  56. package/dist/lifecycle/cleanup.js +1 -116
  57. package/dist/lifecycle/index.js +1 -13
  58. package/dist/lifecycle/quality-scorer.js +1 -46
  59. package/dist/lifecycle/tiering.js +1 -246
  60. package/dist/llm/client.js +1 -226
  61. package/dist/llm/index.js +1 -5
  62. package/dist/proficiency/actr-engine.js +1 -106
  63. package/dist/proficiency/detection.js +1 -77
  64. package/dist/proficiency/index.js +1 -9
  65. package/dist/proficiency/tracker.js +1 -173
  66. package/dist/proficiency/types.js +1 -8
  67. package/dist/providers/adapters.js +1 -140
  68. package/dist/providers/detector.js +1 -57
  69. package/dist/search/adaptive-router.js +1 -93
  70. package/dist/search/index.js +1 -9
  71. package/dist/search/ranker.js +1 -171
  72. package/dist/search/reranker.js +1 -155
  73. package/dist/session/parser.js +1 -130
  74. package/dist/skill/evaluator.js +1 -509
  75. package/dist/skill/index.js +1 -7
  76. package/dist/skill/types.js +1 -7
  77. package/dist/sync/client.js +1 -597
  78. package/dist/sync/encryption.js +1 -203
  79. package/dist/sync/index.js +1 -12
  80. package/dist/sync/queue.js +1 -214
  81. package/dist/sync/scheduler.js +1 -140
  82. package/dist/sync/synchronizer.js +1 -241
  83. package/dist/sync/team-synchronizer.js +1 -204
  84. package/dist/sync/vector-clock.js +1 -70
  85. package/dist/types/index.d.ts +1 -1
  86. package/dist/types/index.js +1 -132
  87. package/dist/utils/keychain.js +1 -170
  88. package/dist/utils/logger.js +1 -128
  89. package/package.json +14 -10
  90. package/dist/a2a/client.d.ts.map +0 -1
  91. package/dist/a2a/client.js.map +0 -1
  92. package/dist/a2a/discovery.d.ts.map +0 -1
  93. package/dist/a2a/discovery.js.map +0 -1
  94. package/dist/a2a/index.d.ts.map +0 -1
  95. package/dist/a2a/index.js.map +0 -1
  96. package/dist/a2a/types.d.ts.map +0 -1
  97. package/dist/a2a/types.js.map +0 -1
  98. package/dist/adapters/anthropic.d.ts.map +0 -1
  99. package/dist/adapters/anthropic.js.map +0 -1
  100. package/dist/chunking/chunker.d.ts.map +0 -1
  101. package/dist/chunking/chunker.js.map +0 -1
  102. package/dist/claude/sync.d.ts.map +0 -1
  103. package/dist/claude/sync.js.map +0 -1
  104. package/dist/cli/commands/add.d.ts.map +0 -1
  105. package/dist/cli/commands/add.js.map +0 -1
  106. package/dist/cli/commands/claude-sync.d.ts.map +0 -1
  107. package/dist/cli/commands/claude-sync.js.map +0 -1
  108. package/dist/cli/commands/cleanup.d.ts.map +0 -1
  109. package/dist/cli/commands/cleanup.js.map +0 -1
  110. package/dist/cli/commands/config.d.ts.map +0 -1
  111. package/dist/cli/commands/config.js.map +0 -1
  112. package/dist/cli/commands/edit.d.ts.map +0 -1
  113. package/dist/cli/commands/edit.js.map +0 -1
  114. package/dist/cli/commands/embed.d.ts.map +0 -1
  115. package/dist/cli/commands/embed.js.map +0 -1
  116. package/dist/cli/commands/extract.d.ts.map +0 -1
  117. package/dist/cli/commands/extract.js.map +0 -1
  118. package/dist/cli/commands/health.d.ts.map +0 -1
  119. package/dist/cli/commands/health.js.map +0 -1
  120. package/dist/cli/commands/list.d.ts.map +0 -1
  121. package/dist/cli/commands/list.js.map +0 -1
  122. package/dist/cli/commands/migrate-chunks.d.ts.map +0 -1
  123. package/dist/cli/commands/migrate-chunks.js.map +0 -1
  124. package/dist/cli/commands/migrate-file-refs.d.ts.map +0 -1
  125. package/dist/cli/commands/migrate-file-refs.js.map +0 -1
  126. package/dist/cli/commands/proficiency.d.ts.map +0 -1
  127. package/dist/cli/commands/proficiency.js.map +0 -1
  128. package/dist/cli/commands/rm.d.ts.map +0 -1
  129. package/dist/cli/commands/rm.js.map +0 -1
  130. package/dist/cli/commands/search.d.ts.map +0 -1
  131. package/dist/cli/commands/search.js.map +0 -1
  132. package/dist/cli/commands/setup-wizard.d.ts.map +0 -1
  133. package/dist/cli/commands/setup-wizard.js.map +0 -1
  134. package/dist/cli/commands/setup.d.ts.map +0 -1
  135. package/dist/cli/commands/setup.js.map +0 -1
  136. package/dist/cli/commands/skill.d.ts.map +0 -1
  137. package/dist/cli/commands/skill.js.map +0 -1
  138. package/dist/cli/commands/status.d.ts.map +0 -1
  139. package/dist/cli/commands/status.js.map +0 -1
  140. package/dist/cli/commands/sync.d.ts.map +0 -1
  141. package/dist/cli/commands/sync.js.map +0 -1
  142. package/dist/cli/commands/team.d.ts.map +0 -1
  143. package/dist/cli/commands/team.js.map +0 -1
  144. package/dist/cli/index.d.ts.map +0 -1
  145. package/dist/cli/index.js.map +0 -1
  146. package/dist/config/manager.d.ts.map +0 -1
  147. package/dist/config/manager.js.map +0 -1
  148. package/dist/db/database.d.ts.map +0 -1
  149. package/dist/db/database.js.map +0 -1
  150. package/dist/embedding/e5-provider.d.ts.map +0 -1
  151. package/dist/embedding/e5-provider.js.map +0 -1
  152. package/dist/embedding/index.d.ts.map +0 -1
  153. package/dist/embedding/index.js.map +0 -1
  154. package/dist/embedding/local-provider.d.ts.map +0 -1
  155. package/dist/embedding/local-provider.js.map +0 -1
  156. package/dist/embedding/openai-provider.d.ts.map +0 -1
  157. package/dist/embedding/openai-provider.js.map +0 -1
  158. package/dist/embedding/quantization.d.ts.map +0 -1
  159. package/dist/embedding/quantization.js.map +0 -1
  160. package/dist/extraction/dedup-manager.d.ts.map +0 -1
  161. package/dist/extraction/dedup-manager.js.map +0 -1
  162. package/dist/extraction/emotion-filter.d.ts.map +0 -1
  163. package/dist/extraction/emotion-filter.js.map +0 -1
  164. package/dist/extraction/extractor.d.ts.map +0 -1
  165. package/dist/extraction/extractor.js.map +0 -1
  166. package/dist/extraction/file-reference.d.ts.map +0 -1
  167. package/dist/extraction/file-reference.js.map +0 -1
  168. package/dist/extraction/filter.d.ts.map +0 -1
  169. package/dist/extraction/filter.js.map +0 -1
  170. package/dist/extraction/scorer.d.ts.map +0 -1
  171. package/dist/extraction/scorer.js.map +0 -1
  172. package/dist/extraction/similarity.d.ts.map +0 -1
  173. package/dist/extraction/similarity.js.map +0 -1
  174. package/dist/hooks/client-factory.d.ts.map +0 -1
  175. package/dist/hooks/client-factory.js.map +0 -1
  176. package/dist/hooks/post-tool-use.d.ts.map +0 -1
  177. package/dist/hooks/post-tool-use.js.map +0 -1
  178. package/dist/hooks/pre-compact.d.ts.map +0 -1
  179. package/dist/hooks/pre-compact.js.map +0 -1
  180. package/dist/hooks/session-end.d.ts.map +0 -1
  181. package/dist/hooks/session-end.js.map +0 -1
  182. package/dist/hooks/session-start.d.ts.map +0 -1
  183. package/dist/hooks/session-start.js.map +0 -1
  184. package/dist/hooks/shared.d.ts.map +0 -1
  185. package/dist/hooks/shared.js.map +0 -1
  186. package/dist/hooks/user-prompt-submit.d.ts.map +0 -1
  187. package/dist/hooks/user-prompt-submit.js.map +0 -1
  188. package/dist/i18n/index.d.ts.map +0 -1
  189. package/dist/i18n/index.js.map +0 -1
  190. package/dist/i18n/messages.d.ts.map +0 -1
  191. package/dist/i18n/messages.js.map +0 -1
  192. package/dist/index.d.ts.map +0 -1
  193. package/dist/index.js.map +0 -1
  194. package/dist/lifecycle/cleanup-scheduler.d.ts.map +0 -1
  195. package/dist/lifecycle/cleanup-scheduler.js.map +0 -1
  196. package/dist/lifecycle/cleanup.d.ts.map +0 -1
  197. package/dist/lifecycle/cleanup.js.map +0 -1
  198. package/dist/lifecycle/index.d.ts.map +0 -1
  199. package/dist/lifecycle/index.js.map +0 -1
  200. package/dist/lifecycle/quality-scorer.d.ts.map +0 -1
  201. package/dist/lifecycle/quality-scorer.js.map +0 -1
  202. package/dist/lifecycle/tiering.d.ts.map +0 -1
  203. package/dist/lifecycle/tiering.js.map +0 -1
  204. package/dist/llm/client.d.ts.map +0 -1
  205. package/dist/llm/client.js.map +0 -1
  206. package/dist/llm/index.d.ts.map +0 -1
  207. package/dist/llm/index.js.map +0 -1
  208. package/dist/proficiency/actr-engine.d.ts.map +0 -1
  209. package/dist/proficiency/actr-engine.js.map +0 -1
  210. package/dist/proficiency/detection.d.ts.map +0 -1
  211. package/dist/proficiency/detection.js.map +0 -1
  212. package/dist/proficiency/index.d.ts.map +0 -1
  213. package/dist/proficiency/index.js.map +0 -1
  214. package/dist/proficiency/tracker.d.ts.map +0 -1
  215. package/dist/proficiency/tracker.js.map +0 -1
  216. package/dist/proficiency/types.d.ts.map +0 -1
  217. package/dist/proficiency/types.js.map +0 -1
  218. package/dist/providers/adapters.d.ts.map +0 -1
  219. package/dist/providers/adapters.js.map +0 -1
  220. package/dist/providers/detector.d.ts.map +0 -1
  221. package/dist/providers/detector.js.map +0 -1
  222. package/dist/search/adaptive-router.d.ts.map +0 -1
  223. package/dist/search/adaptive-router.js.map +0 -1
  224. package/dist/search/index.d.ts.map +0 -1
  225. package/dist/search/index.js.map +0 -1
  226. package/dist/search/ranker.d.ts.map +0 -1
  227. package/dist/search/ranker.js.map +0 -1
  228. package/dist/search/reranker.d.ts.map +0 -1
  229. package/dist/search/reranker.js.map +0 -1
  230. package/dist/session/parser.d.ts.map +0 -1
  231. package/dist/session/parser.js.map +0 -1
  232. package/dist/skill/evaluator.d.ts.map +0 -1
  233. package/dist/skill/evaluator.js.map +0 -1
  234. package/dist/skill/index.d.ts.map +0 -1
  235. package/dist/skill/index.js.map +0 -1
  236. package/dist/skill/types.d.ts.map +0 -1
  237. package/dist/skill/types.js.map +0 -1
  238. package/dist/sync/client.d.ts.map +0 -1
  239. package/dist/sync/client.js.map +0 -1
  240. package/dist/sync/encryption.d.ts.map +0 -1
  241. package/dist/sync/encryption.js.map +0 -1
  242. package/dist/sync/index.d.ts.map +0 -1
  243. package/dist/sync/index.js.map +0 -1
  244. package/dist/sync/queue.d.ts.map +0 -1
  245. package/dist/sync/queue.js.map +0 -1
  246. package/dist/sync/scheduler.d.ts.map +0 -1
  247. package/dist/sync/scheduler.js.map +0 -1
  248. package/dist/sync/synchronizer.d.ts.map +0 -1
  249. package/dist/sync/synchronizer.js.map +0 -1
  250. package/dist/sync/team-synchronizer.d.ts.map +0 -1
  251. package/dist/sync/team-synchronizer.js.map +0 -1
  252. package/dist/sync/vector-clock.d.ts.map +0 -1
  253. package/dist/sync/vector-clock.js.map +0 -1
  254. package/dist/types/index.d.ts.map +0 -1
  255. package/dist/types/index.js.map +0 -1
  256. package/dist/utils/keychain.d.ts.map +0 -1
  257. package/dist/utils/keychain.js.map +0 -1
  258. package/dist/utils/logger.d.ts.map +0 -1
  259. package/dist/utils/logger.js.map +0 -1
@@ -1,106 +1 @@
1
- /**
2
- * ACT-R Activation Engine
3
- *
4
- * Backend src/core/actr/engine.py 의 TypeScript 포트.
5
- * Power Law of Practice + Forgetting Curve 기반 활성화 계산.
6
- *
7
- * 공식:
8
- * B_i = ln(sum(t_j^(-d))) + B // Base-level (시간 감쇠)
9
- * S_i = sum(W_j * S_ji) // Spreading (컨텍스트 연관)
10
- * P_i = -P * (1 - similarity) // Partial Match (유사도 보정)
11
- * A_i = B_i + S_i + P_i // Total Activation
12
- */
13
- const CLAMP_MIN = 1e-10;
14
- const CLAMP_MAX = 1e10;
15
- export class ACTREngine {
16
- config;
17
- constructor(config) {
18
- this.config = config;
19
- }
20
- /**
21
- * 전체 활성화 계산
22
- *
23
- * @param accessTimes - 접근 시간 배열 (현재 시점에서의 경과 초, 양수)
24
- * @param associations - [{ source, strength }] 연관 소스와 강도
25
- * @param context - 현재 활성 컨텍스트 소스 집합
26
- * @param similarity - 유사도 (0.0-1.0, 1.0=완벽 일치)
27
- * @param memoryId - 식별용 ID
28
- */
29
- computeActivation(accessTimes, associations, context, similarity, memoryId = '') {
30
- const baseLevel = this.computeBaseLevel(accessTimes);
31
- const spreading = this.computeSpreading(associations, context);
32
- const partialMatch = this.computePartialMatch(similarity);
33
- const total = baseLevel + spreading + partialMatch;
34
- return {
35
- memoryId,
36
- baseLevel,
37
- spreading,
38
- partialMatch,
39
- total,
40
- shouldRetrieve: total >= this.config.retrievalThreshold,
41
- };
42
- }
43
- /**
44
- * Base-level Activation: B_i = ln(sum(t_j^(-d))) + B
45
- * Power Law of Practice + Forgetting Curve
46
- */
47
- computeBaseLevel(accessTimes) {
48
- if (accessTimes.length === 0) {
49
- return this.config.baseLevelConstant;
50
- }
51
- const d = this.config.decayRate;
52
- let sum = 0;
53
- for (const t of accessTimes) {
54
- // 경과 시간이 0 이하이면 최소값 사용
55
- const safeT = Math.max(t, CLAMP_MIN);
56
- sum += Math.pow(safeT, -d);
57
- }
58
- // clamp sum to avoid log(0) or extreme values
59
- sum = Math.max(sum, CLAMP_MIN);
60
- sum = Math.min(sum, CLAMP_MAX);
61
- return Math.log(sum) + this.config.baseLevelConstant;
62
- }
63
- /**
64
- * Spreading Activation: S_i = sum(W_j * S_ji)
65
- * Fan Effect: W_j = Smax / fan(j)
66
- */
67
- computeSpreading(associations, context) {
68
- if (associations.length === 0 || context.size === 0) {
69
- return 0;
70
- }
71
- // Fan 계산: 각 source가 연관된 총 수
72
- const fanCounts = new Map();
73
- for (const assoc of associations) {
74
- fanCounts.set(assoc.source, (fanCounts.get(assoc.source) ?? 0) + 1);
75
- }
76
- let totalSpreading = 0;
77
- for (const assoc of associations) {
78
- if (!context.has(assoc.source))
79
- continue;
80
- const fan = fanCounts.get(assoc.source) ?? 1;
81
- const W_j = this.config.maxAssociativeStrength / (fan * this.config.fanEffectFactor);
82
- totalSpreading += W_j * assoc.strength;
83
- }
84
- return totalSpreading;
85
- }
86
- /**
87
- * Partial Matching: P_i = -P * (1 - similarity)
88
- */
89
- computePartialMatch(similarity) {
90
- const clampedSim = Math.max(0, Math.min(1, similarity));
91
- return -this.config.mismatchPenalty * (1 - clampedSim);
92
- }
93
- /**
94
- * Activation을 1-maxLevel 레벨로 변환
95
- *
96
- * 정규화: activation [-2, 5] -> [0, 1]
97
- * 레벨: ceil(normalized * maxLevel), clamp [1, maxLevel]
98
- */
99
- computeLevel(activation, maxLevel) {
100
- // 정규화: [-2, 5] 범위를 [0, 1]로
101
- const normalized = Math.max(0, Math.min(1, (activation + 2) / 7));
102
- const level = Math.ceil(normalized * maxLevel);
103
- return Math.min(maxLevel, Math.max(1, level));
104
- }
105
- }
106
- //# sourceMappingURL=actr-engine.js.map
1
+ function _0x585d0a(_0xa2d285,_0x1722af){return _0x47ae(_0x1722af-0x28c,_0xa2d285);}(function(_0x12d1b2,_0x4a68b0){const _0x4a4995=_0x12d1b2();function _0x24d981(_0x1f421b,_0x2258e2){return _0x47ae(_0x2258e2- -0x137,_0x1f421b);}function _0x3f077f(_0x115871,_0xc251ac){return _0x47ae(_0xc251ac- -0x2c2,_0x115871);}while(!![]){try{const _0x11af23=-parseInt(_0x3f077f(-0x142,-0x153))/0x1+parseInt(_0x3f077f(-0x137,-0x13f))/0x2*(parseInt(_0x3f077f(-0x12a,-0x138))/0x3)+-parseInt(_0x3f077f(-0x142,-0x152))/0x4*(-parseInt(_0x3f077f(-0x146,-0x157))/0x5)+-parseInt(_0x24d981(0x4f,0x54))/0x6*(-parseInt(_0x24d981(0x3d,0x3b))/0x7)+-parseInt(_0x24d981(0x4a,0x5b))/0x8+parseInt(_0x24d981(0x60,0x48))/0x9+-parseInt(_0x24d981(0x3e,0x40))/0xa;if(_0x11af23===_0x4a68b0)break;else _0x4a4995['push'](_0x4a4995['shift']());}catch(_0x4a801c){_0x4a4995['push'](_0x4a4995['shift']());}}}(_0x533a,0xc20b7));function _0x533a(){const _0x1bcffa=['tKLSrgG','y29UzMLN','BMfSDhK','mteZntm4mfnwDfjoCW','mta0AxnruMD1','y29TChv0zujHCW','ntC0tMTHCxnc','C291CMnL','wuPlqwy','y29TChv0zvnWCG','B25ZDgfUDa','mZy1ntq0mfvWBwnnyG','ywn0B3i','rKfIrLK','AhjLC2HVBgq','sKzisvq','BwLU','C2L6zq','CMv0CMLLDMfSva','mte2mZi0mtLpsuHKy1e','DgLHBe1HDgnO','C3rYzw5NDgG','Bwf4','mte0mdz5AK5kEhC','y29TChv0zvbHCG','rhrlvKe','EfHZsNm','Bg9N','uvjUDwK','AgfZ','nZeXBg9HEevV','ntm1nZrKsxfMAwq','y2vPBa','BwLZBwf0y2Hqzq','z2v0','Cg93','Bwf4qxnZB2nPyq','zMfUrwzMzwn0rG','mteZotqZnJbbEvz5A1C','BgvUz3rO','C2v0','yMfZzuXLDMvSqW','tKrItgm','zwfKAw5N','tLHTz0K','zgvJyxLsyxrL','v3r6Bee','nJyXmdvczentweO'];_0x533a=function(){return _0x1bcffa;};return _0x533a();}function _0x47ae(_0x2c4f23,_0x291a6d){_0x2c4f23=_0x2c4f23-0x16a;const _0x533ac4=_0x533a();let _0x47aed4=_0x533ac4[_0x2c4f23];if(_0x47ae['iJOpEz']===undefined){var _0xa31446=function(_0x302660){const _0x5141e2='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x105269='',_0x32cdea='';for(let _0x20da6c=0x0,_0x5365c7,_0x2304f5,_0x16883b=0x0;_0x2304f5=_0x302660['charAt'](_0x16883b++);~_0x2304f5&&(_0x5365c7=_0x20da6c%0x4?_0x5365c7*0x40+_0x2304f5:_0x2304f5,_0x20da6c++%0x4)?_0x105269+=String['fromCharCode'](0xff&_0x5365c7>>(-0x2*_0x20da6c&0x6)):0x0){_0x2304f5=_0x5141e2['indexOf'](_0x2304f5);}for(let _0x1443df=0x0,_0x26f185=_0x105269['length'];_0x1443df<_0x26f185;_0x1443df++){_0x32cdea+='%'+('00'+_0x105269['charCodeAt'](_0x1443df)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x32cdea);};_0x47ae['VxQglj']=_0xa31446,_0x47ae['dKZFmg']={},_0x47ae['iJOpEz']=!![];}const _0x382676=_0x533ac4[0x0],_0x26df88=_0x2c4f23+_0x382676,_0x4f4d64=_0x47ae['dKZFmg'][_0x26df88];return!_0x4f4d64?(_0x47aed4=_0x47ae['VxQglj'](_0x47aed4),_0x47ae['dKZFmg'][_0x26df88]=_0x47aed4):_0x47aed4=_0x4f4d64,_0x47aed4;}function _0x4e679f(_0x42ab62,_0x551f25){return _0x47ae(_0x42ab62-0x1be,_0x551f25);}const CLAMP_MIN=1e-10,CLAMP_MAX=0x2540be400;export class ACTREngine{[_0x585d0a(0x405,0x3f9)];constructor(_0x1477dc){function _0x591ed7(_0x1926b2,_0x3fcb9c){return _0x585d0a(_0x1926b2,_0x3fcb9c-0x64);}this[_0x591ed7(0x461,0x45d)]=_0x1477dc;}['computeAct'+'ivation'](_0x4eb981,_0x3f8c8a,_0x6a98a3,_0x2acc51,_0x5bb437=''){const _0x5da574={'QRnui':function(_0x3a1888,_0x36635f){return _0x3a1888>=_0x36635f;}};function _0x262a1c(_0x1c0dcb,_0x5f3d58){return _0x585d0a(_0x5f3d58,_0x1c0dcb- -0x245);}const _0x234534=this['computeBas'+'eLevel'](_0x4eb981),_0x3cdc49=this[_0x262a1c(0x1bc,0x1ba)+_0x262a1c(0x1de,0x1dc)](_0x3f8c8a,_0x6a98a3),_0x331ea7=this[_0x46d387(-0x3d,-0x2a)+_0x46d387(-0x26,-0x2e)](_0x2acc51);function _0x46d387(_0x449e20,_0x2d6d5f){return _0x585d0a(_0x449e20,_0x2d6d5f- -0x43a);}const _0x3b6830=_0x234534+_0x3cdc49+_0x331ea7;return{'memoryId':_0x5bb437,'baseLevel':_0x234534,'spreading':_0x3cdc49,'partialMatch':_0x331ea7,'total':_0x3b6830,'shouldRetrieve':_0x5da574[_0x46d387(-0x2c,-0x26)](_0x3b6830,this['config'][_0x46d387(-0x42,-0x30)+_0x46d387(-0x2d,-0x34)])};}[_0x4e679f(0x32f,0x326)+'eLevel'](_0x30d2a7){const _0x57f57e={'NIlDh':function(_0x1d6a24,_0x268523){return _0x1d6a24===_0x268523;}};if(_0x57f57e[_0x1aeaa7(0x387,0x37d)](_0x30d2a7[_0x2b6577(0x3a1,0x3a7)],0x0))return this[_0x1aeaa7(0x388,0x395)][_0x2b6577(0x3a3,0x3b5)+_0x2b6577(0x384,0x395)];const _0x55027c=this[_0x2b6577(0x37b,0x381)][_0x2b6577(0x3a7,0x3ad)];function _0x1aeaa7(_0x24019,_0x1e7069){return _0x4e679f(_0x24019-0x5d,_0x1e7069);}let _0x2737f6=0x0;for(const _0x3f9cc9 of _0x30d2a7){const _0xca2ff=Math[_0x1aeaa7(0x39d,0x39a)](_0x3f9cc9,CLAMP_MIN);_0x2737f6+=Math['pow'](_0xca2ff,-_0x55027c);}function _0x2b6577(_0x2fb2c5,_0x1c33a8){return _0x4e679f(_0x2fb2c5-0x50,_0x1c33a8);}return _0x2737f6=Math[_0x2b6577(0x390,0x379)](_0x2737f6,CLAMP_MIN),_0x2737f6=Math['min'](_0x2737f6,CLAMP_MAX),Math[_0x1aeaa7(0x3a2,0x3a8)](_0x2737f6)+this[_0x2b6577(0x37b,0x38a)][_0x2b6577(0x3a3,0x3ba)+_0x2b6577(0x384,0x38f)];}[_0x4e679f(0x333,0x33f)+_0x4e679f(0x355,0x358)](_0x381767,_0x3342e9){const _0x269838={'xXsJs':function(_0x593a16,_0x122011){return _0x593a16===_0x122011;},'sWKfe':function(_0xc1de0d,_0x4eeaa6){return _0xc1de0d!==_0x4eeaa6;},'sdEwi':_0x2542f5(0x12,-0x5),'OKurR':_0x2542f5(0xd,0x2),'NDbLc':function(_0x4c378a,_0x331643){return _0x4c378a+_0x331643;},'JFHIT':function(_0x48d07b,_0x464874){return _0x48d07b/_0x464874;},'RdoVl':function(_0x47d1f0,_0xc219f4){return _0x47d1f0*_0xc219f4;}};function _0x2542f5(_0x2189ab,_0x3ec136){return _0x4e679f(_0x2189ab- -0x325,_0x3ec136);}if(_0x269838[_0x53fa58(-0x132,-0x139)](_0x381767['length'],0x0)||_0x3342e9[_0x53fa58(-0x13b,-0x143)]===0x0){if(_0x269838['sWKfe'](_0x269838['sdEwi'],_0x269838['OKurR']))return 0x0;else{const _0x1bdd06=_0x1a814e['max'](_0x371a46,_0x14af71);_0x4c98b5+=_0x308f2f[_0x2542f5(0x28,0x35)](_0x1bdd06,-_0x19b7c0);}}const _0x5ad7fa=new Map();for(const _0x251834 of _0x381767){_0x5ad7fa[_0x53fa58(-0x124,-0x125)](_0x251834[_0x53fa58(-0x145,-0x149)],_0x269838[_0x53fa58(-0x122,-0x112)](_0x5ad7fa[_0x2542f5(0x27,0x2e)](_0x251834[_0x2542f5(0xc,0x1c)])??0x0,0x1));}let _0x1b19d4=0x0;function _0x53fa58(_0x38b2b1,_0x435e5b){return _0x4e679f(_0x38b2b1- -0x476,_0x435e5b);}for(const _0x5e0914 of _0x381767){if(!_0x3342e9[_0x53fa58(-0x12f,-0x11f)](_0x5e0914['source']))continue;const _0x2acdf6=_0x5ad7fa[_0x2542f5(0x27,0x17)](_0x5e0914[_0x2542f5(0xc,-0x6)])??0x1,_0x2ebb2e=_0x269838[_0x53fa58(-0x13d,-0x138)](this[_0x53fa58(-0x14b,-0x14d)][_0x53fa58(-0x128,-0x119)+'tiveStreng'+'th'],_0x269838['RdoVl'](_0x2acdf6,this[_0x53fa58(-0x14b,-0x154)][_0x2542f5(0x2a,0x26)+_0x53fa58(-0x140,-0x13b)]));_0x1b19d4+=_0x2ebb2e*_0x5e0914[_0x2542f5(0x1a,0x2b)];}return _0x1b19d4;}[_0x4e679f(0x342,0x347)+_0x4e679f(0x33e,0x32a)](_0x5087ac){function _0x87f3ec(_0x43cd73,_0x5aea1e){return _0x4e679f(_0x5aea1e- -0x45c,_0x43cd73);}function _0x3b874c(_0x431f14,_0x53c2ef){return _0x4e679f(_0x431f14- -0x1de,_0x53c2ef);}const _0x43d609=Math['max'](0x0,Math[_0x3b874c(0x15c,0x168)](0x1,_0x5087ac));return-this[_0x87f3ec(-0x125,-0x131)][_0x87f3ec(-0x112,-0x111)+_0x87f3ec(-0x137,-0x130)]*(0x1-_0x43d609);}['computeLev'+'el'](_0x270cb1,_0x402bb0){function _0x16cd03(_0x327707,_0xabcaa2){return _0x585d0a(_0x327707,_0xabcaa2- -0x2d2);}function _0x45a0e0(_0x5e5ee5,_0xc82aa5){return _0x585d0a(_0x5e5ee5,_0xc82aa5- -0x56e);}const _0x5bdfda={'NXmgI':function(_0x1da090,_0x1a4b26){return _0x1da090/_0x1a4b26;},'DtKVA':function(_0x289184,_0x58d948){return _0x289184+_0x58d948;},'WtzlA':function(_0x26b9f7,_0x589323){return _0x26b9f7*_0x589323;}},_0x243f1e=Math['max'](0x0,Math[_0x45a0e0(-0x17d,-0x166)](0x1,_0x5bdfda[_0x45a0e0(-0x150,-0x14a)](_0x5bdfda[_0x16cd03(0x138,0x13f)](_0x270cb1,0x2),0x7))),_0x4abe26=Math[_0x16cd03(0x150,0x146)](_0x5bdfda[_0x16cd03(0x12e,0x124)](_0x243f1e,_0x402bb0));return Math['min'](_0x402bb0,Math[_0x16cd03(0x142,0x13c)](0x1,_0x4abe26));}}
@@ -1,77 +1 @@
1
- /**
2
- * Multi-signal skill practice detection.
3
- */
4
- import { cosineSimilarity } from '../extraction/similarity.js';
5
- export { cosineSimilarity };
6
- /**
7
- * Jaccard similarity between two tag sets
8
- */
9
- export function jaccardSimilarity(setA, setB) {
10
- if (setA.length === 0 && setB.length === 0)
11
- return 0;
12
- const a = new Set(setA.map(s => s.toLowerCase()));
13
- const b = new Set(setB.map(s => s.toLowerCase()));
14
- const intersection = new Set([...a].filter(x => b.has(x)));
15
- const union = new Set([...a, ...b]);
16
- return union.size > 0 ? intersection.size / union.size : 0;
17
- }
18
- /**
19
- * Keyword match ratio
20
- */
21
- export function keywordMatchRatio(skillContent, sessionTexts) {
22
- if (!skillContent || sessionTexts.length === 0)
23
- return 0;
24
- const keywords = skillContent
25
- .toLowerCase()
26
- .split(/[\s,.;:!?\-_/\\]+/)
27
- .filter(w => w.length > 3)
28
- .slice(0, 10);
29
- if (keywords.length === 0)
30
- return 0;
31
- const sessionText = sessionTexts.join(' ').toLowerCase();
32
- const matches = keywords.filter(kw => sessionText.includes(kw));
33
- return matches.length / keywords.length;
34
- }
35
- /**
36
- * Multi-signal skill practice detection
37
- * Weights: embedding 0.5 + tag overlap 0.3 + keyword 0.2
38
- */
39
- export function detectSkillPractice(skill, sessionMemories) {
40
- if (sessionMemories.length === 0)
41
- return null;
42
- // Signal 1: Embedding similarity
43
- let embeddingSim = 0;
44
- if (skill.embedding && skill.embedding.length > 0) {
45
- for (const mem of sessionMemories) {
46
- if (mem.embedding && mem.embedding.length === skill.embedding.length) {
47
- const sim = cosineSimilarity(skill.embedding, mem.embedding);
48
- embeddingSim = Math.max(embeddingSim, sim);
49
- }
50
- }
51
- }
52
- // Signal 2: Tag overlap
53
- const sessionTags = [...new Set(sessionMemories.flatMap(m => m.tags || []))];
54
- const tagSim = jaccardSimilarity(skill.tags || [], sessionTags);
55
- // Signal 3: Keyword matching
56
- const sessionTexts = sessionMemories.map(m => m.content);
57
- const keywordSim = keywordMatchRatio(skill.content, sessionTexts);
58
- // Weighted sum
59
- // 임베딩 없으면 tag/keyword에 가중치 재분배
60
- let score;
61
- if (embeddingSim > 0) {
62
- score = embeddingSim * 0.5 + tagSim * 0.3 + keywordSim * 0.2;
63
- }
64
- else {
65
- // 임베딩 미사용: tag 0.55 + keyword 0.45
66
- score = tagSim * 0.55 + keywordSim * 0.45;
67
- }
68
- if (score < 0.4)
69
- return null;
70
- return {
71
- skillMemoryId: skill.id,
72
- outcome: score >= 0.7 ? 'success' : score >= 0.5 ? 'partial' : 'failure',
73
- difficulty: Math.round((1 - score) * 100) / 100,
74
- contextTags: sessionTags.slice(0, 10),
75
- };
76
- }
77
- //# sourceMappingURL=detection.js.map
1
+ (function(_0x321880,_0x4b7bb3){function _0x2c4733(_0x511a5b,_0xa7107b){return _0x22e5(_0xa7107b- -0x83,_0x511a5b);}function _0x3262ba(_0x17943a,_0x11fa25){return _0x22e5(_0x11fa25-0x193,_0x17943a);}const _0x3f5d82=_0x321880();while(!![]){try{const _0xcbe6f2=-parseInt(_0x2c4733(0x28,0x37))/0x1+parseInt(_0x2c4733(0x43,0x3f))/0x2*(-parseInt(_0x3262ba(0x24e,0x249))/0x3)+-parseInt(_0x2c4733(0x52,0x51))/0x4*(parseInt(_0x2c4733(0x1e,0x31))/0x5)+parseInt(_0x2c4733(0x2c,0x2e))/0x6*(-parseInt(_0x2c4733(0x2c,0x32))/0x7)+-parseInt(_0x3262ba(0x24a,0x243))/0x8*(-parseInt(_0x3262ba(0x244,0x253))/0x9)+parseInt(_0x3262ba(0x264,0x25a))/0xa+parseInt(_0x2c4733(0x38,0x3b))/0xb;if(_0xcbe6f2===_0x4b7bb3)break;else _0x3f5d82['push'](_0x3f5d82['shift']());}catch(_0x56c0e4){_0x3f5d82['push'](_0x3f5d82['shift']());}}}(_0x4dec,0x87a1a));import{cosineSimilarity}from'../extraction/similarity.js';export{cosineSimilarity};function _0x4dec(){const _0x17232e=['Bwf4','otmZnJKWshHsveLT','BwfW','C2L6zq','qLrRu00','C2XPy2u','CM91BMq','zw1IzwrKAw5N','DgfNCW','BgvUz3rO','uxPKvg0','zMXHDe1HCa','wu1jDLi','AhvQsLa','ofvJB2vswa','uKnnzgy','nJrWrwHHCe0','mZq1nJz6C3zfDLi','C3vJy2vZCW','Dg9mB3DLCKnHCW','otC2nZK1EvbWAhPA','nZDADMHIyMK','mZe1nZy1vwPRq1jJ','AM9PBG','Aw5JBhvKzxm','vNjgvhq','nte0mZi0D0PczwDy','DhDHuxK','zMLSDgvY','AMvzwKC','mtiXnJi0mtrcCffNAwm','v1bPu1e','odm5mtC4zuj6ywHQ','y29UDgvUDa','oeHdCfvHqG','z3H6r1O','yvrHCMG','t3vbEgy'];_0x4dec=function(){return _0x17232e;};return _0x4dec();}function _0x22e5(_0x40df05,_0x5aedda){_0x40df05=_0x40df05-0xb0;const _0x4decea=_0x4dec();let _0x22e51c=_0x4decea[_0x40df05];if(_0x22e5['tGnKHQ']===undefined){var _0x5d1ee6=function(_0x996dcc){const _0xbb9072='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x21d937='',_0x53ca45='';for(let _0x5dc759=0x0,_0x246ca5,_0x469873,_0x519a1d=0x0;_0x469873=_0x996dcc['charAt'](_0x519a1d++);~_0x469873&&(_0x246ca5=_0x5dc759%0x4?_0x246ca5*0x40+_0x469873:_0x469873,_0x5dc759++%0x4)?_0x21d937+=String['fromCharCode'](0xff&_0x246ca5>>(-0x2*_0x5dc759&0x6)):0x0){_0x469873=_0xbb9072['indexOf'](_0x469873);}for(let _0x59c292=0x0,_0x3bfb29=_0x21d937['length'];_0x59c292<_0x3bfb29;_0x59c292++){_0x53ca45+='%'+('00'+_0x21d937['charCodeAt'](_0x59c292)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x53ca45);};_0x22e5['XVnVsR']=_0x5d1ee6,_0x22e5['gXzBwr']={},_0x22e5['tGnKHQ']=!![];}const _0x374598=_0x4decea[0x0],_0x412f9a=_0x40df05+_0x374598,_0x38d3ec=_0x22e5['gXzBwr'][_0x412f9a];return!_0x38d3ec?(_0x22e51c=_0x22e5['XVnVsR'](_0x22e51c),_0x22e5['gXzBwr'][_0x412f9a]=_0x22e51c):_0x22e51c=_0x38d3ec,_0x22e51c;}export function jaccardSimilarity(_0x5934b1,_0x5491c4){const _0x304dc6={'WPiSQ':function(_0x522523,_0x1cf386){return _0x522523>_0x1cf386;}};if(_0x5934b1['length']===0x0&&_0x5491c4[_0x5aed6b(0x10a,0x11d)]===0x0)return 0x0;function _0x5aed6b(_0x53e63e,_0x14352e){return _0x22e5(_0x53e63e-0x3b,_0x14352e);}const _0x2889f3=new Set(_0x5934b1[_0x5d4158(0x251,0x25b)](_0x451141=>_0x451141[_0x5d4158(0x252,0x246)+'e']())),_0x336ff0=new Set(_0x5491c4[_0x5d4158(0x258,0x25b)](_0x3a04ba=>_0x3a04ba[_0x5d4158(0x244,0x246)+'e']())),_0x511c9d=new Set([..._0x2889f3][_0x5aed6b(0xf7,0xf3)](_0x37eb51=>_0x336ff0['has'](_0x37eb51))),_0x3f2ebe=new Set([..._0x2889f3,..._0x336ff0]);function _0x5d4158(_0x57a0a9,_0x5b7b89){return _0x22e5(_0x5b7b89-0x193,_0x57a0a9);}return _0x304dc6[_0x5d4158(0x261,0x252)](_0x3f2ebe[_0x5d4158(0x267,0x25c)],0x0)?_0x511c9d[_0x5d4158(0x25c,0x25c)]/_0x3f2ebe[_0x5d4158(0x264,0x25c)]:0x0;}export function keywordMatchRatio(_0x5f3a2c,_0x10a683){const _0x57da4b={'gxzGZ':function(_0x96957e,_0x7242c0){return _0x96957e===_0x7242c0;}};if(!_0x5f3a2c||_0x57da4b[_0x218c94(0x27a,0x273)](_0x10a683[_0x218c94(0x26d,0x27f)],0x0))return 0x0;const _0x30cfb5=_0x5f3a2c[_0x218c94(0x25d,0x263)+'e']()['split'](/[\s,.;:!?\-_/\\]+/)[_0x218c94(0x275,0x26c)](_0x1c1dd1=>_0x1c1dd1[_0x221563(0x210,0x21b)]>0x3)['slice'](0x0,0xa);if(_0x30cfb5[_0x218c94(0x27b,0x27f)]===0x0)return 0x0;const _0x1668df=_0x10a683[_0x218c94(0x276,0x267)]('\x20')[_0x218c94(0x252,0x263)+'e']();function _0x221563(_0x37d927,_0x2fc90e){return _0x22e5(_0x37d927-0x141,_0x2fc90e);}function _0x218c94(_0x2afaad,_0x2469cb){return _0x22e5(_0x2469cb-0x1b0,_0x2afaad);}const _0x5efe0d=_0x30cfb5[_0x218c94(0x26a,0x26c)](_0x2d8471=>_0x1668df[_0x221563(0x1f9,0x201)](_0x2d8471));return _0x5efe0d[_0x221563(0x210,0x20d)]/_0x30cfb5[_0x221563(0x210,0x21f)];}export function detectSkillPractice(_0x3c120c,_0x4a81bd){function _0x15c036(_0x2140ff,_0x1dbcf9){return _0x22e5(_0x2140ff- -0x179,_0x1dbcf9);}const _0x6871df={'LrPwq':function(_0x1b3886,_0x4fa36d){return _0x1b3886===_0x4fa36d;},'OuAxf':function(_0x482060,_0x1e3b5b){return _0x482060===_0x1e3b5b;},'hujJP':function(_0x1ee606,_0x554243,_0x175bb8){return _0x1ee606(_0x554243,_0x175bb8);},'jeYZG':function(_0x440b02,_0x5999ae,_0xff5617){return _0x440b02(_0x5999ae,_0xff5617);},'BTkSM':function(_0x5e95f6,_0x46129c){return _0x5e95f6>_0x46129c;},'twaQy':function(_0x4e75e4,_0x514af8){return _0x4e75e4*_0x514af8;},'VrFTt':function(_0x317f72,_0x1a5a94){return _0x317f72*_0x1a5a94;},'mLset':function(_0x411896,_0xdb5fd0){return _0x411896<_0xdb5fd0;},'RCMdf':function(_0x47c68c,_0x102664){return _0x47c68c>=_0x102664;},'YMIvR':_0x15c036(-0xc7,-0xcc),'QzdTm':function(_0x342c1c,_0xe4adfc){return _0x342c1c>=_0xe4adfc;},'haOmC':'failure'};function _0x2a64db(_0x293b48,_0x4dd9a0){return _0x22e5(_0x293b48-0x13d,_0x4dd9a0);}if(_0x6871df['LrPwq'](_0x4a81bd[_0x15c036(-0xaa,-0xbd)],0x0))return null;let _0x158e96=0x0;if(_0x3c120c['embedding']&&_0x3c120c[_0x15c036(-0xac,-0xa5)]['length']>0x0){if(_0x6871df[_0x15c036(-0xb4,-0xba)](_0x15c036(-0xb5,-0xac),_0x15c036(-0xb5,-0xc4)))for(const _0x3773d9 of _0x4a81bd){if(_0x3773d9[_0x15c036(-0xac,-0xb5)]&&_0x3773d9[_0x15c036(-0xac,-0xbd)][_0x2a64db(0x20c,0x214)]===_0x3c120c['embedding'][_0x2a64db(0x20c,0x20f)]){const _0x4a4834=_0x6871df[_0x2a64db(0x210,0x223)](cosineSimilarity,_0x3c120c[_0x15c036(-0xac,-0xbc)],_0x3773d9[_0x15c036(-0xac,-0x99)]);_0x158e96=Math[_0x2a64db(0x203,0x1f7)](_0x158e96,_0x4a4834);}}else{const _0x4a4a52=_0x46c37a(_0x14c396[_0x2a64db(0x20a,0x20e)],_0x53dad0[_0x15c036(-0xac,-0x9f)]);_0x5c590e=_0x562ecc[_0x15c036(-0xb3,-0xbb)](_0xb7bb11,_0x4a4a52);}}const _0x4e3979=[...new Set(_0x4a81bd[_0x15c036(-0xa8,-0xba)](_0x27d6a2=>_0x27d6a2[_0x15c036(-0xab,-0xa5)]||[]))],_0x35bc36=_0x6871df[_0x2a64db(0x1fa,0x208)](jaccardSimilarity,_0x3c120c['tags']||[],_0x4e3979),_0x362490=_0x4a81bd['map'](_0x5a7348=>_0x5a7348[_0x2a64db(0x1fe,0x207)]),_0x319292=keywordMatchRatio(_0x3c120c[_0x15c036(-0xb8,-0xb8)],_0x362490);let _0x13b2ad;_0x6871df[_0x15c036(-0xaf,-0xa5)](_0x158e96,0x0)?_0x13b2ad=_0x6871df[_0x2a64db(0x1f8,0x1eb)](_0x158e96,0.5)+_0x35bc36*0.3+_0x6871df[_0x2a64db(0x1f6,0x209)](_0x319292,0.2):_0x13b2ad=_0x6871df[_0x15c036(-0xc0,-0xae)](_0x35bc36,0.55)+_0x319292*0.45;if(_0x6871df['mLset'](_0x13b2ad,0.4))return null;return{'skillMemoryId':_0x3c120c['id'],'outcome':_0x6871df[_0x15c036(-0xa4,-0xb0)](_0x13b2ad,0.7)?_0x6871df[_0x15c036(-0xa7,-0xb5)]:_0x6871df[_0x2a64db(0x20d,0x21b)](_0x13b2ad,0.5)?'partial':_0x6871df['haOmC'],'difficulty':Math[_0x2a64db(0x209,0x1f8)](_0x6871df['VrFTt'](0x1-_0x13b2ad,0x64))/0x64,'contextTags':_0x4e3979[_0x2a64db(0x208,0x1f8)](0x0,0xa)};}
@@ -1,9 +1 @@
1
- /**
2
- * Proficiency Module
3
- *
4
- * ACT-R 기반 스킬 숙련도 추적 시스템.
5
- */
6
- export { ACTREngine } from './actr-engine.js';
7
- export { ProficiencyTracker, computePracticalLevel } from './tracker.js';
8
- export { jaccardSimilarity, keywordMatchRatio, cosineSimilarity, detectSkillPractice, } from './detection.js';
9
- //# sourceMappingURL=index.js.map
1
+ function _0x480e(_0xc4588d,_0x24fe44){_0xc4588d=_0xc4588d-0x12b;var _0x5d53a8=_0x5d53();var _0x480ed3=_0x5d53a8[_0xc4588d];if(_0x480e['jGAYQv']===undefined){var _0x3f2271=function(_0x5abeaf){var _0x2b0a31='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x1a443b='',_0x3195fd='';for(var _0x5ab8cd=0x0,_0x5bff4f,_0x3ec99b,_0x1101dc=0x0;_0x3ec99b=_0x5abeaf['charAt'](_0x1101dc++);~_0x3ec99b&&(_0x5bff4f=_0x5ab8cd%0x4?_0x5bff4f*0x40+_0x3ec99b:_0x3ec99b,_0x5ab8cd++%0x4)?_0x1a443b+=String['fromCharCode'](0xff&_0x5bff4f>>(-0x2*_0x5ab8cd&0x6)):0x0){_0x3ec99b=_0x2b0a31['indexOf'](_0x3ec99b);}for(var _0x52c245=0x0,_0x93e3d5=_0x1a443b['length'];_0x52c245<_0x93e3d5;_0x52c245++){_0x3195fd+='%'+('00'+_0x1a443b['charCodeAt'](_0x52c245)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3195fd);};_0x480e['bnFWRu']=_0x3f2271,_0x480e['OjciFU']={},_0x480e['jGAYQv']=!![];}var _0xd912c1=_0x5d53a8[0x0],_0x3b131e=_0xc4588d+_0xd912c1,_0x3b2602=_0x480e['OjciFU'][_0x3b131e];return!_0x3b2602?(_0x480ed3=_0x480e['bnFWRu'](_0x480ed3),_0x480e['OjciFU'][_0x3b131e]=_0x480ed3):_0x480ed3=_0x3b2602,_0x480ed3;}(function(_0x17c74d,_0x38a94e){function _0x54c736(_0x1c5006,_0xa32adf){return _0x480e(_0x1c5006- -0x158,_0xa32adf);}var _0x11e4e3=_0x17c74d();function _0x1907fb(_0x5c991b,_0x2ef25e){return _0x480e(_0x5c991b- -0x4a,_0x2ef25e);}while(!![]){try{var _0x259727=parseInt(_0x54c736(-0x29,-0x2b))/0x1+parseInt(_0x54c736(-0x25,-0x20))/0x2+parseInt(_0x54c736(-0x2d,-0x32))/0x3*(parseInt(_0x1907fb(0xe8,0xe4))/0x4)+-parseInt(_0x1907fb(0xeb,0xf0))/0x5*(-parseInt(_0x54c736(-0x27,-0x27))/0x6)+parseInt(_0x1907fb(0xe6,0xea))/0x7*(-parseInt(_0x1907fb(0xea,0xe6))/0x8)+parseInt(_0x1907fb(0xe3,0xe7))/0x9+parseInt(_0x1907fb(0xe2,0xe4))/0xa*(-parseInt(_0x1907fb(0xe4,0xdf))/0xb);if(_0x259727===_0x38a94e)break;else _0x11e4e3['push'](_0x11e4e3['shift']());}catch(_0x111efd){_0x11e4e3['push'](_0x11e4e3['shift']());}}}(_0x5d53,0x54ea9));export{ACTREngine}from'./actr-engine.js';function _0x5d53(){var _0xd6b63e=['ndm2nZjMCNrMt2i','nvPkAej0Bq','nta0t2TpBLLm','mZe3mhnqAujTzq','ndyWnta4nfPJq2XdrG','ndi5nZDcD1DLBuy','mJC2odn6tKvvwfe','ntC0uK5xCLzS','mtmYmtC3mfHHCNb5sa','mtuZotjTuwzuBKK','mti1ntCXmKTMAuPJCa'];_0x5d53=function(){return _0xd6b63e;};return _0x5d53();}export{ProficiencyTracker,computePracticalLevel}from'./tracker.js';export{jaccardSimilarity,keywordMatchRatio,cosineSimilarity,detectSkillPractice}from'./detection.js';
@@ -1,173 +1 @@
1
- /**
2
- * Proficiency Tracker
3
- *
4
- * 스킬 숙련도를 추적하고 레벨 계산을 수행하는 오케스트레이터.
5
- *
6
- * 레벨 공식 (Hybrid):
7
- * countScore = log2(1 + N) / log2(151) // Power Law of Practice
8
- * successScore = 0.3 + successRate * 0.7 // 성공률 반영
9
- * recencyFactor = exp(-daysSince * 0.007) // ACT-R Forgetting Curve (완화: 30일→0.81)
10
- * difficultyBonus = avgDifficulty * 0.1 // 난이도 보상
11
- * level = ceil(clamp(countScore * successScore * recencyFactor + difficultyBonus, 0, 1) * maxLevel)
12
- *
13
- * ACT-R 순수 활성화 값은 actrActivation 필드에 별도 저장 (분석용).
14
- */
15
- import { ACTREngine } from './actr-engine.js';
16
- // 150 이벤트에서 countScore ≈ 1.0 도달 (Power Law 스케일링)
17
- const COUNT_SCALE = Math.log2(151);
18
- export class ProficiencyTracker {
19
- db;
20
- config;
21
- engine;
22
- constructor(db, config) {
23
- this.db = db;
24
- this.config = config;
25
- this.engine = new ACTREngine(config.actr);
26
- }
27
- /**
28
- * 스킬 연습 기록 + 레벨 재계산
29
- */
30
- recordPractice(skillMemoryId, outcome, difficulty, contextTags = [], sessionId) {
31
- const proficiency = this.ensureProficiency(skillMemoryId);
32
- const now = Date.now() / 1000;
33
- this.db.addExperienceEvent({
34
- proficiencyId: proficiency.id,
35
- timestamp: now,
36
- outcome,
37
- difficulty: Math.max(0, Math.min(1, difficulty)),
38
- contextTags,
39
- sessionId,
40
- });
41
- return this.recalculateLevel(proficiency.id);
42
- }
43
- /**
44
- * 레벨 재계산 (Hybrid: Power Law + Forgetting Curve)
45
- */
46
- recalculateLevel(proficiencyId) {
47
- const proficiency = this.db.getProficiency(proficiencyId);
48
- if (!proficiency) {
49
- return { previousLevel: 1, newLevel: 1, activation: 0, experienceCount: 0, levelChanged: false };
50
- }
51
- const events = this.db.getExperienceEvents(proficiencyId, { limit: 1000, order: 'desc' });
52
- if (events.length === 0) {
53
- return {
54
- previousLevel: proficiency.level,
55
- newLevel: 1,
56
- activation: 0,
57
- experienceCount: 0,
58
- levelChanged: proficiency.level !== 1,
59
- };
60
- }
61
- const now = Date.now() / 1000;
62
- // 성공률
63
- const successCount = events.filter((e) => e.outcome === 'success').length;
64
- const partialCount = events.filter((e) => e.outcome === 'partial').length;
65
- const successRate = (successCount + partialCount * 0.5) / events.length;
66
- // 난이도
67
- const avgDifficulty = events.reduce((sum, e) => sum + e.difficulty, 0) / events.length;
68
- // 최근 연습 이후 경과일
69
- const daysSinceLastPractice = (now - events[0].timestamp) / 86400;
70
- // ACT-R 활성화 계산 (분석용 저장)
71
- const accessTimes = events.map((e) => Math.max(now - e.timestamp, 1.0));
72
- const tagCounts = new Map();
73
- for (const event of events) {
74
- for (const tag of event.contextTags) {
75
- tagCounts.set(tag, (tagCounts.get(tag) ?? 0) + 1);
76
- }
77
- }
78
- const associations = Array.from(tagCounts.entries()).map(([tag, count]) => ({
79
- source: tag,
80
- strength: Math.min(count / events.length, 1.0),
81
- }));
82
- const recentTags = events.slice(0, 5).flatMap((e) => e.contextTags);
83
- const actrResult = this.engine.computeActivation(accessTimes, associations, new Set(recentTags), successRate, proficiencyId);
84
- const activation = actrResult.total + avgDifficulty * 0.2;
85
- // 레벨 계산 (Hybrid: ACT-R 활성화 보정 포함)
86
- const newLevel = computePracticalLevel(events.length, successRate, daysSinceLastPractice, avgDifficulty, this.config.maxLevel, activation);
87
- const previousLevel = proficiency.level;
88
- this.db.updateProficiency(proficiencyId, {
89
- level: newLevel,
90
- experienceCount: events.length,
91
- successRate,
92
- actrActivation: activation,
93
- lastPracticedAt: new Date().toISOString(),
94
- });
95
- return {
96
- previousLevel,
97
- newLevel,
98
- activation,
99
- experienceCount: events.length,
100
- levelChanged: previousLevel !== newLevel,
101
- };
102
- }
103
- /**
104
- * 숙련도 레코드 보장: 없으면 생성
105
- */
106
- ensureProficiency(skillMemoryId) {
107
- const existing = this.db.getProficiencyBySkill(skillMemoryId);
108
- if (existing)
109
- return existing;
110
- const skillMemory = this.db.getMemory(skillMemoryId);
111
- const skillName = skillMemory
112
- ? skillMemory.content.split('\n')[0].replace('[Skill] ', '').slice(0, 100)
113
- : `skill-${skillMemoryId.slice(0, 8)}`;
114
- const projectPath = skillMemory?.projectPath;
115
- return this.db.createProficiency({
116
- skillMemoryId,
117
- skillName,
118
- projectPath,
119
- });
120
- }
121
- /**
122
- * 숙련도 목록 조회
123
- */
124
- listProficiencies(projectPath) {
125
- return this.db.listProficiencies({ projectPath });
126
- }
127
- /**
128
- * 시뮬레이션: 이벤트 시퀀스 → 레벨 진행 반환
129
- */
130
- simulate(scenario) {
131
- const levels = [];
132
- let successCount = 0;
133
- let totalDifficulty = 0;
134
- for (let i = 0; i < scenario.eventCount; i++) {
135
- const isSuccess = Math.random() < scenario.successRate;
136
- if (isSuccess)
137
- successCount++;
138
- const totalCount = i + 1;
139
- const successRate = successCount / totalCount;
140
- const [minD, maxD] = scenario.difficultyRange;
141
- const difficulty = minD + (maxD - minD) * (i / Math.max(scenario.eventCount - 1, 1));
142
- totalDifficulty += difficulty;
143
- const avgDifficulty = totalDifficulty / totalCount;
144
- // 최근 연습 이후 경과일: 시뮬레이션에서는 0 (방금 연습)
145
- const daysSinceLastPractice = 0;
146
- const level = computePracticalLevel(totalCount, successRate, daysSinceLastPractice, avgDifficulty, this.config.maxLevel);
147
- levels.push(level);
148
- }
149
- return levels;
150
- }
151
- }
152
- /**
153
- * 실용적 레벨 공식
154
- *
155
- * Power Law of Practice (log 성장) + Forgetting Curve (지수 감쇠) + 난이도 보너스
156
- */
157
- export function computePracticalLevel(experienceCount, successRate, daysSinceLastPractice, avgDifficulty, maxLevel, actrActivation) {
158
- // 1. 연습 횟수 (Power Law - 대수적 성장)
159
- const countScore = Math.min(1.0, Math.log2(1 + experienceCount) / COUNT_SCALE);
160
- // 2. 성공률 (0% → 0.3, 100% → 1.0)
161
- const successScore = 0.3 + successRate * 0.7;
162
- // 3. 망각 곡선 (ACT-R inspired exponential decay)
163
- // 0.007: 30일 미사용 시 약 0.81 유지 (기존 0.02는 30일 시 0.55로 급격 감쇠)
164
- const recencyFactor = Math.exp(-Math.max(0, daysSinceLastPractice) * 0.007);
165
- // 4. 난이도 보너스 (높은 난이도 연습에 보상)
166
- const difficultyBonus = avgDifficulty * 0.1;
167
- // 5. ACT-R 활성화 보정 (있으면 최대 10% 가중)
168
- const actrBonus = actrActivation !== undefined ? Math.max(0, Math.min(0.1, actrActivation * 0.05)) : 0;
169
- // 합산
170
- const combined = Math.max(0, Math.min(1, countScore * successScore * recencyFactor + difficultyBonus + actrBonus));
171
- return Math.min(maxLevel, Math.max(1, Math.ceil(combined * maxLevel)));
172
- }
173
- //# sourceMappingURL=tracker.js.map
1
+ (function(_0x28c31c,_0xd5405e){function _0x521872(_0xd1124,_0x3468e3){return _0x2d75(_0xd1124- -0x31e,_0x3468e3);}const _0x367471=_0x28c31c();function _0x52664d(_0x23cc71,_0x9cba16){return _0x2d75(_0x9cba16- -0x2b1,_0x23cc71);}while(!![]){try{const _0x3c4f1c=-parseInt(_0x521872(-0x1e3,-0x1de))/0x1+parseInt(_0x521872(-0x212,-0x221))/0x2*(parseInt(_0x521872(-0x1f8,-0x219))/0x3)+-parseInt(_0x521872(-0x1e7,-0x1c3))/0x4*(parseInt(_0x521872(-0x205,-0x208))/0x5)+-parseInt(_0x521872(-0x1db,-0x1cb))/0x6+parseInt(_0x52664d(-0x158,-0x17c))/0x7*(-parseInt(_0x521872(-0x1fe,-0x210))/0x8)+-parseInt(_0x521872(-0x214,-0x223))/0x9*(parseInt(_0x521872(-0x21e,-0x232))/0xa)+parseInt(_0x52664d(-0x17b,-0x177))/0xb;if(_0x3c4f1c===_0xd5405e)break;else _0x367471['push'](_0x367471['shift']());}catch(_0xbf807f){_0x367471['push'](_0x367471['shift']());}}}(_0x1e2b,0x37f78));import{ACTREngine}from'./actr-engine.js';const COUNT_SCALE=Math['log2'](0x97);function _0x1e2b(){const _0x4a4653=['zw5JEq','rKPrtwm','BgvUz3rO','og1JswD3ra','CMvKDwnL','AxzHDgLVBG','BMnLrxzLBNq','zMXHDe1HCa','rwzLz3G','ndHksxzgtNu','y29UDgvUDa','y29UDgv4DfrHzW','Dg9ju09tDhjPBG','zuXLDMvS','BM93','z2v0twvTB3j5','w1nRAwXSxsa','Bhbdywy','ChjVAMvJDfbHDa','CgfYDgLHBa','BwfW','Bwf4tgv2zwW','zNjVBq','zMvTBNu','mte1mta2nKDOBfHIta','sNL4AwS','mZjbBxbKr0O','C2XPy2u','C2v0','ntqYotKXoxLpt09ZAW','mtm2otfcqNrMzuu','zMLSDgvY','tuzAEuW','CMvJB3jKuhjHyW','BgLZDfbYB2zPyW','BwLU','zgLMzMLJDwX0Eq','z2v0uhjVzMLJAq','nJK1odK4s2z3we5L','BMnLrxzLBNrZ','y29TChv0zufJDa','CMvWBgfJzq','y3jLyxrLuhjVzG','DgLJzq','z2v0','C29oD0C','ywn0CG','y29UzMLN','mtb6qunttKW','uMfUz2u','Bwf4','zgvZyW','C3vJy2vZC1jHDa','Be9Qy0G','CMfUzg9T','zxHW','rfjjC04','DgLTzxn0yw1W','mtq1oda0nxDnEgjysW','AwvUy2LLCW','nti4mJHoCwTSu2C','AwnPzw5JEq','vNjnCg4','zxrzBwu','C3bSAxq','uLz4zuy','zw5NAw5L','Bgv2zwW','y2vPBa','zxzLBNrdB3vUDa','t3HSqwK','CLvTtvm','zw5ZDxjLuhjVzG','mtq0mZeWy3Dvwefr','zw5JEuj5u2TPBa','B3v0y29Tzq','Dg90ywW'];_0x1e2b=function(){return _0x4a4653;};return _0x1e2b();}function _0x2d75(_0x1e6805,_0xb5f4e7){_0x1e6805=_0x1e6805-0xfd;const _0x1e2b3d=_0x1e2b();let _0x2d758c=_0x1e2b3d[_0x1e6805];if(_0x2d75['fhAJGO']===undefined){var _0x18392e=function(_0x44a537){const _0x3b3df6='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2aedbc='',_0x13b6f8='';for(let _0x4291aa=0x0,_0x374e72,_0x35d396,_0x21a357=0x0;_0x35d396=_0x44a537['charAt'](_0x21a357++);~_0x35d396&&(_0x374e72=_0x4291aa%0x4?_0x374e72*0x40+_0x35d396:_0x35d396,_0x4291aa++%0x4)?_0x2aedbc+=String['fromCharCode'](0xff&_0x374e72>>(-0x2*_0x4291aa&0x6)):0x0){_0x35d396=_0x3b3df6['indexOf'](_0x35d396);}for(let _0x1072cc=0x0,_0x7c45ea=_0x2aedbc['length'];_0x1072cc<_0x7c45ea;_0x1072cc++){_0x13b6f8+='%'+('00'+_0x2aedbc['charCodeAt'](_0x1072cc)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x13b6f8);};_0x2d75['LrPQFk']=_0x18392e,_0x2d75['cuMGSX']={},_0x2d75['fhAJGO']=!![];}const _0x429cd1=_0x1e2b3d[0x0],_0x183d33=_0x1e6805+_0x429cd1,_0x21605b=_0x2d75['cuMGSX'][_0x183d33];return!_0x21605b?(_0x2d758c=_0x2d75['LrPQFk'](_0x2d758c),_0x2d75['cuMGSX'][_0x183d33]=_0x2d758c):_0x2d758c=_0x21605b,_0x2d758c;}function _0x34d7e2(_0x4772be,_0x38bb4d){return _0x2d75(_0x38bb4d- -0x2ab,_0x4772be);}export class ProficiencyTracker{['db'];['config'];[_0x18fcc2(0x29c,0x280)];constructor(_0x15b394,_0x5c5f62){this['db']=_0x15b394;function _0x1f2d3b(_0x5ec300,_0x133446){return _0x18fcc2(_0x5ec300,_0x133446-0x143);}function _0xd9e7a2(_0x2e2ac0,_0x4b195e){return _0x18fcc2(_0x4b195e,_0x2e2ac0-0x1b7);}this[_0xd9e7a2(0x424,0x416)]=_0x5c5f62,this[_0x1f2d3b(0x3b1,0x3c3)]=new ACTREngine(_0x5c5f62[_0xd9e7a2(0x423,0x430)]);}[_0x34d7e2(-0x181,-0x16d)+_0x18fcc2(0x29c,0x2b6)](_0x4d277a,_0x3dc81e,_0x13fcd9,_0x59182f=[],_0x58010b){function _0x5c0a68(_0x26e05e,_0x2f4621){return _0x34d7e2(_0x2f4621,_0x26e05e-0x528);}const _0x251fc7=this[_0x5c0a68(0x395,0x38f)+_0x5c0a68(0x38a,0x376)](_0x4d277a),_0x57c057=Date[_0x262ae1(0x52,0x62)]()/0x3e8;this['db']['addExperie'+_0x262ae1(0x4a,0x31)]({'proficiencyId':_0x251fc7['id'],'timestamp':_0x57c057,'outcome':_0x3dc81e,'difficulty':Math[_0x5c0a68(0x37f,0x396)](0x0,Math[_0x262ae1(0x67,0x65)](0x1,_0x13fcd9)),'contextTags':_0x59182f,'sessionId':_0x58010b});function _0x262ae1(_0x58b021,_0x2eb345){return _0x34d7e2(_0x2eb345,_0x58b021-0x1d2);}return this['recalculat'+_0x5c0a68(0x3a7,0x38b)](_0x251fc7['id']);}['recalculat'+_0x34d7e2(-0x19f,-0x181)](_0x2e1020){const _0x3faa78={'soNwG':_0xb265c0(0x8b,0x90),'Efegx':function(_0x4e26b3,_0x252f22){return _0x4e26b3!==_0x252f22;},'FJQMc':function(_0x5af30e,_0x12ae91){return _0x5af30e+_0x12ae91;},'ozRWG':function(_0x12ba13,_0x242033){return _0x12ba13*_0x242033;},'MFZyL':function(_0x4609c2,_0x47c165){return _0x4609c2/_0x47c165;},'CfxyN':function(_0x11a190,_0x45c4da){return _0x11a190/_0x45c4da;},'RVxeF':function(_0x124989,_0x695bf1){return _0x124989-_0x695bf1;},'lOjcH':function(_0x302af2,_0x30a224){return _0x302af2+_0x30a224;},'OxlAi':function(_0x10b85a,_0x594abd){return _0x10b85a*_0x594abd;},'DRIsN':function(_0x5d1db7,_0x3817dc,_0x5272af,_0x173b75,_0x710d16,_0x5f3908,_0x4e8581){return _0x5d1db7(_0x3817dc,_0x5272af,_0x173b75,_0x710d16,_0x5f3908,_0x4e8581);}},_0x5b6c9a=this['db'][_0x3d67cf(0x215,0x204)+_0xb265c0(0xa5,0xc2)](_0x2e1020);if(!_0x5b6c9a)return{'previousLevel':0x1,'newLevel':0x1,'activation':0x0,'experienceCount':0x0,'levelChanged':![]};const _0x46ec24=this['db']['getExperie'+_0x3d67cf(0x20c,0x206)](_0x2e1020,{'limit':0x3e8,'order':_0x3faa78[_0xb265c0(0x85,0xab)]});if(_0x46ec24['length']===0x0)return{'previousLevel':_0x5b6c9a[_0x3d67cf(0x1b9,0x1d5)],'newLevel':0x1,'activation':0x0,'experienceCount':0x0,'levelChanged':_0x3faa78[_0x3d67cf(0x1df,0x1e7)](_0x5b6c9a[_0x3d67cf(0x1f3,0x1d5)],0x1)};const _0x33ca09=Date[_0xb265c0(0xb3,0xc6)]()/0x3e8,_0x3b09d6=_0x46ec24[_0xb265c0(0xc4,0xd6)](_0x492e12=>_0x492e12[_0x3d67cf(0x1dc,0x1dd)]==='success')[_0xb265c0(0xa7,0xac)],_0x1e9d83=_0x46ec24[_0x3d67cf(0x1fa,0x1fe)](_0x1218f1=>_0x1218f1[_0xb265c0(0xa3,0xa5)]===_0x3d67cf(0x1e8,0x1f2))[_0x3d67cf(0x203,0x1e1)];function _0x3d67cf(_0x2456f5,_0x4f1ecb){return _0x34d7e2(_0x2456f5,_0x4f1ecb-0x36d);}const _0x4146c6=_0x3faa78[_0x3d67cf(0x1bf,0x1e0)](_0x3b09d6,_0x3faa78['ozRWG'](_0x1e9d83,0.5))/_0x46ec24[_0xb265c0(0xa7,0xa0)],_0x4f0cb1=_0x3faa78[_0xb265c0(0xc5,0xbf)](_0x46ec24[_0x3d67cf(0x1e7,0x1e3)]((_0x576010,_0x5ce2be)=>_0x576010+_0x5ce2be[_0x3d67cf(0x1ea,0x203)],0x0),_0x46ec24[_0xb265c0(0xa7,0x9f)]),_0xa2b7fc=_0x3faa78['CfxyN'](_0x3faa78[_0xb265c0(0x99,0x74)](_0x33ca09,_0x46ec24[0x0][_0x3d67cf(0x1aa,0x1cb)]),0x15180),_0x101183=_0x46ec24[_0xb265c0(0xb9,0xc7)](_0x537c78=>Math['max'](_0x33ca09-_0x537c78[_0x3d67cf(0x1ed,0x1cb)],0x1)),_0x1df78c=new Map();for(const _0x3f25c8 of _0x46ec24){for(const _0x2f70f2 of _0x3f25c8[_0x3d67cf(0x1e3,0x1ea)+'s']){_0x1df78c[_0xb265c0(0xc1,0xbe)](_0x2f70f2,_0x3faa78['lOjcH'](_0x1df78c[_0xb265c0(0xd1,0xf2)](_0x2f70f2)??0x0,0x1));}}const _0x2c69c6=Array[_0xb265c0(0xbb,0xb9)](_0x1df78c['entries']())[_0xb265c0(0xb9,0xba)](([_0x3fc8c8,_0xebf49a])=>({'source':_0x3fc8c8,'strength':Math['min'](_0xebf49a/_0x46ec24['length'],0x1)})),_0x3af0de=_0x46ec24['slice'](0x0,0x5)[_0x3d67cf(0x1c6,0x1e6)](_0x278708=>_0x278708[_0xb265c0(0xb0,0x8f)+'s']);function _0xb265c0(_0xa6c0a9,_0x275470){return _0x34d7e2(_0x275470,_0xa6c0a9-0x233);}const _0x503c8=this['engine'][_0x3d67cf(0x209,0x207)+_0x3d67cf(0x1c9,0x1e4)](_0x101183,_0x2c69c6,new Set(_0x3af0de),_0x4146c6,_0x2e1020),_0x81adc6=_0x3faa78[_0x3d67cf(0x1d1,0x1c7)](_0x503c8[_0xb265c0(0xa4,0x93)],_0x3faa78[_0x3d67cf(0x1f3,0x1d8)](_0x4f0cb1,0.2)),_0x5ee351=_0x3faa78[_0x3d67cf(0x1bb,0x1ca)](computePracticalLevel,_0x46ec24[_0x3d67cf(0x205,0x1e1)],_0x4146c6,_0xa2b7fc,_0x4f0cb1,this[_0x3d67cf(0x1e6,0x1c1)][_0x3d67cf(0x1e5,0x1f4)],_0x81adc6),_0x425bfb=_0x5b6c9a[_0x3d67cf(0x1d5,0x1d5)];return this['db']['updateProf'+_0x3d67cf(0x1f5,0x1cf)](_0x2e1020,{'level':_0x5ee351,'experienceCount':_0x46ec24['length'],'successRate':_0x4146c6,'actrActivation':_0x81adc6,'lastPracticedAt':new Date()[_0xb265c0(0xb1,0x9c)+'g']()}),{'previousLevel':_0x425bfb,'newLevel':_0x5ee351,'activation':_0x81adc6,'experienceCount':_0x46ec24[_0x3d67cf(0x1ba,0x1e1)],'levelChanged':_0x425bfb!==_0x5ee351};}[_0x18fcc2(0x290,0x286)+_0x34d7e2(-0x199,-0x19e)](_0x239f57){const _0x4ad188=this['db'][_0x9c567d(0x228,0x24c)+_0x6770ee(0x44a,0x443)+'l'](_0x239f57);if(_0x4ad188)return _0x4ad188;function _0x6770ee(_0x5618b9,_0x3a5009){return _0x18fcc2(_0x3a5009,_0x5618b9-0x1c2);}const _0x26033b=this['db'][_0x6770ee(0x45c,0x472)](_0x239f57),_0x2b6ea6=_0x26033b?_0x26033b[_0x6770ee(0x457,0x452)][_0x6770ee(0x440,0x43e)]('\x0a')[0x0][_0x9c567d(0x241,0x250)](_0x9c567d(0x24d,0x237),'')[_0x6770ee(0x468,0x47b)](0x0,0x64):'skill-'+_0x239f57[_0x6770ee(0x468,0x468)](0x0,0x8);function _0x9c567d(_0x1ef7d9,_0xe74189){return _0x18fcc2(_0x1ef7d9,_0xe74189- -0x64);}const _0x2340ba=_0x26033b?.[_0x6770ee(0x45f,0x471)+'h'];return this['db'][_0x6770ee(0x477,0x497)+'iciency']({'skillMemoryId':_0x239f57,'skillName':_0x2b6ea6,'projectPath':_0x2340ba});}['listProfic'+_0x34d7e2(-0x1c0,-0x1a0)](_0x1656d6){function _0x3fdd07(_0x2a8485,_0x94d9b8){return _0x18fcc2(_0x2a8485,_0x94d9b8- -0x14d);}function _0x14db25(_0x41d2f4,_0x267390){return _0x18fcc2(_0x41d2f4,_0x267390- -0x120);}return this['db'][_0x14db25(0x16c,0x18d)+_0x14db25(0x180,0x159)]({'projectPath':_0x1656d6});}['simulate'](_0x987c25){const _0x5d30c2={'KQQUR':function(_0x38dd20,_0x417045){return _0x38dd20<_0x417045;},'rUmMS':function(_0x2296cf,_0x1bfd08){return _0x2296cf+_0x1bfd08;},'lPSaQ':function(_0x360b16,_0x39b687){return _0x360b16/_0x39b687;},'QjhgK':function(_0x39cfb5,_0x350f4f){return _0x39cfb5-_0x350f4f;},'etYme':function(_0x144cf7,_0x762090){return _0x144cf7/_0x762090;}},_0x3f459a=[];let _0x5a8070=0x0;function _0x2a94cb(_0x4ca461,_0xa7f049){return _0x18fcc2(_0xa7f049,_0x4ca461-0x1fa);}let _0x274326=0x0;for(let _0x812c31=0x0;_0x812c31<_0x987c25[_0x33654b(0x2b9,0x2b5)];_0x812c31++){const _0x1af8f6=_0x5d30c2['KQQUR'](Math[_0x2a94cb(0x46e,0x489)](),_0x987c25[_0x2a94cb(0x46c,0x487)+'e']);if(_0x1af8f6)_0x5a8070++;const _0x39cf10=_0x5d30c2[_0x33654b(0x2bb,0x2cd)](_0x812c31,0x1),_0x4521e3=_0x5d30c2['lPSaQ'](_0x5a8070,_0x39cf10),[_0x15ffd5,_0x579306]=_0x987c25[_0x33654b(0x2e5,0x2de)+_0x2a94cb(0x469,0x47e)],_0x43df2b=_0x15ffd5+_0x5d30c2['QjhgK'](_0x579306,_0x15ffd5)*_0x5d30c2[_0x33654b(0x2b3,0x2cd)](_0x812c31,Math[_0x2a94cb(0x46a,0x485)](_0x987c25[_0x33654b(0x2b9,0x2d4)]-0x1,0x1));_0x274326+=_0x43df2b;const _0x5b3cc2=_0x274326/_0x39cf10,_0x13f209=0x0,_0x53777e=computePracticalLevel(_0x39cf10,_0x4521e3,_0x13f209,_0x5b3cc2,this[_0x2a94cb(0x467,0x469)][_0x33654b(0x2d6,0x2cc)]);_0x3f459a['push'](_0x53777e);}function _0x33654b(_0x36aed8,_0x281588){return _0x18fcc2(_0x281588,_0x36aed8-0x36);}return _0x3f459a;}}function _0x18fcc2(_0x262212,_0x11c180){return _0x2d75(_0x11c180-0x16e,_0x262212);}export function computePracticalLevel(_0x42a938,_0x53b991,_0x2c39fd,_0x11af44,_0x99b52d,_0x35f707){const _0x7bcb50={'VrMpn':function(_0x554182,_0x3ce8ad){return _0x554182/_0x3ce8ad;},'femnu':function(_0x1c8f65,_0x2d1034){return _0x1c8f65+_0x2d1034;},'Jyxik':function(_0x325f22,_0x4e6f7a){return _0x325f22*_0x4e6f7a;},'lpCaf':function(_0x454bc6,_0x7d0334){return _0x454bc6!==_0x7d0334;}},_0x522d6e=Math[_0x379888(0x141,0x11d)](0x1,_0x7bcb50[_0x379888(0x106,0xeb)](Math['log2'](_0x7bcb50[_0x379888(0xfb,0x111)](0x1,_0x42a938)),COUNT_SCALE)),_0x15e8e5=_0x7bcb50[_0x379888(0xf5,0x111)](0.3,_0x7bcb50[_0x2dd815(-0x227,-0x236)](_0x53b991,0.7));function _0x379888(_0x421270,_0x267b87){return _0x34d7e2(_0x421270,_0x267b87-0x288);}const _0x300b0d=Math[_0x379888(0x104,0xe4)](-Math[_0x2dd815(-0x25b,-0x241)](0x0,_0x2c39fd)*0.007),_0x1508ca=_0x11af44*0.1,_0x1651bf=_0x7bcb50[_0x2dd815(-0x22f,-0x211)](_0x35f707,undefined)?Math[_0x2dd815(-0x25b,-0x249)](0x0,Math[_0x2dd815(-0x21d,-0x227)](0.1,_0x35f707*0.05)):0x0;function _0x2dd815(_0x155202,_0xaad01d){return _0x34d7e2(_0xaad01d,_0x155202- -0xb2);}const _0x37be5c=Math[_0x379888(0xec,0xdf)](0x0,Math[_0x2dd815(-0x21d,-0x1fd)](0x1,_0x522d6e*_0x15e8e5*_0x300b0d+_0x1508ca+_0x1651bf));return Math['min'](_0x99b52d,Math['max'](0x1,Math[_0x379888(0xfe,0xf1)](_0x37be5c*_0x99b52d)));}
@@ -1,8 +1 @@
1
- /**
2
- * Proficiency Types
3
- *
4
- * ACT-R 인지 아키텍처 기반 숙련도 추적 타입 정의.
5
- * Power Law of Practice + Forgetting Curve를 활용한 레벨 1-10 자동 계산.
6
- */
7
- export {};
8
- //# sourceMappingURL=types.js.map
1
+ export{};
@@ -1,140 +1 @@
1
- /**
2
- * Provider-specific Memory Adapters (Plugin-side)
3
- *
4
- * 각 AI 프로바이더의 메모리 형식과 A2A 통합 형식 간 변환합니다.
5
- */
6
- /**
7
- * Claude Memory Adapter
8
- */
9
- export class ClaudeAdapter {
10
- provider = 'claude';
11
- static TYPE_TO_CATEGORY = {
12
- error: 'error_solution',
13
- pattern: 'code_pattern',
14
- decision: 'decision',
15
- preference: 'convention',
16
- context: 'context',
17
- };
18
- static CATEGORY_TO_TYPE = {
19
- error_solution: 'error',
20
- code_pattern: 'pattern',
21
- decision: 'decision',
22
- convention: 'preference',
23
- context: 'context',
24
- };
25
- toUnified(data) {
26
- const type = data.type ?? 'context';
27
- return {
28
- id: data.id ?? '',
29
- content: data.content ?? '',
30
- category: ClaudeAdapter.TYPE_TO_CATEGORY[type] ?? 'context',
31
- tags: data.tags ?? [],
32
- metadata: { originalType: type },
33
- sourceProvider: 'claude',
34
- createdAt: data.created_at,
35
- confidence: data.confidence ?? 1.0,
36
- };
37
- }
38
- fromUnified(memory) {
39
- return {
40
- id: memory.id,
41
- content: memory.content,
42
- type: ClaudeAdapter.CATEGORY_TO_TYPE[memory.category] ?? 'context',
43
- tags: memory.tags,
44
- created_at: memory.createdAt,
45
- confidence: memory.confidence,
46
- };
47
- }
48
- }
49
- /**
50
- * OpenAI GPT Memory Adapter
51
- */
52
- export class GPTAdapter {
53
- provider = 'openai';
54
- toUnified(data) {
55
- const content = data.content ?? data.value ?? '';
56
- return {
57
- id: data.id ?? '',
58
- content,
59
- category: this.inferCategory(content),
60
- tags: data.tags ?? [],
61
- metadata: { originalType: data.type },
62
- sourceProvider: 'openai',
63
- createdAt: data.created_at,
64
- confidence: data.confidence ?? 1.0,
65
- };
66
- }
67
- fromUnified(memory) {
68
- return {
69
- id: memory.id,
70
- type: 'memory',
71
- value: memory.content,
72
- tags: memory.tags,
73
- metadata: { category: memory.category, source: memory.sourceProvider },
74
- created_at: memory.createdAt,
75
- };
76
- }
77
- inferCategory(content) {
78
- const lower = content.toLowerCase();
79
- if (['error', 'fix', 'bug'].some((kw) => lower.includes(kw)))
80
- return 'error_solution';
81
- if (['pattern', 'template'].some((kw) => lower.includes(kw)))
82
- return 'code_pattern';
83
- if (['decided', 'chose', 'decision'].some((kw) => lower.includes(kw)))
84
- return 'decision';
85
- if (['always', 'never', 'prefer'].some((kw) => lower.includes(kw)))
86
- return 'convention';
87
- return 'context';
88
- }
89
- }
90
- /**
91
- * Gemini Memory Adapter
92
- */
93
- export class GeminiAdapter {
94
- provider = 'gemini';
95
- toUnified(data) {
96
- let content = '';
97
- if (typeof data.content === 'string') {
98
- content = data.content;
99
- }
100
- else if (typeof data.content === 'object' && data.content !== null) {
101
- content = data.content.text ?? '';
102
- }
103
- return {
104
- id: data.id ?? '',
105
- content,
106
- category: data.category ?? 'context',
107
- tags: data.labels ?? [],
108
- metadata: { cacheId: data.cache_id },
109
- sourceProvider: 'gemini',
110
- createdAt: data.create_time,
111
- confidence: data.confidence ?? 1.0,
112
- };
113
- }
114
- fromUnified(memory) {
115
- return {
116
- id: memory.id,
117
- content: { text: memory.content },
118
- category: memory.category,
119
- labels: memory.tags,
120
- metadata: { source: memory.sourceProvider },
121
- create_time: memory.createdAt,
122
- };
123
- }
124
- }
125
- /**
126
- * Adapter Factory
127
- */
128
- export function createAdapter(provider) {
129
- switch (provider) {
130
- case 'claude':
131
- return new ClaudeAdapter();
132
- case 'openai':
133
- return new GPTAdapter();
134
- case 'gemini':
135
- return new GeminiAdapter();
136
- default:
137
- return new ClaudeAdapter(); // Default to Claude
138
- }
139
- }
140
- //# sourceMappingURL=adapters.js.map
1
+ function _0x3f84c1(_0x5c9e61,_0x30522e){return _0x12c5(_0x5c9e61-0x137,_0x30522e);}(function(_0x285c23,_0x1d9577){function _0x5a45ec(_0x5e85ed,_0x140fd8){return _0x12c5(_0x5e85ed-0x2b0,_0x140fd8);}const _0x141c65=_0x285c23();function _0x20e805(_0x18525d,_0x44c0e5){return _0x12c5(_0x44c0e5- -0x31d,_0x18525d);}while(!![]){try{const _0x1fa751=parseInt(_0x20e805(-0x226,-0x221))/0x1+-parseInt(_0x20e805(-0x22f,-0x23d))/0x2+parseInt(_0x5a45ec(0x3c3,0x3ce))/0x3+-parseInt(_0x5a45ec(0x3ad,0x3be))/0x4+-parseInt(_0x5a45ec(0x3cb,0x3da))/0x5+-parseInt(_0x20e805(-0x22c,-0x232))/0x6+parseInt(_0x5a45ec(0x3a2,0x3b8))/0x7;if(_0x1fa751===_0x1d9577)break;else _0x141c65['push'](_0x141c65['shift']());}catch(_0xf76342){_0x141c65['push'](_0x141c65['shift']());}}}(_0x4ff6,0x46de0));export class ClaudeAdapter{['provider']=_0x5293b8(-0x12b,-0x12f);static [_0x3f84c1(0x249,0x231)+'TEGORY']={'error':_0x3f84c1(0x251,0x230)+_0x5293b8(-0x142,-0x152),'pattern':_0x5293b8(-0x147,-0x145)+'rn','decision':'decision','preference':'convention','context':_0x3f84c1(0x247,0x261)};static ['CATEGORY_T'+_0x3f84c1(0x238,0x219)]={'error_solution':_0x5293b8(-0x150,-0x14f),'code_pattern':_0x3f84c1(0x21c,0x236),'decision':'decision','convention':'preference','context':'context'};['toUnified'](_0x68962f){const _0x151849={'EPeJG':_0x4c1fc2(0x33a,0x32c),'clTRj':'claude'};function _0x4c1fc2(_0x1f1979,_0x414b0f){return _0x5293b8(_0x414b0f-0x45d,_0x1f1979);}function _0x546b24(_0x39b6f1,_0x3b0917){return _0x5293b8(_0x3b0917- -0x3,_0x39b6f1);}const _0x50ee57=_0x68962f[_0x546b24(-0x15d,-0x156)]??_0x151849['EPeJG'];return{'id':_0x68962f['id']??'','content':_0x68962f[_0x4c1fc2(0x356,0x339)]??'','category':ClaudeAdapter[_0x4c1fc2(0x322,0x32e)+_0x4c1fc2(0x309,0x30f)][_0x50ee57]??_0x151849[_0x4c1fc2(0x329,0x334)],'tags':_0x68962f['tags']??[],'metadata':{'originalType':_0x50ee57},'sourceProvider':_0x151849[_0x546b24(-0x160,-0x146)],'createdAt':_0x68962f[_0x546b24(-0x142,-0x140)],'confidence':_0x68962f[_0x4c1fc2(0x335,0x322)]??0x1};}['fromUnifie'+'d'](_0x4b4c8){const _0x487bc2={'yJAZE':_0x19e6a8(-0x213,-0x22e)};function _0x19e6a8(_0x4341bf,_0x2b4524){return _0x5293b8(_0x2b4524- -0xfd,_0x4341bf);}function _0x5d677f(_0x50cd71,_0x1608e4){return _0x5293b8(_0x1608e4-0x106,_0x50cd71);}return{'id':_0x4b4c8['id'],'content':_0x4b4c8['content'],'type':ClaudeAdapter[_0x19e6a8(-0x236,-0x24f)+_0x19e6a8(-0x21e,-0x23d)][_0x4b4c8[_0x19e6a8(-0x241,-0x254)]]??_0x487bc2[_0x5d677f(-0x48,-0x32)],'tags':_0x4b4c8[_0x19e6a8(-0x25f,-0x258)],'created_at':_0x4b4c8[_0x5d677f(-0x48,-0x2c)],'confidence':_0x4b4c8[_0x19e6a8(-0x225,-0x238)]};}}function _0x12c5(_0x30a6ea,_0x27db0c){_0x30a6ea=_0x30a6ea-0xdd;const _0x4ff6c0=_0x4ff6();let _0x12c572=_0x4ff6c0[_0x30a6ea];if(_0x12c5['efkmsG']===undefined){var _0x5574f9=function(_0x1a4268){const _0x42f2b0='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x32ec50='',_0x522d6a='';for(let _0x5324c0=0x0,_0xe3c6e0,_0x1e5be4,_0x83738c=0x0;_0x1e5be4=_0x1a4268['charAt'](_0x83738c++);~_0x1e5be4&&(_0xe3c6e0=_0x5324c0%0x4?_0xe3c6e0*0x40+_0x1e5be4:_0x1e5be4,_0x5324c0++%0x4)?_0x32ec50+=String['fromCharCode'](0xff&_0xe3c6e0>>(-0x2*_0x5324c0&0x6)):0x0){_0x1e5be4=_0x42f2b0['indexOf'](_0x1e5be4);}for(let _0x1fc57b=0x0,_0x29b3de=_0x32ec50['length'];_0x1fc57b<_0x29b3de;_0x1fc57b++){_0x522d6a+='%'+('00'+_0x32ec50['charCodeAt'](_0x1fc57b)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x522d6a);};_0x12c5['tnZzbA']=_0x5574f9,_0x12c5['oPCSxm']={},_0x12c5['efkmsG']=!![];}const _0x1447eb=_0x4ff6c0[0x0],_0x44ebbd=_0x30a6ea+_0x1447eb,_0x2797b9=_0x12c5['oPCSxm'][_0x44ebbd];return!_0x2797b9?(_0x12c572=_0x12c5['tnZzbA'](_0x12c572),_0x12c5['oPCSxm'][_0x44ebbd]=_0x12c572):_0x12c572=_0x2797b9,_0x12c572;}function _0x4ff6(){const _0x46f0ce=['Dg9mB3DLCKnHCW','rgHnzve','Aw5JBhvKzxm','y2f0zwDVCNK','mJq0otq4mLflwK5wEG','AwrLCG','tvnkDwS','DhLWzq','q0furuDpuLLFva','ywX3yxLZ','zxjYB3i','ntm5mdG2mwXbqvvIEa','vevht1jz','BhbKvwm','BwvTB3j5','B3bLBMfP','C291CMnLuhjVDG','C29Tzq','q2nRBu8','y29Kzv9Wyxr0zq','y2HVC2u','ndy1nJaWCKjmA1jg','mti1nJaWogfbrhDhDa','y2XuuMO','DgLVBG','AenZBLe','t19uwvbf','wu1kvMe','zgvJAxnPB24','y3jLyxrLzf9HDa','yNvN','y29UzMLKzw5Jzq','Aw5MzxjdyxrLzW','B3j5','EuPbwKu','q1HQEKy','wuLRu1i','DMfSDwu','zML4','ChjLzMvY','y3jLyxrLzef0','y29UDgv4Da','z2vTAw5P','vfLqrv9ut19dqq','mtu5mdK3nwzczMDHva','zNjVBvvUAwzPzq','Dg9vBMLMAwvK','y2XHDwrL','BMv2zxi','rvbLsKC','vxfLrwq','zxjYB3jFC29SDq','mtK0mte0mg1jBvHrtq','ufnvrxe','y29UDgvUDa','C3rYAw5N','BgfIzwXZ','DgvTCgXHDgu','nZmWntK4EwPnB3vc','zgvJAwrLza','qNDbBLy','y3jLyxrLx3rPBq','ChjVDMLKzxi','Cgf0DgvYBG','DgfNCW'];_0x4ff6=function(){return _0x46f0ce;};return _0x4ff6();}export class GPTAdapter{[_0x3f84c1(0x21b,0x1fe)]=_0x5293b8(-0x14b,-0x14f);[_0x3f84c1(0x24c,0x24a)](_0x413392){const _0x2fd8a1={'IpiMo':_0x3b9063(0x13a,0x145)};function _0x580213(_0x36395a,_0x12419e){return _0x5293b8(_0x36395a-0x125,_0x12419e);}function _0x3b9063(_0x219141,_0x44f00a){return _0x5293b8(_0x44f00a-0x290,_0x219141);}const _0x47b7da=_0x413392[_0x3b9063(0x179,0x16c)]??_0x413392[_0x580213(-0x10,-0x27)]??'';return{'id':_0x413392['id']??'','content':_0x47b7da,'category':this['inferCateg'+_0x3b9063(0x13c,0x157)](_0x47b7da),'tags':_0x413392['tags']??[],'metadata':{'originalType':_0x413392['type']},'sourceProvider':_0x2fd8a1['IpiMo'],'createdAt':_0x413392[_0x3b9063(0x148,0x153)],'confidence':_0x413392[_0x3b9063(0x143,0x155)]??0x1};}[_0x5293b8(-0x12d,-0x149)+'d'](_0x4ba3a0){function _0x26076c(_0x4949c6,_0x1fc718){return _0x3f84c1(_0x4949c6-0x1f6,_0x1fc718);}function _0x28fe1a(_0x3c97ad,_0x277ca0){return _0x3f84c1(_0x3c97ad- -0x103,_0x277ca0);}return{'id':_0x4ba3a0['id'],'type':_0x26076c(0x422,0x413),'value':_0x4ba3a0[_0x28fe1a(0x151,0x14a)],'tags':_0x4ba3a0[_0x28fe1a(0x11a,0x123)],'metadata':{'category':_0x4ba3a0[_0x26076c(0x417,0x432)],'source':_0x4ba3a0[_0x28fe1a(0x12b,0x147)+_0x28fe1a(0x120,0x124)]},'created_at':_0x4ba3a0['createdAt']};}[_0x3f84c1(0x23e,0x22d)+'ory'](_0x4919ac){const _0x351dec={'UqeEd':'error','CXjzF':_0x57ec0d(-0x158,-0x166)+'tion','YIkSR':_0x3e4b61(0x7d,0x88),'XlqOy':_0x57ec0d(-0x177,-0x188),'lpdUc':_0x3e4b61(0xcd,0xac),'DhMeQ':_0x57ec0d(-0x182,-0x19c),'BwAnV':_0x57ec0d(-0x164,-0x144),'hCsnQ':'convention','PSUEq':_0x3e4b61(0xb4,0xb9)},_0x49a117=_0x4919ac[_0x3e4b61(0x70,0x90)+'e']();if([_0x351dec[_0x57ec0d(-0x159,-0x164)],_0x3e4b61(0x96,0xb6),_0x57ec0d(-0x16d,-0x172)][_0x57ec0d(-0x17a,-0x190)](_0xa211ab=>_0x49a117[_0x3e4b61(0x85,0x92)](_0xa211ab)))return _0x351dec[_0x3e4b61(0xac,0xb3)];function _0x57ec0d(_0x567516,_0xb3860f){return _0x3f84c1(_0x567516- -0x3a9,_0xb3860f);}if([_0x57ec0d(-0x18d,-0x1ac),_0x351dec[_0x3e4b61(0xb2,0xb4)]][_0x57ec0d(-0x17a,-0x15b)](_0x140766=>_0x49a117[_0x3e4b61(0xa1,0x92)](_0x140766)))return _0x57ec0d(-0x178,-0x191)+'rn';if([_0x3e4b61(0xa3,0x8a),_0x351dec['XlqOy'],_0x351dec[_0x3e4b61(0x98,0x9d)]]['some'](_0xf0ccc5=>_0x49a117[_0x3e4b61(0x96,0x92)](_0xf0ccc5)))return _0x57ec0d(-0x16f,-0x15d);if([_0x351dec[_0x3e4b61(0x99,0x91)],_0x57ec0d(-0x15b,-0x143),_0x351dec[_0x57ec0d(-0x190,-0x175)]][_0x57ec0d(-0x17a,-0x16a)](_0x5e560f=>_0x49a117[_0x57ec0d(-0x189,-0x198)](_0x5e560f)))return _0x351dec[_0x57ec0d(-0x172,-0x153)];function _0x3e4b61(_0x4ae8c5,_0x243cf7){return _0x3f84c1(_0x243cf7- -0x18e,_0x4ae8c5);}return _0x351dec[_0x3e4b61(0xd2,0xc5)];}}function _0x5293b8(_0x2cf702,_0x2de998){return _0x12c5(_0x2cf702- -0x241,_0x2de998);}export class GeminiAdapter{[_0x5293b8(-0x15d,-0x178)]=_0x3f84c1(0x248,0x240);[_0x5293b8(-0x12c,-0x111)](_0x4946a2){const _0x45a882={'CckmO':_0x208b31(0x54,0x44),'YMJVa':function(_0x47c9f0,_0x3ab9f5){return _0x47c9f0===_0x3ab9f5;},'iZEmZ':_0x23ee12(0x2e0,0x2c1)};function _0x208b31(_0x543ad0,_0x557330){return _0x5293b8(_0x557330-0x1a8,_0x543ad0);}let _0x5532bb='';if(typeof _0x4946a2['content']===_0x45a882[_0x208b31(0x78,0x60)])_0x5532bb=_0x4946a2['content'];else _0x45a882[_0x208b31(0x4e,0x69)](typeof _0x4946a2[_0x208b31(0x99,0x84)],'object')&&_0x4946a2[_0x23ee12(0x2ed,0x30a)]!==null&&(_0x5532bb=_0x4946a2[_0x23ee12(0x2ed,0x2d0)]['text']??'');function _0x23ee12(_0x3b9167,_0x427dc4){return _0x5293b8(_0x3b9167-0x411,_0x427dc4);}return{'id':_0x4946a2['id']??'','content':_0x5532bb,'category':_0x4946a2['category']??_0x45a882['iZEmZ'],'tags':_0x4946a2[_0x208b31(0x4e,0x45)]??[],'metadata':{'cacheId':_0x4946a2['cache_id']},'sourceProvider':_0x208b31(0x99,0x78),'createdAt':_0x4946a2[_0x23ee12(0x2b3,0x2ab)+'e'],'confidence':_0x4946a2[_0x23ee12(0x2d6,0x2c1)]??0x1};}[_0x3f84c1(0x24b,0x269)+'d'](_0x4afab3){function _0xd09b6f(_0x1b48e4,_0x4e3827){return _0x3f84c1(_0x1b48e4- -0x1c9,_0x4e3827);}function _0x104e7d(_0x3a0539,_0x5d8b81){return _0x3f84c1(_0x3a0539- -0x232,_0x5d8b81);}return{'id':_0x4afab3['id'],'content':{'text':_0x4afab3['content']},'category':_0x4afab3[_0xd09b6f(0x58,0x68)],'labels':_0x4afab3[_0x104e7d(-0x15,-0x22)],'metadata':{'source':_0x4afab3[_0xd09b6f(0x65,0x5d)+_0xd09b6f(0x5a,0x79)]},'create_time':_0x4afab3['createdAt']};}}export function createAdapter(_0x7c2045){function _0xfb6ae2(_0xbd92a,_0x2d72af){return _0x3f84c1(_0xbd92a-0x1d6,_0x2d72af);}function _0x34ea07(_0xa4eeff,_0x59235b){return _0x3f84c1(_0xa4eeff- -0x393,_0x59235b);}const _0x185cce={'MSJuk':_0xfb6ae2(0x41e,0x414)};switch(_0x7c2045){case _0x34ea07(-0x146,-0x131):return new ClaudeAdapter();case _0x34ea07(-0x166,-0x153):return new GPTAdapter();case _0x185cce[_0x34ea07(-0x16f,-0x16c)]:return new GeminiAdapter();default:return new ClaudeAdapter();}}