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,77 +1 @@
1
- /**
2
- * 메모리 content에서 .md 파일 참조를 감지합니다.
3
- */
4
- import { existsSync } from 'fs';
5
- import { resolve, isAbsolute } from 'path';
6
- /**
7
- * 메모리 content에서 .md 파일 참조 경로를 추출합니다.
8
- *
9
- * 감지 패턴:
10
- * 1. Markdown 링크: [텍스트](path.md) — ./ prefix 유무 모두
11
- * 2. 직접 경로: Source: MEMORY.md, 참조: reference_xxx.md
12
- * 3. 괄호 안 경로: (./path.md) 또는 (path.md)
13
- * 4. 절대 경로: /Users/.../file.md
14
- * 5. 상대 경로: docs/plans/FILE.md, ../api/README.md
15
- * 6. JSON filePath: {"filePath":"/path/to/file.md"}
16
- *
17
- * 파일 존재 여부를 확인하여 실제 존재하는 경로만 반환합니다.
18
- */
19
- export function detectMdReferences(content, projectPath) {
20
- const refs = new Set();
21
- let match;
22
- // 1. Markdown 링크: [텍스트](path.md) — ./ 있든 없든
23
- const mdLinkPattern = /\[.*?\]\(([^)]+\.md)\)/g;
24
- while ((match = mdLinkPattern.exec(content)) !== null) {
25
- refs.add(match[1]);
26
- }
27
- // 2. 직접 경로: Source: MEMORY.md, 참조: reference_xxx.md
28
- const directPattern = /(?:Source|참조|reference|파일|문서):\s*(\S+\.md)/gi;
29
- while ((match = directPattern.exec(content)) !== null) {
30
- refs.add(match[1]);
31
- }
32
- // 3. 괄호 안 경로: (path.md)
33
- const parenPattern = /\(([^)\s]+\.md)\)/g;
34
- while ((match = parenPattern.exec(content)) !== null) {
35
- refs.add(match[1]);
36
- }
37
- // 4. 절대 경로 (projectPath 하위만): /Users/.../project/docs/file.md
38
- const absolutePattern = new RegExp(escapeRegex(projectPath) + '/([^\\s"\'\\)]+\\.md)', 'g');
39
- while ((match = absolutePattern.exec(content)) !== null) {
40
- refs.add(match[1]); // projectPath 이후 상대경로
41
- }
42
- // 5. 상대 경로: docs/path/FILE.md, ../api/README.md (슬래시 포함)
43
- const relativePathPattern = /(?:^|[\s"'(])(\.\.\/?[^\s"')]+\.md|[a-zA-Z0-9_-]+\/[^\s"')]+\.md)/gm;
44
- while ((match = relativePathPattern.exec(content)) !== null) {
45
- refs.add(match[1]);
46
- }
47
- // 6. JSON filePath: "filePath":"...path.md"
48
- const jsonPathPattern = /"filePath"\s*:\s*"([^"]+\.md)"/g;
49
- while ((match = jsonPathPattern.exec(content)) !== null) {
50
- const fp = match[1];
51
- // 프로젝트 경로 하위면 상대경로로 변환
52
- if (fp.startsWith(projectPath)) {
53
- refs.add(fp.slice(projectPath.length + 1));
54
- }
55
- else {
56
- refs.add(fp);
57
- }
58
- }
59
- // 파일 존재 확인 — 실제 존재하는 파일만 반환
60
- return Array.from(refs).filter(ref => {
61
- let fullPath;
62
- if (isAbsolute(ref)) {
63
- fullPath = ref;
64
- }
65
- else {
66
- fullPath = resolve(projectPath, ref);
67
- }
68
- // node_modules, .git, dist 제외
69
- if (/[/\\](node_modules|\.git|dist)[/\\]/.test(fullPath))
70
- return false;
71
- return existsSync(fullPath);
72
- });
73
- }
74
- function escapeRegex(str) {
75
- return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
76
- }
77
- //# sourceMappingURL=file-reference.js.map
1
+ (function(_0xdcb447,_0x474251){const _0x3c995e=_0xdcb447();function _0x2ff158(_0x29c469,_0x4797d1){return _0x1066(_0x29c469- -0x1c0,_0x4797d1);}function _0x303b7d(_0x4e35e8,_0x3804a8){return _0x1066(_0x3804a8-0x266,_0x4e35e8);}while(!![]){try{const _0x348508=-parseInt(_0x2ff158(-0xa0,-0xa2))/0x1*(-parseInt(_0x303b7d(0x38d,0x382))/0x2)+parseInt(_0x2ff158(-0x9b,-0x92))/0x3*(-parseInt(_0x303b7d(0x36d,0x37a))/0x4)+parseInt(_0x2ff158(-0x99,-0x96))/0x5*(-parseInt(_0x2ff158(-0xb2,-0xa9))/0x6)+-parseInt(_0x2ff158(-0xb6,-0xb0))/0x7*(parseInt(_0x2ff158(-0xb8,-0xc4))/0x8)+-parseInt(_0x303b7d(0x385,0x373))/0x9*(parseInt(_0x2ff158(-0xa2,-0xae))/0xa)+-parseInt(_0x2ff158(-0xaa,-0xac))/0xb*(-parseInt(_0x2ff158(-0x9f,-0x95))/0xc)+-parseInt(_0x303b7d(0x381,0x37f))/0xd*(-parseInt(_0x2ff158(-0xa1,-0x92))/0xe);if(_0x348508===_0x474251)break;else _0x3c995e['push'](_0x3c995e['shift']());}catch(_0x508f8c){_0x3c995e['push'](_0x3c995e['shift']());}}}(_0x2055,0x93791));function _0x1066(_0xae902b,_0x492202){_0xae902b=_0xae902b-0x107;const _0x205526=_0x2055();let _0x1066dd=_0x205526[_0xae902b];if(_0x1066['OiXgtt']===undefined){var _0x2f4e9b=function(_0x55bd40){const _0x50ba6d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2746fc='',_0x287972='';for(let _0x348065=0x0,_0xe73f9c,_0x584c33,_0x4a36d1=0x0;_0x584c33=_0x55bd40['charAt'](_0x4a36d1++);~_0x584c33&&(_0xe73f9c=_0x348065%0x4?_0xe73f9c*0x40+_0x584c33:_0x584c33,_0x348065++%0x4)?_0x2746fc+=String['fromCharCode'](0xff&_0xe73f9c>>(-0x2*_0x348065&0x6)):0x0){_0x584c33=_0x50ba6d['indexOf'](_0x584c33);}for(let _0x255fbe=0x0,_0x515051=_0x2746fc['length'];_0x255fbe<_0x515051;_0x255fbe++){_0x287972+='%'+('00'+_0x2746fc['charCodeAt'](_0x255fbe)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x287972);};_0x1066['ITWMfF']=_0x2f4e9b,_0x1066['owrSjS']={},_0x1066['OiXgtt']=!![];}const _0x197179=_0x205526[0x0],_0xdb8fca=_0xae902b+_0x197179,_0x523b3e=_0x1066['owrSjS'][_0xdb8fca];return!_0x523b3e?(_0x1066dd=_0x1066['ITWMfF'](_0x1066dd),_0x1066['owrSjS'][_0xdb8fca]=_0x1066dd):_0x1066dd=_0x523b3e,_0x1066dd;}function _0x2055(){const _0x2b5855=['mZq0vwjfAhno','uhnNyNK','mtCZodbsvffnEwC','ywrK','DMPOwKu','ndaZALL3rgLy','xcqM','BgvUz3rO','mZmYBwzZvNjm','C3rHCNrZv2L0Aa','mJiWvxHsz05W','mZKXmtC0vxDovwzp','nde3mvnuzvnUrW','nty3nNfKDgTJBW','B0zWtMS','yvrivNm','lYHBxLXZiIDCkq','ntmZmuD0vungsW','sfHzyxO','mtm1nJGXnvrcC0DMBG','wgvnAxC','DgvZDa','C2XPy2u','Egvhzg0','zxHLyW','yuTRD3u','mtmZnKjRt2fqqG','CMvWBgfJzq','ndG1mtD5tKHID08','xsTClM1Kkq','vhLXywG','ndKXnJD2De1IzMS','nMndCwDLwq','sKfkzNi','D0rhtKy','zNjVBq','se9Osvq','C0rjB3K'];_0x2055=function(){return _0x2b5855;};return _0x2055();}import{existsSync}from'fs';import{resolve,isAbsolute}from'path';export function detectMdReferences(_0x5d09e7,_0x1ccbde){const _0x4815e5={'Nldjk':function(_0x3e91f2,_0x69f9d0,_0x6a5db9){return _0x3e91f2(_0x69f9d0,_0x6a5db9);},'HXYaz':function(_0x1f2c8f,_0x172c48){return _0x1f2c8f(_0x172c48);},'aKkwu':function(_0x5532a5,_0x1ad7c9){return _0x5532a5+_0x1ad7c9;},'XeMiw':function(_0x26436b,_0x146212){return _0x26436b(_0x146212);},'HOhIT':function(_0x183a71,_0x41985c){return _0x183a71!==_0x41985c;},'bNZDI':function(_0x35269f,_0x2f968f){return _0x35269f+_0x2f968f;},'aTHVs':_0x369c6c(0x40d,0x41b)+_0x369c6c(0x3f4,0x3ff),'Psgby':function(_0x118cc4,_0x14dee8){return _0x118cc4!==_0x14dee8;},'xeGdm':_0x10fbe8(-0x140,-0x131),'vjhZE':function(_0xb7360e,_0x3df2e9){return _0xb7360e!==_0x3df2e9;},'wDGNF':_0x10fbe8(-0x14b,-0x147),'JAJfr':'SlBCt'},_0x313482=new Set();let _0x1369e9;const _0x41894a=/\[.*?\]\(([^)]+\.md)\)/g;while((_0x1369e9=_0x41894a[_0x369c6c(0x415,0x410)](_0x5d09e7))!==null){_0x313482[_0x369c6c(0x400,0x3fe)](_0x1369e9[0x1]);}const _0x2ab8a3=/(?:Source|참조|reference|파일|문서):\s*(\S+\.md)/gi;while((_0x1369e9=_0x2ab8a3['exec'](_0x5d09e7))!==null){_0x313482[_0x10fbe8(-0x138,-0x13c)](_0x1369e9[0x1]);}const _0x36ba42=/\(([^)\s]+\.md)\)/g;while(_0x4815e5[_0x10fbe8(-0x130,-0x141)](_0x1369e9=_0x36ba42['exec'](_0x5d09e7),null)){_0x313482[_0x10fbe8(-0x14a,-0x13c)](_0x1369e9[0x1]);}function _0x369c6c(_0x2bdea7,_0x50992a){return _0x1066(_0x2bdea7-0x2e9,_0x50992a);}const _0x401705=new RegExp(_0x4815e5['bNZDI'](_0x4815e5[_0x369c6c(0x40f,0x407)](escapeRegex,_0x1ccbde),_0x4815e5[_0x369c6c(0x40c,0x410)]),'g');while(_0x4815e5[_0x369c6c(0x3fe,0x3f0)](_0x1369e9=_0x401705[_0x369c6c(0x415,0x40a)](_0x5d09e7),null)){if(_0x369c6c(0x40b,0x40a)!==_0x4815e5[_0x369c6c(0x414,0x409)]){let _0xe94e05;_0x3553ea(_0x1d0dbd)?_0xe94e05=_0x51d88f:_0xe94e05=_0x4815e5['Nldjk'](_0x2014fd,_0x345109,_0xa5fe4f);if(/[/\\](node_modules|\.git|dist)[/\\]/[_0x10fbe8(-0x139,-0x12a)](_0xe94e05))return![];return _0x4815e5[_0x10fbe8(-0x124,-0x12d)](_0x201fd1,_0xe94e05);}else _0x313482[_0x369c6c(0x400,0x411)](_0x1369e9[0x1]);}function _0x10fbe8(_0x40ac41,_0x257951){return _0x1066(_0x257951- -0x253,_0x40ac41);}const _0x21c92e=/(?:^|[\s"'(])(\.\.\/?[^\s"')]+\.md|[a-zA-Z0-9_-]+\/[^\s"')]+\.md)/gm;while(_0x4815e5[_0x10fbe8(-0x12e,-0x13b)](_0x1369e9=_0x21c92e['exec'](_0x5d09e7),null)){_0x4815e5[_0x369c6c(0x3fb,0x3ff)](_0x4815e5[_0x369c6c(0x3f9,0x3f4)],_0x4815e5[_0x10fbe8(-0x153,-0x144)])?_0x313482[_0x10fbe8(-0x12e,-0x13c)](_0x1369e9[0x1]):_0x209551[_0x10fbe8(-0x13b,-0x13c)](_0x2e40f2['slice'](_0x4815e5[_0x369c6c(0x3f0,0x3ff)](_0x1515af[_0x369c6c(0x404,0x3f1)],0x1)));}const _0x14064c=/"filePath"\s*:\s*"([^"]+\.md)"/g;while(_0x4815e5[_0x369c6c(0x3fe,0x407)](_0x1369e9=_0x14064c[_0x369c6c(0x415,0x40d)](_0x5d09e7),null)){const _0x25cd2b=_0x1369e9[0x1];_0x25cd2b[_0x369c6c(0x406,0x419)](_0x1ccbde)?_0x10fbe8(-0x145,-0x140)!==_0x10fbe8(-0x140,-0x140)?_0x348065[_0x10fbe8(-0x12b,-0x13c)](_0xe73f9c[0x1]):_0x313482[_0x369c6c(0x400,0x3ef)](_0x25cd2b[_0x369c6c(0x413,0x41a)](_0x1ccbde[_0x10fbe8(-0x12f,-0x138)]+0x1)):_0x313482[_0x369c6c(0x400,0x3f7)](_0x25cd2b);}return Array[_0x369c6c(0x3fa,0x3e7)](_0x313482)['filter'](_0x315879=>{let _0x9c1ca6;function _0x16eb32(_0x325d07,_0x9d1d60){return _0x369c6c(_0x325d07- -0x5c9,_0x9d1d60);}_0x4815e5[_0x7081ed(0x4e7,0x4d7)](isAbsolute,_0x315879)?_0x9c1ca6=_0x315879:_0x9c1ca6=_0x4815e5['Nldjk'](resolve,_0x1ccbde,_0x315879);function _0x7081ed(_0x4fdbd6,_0x113757){return _0x369c6c(_0x113757-0xc8,_0x4fdbd6);}if(/[/\\](node_modules|\.git|dist)[/\\]/[_0x7081ed(0x4e1,0x4da)](_0x9c1ca6))return![];return _0x4815e5[_0x16eb32(-0x1b8,-0x1ad)](existsSync,_0x9c1ca6);});}function escapeRegex(_0x5586b4){function _0x117579(_0x11846e,_0x379475){return _0x1066(_0x379475- -0x26a,_0x11846e);}function _0x1bb66b(_0x5f5a22,_0x45c960){return _0x1066(_0x5f5a22- -0x3b0,_0x45c960);}return _0x5586b4[_0x1bb66b(-0x2a7,-0x2b0)](/[.*+?^${}()|[\]\\]/g,_0x117579(-0x148,-0x150));}
@@ -1,85 +1 @@
1
- /**
2
- * Sensitive Information Filter
3
- *
4
- * 메모리 콘텐츠에서 민감 정보를 탐지하고 마스킹합니다.
5
- */
6
- import { SENSITIVE_PATTERNS } from '../types/index.js';
7
- // WARNING: PATTERN_LABELS와 SENSITIVE_PATTERNS(types/index.ts)의 인덱스는 반드시 동기화되어야 함.
8
- // SENSITIVE_PATTERNS에 패턴을 추가/삭제할 때 이 배열도 동일한 순서로 수정 필수.
9
- // 순서 불일치 시 잘못된 레이블로 마스킹되어 디버깅이 어려워짐.
10
- const PATTERN_LABELS = [
11
- // --- 구체적 패턴 우선 (Cloud Provider Keys) ---
12
- 'AWS_ACCESS_KEY',
13
- 'AWS_SECRET_KEY',
14
- 'GOOGLE_API_KEY',
15
- 'AZURE_KEY',
16
- // --- API Keys & Secrets (기존 8개 유지) ---
17
- 'OPENAI_KEY',
18
- 'STRIPE_KEY',
19
- 'GITHUB_TOKEN',
20
- 'API_KEY',
21
- 'SECRET',
22
- 'BEARER_TOKEN',
23
- 'EMAIL',
24
- 'PRIVATE_KEY_RSA',
25
- // --- Service Tokens ---
26
- 'SLACK_TOKEN',
27
- 'DISCORD_TOKEN',
28
- 'NPM_TOKEN',
29
- 'PYPI_TOKEN',
30
- // --- Database / Connection ---
31
- 'DB_CONNECTION',
32
- 'DB_ENV_VAR',
33
- // --- SSH / Certificates ---
34
- 'PRIVATE_KEY_OTHER',
35
- 'CERTIFICATE',
36
- // --- JWT / Session ---
37
- 'JWT_TOKEN',
38
- // --- Personal Info (Korean) ---
39
- 'KOREAN_SSN',
40
- 'KOREAN_BRN',
41
- ];
42
- /**
43
- * 콘텐츠에서 민감 정보를 [REDACTED_<type>]로 치환
44
- */
45
- export function filterSensitiveInfo(content) {
46
- let filtered = content;
47
- let matchCount = 0;
48
- for (let i = 0; i < SENSITIVE_PATTERNS.length; i++) {
49
- const pattern = new RegExp(SENSITIVE_PATTERNS[i].source, SENSITIVE_PATTERNS[i].flags);
50
- const label = PATTERN_LABELS[i] ?? 'SENSITIVE';
51
- const matches = filtered.match(pattern);
52
- if (matches) {
53
- matchCount += matches.length;
54
- filtered = filtered.replace(pattern, `[REDACTED_${label}]`);
55
- }
56
- }
57
- return { filtered, matchCount };
58
- }
59
- /**
60
- * 파일 경로가 민감한 패턴에 해당하는지 검사
61
- */
62
- export function isSensitivePath(filePath, excludePatterns) {
63
- const fileName = filePath.split('/').pop() ?? filePath;
64
- for (const pattern of excludePatterns) {
65
- if (pattern.startsWith('*')) {
66
- // *.key, *.pem 등 확장자 매칭
67
- const ext = pattern.slice(1); // .key, .pem
68
- if (fileName.endsWith(ext))
69
- return true;
70
- }
71
- else if (pattern.endsWith('*')) {
72
- // sk-*, sk_live_* 등 접두사 매칭
73
- const prefix = pattern.slice(0, -1);
74
- if (fileName.startsWith(prefix))
75
- return true;
76
- }
77
- else {
78
- // .env, credentials.json 등 정확 매칭
79
- if (fileName === pattern)
80
- return true;
81
- }
82
- }
83
- return false;
84
- }
85
- //# sourceMappingURL=filter.js.map
1
+ function _0xbdc9b8(_0x1eed7f,_0xc1ad74){return _0x2fed(_0xc1ad74- -0x1a4,_0x1eed7f);}(function(_0x2b771c,_0x1d7156){const _0x4809ee=_0x2b771c();function _0x18dca5(_0x5b2c2e,_0x2f2891){return _0x2fed(_0x5b2c2e- -0x11e,_0x2f2891);}function _0xfa9f5d(_0x35ea85,_0x25c115){return _0x2fed(_0x35ea85- -0x248,_0x25c115);}while(!![]){try{const _0x279af3=parseInt(_0xfa9f5d(-0xaa,-0xa2))/0x1+parseInt(_0xfa9f5d(-0xae,-0xa1))/0x2+parseInt(_0xfa9f5d(-0x92,-0x7c))/0x3+-parseInt(_0x18dca5(0x7b,0x7b))/0x4+-parseInt(_0x18dca5(0x86,0x9a))/0x5+-parseInt(_0x18dca5(0x7d,0x87))/0x6+-parseInt(_0x18dca5(0xa0,0xb6))/0x7*(-parseInt(_0xfa9f5d(-0x93,-0x81))/0x8);if(_0x279af3===_0x1d7156)break;else _0x4809ee['push'](_0x4809ee['shift']());}catch(_0x3cb081){_0x4809ee['push'](_0x4809ee['shift']());}}}(_0x4820,0xdaeb1));function _0x2fed(_0x250f8e,_0x6e7572){_0x250f8e=_0x250f8e-0x192;const _0x4820fc=_0x4820();let _0x2fed0b=_0x4820fc[_0x250f8e];if(_0x2fed['DunWfP']===undefined){var _0x5b5d80=function(_0x4af676){const _0x249058='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x240396='',_0x4df46a='';for(let _0xd54832=0x0,_0x392720,_0x3d6855,_0x328e2a=0x0;_0x3d6855=_0x4af676['charAt'](_0x328e2a++);~_0x3d6855&&(_0x392720=_0xd54832%0x4?_0x392720*0x40+_0x3d6855:_0x3d6855,_0xd54832++%0x4)?_0x240396+=String['fromCharCode'](0xff&_0x392720>>(-0x2*_0xd54832&0x6)):0x0){_0x3d6855=_0x249058['indexOf'](_0x3d6855);}for(let _0x30587a=0x0,_0x5351a0=_0x240396['length'];_0x30587a<_0x5351a0;_0x30587a++){_0x4df46a+='%'+('00'+_0x240396['charCodeAt'](_0x30587a)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4df46a);};_0x2fed['aOwnXb']=_0x5b5d80,_0x2fed['gzXWIg']={},_0x2fed['DunWfP']=!![];}const _0x5f9d74=_0x4820fc[0x0],_0xd6a93b=_0x250f8e+_0x5f9d74,_0x5a07cf=_0x2fed['gzXWIg'][_0xd6a93b];return!_0x5a07cf?(_0x2fed0b=_0x2fed['aOwnXb'](_0x2fed0b),_0x2fed['gzXWIg'][_0xd6a93b]=_0x2fed0b):_0x2fed0b=_0x5a07cf,_0x2fed0b;}import{SENSITIVE_PATTERNS}from'../types/index.js';const PATTERN_LABELS=[_0xbdc9b8(-0x5,0x10)+'_KEY',_0xbdc9b8(0x22,0x1b)+_0x584789(0x176,0x16d),_0xbdc9b8(-0x2,0xa)+_0x584789(0x177,0x16d),_0x584789(0x15a,0x171),_0xbdc9b8(-0xc,-0xe),'STRIPE_KEY',_0xbdc9b8(-0x8,0xd)+'EN','API_KEY',_0x584789(0x16c,0x174),'BEARER_TOK'+'EN',_0xbdc9b8(0x8,-0x7),_0xbdc9b8(0x1a,0x9)+_0x584789(0x193,0x187),_0x584789(0x162,0x15f)+'N','DISCORD_TO'+_0xbdc9b8(0x20,0x17),'NPM_TOKEN','PYPI_TOKEN',_0xbdc9b8(0x2b,0x16)+_0x584789(0x15d,0x16a),_0x584789(0x16e,0x182),_0x584789(0x167,0x178)+_0x584789(0x175,0x175),_0xbdc9b8(0x4,-0xd)+'E',_0x584789(0x171,0x176),_0x584789(0x175,0x160)+_0xbdc9b8(0x13,0x17),_0x584789(0x188,0x188),_0x584789(0x173,0x184)];function _0x584789(_0xe3e274,_0x3df130){return _0x2fed(_0x3df130- -0x35,_0xe3e274);}export function filterSensitiveInfo(_0x431619){function _0x3397da(_0x5be7ee,_0x10237e){return _0x584789(_0x5be7ee,_0x10237e-0x3ef);}const _0xf06558={'SOhFC':_0x3397da(0x553,0x56a),'BRyua':function(_0x3358d4,_0x4a360e){return _0x3358d4!==_0x4a360e;},'jyjNL':'wPvEJ'};function _0x264fd1(_0x273bf7,_0x1c03cf){return _0x584789(_0x273bf7,_0x1c03cf- -0x18b);}let _0x1d056c=_0x431619,_0x42ec40=0x0;for(let _0x1b0daf=0x0;_0x1b0daf<SENSITIVE_PATTERNS['length'];_0x1b0daf++){const _0x52d7d0=new RegExp(SENSITIVE_PATTERNS[_0x1b0daf]['source'],SENSITIVE_PATTERNS[_0x1b0daf][_0x264fd1(-0x2b,-0x19)]),_0x446b5c=PATTERN_LABELS[_0x1b0daf]??_0xf06558[_0x3397da(0x544,0x55a)],_0x58606b=_0x1d056c['match'](_0x52d7d0);if(_0x58606b){if(_0xf06558['BRyua'](_0x264fd1(-0xb,-0x11),_0xf06558[_0x3397da(0x586,0x572)]))_0x42ec40+=_0x58606b[_0x264fd1(-0xf,-0x1b)],_0x1d056c=_0x1d056c['replace'](_0x52d7d0,_0x264fd1(-0x3a,-0x2e)+_0x446b5c+']');else{if(_0x20e4a2[_0x3397da(0x55a,0x556)]('*')){const _0x266600=_0x48ac9b['slice'](0x1);if(_0x14a709[_0x264fd1(-0x1a,-0x14)](_0x266600))return!![];}else{if(_0x145946['endsWith']('*')){const _0x2fab65=_0x5ebfe2['slice'](0x0,-0x1);if(_0x22a395[_0x3397da(0x54a,0x556)](_0x2fab65))return!![];}else{if(_0x518031===_0x18a99d)return!![];}}}}}return{'filtered':_0x1d056c,'matchCount':_0x42ec40};}export function isSensitivePath(_0xe06e9b,_0x1c9b52){const _0x3769d4={'tBuHq':_0x566827(0x32d,0x32f),'IDrYO':_0x566827(0x312,0x30e),'DiACZ':function(_0x16fc7a,_0x4fd3f9){return _0x16fc7a===_0x4fd3f9;}};function _0x40b0ed(_0x25dafb,_0x411016){return _0x584789(_0x25dafb,_0x411016-0x1ef);}function _0x566827(_0x309906,_0x5acee0){return _0x584789(_0x5acee0,_0x309906-0x1af);}const _0x298b20=_0xe06e9b[_0x40b0ed(0x36a,0x35d)]('/')[_0x566827(0x31b,0x30a)]()??_0xe06e9b;for(const _0x2b8cd2 of _0x1c9b52){if(_0x2b8cd2[_0x566827(0x316,0x322)]('*')){if(_0x3769d4['tBuHq']===_0x3769d4['IDrYO'])_0x4902ae+=_0x13cf90[_0x40b0ed(0x35e,0x35f)],_0x4d3a57=_0x45241b[_0x566827(0x30d,0x314)](_0x320cb9,_0x40b0ed(0x348,0x34c)+_0x194b60+']');else{const _0x2f7762=_0x2b8cd2[_0x566827(0x322,0x337)](0x1);if(_0x298b20[_0x566827(0x326,0x33b)](_0x2f7762))return!![];}}else{if(_0x2b8cd2[_0x566827(0x326,0x315)]('*')){const _0x23265d=_0x2b8cd2[_0x566827(0x322,0x326)](0x0,-0x1);if(_0x298b20[_0x40b0ed(0x354,0x356)](_0x23265d))return!![];}else{if(_0x3769d4[_0x40b0ed(0x360,0x36c)](_0x298b20,_0x2b8cd2))return!![];}}}return![];}function _0x4820(){const _0xf1622f=['C3bSAxq','nte3odqWnwPtA3D1tW','BgvUz3rO','qvPvuKvFs0vz','zMXHz3m','C2XPy2u','u0vduKvu','wv9pveHfuG','sLDux1rps0vo','zw5KC1DPDgG','ufjjvKfurv9lrq','r09pr0Xfx0fqsq','rLrRD2W','u0vou0Lusvzf','r0Lusfvcx1rpsW','rgLbq1O','BLPgyNm','qvDtx0fdq0vtuW','nJa1mJK2AMjItLDM','mtmWnJi1n1rqtuLVsa','rejFru5wx1zbuG','ANLQtKW','s09srufox0jstG','rejFq09otKvdva','s0vo','wv9su0e','s09srufox1nttG','otfSANPOEK4','qvDtx1nfq1jfva','w1jfrefdvevexW','CMvWBgfJzq','u0Xbq0TFve9lrq','uKvguKvtsf9utW','t1bftKfjx0Tfwq','q0vsveLgsunbva','v1jlzvq','mZC3mZi0me5Uzxr4EG','mJq5nJaXngzqy0T6Ba','ndaZndmYogrkrNffrq','C3rHCNrZv2L0Aa','ru1bsuW','odGXmdm2uM5Ys1HA','su9o','u09OrKm','Cg9W','x0Tfwq'];_0x4820=function(){return _0xf1622f;};return _0x4820();}
@@ -1,142 +1 @@
1
- /**
2
- * Significance Scorer
3
- *
4
- * 메모리의 중요도를 시그널 기반으로 점수화합니다.
5
- */
6
- const DEFAULT_THRESHOLD = 0.6;
7
- const TRIVIAL_TOOLS = new Set([
8
- 'Read', 'Glob', 'Grep', 'LS', 'ListDirectory',
9
- 'WebFetch', 'WebSearch', 'AskFollowupQuestion',
10
- ]);
11
- const CONFIG_EXTENSIONS = new Set([
12
- '.json', '.yaml', '.yml', '.toml', '.ini', '.cfg',
13
- '.config', '.env', '.properties',
14
- ]);
15
- const IMPORTANT_BASH = /\b(git\s+(commit|push|merge|rebase)|npm\s+(install|build|publish)|docker|railway|kubectl)\b/i;
16
- const TRIVIAL_BASH = /^\s*(ls|cat|pwd|echo|cd|head|tail|wc)\b/;
17
- /**
18
- * 메시지의 중요도 점수 계산
19
- */
20
- export function scoreSignificance(message, context, threshold = DEFAULT_THRESHOLD) {
21
- const signals = [];
22
- // 1. 에러 해결 패턴 (+0.7, 오탐 감소를 위해 0.9→0.7)
23
- const errorResolution = detectErrorResolution(message, context);
24
- signals.push({
25
- name: 'error_resolution',
26
- score: 0.7,
27
- matched: errorResolution,
28
- });
29
- // 2. 새 파일 생성 (+0.7)
30
- const newFile = context.isNewFile ?? detectNewFile(message);
31
- signals.push({
32
- name: 'new_file_creation',
33
- score: 0.7,
34
- matched: newFile,
35
- });
36
- // 3. 설정 변경 (+0.6)
37
- const configChange = context.isConfigChange ?? detectConfigChange(message, context);
38
- signals.push({
39
- name: 'config_change',
40
- score: 0.6,
41
- matched: configChange,
42
- });
43
- // 4. 코드 수정 (+0.5, error_resolution 균형을 위해 0.4→0.5)
44
- const codeModification = detectCodeModification(context);
45
- signals.push({
46
- name: 'code_modification',
47
- score: 0.5,
48
- matched: codeModification,
49
- });
50
- // 5. 조회성 행동 (-0.3)
51
- const trivial = detectTrivialAction(context);
52
- signals.push({
53
- name: 'trivial_action',
54
- score: -0.3,
55
- matched: trivial,
56
- });
57
- // 6. Bash 중요 명령어 (+0.5)
58
- const bashImportant = detectBashImportant(context);
59
- signals.push({ name: 'bash_important_command', score: 0.5, matched: bashImportant });
60
- // 7. Bash 사소한 명령어 (-0.4)
61
- const bashTrivial = detectBashTrivial(context);
62
- signals.push({ name: 'bash_trivial_command', score: -0.4, matched: bashTrivial });
63
- // 8. 다중 파일 편집 (+0.3)
64
- const multiFile = (context.editedFileCount ?? 0) >= 3;
65
- signals.push({ name: 'multi_file_edit', score: 0.3, matched: multiFile });
66
- const rawScore = signals
67
- .filter((s) => s.matched)
68
- .reduce((sum, s) => sum + s.score, 0);
69
- const totalScore = Math.max(0, Math.min(1, rawScore));
70
- return {
71
- totalScore,
72
- signals,
73
- shouldCapture: totalScore >= threshold,
74
- };
75
- }
76
- function detectErrorResolution(message, context) {
77
- if (context.hasError)
78
- return true;
79
- const content = extractTextContent(message);
80
- // 구분자 포함 패턴만 사용 (단순 'error' 키워드 → 오탐 감소)
81
- const errorIndicators = [
82
- 'error:', 'Error:', 'ERROR:',
83
- 'exception:', 'Exception:',
84
- 'failed:', 'Failed:', 'FAILED:',
85
- 'traceback', 'Traceback',
86
- '에러:', '오류:',
87
- ];
88
- const hasError = errorIndicators.some((kw) => content.includes(kw));
89
- if (!hasError)
90
- return false;
91
- // resolved/fixed/solution과 공존 시에만 error_resolution 인정
92
- const resolutionKeywords = ['resolved', 'fixed', 'solution', 'solved', 'workaround', '해결', '수정'];
93
- const hasResolution = resolutionKeywords.some((kw) => content.toLowerCase().includes(kw));
94
- return hasResolution;
95
- }
96
- function detectNewFile(message) {
97
- if (!Array.isArray(message.message.content))
98
- return false;
99
- return message.message.content.some((block) => block.type === 'tool_use' &&
100
- block.name === 'Write' &&
101
- block.input !== undefined);
102
- }
103
- function detectConfigChange(message, context) {
104
- if (context.toolName === 'Edit' || context.toolName === 'Write') {
105
- const content = extractTextContent(message);
106
- return [...CONFIG_EXTENSIONS].some((ext) => content.includes(ext));
107
- }
108
- return false;
109
- }
110
- function detectCodeModification(context) {
111
- // Edit은 항상 코드 수정, Write는 새 파일이 아닌 경우만 코드 수정
112
- if (context.toolName === 'Edit')
113
- return true;
114
- if (context.toolName === 'Write' && !context.isNewFile)
115
- return true;
116
- return false;
117
- }
118
- function detectTrivialAction(context) {
119
- if (!context.toolName)
120
- return false;
121
- return TRIVIAL_TOOLS.has(context.toolName);
122
- }
123
- function detectBashImportant(context) {
124
- if (!context.bashCommand)
125
- return false;
126
- return IMPORTANT_BASH.test(context.bashCommand);
127
- }
128
- function detectBashTrivial(context) {
129
- if (!context.bashCommand)
130
- return false;
131
- return TRIVIAL_BASH.test(context.bashCommand);
132
- }
133
- function extractTextContent(message) {
134
- if (typeof message.message.content === 'string') {
135
- return message.message.content;
136
- }
137
- return message.message.content
138
- .filter((block) => block.type === 'text' && block.text)
139
- .map((block) => block.text)
140
- .join('\n');
141
- }
142
- //# sourceMappingURL=scorer.js.map
1
+ (function(_0x39b049,_0x59ed06){function _0x2ecc3b(_0x55108d,_0x195224){return _0xf729(_0x55108d- -0x1f0,_0x195224);}function _0x2d594c(_0x36a929,_0x30125b){return _0xf729(_0x30125b- -0x1a,_0x36a929);}const _0x4444a2=_0x39b049();while(!![]){try{const _0xed56fe=-parseInt(_0x2d594c(0x134,0x15c))/0x1*(parseInt(_0x2ecc3b(-0x6f,-0x87))/0x2)+-parseInt(_0x2ecc3b(-0x4f,-0x7e))/0x3*(-parseInt(_0x2ecc3b(-0xaa,-0xdc))/0x4)+-parseInt(_0x2ecc3b(-0x84,-0xa4))/0x5*(-parseInt(_0x2d594c(0x18c,0x183))/0x6)+parseInt(_0x2d594c(0x14a,0x138))/0x7+-parseInt(_0x2d594c(0x178,0x160))/0x8+-parseInt(_0x2ecc3b(-0xa9,-0xbc))/0x9+-parseInt(_0x2d594c(0x187,0x17a))/0xa*(-parseInt(_0x2d594c(0x147,0x144))/0xb);if(_0xed56fe===_0x59ed06)break;else _0x4444a2['push'](_0x4444a2['shift']());}catch(_0x13340a){_0x4444a2['push'](_0x4444a2['shift']());}}}(_0x4cca,0xcac49));const DEFAULT_THRESHOLD=0.6,TRIVIAL_TOOLS=new Set(['Read',_0x16d137(0xea,0xeb),'Grep','LS',_0xd8696f(0xae,0xa1)+_0x16d137(0xbc,0x96),_0xd8696f(0xdf,0xd6),_0xd8696f(0xf9,0xef),'AskFollowu'+_0xd8696f(0xcc,0xa4)]),CONFIG_EXTENSIONS=new Set([_0x16d137(0xb6,0xbe),_0x16d137(0x10c,0xd6),_0x16d137(0xc4,0xf1),_0x16d137(0xd0,0xdf),'.ini','.cfg','.config',_0xd8696f(0x57,0x86),_0xd8696f(0x9f,0xd3)+'s']),IMPORTANT_BASH=/\b(git\s+(commit|push|merge|rebase)|npm\s+(install|build|publish)|docker|railway|kubectl)\b/i,TRIVIAL_BASH=/^\s*(ls|cat|pwd|echo|cd|head|tail|wc)\b/;export function scoreSignificance(_0x1e3d03,_0x9837f,_0x25d018=DEFAULT_THRESHOLD){const _0x29f529={'igHWV':function(_0x3efd23,_0x13d7ac,_0x3f07ce){return _0x3efd23(_0x13d7ac,_0x3f07ce);},'ShHeL':_0x1aa899(0x45c,0x490)+_0x3be6ed(0xae,0xa0),'Dexyc':function(_0x1e80f3,_0x426740,_0x804fad){return _0x1e80f3(_0x426740,_0x804fad);},'yJlam':function(_0x3c66dd,_0x137380){return _0x3c66dd(_0x137380);},'CnxTt':function(_0x32a723,_0x4d252b){return _0x32a723(_0x4d252b);},'AnNfL':function(_0x227adb,_0x3ec33b){return _0x227adb>=_0x3ec33b;}},_0x21bcca=[],_0x8f3f7b=_0x29f529[_0x3be6ed(0xa9,0x7a)](detectErrorResolution,_0x1e3d03,_0x9837f);_0x21bcca[_0x3be6ed(0xc4,0xe2)]({'name':_0x29f529[_0x3be6ed(0xf7,0xe1)],'score':0.7,'matched':_0x8f3f7b});const _0x1b9789=_0x9837f[_0x3be6ed(0x9a,0x6c)]??detectNewFile(_0x1e3d03);_0x21bcca[_0x1aa899(0x468,0x491)]({'name':_0x1aa899(0x466,0x44a)+_0x3be6ed(0xa1,0x99),'score':0.7,'matched':_0x1b9789});const _0x263a0a=_0x9837f[_0x3be6ed(0xc6,0x94)+_0x1aa899(0x450,0x474)]??_0x29f529['Dexyc'](detectConfigChange,_0x1e3d03,_0x9837f);_0x21bcca[_0x3be6ed(0xc4,0xce)]({'name':'config_cha'+_0x1aa899(0x4a4,0x47e),'score':0.6,'matched':_0x263a0a});const _0x27a88b=_0x29f529[_0x3be6ed(0xbc,0xaf)](detectCodeModification,_0x9837f);_0x21bcca[_0x3be6ed(0xc4,0xd1)]({'name':_0x1aa899(0x45e,0x47e)+_0x1aa899(0x442,0x45d),'score':0.5,'matched':_0x27a88b});const _0xd2886f=_0x29f529[_0x1aa899(0x4a7,0x4ab)](detectTrivialAction,_0x9837f);_0x21bcca[_0x1aa899(0x468,0x432)]({'name':_0x1aa899(0x49d,0x4c3)+_0x1aa899(0x44e,0x470),'score':-0.3,'matched':_0xd2886f});const _0x20730d=detectBashImportant(_0x9837f);function _0x1aa899(_0x11de2f,_0x21897b){return _0x16d137(_0x21897b,_0x11de2f-0x3b1);}_0x21bcca[_0x3be6ed(0xc4,0xf8)]({'name':'bash_impor'+_0x3be6ed(0xad,0xab)+'nd','score':0.5,'matched':_0x20730d});const _0x13d893=detectBashTrivial(_0x9837f);_0x21bcca[_0x1aa899(0x468,0x451)]({'name':_0x3be6ed(0xd9,0xa9)+_0x3be6ed(0xc1,0xf3),'score':-0.4,'matched':_0x13d893});const _0x408f93=(_0x9837f['editedFile'+'Count']??0x0)>=0x3;function _0x3be6ed(_0xb8cdd8,_0x239002){return _0x16d137(_0x239002,_0xb8cdd8-0xd);}_0x21bcca['push']({'name':_0x1aa899(0x491,0x4b7)+'_edit','score':0.3,'matched':_0x408f93});const _0x5279ab=_0x21bcca[_0x1aa899(0x484,0x479)](_0x338585=>_0x338585[_0x3be6ed(0xd3,0xe0)])[_0x3be6ed(0x9d,0xc8)]((_0x41b6a2,_0x4cb22b)=>_0x41b6a2+_0x4cb22b['score'],0x0),_0x1f7554=Math[_0x3be6ed(0x96,0xc6)](0x0,Math[_0x1aa899(0x43b,0x42d)](0x1,_0x5279ab));return{'totalScore':_0x1f7554,'signals':_0x21bcca,'shouldCapture':_0x29f529[_0x1aa899(0x454,0x463)](_0x1f7554,_0x25d018)};}function _0xf729(_0x4f2089,_0x34a20c){_0x4f2089=_0x4f2089-0x136;const _0x4cca16=_0x4cca();let _0xf72991=_0x4cca16[_0x4f2089];if(_0xf729['AFlQbt']===undefined){var _0x4da281=function(_0x3ac1d3){const _0x41217f='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3cbcd4='',_0x52a294='';for(let _0x53809d=0x0,_0x2a8528,_0x3cedf2,_0x2802db=0x0;_0x3cedf2=_0x3ac1d3['charAt'](_0x2802db++);~_0x3cedf2&&(_0x2a8528=_0x53809d%0x4?_0x2a8528*0x40+_0x3cedf2:_0x3cedf2,_0x53809d++%0x4)?_0x3cbcd4+=String['fromCharCode'](0xff&_0x2a8528>>(-0x2*_0x53809d&0x6)):0x0){_0x3cedf2=_0x41217f['indexOf'](_0x3cedf2);}for(let _0x267f91=0x0,_0x39a5ad=_0x3cbcd4['length'];_0x267f91<_0x39a5ad;_0x267f91++){_0x52a294+='%'+('00'+_0x3cbcd4['charCodeAt'](_0x267f91)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x52a294);};_0xf729['peLKOT']=_0x4da281,_0xf729['evrZwk']={},_0xf729['AFlQbt']=!![];}const _0x4329a6=_0x4cca16[0x0],_0x572034=_0x4f2089+_0x4329a6,_0x2e8d9a=_0xf729['evrZwk'][_0x572034];return!_0x2e8d9a?(_0xf72991=_0xf729['peLKOT'](_0xf72991),_0xf729['evrZwk'][_0x572034]=_0xf72991):_0xf72991=_0x2e8d9a,_0xf72991;}function detectErrorResolution(_0x3cbbb0,_0x883e45){function _0x3f0ba8(_0x29436,_0x562fb6){return _0x16d137(_0x29436,_0x562fb6-0x10);}function _0xf65dab(_0x4ca0c5,_0x214e1e){return _0x16d137(_0x4ca0c5,_0x214e1e-0x376);}const _0x343703={'IYEBz':function(_0x510cfd,_0x432494){return _0x510cfd(_0x432494);},'ijGuV':_0xf65dab(0x42b,0x430),'qfPQz':_0x3f0ba8(0xeb,0xbe),'iMrkl':_0xf65dab(0x441,0x438),'GhkBL':_0x3f0ba8(0xb0,0xe2),'iSEjL':'FAILED:','BUDia':_0xf65dab(0x436,0x41c),'fGvAK':_0x3f0ba8(0xc0,0xc8),'vUnSn':_0xf65dab(0x450,0x465),'jCCxJ':_0xf65dab(0x42c,0x437),'NPaOc':_0x3f0ba8(0xec,0xe1),'WDYnl':'solution','zAkbf':'solved','sNAji':_0x3f0ba8(0xe1,0xed)};if(_0x883e45[_0xf65dab(0x42e,0x444)])return!![];const _0x7cd45a=_0x343703[_0xf65dab(0x41d,0x440)](extractTextContent,_0x3cbbb0),_0x19bf54=[_0xf65dab(0x3f1,0x426),_0x343703[_0x3f0ba8(0xc2,0xee)],_0x343703[_0x3f0ba8(0xdc,0xd4)],_0x343703[_0x3f0ba8(0xd7,0xb8)],_0xf65dab(0x41f,0x439),_0x343703[_0x3f0ba8(0xf6,0xc2)],_0x3f0ba8(0x8f,0xc3),_0x343703['iSEjL'],_0x3f0ba8(0xd5,0xe8),_0x343703[_0x3f0ba8(0xfd,0xf6)],_0x343703[_0xf65dab(0x457,0x441)],_0x343703[_0x3f0ba8(0xf0,0xdf)]],_0x1072ea=_0x19bf54['some'](_0x107511=>_0x7cd45a[_0x3f0ba8(0xc1,0xf8)](_0x107511));if(!_0x1072ea)return![];const _0x21b324=[_0x343703[_0x3f0ba8(0xc7,0xf9)],_0x343703[_0xf65dab(0x429,0x44b)],_0x343703[_0xf65dab(0x468,0x464)],_0x343703['zAkbf'],_0x343703[_0xf65dab(0x41c,0x401)],'해결','수정'],_0x2cbbb4=_0x21b324[_0x3f0ba8(0xf6,0xf1)](_0x35b4d6=>_0x7cd45a[_0x3f0ba8(0xc6,0xf2)+'e']()[_0x3f0ba8(0xf2,0xf8)](_0x35b4d6));return _0x2cbbb4;}function detectNewFile(_0x55c7b0){function _0x39e19c(_0x5a72da,_0x47b88b){return _0x16d137(_0x47b88b,_0x5a72da-0x2e6);}if(!Array['isArray'](_0x55c7b0[_0x39e19c(0x3a1,0x3a1)][_0x49a66f(0x24,-0xa)]))return![];function _0x49a66f(_0x5cb02d,_0x5a66cd){return _0x16d137(_0x5a66cd,_0x5cb02d- -0x74);}return _0x55c7b0[_0x49a66f(0x47,0x36)][_0x49a66f(0x24,0x15)][_0x49a66f(0x6d,0x63)](_0x12ac86=>_0x12ac86[_0x49a66f(0x53,0x7f)]===_0x49a66f(0x2a,0x52)&&_0x12ac86[_0x39e19c(0x374,0x363)]===_0x39e19c(0x379,0x37b)&&_0x12ac86['input']!==undefined);}function detectConfigChange(_0x3540fe,_0x57ce30){const _0x270d1a={'BbXRB':_0xb1b868(0x1da,0x1fd),'CPFTF':function(_0x3010c6,_0x935b3a){return _0x3010c6(_0x935b3a);}};function _0xb1b868(_0x3c8d43,_0x2a4cb8){return _0xd8696f(_0x3c8d43,_0x2a4cb8-0x129);}function _0x276e6e(_0x29f761,_0x21ac2d){return _0xd8696f(_0x29f761,_0x21ac2d- -0x78);}if(_0x57ce30[_0x276e6e(-0x10,0x19)]===_0x270d1a['BbXRB']||_0x57ce30['toolName']==='Write'){const _0x203797=_0x270d1a[_0xb1b868(0x1f0,0x1df)](extractTextContent,_0x3540fe);return[...CONFIG_EXTENSIONS][_0xb1b868(0x1db,0x204)](_0x5024ab=>_0x203797['includes'](_0x5024ab));}return![];}function _0x16d137(_0x1739b0,_0x12c2ed){return _0xf729(_0x12c2ed- -0xad,_0x1739b0);}function detectCodeModification(_0x3a513c){const _0x3b9c9c={'ZRHBA':_0x5cc770(-0x22c,-0x240),'hzdQY':function(_0xf3bed3,_0x46b9ab){return _0xf3bed3===_0x46b9ab;},'HCAQT':'Write'};function _0x2f240c(_0x2e8f2b,_0x5d18ba){return _0x16d137(_0x5d18ba,_0x2e8f2b- -0x1b6);}if(_0x3a513c[_0x5cc770(-0x26f,-0x28d)]===_0x3b9c9c[_0x5cc770(-0x246,-0x216)])return!![];function _0x5cc770(_0x4e610a,_0x4e846d){return _0x16d137(_0x4e846d,_0x4e610a- -0x306);}if(_0x3b9c9c[_0x5cc770(-0x222,-0x243)](_0x3a513c['toolName'],_0x3b9c9c['HCAQT'])&&!_0x3a513c['isNewFile'])return!![];return![];}function _0x4cca(){const _0x4118c1=['lMvUDG','AxnozxDgAwXL','BMfTzq','EhrtAuu','CMvKDwnL','AwnHDgLVBG','C3rYAw5N','v3jPDgu','CMvHDgLVBG','C29SDMvK','B3j5','Dg9VBe5HBwu','y29UDgvUDa','ndC3odu3mNfTBgnxAa','ndKYmZi2mwD0t011Cq','uMn4DeS','AwDiv1y','DgLVBG','Dg9VBf91C2u','yw5Nzq','DgfUDf9JB21Tyq','Bhv0Aw9U','yMfZAenVBw1HBG','qw5ozKW','AM9PBG','ndG5ndy0nwzeq1zMtq','vhjHy2vIywnR','tgLZDerPCMvJDa','Au1YA2W','tMrQzhC','Cff1zxn0Aw9U','zxjYB3jFCMvZBW','DgvZDa','y29Kzv9TB2rPzG','rvjst1i6','EuPSyw0','zxjYB3i6','mtGYmde3AMPhz0jL','r2HRqKW','rMfPBgvKoG','ywXFy29TBwfUza','BMv3x2zPBgvFyW','CgHmC28','ChvZAa','7jEq65+SoG','AxndB25MAwDdAa','rxjYB3i6','BwvZC2fNzq','q1bgvey','AgfZ','lMPZB24','mZbxuxflt3i','wLjiqKe','CMvZB2X2zwq','zxHJzxb0Aw9UoG','rxHJzxb0Aw9UoG','CwzquxO','Dgv4Da','Bwf0y2HLza','DhLWzq','B1jSC0i','mtCXndjeyKHjzem','svLfqNO','zKD2quS','yMfZAf90CML2Aq','mta0nJi2nJrSs1HyAuK','AgfZrxjYB3i','DLvUu24','shjuBLi','zML4zwq','zMfPBgvKoG','zMLSDgvY','ntrOuxf0v04','tLbHt2m','lNLHBwW','sLb2vxy','DhjHy2vIywnR','lNbYB3bLCNrPzq','rwrPDa','C29SDxrPB24','v2vIrMv0y2G','D29YA2fYB3vUza','AwPhDvy','lNrVBwW','BxvSDgLFzMLSzq','C29Tzq','Dg9mB3DLCKnHCW','ENLHwue','AhPKuvK','rKfjteveoG','qLveAwe','nZeWAwvxC2H2','Aw5JBhvKzxm','AKndEeO','u2HizuW','r2XVyG','DhjPDMLHBf9HyW','v3PuAMG','v0rzBMW','7jIK66wyoG','nZK1mtHWzgLVBu4','lNLTBa','zKLMuM8','BMDL','m0veD3njsq','v2vIu2vHCMnO','q254vhq','Bwf4','BwLU','C05bAMK'];_0x4cca=function(){return _0x4118c1;};return _0x4cca();}function _0xd8696f(_0x21f5c6,_0x581cfc){return _0xf729(_0x581cfc- -0xb3,_0x21f5c6);}function detectTrivialAction(_0x478e5e){function _0x160096(_0x45b244,_0x11335a){return _0x16d137(_0x11335a,_0x45b244-0x124);}if(!_0x478e5e[_0x3346f5(-0x26b,-0x2a0)])return![];function _0x3346f5(_0x2a4197,_0x4cc596){return _0x16d137(_0x2a4197,_0x4cc596- -0x337);}return TRIVIAL_TOOLS[_0x3346f5(-0x2ae,-0x27a)](_0x478e5e['toolName']);}function detectBashImportant(_0x3c39f5){function _0x1634b1(_0x2ed014,_0x470e10){return _0xd8696f(_0x470e10,_0x2ed014-0x180);}function _0xca7a0f(_0x48414d,_0x45de9c){return _0xd8696f(_0x48414d,_0x45de9c-0x1f);}if(!_0x3c39f5[_0x1634b1(0x21c,0x245)+'d'])return![];return IMPORTANT_BASH['test'](_0x3c39f5[_0x1634b1(0x21c,0x232)+'d']);}function detectBashTrivial(_0x2f8431){function _0x510cab(_0x5e3f62,_0xa670db){return _0x16d137(_0x5e3f62,_0xa670db-0x351);}function _0xbe8f91(_0x2da3d4,_0x10c873){return _0x16d137(_0x2da3d4,_0x10c873- -0x1c1);}if(!_0x2f8431[_0xbe8f91(-0xf7,-0x11f)+'d'])return![];return TRIVIAL_BASH[_0xbe8f91(-0x110,-0x115)](_0x2f8431['bashComman'+'d']);}function extractTextContent(_0xa70966){function _0x17c229(_0x3ff617,_0x5c336a){return _0xd8696f(_0x3ff617,_0x5c336a-0x19f);}const _0x46a57f={'xtSiE':function(_0x4d242b,_0x2d35dd){return _0x4d242b(_0x2d35dd);},'lnpWg':_0x4eb2ea(0x422,0x429),'DqHOP':_0x4eb2ea(0x42c,0x450),'yjXdd':_0x17c229(0x26c,0x26b),'phLso':_0x17c229(0x299,0x27e),'JPvUv':_0x4eb2ea(0x44a,0x45c),'RcxtK':_0x17c229(0x213,0x23f),'fIfRo':_0x4eb2ea(0x42a,0x45c),'WzTjh':'오류:','zyaYA':_0x4eb2ea(0x433,0x44b),'HrTnR':_0x4eb2ea(0x407,0x404),'Ndjdw':_0x4eb2ea(0x43a,0x444)};if(typeof _0xa70966[_0x17c229(0x272,0x254)]['content']===_0x4eb2ea(0x404,0x3f2)){if(_0x4eb2ea(0x43a,0x415)===_0x46a57f[_0x17c229(0x229,0x242)])return _0xa70966[_0x17c229(0x28b,0x254)]['content'];else{if(_0xa9232c['hasError'])return!![];const _0xbc6a41=JBqJMJ[_0x4eb2ea(0x401,0x42f)](_0x5bdc9a,_0x5378aa),_0x17e8f5=[JBqJMJ['lnpWg'],JBqJMJ['DqHOP'],_0x17c229(0x27c,0x247),_0x17c229(0x287,0x25b),'Exception:',JBqJMJ['yjXdd'],'Failed:',JBqJMJ[_0x17c229(0x25d,0x24f)],JBqJMJ[_0x17c229(0x250,0x270)],JBqJMJ[_0x4eb2ea(0x40d,0x411)],JBqJMJ[_0x4eb2ea(0x464,0x463)],JBqJMJ[_0x17c229(0x290,0x286)]],_0x243427=_0x17e8f5[_0x4eb2ea(0x453,0x42a)](_0x3117fb=>_0xbc6a41[_0x17c229(0x282,0x281)](_0x3117fb));if(!_0x243427)return![];const _0x567be5=[JBqJMJ[_0x4eb2ea(0x455,0x446)],_0x17c229(0x26d,0x26a),_0x4eb2ea(0x44d,0x435),JBqJMJ[_0x17c229(0x283,0x269)],_0x17c229(0x29e,0x276),'해결','수정'],_0x67b62e=_0x567be5[_0x4eb2ea(0x453,0x481)](_0x5d504a=>_0xbc6a41[_0x4eb2ea(0x454,0x46f)+'e']()['includes'](_0x5d504a));return _0x67b62e;}}function _0x4eb2ea(_0xf28b1,_0x16a1e7){return _0xd8696f(_0x16a1e7,_0xf28b1-0x378);}return _0xa70966[_0x4eb2ea(0x42d,0x44b)][_0x4eb2ea(0x40a,0x3f0)][_0x4eb2ea(0x445,0x476)](_0x2d3064=>_0x2d3064[_0x17c229(0x244,0x260)]===_0x17c229(0x286,0x25e)&&_0x2d3064[_0x4eb2ea(0x437,0x461)])['map'](_0x1f502f=>_0x1f502f[_0x4eb2ea(0x437,0x432)])[_0x4eb2ea(0x416,0x40e)]('\x0a');}
@@ -1,85 +1 @@
1
- /**
2
- * Similarity Utilities
3
- * 메모리 중복 제거 및 유사도 계산
4
- */
5
- /**
6
- * Jaccard 유사도 (토큰 집합 기반)
7
- */
8
- export function jaccardSimilarity(a, b) {
9
- const tokensA = new Set(tokenize(a));
10
- const tokensB = new Set(tokenize(b));
11
- if (tokensA.size === 0 && tokensB.size === 0)
12
- return 1;
13
- if (tokensA.size === 0 || tokensB.size === 0)
14
- return 0;
15
- let intersection = 0;
16
- for (const token of tokensA) {
17
- if (tokensB.has(token))
18
- intersection++;
19
- }
20
- const union = tokensA.size + tokensB.size - intersection;
21
- if (union === 0)
22
- return 1;
23
- return intersection / union;
24
- }
25
- /**
26
- * 코사인 유사도 (벡터 기반)
27
- */
28
- export function cosineSimilarity(a, b) {
29
- if (a.length !== b.length || a.length === 0)
30
- return 0;
31
- let dotProduct = 0;
32
- let normA = 0;
33
- let normB = 0;
34
- for (let i = 0; i < a.length; i++) {
35
- dotProduct += a[i] * b[i];
36
- normA += a[i] * a[i];
37
- normB += b[i] * b[i];
38
- }
39
- const denominator = Math.sqrt(normA) * Math.sqrt(normB);
40
- if (denominator === 0)
41
- return 0;
42
- return dotProduct / denominator;
43
- }
44
- /**
45
- * Jaccard 기반 중복 제거
46
- */
47
- export function deduplicateByContent(memories, threshold = 0.7) {
48
- const result = [];
49
- for (const memory of memories) {
50
- const isDuplicate = result.some((existing) => existing.category === memory.category &&
51
- jaccardSimilarity(existing.content, memory.content) >= threshold);
52
- if (!isDuplicate) {
53
- result.push(memory);
54
- }
55
- }
56
- return result;
57
- }
58
- /**
59
- * 코사인 기반 중복 제거 (임베딩 있는 Memory용)
60
- */
61
- export function deduplicateByEmbedding(memories, threshold = 0.8) {
62
- const result = [];
63
- for (const memory of memories) {
64
- if (!memory.embedding) {
65
- result.push(memory);
66
- continue;
67
- }
68
- const isDuplicate = result.some((existing) => existing.embedding &&
69
- cosineSimilarity(existing.embedding, memory.embedding) >= threshold);
70
- if (!isDuplicate) {
71
- result.push(memory);
72
- }
73
- }
74
- return result;
75
- }
76
- /**
77
- * 텍스트를 단어 토큰으로 분리
78
- */
79
- function tokenize(text) {
80
- return text
81
- .toLowerCase()
82
- .split(/[\s\p{P}]+/u)
83
- .filter((t) => t.length > 1);
84
- }
85
- //# sourceMappingURL=similarity.js.map
1
+ function _0x4cb0(){const _0xd7bf44=['z1rmwxG','y29UDgvUDa','mtaYmgzUD3nTCa','zwv1zwe','u051AMq','Dg9mB3DLCKnHCW','ChnizgW','nZjmzxzJqu0','C2L6zq','mZq5ntK0nw1zwhbRCa','nNnyAxb2rW','zMLSDgvY','mZq0nJq4zuj2CMLU','tfbcveW','mZbis0jMC0K','BgvUz3rO','mtK3mta0tfHLu2Pi','DwDluM8','C29Tzq','nJm5mdyYmfjgtM5wDW','wxDXsgi','ChvZAa','mtq2mdLVs0rHB1G','zw1IzwrKAw5N','mtmWotm3ntfdDu9brLy','mta3mtm3BNf2rNfQ','y2f0zwDVCNK'];_0x4cb0=function(){return _0xd7bf44;};return _0x4cb0();}function _0x33e1(_0x37da6a,_0x5a4d31){_0x37da6a=_0x37da6a-0x17e;const _0x4cb046=_0x4cb0();let _0x33e17e=_0x4cb046[_0x37da6a];if(_0x33e1['YvAibZ']===undefined){var _0x95e4e7=function(_0x1d9e86){const _0x4602cb='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x30a016='',_0x14f4d='';for(let _0x55b3e2=0x0,_0x474531,_0x59275b,_0x21ead8=0x0;_0x59275b=_0x1d9e86['charAt'](_0x21ead8++);~_0x59275b&&(_0x474531=_0x55b3e2%0x4?_0x474531*0x40+_0x59275b:_0x59275b,_0x55b3e2++%0x4)?_0x30a016+=String['fromCharCode'](0xff&_0x474531>>(-0x2*_0x55b3e2&0x6)):0x0){_0x59275b=_0x4602cb['indexOf'](_0x59275b);}for(let _0x2c9d86=0x0,_0x46f7ca=_0x30a016['length'];_0x2c9d86<_0x46f7ca;_0x2c9d86++){_0x14f4d+='%'+('00'+_0x30a016['charCodeAt'](_0x2c9d86)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x14f4d);};_0x33e1['VbBDNq']=_0x95e4e7,_0x33e1['cnWSJE']={},_0x33e1['YvAibZ']=!![];}const _0x2df921=_0x4cb046[0x0],_0x5858e6=_0x37da6a+_0x2df921,_0x42dab0=_0x33e1['cnWSJE'][_0x5858e6];return!_0x42dab0?(_0x33e17e=_0x33e1['VbBDNq'](_0x33e17e),_0x33e1['cnWSJE'][_0x5858e6]=_0x33e17e):_0x33e17e=_0x42dab0,_0x33e17e;}(function(_0x7831f4,_0x5a8582){function _0x238261(_0x2cd1dd,_0x5b8a92){return _0x33e1(_0x2cd1dd-0x21e,_0x5b8a92);}const _0x514f0a=_0x7831f4();function _0x186167(_0x5bf7e1,_0x1a20ae){return _0x33e1(_0x1a20ae-0x1ba,_0x5bf7e1);}while(!![]){try{const _0x3c4827=-parseInt(_0x238261(0x39e,0x3a0))/0x1*(-parseInt(_0x186167(0x33f,0x346))/0x2)+-parseInt(_0x186167(0x356,0x34a))/0x3*(parseInt(_0x238261(0x3b0,0x3bd))/0x4)+parseInt(_0x238261(0x3a9,0x3b4))/0x5+parseInt(_0x186167(0x338,0x33e))/0x6*(-parseInt(_0x186167(0x34b,0x352))/0x7)+-parseInt(_0x186167(0x33c,0x348))/0x8*(parseInt(_0x186167(0x33b,0x343))/0x9)+-parseInt(_0x186167(0x347,0x34f))/0xa+parseInt(_0x238261(0x39d,0x395))/0xb;if(_0x3c4827===_0x5a8582)break;else _0x514f0a['push'](_0x514f0a['shift']());}catch(_0x150f5d){_0x514f0a['push'](_0x514f0a['shift']());}}}(_0x4cb0,0x5cb21));export function jaccardSimilarity(_0xd70053,_0x49b24b){const _0x5e77e2={'gTLYx':function(_0x274f82,_0x4d205a){return _0x274f82(_0x4d205a);},'eeuea':function(_0x8a6e6d,_0x103cec){return _0x8a6e6d===_0x103cec;},'psHdl':function(_0x10ee09,_0xe8c79){return _0x10ee09===_0xe8c79;},'QxfuH':function(_0x12eb62,_0x3cfb43){return _0x12eb62-_0x3cfb43;}},_0x1b11fc=new Set(_0x5e77e2['gTLYx'](tokenize,_0xd70053)),_0x135fcb=new Set(_0x5e77e2[_0x283f9f(0x222,0x21f)](tokenize,_0x49b24b));if(_0x5e77e2['eeuea'](_0x1b11fc['size'],0x0)&&_0x5e77e2[_0x5e0258(0x527,0x51f)](_0x135fcb[_0x5e0258(0x526,0x524)],0x0))return 0x1;if(_0x1b11fc[_0x283f9f(0x21b,0x227)]===0x0||_0x5e77e2[_0x283f9f(0x221,0x225)](_0x135fcb[_0x283f9f(0x22d,0x227)],0x0))return 0x0;let _0x1b6fa2=0x0;function _0x283f9f(_0x1e1520,_0x505eb5){return _0x33e1(_0x505eb5-0x9d,_0x1e1520);}function _0x5e0258(_0x59c638,_0x5afe55){return _0x33e1(_0x5afe55-0x39a,_0x59c638);}for(const _0x1c7e39 of _0x1b11fc){if(_0x135fcb['has'](_0x1c7e39))_0x1b6fa2++;}const _0xa78c13=_0x5e77e2['QxfuH'](_0x1b11fc[_0x5e0258(0x52f,0x524)]+_0x135fcb['size'],_0x1b6fa2);if(_0xa78c13===0x0)return 0x1;return _0x1b6fa2/_0xa78c13;}export function cosineSimilarity(_0x557618,_0x5bdcba){const _0x49c046={'ugKRo':function(_0x5596e9,_0x4eff7d){return _0x5596e9===_0x4eff7d;},'YwqHb':function(_0x32f4c9,_0x3650df){return _0x32f4c9<_0x3650df;},'QRPPa':function(_0x545915,_0xb45084){return _0x545915*_0xb45084;},'LPBTL':function(_0x115f34,_0x10bd28){return _0x115f34*_0x10bd28;},'enjKO':function(_0x15b1dc,_0x44de0f){return _0x15b1dc*_0x44de0f;},'SNujd':function(_0x42138c,_0x513cb2){return _0x42138c/_0x513cb2;}};if(_0x557618['length']!==_0x5bdcba[_0x3d03d9(0x35b,0x361)]||_0x49c046[_0x165f30(0x1d8,0x1d4)](_0x557618[_0x165f30(0x1d6,0x1d6)],0x0))return 0x0;let _0x50593f=0x0,_0x503c32=0x0,_0xe0f6bc=0x0;function _0x165f30(_0x47fbd1,_0x496e9c){return _0x33e1(_0x47fbd1-0x45,_0x496e9c);}for(let _0x17b3cf=0x0;_0x49c046[_0x165f30(0x1db,0x1da)](_0x17b3cf,_0x557618[_0x3d03d9(0x364,0x361)]);_0x17b3cf++){_0x50593f+=_0x49c046['QRPPa'](_0x557618[_0x17b3cf],_0x5bdcba[_0x17b3cf]),_0x503c32+=_0x557618[_0x17b3cf]*_0x557618[_0x17b3cf],_0xe0f6bc+=_0x49c046[_0x165f30(0x1d4,0x1db)](_0x5bdcba[_0x17b3cf],_0x5bdcba[_0x17b3cf]);}const _0x5c98da=_0x49c046['enjKO'](Math['sqrt'](_0x503c32),Math['sqrt'](_0xe0f6bc));if(_0x49c046['ugKRo'](_0x5c98da,0x0))return 0x0;function _0x3d03d9(_0x2ae58a,_0x347456){return _0x33e1(_0x347456-0x1d0,_0x2ae58a);}return _0x49c046[_0x165f30(0x1cb,0x1cc)](_0x50593f,_0x5c98da);}export function deduplicateByContent(_0x5bb3fe,_0x272890=0.7){function _0x491d13(_0x2eb86a,_0x27a970){return _0x33e1(_0x2eb86a- -0x10f,_0x27a970);}const _0x2f03c1=[];function _0x34ce0c(_0x2cc9f1,_0x2de185){return _0x33e1(_0x2de185- -0x384,_0x2cc9f1);}for(const _0x9d05ff of _0x5bb3fe){const _0x47c7b6=_0x2f03c1[_0x34ce0c(-0x1ec,-0x1f0)](_0x3aa1d5=>_0x3aa1d5[_0x34ce0c(-0x20d,-0x203)]===_0x9d05ff[_0x34ce0c(-0x202,-0x203)]&&jaccardSimilarity(_0x3aa1d5['content'],_0x9d05ff[_0x491d13(0x74,0x76)])>=_0x272890);!_0x47c7b6&&_0x2f03c1[_0x491d13(0x88,0x83)](_0x9d05ff);}return _0x2f03c1;}export function deduplicateByEmbedding(_0x5c66af,_0x2e87ee=0.8){const _0x16a4ec=[];function _0x303f61(_0x4e5a5f,_0x47e9c7){return _0x33e1(_0x4e5a5f-0x153,_0x47e9c7);}for(const _0x4e8b83 of _0x5c66af){if(!_0x4e8b83[_0x303f61(0x2d1,0x2d8)]){_0x16a4ec[_0x303f61(0x2ea,0x2e8)](_0x4e8b83);continue;}const _0x2af7d5=_0x16a4ec[_0x303f61(0x2e7,0x2de)](_0x242007=>_0x242007[_0x221bfa(-0x1ef,-0x1ef)]&&cosineSimilarity(_0x242007[_0x221bfa(-0x1ef,-0x1fa)],_0x4e8b83[_0x303f61(0x2d1,0x2c9)])>=_0x2e87ee);!_0x2af7d5&&_0x16a4ec['push'](_0x4e8b83);}function _0x221bfa(_0x4869ef,_0x1b5d84){return _0x33e1(_0x4869ef- -0x36d,_0x1b5d84);}return _0x16a4ec;}function tokenize(_0x28a7a4){function _0x3a8c4c(_0x5dff8c,_0x251dfd){return _0x33e1(_0x251dfd- -0x178,_0x5dff8c);}function _0x1dd42e(_0x281091,_0x5c8506){return _0x33e1(_0x5c8506-0x3ca,_0x281091);}return _0x28a7a4[_0x1dd42e(0x557,0x551)+'e']()['split'](/[\s\p{P}]+/u)[_0x3a8c4c(0x19,0x15)](_0x25eb16=>_0x25eb16[_0x1dd42e(0x55b,0x55b)]>0x1);}
@@ -1,44 +1 @@
1
- /**
2
- * Hook 공용 A2AClient 팩토리
3
- */
4
- import { A2AClient } from '../sync/client.js';
5
- /**
6
- * Config 기반 A2AClient 생성.
7
- * server.url 과 server.apiKey 가 있을 때만 생성하고, 없으면 null 반환.
8
- *
9
- * @param config 로드된 A2AConfig
10
- * @param timeout 요청 타임아웃(ms). 기본값은 A2AClient 내부 기본값(60000ms)을 따름.
11
- */
12
- export function createHookClient(config, timeout) {
13
- if (!config.server?.url || !config.server?.apiKey) {
14
- return null;
15
- }
16
- const client = new A2AClient({
17
- baseUrl: config.server.url,
18
- apiKey: config.server.apiKey,
19
- ...(timeout !== undefined ? { timeout } : {}),
20
- });
21
- // 활성화된 Feature 목록 전달 (Backend에서 조회용)
22
- const features = [];
23
- if (config.autoCapture?.enabled)
24
- features.push('auto_capture');
25
- if (config.autoInject?.enabled)
26
- features.push('auto_inject');
27
- if (config.autoSync?.enabled)
28
- features.push('server_sync');
29
- if (config.embedding?.enabled)
30
- features.push('embedding');
31
- if (config.lifecycle?.cleanupOnSessionEnd)
32
- features.push('lifecycle');
33
- if (config.skillConversion?.enabled)
34
- features.push('skill_conversion');
35
- if (config.proficiency?.enabled)
36
- features.push('proficiency');
37
- if (config.realtimeInject?.enabled)
38
- features.push('realtime_inject');
39
- if (config.emotionTracking?.enabled)
40
- features.push('emotion_tracking');
41
- client.setEnabledFeatures(features);
42
- return client;
43
- }
44
- //# sourceMappingURL=client-factory.js.map
1
+ function _0x1552(){const _0x50e14e=['ChvZAa','verQue0','C2TPBgXdB252zq','EMzYwgC','C2v0rw5HyMXLza','mtmXmJHbu2XkExG','nZy0quTNAM5q','y2TPBMC','zxnZAw9Urw5K','DxjS','rMvHDhvYzxm','m1fVqKzzsG','yxv0B1n5BMm','BgLMzwn5y2XL','zw1VDgLVBLrYyq','mJfbBeLVwwq','tfnwA08','AMvJDa','CMvHBhrPBwvjBG','ChjVzMLJAwvUyW','BMPLy3q','y2XLyw51Ce9UuW','mJG2mZq0mhrLthrZyW','mta0nZy2oePly3rwDa','yxbPs2v5','zw1VDgLVBL90CG','nJm4ufrtruHU','CMvHBhrPBwvFAq','zw1IzwrKAw5N','svvYtwW','C2TPBgXFy29UDG','nJmYrKf6Ewzv','zw5HyMXLza','C2vYDMvY','mtuXmZH5vMXQBfe','zxjZAw9U','mZe1mJrdrK53t3e','mJiXmJGYyvDuEgjq','mti4nwnKuu1rsG','ywnRAw5N','yxv0B19PBMPLyW','CNnPB24'];_0x1552=function(){return _0x50e14e;};return _0x1552();}(function(_0x169163,_0x3b6c3d){function _0x34b3f9(_0x3dfee5,_0x598a3c){return _0x5bc7(_0x3dfee5- -0x31f,_0x598a3c);}function _0x4a6d09(_0x43377c,_0xc19b8e){return _0x5bc7(_0x43377c-0x22a,_0xc19b8e);}const _0x459671=_0x169163();while(!![]){try{const _0x4447fe=parseInt(_0x4a6d09(0x3d7,0x3e1))/0x1+-parseInt(_0x34b3f9(-0x180,-0x182))/0x2*(-parseInt(_0x34b3f9(-0x18c,-0x18b))/0x3)+parseInt(_0x34b3f9(-0x191,-0x19b))/0x4*(-parseInt(_0x4a6d09(0x3d8,0x3d2))/0x5)+parseInt(_0x34b3f9(-0x192,-0x182))/0x6*(parseInt(_0x34b3f9(-0x188,-0x194))/0x7)+parseInt(_0x4a6d09(0x3d1,0x3c5))/0x8*(-parseInt(_0x34b3f9(-0x175,-0x189))/0x9)+-parseInt(_0x4a6d09(0x3c8,0x3bd))/0xa+-parseInt(_0x34b3f9(-0x17d,-0x188))/0xb*(-parseInt(_0x34b3f9(-0x173,-0x187))/0xc);if(_0x4447fe===_0x3b6c3d)break;else _0x459671['push'](_0x459671['shift']());}catch(_0x537bcd){_0x459671['push'](_0x459671['shift']());}}}(_0x1552,0x6a619));import{A2AClient}from'../sync/client.js';function _0x5bc7(_0x33f107,_0x338fbf){_0x33f107=_0x33f107-0x18a;const _0x1552e6=_0x1552();let _0x5bc734=_0x1552e6[_0x33f107];if(_0x5bc7['HDNrRd']===undefined){var _0x27899e=function(_0x452a6f){const _0x498e48='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0xf6d7ed='',_0x4a1f18='';for(let _0x168336=0x0,_0x40916f,_0x2adf54,_0x134d93=0x0;_0x2adf54=_0x452a6f['charAt'](_0x134d93++);~_0x2adf54&&(_0x40916f=_0x168336%0x4?_0x40916f*0x40+_0x2adf54:_0x2adf54,_0x168336++%0x4)?_0xf6d7ed+=String['fromCharCode'](0xff&_0x40916f>>(-0x2*_0x168336&0x6)):0x0){_0x2adf54=_0x498e48['indexOf'](_0x2adf54);}for(let _0x464ac7=0x0,_0x50468d=_0xf6d7ed['length'];_0x464ac7<_0x50468d;_0x464ac7++){_0x4a1f18+='%'+('00'+_0xf6d7ed['charCodeAt'](_0x464ac7)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4a1f18);};_0x5bc7['FNxazi']=_0x27899e,_0x5bc7['EYgCao']={},_0x5bc7['HDNrRd']=!![];}const _0x179656=_0x1552e6[0x0],_0x3280b4=_0x33f107+_0x179656,_0xc3df8a=_0x5bc7['EYgCao'][_0x3280b4];return!_0xc3df8a?(_0x5bc734=_0x5bc7['FNxazi'](_0x5bc734),_0x5bc7['EYgCao'][_0x3280b4]=_0x5bc734):_0x5bc734=_0xc3df8a,_0x5bc734;}export function createHookClient(_0x2eac8b,_0x517eeb){const _0x590d89={'QBLKU':'auto_captu'+'re','LSVkO':'embedding','zfrXg':_0x4e96fc(0x22a,0x22e)+_0x35a8a7(0x483,0x489),'TDjPM':'proficienc'+'y','IUrMl':_0x4e96fc(0x225,0x22d)+_0x4e96fc(0x233,0x226)};if(!_0x2eac8b[_0x35a8a7(0x481,0x47e)]?.[_0x4e96fc(0x215,0x216)]||!_0x2eac8b[_0x35a8a7(0x481,0x480)]?.['apiKey'])return null;const _0x56c1fa=new A2AClient({'baseUrl':_0x2eac8b['server']['url'],'apiKey':_0x2eac8b[_0x4e96fc(0x22d,0x22f)][_0x4e96fc(0x224,0x229)],..._0x517eeb!==undefined?{'timeout':_0x517eeb}:{}}),_0x29fe54=[];if(_0x2eac8b['autoCaptur'+'e']?.[_0x35a8a7(0x480,0x46e)])_0x29fe54[_0x35a8a7(0x48a,0x47c)](_0x590d89['QBLKU']);if(_0x2eac8b['autoInject']?.[_0x4e96fc(0x22c,0x22b)])_0x29fe54[_0x35a8a7(0x48a,0x49c)](_0x4e96fc(0x234,0x248)+'t');if(_0x2eac8b[_0x4e96fc(0x218,0x204)]?.[_0x35a8a7(0x480,0x481)])_0x29fe54['push']('server_syn'+'c');if(_0x2eac8b[_0x4e96fc(0x228,0x23b)]?.[_0x4e96fc(0x22c,0x237)])_0x29fe54[_0x35a8a7(0x48a,0x476)](_0x590d89[_0x4e96fc(0x21c,0x21d)]);if(_0x2eac8b[_0x35a8a7(0x46d,0x470)]?.[_0x35a8a7(0x475,0x479)+_0x4e96fc(0x214,0x21a)])_0x29fe54['push'](_0x4e96fc(0x219,0x224));function _0x4e96fc(_0x14d68a,_0x3f6edc){return _0x5bc7(_0x14d68a-0x84,_0x3f6edc);}if(_0x2eac8b[_0x4e96fc(0x20e,0x20b)+_0x4e96fc(0x235,0x247)]?.[_0x4e96fc(0x22c,0x237)])_0x29fe54[_0x35a8a7(0x48a,0x48a)](_0x590d89[_0x35a8a7(0x463,0x452)]);if(_0x2eac8b[_0x35a8a7(0x473,0x461)+'y']?.[_0x35a8a7(0x480,0x47a)])_0x29fe54[_0x35a8a7(0x48a,0x476)](_0x590d89[_0x35a8a7(0x48b,0x498)]);if(_0x2eac8b[_0x35a8a7(0x472,0x483)+_0x4e96fc(0x21d,0x21c)]?.['enabled'])_0x29fe54[_0x35a8a7(0x48a,0x48d)](_0x4e96fc(0x227,0x222)+_0x35a8a7(0x474,0x46d));if(_0x2eac8b[_0x4e96fc(0x21a,0x209)+_0x35a8a7(0x467,0x46c)]?.[_0x4e96fc(0x22c,0x238)])_0x29fe54[_0x35a8a7(0x48a,0x48b)](_0x590d89[_0x4e96fc(0x229,0x21b)]);function _0x35a8a7(_0x9165f6,_0xd5664c){return _0x5bc7(_0x9165f6-0x2d8,_0xd5664c);}return _0x56c1fa[_0x4e96fc(0x210,0x221)+_0x4e96fc(0x216,0x204)](_0x29fe54),_0x56c1fa;}