a2a-memory 0.11.4 → 0.11.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/LICENSE +7 -19
  2. package/README.md +1 -1
  3. package/dist/a2a/client.js +1 -252
  4. package/dist/a2a/discovery.js +1 -115
  5. package/dist/a2a/index.js +1 -8
  6. package/dist/a2a/types.js +1 -42
  7. package/dist/adapters/anthropic.js +1 -117
  8. package/dist/chunking/chunker.js +1 -163
  9. package/dist/claude/sync.js +1 -294
  10. package/dist/cli/commands/add.js +1 -80
  11. package/dist/cli/commands/claude-sync.js +1 -70
  12. package/dist/cli/commands/cleanup.js +1 -83
  13. package/dist/cli/commands/config.js +1 -73
  14. package/dist/cli/commands/edit.js +1 -69
  15. package/dist/cli/commands/embed.js +1 -92
  16. package/dist/cli/commands/extract.js +1 -103
  17. package/dist/cli/commands/health.js +1 -105
  18. package/dist/cli/commands/list.js +1 -49
  19. package/dist/cli/commands/migrate-chunks.js +1 -205
  20. package/dist/cli/commands/migrate-file-refs.js +1 -183
  21. package/dist/cli/commands/proficiency.js +1 -146
  22. package/dist/cli/commands/rm.js +1 -64
  23. package/dist/cli/commands/search.js +1 -89
  24. package/dist/cli/commands/setup-wizard.js +1 -387
  25. package/dist/cli/commands/setup.js +1 -170
  26. package/dist/cli/commands/skill.js +1 -151
  27. package/dist/cli/commands/status.js +1 -70
  28. package/dist/cli/commands/sync.js +1 -202
  29. package/dist/cli/commands/team.js +1 -142
  30. package/dist/cli/index.js +1 -87
  31. package/dist/config/manager.js +1 -372
  32. package/dist/db/database.d.ts +10 -1
  33. package/dist/db/database.js +1 -1367
  34. package/dist/embedding/e5-provider.js +1 -147
  35. package/dist/embedding/index.js +1 -34
  36. package/dist/embedding/local-provider.js +1 -157
  37. package/dist/embedding/openai-provider.js +1 -92
  38. package/dist/embedding/quantization.js +1 -89
  39. package/dist/extraction/dedup-manager.js +1 -161
  40. package/dist/extraction/emotion-filter.js +1 -33
  41. package/dist/extraction/extractor.js +1 -642
  42. package/dist/extraction/file-reference.js +1 -77
  43. package/dist/extraction/filter.js +1 -85
  44. package/dist/extraction/scorer.js +1 -142
  45. package/dist/extraction/similarity.js +1 -85
  46. package/dist/hooks/client-factory.js +1 -44
  47. package/dist/hooks/post-tool-use.js +1 -470
  48. package/dist/hooks/pre-compact.js +1 -209
  49. package/dist/hooks/session-end.d.ts +1 -0
  50. package/dist/hooks/session-end.js +1 -623
  51. package/dist/hooks/session-start.js +1 -549
  52. package/dist/hooks/shared.js +1 -110
  53. package/dist/hooks/user-prompt-submit.js +1 -316
  54. package/dist/i18n/index.js +1 -2
  55. package/dist/i18n/messages.js +1 -150
  56. package/dist/index.js +1 -43
  57. package/dist/lifecycle/cleanup-scheduler.js +1 -137
  58. package/dist/lifecycle/cleanup.js +1 -116
  59. package/dist/lifecycle/index.js +1 -13
  60. package/dist/lifecycle/quality-scorer.js +1 -46
  61. package/dist/lifecycle/tiering.js +1 -246
  62. package/dist/llm/client.js +1 -226
  63. package/dist/llm/index.js +1 -5
  64. package/dist/proficiency/actr-engine.js +1 -106
  65. package/dist/proficiency/detection.js +1 -77
  66. package/dist/proficiency/index.js +1 -9
  67. package/dist/proficiency/tracker.js +1 -173
  68. package/dist/proficiency/types.js +1 -8
  69. package/dist/providers/adapters.js +1 -140
  70. package/dist/providers/detector.js +1 -57
  71. package/dist/search/adaptive-router.js +1 -93
  72. package/dist/search/index.js +1 -9
  73. package/dist/search/ranker.js +1 -171
  74. package/dist/search/reranker.js +1 -155
  75. package/dist/session/parser.js +1 -130
  76. package/dist/skill/evaluator.js +1 -509
  77. package/dist/skill/index.js +1 -7
  78. package/dist/skill/types.js +1 -7
  79. package/dist/sync/client.d.ts +1 -0
  80. package/dist/sync/client.js +1 -597
  81. package/dist/sync/encryption.js +1 -203
  82. package/dist/sync/index.js +1 -12
  83. package/dist/sync/queue.js +1 -199
  84. package/dist/sync/scheduler.js +1 -140
  85. package/dist/sync/synchronizer.js +1 -241
  86. package/dist/sync/team-synchronizer.js +1 -204
  87. package/dist/sync/vector-clock.js +1 -70
  88. package/dist/types/index.d.ts +2 -1
  89. package/dist/types/index.js +1 -131
  90. package/dist/utils/keychain.js +1 -170
  91. package/dist/utils/logger.js +1 -128
  92. package/package.json +14 -10
  93. package/dist/a2a/client.d.ts.map +0 -1
  94. package/dist/a2a/client.js.map +0 -1
  95. package/dist/a2a/discovery.d.ts.map +0 -1
  96. package/dist/a2a/discovery.js.map +0 -1
  97. package/dist/a2a/index.d.ts.map +0 -1
  98. package/dist/a2a/index.js.map +0 -1
  99. package/dist/a2a/types.d.ts.map +0 -1
  100. package/dist/a2a/types.js.map +0 -1
  101. package/dist/adapters/anthropic.d.ts.map +0 -1
  102. package/dist/adapters/anthropic.js.map +0 -1
  103. package/dist/chunking/chunker.d.ts.map +0 -1
  104. package/dist/chunking/chunker.js.map +0 -1
  105. package/dist/claude/sync.d.ts.map +0 -1
  106. package/dist/claude/sync.js.map +0 -1
  107. package/dist/cli/commands/add.d.ts.map +0 -1
  108. package/dist/cli/commands/add.js.map +0 -1
  109. package/dist/cli/commands/claude-sync.d.ts.map +0 -1
  110. package/dist/cli/commands/claude-sync.js.map +0 -1
  111. package/dist/cli/commands/cleanup.d.ts.map +0 -1
  112. package/dist/cli/commands/cleanup.js.map +0 -1
  113. package/dist/cli/commands/config.d.ts.map +0 -1
  114. package/dist/cli/commands/config.js.map +0 -1
  115. package/dist/cli/commands/edit.d.ts.map +0 -1
  116. package/dist/cli/commands/edit.js.map +0 -1
  117. package/dist/cli/commands/embed.d.ts.map +0 -1
  118. package/dist/cli/commands/embed.js.map +0 -1
  119. package/dist/cli/commands/extract.d.ts.map +0 -1
  120. package/dist/cli/commands/extract.js.map +0 -1
  121. package/dist/cli/commands/health.d.ts.map +0 -1
  122. package/dist/cli/commands/health.js.map +0 -1
  123. package/dist/cli/commands/list.d.ts.map +0 -1
  124. package/dist/cli/commands/list.js.map +0 -1
  125. package/dist/cli/commands/migrate-chunks.d.ts.map +0 -1
  126. package/dist/cli/commands/migrate-chunks.js.map +0 -1
  127. package/dist/cli/commands/migrate-file-refs.d.ts.map +0 -1
  128. package/dist/cli/commands/migrate-file-refs.js.map +0 -1
  129. package/dist/cli/commands/proficiency.d.ts.map +0 -1
  130. package/dist/cli/commands/proficiency.js.map +0 -1
  131. package/dist/cli/commands/rm.d.ts.map +0 -1
  132. package/dist/cli/commands/rm.js.map +0 -1
  133. package/dist/cli/commands/search.d.ts.map +0 -1
  134. package/dist/cli/commands/search.js.map +0 -1
  135. package/dist/cli/commands/setup-wizard.d.ts.map +0 -1
  136. package/dist/cli/commands/setup-wizard.js.map +0 -1
  137. package/dist/cli/commands/setup.d.ts.map +0 -1
  138. package/dist/cli/commands/setup.js.map +0 -1
  139. package/dist/cli/commands/skill.d.ts.map +0 -1
  140. package/dist/cli/commands/skill.js.map +0 -1
  141. package/dist/cli/commands/status.d.ts.map +0 -1
  142. package/dist/cli/commands/status.js.map +0 -1
  143. package/dist/cli/commands/sync.d.ts.map +0 -1
  144. package/dist/cli/commands/sync.js.map +0 -1
  145. package/dist/cli/commands/team.d.ts.map +0 -1
  146. package/dist/cli/commands/team.js.map +0 -1
  147. package/dist/cli/index.d.ts.map +0 -1
  148. package/dist/cli/index.js.map +0 -1
  149. package/dist/config/manager.d.ts.map +0 -1
  150. package/dist/config/manager.js.map +0 -1
  151. package/dist/db/database.d.ts.map +0 -1
  152. package/dist/db/database.js.map +0 -1
  153. package/dist/embedding/e5-provider.d.ts.map +0 -1
  154. package/dist/embedding/e5-provider.js.map +0 -1
  155. package/dist/embedding/index.d.ts.map +0 -1
  156. package/dist/embedding/index.js.map +0 -1
  157. package/dist/embedding/local-provider.d.ts.map +0 -1
  158. package/dist/embedding/local-provider.js.map +0 -1
  159. package/dist/embedding/openai-provider.d.ts.map +0 -1
  160. package/dist/embedding/openai-provider.js.map +0 -1
  161. package/dist/embedding/quantization.d.ts.map +0 -1
  162. package/dist/embedding/quantization.js.map +0 -1
  163. package/dist/extraction/dedup-manager.d.ts.map +0 -1
  164. package/dist/extraction/dedup-manager.js.map +0 -1
  165. package/dist/extraction/emotion-filter.d.ts.map +0 -1
  166. package/dist/extraction/emotion-filter.js.map +0 -1
  167. package/dist/extraction/extractor.d.ts.map +0 -1
  168. package/dist/extraction/extractor.js.map +0 -1
  169. package/dist/extraction/file-reference.d.ts.map +0 -1
  170. package/dist/extraction/file-reference.js.map +0 -1
  171. package/dist/extraction/filter.d.ts.map +0 -1
  172. package/dist/extraction/filter.js.map +0 -1
  173. package/dist/extraction/scorer.d.ts.map +0 -1
  174. package/dist/extraction/scorer.js.map +0 -1
  175. package/dist/extraction/similarity.d.ts.map +0 -1
  176. package/dist/extraction/similarity.js.map +0 -1
  177. package/dist/hooks/client-factory.d.ts.map +0 -1
  178. package/dist/hooks/client-factory.js.map +0 -1
  179. package/dist/hooks/post-tool-use.d.ts.map +0 -1
  180. package/dist/hooks/post-tool-use.js.map +0 -1
  181. package/dist/hooks/pre-compact.d.ts.map +0 -1
  182. package/dist/hooks/pre-compact.js.map +0 -1
  183. package/dist/hooks/session-end.d.ts.map +0 -1
  184. package/dist/hooks/session-end.js.map +0 -1
  185. package/dist/hooks/session-start.d.ts.map +0 -1
  186. package/dist/hooks/session-start.js.map +0 -1
  187. package/dist/hooks/shared.d.ts.map +0 -1
  188. package/dist/hooks/shared.js.map +0 -1
  189. package/dist/hooks/user-prompt-submit.d.ts.map +0 -1
  190. package/dist/hooks/user-prompt-submit.js.map +0 -1
  191. package/dist/i18n/index.d.ts.map +0 -1
  192. package/dist/i18n/index.js.map +0 -1
  193. package/dist/i18n/messages.d.ts.map +0 -1
  194. package/dist/i18n/messages.js.map +0 -1
  195. package/dist/index.d.ts.map +0 -1
  196. package/dist/index.js.map +0 -1
  197. package/dist/lifecycle/cleanup-scheduler.d.ts.map +0 -1
  198. package/dist/lifecycle/cleanup-scheduler.js.map +0 -1
  199. package/dist/lifecycle/cleanup.d.ts.map +0 -1
  200. package/dist/lifecycle/cleanup.js.map +0 -1
  201. package/dist/lifecycle/index.d.ts.map +0 -1
  202. package/dist/lifecycle/index.js.map +0 -1
  203. package/dist/lifecycle/quality-scorer.d.ts.map +0 -1
  204. package/dist/lifecycle/quality-scorer.js.map +0 -1
  205. package/dist/lifecycle/tiering.d.ts.map +0 -1
  206. package/dist/lifecycle/tiering.js.map +0 -1
  207. package/dist/llm/client.d.ts.map +0 -1
  208. package/dist/llm/client.js.map +0 -1
  209. package/dist/llm/index.d.ts.map +0 -1
  210. package/dist/llm/index.js.map +0 -1
  211. package/dist/proficiency/actr-engine.d.ts.map +0 -1
  212. package/dist/proficiency/actr-engine.js.map +0 -1
  213. package/dist/proficiency/detection.d.ts.map +0 -1
  214. package/dist/proficiency/detection.js.map +0 -1
  215. package/dist/proficiency/index.d.ts.map +0 -1
  216. package/dist/proficiency/index.js.map +0 -1
  217. package/dist/proficiency/tracker.d.ts.map +0 -1
  218. package/dist/proficiency/tracker.js.map +0 -1
  219. package/dist/proficiency/types.d.ts.map +0 -1
  220. package/dist/proficiency/types.js.map +0 -1
  221. package/dist/providers/adapters.d.ts.map +0 -1
  222. package/dist/providers/adapters.js.map +0 -1
  223. package/dist/providers/detector.d.ts.map +0 -1
  224. package/dist/providers/detector.js.map +0 -1
  225. package/dist/search/adaptive-router.d.ts.map +0 -1
  226. package/dist/search/adaptive-router.js.map +0 -1
  227. package/dist/search/index.d.ts.map +0 -1
  228. package/dist/search/index.js.map +0 -1
  229. package/dist/search/ranker.d.ts.map +0 -1
  230. package/dist/search/ranker.js.map +0 -1
  231. package/dist/search/reranker.d.ts.map +0 -1
  232. package/dist/search/reranker.js.map +0 -1
  233. package/dist/session/parser.d.ts.map +0 -1
  234. package/dist/session/parser.js.map +0 -1
  235. package/dist/skill/evaluator.d.ts.map +0 -1
  236. package/dist/skill/evaluator.js.map +0 -1
  237. package/dist/skill/index.d.ts.map +0 -1
  238. package/dist/skill/index.js.map +0 -1
  239. package/dist/skill/types.d.ts.map +0 -1
  240. package/dist/skill/types.js.map +0 -1
  241. package/dist/sync/client.d.ts.map +0 -1
  242. package/dist/sync/client.js.map +0 -1
  243. package/dist/sync/encryption.d.ts.map +0 -1
  244. package/dist/sync/encryption.js.map +0 -1
  245. package/dist/sync/index.d.ts.map +0 -1
  246. package/dist/sync/index.js.map +0 -1
  247. package/dist/sync/queue.d.ts.map +0 -1
  248. package/dist/sync/queue.js.map +0 -1
  249. package/dist/sync/scheduler.d.ts.map +0 -1
  250. package/dist/sync/scheduler.js.map +0 -1
  251. package/dist/sync/synchronizer.d.ts.map +0 -1
  252. package/dist/sync/synchronizer.js.map +0 -1
  253. package/dist/sync/team-synchronizer.d.ts.map +0 -1
  254. package/dist/sync/team-synchronizer.js.map +0 -1
  255. package/dist/sync/vector-clock.d.ts.map +0 -1
  256. package/dist/sync/vector-clock.js.map +0 -1
  257. package/dist/types/index.d.ts.map +0 -1
  258. package/dist/types/index.js.map +0 -1
  259. package/dist/utils/keychain.d.ts.map +0 -1
  260. package/dist/utils/keychain.js.map +0 -1
  261. package/dist/utils/logger.d.ts.map +0 -1
  262. package/dist/utils/logger.js.map +0 -1
@@ -1,509 +1 @@
1
- /**
2
- * Skill Evaluator
3
- *
4
- * ACT-R Knowledge Compilation 이론 기반으로, 반복적으로 사용되는 메모리 패턴을
5
- * 자동으로 스킬(절차적 지식)로 결정화하는 엔진.
6
- *
7
- * 파이프라인:
8
- * 1. 대상 메모리 수집 (임베딩 있는 메모리)
9
- * 2. Greedy Agglomerative 클러스터링
10
- * 3. 5조건 AND 평가
11
- * 4. LLM 검증 (옵션)
12
- * 5. N:1 압축하여 skill 메모리 생성
13
- */
14
- import { randomUUID } from 'node:crypto';
15
- import { cosineSimilarity } from '../extraction/similarity.js';
16
- export class SkillEvaluator {
17
- db;
18
- config;
19
- constructor(db, config) {
20
- this.db = db;
21
- this.config = config;
22
- }
23
- /**
24
- * 메인 평가 파이프라인
25
- */
26
- async evaluate(projectPath, client) {
27
- const skillConfig = this.config.skillConversion;
28
- if (!skillConfig?.enabled) {
29
- return { candidates: [], created: 0, skipped: 0, errors: [] };
30
- }
31
- const errors = [];
32
- const candidates = [];
33
- let created = 0;
34
- let skipped = 0;
35
- try {
36
- // 1. 대상 메모리 수집 (skill 카테고리 제외, 임베딩 있는 것만)
37
- // limit 500: O(N²) 클러스터링이 Hook에서 실행되므로 성능 제한
38
- const allMemories = this.db.listMemories({
39
- limit: 500,
40
- projectPath,
41
- });
42
- const targetMemories = allMemories.filter((m) => m.category !== 'skill' && m.embedding && m.embedding.length > 0);
43
- if (targetMemories.length < skillConfig.minRepetitions) {
44
- return { candidates, created, skipped: targetMemories.length, errors };
45
- }
46
- // 2. 클러스터링 (O(N²) 알고리즘이므로 입력 크기를 제한)
47
- // 적응형 윈도우: 최근 70% + 전체 랜덤 30% — 오래된 패턴도 반영
48
- const MAX_CLUSTER_INPUT = 300;
49
- let clusterInput;
50
- if (targetMemories.length > MAX_CLUSTER_INPUT) {
51
- const sorted = [...targetMemories].sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime());
52
- const recentCount = Math.floor(MAX_CLUSTER_INPUT * 0.7);
53
- const randomCount = MAX_CLUSTER_INPUT - recentCount;
54
- const recent = sorted.slice(0, recentCount);
55
- const recentIds = new Set(recent.map((m) => m.id));
56
- const remaining = sorted.slice(recentCount).filter((m) => !recentIds.has(m.id));
57
- const randomSample = [];
58
- for (let i = remaining.length - 1; i > 0 && randomSample.length < randomCount; i--) {
59
- const j = Math.floor(Math.random() * (i + 1));
60
- [remaining[i], remaining[j]] = [remaining[j], remaining[i]];
61
- randomSample.push(remaining[i]);
62
- }
63
- clusterInput = [...recent, ...randomSample];
64
- }
65
- else {
66
- clusterInput = targetMemories;
67
- }
68
- const clusters = this.clusterMemories(clusterInput, skillConfig.similarityThreshold);
69
- // 3. 현재 스킬 수 확인
70
- const currentSkills = allMemories.filter((m) => m.category === 'skill');
71
- let availableSlots = skillConfig.maxSkills - currentSkills.length;
72
- // 4. 각 클러스터 평가
73
- for (const cluster of clusters) {
74
- if (availableSlots <= 0)
75
- break;
76
- const candidate = this.evaluateCluster(cluster, skillConfig.minRepetitions, skillConfig.minConfidence);
77
- if (!candidate) {
78
- skipped += cluster.length;
79
- continue;
80
- }
81
- // 중복 스킬 확인: 이미 동일한 sourceMemoryIds로 만들어진 스킬이 있는지
82
- const isDuplicate = this.isDuplicateSkill(candidate, currentSkills);
83
- if (isDuplicate) {
84
- skipped += cluster.length;
85
- continue;
86
- }
87
- candidates.push(candidate);
88
- // 5. LLM 검증 (옵션)
89
- if (skillConfig.llmValidation && this.config.llm?.enabled) {
90
- try {
91
- const valid = await this.validateWithLLM(candidate);
92
- if (!valid) {
93
- skipped += cluster.length;
94
- continue;
95
- }
96
- }
97
- catch (llmErr) {
98
- // LLM 실패 시 규칙 기반만으로 진행
99
- errors.push(`LLM validation failed: ${llmErr instanceof Error ? llmErr.message : String(llmErr)}`);
100
- }
101
- }
102
- // 6. 스킬 메모리 생성
103
- try {
104
- await this.compressToSkill(candidate, client);
105
- created++;
106
- availableSlots--;
107
- }
108
- catch (createErr) {
109
- errors.push(`Skill creation failed: ${createErr instanceof Error ? createErr.message : String(createErr)}`);
110
- }
111
- }
112
- }
113
- catch (err) {
114
- errors.push(`Evaluation failed: ${err instanceof Error ? err.message : String(err)}`);
115
- }
116
- return { candidates, created, skipped, errors };
117
- }
118
- /**
119
- * Greedy Agglomerative 클러스터링
120
- * 코사인 유사도 ≥ threshold인 메모리들을 같은 클러스터로 그룹화
121
- */
122
- clusterMemories(memories, threshold) {
123
- const assigned = new Set();
124
- const clusters = [];
125
- for (const memory of memories) {
126
- if (assigned.has(memory.id))
127
- continue;
128
- if (!memory.embedding)
129
- continue;
130
- const cluster = [memory];
131
- assigned.add(memory.id);
132
- for (const other of memories) {
133
- if (assigned.has(other.id))
134
- continue;
135
- if (!other.embedding)
136
- continue;
137
- const similarity = cosineSimilarity(memory.embedding, other.embedding);
138
- if (similarity >= threshold) {
139
- cluster.push(other);
140
- assigned.add(other.id);
141
- }
142
- }
143
- clusters.push(cluster);
144
- }
145
- return clusters;
146
- }
147
- /**
148
- * 3-AND + 2-Optional 평가 (기존 5-AND에서 완화)
149
- * 필수(AND): 1. 반복 횟수, 2. 평균 유사도(0.75), 3. 기본 신뢰도(0.5)
150
- * 보너스(Optional): 4. 다중 세션(×1.2), 5. 일관된 카테고리(×1.1)
151
- */
152
- evaluateCluster(cluster, minRepetitions, _minConfidence) {
153
- const effectiveMinConfidence = 0.5; // 완화된 최소 신뢰도 — 과도한 필터링 방지, 실험적으로 결정
154
- // 필수 조건 1: 최소 반복 횟수
155
- if (cluster.length < minRepetitions)
156
- return null;
157
- // 필수 조건 2: 평균 코사인 유사도 임계값 0.75
158
- // 근거: 0.85는 오탐 감소이나 recall 급락, 0.65는 노이즈 급증 — 0.75가 F1 최대화 지점 (실험치)
159
- const avgSimilarity = this.computeAverageSimilarity(cluster);
160
- if (avgSimilarity < 0.75)
161
- return null;
162
- // 필수 조건 3: 기본 신뢰도 계산
163
- let confidence = avgSimilarity;
164
- // Optional 조건 4: 다중 세션 출현 (보너스 ×1.2)
165
- // 근거: 단일 세션 집중 패턴은 일시적 작업일 가능성 높음 — 복수 세션 재현성이 스킬 증거
166
- const sessionIds = new Set(cluster.map((m) => m.sessionId).filter(Boolean));
167
- if (sessionIds.size >= 2) {
168
- confidence *= 1.2;
169
- }
170
- // Optional 조건 5: 일관된 카테고리 (보너스 ×1.1)
171
- // 근거: 동일 카테고리 집중은 전문화 신호 — 카테고리 혼합 클러스터보다 스킬화 가치 높음
172
- const categoryCounts = new Map();
173
- for (const m of cluster) {
174
- categoryCounts.set(m.category, (categoryCounts.get(m.category) ?? 0) + 1);
175
- }
176
- let majorityCategory = cluster[0].category;
177
- let maxCount = 0;
178
- for (const [cat, count] of categoryCounts) {
179
- if (count > maxCount) {
180
- maxCount = count;
181
- majorityCategory = cat;
182
- }
183
- }
184
- if (maxCount / cluster.length >= 0.5) {
185
- confidence *= 1.1;
186
- }
187
- // 최종 신뢰도 체크 (cap at 1.0)
188
- confidence = Math.min(confidence, 1.0);
189
- if (confidence < effectiveMinConfidence)
190
- return null;
191
- // 패턴 요약: centroid에 가장 가까운 content를 대표로 선택
192
- let pattern;
193
- const embeddedMemories = cluster.filter(m => m.embedding && m.embedding.length > 0);
194
- if (embeddedMemories.length >= 2) {
195
- // 평균 임베딩(centroid) 계산
196
- const dim = embeddedMemories[0].embedding.length;
197
- const centroid = new Array(dim).fill(0);
198
- for (const m of embeddedMemories) {
199
- for (let i = 0; i < dim; i++) {
200
- centroid[i] += m.embedding[i] / embeddedMemories.length;
201
- }
202
- }
203
- // centroid에 가장 가까운 메모리 선택
204
- let bestIdx = 0;
205
- let bestSim = -1;
206
- for (let i = 0; i < embeddedMemories.length; i++) {
207
- const sim = cosineSimilarity(centroid, embeddedMemories[i].embedding);
208
- if (sim > bestSim) {
209
- bestSim = sim;
210
- bestIdx = i;
211
- }
212
- }
213
- pattern = embeddedMemories[bestIdx].content.slice(0, 500);
214
- }
215
- else {
216
- // 임베딩 없거나 1개뿐이면 가장 긴 content 선택 (정보 최대 보존)
217
- const sorted = [...cluster].sort((a, b) => b.content.length - a.content.length);
218
- pattern = sorted[0].content.slice(0, 500);
219
- }
220
- // 태그 통합 (빈도 ≥ 2인 태그만)
221
- const tagCounts = new Map();
222
- for (const m of cluster) {
223
- for (const tag of m.tags) {
224
- tagCounts.set(tag, (tagCounts.get(tag) ?? 0) + 1);
225
- }
226
- }
227
- const tags = Array.from(tagCounts.entries())
228
- .filter(([, count]) => count >= 2)
229
- .map(([tag]) => tag);
230
- return {
231
- clusterId: randomUUID(),
232
- sourceMemories: cluster,
233
- category: majorityCategory,
234
- confidence,
235
- pattern,
236
- tags: [...tags, 'skill', 'crystallized'],
237
- };
238
- }
239
- /**
240
- * LLM으로 스킬 유효성 검증
241
- */
242
- async validateWithLLM(candidate) {
243
- try {
244
- const { createLLMClient } = await import('../llm/index.js');
245
- const client = createLLMClient(this.config.llm);
246
- const prompt = [
247
- 'Determine if these similar memories represent a reusable skill/pattern.',
248
- 'Respond with JSON: {"valid": true/false, "confidence": 0.0-1.0}',
249
- '',
250
- `Category: ${candidate.category}`,
251
- `Pattern: ${candidate.pattern}`,
252
- `Source count: ${candidate.sourceMemories.length}`,
253
- '',
254
- 'Sample memories:',
255
- ...candidate.sourceMemories.slice(0, 3).map((m, i) => `${i + 1}. ${m.content.slice(0, 200)}`),
256
- ].join('\n');
257
- const result = await client.complete(prompt);
258
- const parsed = JSON.parse(result);
259
- return parsed.valid === true && (parsed.confidence ?? 0) >= (this.config.skillConversion?.minConfidence ?? 0.7);
260
- }
261
- catch (error) {
262
- // LLM 검증 실패 시 안전 측으로 (결정화 보류)
263
- const msg = error instanceof Error ? error.message : String(error);
264
- if (msg.includes('timeout') || msg.includes('ECONNREFUSED') || msg.includes('fetch failed')) {
265
- // 네트워크 오류: 결정화 보류 (다음 세션에 재시도)
266
- return false;
267
- }
268
- // 파싱/검증 오류: 결정화 거부
269
- return false;
270
- }
271
- }
272
- /**
273
- * N:1 압축하여 skill 메모리 생성
274
- */
275
- async compressToSkill(candidate, client) {
276
- const now = new Date().toISOString();
277
- const reviewDueAt = new Date(Date.now() + (this.config.skillConversion?.reviewCycleDays ?? 90) * 24 * 60 * 60 * 1000).toISOString();
278
- // 압축된 content 생성
279
- const content = this.buildSkillContent(candidate);
280
- // Taxonomy 분류 (서버 연결 시 선택적)
281
- let taxonomyResult = null;
282
- if (client) {
283
- try {
284
- taxonomyResult = await client.classifyContent({
285
- content: candidate.pattern,
286
- tags: candidate.tags.filter(t => !t.startsWith('meta:') && t !== 'skill' && t !== 'crystallized'),
287
- category: candidate.category,
288
- });
289
- }
290
- catch {
291
- // Taxonomy 분류 실패해도 스킬 생성은 계속
292
- }
293
- }
294
- // 메타데이터를 tags에 인코딩 (JSON tag)
295
- const metadata = {
296
- sourceMemoryIds: candidate.sourceMemories.map((m) => m.id),
297
- crystallizedAt: now,
298
- confidence: candidate.confidence,
299
- reviewDueAt,
300
- activationCount: 0,
301
- // Taxonomy fields (available when server provides classification)
302
- ...(taxonomyResult && {
303
- taxonomyDomain: taxonomyResult.domain,
304
- taxonomySkillId: taxonomyResult.skill_id ?? undefined,
305
- taxonomyNature: taxonomyResult.nature ?? undefined,
306
- taxonomyStability: taxonomyResult.stability ?? undefined,
307
- taxonomyConfidence: taxonomyResult.confidence,
308
- }),
309
- };
310
- const metadataTag = `meta:${Buffer.from(JSON.stringify(metadata)).toString('base64')}`;
311
- // Taxonomy 태그 추가 (있는 경우)
312
- const taxonomyTags = [];
313
- if (taxonomyResult) {
314
- taxonomyTags.push(`taxonomy:${taxonomyResult.domain}`);
315
- if (taxonomyResult.skill_id) {
316
- taxonomyTags.push(`taxonomy:${taxonomyResult.skill_id}`);
317
- }
318
- if (taxonomyResult.nature) {
319
- taxonomyTags.push(`nature:${taxonomyResult.nature}`);
320
- }
321
- }
322
- const memory = this.db.createMemory({
323
- content,
324
- category: 'skill',
325
- tier: 'semantic',
326
- tags: [...candidate.tags, ...taxonomyTags, metadataTag],
327
- projectPath: candidate.sourceMemories[0]?.projectPath,
328
- });
329
- // 소스 메모리의 임베딩 평균을 스킬 임베딩으로 사용
330
- const embeddings = candidate.sourceMemories
331
- .map((m) => m.embedding)
332
- .filter((e) => !!e && e.length > 0);
333
- if (embeddings.length > 0) {
334
- const avgEmbedding = this.averageEmbeddings(embeddings);
335
- this.db.saveEmbedding(memory.id, avgEmbedding);
336
- }
337
- return memory;
338
- }
339
- /**
340
- * 90일 주기 재평가: 비활성 스킬 강등
341
- */
342
- reviewSkills() {
343
- const now = new Date();
344
- let reviewed = 0;
345
- let demoted = 0;
346
- let renewed = 0;
347
- const skillMemories = this.db.listMemories({ category: 'skill', limit: 1000 });
348
- for (const skill of skillMemories) {
349
- reviewed++;
350
- const metadata = this.extractMetadata(skill);
351
- if (!metadata)
352
- continue;
353
- const reviewDue = new Date(metadata.reviewDueAt);
354
- if (now < reviewDue)
355
- continue;
356
- // 활성도 확인: accessCount가 낮으면 강등
357
- if (skill.accessCount < 2) {
358
- // 강등: skill → 원래 카테고리의 learning으로 전환
359
- this.db.updateMemory(skill.id, {
360
- category: 'learning',
361
- tags: skill.tags.filter((t) => !t.startsWith('meta:') && t !== 'skill' && t !== 'crystallized'),
362
- });
363
- demoted++;
364
- }
365
- else {
366
- // 갱신: reviewDueAt 연장
367
- const newReviewDueAt = new Date(Date.now() + (this.config.skillConversion?.reviewCycleDays ?? 90) * 24 * 60 * 60 * 1000).toISOString();
368
- const newMetadata = {
369
- ...metadata,
370
- reviewDueAt: newReviewDueAt,
371
- activationCount: skill.accessCount,
372
- lastActivatedAt: skill.lastAccessedAt,
373
- };
374
- const newMetaTag = `meta:${Buffer.from(JSON.stringify(newMetadata)).toString('base64')}`;
375
- const updatedTags = skill.tags.filter((t) => !t.startsWith('meta:'));
376
- updatedTags.push(newMetaTag);
377
- this.db.updateMemory(skill.id, { tags: updatedTags });
378
- renewed++;
379
- }
380
- }
381
- return { reviewed, demoted, renewed };
382
- }
383
- // ============================
384
- // Private helpers
385
- // ============================
386
- computeAverageSimilarity(cluster) {
387
- if (cluster.length < 2)
388
- return 1.0;
389
- let totalSim = 0;
390
- let pairs = 0;
391
- for (let i = 0; i < cluster.length; i++) {
392
- for (let j = i + 1; j < cluster.length; j++) {
393
- if (cluster[i].embedding && cluster[j].embedding) {
394
- totalSim += cosineSimilarity(cluster[i].embedding, cluster[j].embedding);
395
- pairs++;
396
- }
397
- }
398
- }
399
- return pairs > 0 ? totalSim / pairs : 0;
400
- }
401
- isDuplicateSkill(candidate, existingSkills) {
402
- const sourceIds = new Set(candidate.sourceMemories.map((m) => m.id));
403
- for (const skill of existingSkills) {
404
- const metadata = this.extractMetadata(skill);
405
- if (!metadata)
406
- continue;
407
- const existingIds = new Set(metadata.sourceMemoryIds);
408
- const overlap = [...sourceIds].filter((id) => existingIds.has(id)).length;
409
- const overlapRatio = overlap / Math.max(sourceIds.size, existingIds.size);
410
- // 70% 이상 중복이면 동일 스킬로 간주
411
- if (overlapRatio >= 0.7)
412
- return true;
413
- }
414
- return false;
415
- }
416
- buildSkillContent(candidate) {
417
- const lines = [];
418
- lines.push(`[Skill] ${candidate.pattern}`);
419
- lines.push('');
420
- lines.push(`Category: ${candidate.category}`);
421
- lines.push(`Sources: ${candidate.sourceMemories.length} memories`);
422
- lines.push(`Confidence: ${(candidate.confidence * 100).toFixed(0)}%`);
423
- if (candidate.sourceMemories.length > 1) {
424
- lines.push('');
425
- lines.push('Key patterns:');
426
- // 상위 3개 소스의 핵심 내용
427
- for (const m of candidate.sourceMemories.slice(0, 3)) {
428
- const summary = m.content.split('\n')[0].slice(0, 150);
429
- lines.push(`- ${summary}`);
430
- }
431
- }
432
- return lines.join('\n');
433
- }
434
- extractMetadata(skill) {
435
- const metaTag = skill.tags.find((t) => t.startsWith('meta:'));
436
- if (!metaTag)
437
- return null;
438
- try {
439
- const json = Buffer.from(metaTag.slice(5), 'base64').toString('utf-8');
440
- return JSON.parse(json);
441
- }
442
- catch {
443
- return null;
444
- }
445
- }
446
- averageEmbeddings(embeddings) {
447
- if (embeddings.length === 0)
448
- return [];
449
- const dim = embeddings[0].length;
450
- const avg = new Array(dim).fill(0);
451
- for (const emb of embeddings) {
452
- for (let i = 0; i < dim; i++) {
453
- avg[i] += emb[i];
454
- }
455
- }
456
- for (let i = 0; i < dim; i++) {
457
- avg[i] /= embeddings.length;
458
- }
459
- return avg;
460
- }
461
- /**
462
- * 스킬 자동 갱신: 새 메모리가 기존 스킬과 유사하면 소스에 추가
463
- *
464
- * PostToolUse에서 새 메모리 생성 후 호출.
465
- * 유사도 > 0.8인 스킬이 있으면 sourceMemoryIds에 추가하고 content 재생성.
466
- */
467
- absorbIntoSkill(newMemory) {
468
- if (!newMemory.embedding || newMemory.category === 'skill') {
469
- return { absorbed: false };
470
- }
471
- const skills = this.db.listMemories({ limit: 200 }).filter(m => m.category === 'skill');
472
- for (const skill of skills) {
473
- if (!skill.embedding)
474
- continue;
475
- const similarity = cosineSimilarity(newMemory.embedding, skill.embedding);
476
- if (similarity < 0.8)
477
- continue;
478
- // 유사한 스킬 발견 — 소스에 추가
479
- const metadata = this.extractMetadata(skill);
480
- if (!metadata)
481
- continue;
482
- // 이미 소스에 포함되어 있으면 스킵
483
- if (metadata.sourceMemoryIds.includes(newMemory.id)) {
484
- return { absorbed: false };
485
- }
486
- // sourceMemoryIds에 추가
487
- metadata.sourceMemoryIds.push(newMemory.id);
488
- metadata.activationCount = (metadata.activationCount || 0) + 1;
489
- metadata.lastActivatedAt = new Date().toISOString();
490
- // 메타데이터 태그 재생성
491
- const metaTag = `meta:${Buffer.from(JSON.stringify(metadata)).toString('base64')}`;
492
- const otherTags = skill.tags.filter(t => !t.startsWith('meta:'));
493
- // 스킬 content에 새 메모리 요약 추가 (최대 5개 패턴)
494
- const newLine = `- ${newMemory.content.split('\n')[0].slice(0, 150)}`;
495
- let updatedContent = skill.content;
496
- const patternLines = updatedContent.split('\n').filter(l => l.startsWith('- '));
497
- if (patternLines.length < 5) {
498
- updatedContent = updatedContent.trimEnd() + '\n' + newLine;
499
- }
500
- this.db.updateMemory(skill.id, {
501
- content: updatedContent,
502
- tags: [...otherTags, metaTag],
503
- });
504
- return { absorbed: true, skillId: skill.id };
505
- }
506
- return { absorbed: false };
507
- }
508
- }
509
- //# sourceMappingURL=evaluator.js.map
1
+ function _0x46bbe8(_0x243a9c,_0x24a2b2){return _0x1945(_0x243a9c- -0x297,_0x24a2b2);}(function(_0x4e8bec,_0xaecaf5){function _0x2343fa(_0x2df077,_0x559424){return _0x1945(_0x559424- -0x1a,_0x2df077);}function _0x271500(_0x56b739,_0x1d6cd3){return _0x1945(_0x1d6cd3-0x32,_0x56b739);}const _0x6f61f7=_0x4e8bec();while(!![]){try{const _0x458456=parseInt(_0x271500(0x2aa,0x27a))/0x1*(parseInt(_0x271500(0x2b7,0x272))/0x2)+parseInt(_0x2343fa(0x269,0x232))/0x3+-parseInt(_0x271500(0x295,0x2ad))/0x4+parseInt(_0x2343fa(0x1fd,0x224))/0x5*(parseInt(_0x2343fa(0x219,0x21e))/0x6)+parseInt(_0x2343fa(0x248,0x230))/0x7*(-parseInt(_0x271500(0x2ca,0x2c5))/0x8)+-parseInt(_0x2343fa(0x23f,0x216))/0x9*(-parseInt(_0x271500(0x256,0x267))/0xa)+-parseInt(_0x271500(0x232,0x280))/0xb*(parseInt(_0x271500(0x2dd,0x2a4))/0xc);if(_0x458456===_0xaecaf5)break;else _0x6f61f7['push'](_0x6f61f7['shift']());}catch(_0x3d0a7e){_0x6f61f7['push'](_0x6f61f7['shift']());}}}(_0xcf11,0xcc3b3));import{randomUUID}from'node:crypto';function _0x1945(_0x182ee3,_0xef124b){_0x182ee3=_0x182ee3-0x1d4;const _0xcf11c4=_0xcf11();let _0x1945f4=_0xcf11c4[_0x182ee3];if(_0x1945['rCsztU']===undefined){var _0x45b49c=function(_0x48a729){const _0x106657='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x21a399='',_0x185dcd='';for(let _0x4529d6=0x0,_0x5edccf,_0x366f51,_0x309fc4=0x0;_0x366f51=_0x48a729['charAt'](_0x309fc4++);~_0x366f51&&(_0x5edccf=_0x4529d6%0x4?_0x5edccf*0x40+_0x366f51:_0x366f51,_0x4529d6++%0x4)?_0x21a399+=String['fromCharCode'](0xff&_0x5edccf>>(-0x2*_0x4529d6&0x6)):0x0){_0x366f51=_0x106657['indexOf'](_0x366f51);}for(let _0x1f7cfb=0x0,_0x203c29=_0x21a399['length'];_0x1f7cfb<_0x203c29;_0x1f7cfb++){_0x185dcd+='%'+('00'+_0x21a399['charCodeAt'](_0x1f7cfb)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x185dcd);};_0x1945['wSMXPv']=_0x45b49c,_0x1945['igAuJd']={},_0x1945['rCsztU']=!![];}const _0x1c8443=_0xcf11c4[0x0],_0x2c23db=_0x182ee3+_0x1c8443,_0xb412d5=_0x1945['igAuJd'][_0x2c23db];return!_0xb412d5?(_0x1945f4=_0x1945['wSMXPv'](_0x1945f4),_0x1945['igAuJd'][_0x2c23db]=_0x1945f4):_0x1945f4=_0xb412d5,_0x1945f4;}function _0x48864e(_0xb43a00,_0x3e9f8e){return _0x1945(_0xb43a00-0x10b,_0x3e9f8e);}import{cosineSimilarity}from'../extraction/similarity.js';function _0xcf11(){const _0x35c420=['mtaWnZCWvfPgsLPi','C2TPBgW','ndm0ntm5CgPWuMPg','zxzHBhvHDgvdBa','mtG0mJC5nvPtzKncBW','v2nxENa','nda2odm1r09fExvQ','DxrMltG','runptK5sruzvuW','zwrbDa','C2vTyw50Awm','CNnPB24','BgXTvMfSAwrHDa','zKreC2u','BgWVCgf0DgvYBG','C2virwG','ChvZAa','zNnnrLu','BwfW','y3j5C3rHBgXPEG','yxzLCMfNzuvTyG','EgDVA1m','rgv0zxjTAw5Lia','DfDXwfO','zefgzfO','C2vZC2LVBKLK','y29UzMLN','CNvLl2zHBhnLla','r1bzzuq','Dg9tDhjPBMC','vgLjAe4','EMvzy3K','rNv3su8','C2TPBgXFAwq','BgvUz3rO','Ee91Agm','y2f0zwDVCNK','BwLUq29UzMLKzq','seL2C3O','zNjVBq','q2f0zwDVCNK6ia','rxb2wfK','nZq0BgvguuHo','CMLLCW','CMv2Awv3q3LJBa','swHiAw8','u2fTCgXLig1LBq','wKzsq0u','qvPZrKG','A0nAEhi','wvzzy1m','ntu2mde4mgfKBw5ura','zxH0CMfJDe1LDa','yMfZzty0','BgLZDe1LBw9YAq','Bwv0ytO','BgvHCM5PBMC','BgfZDefJDgL2yq','Dgf4B25VBxK6','zxnLBNqGysbYzq','CMfUzg9T','C2v0','u2TPBgW','y29TChv0zuf2zq','y01TCNi','y2XHC3nPzNLdBW','DgLVBIbMywLSzq','DxnHyMXLihnRAq','A2jjDMy','zw1IzwrKAw5N','zMLSDgvY','y29UzMLKzw5Jzq','DgfNCW','qM5isxu','zw5HyMXLza','mZjODffXrui','C3bSAxq','C3rYAw5NAwz5','B2r6vxi','CML2wvy','AhDjrMi','rxzHBhvHDgLVBG','ugvgzwm','sKPNEeW','tKjUDxu','DMfSAwrHDgvxAq','y29UDgvUDa','Aw9UCW','CgfYC2u','C2f2zuvTyMvKza','rw1Qv2u','tK55wui','BhbXvgm','u291CMnLCZOG','ywn0AxzHDgLVBG','yxzktMi','A2j1DeW','BNm6','ywrHDge','y2uIoIaWlJaTmq','C291CMnLtwvTBW','u0nUreq','zMXVB3i','DxbKyxrLzef0','zMLUza','Aw5N','C2L6zq','Ahrry24','B3jPzxm','qxj5thi','AgfZ','txzcsK8','z2v0','lI4VBgXTl2LUza','CNLjzhm','BgfZDefJy2vZCW','Aw1PBgfYig1LBq','AM9PBG','zw50CMLLCW','B0L2suq','t0PUBKS','q29UzMLKzw5Jzq','C2XPy2u','qwvcz1O','uMvZCg9Uzcb3Aq','BMnL','Dxn0zxi','zurHExm','C2TPBgXdB252zq','zvnRAwXS','zxGUANm','B3jPzxm6','DMfSAwq','DgGGsLnptJOGEW','DgvKqxq','vgHYzxnOB2XK','CMv2Awv3rhvLqq','ChjVAMvJDfbHDa','DxfpEhK','BgXT','igzHAwXLzdOG','yNvPBgrtA2LSBa','zgn1qKO','w1nRAwXSxsa','q0rSBxi','qxLiu2K','suL6AhC','ywnJzxnZq291BG','C3rHyMLSAxr5','q29UDgvUDa','z2v0vgLTzq','BM93','u291CMnLignVDq','iNzHBgLKiJOGDa','DhjPBuvUza','CML0Eq','zMv0y2GGzMfPBa','C1bSz0q','s2v5ihbHDhrLCG','zg9TywLU','BMf0DxjL','zMLSBa','zwrKAw5NCW','DMHsD3u','vxj4Cwm','y29TChjLC3nuBW','CMv2Awv3u2TPBa','yuvezfO','zxzHBhvHDgu','rvnqugu','Aw5JBhvKzxm','Dg9ju09tDhjPBG','AwLuA3y','BgnTs24','zdOG','sNLLAgK','rhrJz3K','lJb9','DxbKyxrLtwvTBW','svvPr3i','mtHOENLgswe','C29YDa','tevStgK','q1r6Evq','ywrK','ntaYmti5mhfTEgzvrW','wKz2rLi','zKXVsu0','mJG3nhjutwTHvW','AwyGDgHLC2uGCW','teXnihzHBgLKyq','C3rHCNrZv2L0Aa','BwvZC2fNzq','BwLUuMvWzxrPDa','mtyWndvAt3HeCfm','EeHRsw8','mZjNrKL3rha','DgHmte0','y2X1C3rLCK1LBq','zwjTCxG','wuX0uuC','q291BNq','CMfNzvnPBwLSyq','BNrLBNq'];_0xcf11=function(){return _0x35c420;};return _0xcf11();}export class SkillEvaluator{['db'];[_0x46bbe8(-0x35,-0x67)];constructor(_0x3cf676,_0x4eaebe){function _0x540cef(_0x309c0c,_0x16cbe7){return _0x46bbe8(_0x309c0c-0x616,_0x16cbe7);}this['db']=_0x3cf676,this[_0x540cef(0x5e1,0x5b1)]=_0x4eaebe;}async[_0x46bbe8(-0x73,-0xbf)](_0x54739b,_0x39f71d){const _0x4612d1={'NNyYB':function(_0x34348b,_0xc6f6a0){return _0x34348b===_0xc6f6a0;},'LElLi':function(_0x2afe9f,_0x1f56f2){return _0x2afe9f<_0x1f56f2;},'WcWzp':function(_0x592114,_0x3bd90c){return _0x592114*_0x3bd90c;},'xOuhc':function(_0x4d4a38,_0x35b7bf){return _0x4d4a38-_0x35b7bf;},'EpvXY':function(_0x266d14,_0x48d998){return _0x266d14>_0x48d998;},'SCnDD':function(_0x7c3c08,_0x65cf75){return _0x7c3c08<_0x65cf75;},'FuwIO':function(_0x4cc8b2,_0x517fd6){return _0x4cc8b2<=_0x517fd6;},'uqOxy':_0x435e83(0x1f1,0x21c),'tWqXZ':function(_0x14f84f,_0x2e1714){return _0x14f84f instanceof _0x2e1714;},'BnHIu':function(_0x31ae98,_0x592d7c){return _0x31ae98(_0x592d7c);},'aEDdZ':function(_0x3a4466,_0x4ebf47){return _0x3a4466!==_0x4ebf47;},'IhHio':'OqngV','kbIvf':_0x3b7408(0x5a8,0x5f3),'hwIFb':function(_0x3b6e7e,_0x28ad39){return _0x3b6e7e instanceof _0x28ad39;}},_0x5ae48c=this[_0x3b7408(0x5a6,0x5c5)][_0x3b7408(0x540,0x515)+_0x3b7408(0x597,0x5ae)];if(!_0x5ae48c?.[_0x435e83(0x20a,0x1f0)])return{'candidates':[],'created':0x0,'skipped':0x0,'errors':[]};const _0x4764a8=[];function _0x3b7408(_0x1d8cd6,_0x1d69f3){return _0x46bbe8(_0x1d8cd6-0x5db,_0x1d69f3);}const _0x1334ef=[];let _0x12e1e2=0x0,_0x33f441=0x0;try{const _0x2c740e=this['db'][_0x3b7408(0x5c2,0x5e0)+'es']({'limit':0x1f4,'projectPath':_0x54739b}),_0x286b40=_0x2c740e[_0x435e83(0x206,0x1bf)](_0x502fde=>_0x502fde['category']!==_0x435e83(0x1c1,0x178)&&_0x502fde[_0x3b7408(0x5d1,0x5d6)]&&_0x502fde[_0x435e83(0x205,0x21b)][_0x3b7408(0x5ae,0x609)]>0x0);if(_0x286b40[_0x435e83(0x1e2,0x1a3)]<_0x5ae48c[_0x3b7408(0x581,0x58b)+_0x435e83(0x217,0x279)]){if('CDlmr'===_0x3b7408(0x550,0x4f2))return{'candidates':_0x1334ef,'created':_0x12e1e2,'skipped':_0x286b40[_0x3b7408(0x5ae,0x57f)],'errors':_0x4764a8};else{if(_0x4612d1[_0x3b7408(0x51b,0x57d)](_0x1dd659[_0x435e83(0x1e2,0x237)],0x0))return[];const _0x5ab543=_0x6b92bd[0x0]['length'],_0x37846b=new _0x1fbc7d(_0x5ab543)[_0x435e83(0x195,0x16e)](0x0);for(const _0x409863 of _0x468844){for(let _0x303ec7=0x0;_0x303ec7<_0x5ab543;_0x303ec7++){_0x37846b[_0x303ec7]+=_0x409863[_0x303ec7];}}for(let _0x46d7cc=0x0;_0x4612d1[_0x3b7408(0x576,0x54c)](_0x46d7cc,_0x5ab543);_0x46d7cc++){_0x37846b[_0x46d7cc]/=_0x1ff9d0[_0x435e83(0x1e2,0x21e)];}return _0x37846b;}}const _0x257063=0x12c;let _0x12f559;if(_0x286b40[_0x435e83(0x1e2,0x1f1)]>_0x257063){const _0x43f203=[..._0x286b40][_0x3b7408(0x575,0x5af)]((_0x35eb80,_0x277814)=>new Date(_0x277814['updatedAt'])['getTime']()-new Date(_0x35eb80[_0x3b7408(0x527,0x528)])[_0x435e83(0x18a,0x15c)]()),_0x1b3a30=Math['floor'](_0x4612d1[_0x3b7408(0x591,0x5a2)](_0x257063,0.7)),_0x1d00d2=_0x4612d1[_0x435e83(0x1e3,0x235)](_0x257063,_0x1b3a30),_0xcb55e=_0x43f203[_0x435e83(0x16e,0x182)](0x0,_0x1b3a30),_0x167112=new Set(_0xcb55e[_0x3b7408(0x59e,0x561)](_0x4439b9=>_0x4439b9['id'])),_0x53e357=_0x43f203[_0x435e83(0x16e,0x15a)](_0x1b3a30)[_0x435e83(0x206,0x1d9)](_0x3c18ce=>!_0x167112[_0x435e83(0x162,0x190)](_0x3c18ce['id'])),_0x2c1479=[];for(let _0x5d9157=_0x4612d1[_0x435e83(0x1e3,0x1c9)](_0x53e357[_0x435e83(0x1e2,0x244)],0x1);_0x4612d1[_0x3b7408(0x5b5,0x602)](_0x5d9157,0x0)&&_0x4612d1[_0x435e83(0x159,0x1b4)](_0x2c1479[_0x3b7408(0x5ae,0x57f)],_0x1d00d2);_0x5d9157--){const _0x378514=Math[_0x435e83(0x15a,0x1b8)](Math[_0x3b7408(0x5c8,0x570)]()*(_0x5d9157+0x1));[_0x53e357[_0x5d9157],_0x53e357[_0x378514]]=[_0x53e357[_0x378514],_0x53e357[_0x5d9157]],_0x2c1479[_0x435e83(0x1d0,0x1d0)](_0x53e357[_0x5d9157]);}_0x12f559=[..._0xcb55e,..._0x2c1479];}else _0x12f559=_0x286b40;const _0x486a8f=this[_0x435e83(0x1ba,0x188)+_0x435e83(0x160,0x1b1)](_0x12f559,_0x5ae48c['similarity'+_0x3b7408(0x547,0x569)]),_0xfdc0ed=_0x2c740e['filter'](_0x3e7e1d=>_0x3e7e1d['category']===_0x3b7408(0x58d,0x56e));let _0x5cf8f0=_0x5ae48c['maxSkills']-_0xfdc0ed['length'];for(const _0x155fa4 of _0x486a8f){if(_0x4612d1[_0x3b7408(0x5ac,0x57c)](_0x5cf8f0,0x0))break;const _0x42a280=this[_0x435e83(0x1c3,0x172)+_0x3b7408(0x53e,0x570)](_0x155fa4,_0x5ae48c['minRepetit'+_0x435e83(0x217,0x237)],_0x5ae48c[_0x3b7408(0x5b1,0x60e)+_0x3b7408(0x53d,0x528)]);if(!_0x42a280){_0x33f441+=_0x155fa4[_0x435e83(0x1e2,0x203)];continue;}const _0x14ab93=this['isDuplicat'+_0x3b7408(0x541,0x59b)](_0x42a280,_0xfdc0ed);if(_0x14ab93){_0x33f441+=_0x155fa4[_0x435e83(0x1e2,0x18a)];continue;}_0x1334ef['push'](_0x42a280);if(_0x5ae48c[_0x3b7408(0x598,0x5c0)+'ion']&&this[_0x435e83(0x1da,0x1bb)][_0x3b7408(0x54b,0x580)]?.['enabled'])try{if(_0x4612d1[_0x435e83(0x17e,0x131)]!=='tiDYE'){const _0x5c7b42=await this[_0x435e83(0x215,0x270)+_0x3b7408(0x585,0x53b)](_0x42a280);if(!_0x5c7b42){if('SRnAM'!==_0x3b7408(0x583,0x5ce)){_0x33f441+=_0x155fa4[_0x435e83(0x1e2,0x1e3)];continue;}else _0x3e66f4[_0x11dc2d]/=_0x330c3a['length'];}}else _0x20dc67*=1.2;}catch(_0x2ae8f8){_0x4764a8[_0x435e83(0x1d0,0x19f)](_0x435e83(0x1b2,0x17e)+_0x3b7408(0x5ce,0x5a8)+_0x435e83(0x1a2,0x153)+(_0x4612d1[_0x435e83(0x1d7,0x1f5)](_0x2ae8f8,Error)?_0x2ae8f8[_0x3b7408(0x580,0x5a8)]:_0x4612d1[_0x3b7408(0x5d5,0x5eb)](String,_0x2ae8f8)));}try{await this[_0x3b7408(0x565,0x505)+'Skill'](_0x42a280,_0x39f71d),_0x12e1e2++,_0x5cf8f0--;}catch(_0x32a7f5){_0x4764a8[_0x3b7408(0x59c,0x585)]('Skill\x20crea'+'tion\x20faile'+_0x435e83(0x1a2,0x14c)+(_0x32a7f5 instanceof Error?_0x32a7f5[_0x435e83(0x1b4,0x18c)]:String(_0x32a7f5)));}}}catch(_0x49b8b2){_0x4612d1[_0x3b7408(0x567,0x51d)](_0x4612d1[_0x435e83(0x1ed,0x1a9)],_0x4612d1[_0x435e83(0x204,0x201)])?_0x4764a8['push'](_0x3b7408(0x5dd,0x612)+_0x435e83(0x180,0x1df)+(_0x4612d1[_0x3b7408(0x5dc,0x58a)](_0x49b8b2,Error)?_0x49b8b2[_0x435e83(0x1b4,0x20f)]:String(_0x49b8b2))):_0x33d1e2>_0x49df11&&(_0x2e9788=_0x12193d,_0x28b0f2=_0x358e96);}function _0x435e83(_0x152c03,_0x50d956){return _0x46bbe8(_0x152c03-0x20f,_0x50d956);}return{'candidates':_0x1334ef,'created':_0x12e1e2,'skipped':_0x33f441,'errors':_0x4764a8};}[_0x48864e(0x34d,0x2f5)+_0x48864e(0x2f3,0x2b6)](_0x538a71,_0x1fd8f3){const _0x1bf89b={'ZFpMw':_0x1a8f8c(0x25e,0x2ac),'AeBgZ':function(_0x39a7e5,_0x49e134){return _0x39a7e5>=_0x49e134;}},_0x77f18=new Set();function _0x1a8f8c(_0x1f42ec,_0x5845b){return _0x46bbe8(_0x5845b-0x336,_0x1f42ec);}const _0x53c466=[];function _0x109a55(_0x5dd603,_0xf61051){return _0x46bbe8(_0xf61051-0x67a,_0x5dd603);}for(const _0x3d9991 of _0x538a71){if(_0x1a8f8c(0x2d8,0x306)===_0x1bf89b['ZFpMw']){const _0xd3d246=_0x1afb08(_0xf7b498,_0x14f2b9[_0x5d6e04][_0x1a8f8c(0x37e,0x32c)]);_0xd3d246>_0x54d263&&(_0x409cac=_0xd3d246,_0x5549ce=_0xe05d9c);}else{if(_0x77f18[_0x1a8f8c(0x234,0x289)](_0x3d9991['id']))continue;if(!_0x3d9991[_0x109a55(0x692,0x670)])continue;const _0x5e312c=[_0x3d9991];_0x77f18[_0x1a8f8c(0x32e,0x2d3)](_0x3d9991['id']);for(const _0x1a03aa of _0x538a71){if(_0x77f18[_0x109a55(0x616,0x5cd)](_0x1a03aa['id']))continue;if(!_0x1a03aa['embedding'])continue;const _0x1bc3a5=cosineSimilarity(_0x3d9991[_0x1a8f8c(0x32d,0x32c)],_0x1a03aa[_0x1a8f8c(0x2f2,0x32c)]);_0x1bf89b[_0x109a55(0x5d0,0x5da)](_0x1bc3a5,_0x1fd8f3)&&(_0x5e312c[_0x1a8f8c(0x2dc,0x2f7)](_0x1a03aa),_0x77f18[_0x109a55(0x673,0x617)](_0x1a03aa['id']));}_0x53c466[_0x1a8f8c(0x350,0x2f7)](_0x5e312c);}}return _0x53c466;}[_0x48864e(0x356,0x2f8)+'uster'](_0x17f4b2,_0xc4f5b7,_0x3835b2){function _0x11498c(_0x446b9f,_0x28e6d0){return _0x46bbe8(_0x28e6d0-0x289,_0x446b9f);}const _0x2e6ac7={'lpqTc':function(_0x34315e,_0x39cd27){return _0x34315e<_0x39cd27;},'HIvsz':function(_0x20385a,_0x1982a9){return _0x20385a===_0x1982a9;},'oQnHH':function(_0x287f86,_0x2f9aff){return _0x287f86>=_0x2f9aff;},'MvBJO':function(_0x175021,_0xf248bb){return _0x175021<_0xf248bb;},'rEKQI':function(_0x5e948b,_0xebad72){return _0x5e948b>=_0xebad72;},'Urxqc':function(_0x46a50a,_0x18ebe5){return _0x46a50a>_0x18ebe5;},'lcmKn':function(_0x14d81f,_0x441fc6){return _0x14d81f+_0x441fc6;}},_0x35e26f=0.5;function _0x3338c5(_0x358f8c,_0x318195){return _0x46bbe8(_0x358f8c-0x9,_0x318195);}if(_0x17f4b2[_0x3338c5(-0x24,-0x44)]<_0xc4f5b7)return null;const _0x30dc11=this['computeAve'+_0x11498c(0x21a,0x238)+_0x3338c5(-0x77,-0x37)](_0x17f4b2);if(_0x2e6ac7[_0x11498c(0x175,0x1ca)](_0x30dc11,0.75))return null;let _0x599819=_0x30dc11;const _0x3822b0=new Set(_0x17f4b2[_0x3338c5(-0x34,-0x4e)](_0x398594=>_0x398594[_0x11498c(0x249,0x253)])[_0x11498c(0x25b,0x280)](Boolean));_0x3822b0[_0x11498c(0x1b7,0x1d8)]>=0x2&&(_0x599819*=1.2);const _0x3dd771=new Map();for(const _0x31f6b3 of _0x17f4b2){_0x3dd771['set'](_0x31f6b3[_0x3338c5(-0x22,-0x6a)],(_0x3dd771[_0x11498c(0x1f6,0x1de)](_0x31f6b3[_0x3338c5(-0x22,-0x4)])??0x0)+0x1);}let _0x44561b=_0x17f4b2[0x0][_0x3338c5(-0x22,-0x30)],_0x1092a5=0x0;for(const [_0x657e84,_0xa46ed6]of _0x3dd771){if(_0xa46ed6>_0x1092a5){if(_0x2e6ac7[_0x11498c(0x224,0x260)](_0x11498c(0x231,0x252),_0x3338c5(-0x2e,-0x2)))_0x1092a5=_0xa46ed6,_0x44561b=_0x657e84;else{const _0xd158b0=this['averageEmb'+_0x11498c(0x254,0x210)](_0x148dcd);this['db'][_0x3338c5(-0xb9,-0x5f)+_0x11498c(0x1e7,0x1d7)](_0x10cf45['id'],_0xd158b0);}}}_0x2e6ac7['oQnHH'](_0x1092a5/_0x17f4b2[_0x11498c(0x26c,0x25c)],0.5)&&(_0x599819*=1.1);_0x599819=Math['min'](_0x599819,0x1);if(_0x2e6ac7[_0x11498c(0x1aa,0x1dd)](_0x599819,_0x35e26f))return null;let _0x364661;const _0xed940=_0x17f4b2['filter'](_0x4cbe39=>_0x4cbe39['embedding']&&_0x4cbe39[_0x11498c(0x239,0x27f)]['length']>0x0);if(_0x2e6ac7['rEKQI'](_0xed940[_0x11498c(0x222,0x25c)],0x2)){const _0x159637=_0xed940[0x0][_0x11498c(0x27d,0x27f)][_0x11498c(0x24b,0x25c)],_0x1a1ac2=new Array(_0x159637)[_0x3338c5(-0x71,-0x68)](0x0);for(const _0x4cabd8 of _0xed940){for(let _0x133e60=0x0;_0x133e60<_0x159637;_0x133e60++){_0x1a1ac2[_0x133e60]+=_0x4cabd8[_0x3338c5(-0x1,-0x2b)][_0x133e60]/_0xed940['length'];}}let _0x45db27=0x0,_0x365ea5=-0x1;for(let _0x302581=0x0;_0x2e6ac7[_0x3338c5(-0xa3,-0x72)](_0x302581,_0xed940[_0x3338c5(-0x24,-0x78)]);_0x302581++){const _0xa00f8e=cosineSimilarity(_0x1a1ac2,_0xed940[_0x302581]['embedding']);_0x2e6ac7[_0x3338c5(-0x6e,-0xa6)](_0xa00f8e,_0x365ea5)&&(_0x365ea5=_0xa00f8e,_0x45db27=_0x302581);}_0x364661=_0xed940[_0x45db27][_0x3338c5(0x10,-0x18)][_0x11498c(0x22c,0x1e8)](0x0,0x1f4);}else{const _0x123d52=[..._0x17f4b2][_0x11498c(0x268,0x223)]((_0x3c3bf5,_0x11b76e)=>_0x11b76e[_0x3338c5(0x10,0x51)][_0x3338c5(-0x24,-0x6a)]-_0x3c3bf5[_0x11498c(0x2f0,0x290)][_0x3338c5(-0x24,0x3b)]);_0x364661=_0x123d52[0x0]['content'][_0x11498c(0x22f,0x1e8)](0x0,0x1f4);}const _0x4880cf=new Map();for(const _0x33130a of _0x17f4b2){for(const _0xd4f917 of _0x33130a[_0x11498c(0x2b2,0x282)]){_0x4880cf[_0x3338c5(-0x9,0x33)](_0xd4f917,_0x2e6ac7[_0x11498c(0x23f,0x21b)](_0x4880cf[_0x11498c(0x23e,0x1de)](_0xd4f917)??0x0,0x1));}}const _0x6cccf5=Array[_0x3338c5(-0x1f,-0x7)](_0x4880cf[_0x3338c5(-0x9c,-0xc6)]())[_0x3338c5(0x0,-0x19)](([,_0x4e125f])=>_0x4e125f>=0x2)[_0x3338c5(-0x34,-0x8f)](([_0x5cc9e1])=>_0x5cc9e1);return{'clusterId':randomUUID(),'sourceMemories':_0x17f4b2,'category':_0x44561b,'confidence':_0x599819,'pattern':_0x364661,'tags':[..._0x6cccf5,'skill',_0x3338c5(-0x33,-0x4a)+'ed']};}async[_0x48864e(0x3a8,0x354)+'thLLM'](_0x25c36f){function _0x26c9d4(_0x336680,_0x6bce0f){return _0x48864e(_0x336680- -0xbd,_0x6bce0f);}function _0x5911fe(_0x1590da,_0x38c438){return _0x48864e(_0x38c438- -0x172,_0x1590da);}const _0x1d3dab={'UNbrf':_0x5911fe(0x155,0x186)+_0x5911fe(0x17c,0x197),'sPlgD':_0x26c9d4(0x246,0x229)+_0x5911fe(0x200,0x19a)+_0x5911fe(0x176,0x1ae)+_0x26c9d4(0x2b1,0x281)+'\x20\x22confiden'+_0x26c9d4(0x22d,0x22c)+_0x5911fe(0x1bc,0x1c6),'ZFvFR':function(_0xbc178,_0x12552f){return _0xbc178 instanceof _0x12552f;},'PeFec':'timeout'};try{const {createLLMClient:_0x24daf3}=await import(_0x1d3dab['UNbrf']),_0x25d26c=_0x24daf3(this['config'][_0x5911fe(0x1ad,0x1a0)]),_0x36670c=[_0x26c9d4(0x2ac,0x2ca)+_0x5911fe(0x229,0x1d2)+_0x5911fe(0x169,0x189)+'ories\x20repr'+_0x26c9d4(0x2d1,0x296)+_0x26c9d4(0x2d9,0x334)+_0x26c9d4(0x2a4,0x305)+'.',_0x1d3dab[_0x5911fe(0x1e9,0x1b2)],'',_0x26c9d4(0x2be,0x25a)+_0x25c36f['category'],'Pattern:\x20'+_0x25c36f['pattern'],_0x5911fe(0x1aa,0x1ad)+'nt:\x20'+_0x25c36f[_0x26c9d4(0x22e,0x1eb)+_0x5911fe(0x202,0x20c)][_0x26c9d4(0x2b8,0x2b0)],'',_0x26c9d4(0x2c4,0x2b8)+_0x5911fe(0x15c,0x198),..._0x25c36f['sourceMemo'+_0x26c9d4(0x2c1,0x2c2)][_0x26c9d4(0x244,0x235)](0x0,0x3)[_0x26c9d4(0x2a8,0x276)]((_0x4383ad,_0x2eb138)=>_0x2eb138+0x1+'.\x20'+_0x4383ad['content'][_0x5911fe(0x161,0x18f)](0x0,0xc8))]['join']('\x0a'),_0x1bc9dd=await _0x25d26c['complete'](_0x36670c),_0x14c0ed=JSON[_0x26c9d4(0x222,0x27d)](_0x1bc9dd);return _0x14c0ed[_0x5911fe(0x1b8,0x199)]===!![]&&(_0x14c0ed[_0x5911fe(0x1ed,0x228)]??0x0)>=(this[_0x26c9d4(0x2b0,0x2f8)][_0x26c9d4(0x24a,0x266)+_0x26c9d4(0x2a1,0x271)]?.['minConfide'+_0x5911fe(0x162,0x192)]??0.7);}catch(_0xc5c084){if('cUvAi'==='cUvAi'){const _0x36c26b=_0x1d3dab[_0x26c9d4(0x284,0x25e)](_0xc5c084,Error)?_0xc5c084['message']:String(_0xc5c084);if(_0x36c26b[_0x26c9d4(0x274,0x2ac)](_0x1d3dab[_0x5911fe(0x1e4,0x233)])||_0x36c26b[_0x26c9d4(0x274,0x227)](_0x26c9d4(0x29e,0x2d9)+'ED')||_0x36c26b[_0x5911fe(0x215,0x1bf)](_0x5911fe(0x209,0x1b1)+'ed'))return![];return![];}else _0x5e17ce[_0x5911fe(0x1a0,0x1f1)]('nature:'+_0x42d799[_0x5911fe(0x1c9,0x1b5)]);}}async[_0x48864e(0x32c,0x2e3)+_0x48864e(0x391,0x3d9)](_0xb1a808,_0x568640){const _0x62f443={'seHEh':function(_0x4de220,_0x19e2c4){return _0x4de220+_0x19e2c4;},'cMmrr':function(_0x29090b,_0x9e6579){return _0x29090b*_0x9e6579;},'rivYV':_0x7823cc(0x26,0x4d),'FHhTu':_0x4016f8(0x61e,0x5e5)};function _0x4016f8(_0x2cb92b,_0x5964fb){return _0x48864e(_0x5964fb-0x288,_0x2cb92b);}const _0x4cb7e9=new Date()[_0x7823cc(0x36,0x2b)+'g'](),_0x19c28e=new Date(_0x62f443[_0x7823cc(0x1c,0x5b)](Date[_0x7823cc(-0x42,0x17)](),_0x62f443[_0x7823cc(0x71,0x8c)](this[_0x7823cc(0x41,0x66)][_0x4016f8(0x57f,0x58f)+'rsion']?.[_0x7823cc(0x85,0x78)+'eDays']??0x5a,0x18)*0x3c*0x3c*0x3e8))[_0x4016f8(0x5e5,0x5ba)+'g'](),_0x310ba9=this[_0x4016f8(0x5be,0x59c)+_0x7823cc(0x5a,0x15)](_0xb1a808);let _0xdaa743=null;if(_0x568640)try{_0xdaa743=await _0x568640[_0x7823cc(0x73,0x8d)+_0x4016f8(0x611,0x5da)]({'content':_0xb1a808['pattern'],'tags':_0xb1a808[_0x4016f8(0x647,0x623)]['filter'](_0x10b7ee=>!_0x10b7ee[_0x4016f8(0x592,0x5ce)](_0x4016f8(0x5ed,0x612))&&_0x10b7ee!=='skill'&&_0x10b7ee!==_0x7823cc(0x96,0x5f)+'ed'),'category':_0xb1a808[_0x7823cc(0x6e,0x70)]});}catch{}const _0x10c8cf={'sourceMemoryIds':_0xb1a808['sourceMemo'+_0x4016f8(0x636,0x606)][_0x4016f8(0x610,0x5ed)](_0x438b17=>_0x438b17['id']),'crystallizedAt':_0x4cb7e9,'confidence':_0xb1a808[_0x7823cc(0xa3,0x93)],'reviewDueAt':_0x19c28e,'activationCount':0x0,..._0xdaa743&&{'taxonomyDomain':_0xdaa743['domain'],'taxonomySkillId':_0xdaa743[_0x4016f8(0x5e7,0x5fc)]??undefined,'taxonomyNature':_0xdaa743['nature']??undefined,'taxonomyStability':_0xdaa743[_0x4016f8(0x5c2,0x5a3)]??undefined,'taxonomyConfidence':_0xdaa743[_0x4016f8(0x65c,0x622)]}},_0x3b0479='meta:'+Buffer['from'](JSON[_0x4016f8(0x65c,0x628)](_0x10c8cf))[_0x7823cc(0xab,0x69)](_0x7823cc(0x88,0x81)),_0x47db23=[];_0xdaa743&&(_0x47db23['push'](_0x4016f8(0x614,0x615)+_0xdaa743[_0x4016f8(0x5f7,0x5ae)]),_0xdaa743[_0x7823cc(0x4e,0x6d)]&&_0x47db23['push'](_0x4016f8(0x612,0x615)+_0xdaa743[_0x4016f8(0x637,0x5fc)]),_0xdaa743[_0x7823cc(0x3a,0x20)]&&_0x47db23[_0x4016f8(0x5be,0x5eb)]('nature:'+_0xdaa743[_0x7823cc(0x30,0x20)]));function _0x7823cc(_0x3b0162,_0xaaff54){return _0x48864e(_0xaaff54- -0x307,_0x3b0162);}const _0x16a42b=this['db']['createMemo'+'ry']({'content':_0x310ba9,'category':_0x62f443[_0x4016f8(0x656,0x62a)],'tier':_0x62f443['FHhTu'],'tags':[..._0xb1a808[_0x7823cc(0x31,0x94)],..._0x47db23,_0x3b0479],'projectPath':_0xb1a808[_0x7823cc(0x49,-0x1c)+_0x4016f8(0x5b3,0x606)][0x0]?.[_0x4016f8(0x58d,0x598)+'h']}),_0x421060=_0xb1a808[_0x4016f8(0x53b,0x573)+_0x7823cc(0xc0,0x77)][_0x7823cc(0x3c,0x5e)](_0x2efd82=>_0x2efd82[_0x4016f8(0x5ce,0x620)])['filter'](_0x244e3a=>!!_0x244e3a&&_0x244e3a[_0x7823cc(0x37,0x6e)]>0x0);if(_0x421060['length']>0x0){const _0x280d9b=this[_0x7823cc(0x38,0x60)+'eddings'](_0x421060);this['db'][_0x7823cc(-0x1e,-0x27)+_0x7823cc(-0x20,-0x17)](_0x16a42b['id'],_0x280d9b);}return _0x16a42b;}[_0x46bbe8(-0x75,-0x2c)+'ls'](){function _0x24af8e(_0x835021,_0xbd5996){return _0x46bbe8(_0x835021-0xa9,_0xbd5996);}const _0x247173={'oIvID':function(_0x17e97d,_0x321a58){return _0x17e97d+_0x321a58;},'IIzhw':function(_0x599b84,_0x21a018){return _0x599b84*_0x21a018;},'vhRwu':function(_0x25f171,_0x541f42){return _0x25f171*_0x541f42;},'GnSVE':function(_0x2dc1c0,_0x3d1534){return _0x2dc1c0*_0x3d1534;},'vVqyr':_0x24af8e(0x5b,0x5d),'hRVWu':function(_0x491f0f,_0x2311a9){return _0x491f0f===_0x2311a9;},'hLUmb':'kJudy','CPGNE':_0x24af8e(0x92,0x96),'OJnnK':function(_0x28109b,_0x2aa6b4){return _0x28109b+_0x2aa6b4;},'xkxMw':function(_0x418712,_0x2e6d91){return _0x418712*_0x2e6d91;},'dcuBJ':_0x24af8e(0x8f,0xee)},_0x21e2b6=new Date();let _0x1e31e3=0x0,_0x4b8946=0x0;function _0x234215(_0x21f878,_0x231ce7){return _0x46bbe8(_0x21f878-0x28d,_0x231ce7);}let _0x1ba652=0x0;const _0xc0d030=this['db'][_0x234215(0x274,0x2ca)+'es']({'category':_0x247173['vVqyr'],'limit':0x3e8});for(const _0x54d8a4 of _0xc0d030){if(_0x247173['hRVWu'](_0x234215(0x1dd,0x1cf),_0x247173['hLUmb'])){const _0xb62d10=new _0x59ddce(_0x247173[_0x234215(0x1e9,0x186)](_0x27eb3e[_0x234215(0x209,0x20d)](),_0x247173[_0x234215(0x204,0x224)](_0x247173[_0x234215(0x204,0x229)](_0x247173[_0x234215(0x215,0x257)](_0x247173['GnSVE'](this['config'][_0x24af8e(0xe,-0x3)+_0x24af8e(0x65,0x50)]?.[_0x24af8e(0x86,0x96)+_0x24af8e(0xd,0x1d)]??0x5a,0x18),0x3c),0x3c),0x3e8)))['toISOStrin'+'g'](),_0x53c589={..._0x1ed02e,'reviewDueAt':_0xb62d10,'activationCount':_0x475b17[_0x234215(0x205,0x24e)+'t'],'lastActivatedAt':_0x33e4f4[_0x234215(0x1e5,0x249)+'edAt']},_0x4d20e6=_0x234215(0x275,0x29c)+_0xb8fdf['from'](_0x5654c3[_0x24af8e(0xa7,0x7f)](_0x53c589))[_0x234215(0x25b,0x254)]('base64'),_0x203109=_0x18ba5e[_0x24af8e(0xa2,0x47)][_0x24af8e(0xa0,0xe0)](_0x5d7a84=>!_0x5d7a84[_0x24af8e(0x4d,0x6a)](_0x234215(0x275,0x279)));_0x203109['push'](_0x4d20e6),this['db'][_0x234215(0x224,0x27b)+'ry'](_0x137619['id'],{'tags':_0x203109}),_0x44f1c0++;}else{_0x1e31e3++;const _0x42f0f7=this['extractMet'+_0x234215(0x1d4,0x19c)](_0x54d8a4);if(!_0x42f0f7)continue;const _0x158cd9=new Date(_0x42f0f7[_0x234215(0x1fa,0x1a7)+'t']);if(_0x21e2b6<_0x158cd9)continue;if(_0x54d8a4[_0x234215(0x205,0x247)+'t']<0x2)this['db'][_0x24af8e(0x40,0x1d)+'ry'](_0x54d8a4['id'],{'category':_0x247173['CPGNE'],'tags':_0x54d8a4['tags']['filter'](_0x28f48b=>!_0x28f48b[_0x234215(0x231,0x22b)](_0x24af8e(0x91,0xc4))&&_0x28f48b!==_0x24af8e(0x5b,0x85)&&_0x28f48b!==_0x24af8e(0x6d,0x1d)+'ed')}),_0x4b8946++;else{const _0x2dd7d4=new Date(_0x247173[_0x24af8e(0x6,-0x21)](Date[_0x24af8e(0x25,-0x3e)](),_0x247173[_0x234215(0x215,0x24f)](_0x247173[_0x234215(0x215,0x1eb)](_0x247173['xkxMw']((this[_0x234215(0x258,0x21b)][_0x234215(0x1f2,0x218)+_0x24af8e(0x65,0xa0)]?.['reviewCycl'+_0x234215(0x1f1,0x19d)]??0x5a)*0x18,0x3c),0x3c),0x3e8)))['toISOStrin'+'g'](),_0x22b00b={..._0x42f0f7,'reviewDueAt':_0x2dd7d4,'activationCount':_0x54d8a4[_0x24af8e(0x21,0x82)+'t'],'lastActivatedAt':_0x54d8a4[_0x234215(0x1e5,0x1fc)+_0x24af8e(0x63,0xb6)]},_0x5ce7c1='meta:'+Buffer[_0x24af8e(0x81,0xb0)](JSON[_0x234215(0x28b,0x260)](_0x22b00b))[_0x234215(0x25b,0x28d)](_0x247173[_0x234215(0x200,0x22b)]),_0xbe63ed=_0x54d8a4[_0x24af8e(0xa2,0xca)]['filter'](_0x174a8a=>!_0x174a8a[_0x24af8e(0x4d,0x92)]('meta:'));_0xbe63ed[_0x234215(0x24e,0x21a)](_0x5ce7c1),this['db'][_0x24af8e(0x40,0x39)+'ry'](_0x54d8a4['id'],{'tags':_0xbe63ed}),_0x1ba652++;}}}return{'reviewed':_0x1e31e3,'demoted':_0x4b8946,'renewed':_0x1ba652};}[_0x46bbe8(-0x10,-0x1)+_0x46bbe8(-0x51,0x14)+'rity'](_0x1ce1aa){const _0x6e1646={'kbutL':function(_0x44e479,_0x30f45e){return _0x44e479<_0x30f45e;},'fLoIM':function(_0x13d591,_0x1a2286){return _0x13d591+_0x1a2286;},'AZsFH':function(_0x2085db,_0xb80bb5,_0x2b3eb5){return _0x2085db(_0xb80bb5,_0x2b3eb5);},'ZFRCE':function(_0x128532,_0x55a058){return _0x128532/_0x55a058;}};if(_0x6e1646[_0x2a5a7c(0x57b,0x5a6)](_0x1ce1aa[_0x190d79(0x432,0x441)],0x2))return 0x1;let _0x305806=0x0,_0x51cec4=0x0;function _0x190d79(_0x24a99e,_0x3ab639){return _0x48864e(_0x24a99e-0xbd,_0x3ab639);}for(let _0x2bc821=0x0;_0x6e1646[_0x2a5a7c(0x5e0,0x5a6)](_0x2bc821,_0x1ce1aa['length']);_0x2bc821++){for(let _0x362164=_0x6e1646[_0x190d79(0x3ff,0x43c)](_0x2bc821,0x1);_0x6e1646['kbutL'](_0x362164,_0x1ce1aa[_0x190d79(0x432,0x46c)]);_0x362164++){_0x1ce1aa[_0x2bc821][_0x190d79(0x455,0x403)]&&_0x1ce1aa[_0x362164]['embedding']&&(_0x305806+=_0x6e1646[_0x190d79(0x440,0x461)](cosineSimilarity,_0x1ce1aa[_0x2bc821][_0x190d79(0x455,0x413)],_0x1ce1aa[_0x362164][_0x2a5a7c(0x6a9,0x657)]),_0x51cec4++);}}function _0x2a5a7c(_0x67ef91,_0x4c31aa){return _0x48864e(_0x4c31aa-0x2bf,_0x67ef91);}return _0x51cec4>0x0?_0x6e1646[_0x2a5a7c(0x63a,0x641)](_0x305806,_0x51cec4):0x0;}['isDuplicat'+_0x48864e(0x308,0x2a7)](_0xc7b552,_0x3b2bcf){const _0x24452e={'Jyehi':function(_0x597e81,_0x53643f){return _0x597e81>=_0x53643f;}};function _0x41460a(_0x5a5a86,_0x52f508){return _0x48864e(_0x52f508- -0x3c6,_0x5a5a86);}const _0x37b266=new Set(_0xc7b552['sourceMemo'+_0x5d0d7b(0x1f1,0x1c4)][_0x5d0d7b(0x1d8,0x1f3)](_0x4d818c=>_0x4d818c['id']));function _0x5d0d7b(_0x31a48c,_0x137e58){return _0x48864e(_0x31a48c- -0x18d,_0x137e58);}for(const _0x583fba of _0x3b2bcf){const _0x391f7d=this[_0x5d0d7b(0x1fa,0x242)+_0x41460a(-0xd6,-0xdd)](_0x583fba);if(!_0x391f7d)continue;const _0x57d659=new Set(_0x391f7d[_0x41460a(-0xfd,-0xdb)+'ryIds']),_0x18677f=[..._0x37b266][_0x41460a(0x1,-0x2d)](_0x41e781=>_0x57d659[_0x41460a(-0x123,-0xd1)](_0x41e781))[_0x5d0d7b(0x1e8,0x1b3)],_0x5f48b7=_0x18677f/Math['max'](_0x37b266[_0x41460a(-0x8a,-0xd5)],_0x57d659[_0x41460a(-0xcc,-0xd5)]);if(_0x24452e[_0x41460a(-0x7b,-0x90)](_0x5f48b7,0.7))return!![];}return![];}[_0x48864e(0x314,0x2fe)+_0x46bbe8(-0x86,-0x34)](_0x33779b){const _0x112b88={'avJNb':function(_0x522d81,_0x5b3d58){return _0x522d81*_0x5b3d58;},'AryLr':_0x550751(0x415,0x3b0)+_0x12ca32(0xa,-0x1d)},_0x56b897=[];_0x56b897[_0x12ca32(0x85,0xd1)](_0x12ca32(0x38,0x70)+_0x33779b['pattern']),_0x56b897[_0x550751(0x3b0,0x3ee)](''),_0x56b897[_0x12ca32(0x85,0xba)]('Category:\x20'+_0x33779b[_0x550751(0x41f,0x402)]);function _0x12ca32(_0x3cc67b,_0x311d63){return _0x46bbe8(_0x3cc67b-0xc4,_0x311d63);}_0x56b897['push'](_0x550751(0x362,0x36f)+_0x33779b[_0x12ca32(0xd,-0x59)+_0x12ca32(0xa0,0x6c)][_0x550751(0x3d9,0x400)]+'\x20memories');function _0x550751(_0x5a7512,_0x3fa82e){return _0x46bbe8(_0x3fa82e-0x42d,_0x5a7512);}_0x56b897[_0x12ca32(0x85,0xa8)](_0x550751(0x3ab,0x38b)+':\x20'+_0x112b88[_0x12ca32(0x8,-0x1d)](_0x33779b['confidence'],0x64)['toFixed'](0x0)+'%');if(_0x33779b[_0x12ca32(0xd,-0x13)+'ries'][_0x12ca32(0x97,0x54)]>0x1){_0x56b897[_0x12ca32(0x85,0xe0)](''),_0x56b897[_0x12ca32(0x85,0x58)](_0x112b88[_0x550751(0x350,0x37f)]);for(const _0x220119 of _0x33779b['sourceMemo'+_0x550751(0x400,0x409)][_0x12ca32(0x23,0x41)](0x0,0x3)){const _0x19760c=_0x220119[_0x12ca32(0xcb,0x89)]['split']('\x0a')[0x0]['slice'](0x0,0x96);_0x56b897['push']('-\x20'+_0x19760c);}}return _0x56b897[_0x12ca32(0x1e,-0x19)]('\x0a');}[_0x48864e(0x387,0x339)+_0x46bbe8(-0xb9,-0x108)](_0x5b7705){function _0x1e3cbf(_0xd4fd38,_0x54dd31){return _0x46bbe8(_0x54dd31-0x11c,_0xd4fd38);}const _0x29f8ca={'ebmqx':function(_0x254ceb,_0x1aabed,_0x4127b0){return _0x254ceb(_0x1aabed,_0x4127b0);},'sPAyK':_0x4a1c0b(0x417,0x400),'iiTkv':'odzUr'},_0x189d75=_0x5b7705[_0x1e3cbf(0xb3,0x115)][_0x1e3cbf(0x6d,0x69)](_0x4cac0f=>_0x4cac0f[_0x1e3cbf(0xe4,0xc0)]('meta:'));if(!_0x189d75)return null;function _0x4a1c0b(_0x332b4d,_0x55afe9){return _0x46bbe8(_0x332b4d-0x45f,_0x55afe9);}try{const _0x9735bb=Buffer['from'](_0x189d75[_0x1e3cbf(0x87,0x7b)](0x5),'base64')[_0x4a1c0b(0x42d,0x40b)](_0x29f8ca['sPAyK']);return JSON[_0x1e3cbf(0x44,0x59)](_0x9735bb);}catch{if(_0x29f8ca[_0x1e3cbf(0x9b,0xad)]!==_0x4a1c0b(0x45e,0x4b1))_0x95b4c+=AzqMcQ[_0x4a1c0b(0x40b,0x3a6)](_0x46d236,_0x40a688[_0x15e41a]['embedding'],_0x31dbc3[_0x329afe][_0x1e3cbf(0xe2,0x112)]),_0x229cbb++;else return null;}}['averageEmb'+'eddings'](_0x1167a2){const _0x4e54d0={'fDDse':function(_0x47706f,_0x384e1a){return _0x47706f===_0x384e1a;}};if(_0x4e54d0[_0x5ecde1(0x2dc,0x2ee)](_0x1167a2[_0x5ecde1(0x2f1,0x2c4)],0x0))return[];const _0x1996d4=_0x1167a2[0x0]['length'],_0x2efb02=new Array(_0x1996d4)[_0x5ecde1(0x2a4,0x2e9)](0x0);function _0x3fff14(_0x3b2030,_0x307d06){return _0x48864e(_0x307d06- -0x1b8,_0x3b2030);}for(const _0x1a854b of _0x1167a2){for(let _0x5d8ea9=0x0;_0x5d8ea9<_0x1996d4;_0x5d8ea9++){_0x2efb02[_0x5d8ea9]+=_0x1a854b[_0x5d8ea9];}}function _0x5ecde1(_0x8c7103,_0xe40aef){return _0x48864e(_0x8c7103- -0x84,_0xe40aef);}for(let _0x1a7fdb=0x0;_0x1a7fdb<_0x1996d4;_0x1a7fdb++){_0x2efb02[_0x1a7fdb]/=_0x1167a2[_0x5ecde1(0x2f1,0x32a)];}return _0x2efb02;}['absorbInto'+_0x46bbe8(-0x11,0x2b)](_0x4c2fd7){const _0x509a8c={'IaMQH':function(_0x4068b9,_0x3f8653){return _0x4068b9*_0x3f8653;},'HYVqC':function(_0x26d9bb,_0x3b0891){return _0x26d9bb+_0x3b0891;},'TiIhN':_0x313cd3(-0xdf,-0xab),'xgokS':_0x1679ef(-0xac,-0xbb),'EmjWe':_0x313cd3(-0x113,-0x128),'jNfmJ':function(_0xaae612,_0x22520e){return _0xaae612===_0x22520e;},'Dtcgy':function(_0x1297d8,_0x28b137,_0xfcfa9b){return _0x1297d8(_0x28b137,_0xfcfa9b);},'YVYcS':function(_0x1b3dae,_0x237e67){return _0x1b3dae<_0x237e67;},'CTzyT':_0x1679ef(-0x5f,-0x53),'YLtQG':_0x1679ef(-0xcc,-0x11f)};if(!_0x4c2fd7['embedding']||_0x4c2fd7[_0x1679ef(-0x8f,-0xdb)]===_0x509a8c[_0x313cd3(-0x186,-0x139)]){if(_0x509a8c['jNfmJ'](_0x313cd3(-0x103,-0xfb),_0x313cd3(-0x137,-0xfe)))_0x31d494[_0x1c9ef9][_0x313cd3(-0xcf,-0xc7)]&&_0x5cea3c[_0x455ecf][_0x1679ef(-0x6e,-0xce)]&&(_0xe34b20+=_0x5632bf(_0x5174e6[_0xf43109][_0x313cd3(-0xcf,-0x9d)],_0x467001[_0x5914f6][_0x313cd3(-0xcf,-0x78)]),_0x30fdb4++);else return{'absorbed':![]};}function _0x1679ef(_0x34cc1e,_0x5a1089){return _0x46bbe8(_0x34cc1e- -0x64,_0x5a1089);}function _0x313cd3(_0x20e521,_0x5dc4bd){return _0x46bbe8(_0x20e521- -0xc5,_0x5dc4bd);}const _0x3426c3=this['db'][_0x313cd3(-0xde,-0xfd)+'es']({'limit':0xc8})[_0x313cd3(-0xce,-0xe9)](_0x4b6654=>_0x4b6654[_0x1679ef(-0x8f,-0xad)]===_0x1679ef(-0xb2,-0xe1));for(const _0x4d7028 of _0x3426c3){if(_0x509a8c['jNfmJ'](_0x313cd3(-0xc1,-0x8a),'Nhegj')){const _0x2d36d7=_0x36446f['floor'](BRbyKI['IaMQH'](_0x29fbfe[_0x313cd3(-0xd8,-0xc4)](),BRbyKI['HYVqC'](_0x1ab373,0x1)));[_0x2a02ff[_0x395c58],_0x36a8c7[_0x2d36d7]]=[_0x6920a2[_0x2d36d7],_0x509e28[_0x4742b1]],_0x3f1d5f[_0x1679ef(-0xa3,-0x55)](_0xbca732[_0x5814eb]);}else{if(!_0x4d7028['embedding'])continue;const _0x2ad4b3=_0x509a8c[_0x313cd3(-0x130,-0xe0)](cosineSimilarity,_0x4c2fd7[_0x313cd3(-0xcf,-0x130)],_0x4d7028['embedding']);if(_0x509a8c[_0x1679ef(-0x81,-0x6b)](_0x2ad4b3,0.8))continue;const _0x31ec28=this[_0x313cd3(-0xe0,-0x7e)+'adata'](_0x4d7028);if(!_0x31ec28)continue;if(_0x31ec28[_0x1679ef(-0x11b,-0x108)+_0x1679ef(-0x10d,-0xc1)][_0x313cd3(-0x136,-0xdc)](_0x4c2fd7['id']))return{'absorbed':![]};_0x31ec28[_0x1679ef(-0x11b,-0x131)+'ryIds'][_0x1679ef(-0xa3,-0x8d)](_0x4c2fd7['id']),_0x31ec28[_0x1679ef(-0x121,-0xf1)+_0x313cd3(-0x117,-0x136)]=(_0x31ec28[_0x313cd3(-0x182,-0x1a8)+_0x313cd3(-0x117,-0x161)]||0x0)+0x1,_0x31ec28[_0x313cd3(-0xdb,-0xd1)+_0x1679ef(-0xf9,-0xb1)]=new Date()[_0x1679ef(-0xd4,-0x13a)+'g']();const _0x45367c=_0x1679ef(-0x7c,-0x4d)+Buffer['from'](JSON[_0x1679ef(-0x66,-0x92)](_0x31ec28))['toString'](_0x509a8c[_0x313cd3(-0xf6,-0xa6)]),_0xf3f8e=_0x4d7028[_0x313cd3(-0xcc,-0xf5)][_0x313cd3(-0xce,-0x6b)](_0xcb1836=>!_0xcb1836[_0x313cd3(-0x121,-0x174)](_0x1679ef(-0x7c,-0x3c))),_0x4acc1f='-\x20'+_0x4c2fd7[_0x1679ef(-0x5d,-0x8c)][_0x1679ef(-0x67,-0x6a)]('\x0a')[0x0][_0x1679ef(-0x105,-0x13f)](0x0,0x96);let _0x38ffec=_0x4d7028['content'];const _0x2b8b16=_0x38ffec[_0x313cd3(-0xc8,-0xea)]('\x0a')[_0x1679ef(-0x6d,-0xa0)](_0x45460c=>_0x45460c['startsWith']('-\x20'));if(_0x2b8b16[_0x313cd3(-0xf2,-0xb1)]<0x5){if(_0x509a8c[_0x313cd3(-0x129,-0xd7)]!==_0x509a8c[_0x313cd3(-0x118,-0xe4)])_0x38ffec=_0x38ffec[_0x1679ef(-0xe5,-0xeb)]()+'\x0a'+_0x4acc1f;else{const _0x107e8e=_0xaa9a4[_0x1679ef(-0x6b,-0x62)]['find'](_0x2edf65=>_0x2edf65[_0x313cd3(-0x121,-0x13c)](_0x1679ef(-0x7c,-0x1c)));if(!_0x107e8e)return null;try{const _0x541ee5=_0x2d29f3[_0x1679ef(-0x8c,-0xe4)](_0x107e8e['slice'](0x5),BRbyKI[_0x1679ef(-0x95,-0x65)])[_0x313cd3(-0xf7,-0x95)](BRbyKI[_0x313cd3(-0xff,-0x117)]);return _0x159e3c[_0x313cd3(-0x188,-0x18d)](_0x541ee5);}catch{return null;}}}return this['db'][_0x313cd3(-0x12e,-0xf5)+'ry'](_0x4d7028['id'],{'content':_0x38ffec,'tags':[..._0xf3f8e,_0x45367c]}),{'absorbed':!![],'skillId':_0x4d7028['id']};}}return{'absorbed':![]};}}
@@ -1,7 +1 @@
1
- /**
2
- * Skill Crystallization Module
3
- *
4
- * ACT-R Knowledge Compilation 기반 스킬 결정화 시스템.
5
- */
6
- export { SkillEvaluator } from './evaluator.js';
7
- //# sourceMappingURL=index.js.map
1
+ function _0x21ac(){var _0x5609ca=['mtmZvLnJsufd','mJbXwuXszw0','odu0ndi4zvDcBK9N','nZKYnZK1Au5Sre5o','mJaYndC2nwr1ELzPCa','mteYmdiYqMLcvxnT','mZu1nZCXohHjBgzJBG','mty2nZrVzuLeDve','nfbRq2LXBG','mZC5ote2meTXA014ta'];_0x21ac=function(){return _0x5609ca;};return _0x21ac();}(function(_0x15a2f1,_0x1923e0){var _0x5e0cba=_0x15a2f1();function _0x57e0f5(_0x27080a,_0x1ab93c){return _0x5287(_0x27080a-0x19,_0x1ab93c);}function _0x3a1df5(_0x34ce2c,_0xb3e175){return _0x5287(_0xb3e175-0x29a,_0x34ce2c);}while(!![]){try{var _0x49019a=parseInt(_0x57e0f5(0xb0,0xb0))/0x1*(parseInt(_0x57e0f5(0xb7,0xb5))/0x2)+parseInt(_0x3a1df5(0x337,0x336))/0x3+-parseInt(_0x57e0f5(0xb4,0xaf))/0x4+-parseInt(_0x3a1df5(0x33a,0x337))/0x5+-parseInt(_0x57e0f5(0xaf,0xb1))/0x6*(-parseInt(_0x3a1df5(0x32f,0x333))/0x7)+-parseInt(_0x57e0f5(0xb1,0xad))/0x8+parseInt(_0x57e0f5(0xb8,0xbc))/0x9*(parseInt(_0x3a1df5(0x335,0x334))/0xa);if(_0x49019a===_0x1923e0)break;else _0x5e0cba['push'](_0x5e0cba['shift']());}catch(_0x7cd167){_0x5e0cba['push'](_0x5e0cba['shift']());}}}(_0x21ac,0x3a2b3));function _0x5287(_0x8de563,_0x6c1122){_0x8de563=_0x8de563-0x96;var _0x21acd0=_0x21ac();var _0x52876d=_0x21acd0[_0x8de563];if(_0x5287['ChLQps']===undefined){var _0x362788=function(_0x1fc2b8){var _0x3a0f8a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0xea894b='',_0x461b0c='';for(var _0x4a2148=0x0,_0x1a50cc,_0x72b903,_0x34f8ba=0x0;_0x72b903=_0x1fc2b8['charAt'](_0x34f8ba++);~_0x72b903&&(_0x1a50cc=_0x4a2148%0x4?_0x1a50cc*0x40+_0x72b903:_0x72b903,_0x4a2148++%0x4)?_0xea894b+=String['fromCharCode'](0xff&_0x1a50cc>>(-0x2*_0x4a2148&0x6)):0x0){_0x72b903=_0x3a0f8a['indexOf'](_0x72b903);}for(var _0x2c06c=0x0,_0x4a057b=_0xea894b['length'];_0x2c06c<_0x4a057b;_0x2c06c++){_0x461b0c+='%'+('00'+_0xea894b['charCodeAt'](_0x2c06c)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x461b0c);};_0x5287['Ccojjb']=_0x362788,_0x5287['NYejti']={},_0x5287['ChLQps']=!![];}var _0x2ae3f2=_0x21acd0[0x0],_0x58d4b3=_0x8de563+_0x2ae3f2,_0x47bc34=_0x5287['NYejti'][_0x58d4b3];return!_0x47bc34?(_0x52876d=_0x5287['Ccojjb'](_0x52876d),_0x5287['NYejti'][_0x58d4b3]=_0x52876d):_0x52876d=_0x47bc34,_0x52876d;}export{SkillEvaluator}from'./evaluator.js';
@@ -1,7 +1 @@
1
- /**
2
- * Skill Crystallization Types
3
- *
4
- * ACT-R Knowledge Compilation 기반 스킬 결정화 내부 타입.
5
- */
6
- export {};
7
- //# sourceMappingURL=types.js.map
1
+ export{};
@@ -134,6 +134,7 @@ export declare class A2AClient {
134
134
  parent_id?: string;
135
135
  chunk_index?: number;
136
136
  chunk_total?: number;
137
+ quality_score?: number;
137
138
  }>): Promise<{
138
139
  created: number;
139
140
  failed: number;