a2a-memory 0.11.5 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/LICENSE +7 -19
  2. package/README.md +1 -1
  3. package/dist/a2a/client.js +1 -252
  4. package/dist/a2a/discovery.js +1 -115
  5. package/dist/a2a/index.js +1 -8
  6. package/dist/a2a/types.js +1 -42
  7. package/dist/adapters/anthropic.js +1 -117
  8. package/dist/chunking/chunker.js +1 -163
  9. package/dist/claude/sync.d.ts +8 -2
  10. package/dist/claude/sync.js +1 -298
  11. package/dist/cli/commands/add.js +1 -80
  12. package/dist/cli/commands/claude-sync.d.ts +3 -3
  13. package/dist/cli/commands/claude-sync.js +1 -70
  14. package/dist/cli/commands/cleanup.js +1 -83
  15. package/dist/cli/commands/config.js +1 -79
  16. package/dist/cli/commands/edit.js +1 -69
  17. package/dist/cli/commands/embed.js +1 -92
  18. package/dist/cli/commands/extract.js +1 -103
  19. package/dist/cli/commands/health.js +1 -105
  20. package/dist/cli/commands/list.js +1 -46
  21. package/dist/cli/commands/migrate-chunks.js +1 -205
  22. package/dist/cli/commands/migrate-file-refs.js +1 -183
  23. package/dist/cli/commands/proficiency.js +1 -146
  24. package/dist/cli/commands/rm.js +1 -64
  25. package/dist/cli/commands/search.js +1 -90
  26. package/dist/cli/commands/setup-wizard.js +1 -387
  27. package/dist/cli/commands/setup.js +1 -170
  28. package/dist/cli/commands/skill.js +1 -151
  29. package/dist/cli/commands/status.js +1 -70
  30. package/dist/cli/commands/sync.js +1 -202
  31. package/dist/cli/commands/team.js +1 -142
  32. package/dist/cli/index.js +1 -87
  33. package/dist/config/manager.js +1 -372
  34. package/dist/db/database.d.ts +36 -0
  35. package/dist/db/database.js +1 -1400
  36. package/dist/embedding/e5-provider.js +1 -147
  37. package/dist/embedding/index.js +1 -34
  38. package/dist/embedding/local-provider.js +1 -157
  39. package/dist/embedding/openai-provider.js +1 -92
  40. package/dist/embedding/quantization.js +1 -89
  41. package/dist/extraction/dedup-manager.js +1 -161
  42. package/dist/extraction/emotion-filter.js +1 -33
  43. package/dist/extraction/extractor.d.ts +0 -3
  44. package/dist/extraction/extractor.js +1 -648
  45. package/dist/extraction/file-reference.js +1 -77
  46. package/dist/extraction/filter.js +1 -86
  47. package/dist/extraction/scorer.js +1 -142
  48. package/dist/extraction/similarity.js +1 -85
  49. package/dist/hooks/client-factory.js +1 -44
  50. package/dist/hooks/post-tool-use.js +1 -518
  51. package/dist/hooks/pre-compact.js +1 -209
  52. package/dist/hooks/session-end.js +1 -633
  53. package/dist/hooks/session-start.js +1 -549
  54. package/dist/hooks/shared.js +1 -110
  55. package/dist/hooks/stop.d.ts +21 -0
  56. package/dist/hooks/stop.js +1 -0
  57. package/dist/hooks/user-prompt-submit.js +1 -316
  58. package/dist/i18n/index.js +1 -2
  59. package/dist/i18n/messages.js +1 -150
  60. package/dist/index.d.ts +1 -1
  61. package/dist/index.js +1 -43
  62. package/dist/lifecycle/cleanup-scheduler.js +1 -137
  63. package/dist/lifecycle/cleanup.d.ts +1 -0
  64. package/dist/lifecycle/cleanup.js +1 -116
  65. package/dist/lifecycle/consolidation.d.ts +22 -0
  66. package/dist/lifecycle/consolidation.js +1 -0
  67. package/dist/lifecycle/index.d.ts +2 -0
  68. package/dist/lifecycle/index.js +1 -13
  69. package/dist/lifecycle/injection-flush.d.ts +24 -0
  70. package/dist/lifecycle/injection-flush.js +1 -0
  71. package/dist/lifecycle/quality-scorer.d.ts +5 -6
  72. package/dist/lifecycle/quality-scorer.js +1 -46
  73. package/dist/lifecycle/tiering.js +1 -246
  74. package/dist/llm/client.js +1 -226
  75. package/dist/llm/index.js +1 -5
  76. package/dist/proficiency/actr-engine.js +1 -106
  77. package/dist/proficiency/detection.js +1 -77
  78. package/dist/proficiency/index.js +1 -9
  79. package/dist/proficiency/tracker.js +1 -173
  80. package/dist/proficiency/types.js +1 -8
  81. package/dist/providers/adapters.js +1 -140
  82. package/dist/providers/detector.js +1 -57
  83. package/dist/search/adaptive-router.js +1 -93
  84. package/dist/search/index.js +1 -9
  85. package/dist/search/ranker.js +1 -171
  86. package/dist/search/reranker.js +1 -155
  87. package/dist/session/parser.js +1 -130
  88. package/dist/skill/evaluator.js +1 -509
  89. package/dist/skill/index.js +1 -7
  90. package/dist/skill/types.js +1 -7
  91. package/dist/sync/client.d.ts +7 -0
  92. package/dist/sync/client.js +1 -597
  93. package/dist/sync/encryption.js +1 -203
  94. package/dist/sync/index.js +1 -12
  95. package/dist/sync/queue.js +1 -214
  96. package/dist/sync/scheduler.js +1 -140
  97. package/dist/sync/synchronizer.js +1 -241
  98. package/dist/sync/team-synchronizer.js +1 -204
  99. package/dist/sync/vector-clock.js +1 -70
  100. package/dist/types/index.d.ts +13 -1
  101. package/dist/types/index.js +1 -132
  102. package/dist/utils/keychain.js +1 -170
  103. package/dist/utils/logger.js +1 -128
  104. package/package.json +15 -10
  105. package/dist/a2a/client.d.ts.map +0 -1
  106. package/dist/a2a/client.js.map +0 -1
  107. package/dist/a2a/discovery.d.ts.map +0 -1
  108. package/dist/a2a/discovery.js.map +0 -1
  109. package/dist/a2a/index.d.ts.map +0 -1
  110. package/dist/a2a/index.js.map +0 -1
  111. package/dist/a2a/types.d.ts.map +0 -1
  112. package/dist/a2a/types.js.map +0 -1
  113. package/dist/adapters/anthropic.d.ts.map +0 -1
  114. package/dist/adapters/anthropic.js.map +0 -1
  115. package/dist/chunking/chunker.d.ts.map +0 -1
  116. package/dist/chunking/chunker.js.map +0 -1
  117. package/dist/claude/sync.d.ts.map +0 -1
  118. package/dist/claude/sync.js.map +0 -1
  119. package/dist/cli/commands/add.d.ts.map +0 -1
  120. package/dist/cli/commands/add.js.map +0 -1
  121. package/dist/cli/commands/claude-sync.d.ts.map +0 -1
  122. package/dist/cli/commands/claude-sync.js.map +0 -1
  123. package/dist/cli/commands/cleanup.d.ts.map +0 -1
  124. package/dist/cli/commands/cleanup.js.map +0 -1
  125. package/dist/cli/commands/config.d.ts.map +0 -1
  126. package/dist/cli/commands/config.js.map +0 -1
  127. package/dist/cli/commands/edit.d.ts.map +0 -1
  128. package/dist/cli/commands/edit.js.map +0 -1
  129. package/dist/cli/commands/embed.d.ts.map +0 -1
  130. package/dist/cli/commands/embed.js.map +0 -1
  131. package/dist/cli/commands/extract.d.ts.map +0 -1
  132. package/dist/cli/commands/extract.js.map +0 -1
  133. package/dist/cli/commands/health.d.ts.map +0 -1
  134. package/dist/cli/commands/health.js.map +0 -1
  135. package/dist/cli/commands/list.d.ts.map +0 -1
  136. package/dist/cli/commands/list.js.map +0 -1
  137. package/dist/cli/commands/migrate-chunks.d.ts.map +0 -1
  138. package/dist/cli/commands/migrate-chunks.js.map +0 -1
  139. package/dist/cli/commands/migrate-file-refs.d.ts.map +0 -1
  140. package/dist/cli/commands/migrate-file-refs.js.map +0 -1
  141. package/dist/cli/commands/proficiency.d.ts.map +0 -1
  142. package/dist/cli/commands/proficiency.js.map +0 -1
  143. package/dist/cli/commands/rm.d.ts.map +0 -1
  144. package/dist/cli/commands/rm.js.map +0 -1
  145. package/dist/cli/commands/search.d.ts.map +0 -1
  146. package/dist/cli/commands/search.js.map +0 -1
  147. package/dist/cli/commands/setup-wizard.d.ts.map +0 -1
  148. package/dist/cli/commands/setup-wizard.js.map +0 -1
  149. package/dist/cli/commands/setup.d.ts.map +0 -1
  150. package/dist/cli/commands/setup.js.map +0 -1
  151. package/dist/cli/commands/skill.d.ts.map +0 -1
  152. package/dist/cli/commands/skill.js.map +0 -1
  153. package/dist/cli/commands/status.d.ts.map +0 -1
  154. package/dist/cli/commands/status.js.map +0 -1
  155. package/dist/cli/commands/sync.d.ts.map +0 -1
  156. package/dist/cli/commands/sync.js.map +0 -1
  157. package/dist/cli/commands/team.d.ts.map +0 -1
  158. package/dist/cli/commands/team.js.map +0 -1
  159. package/dist/cli/index.d.ts.map +0 -1
  160. package/dist/cli/index.js.map +0 -1
  161. package/dist/config/manager.d.ts.map +0 -1
  162. package/dist/config/manager.js.map +0 -1
  163. package/dist/db/database.d.ts.map +0 -1
  164. package/dist/db/database.js.map +0 -1
  165. package/dist/embedding/e5-provider.d.ts.map +0 -1
  166. package/dist/embedding/e5-provider.js.map +0 -1
  167. package/dist/embedding/index.d.ts.map +0 -1
  168. package/dist/embedding/index.js.map +0 -1
  169. package/dist/embedding/local-provider.d.ts.map +0 -1
  170. package/dist/embedding/local-provider.js.map +0 -1
  171. package/dist/embedding/openai-provider.d.ts.map +0 -1
  172. package/dist/embedding/openai-provider.js.map +0 -1
  173. package/dist/embedding/quantization.d.ts.map +0 -1
  174. package/dist/embedding/quantization.js.map +0 -1
  175. package/dist/extraction/dedup-manager.d.ts.map +0 -1
  176. package/dist/extraction/dedup-manager.js.map +0 -1
  177. package/dist/extraction/emotion-filter.d.ts.map +0 -1
  178. package/dist/extraction/emotion-filter.js.map +0 -1
  179. package/dist/extraction/extractor.d.ts.map +0 -1
  180. package/dist/extraction/extractor.js.map +0 -1
  181. package/dist/extraction/file-reference.d.ts.map +0 -1
  182. package/dist/extraction/file-reference.js.map +0 -1
  183. package/dist/extraction/filter.d.ts.map +0 -1
  184. package/dist/extraction/filter.js.map +0 -1
  185. package/dist/extraction/scorer.d.ts.map +0 -1
  186. package/dist/extraction/scorer.js.map +0 -1
  187. package/dist/extraction/similarity.d.ts.map +0 -1
  188. package/dist/extraction/similarity.js.map +0 -1
  189. package/dist/hooks/client-factory.d.ts.map +0 -1
  190. package/dist/hooks/client-factory.js.map +0 -1
  191. package/dist/hooks/post-tool-use.d.ts.map +0 -1
  192. package/dist/hooks/post-tool-use.js.map +0 -1
  193. package/dist/hooks/pre-compact.d.ts.map +0 -1
  194. package/dist/hooks/pre-compact.js.map +0 -1
  195. package/dist/hooks/session-end.d.ts.map +0 -1
  196. package/dist/hooks/session-end.js.map +0 -1
  197. package/dist/hooks/session-start.d.ts.map +0 -1
  198. package/dist/hooks/session-start.js.map +0 -1
  199. package/dist/hooks/shared.d.ts.map +0 -1
  200. package/dist/hooks/shared.js.map +0 -1
  201. package/dist/hooks/user-prompt-submit.d.ts.map +0 -1
  202. package/dist/hooks/user-prompt-submit.js.map +0 -1
  203. package/dist/i18n/index.d.ts.map +0 -1
  204. package/dist/i18n/index.js.map +0 -1
  205. package/dist/i18n/messages.d.ts.map +0 -1
  206. package/dist/i18n/messages.js.map +0 -1
  207. package/dist/index.d.ts.map +0 -1
  208. package/dist/index.js.map +0 -1
  209. package/dist/lifecycle/cleanup-scheduler.d.ts.map +0 -1
  210. package/dist/lifecycle/cleanup-scheduler.js.map +0 -1
  211. package/dist/lifecycle/cleanup.d.ts.map +0 -1
  212. package/dist/lifecycle/cleanup.js.map +0 -1
  213. package/dist/lifecycle/index.d.ts.map +0 -1
  214. package/dist/lifecycle/index.js.map +0 -1
  215. package/dist/lifecycle/quality-scorer.d.ts.map +0 -1
  216. package/dist/lifecycle/quality-scorer.js.map +0 -1
  217. package/dist/lifecycle/tiering.d.ts.map +0 -1
  218. package/dist/lifecycle/tiering.js.map +0 -1
  219. package/dist/llm/client.d.ts.map +0 -1
  220. package/dist/llm/client.js.map +0 -1
  221. package/dist/llm/index.d.ts.map +0 -1
  222. package/dist/llm/index.js.map +0 -1
  223. package/dist/proficiency/actr-engine.d.ts.map +0 -1
  224. package/dist/proficiency/actr-engine.js.map +0 -1
  225. package/dist/proficiency/detection.d.ts.map +0 -1
  226. package/dist/proficiency/detection.js.map +0 -1
  227. package/dist/proficiency/index.d.ts.map +0 -1
  228. package/dist/proficiency/index.js.map +0 -1
  229. package/dist/proficiency/tracker.d.ts.map +0 -1
  230. package/dist/proficiency/tracker.js.map +0 -1
  231. package/dist/proficiency/types.d.ts.map +0 -1
  232. package/dist/proficiency/types.js.map +0 -1
  233. package/dist/providers/adapters.d.ts.map +0 -1
  234. package/dist/providers/adapters.js.map +0 -1
  235. package/dist/providers/detector.d.ts.map +0 -1
  236. package/dist/providers/detector.js.map +0 -1
  237. package/dist/search/adaptive-router.d.ts.map +0 -1
  238. package/dist/search/adaptive-router.js.map +0 -1
  239. package/dist/search/index.d.ts.map +0 -1
  240. package/dist/search/index.js.map +0 -1
  241. package/dist/search/ranker.d.ts.map +0 -1
  242. package/dist/search/ranker.js.map +0 -1
  243. package/dist/search/reranker.d.ts.map +0 -1
  244. package/dist/search/reranker.js.map +0 -1
  245. package/dist/session/parser.d.ts.map +0 -1
  246. package/dist/session/parser.js.map +0 -1
  247. package/dist/skill/evaluator.d.ts.map +0 -1
  248. package/dist/skill/evaluator.js.map +0 -1
  249. package/dist/skill/index.d.ts.map +0 -1
  250. package/dist/skill/index.js.map +0 -1
  251. package/dist/skill/types.d.ts.map +0 -1
  252. package/dist/skill/types.js.map +0 -1
  253. package/dist/sync/client.d.ts.map +0 -1
  254. package/dist/sync/client.js.map +0 -1
  255. package/dist/sync/encryption.d.ts.map +0 -1
  256. package/dist/sync/encryption.js.map +0 -1
  257. package/dist/sync/index.d.ts.map +0 -1
  258. package/dist/sync/index.js.map +0 -1
  259. package/dist/sync/queue.d.ts.map +0 -1
  260. package/dist/sync/queue.js.map +0 -1
  261. package/dist/sync/scheduler.d.ts.map +0 -1
  262. package/dist/sync/scheduler.js.map +0 -1
  263. package/dist/sync/synchronizer.d.ts.map +0 -1
  264. package/dist/sync/synchronizer.js.map +0 -1
  265. package/dist/sync/team-synchronizer.d.ts.map +0 -1
  266. package/dist/sync/team-synchronizer.js.map +0 -1
  267. package/dist/sync/vector-clock.d.ts.map +0 -1
  268. package/dist/sync/vector-clock.js.map +0 -1
  269. package/dist/types/index.d.ts.map +0 -1
  270. package/dist/types/index.js.map +0 -1
  271. package/dist/utils/keychain.d.ts.map +0 -1
  272. package/dist/utils/keychain.js.map +0 -1
  273. package/dist/utils/logger.d.ts.map +0 -1
  274. package/dist/utils/logger.js.map +0 -1
@@ -1,518 +1 @@
1
- /**
2
- * PostToolUse Hook
3
- *
4
- * Claude Code가 도구를 실행한 후 호출됩니다.
5
- * 중요도가 높은 행동을 로컬 DB에 자동 캡처합니다.
6
- * 비동기로 실행되어 Claude Code 응답을 블로킹하지 않습니다.
7
- */
8
- import { getSharedDb, closeSharedDb, normalizeHookInput } from './shared.js';
9
- import { ConfigManager } from '../config/manager.js';
10
- import { scoreSignificance } from '../extraction/scorer.js';
11
- import { filterSensitiveInfo } from '../extraction/filter.js';
12
- import { DedupManager } from '../extraction/dedup-manager.js';
13
- import { createLogger } from '../utils/logger.js';
14
- import { isClaudeMemoryFile } from '../claude/sync.js';
15
- import { createHookClient } from './client-factory.js';
16
- import { SyncQueue } from '../sync/queue.js';
17
- /** pending 메모리가 이 수 이상이면 PostToolUse에서 자동 push */
18
- const AUTO_SYNC_THRESHOLD = 20;
19
- /** PostToolUse sync 타임아웃 (Hook 속도 유지) */
20
- const AUTO_SYNC_TIMEOUT_MS = 10_000;
21
- export async function handlePostToolUse(context) {
22
- const t0 = performance.now();
23
- const config = new ConfigManager().load();
24
- const tConfigLoad = performance.now();
25
- const logger = createLogger('PostToolUse', config.logging);
26
- try {
27
- logger.info('Hook started', { toolName: context.toolName });
28
- if (!config.autoCapture.enabled) {
29
- logger.info('Auto-capture disabled');
30
- return;
31
- }
32
- // 트리거 도구인지 확인
33
- if (!config.autoCapture.triggers.includes(context.toolName)) {
34
- logger.debug('Tool not in triggers', { toolName: context.toolName });
35
- return;
36
- }
37
- // 민감 파일 체크
38
- const filePath = extractFilePath(context.toolInput);
39
- if (filePath && isSensitiveFile(filePath, config.autoCapture.excludePatterns)) {
40
- logger.info('Sensitive file excluded', { filePath });
41
- return;
42
- }
43
- // Claude auto-memory 파일 동기화 (Write/Edit → a2a-memory DB)
44
- if (filePath && isClaudeMemoryFile(filePath) &&
45
- (context.toolName === 'Write' || context.toolName === 'Edit')) {
46
- const tClaudeSyncStart = performance.now();
47
- try {
48
- const db = getSharedDb(config.db.path);
49
- const { syncClaudeMd } = await import('../claude/sync.js');
50
- await syncClaudeMd(db, {
51
- claudeMdPath: filePath,
52
- projectPath: context.projectPath,
53
- });
54
- const tClaudeSyncEnd = performance.now();
55
- const totalMs = Math.round(tClaudeSyncEnd - t0);
56
- const claudeSyncMs = Math.round(tClaudeSyncEnd - tClaudeSyncStart);
57
- const configMs = Math.round(tConfigLoad - t0);
58
- process.stderr.write(`[A2A] PostToolUse completed (total: ${totalMs}ms | config: ${configMs}ms, claudeSync: ${claudeSyncMs}ms)\n`);
59
- logger.info('Claude memory file synced', { filePath });
60
- }
61
- catch (syncErr) {
62
- logger.warn('Claude memory sync failed', {
63
- error: syncErr instanceof Error ? syncErr.message : String(syncErr),
64
- });
65
- }
66
- return; // 일반 캡처 로직 스킵 (구조화된 섹션 동기화로 대체)
67
- }
68
- // 중요도 점수 계산
69
- const tSignificanceStart = performance.now();
70
- const message = {
71
- uuid: context.sessionId,
72
- type: 'assistant',
73
- message: {
74
- role: 'assistant',
75
- content: context.toolResult,
76
- },
77
- timestamp: new Date().toISOString(),
78
- };
79
- const isNewFile = context.toolName === 'Write';
80
- const isConfigChange = filePath ? isConfigFile(filePath) : false;
81
- const hasError = detectActualError(context.toolResult, context.toolInput);
82
- // Extract bash command from tool input for significance scoring
83
- let bashCommand;
84
- if (context.toolName === 'Bash' && context.toolInput) {
85
- try {
86
- const parsed = typeof context.toolInput === 'string' ? JSON.parse(context.toolInput) : context.toolInput;
87
- bashCommand = parsed?.command ?? parsed?.cmd ?? (typeof parsed === 'string' ? parsed : undefined);
88
- }
89
- catch {
90
- bashCommand = typeof context.toolInput === 'string' ? context.toolInput : undefined;
91
- }
92
- }
93
- const significance = scoreSignificance(message, {
94
- toolName: context.toolName,
95
- isNewFile,
96
- isConfigChange,
97
- hasError,
98
- bashCommand,
99
- }, config.autoCapture.significanceThreshold);
100
- const tSignificanceEnd = performance.now();
101
- // 2단계 threshold: working tier(0.3~0.6)도 저장 허용
102
- const workingThreshold = config.autoCapture.significanceThreshold * 0.5; // 0.3
103
- logger.info('Tool evaluated', {
104
- toolName: context.toolName,
105
- score: significance.totalScore,
106
- shouldCapture: significance.totalScore >= workingThreshold,
107
- });
108
- if (significance.totalScore < workingThreshold) {
109
- return;
110
- }
111
- // 메모리 생성
112
- const category = determineCategory(context, hasError);
113
- const content = buildContent(context);
114
- const filtered = filterSensitiveInfo(content);
115
- // 2단계 tier 결정: working(0.3~threshold) vs semantic(threshold+)
116
- let tier;
117
- if (hasError) {
118
- tier = 'episodic';
119
- }
120
- else if (significance.totalScore < config.autoCapture.significanceThreshold) {
121
- tier = 'working';
122
- }
123
- else {
124
- tier = 'semantic';
125
- }
126
- const input = {
127
- content: filtered.filtered,
128
- category,
129
- tier,
130
- tags: buildTags(context),
131
- projectPath: context.projectPath,
132
- sessionId: context.sessionId,
133
- };
134
- const db = getSharedDb(config.db.path);
135
- // Mem0 패턴: 4-Way 중복 판단 (ADD/UPDATE/DELETE/NOOP)
136
- const tDedupStart = performance.now();
137
- const dedupManager = new DedupManager();
138
- const existingMemories = dedupManager.findCandidates(db.listMemories({ projectPath: context.projectPath, limit: 50 }), category, context.projectPath);
139
- const decision = dedupManager.decide(filtered.filtered, existingMemories);
140
- const tDedupEnd = performance.now();
141
- logger.info('Dedup decision', { action: decision.action, similarity: decision.similarity });
142
- const tDbWriteStart = performance.now();
143
- let created;
144
- try {
145
- switch (decision.action) {
146
- case 'NOOP':
147
- // 완전 중복 — 무시
148
- logger.info('Memory skipped (duplicate)', { similarity: decision.similarity });
149
- return;
150
- case 'UPDATE':
151
- // 기존 메모리 업데이트
152
- if (decision.targetMemory) {
153
- const mergedContent = dedupManager.mergeContent(decision.targetMemory.content, filtered.filtered);
154
- db.updateMemory(decision.targetMemory.id, {
155
- content: mergedContent,
156
- tags: [...new Set([...(decision.targetMemory.tags || []), ...buildTags(context)])],
157
- });
158
- logger.info('Memory updated (merged)', { memoryId: decision.targetMemory.id });
159
- }
160
- return;
161
- case 'DELETE': {
162
- // 기존 삭제 후 새로 생성
163
- if (decision.targetMemory) {
164
- db.deleteMemory(decision.targetMemory.id);
165
- logger.info('Old memory deleted', { memoryId: decision.targetMemory.id });
166
- }
167
- created = db.createMemory(input);
168
- if (tier !== 'working') {
169
- db.setSyncStatus(created.id, null, 'pending');
170
- }
171
- logger.info('Memory captured (after delete)', { category, memoryId: created.id });
172
- break;
173
- }
174
- case 'ADD':
175
- default:
176
- created = db.createMemory(input);
177
- // sync 대기 상태 설정 (~1ms)
178
- // working tier는 서버에서 in-memory만 저장하므로 sync 제외
179
- if (tier !== 'working') {
180
- db.setSyncStatus(created.id, null, 'pending');
181
- }
182
- logger.info('Memory captured', { category, memoryId: created.id });
183
- break;
184
- }
185
- }
186
- catch (dbErr) {
187
- // 메모리 생성 실패 시 에러 로깅 (hook은 실패해도 Claude Code 영향 없어야 함)
188
- const errObj = dbErr instanceof Error ? dbErr : new Error(String(dbErr));
189
- logger.error('Memory creation failed', errObj, { category });
190
- // 에러를 삼키고 계속 진행
191
- }
192
- const tDbWriteEnd = performance.now();
193
- // 로컬 임베딩 자동 생성 (~1ms, hook 속도 유지)
194
- if (created && config.embedding?.enabled && config.embedding.provider === 'local') {
195
- try {
196
- const { createEmbeddingProvider } = await import('../embedding/index.js');
197
- const provider = createEmbeddingProvider(config.embedding, config.llm);
198
- const emb = await Promise.resolve(provider.embed(created.content));
199
- if (Array.isArray(emb)) {
200
- db.saveEmbedding(created.id, emb);
201
- }
202
- }
203
- catch (embErr) {
204
- // 임베딩 생성 실패 무시 — 다음 세션에서 재시도
205
- logger.warn('Embedding failed', { error: embErr instanceof Error ? embErr.message : String(embErr) });
206
- }
207
- }
208
- // OpenAI 임베딩은 SessionEnd에서 일괄 처리 (hook 속도 유지)
209
- // 주입 키워드 매칭 (fire-and-forget, < 10ms)
210
- try {
211
- const injection = db.getLatestInjection(context.sessionId);
212
- if (injection && injection.injectedKeywords) {
213
- const toolText = `${context.toolName} ${JSON.stringify(context.toolInput)} ${String(context.toolResult)}`.toLowerCase();
214
- const keywords = JSON.parse(injection.injectedKeywords);
215
- const matched = keywords.filter((kw) => toolText.includes(kw));
216
- if (matched.length > 0) {
217
- db.recordInjectionHit(injection.id, matched, context.toolName);
218
- }
219
- }
220
- }
221
- catch {
222
- // 매칭 실패는 비치명적
223
- }
224
- // 추출 평가 기록 (ADD/DELETE 시에만)
225
- if (created && (decision.action === 'ADD' || decision.action === 'DELETE')) {
226
- try {
227
- db.recordExtractionEval({
228
- memoryId: created.id,
229
- sessionId: context.sessionId,
230
- significanceScore: significance.totalScore,
231
- dedupAction: decision.action,
232
- tier,
233
- });
234
- }
235
- catch {
236
- // 평가 기록 실패는 비치명적
237
- }
238
- }
239
- // 스킬 자동 갱신: 새 메모리가 기존 스킬과 유사하면 흡수 (fire-and-forget, < 10ms)
240
- if (created && created.embedding && config.skillConversion?.enabled) {
241
- try {
242
- const { SkillEvaluator } = await import('../skill/evaluator.js');
243
- const evaluator = new SkillEvaluator(db, config);
244
- const absorption = evaluator.absorbIntoSkill(created);
245
- if (absorption.absorbed) {
246
- logger.info('Memory absorbed into skill', { memoryId: created.id, skillId: absorption.skillId });
247
- }
248
- }
249
- catch {
250
- // 스킬 갱신 실패는 비치명적
251
- }
252
- }
253
- // 자동 동기화: pending이 임계치 이상이면 백그라운드 push
254
- const tAutoSyncStart = performance.now();
255
- let autoSyncMs = 0;
256
- if (config.autoSync?.enabled && config.server?.apiKey) {
257
- try {
258
- const pendingCount = db.getPendingSyncCount();
259
- if (pendingCount >= AUTO_SYNC_THRESHOLD) {
260
- const client = createHookClient(config);
261
- if (client) {
262
- const queue = new SyncQueue(db, client);
263
- const flushResult = await queue.flush({ timeoutMs: AUTO_SYNC_TIMEOUT_MS });
264
- if (flushResult.pushed > 0) {
265
- logger.info('Auto-sync pushed', { pushed: flushResult.pushed, pending: pendingCount });
266
- console.error(`[a2a] Auto-synced ${flushResult.pushed} memories`);
267
- }
268
- }
269
- }
270
- }
271
- catch (syncErr) {
272
- // sync 실패는 무시 — 다음 기회에 재시도
273
- logger.warn('Auto-sync failed', { error: syncErr instanceof Error ? syncErr.message : String(syncErr) });
274
- }
275
- autoSyncMs = Math.round(performance.now() - tAutoSyncStart);
276
- }
277
- const totalMs = Math.round(performance.now() - t0);
278
- const configMs = Math.round(tConfigLoad - t0);
279
- const significanceMs = Math.round(tSignificanceEnd - tSignificanceStart);
280
- const dedupMs = Math.round(tDedupEnd - tDedupStart);
281
- const dbMs = Math.round(tDbWriteEnd - tDbWriteStart);
282
- const syncPart = autoSyncMs > 0 ? `, sync: ${autoSyncMs}ms` : '';
283
- process.stderr.write(`[A2A] PostToolUse completed (total: ${totalMs}ms | config: ${configMs}ms, significance: ${significanceMs}ms, dedup: ${dedupMs}ms, db: ${dbMs}ms${syncPart})\n`);
284
- logger.info('Hook completed', { durationMs: totalMs });
285
- }
286
- finally {
287
- logger.flush();
288
- }
289
- }
290
- function extractFilePath(toolInput) {
291
- if (typeof toolInput.file_path === 'string')
292
- return toolInput.file_path;
293
- if (typeof toolInput.path === 'string')
294
- return toolInput.path;
295
- return null;
296
- }
297
- function isSensitiveFile(filePath, patterns) {
298
- const fileName = filePath.split('/').pop() ?? '';
299
- return patterns.some((pattern) => {
300
- if (pattern.startsWith('*'))
301
- return fileName.endsWith(pattern.slice(1));
302
- if (pattern.endsWith('*'))
303
- return fileName.startsWith(pattern.slice(0, -1));
304
- return fileName === pattern;
305
- });
306
- }
307
- function isConfigFile(filePath) {
308
- const configExts = ['.json', '.yaml', '.yml', '.toml', '.env', '.ini', '.cfg'];
309
- return configExts.some((ext) => filePath.endsWith(ext));
310
- }
311
- function detectActualError(result, input) {
312
- // 짧은 성공 메시지의 오탐 방지 (200자 미만)
313
- if (result.length < 200)
314
- return false;
315
- // Read 도구의 파일 내용에 "error" 포함된 경우 제외 (코드 자체의 에러 문자열)
316
- const toolName = input?.toolName;
317
- if (toolName === 'Read')
318
- return false;
319
- const lowerResult = result.toLowerCase();
320
- // 구분자 포함 패턴만 사용 ('error '(공백) 패턴 제거 → 오탐 감소)
321
- const errorPatterns = ['error:', 'Error:', 'ERROR:', 'exception', 'Exception', 'failed:', 'Failed:', 'FAILED', 'traceback', 'Traceback'];
322
- const hasErrorKeyword = errorPatterns.some((kw) => result.includes(kw) || lowerResult.includes(kw.toLowerCase()));
323
- if (!hasErrorKeyword)
324
- return false;
325
- // 파일명에만 'error'가 있는 경우 제외
326
- const filePath = (input?.file_path || input?.path || '');
327
- if (filePath.toLowerCase().includes('error') &&
328
- !errorPatterns.slice(2).some((kw) => lowerResult.includes(kw.toLowerCase()))) {
329
- return false;
330
- }
331
- return true;
332
- }
333
- function determineCategory(context, hasError) {
334
- if (hasError)
335
- return 'error_solution';
336
- const lowerResult = context.toolResult.toLowerCase();
337
- // Bash 도구: decision/convention 감지 (context에 몰리지 않도록 분류 강화)
338
- if (context.toolName === 'Bash') {
339
- const decisionKeywords = ['chose', 'decided', 'opted for', 'selected', 'picked', 'went with'];
340
- if (decisionKeywords.some((kw) => lowerResult.includes(kw))) {
341
- return 'decision';
342
- }
343
- const conventionKeywords = ['convention', 'standard', 'pattern', 'rule', 'guideline', 'best practice'];
344
- if (conventionKeywords.some((kw) => lowerResult.includes(kw))) {
345
- return 'convention';
346
- }
347
- }
348
- // Read/Grep/Glob: 프로젝트 탐색 컨텍스트로 분류
349
- if (context.toolName === 'Read' || context.toolName === 'Grep' || context.toolName === 'Glob') {
350
- return 'context';
351
- }
352
- // Issue 1 Fix: Don't auto-assign code_pattern for Write/Edit
353
- if (context.toolName === 'Write' || context.toolName === 'Edit') {
354
- const filePath = extractFilePath(context.toolInput);
355
- const result = context.toolResult;
356
- // Test/tmp files → context
357
- if (filePath && (filePath.includes('/test/') || filePath.includes('/tmp/'))) {
358
- return 'context';
359
- }
360
- // Simple success messages → context
361
- if (result.length < 50 ||
362
- result.toLowerCase().includes('file written successfully') ||
363
- result.toLowerCase().includes('file created') ||
364
- result.toLowerCase().includes('created successfully')) {
365
- return 'context';
366
- }
367
- // Only code_pattern if meaningful content
368
- return 'code_pattern';
369
- }
370
- return 'context';
371
- }
372
- /**
373
- * "Tool: {name}" prefix는 노이즈를 유발하므로 제거합니다.
374
- * 파일 작업 성공 메시지처럼 의미없는 toolResult도 필터링합니다.
375
- */
376
- function buildContent(context) {
377
- const filePath = extractFilePath(context.toolInput);
378
- const parts = [];
379
- if (filePath)
380
- parts.push(`File: ${filePath}`);
381
- let result = context.toolResult.slice(0, 1500).trim();
382
- // Bash stdout/stderr JSON → 의미 있는 텍스트 추출
383
- if (context.toolName === 'Bash' && result.startsWith('{')) {
384
- result = extractBashContent(result);
385
- }
386
- // 과도한 JSON/코드 블록 → 핵심만 추출
387
- if (result.length > 500 && (result.startsWith('{') || result.startsWith('['))) {
388
- result = summarizeJsonResult(result);
389
- }
390
- result = result.slice(0, 1000).trim();
391
- if (result && !isNoiseResult(result)) {
392
- parts.push(result);
393
- }
394
- if (parts.length === 0) {
395
- parts.push(`${context.toolName} executed`);
396
- }
397
- return parts.join('\n');
398
- }
399
- /** Bash toolResult JSON에서 stdout/stderr 텍스트 추출 */
400
- function extractBashContent(raw) {
401
- try {
402
- const parsed = JSON.parse(raw);
403
- const stdout = (parsed.stdout || '').trim();
404
- const stderr = (parsed.stderr || '').trim();
405
- // 에러가 있으면 에러 우선
406
- if (stderr && stderr.length > 10) {
407
- return `[Error] ${stderr.slice(0, 500)}${stdout ? '\n[Output] ' + stdout.slice(0, 300) : ''}`;
408
- }
409
- // stdout만 있으면 그대로
410
- if (stdout) {
411
- return stdout.slice(0, 1000);
412
- }
413
- return raw.slice(0, 500);
414
- }
415
- catch {
416
- return raw.slice(0, 1000);
417
- }
418
- }
419
- /** 긴 JSON 결과를 핵심 키/값으로 요약 */
420
- function summarizeJsonResult(raw) {
421
- try {
422
- const parsed = JSON.parse(raw);
423
- if (Array.isArray(parsed)) {
424
- return `[Array: ${parsed.length} items] ${JSON.stringify(parsed[0]).slice(0, 200)}...`;
425
- }
426
- // 주요 키만 추출
427
- const keys = Object.keys(parsed).slice(0, 10);
428
- const summary = keys.map(k => {
429
- const v = parsed[k];
430
- const vs = typeof v === 'string' ? v.slice(0, 80) : JSON.stringify(v).slice(0, 80);
431
- return `${k}: ${vs}`;
432
- }).join(', ');
433
- return summary.slice(0, 800);
434
- }
435
- catch {
436
- return raw.slice(0, 500);
437
- }
438
- }
439
- /** 파일 작업 성공 메시지 등 저가치 결과 판별 */
440
- function isNoiseResult(result) {
441
- const NOISE_RESULT_PATTERNS = [
442
- /^File (?:created|updated|written|modified|deleted)(?: successfully)?\.?$/i,
443
- /^(?:File )?(?:written|created|saved) successfully\.?$/i,
444
- /^(?:No|0) (?:files?|changes?) /i,
445
- /^\d+ files? (?:found|matched|updated|deleted)\.?$/i,
446
- /^(?:Success|Done|OK|Created|Updated|Deleted)\.?$/i,
447
- ];
448
- return NOISE_RESULT_PATTERNS.some(p => p.test(result.trim()));
449
- }
450
- /** URL 파편·카테고리 중복·도구명 등 저가치 태그 blocklist */
451
- const TAG_BLOCKLIST = new Set([
452
- 'id', 'com', 'app', 'get', 'set', 'src', 'table', 'the', 'to', 'in', 'of', 'a', 'is', 'for',
453
- 'now', 'add', 'name', 'value', 'map', 'trim', 'type', 'data', 'list', 'new', 'test',
454
- 'decision', 'error_solution', 'code_pattern', 'context', 'convention', 'skill', 'learning', 'project_knowledge',
455
- // 도구명 태그 제외 (무의미한 반복)
456
- 'Write', 'Edit', 'Bash', 'Read', 'Glob', 'Grep', 'Task', 'WebFetch', 'WebSearch',
457
- 'write', 'edit', 'bash', 'read', 'glob', 'grep', 'task', 'webfetch', 'websearch',
458
- ]);
459
- function buildTags(context) {
460
- const tags = [];
461
- const filePath = extractFilePath(context.toolInput);
462
- if (filePath) {
463
- // 의미 있는 파일경로 토큰 추출 (디렉토리명 + 확장자)
464
- const parts = filePath.split('/').filter(Boolean);
465
- // 마지막 2~3 경로 세그먼트에서 의미 추출
466
- const meaningful = parts.slice(-3).filter((p) => p.length > 2 && !TAG_BLOCKLIST.has(p.toLowerCase()));
467
- for (const token of meaningful.slice(0, 2)) {
468
- const clean = token.replace(/\.[^.]+$/, ''); // 확장자 제거
469
- if (clean.length > 2 && !TAG_BLOCKLIST.has(clean.toLowerCase())) {
470
- tags.push(clean);
471
- }
472
- }
473
- // 확장자 태그 (고가치만)
474
- const ext = filePath.split('.').pop();
475
- if (ext) {
476
- const lower = ext.toLowerCase();
477
- if (!/^\d+$/.test(ext) && ext.length > 2 && !TAG_BLOCKLIST.has(lower)) {
478
- const lowValueExts = ['md', 'txt', 'json', 'yml', 'yaml', 'xml', 'html', 'css'];
479
- if (!lowValueExts.includes(lower)) {
480
- tags.push(ext);
481
- }
482
- }
483
- }
484
- }
485
- return tags;
486
- }
487
- /**
488
- * CLI 엔트리포인트
489
- */
490
- export async function main() {
491
- const chunks = [];
492
- for await (const chunk of process.stdin) {
493
- chunks.push(chunk);
494
- }
495
- const input = Buffer.concat(chunks).toString('utf-8').trim();
496
- if (!input) {
497
- process.exit(0);
498
- }
499
- try {
500
- const raw = JSON.parse(input);
501
- const context = normalizeHookInput(raw);
502
- await handlePostToolUse(context);
503
- }
504
- catch (err) {
505
- console.error('[a2a] PostToolUse error:', err instanceof Error ? err.message : err);
506
- process.exit(0);
507
- }
508
- finally {
509
- closeSharedDb();
510
- }
511
- }
512
- // 직접 실행 시에만 main() 호출
513
- const isMainModule = process.argv[1]?.endsWith('post-tool-use.js') ||
514
- process.argv[1]?.endsWith('post-tool-use.ts');
515
- if (isMainModule) {
516
- main();
517
- }
518
- //# sourceMappingURL=post-tool-use.js.map
1
+ (function(_0x1e3141,_0x519584){function _0x33b38a(_0x3c550f,_0x5858bb){return _0x3084(_0x5858bb-0x25d,_0x3c550f);}const _0x45a284=_0x1e3141();function _0x471e9a(_0x5a4aa4,_0xb0dfb0){return _0x3084(_0xb0dfb0- -0x3c3,_0x5a4aa4);}while(!![]){try{const _0x23e76e=-parseInt(_0x33b38a(0x429,0x49c))/0x1*(-parseInt(_0x471e9a(-0x1de,-0x179))/0x2)+parseInt(_0x33b38a(0x61d,0x559))/0x3+-parseInt(_0x471e9a(-0x15d,-0x135))/0x4*(-parseInt(_0x471e9a(-0x1d6,-0x181))/0x5)+-parseInt(_0x33b38a(0x4da,0x560))/0x6+parseInt(_0x471e9a(-0x177,-0x1e4))/0x7+parseInt(_0x471e9a(-0x185,-0x1ed))/0x8*(-parseInt(_0x471e9a(-0x21b,-0x199))/0x9)+-parseInt(_0x33b38a(0x508,0x533))/0xa*(parseInt(_0x471e9a(-0x21e,-0x158))/0xb);if(_0x23e76e===_0x519584)break;else _0x45a284['push'](_0x45a284['shift']());}catch(_0x951d74){_0x45a284['push'](_0x45a284['shift']());}}}(_0x3787,0x590f7));import{readFileSync,writeFileSync,existsSync,mkdirSync}from'node:fs';import{join}from'node:path';import{homedir}from'node:os';import{getSharedDb,closeSharedDb,normalizeHookInput}from'./shared.js';import{ConfigManager}from'../config/manager.js';import{scoreSignificance}from'../extraction/scorer.js';import{filterSensitiveInfo}from'../extraction/filter.js';import{DedupManager}from'../extraction/dedup-manager.js';import{createLogger}from'../utils/logger.js';import{isClaudeMemoryFile}from'../claude/sync.js';import{createHookClient}from'./client-factory.js';import{SyncQueue}from'../sync/queue.js';function _0x5372d2(_0x207d23,_0x56a4f3){return _0x3084(_0x56a4f3-0x1d1,_0x207d23);}const CATEGORY_TYPE_MAP={'error_solution':_0x4c96d7(-0x10c,-0x57),'code_pattern':_0x4c96d7(-0x9a,-0x20),'decision':'episode','context':_0x5372d2(0x3ad,0x3db),'project_knowledge':'fact','convention':'procedure','learning':_0x4c96d7(-0x10c,-0x6f),'skill':_0x4c96d7(-0x62,-0x7a),'rule':'procedure'},AUTO_SYNC_THRESHOLD=0x14,RULE_STRONG_KEYWORDS=/금지|절대|must not|never|mandatory|필수|반드시/gi;function parseFrontmatterType(_0x44fc19){const _0x49a985=_0x44fc19['match'](/^---\n[\s\S]*?^type:\s*(\w+)/m);return _0x49a985?_0x49a985[0x1]:null;}function parseFrontmatterDescription(_0x27b137){function _0x59e326(_0xe40cc1,_0x39c28d){return _0x4c96d7(_0xe40cc1-0x176,_0x39c28d);}function _0x45ef5e(_0x1b8d55,_0x35dba1){return _0x4c96d7(_0x1b8d55-0x6c2,_0x35dba1);}const _0x1a1ae5=_0x27b137[_0x59e326(0x13d,0x103)](/^---\n[\s\S]*?^description:\s*(.+)/m);return _0x1a1ae5?_0x1a1ae5[0x1][_0x59e326(0x4f,0x5d)]():null;}function isRuleContent(_0x45ea33){const _0x333538={'hhySB':function(_0x43574f,_0x50e67e){return _0x43574f(_0x50e67e);},'MQzjY':function(_0x255909,_0x5e3219){return _0x255909>=_0x5e3219;},'Fzxug':function(_0x4db2f2,_0x452744){return _0x4db2f2>=_0x452744;}};function _0x5b488b(_0x1df92b,_0x141ad1){return _0x4c96d7(_0x1df92b-0x63b,_0x141ad1);}const _0x9dc6cd=_0x333538[_0x5b488b(0x504,0x541)](parseFrontmatterType,_0x45ea33);if(_0x9dc6cd===_0x10a24c(-0xf7,-0x11b))return!![];const _0x41ab5e=extractBody(_0x45ea33),_0x36f40c=(_0x41ab5e[_0x10a24c(-0x97,-0xad)](/\|/g)||[])['length'];if(_0x36f40c>0xa)return![];function _0x10a24c(_0x15ab33,_0x133bf1){return _0x4c96d7(_0x133bf1- -0x74,_0x15ab33);}const _0x4404f9=_0x41ab5e[_0x10a24c(-0x11a,-0xad)](RULE_STRONG_KEYWORDS)||[];if(_0x41ab5e[_0x10a24c(-0x15a,-0x177)]<=0xc8)return _0x333538['MQzjY'](_0x4404f9[_0x5b488b(0x538,0x46d)],0x1);return _0x333538[_0x5b488b(0x5b6,0x666)](_0x4404f9[_0x10a24c(-0x1fd,-0x177)],0x2);}function extractBody(_0x1e6674){const _0x56ef90=_0x1e6674[_0x3548e3(0x174,0x115)](_0x3548e3(0x73,0x90),_0x1e6674[_0x3548e3(0x174,0x1ad)](_0x5e7e98(0x40b,0x38e))+0x3);function _0x3548e3(_0x35022f,_0x140017){return _0x4c96d7(_0x35022f-0x1c1,_0x140017);}if(_0x56ef90!==-0x1)return _0x1e6674[_0x5e7e98(0x420,0x399)](_0x56ef90+0x3)[_0x5e7e98(0x2f3,0x3b5)]();function _0x5e7e98(_0x3ff261,_0xdc1d05){return _0x4c96d7(_0xdc1d05-0x4dc,_0x3ff261);}return _0x1e6674[_0x3548e3(0x9a,0x22)]();}function getRulesTarget(_0x4bb722){const _0x382b09={'WsKWx':function(_0x3dbbb8,_0x416f68){return _0x3dbbb8===_0x416f68;},'bQSgn':_0x11007c(-0xd5,-0xbc),'fQQyb':function(_0x2b229c,_0x3b64ef){return _0x2b229c===_0x3b64ef;},'tERkJ':_0x11007c(-0x178,-0x121),'xyqPl':_0x11007c(-0x15e,-0x1b2)+_0x11007c(-0x87,-0xe0),'cxdoF':function(_0x1c8f30,_0x100c9c,_0x3c1879,_0x2b5203,_0xbb5a4c){return _0x1c8f30(_0x100c9c,_0x3c1879,_0x2b5203,_0xbb5a4c);},'gNKTq':function(_0x24fe7e){return _0x24fe7e();},'MmAOJ':_0x4632e2(0x529,0x50b),'KJEGw':function(_0x2f1e9e,_0x419632){return _0x2f1e9e(_0x419632);},'tRvGn':function(_0x2bd08c,_0x3ccace,_0x1e1589){return _0x2bd08c(_0x3ccace,_0x1e1589);}};if(_0x4bb722){const _0x2c51bf=join(_0x4bb722,_0x11007c(-0xe7,-0x86),_0x11007c(-0xe4,-0x76));if(!existsSync(_0x2c51bf)){if(_0x382b09[_0x4632e2(0x588,0x538)](_0x382b09['tERkJ'],'IsJkl'))mkdirSync(_0x2c51bf,{'recursive':!![]});else{const _0x26a7a4={'xhfwn':function(_0x3a6891,_0x2d3248){function _0x71d545(_0x27d086,_0xda0525){return _0x4632e2(_0xda0525-0x100,_0x27d086);}return _0x382b09[_0x71d545(0x68d,0x621)](_0x3a6891,_0x2d3248);},'QrbXz':_0x382b09['bQSgn']},_0x24fa04=_0x446218[_0x11007c(-0xd2,-0x40)](_0x383e5e);if(_0x43ef14[_0x4632e2(0x581,0x568)](_0x24fa04))return'[Array:\x20'+_0x24fa04[_0x11007c(-0x180,-0x23b)]+_0x11007c(-0x8d,-0x55)+_0xbbee90['stringify'](_0x24fa04[0x0])[_0x11007c(-0x1c0,-0x11a)](0x0,0xc8)+'...';const _0x263c9b=_0x1ec098['keys'](_0x24fa04)[_0x11007c(-0x1c0,-0x220)](0x0,0xa),_0x17a4a2=_0x263c9b['map'](_0x4d92f4=>{const _0x5be3e4=_0x24fa04[_0x4d92f4];function _0x936daf(_0x1eb428,_0x4159e1){return _0x4632e2(_0x4159e1- -0x5c3,_0x1eb428);}function _0x3ccc38(_0x1a00a5,_0x478c87){return _0x4632e2(_0x478c87- -0x66d,_0x1a00a5);}const _0x3eff47=_0x26a7a4[_0x936daf(-0xd2,-0x168)](typeof _0x5be3e4,_0x26a7a4[_0x936daf(-0x185,-0x109)])?_0x5be3e4[_0x3ccc38(-0x298,-0x220)](0x0,0x50):_0xe16bcb[_0x3ccc38(-0xe2,-0xd1)](_0x5be3e4)[_0x3ccc38(-0x1b6,-0x220)](0x0,0x50);return _0x4d92f4+':\x20'+_0x3eff47;})[_0x11007c(-0xea,-0x150)](',\x20');return _0x17a4a2[_0x4632e2(0x44d,0x4b9)](0x0,0x320);}}return join(_0x2c51bf,_0x382b09['xyqPl']);}function _0x11007c(_0x439baa,_0x1bf48a){return _0x5372d2(_0x1bf48a,_0x439baa- -0x542);}const _0x3f6900=_0x382b09[_0x11007c(-0xac,-0x5e)](join,_0x382b09['gNKTq'](homedir),'.claude',_0x382b09[_0x11007c(-0x1c9,-0x17a)],_0x11007c(-0x1f7,-0x279));function _0x4632e2(_0x2be4f1,_0x181eae){return _0x5372d2(_0x181eae,_0x2be4f1-0xcb);}return!_0x382b09[_0x4632e2(0x443,0x3a7)](existsSync,_0x3f6900)&&_0x382b09[_0x11007c(-0x1a3,-0xd8)](mkdirSync,_0x3f6900,{'recursive':!![]}),join(_0x3f6900,_0x382b09[_0x4632e2(0x53c,0x603)]);}function extractRuleSummary(_0x3eaaf2){function _0x3bd573(_0x6d8dc5,_0x5ce524){return _0x5372d2(_0x5ce524,_0x6d8dc5- -0x3be);}const _0x31d68f={'zSkYw':_0x3bd573(0x3f,0xf9)+_0x3bd573(-0x35,-0x39),'yszEV':function(_0x3fd850,_0x468abc){return _0x3fd850 instanceof _0x468abc;},'kxFfj':function(_0x375d28,_0x49aa88){return _0x375d28(_0x49aa88);},'VBTvc':function(_0xf3462b,_0x3145cc){return _0xf3462b>=_0x3145cc;},'YjmvW':_0x445938(0x3cd,0x36b)},_0x5070a6=_0x31d68f['kxFfj'](parseFrontmatterDescription,_0x3eaaf2);if(_0x5070a6&&_0x31d68f[_0x3bd573(0x39,-0x72)](_0x5070a6[_0x3bd573(0x4,0x6)],0xa))return _0x5070a6;const _0x183f2e=extractBody(_0x3eaaf2),_0x5380fc=_0x183f2e[_0x3bd573(-0x55,-0x15)]('\x0a');for(const _0x4f20ac of _0x5380fc){if(_0x445938(0x3d0,0x43e)===_0x445938(0x329,0x3b2))_0x54363b[_0x445938(0x410,0x3e8)](_0x31d68f[_0x3bd573(0xe5,0xd6)],{'error':_0x31d68f[_0x445938(0x444,0x3b7)](_0x5765d0,_0x321c47)?_0x627e57[_0x445938(0x3c4,0x3f9)]:_0x11d31b(_0x3fa7b1)});else{const _0x24a850=_0x4f20ac['trim']();if(_0x24a850['length']<0xa)continue;if(_0x24a850['startsWith']('#'))continue;if(_0x24a850[_0x445938(0x44f,0x42c)]('[')&&_0x24a850[_0x3bd573(0x5a,0xa2)](']('))continue;if(_0x24a850['startsWith']('|')||_0x24a850['startsWith']('>'))continue;if(_0x24a850[_0x445938(0x48d,0x42c)](_0x31d68f['YjmvW']))continue;const _0x3e62e9=_0x24a850[_0x445938(0x3c2,0x46c)](/^[-*]\s+/,'')['replace'](/^\d+\.\s+/,'');if(_0x31d68f['VBTvc'](_0x3e62e9['length'],0xa))return _0x3e62e9[_0x445938(0x448,0x387)](0x0,0xc8);}}function _0x445938(_0x4c7c8f,_0x3a505f){return _0x5372d2(_0x4c7c8f,_0x3a505f-0x5);}return null;}function compileToClaudeRules(_0xc4459,_0x4350bc){const _0xcf6e4a={'LiDLT':function(_0x36a8c2,_0x2ba5ea){return _0x36a8c2(_0x2ba5ea);},'hjtLw':function(_0x1217e0,_0x50b59b,_0x4fddad,_0x289824){return _0x1217e0(_0x50b59b,_0x4fddad,_0x289824);}},_0x1a7b2a=extractRuleSummary(_0xc4459);if(!_0x1a7b2a)return![];function _0x520b1a(_0x43902d,_0x4f67e9){return _0x5372d2(_0x4f67e9,_0x43902d-0x1de);}function _0x15de60(_0x468120,_0xefc28d){return _0x5372d2(_0x468120,_0xefc28d- -0x50b);}const _0x2c4c5a=getRulesTarget(_0x4350bc);if(existsSync(_0x2c4c5a)){const _0x560e73=readFileSync(_0x2c4c5a,_0x15de60(-0x1de,-0x1b8)),_0x4b554e=_0x1a7b2a[_0x520b1a(0x560,0x61c)](0x0,0x32);if(_0x4b554e&&_0x560e73[_0x15de60(-0xbf,-0xf3)](_0x4b554e))return![];}const _0x271fc0='\x0a-\x20'+_0x1a7b2a+'\x0a',_0x3c4fcf=_0xcf6e4a[_0x15de60(-0x5e,-0xc1)](existsSync,_0x2c4c5a)?'':_0x520b1a(0x60c,0x5f9)+_0x15de60(-0xc,-0x5f)+_0x15de60(-0xc0,-0x4f)+_0x15de60(-0x189,-0x1ab)+_0x520b1a(0x58d,0x583)+_0x15de60(-0xab,-0x146);return _0xcf6e4a['hjtLw'](writeFileSync,_0x2c4c5a,_0x3c4fcf,{'flag':'a'}),_0xcf6e4a[_0x520b1a(0x5df,0x5f3)](writeFileSync,_0x2c4c5a,_0x271fc0,{'flag':'a'}),!![];}const AUTO_SYNC_TIMEOUT_MS=0x2710;export async function handlePostToolUse(_0x20a219){function _0x45a630(_0x400ecf,_0xb20594){return _0x4c96d7(_0x400ecf-0x604,_0xb20594);}const _0x28835d={'tuSrc':function(_0x4c54df,_0x2545e4){return _0x4c54df+_0x2545e4;},'DSjcp':function(_0x32fb27,_0x3a82b4){return _0x32fb27(_0x3a82b4);},'uADca':'\x22oldString'+'\x22','ElZYV':_0x45a630(0x5e9,0x54e),'vtgGg':_0x997888(0x43f,0x4c0)+'ed','Fjoei':_0x997888(0x498,0x4a0)+_0x997888(0x502,0x55d),'vBOyp':function(_0x555fa1,_0x4e3319){return _0x555fa1(_0x4e3319);},'OneLm':_0x997888(0x481,0x4a1),'LJURU':'xNhaV','UujlG':_0x997888(0x4cf,0x538),'RDxmX':_0x45a630(0x5e5,0x678),'VOtMG':_0x997888(0x64d,0x5a9)+_0x45a630(0x5e1,0x5b7),'ubOwf':function(_0x11fd26,_0x223dd1){return _0x11fd26-_0x223dd1;},'lEqSm':'Claude\x20mem'+_0x997888(0x670,0x5df)+_0x997888(0x56a,0x61d),'yKKUl':function(_0x2a260c,_0x818c87,_0x66f441){return _0x2a260c(_0x818c87,_0x66f441);},'ohZLP':_0x45a630(0x492,0x43b),'tusmG':function(_0x38193d,_0x5491f9,_0xc3ec6e){return _0x38193d(_0x5491f9,_0xc3ec6e);},'HSBqP':_0x997888(0x5a6,0x54e),'Vmrtw':function(_0xc577e4,_0x94f9fe){return _0xc577e4===_0x94f9fe;},'pjxhw':_0x997888(0x497,0x4c7),'RqZib':_0x997888(0x63d,0x589),'zFawx':function(_0x20bd55,_0x5f57a,_0x1dd122,_0x5112da){return _0x20bd55(_0x5f57a,_0x1dd122,_0x5112da);},'DWWRY':function(_0x593f97,_0x3f7174){return _0x593f97<_0x3f7174;},'FmxdI':_0x45a630(0x518,0x554),'MYSfq':_0x997888(0x586,0x612),'mjpID':_0x997888(0x508,0x53b),'CqdXy':_0x997888(0x635,0x58f),'vmTGk':_0x997888(0x4d2,0x5a2)+'sion','wMQhZ':_0x45a630(0x5f9,0x55e),'KTnnb':_0x45a630(0x5b2,0x612)+_0x45a630(0x5c8,0x5af)+_0x997888(0x683,0x629),'JKVoc':_0x45a630(0x5c7,0x603),'JaioL':function(_0xd3df4c,_0x18dd8e){return _0xd3df4c!==_0x18dd8e;},'cBkSu':_0x45a630(0x487,0x4f6)+_0x45a630(0x558,0x5d9)+_0x45a630(0x5ad,0x5ca),'kiuCM':function(_0x41636a,_0x1057f0){return _0x41636a===_0x1057f0;},'AdEBV':_0x997888(0x59c,0x4ea),'cgolO':_0x997888(0x5d4,0x566)+_0x997888(0x4cb,0x524)+_0x997888(0x508,0x4c9),'CmlgF':'ADD','iHwHm':'pending','MESMr':'Memory\x20cap'+_0x45a630(0x482,0x3e2),'hKnnd':function(_0x39fe1f,_0x4afedb){return _0x39fe1f instanceof _0x4afedb;},'vjall':function(_0x92dbf2,_0x51e003){return _0x92dbf2===_0x51e003;},'nkXYf':function(_0x5d5caa,_0x5078a1,_0x5707be){return _0x5d5caa(_0x5078a1,_0x5707be);},'ryMwm':function(_0x1da41f,_0x48d303){return _0x1da41f instanceof _0x48d303;},'xpSct':function(_0x4ef52d,_0x3ddd35){return _0x4ef52d(_0x3ddd35);},'mANhV':function(_0x5ce101,_0x2bc3f4){return _0x5ce101!==_0x2bc3f4;},'iZCel':'kajhv','UQBjE':function(_0x3b99a7,_0x5da297){return _0x3b99a7(_0x5da297);},'hlsFO':function(_0x422060,_0x526393){return _0x422060>_0x526393;},'qSJMP':function(_0x59ebd1,_0x46b7a3){return _0x59ebd1===_0x46b7a3;},'lFjNk':_0x997888(0x473,0x4d9),'eZpHS':function(_0xd290e9,_0x12ef16){return _0xd290e9>=_0x12ef16;},'BBBkr':_0x45a630(0x526,0x58d),'LmtrM':function(_0x1480e8,_0x4acf14){return _0x1480e8>_0x4acf14;},'OKNOe':_0x45a630(0x5d6,0x556)+_0x997888(0x49e,0x4ec),'EPzzj':function(_0x1b723a,_0x30f7d2){return _0x1b723a-_0x30f7d2;},'NUtXP':function(_0x424e85,_0x512f67){return _0x424e85-_0x512f67;},'sOfdN':'Hook\x20compl'+'eted'},_0x4b6d87=performance['now'](),_0x43fbb8=new ConfigManager()['load']();function _0x997888(_0x1de07b,_0x26217b){return _0x4c96d7(_0x26217b-0x629,_0x1de07b);}const _0x4604c1=performance['now'](),_0x3292dc=createLogger('PostToolUs'+'e',_0x43fbb8[_0x997888(0x4ce,0x4f0)]);try{if(_0x997888(0x5a0,0x4e4)===_0x28835d[_0x45a630(0x53e,0x533)])return _0x45a630(0x4ca,0x570)+_0x533d38[_0x45a630(0x501,0x44d)]+'\x20items]\x20'+_0x2f8056[_0x45a630(0x610,0x55b)](_0x82f6c2[0x0])[_0x45a630(0x4c1,0x419)](0x0,0xc8)+_0x997888(0x55a,0x5d3);else{_0x3292dc[_0x997888(0x4cd,0x4f8)](_0x28835d['vtgGg'],{'toolName':_0x20a219[_0x45a630(0x549,0x5b7)]});if(!_0x43fbb8['autoCaptur'+'e']['enabled']){_0x3292dc[_0x45a630(0x4d3,0x519)](_0x45a630(0x47e,0x4e4)+_0x45a630(0x53d,0x4a5)+'d');return;}if(!_0x43fbb8[_0x997888(0x5b8,0x57e)+'e'][_0x997888(0x598,0x59e)]['includes'](_0x20a219['toolName'])){_0x3292dc[_0x997888(0x4ef,0x4c6)](_0x28835d['Fjoei'],{'toolName':_0x20a219[_0x45a630(0x549,0x49d)]});return;}const _0x3718be=_0x28835d['vBOyp'](extractFilePath,_0x20a219['toolInput']);if(_0x3718be&&isSensitiveFile(_0x3718be,_0x43fbb8[_0x997888(0x577,0x57e)+'e'][_0x997888(0x5d6,0x5ee)+_0x997888(0x560,0x4e2)])){if(_0x28835d[_0x45a630(0x585,0x540)]===_0x28835d['LJURU']){if(_0x5eead4[_0x997888(0x556,0x58b)]('*'))return _0x3ca9ff[_0x45a630(0x54b,0x495)](_0x7fbf23['slice'](0x1));if(_0x1e870d[_0x45a630(0x54b,0x4e3)]('*'))return _0x362b07[_0x45a630(0x566,0x504)](_0x3092c4[_0x45a630(0x4c1,0x418)](0x0,-0x1));return _0x43d244===_0x5572a7;}else{_0x3292dc[_0x45a630(0x4d3,0x543)](_0x45a630(0x5b9,0x57c)+_0x45a630(0x500,0x4e0)+_0x45a630(0x555,0x5a3),{'filePath':_0x3718be});return;}}if(_0x3718be&&isClaudeMemoryFile(_0x3718be)&&(_0x20a219[_0x997888(0x51b,0x56e)]===_0x28835d[_0x45a630(0x51b,0x54e)]||_0x20a219[_0x45a630(0x549,0x560)]===_0x28835d['RDxmX'])){const _0x24ec6c=performance['now']();try{const _0x132c26=_0x28835d[_0x997888(0x5bb,0x573)](getSharedDb,_0x43fbb8['db'][_0x997888(0x64a,0x5c6)]),{syncClaudeMd:_0x29b252}=await import(_0x28835d[_0x45a630(0x521,0x470)]);await _0x29b252(_0x132c26,{'claudeMdPath':_0x3718be,'projectPath':_0x20a219[_0x45a630(0x539,0x48f)+'h']});const _0x3fae70=performance[_0x45a630(0x5c1,0x5e2)](),_0x3d6db2=Math[_0x997888(0x4d9,0x583)](_0x3fae70-_0x4b6d87),_0x3a7799=Math[_0x45a630(0x55e,0x4ee)](_0x3fae70-_0x24ec6c),_0x2e7dc1=Math[_0x997888(0x4c0,0x583)](_0x28835d[_0x997888(0x61b,0x56d)](_0x4604c1,_0x4b6d87));process[_0x45a630(0x532,0x536)][_0x997888(0x547,0x5f1)]('[A2A]\x20Post'+_0x997888(0x5ca,0x637)+_0x997888(0x5da,0x5b8)+'otal:\x20'+_0x3d6db2+(_0x997888(0x668,0x61c)+_0x45a630(0x530,0x55e))+_0x2e7dc1+(_0x45a630(0x5d1,0x57a)+'Sync:\x20')+_0x3a7799+_0x45a630(0x4f6,0x4ba)),_0x3292dc['info'](_0x28835d[_0x997888(0x5b1,0x627)],{'filePath':_0x3718be});try{const _0x1d7ba7=_0x28835d['yKKUl'](readFileSync,_0x3718be,_0x28835d[_0x45a630(0x5d7,0x648)]);if(isRuleContent(_0x1d7ba7)){const _0x582ac1=_0x28835d[_0x45a630(0x4a9,0x3f0)](compileToClaudeRules,_0x1d7ba7,_0x20a219['projectPat'+'h']);_0x582ac1&&_0x3292dc[_0x997888(0x57d,0x4f8)]('Rule\x20compi'+_0x997888(0x549,0x57b)+_0x997888(0x5ac,0x5b1)+_0x45a630(0x5f0,0x606),{'filePath':_0x3718be});}}catch{}}catch(_0x3bd124){_0x3292dc['warn'](_0x997888(0x3f8,0x4a5)+_0x45a630(0x5dc,0x515)+_0x997888(0x6cb,0x62c),{'error':_0x3bd124 instanceof Error?_0x3bd124['message']:String(_0x3bd124)});}return;}const _0x2a4ba9=performance[_0x997888(0x656,0x5e6)](),_0x21d45c={'uuid':_0x20a219[_0x45a630(0x60f,0x5f7)],'type':_0x28835d[_0x997888(0x572,0x5db)],'message':{'role':_0x28835d['HSBqP'],'content':_0x20a219[_0x997888(0x624,0x5fe)]},'timestamp':new Date()[_0x45a630(0x4ae,0x427)+'g']()},_0x33eec1=_0x20a219['toolName']===_0x997888(0x5c8,0x538),_0x1b9bb3=_0x3718be?isConfigFile(_0x3718be):![],_0x1fab46=_0x28835d['yKKUl'](detectActualError,_0x20a219[_0x997888(0x6a2,0x5fe)],_0x20a219['toolInput']);let _0x1b62ff;if(_0x28835d[_0x45a630(0x601,0x684)](_0x20a219[_0x997888(0x60b,0x56e)],_0x28835d[_0x997888(0x5d9,0x5b0)])&&_0x20a219[_0x45a630(0x577,0x605)]){if(_0x997888(0x63a,0x61b)===_0x28835d[_0x45a630(0x576,0x5ec)])_0x5ae45d[_0x997888(0x52d,0x4ff)](_0xc62da5);else try{const _0x2dfeb9=_0x28835d[_0x997888(0x69d,0x626)](typeof _0x20a219[_0x997888(0x61b,0x59c)],_0x997888(0x66a,0x5d1))?JSON[_0x45a630(0x5af,0x663)](_0x20a219[_0x997888(0x639,0x59c)]):_0x20a219[_0x45a630(0x577,0x529)];_0x1b62ff=_0x2dfeb9?.[_0x45a630(0x5dd,0x5ee)]??_0x2dfeb9?.['cmd']??(_0x28835d['Vmrtw'](typeof _0x2dfeb9,'string')?_0x2dfeb9:undefined);}catch{_0x1b62ff=_0x28835d[_0x997888(0x649,0x626)](typeof _0x20a219[_0x997888(0x631,0x59c)],'string')?_0x20a219[_0x45a630(0x577,0x4db)]:undefined;}}const _0x4bf079=_0x28835d[_0x45a630(0x57e,0x4ec)](scoreSignificance,_0x21d45c,{'toolName':_0x20a219[_0x997888(0x60f,0x56e)],'isNewFile':_0x33eec1,'isConfigChange':_0x1b9bb3,'hasError':_0x1fab46,'bashCommand':_0x1b62ff},_0x43fbb8['autoCaptur'+'e']['significan'+_0x997888(0x4e4,0x4a2)+'d']),_0x509343=performance['now'](),_0x16a626=_0x43fbb8[_0x45a630(0x559,0x4b6)+'e'][_0x45a630(0x5e3,0x62b)+_0x45a630(0x47d,0x3f0)+'d']*0.5;_0x3292dc['info'](_0x45a630(0x5e0,0x6a0)+_0x45a630(0x4fc,0x4ec),{'toolName':_0x20a219[_0x997888(0x4a9,0x56e)],'score':_0x4bf079['totalScore'],'shouldCapture':_0x4bf079[_0x997888(0x61d,0x5b5)]>=_0x16a626});if(_0x28835d[_0x997888(0x531,0x4b9)](_0x4bf079['totalScore'],_0x16a626))return;const _0x18fa49=determineCategory(_0x20a219,_0x1fab46),_0x5c5e3f=_0x28835d[_0x45a630(0x54e,0x483)](buildContent,_0x20a219),_0x39079b=filterSensitiveInfo(_0x5c5e3f);let _0xd3fb7d;if(_0x1fab46)_0xd3fb7d=_0x28835d[_0x997888(0x516,0x5c5)];else _0x4bf079['totalScore']<_0x43fbb8['autoCaptur'+'e'][_0x997888(0x66e,0x608)+_0x997888(0x4bf,0x4a2)+'d']?_0xd3fb7d=_0x28835d[_0x997888(0x4ac,0x4cb)]:_0xd3fb7d=_0x28835d[_0x997888(0x610,0x5b4)];const _0x40f297={'content':_0x39079b[_0x997888(0x644,0x5bb)],'category':_0x18fa49,'tier':_0xd3fb7d,'tags':buildTags(_0x20a219),'projectPath':_0x20a219[_0x45a630(0x539,0x4cf)+'h'],'sessionId':_0x20a219[_0x997888(0x612,0x634)],'memoryType':CATEGORY_TYPE_MAP[_0x18fa49]??_0x28835d[_0x45a630(0x575,0x5a5)]},_0x21e713=getSharedDb(_0x43fbb8['db'][_0x45a630(0x5a1,0x639)]),_0x4f23ff=performance['now'](),_0x459549=new DedupManager(),_0x13b5bf=_0x459549[_0x997888(0x496,0x515)+_0x997888(0x60e,0x58e)](_0x21e713[_0x997888(0x57d,0x56a)+'es']({'projectPath':_0x20a219[_0x45a630(0x539,0x492)+'h'],'limit':0x32}),_0x18fa49,_0x20a219[_0x45a630(0x539,0x4ba)+'h']),_0x48c6ba=_0x459549['decide'](_0x39079b['filtered'],_0x13b5bf),_0x28e326=performance['now']();_0x3292dc[_0x45a630(0x4d3,0x57c)](_0x28835d[_0x997888(0x510,0x4cf)],{'action':_0x48c6ba['action'],'similarity':_0x48c6ba['similarity']});const _0x5183dc=performance[_0x997888(0x6a5,0x5e6)]();let _0x3b06ab;try{switch(_0x48c6ba[_0x997888(0x565,0x517)]){case _0x45a630(0x60e,0x570):_0x3292dc[_0x997888(0x434,0x4f8)](_0x997888(0x47e,0x4b2)+'pped\x20(dupl'+_0x997888(0x4d4,0x4df),{'similarity':_0x48c6ba['similarity']});return;case _0x45a630(0x483,0x462):if(_0x48c6ba[_0x45a630(0x55c,0x4e7)+'ry']){if('xIMRD'===_0x28835d[_0x45a630(0x562,0x5b2)])return _0x22ce5b['slice'](uPFLwb[_0x45a630(0x525,0x471)](_0x2ccb06,0x3))[_0x45a630(0x4dd,0x512)]();else{const _0x185723=_0x459549['mergeConte'+'nt'](_0x48c6ba[_0x45a630(0x55c,0x4a2)+'ry'][_0x997888(0x653,0x623)],_0x39079b[_0x45a630(0x596,0x5ad)]);_0x21e713[_0x997888(0x5f6,0x59f)+'ry'](_0x48c6ba['targetMemo'+'ry']['id'],{'content':_0x185723,'tags':[...new Set([..._0x48c6ba['targetMemo'+'ry']['tags']||[],...buildTags(_0x20a219)])]}),_0x3292dc[_0x45a630(0x4d3,0x57c)](_0x28835d[_0x45a630(0x508,0x5d4)],{'memoryId':_0x48c6ba[_0x997888(0x621,0x581)+'ry']['id']});}}return;case _0x28835d[_0x45a630(0x47a,0x4e0)]:{if(_0x28835d['JaioL'](_0x45a630(0x5ec,0x57b),'EoKlz')){_0x48c6ba[_0x45a630(0x55c,0x4ef)+'ry']&&(_0x21e713[_0x997888(0x616,0x59f)+'ry'](_0x48c6ba['targetMemo'+'ry']['id'],{'invalidAt':new Date()[_0x997888(0x471,0x4d3)+'g']()}),_0x3292dc[_0x997888(0x5b6,0x4f8)](_0x28835d[_0x45a630(0x5ef,0x5cc)],{'memoryId':_0x48c6ba['targetMemo'+'ry']['id']}));_0x3b06ab=_0x21e713[_0x997888(0x50a,0x4d5)+'ry'](_0x40f297);_0x28835d[_0x45a630(0x5cd,0x5fb)](_0xd3fb7d,_0x28835d[_0x45a630(0x4a6,0x50e)])&&(_0x28835d[_0x45a630(0x4f9,0x50c)](_0x28835d[_0x45a630(0x591,0x52f)],_0x997888(0x4ab,0x4ea))?_0x21e713[_0x45a630(0x59c,0x5d7)+_0x45a630(0x573,0x53f)](_0x3b06ab['id'],null,_0x997888(0x5db,0x537)):_0x1e04ea=_0x28835d[_0x997888(0x5ef,0x573)](_0x3e6e2d,_0x59b3b9));_0x3292dc[_0x45a630(0x4d3,0x527)](_0x28835d[_0x45a630(0x5a9,0x5b7)],{'category':_0x18fa49,'memoryId':_0x3b06ab['id']});break;}else _0x266cbd[_0x45a630(0x57a,0x592)+'ry'](_0x29c7a7[_0x997888(0x59e,0x581)+'ry']['id'],{'invalidAt':new _0x50e72e()[_0x45a630(0x4ae,0x416)+'g']()}),_0x277e32[_0x997888(0x516,0x4f8)]('Old\x20memory'+_0x997888(0x4dc,0x57d)+_0x45a630(0x5ad,0x65a),{'memoryId':_0x2ba871['targetMemo'+'ry']['id']});}case _0x28835d[_0x45a630(0x52f,0x55e)]:default:_0x3b06ab=_0x21e713[_0x997888(0x467,0x4d5)+'ry'](_0x40f297);_0xd3fb7d!==_0x45a630(0x5ed,0x69f)&&_0x21e713['setSyncSta'+_0x997888(0x621,0x598)](_0x3b06ab['id'],null,_0x28835d[_0x997888(0x599,0x636)]);_0x3292dc[_0x997888(0x42c,0x4f8)](_0x28835d[_0x45a630(0x5f2,0x5b5)],{'category':_0x18fa49,'memoryId':_0x3b06ab['id']});break;}}catch(_0x35112e){const _0x4c571b=_0x28835d[_0x997888(0x52b,0x4a6)](_0x35112e,Error)?_0x35112e:new Error(_0x28835d[_0x45a630(0x54e,0x58c)](String,_0x35112e));_0x3292dc[_0x45a630(0x60a,0x5f9)]('Memory\x20cre'+_0x997888(0x4d6,0x4b0)+'ed',_0x4c571b,{'category':_0x18fa49});}const _0x557f05=performance[_0x997888(0x55c,0x5e6)]();if(_0x3b06ab&&_0x43fbb8[_0x45a630(0x5d0,0x675)]?.[_0x997888(0x54f,0x5e7)]&&_0x28835d[_0x997888(0x598,0x4f9)](_0x43fbb8[_0x45a630(0x5d0,0x5a1)][_0x997888(0x53b,0x531)],_0x997888(0x5b3,0x5ab)))try{const {createEmbeddingProvider:_0x3fc5cf}=await import(_0x45a630(0x4af,0x481)+_0x997888(0x521,0x585)+'s'),_0xccab9b=_0x28835d[_0x45a630(0x4a0,0x48a)](_0x3fc5cf,_0x43fbb8['embedding'],_0x43fbb8[_0x45a630(0x4b5,0x51d)]),_0x485d26=await Promise['resolve'](_0xccab9b[_0x997888(0x652,0x593)](_0x3b06ab[_0x45a630(0x5fe,0x576)]));Array[_0x45a630(0x5f5,0x60b)](_0x485d26)&&_0x21e713[_0x997888(0x6fa,0x63c)+_0x997888(0x589,0x56f)](_0x3b06ab['id'],_0x485d26);}catch(_0x413089){_0x3292dc[_0x997888(0x60d,0x547)]('Embedding\x20'+_0x997888(0x424,0x4ed),{'error':_0x28835d[_0x45a630(0x528,0x4e6)](_0x413089,Error)?_0x413089[_0x997888(0x4c2,0x558)]:_0x28835d[_0x45a630(0x4ce,0x56c)](String,_0x413089)});}try{const _0x145597=_0x21e713[_0x997888(0x54f,0x551)+_0x45a630(0x5ca,0x5e2)](_0x20a219[_0x997888(0x5c8,0x634)]);if(_0x145597&&_0x145597[_0x997888(0x59f,0x5e8)+'ywords']){if(_0x28835d['mANhV'](_0x28835d[_0x45a630(0x58a,0x55c)],_0x45a630(0x594,0x578))){const _0x22f749=(_0x20a219[_0x45a630(0x549,0x5ba)]+'\x20'+JSON[_0x997888(0x68a,0x635)](_0x20a219[_0x997888(0x5bb,0x59c)])+'\x20'+_0x28835d[_0x997888(0x623,0x5ea)](String,_0x20a219[_0x45a630(0x5d9,0x57d)]))['toLowerCas'+'e'](),_0x8b8f86=JSON[_0x997888(0x675,0x5d4)](_0x145597[_0x997888(0x5ce,0x5e8)+_0x45a630(0x524,0x5b8)]),_0x3c5742=_0x8b8f86['filter'](_0xdf550c=>_0x22f749[_0x45a630(0x557,0x5cf)](_0xdf550c));_0x28835d[_0x45a630(0x4c3,0x539)](_0x3c5742['length'],0x0)&&_0x21e713[_0x997888(0x69f,0x63b)+_0x997888(0x495,0x4bf)](_0x145597['id'],_0x3c5742,_0x20a219[_0x997888(0x537,0x56e)]);}else{if(_0x2fb0c8[_0x45a630(0x557,0x4fe)](_0x28835d[_0x45a630(0x4df,0x4df)])||_0x469aa3[_0x45a630(0x557,0x4e0)](_0x997888(0x432,0x4de)+'\x22')||_0x490d50[_0x45a630(0x557,0x5bd)](_0x997888(0x4c7,0x596)+_0x45a630(0x5e7,0x518)))return'';return _0x2ee449;}}}catch{}if(_0x3b06ab&&(_0x28835d[_0x997888(0x69e,0x626)](_0x48c6ba[_0x45a630(0x4f2,0x479)],'ADD')||_0x28835d['qSJMP'](_0x48c6ba[_0x997888(0x5ac,0x517)],_0x45a630(0x5c7,0x594))))try{_0x21e713[_0x997888(0x501,0x5c9)+'actionEval']({'memoryId':_0x3b06ab['id'],'sessionId':_0x20a219[_0x45a630(0x60f,0x54a)],'significanceScore':_0x4bf079[_0x997888(0x625,0x5b5)],'dedupAction':_0x48c6ba['action'],'tier':_0xd3fb7d});}catch{}if(_0x3b06ab&&_0x3b06ab[_0x997888(0x528,0x5f5)]&&_0x43fbb8[_0x997888(0x501,0x4be)+_0x45a630(0x4d6,0x434)]?.[_0x997888(0x68f,0x5e7)])try{if(_0x28835d['lFjNk']!==_0x997888(0x4d2,0x4d9)){const _0x2738c7=_0x2fa72e[_0x997888(0x64d,0x5d4)](_0x4fe943);if(_0x2738c7['oldString']||_0x2738c7[_0x997888(0x65f,0x5d9)]||_0x2738c7['structured'+_0x997888(0x444,0x4a4)])return'';return _0x360715;}else{const {SkillEvaluator:_0x174b90}=await import(_0x997888(0x59e,0x510)+_0x45a630(0x514,0x44e)+'s'),_0x2702d8=new _0x174b90(_0x21e713,_0x43fbb8),_0x270511=_0x2702d8[_0x997888(0x42d,0x4b3)+_0x997888(0x6be,0x600)](_0x3b06ab);_0x270511[_0x997888(0x5e1,0x5b7)]&&_0x3292dc[_0x997888(0x478,0x4f8)]('Memory\x20abs'+_0x997888(0x56f,0x518)+_0x997888(0x4c0,0x580),{'memoryId':_0x3b06ab['id'],'skillId':_0x270511[_0x997888(0x64a,0x5f3)]});}}catch{}const _0x3a7145=performance[_0x997888(0x59c,0x5e6)]();let _0x51d97b=0x0;if(_0x43fbb8['autoSync']?.['enabled']&&_0x43fbb8['server']?.[_0x997888(0x4e2,0x4d7)]){try{const _0x2908c4=_0x21e713['getPending'+_0x997888(0x456,0x4bd)]();if(_0x28835d['eZpHS'](_0x2908c4,AUTO_SYNC_THRESHOLD)){const _0x5b36a5=createHookClient(_0x43fbb8);if(_0x5b36a5){if(_0x28835d[_0x997888(0x5c3,0x5a5)]!==_0x997888(0x4f8,0x4b8)){const _0x2248df=new SyncQueue(_0x21e713,_0x5b36a5),_0x5751dd=await _0x2248df['flush']({'timeoutMs':AUTO_SYNC_TIMEOUT_MS});_0x28835d[_0x45a630(0x503,0x4e4)](_0x5751dd[_0x45a630(0x4c7,0x58c)],0x0)&&(_0x3292dc[_0x997888(0x48c,0x4f8)](_0x28835d['OKNOe'],{'pushed':_0x5751dd[_0x45a630(0x4c7,0x40f)],'pending':_0x2908c4}),console['error'](_0x997888(0x482,0x4b4)+_0x997888(0x486,0x52f)+_0x5751dd['pushed']+_0x45a630(0x56c,0x5e3)));}else{const _0x30bba3=_0x4a33b4['mergeConte'+'nt'](_0x58bd77[_0x45a630(0x55c,0x621)+'ry'][_0x997888(0x5f9,0x623)],_0x1efd1e['filtered']);_0x1315f5[_0x997888(0x5f0,0x59f)+'ry'](_0x5eb2de[_0x45a630(0x55c,0x5dc)+'ry']['id'],{'content':_0x30bba3,'tags':[...new _0x10df5b([..._0x48e876['targetMemo'+'ry'][_0x45a630(0x54d,0x586)]||[],..._0x28835d[_0x997888(0x5d5,0x573)](_0x1a14f8,_0x506e41)])]}),_0xced082['info']('Memory\x20upd'+'ated\x20(merg'+_0x45a630(0x604,0x67e),{'memoryId':_0x48b628['targetMemo'+'ry']['id']});}}}}catch(_0x374760){_0x3292dc[_0x45a630(0x522,0x4f1)](_0x45a630(0x5d6,0x52e)+_0x997888(0x515,0x4ed),{'error':_0x28835d[_0x45a630(0x528,0x5c1)](_0x374760,Error)?_0x374760[_0x997888(0x494,0x558)]:_0x28835d['UQBjE'](String,_0x374760)});}_0x51d97b=Math[_0x997888(0x624,0x583)](performance[_0x45a630(0x5c1,0x51a)]()-_0x3a7145);}const _0x2fae3a=Math[_0x45a630(0x55e,0x5fe)](performance[_0x997888(0x56f,0x5e6)]()-_0x4b6d87),_0x48f724=Math['round'](_0x4604c1-_0x4b6d87),_0x272e13=Math[_0x997888(0x565,0x583)](_0x28835d[_0x997888(0x592,0x595)](_0x509343,_0x2a4ba9)),_0x51f1d3=Math[_0x45a630(0x55e,0x4e5)](_0x28e326-_0x4f23ff),_0x105b8d=Math['round'](_0x28835d[_0x997888(0x443,0x4fa)](_0x557f05,_0x5183dc)),_0x3254f7=_0x51d97b>0x0?_0x997888(0x504,0x535)+_0x51d97b+'ms':'';process[_0x997888(0x4c5,0x557)][_0x45a630(0x5cc,0x5bb)]('[A2A]\x20Post'+'ToolUse\x20co'+'mpleted\x20(t'+_0x997888(0x57e,0x576)+_0x2fae3a+('ms\x20|\x20confi'+_0x45a630(0x530,0x489))+_0x48f724+(_0x997888(0x5ef,0x618)+_0x45a630(0x4bc,0x4c0))+_0x272e13+(_0x45a630(0x5c6,0x556)+'\x20')+_0x51f1d3+_0x997888(0x553,0x4e3)+_0x105b8d+'ms'+_0x3254f7+')\x0a'),_0x3292dc['info'](_0x28835d[_0x45a630(0x56f,0x632)],{'durationMs':_0x2fae3a});}}finally{_0x3292dc['flush']();}}function extractFilePath(_0x38ceec){const _0x584642={'KNARI':function(_0x2d59db,_0x15c2b0){return _0x2d59db===_0x15c2b0;},'uijqe':_0x4505c8(0x216,0x216),'VAkyQ':function(_0x2e871f,_0x4941de){return _0x2e871f===_0x4941de;},'nHvjF':_0x4505c8(0x1a6,0x23b),'XSVGO':function(_0x241074,_0x11600f){return _0x241074===_0x11600f;}};let _0x476d80=_0x38ceec;if(_0x584642[_0x13c25f(-0x169,-0xa3)](typeof _0x476d80,_0x13c25f(-0x6,0x73)))try{_0x476d80=JSON['parse'](_0x476d80);}catch{return null;}function _0x4505c8(_0x6fb71b,_0x22be87){return _0x5372d2(_0x6fb71b,_0x22be87- -0x232);}if(typeof _0x476d80===_0x13c25f(0x69,0x9f)&&_0x476d80!==null){if(_0x584642['uijqe']!==_0x584642[_0x4505c8(0x263,0x20b)])_0x3447bc[_0x4505c8(0xe2,0x162)](_0x13c25f(-0x154,-0xad)+'led\x20to\x20~/.'+_0x4505c8(0x255,0x21b)+'es/',{'filePath':_0x5b74b5});else{if(_0x584642[_0x13c25f(0x8b,0xa)](typeof _0x476d80[_0x4505c8(0x18a,0x153)],_0x584642[_0x13c25f(-0x84,-0xc)]))return _0x476d80['file_path'];if(_0x584642[_0x13c25f(-0xd5,-0x3b)](typeof _0x476d80[_0x13c25f(0xa9,0x68)],_0x13c25f(0x3d,0x73)))return _0x476d80['path'];}}function _0x13c25f(_0x4a7611,_0x2c3071){return _0x5372d2(_0x4a7611,_0x2c3071- -0x3fa);}return null;}function isSensitiveFile(_0x3205cf,_0x1dea38){function _0x36f002(_0x359e0b,_0x556b98){return _0x5372d2(_0x556b98,_0x359e0b- -0x15d);}const _0x44ea3f=_0x3205cf[_0x26847a(0x17b,0x239)]('/')[_0x36f002(0x328,0x35b)]()??'';function _0x26847a(_0x56d817,_0x1050e1){return _0x5372d2(_0x56d817,_0x1050e1- -0x130);}return _0x1dea38['some'](_0x3467b7=>{if(_0x3467b7[_0x420237(-0x34,-0x8d)]('*'))return _0x44ea3f[_0x420237(-0xe3,-0xa8)](_0x3467b7['slice'](0x1));function _0x47b13b(_0x1be578,_0x5ba7f3){return _0x36f002(_0x5ba7f3- -0x42,_0x1be578);}function _0x420237(_0x553994,_0x4b85c6){return _0x36f002(_0x4b85c6- -0x357,_0x553994);}if(_0x3467b7[_0x420237(0x17,-0xa8)]('*'))return _0x44ea3f['startsWith'](_0x3467b7[_0x420237(-0xed,-0x132)](0x0,-0x1));return _0x44ea3f===_0x3467b7;});}function _0x4c96d7(_0x8b5c27,_0x11025f){return _0x3084(_0x8b5c27- -0x2f4,_0x11025f);}function isConfigFile(_0x15c153){const _0xbbf0e3={'PWTkO':_0xdd22a6(0x4ce,0x42e),'Jdbrp':'.toml','twMxs':_0x5b26fb(0x652,0x601),'fyUik':_0xdd22a6(0x42d,0x35e),'AtYUl':_0x5b26fb(0x558,0x5f7)};function _0x5b26fb(_0x331716,_0x458c17){return _0x4c96d7(_0x331716-0x668,_0x458c17);}const _0x40bb7d=[_0xbbf0e3[_0x5b26fb(0x53d,0x502)],_0xdd22a6(0x48a,0x3c0),_0xdd22a6(0x4b8,0x435),_0xbbf0e3[_0xdd22a6(0x4f4,0x42d)],_0xbbf0e3['twMxs'],_0xbbf0e3[_0xdd22a6(0x461,0x3d5)],_0xbbf0e3[_0xdd22a6(0x431,0x465)]];function _0xdd22a6(_0x3aba05,_0x476f9b){return _0x4c96d7(_0x3aba05-0x53a,_0x476f9b);}return _0x40bb7d[_0xdd22a6(0x4de,0x52d)](_0x3e3254=>_0x15c153['endsWith'](_0x3e3254));}function _0x3787(){const _0x300ee=['A2j1vLC','C2v0','C3rHCNrZv2L0Aa','shfkA2e','CKzXuxm','yxrLCW','zMfJDa','yuTJrxe','ig1LBw9YAwvZ','iYbbDxrVlwrLDa','zw1Izwq','C09Mze4','rvb6EMO','iNn0CNvJDhvYzq','C3rKAw4','DhvZ','wgriwMW','q3fKwhK','uNfAAwi','Dg9VBeLUChv0','DNPoChy','DhjPz2DLCNm','DxbKyxrLtwvTBW','mtiWodaYC0fWA2XZ','DwLQCwu','rgvKDxaGzgvJAq','EKzHD3G','rNP4DwC','qKjcA3i','D21XBvy','lNLTBa','rKjyA2e','lI4Vy2XHDwrLlW','t25Ltg0','Bg9JywW','q0TvrLK','z3jLCa','tgLetfq','AvPdzwW','CgP4AhC','y2XHDwrLl3j1Ba','yxjNDG','Ew1S','BwPWsuq','Dg90ywXty29Yzq','qwrfqLy','ywjZB3jIzwq','BxbSzxrLzcaODa','A2jbzvm','v3nlv3G','zMLSDgvYzwq','AM9PBG','lMPZB24','D2vIC2vHCMnO','lMnSyxvKzq','ywrK','C2v0u3LUy1n0yq','CNvSzxm','oe9vrun6rW','C2TPBgW','rM14zeK','Cgf0Aa','ChjVy2vKDxjL','u1feAha','CMvJB3jKrxH0CG','thnju2m','CMvWBgfJzq','w2eYyv0Gug9ZDa','C29Tzq','y2DVBe8','EhLoueq','y3nZ','C3rYAw5N','BgLKyxrLza','lI4U','CgfYC2u','EhLXugW','D2vIzMv0y2G','twvTB3j5ihvWza','tKTlAfu','BMv3u3rYAw5N','y29UDgv4Da','sfncCva','Aw5KzxHpzG','rvjst1i6','u2vUC2L0AxzLia','B3j5igzPBguGCW','rKfjteve','zw4GC3vJy2vZCW','sKTIBxe','sMrICNa','yMvZDcbWCMfJDa','z3vPzgvSAw5L','BM93','zw5HyMXLza','Aw5Qzwn0zwrlzq','Cg9W','vvfcAKu','BxmSigrLzhvWoG','revmrvrf','yxrLzcaOBwvYzW','zxHJBhvKzvbHDa','BMPLy3rPB24','Bwf0y2G','D3jPDgu','sMfPB0W','C2TPBgXjza','y29Uy2f0','zw1IzwrKAw5N','BxmSignSyxvKzq','zxjYB3jFC29SDq','y29UDMvUDgLVBG','zgvJAxnPB24','y3HKB0y','qxv0BY1ZEw5Jia','B2HAtfa','B2jQzwn0','Dg9VBfjLC3vSDa','v2vIu2vHCMnO','u2TPBgW','B3j5ihn5BMmGzG','y29TBwfUza','Dg9tDhjPBMC','yxzmB1q','vg9VBcbLDMfSDq','C3LUyY5QCW','ELnRwxC','C2LNBMLMAwnHBG','ChjVAMvJDf9RBG','rwrPDa','mJbArNrqzwW','zfbHDgnOiG','rxjYB3i6','CwjuseG','zvnWtxm','zwn0zwqGuNvSzq','rLLYwwy','D29YA2LUzW','lMvUDG','y0jRu3u','zxmV','C3jJ','tuvttxi','BxmSihnPz25PzG','igL0zw1Zxsa','AxnbCNjHEq','s1D6q2q','BxmGFcbJB25MAq','Ew5Jzwq','sffWz2K','lM1K','CWOkpIbqB3n0va','zLfrEwi','rg9iANi','y29UDgvUDa','CgLJA2vK','vhjHy2vIywnR','vM1YDhC','BevXu20','DgLVBG','zwqP','wg1nt3u','zxHPDa','ywLSzwq','CNvSzq','rKrcBgq','zxjYB3i','zMLSzsbJCMvHDa','otK1ndaZs0zIu3by','zgvJAwrLza','tK9pua','C2vZC2LVBKLK','C3rYAw5NAwz5','AuH3sg0','vg9VBfvZzsbJBW','nJq0mJe0zNzRrgLi','igv4zwn1DgvK','tLDRBem','CMvJB3jKsw5Qzq','C2f2zuvTyMvKza','C3rKB3v0','sKTwB2m','vg9VBcbUB3qGAq','ALndEMS','y2vuAhjLC2HVBa','qxv0BY1Jyxb0Dq','ugf0y2G','q2XHDwrLig1LBq','AeTUBMq','DhvYzwq','vvbeqvrf','qxHiAwm','DxnLlNrZ','rMfPBgvKoG','t2XKig1LBw9YEq','BwDcwe8','zMfPBgvKoG','z2XVyMfS','yxrPB24GzMfPBa','uNvSzsbJB21WAq','twvTB3j5ihnRAq','ywjZB3jIsw50BW','w2eYyv0Gqxv0BW','DgvZDa','BgvHCM5PBMC','DxrMltG','wMXkBfe','rfDxuLK','z2v0','s05buKK','zMLSDgvY','u3LUy0nVDw50','C2TPBgXdB252zq','y3rPB25iAxq','sg9VAYbZDgfYDa','DhLWzq','t2nnuuS','rMLSztOG','B29SvxnL7jEq7isCioYEKa','BMTywwy','zgvIDwC','qMfZAa','uMvHza','zxiGzgvSzxrLkq','ygbG','tvLtzNe','rK1Nshq','C3bSAxq','DhvZBuC','DM1ur2S','Cg9ZDc10B29Slq','y2nLC3nMDwXSEq','zeXPA1O','Dg9ju09tDhjPBG','lI4Vzw1IzwrKAq','y3jLyxrLtwvTBW','uenvtxu','yxbPs2v5','qu9Pqxm','qw5OCg8','BgXT','ls0T','s0Pfr3C','tw1bt0O','iM5LD1n0CMLUzW','AwnHDguP','DMfSDwu','AwnHBMnLoIa','DgvYBNm','BxmSigrIoIa','EvzyExK','Eg1S','C2XPy2u','y29Kzv9Wyxr0zq','AgXZrK8','zMLSzv9WyxrO','rMfvtvC','y09ov3O','ChvZAgvK','zMfPBgvK','ANnVBG','w0fYCMf5oIa','Bg9Nz2LUzW','y2HVC2u','AgH5u0i','Ehbty3q','EgHMD24','CM9YoG','q1Hkwfi','q0vQCfy','Aw5MBW','DMPHBgW','tLv0wfa','CNnPB24','yKTmELu','zM9Y','ufDuA08','ChvZAa','AwnL','rMXMCfC','DhjPBq','Dfj2r24','Dufey2e','DfnowLy','z1LKBeG','vK9Ly3C','r2XVyG','DxbYu0O','y29T','mJm4mtGWofnztuTQvG','l3rTCc8','EwfTBa','renkuuW','EeHUBvu','lI4VC2TPBgWVzq','sePkrui','zMLSzsb3CML0Da','64+zioQWKoYNGoUqNcdQT5ZSUzNSNOxRI4G','mJe5mZuYn2DnuejsBW','zMLUzenHBMrPza','Exn6rvy','ywn0Aw9U','B3jIzwqGAw50BW','lMnMzW','BwfW','BxmPcG','lMLUAq','zxHWzxjPzw5Jzq','A2L1q00','BMfTzq','qxrzvwW','yxrLza','C3rHBMrHCMq','wfnwr08','DhvYzwqGkgfMDa','zMLSzsbLEgnSDq','BgvUz3rO','we1Wtuy','tg10CK0','64UKlGO','zgf0yq','Dg9mB3DLCKnHCW','BKPAvw0','s1rUBMi','sxnkA2W','lxn5BMnLzca','Cgf0DgvYBG','ChjVDMLKzxi','v1bLsxm','AhrTBa','A0fHtNi','lcbZEw5JoIa','BgLZDa','CgvUzgLUzW','v3jPDgu','DMfSDwf0B3iUAG','r3jLCa','C2vTyw50Awm','v2vIrMv0y2G','zxbPC29KAwm','DgfIBgu','zxbPC29Kzq','vxvQBeC','l3rLC3qV','rwLsDuC','AgfZ','DgHL','yvL5z08','vK90tuC','D2fYBG','yxv0BY1YDwXLCW','ExDVCMrZ','DhvtCMm','C1rssM8','z1DltK8','CNLnD20','yxnZAxn0yw50','cI0G','zNLvAwS','z2v0tgf0zxn0sq','BKH2AKy','uxjIwhO','q21Sz0y','zZOG','vg9VBfvZzsbLCG','C3rKzxjY','BwvZC2fNzq','zNvSBhK','iM9Szfn0CMLUzW','vKjuDMm','D2vUDcb3AxrO','BIb0CMLNz2vYCW','ChjVAMvJDfbHDa','mtH0teDtq1G','s1bRy1C','rw1IzwrKAw5Nia','CMuGzgLZywjSzq','rwXAwvy','DhjHy2vIywnR','AgP0thC','twvTB3j5ignHCa','yxbW','vKfREve','BM91z2e','BgLZDe1LBw9YAq','BMv3','uwD4vgW','DwjpD2y','Dg9VBe5HBwu','Aw5N','zw5KC1DPDgG','CKfqyxC','DgfNCW','rfnQy3a','ndCXntHtDxvUuxG','DMLby1C','B3rHBdOG','mJG1nZCWuLPMvgLW','qvrfA2m','lNLHBwW','zgvK','BgvKihrVih4VlG','Aw5JBhvKzxm','ihnVzNqTAw52yq','yxv0B0nHChr1CG','mtrMzM9bwMC','ihnRAwXS','DgfYz2v0twvTBW','zMvLzgjHy2S','CM91BMq','sMjZB1i','BMCVAw5KzxGUAG','D0L1Egy','D01rAfO','B3b0zwqGzM9Y'];_0x3787=function(){return _0x300ee;};return _0x3787();}function detectActualError(_0x5196f3,_0x33a9d2){function _0x2ad15a(_0x4a423b,_0x534720){return _0x5372d2(_0x4a423b,_0x534720- -0x319);}const _0x3c5fd8={'FDBld':function(_0x5e5a62,_0x4b110f){return _0x5e5a62<_0x4b110f;},'VOecw':'Read','viYCB':'error:','HqJka':_0x2ad15a(0x19c,0x190),'jNIaC':'exception','EiRuG':'Exception','wKuqi':_0x2ad15a(0x123,0x163),'WPeIs':_0x2ad15a(0xf8,0x1b2),'PCUMu':function(_0x4c945f,_0x4aaf55){return _0x4c945f===_0x4aaf55;},'aKcEq':_0xe89289(0x1c2,0x12d)};if(_0x3c5fd8[_0xe89289(0x343,0x311)](_0x5196f3[_0x2ad15a(0x8f,0xa9)],0xc8))return![];const _0x8b0ac2=_0x33a9d2?.['toolName'];if(_0x8b0ac2===_0x3c5fd8[_0xe89289(0x21c,0x171)])return![];const _0x3f50fd=_0x5196f3['toLowerCas'+'e'](),_0x37de5a=[_0x3c5fd8['viYCB'],_0x3c5fd8[_0xe89289(0x2a1,0x228)],_0x2ad15a(0xac,0x160),_0x3c5fd8['jNIaC'],_0x3c5fd8[_0x2ad15a(-0x4,0xc5)],_0x2ad15a(-0x94,0x31),_0xe89289(0x1c0,0x13c),_0x3c5fd8['wKuqi'],_0xe89289(0x279,0x2d7),_0xe89289(0x33a,0x2da)],_0x54443b=_0x37de5a[_0x2ad15a(0x158,0x150)](_0x343dfc=>_0x5196f3[_0x2ad15a(0xae,0xff)](_0x343dfc)||_0x3f50fd[_0xe89289(0x291,0x27a)](_0x343dfc[_0x2ad15a(0x101,0xae)+'e']()));if(!_0x54443b)return![];const _0x2db529=_0x33a9d2?.[_0x2ad15a(-0x4c,0x6c)]||_0x33a9d2?.[_0xe89289(0x2db,0x259)]||'';function _0xe89289(_0x14d9d0,_0x1a33eb){return _0x5372d2(_0x1a33eb,_0x14d9d0- -0x187);}if(_0x2db529[_0xe89289(0x240,0x29f)+'e']()[_0x2ad15a(0x73,0xff)](_0x3c5fd8[_0xe89289(0x247,0x2f8)])&&!_0x37de5a[_0xe89289(0x1fb,0x277)](0x2)[_0xe89289(0x2e2,0x35d)](_0x54ed3a=>_0x3f50fd[_0xe89289(0x291,0x2f7)](_0x54ed3a['toLowerCas'+'e']()))){if(_0x3c5fd8[_0x2ad15a(0x7,0x59)](_0x3c5fd8[_0xe89289(0x2a5,0x1fe)],_0x2ad15a(0x1c1,0x1ad)))_0x5d73d7[_0xe89289(0x214,0x20b)](_0x32cfdb);else return![];}return!![];}function determineCategory(_0x5bab94,_0x235dca){const _0x51bc1e={'viAcW':_0x306bcf(0x9d,-0x2d)+_0x4d5fbc(0x1f9,0x1ce),'jxSXL':_0x306bcf(-0x77,0xe),'cONWz':_0x4d5fbc(0x159,0x150),'SQDhp':'selected','CXJXR':_0x306bcf(-0x39,0x0),'CEjpV':_0x306bcf(-0x3d,-0x102),'BaymS':_0x4d5fbc(0x101,0xad),'DoHjr':_0x4d5fbc(0x1b5,0x224)+_0x306bcf(-0x12c,-0x124),'kAaNr':_0x4d5fbc(0x1c9,0x17f),'avLoT':function(_0x14a0b4,_0x2ecb52){return _0x14a0b4===_0x2ecb52;},'KPkcW':'Glob','rFqQs':_0x306bcf(0x85,-0x4a),'XMpMF':'Write','JbsoR':function(_0x4cdbcf,_0x3ab68a){return _0x4cdbcf(_0x3ab68a);},'rAPaw':_0x306bcf(-0x8c,-0xe3),'bwxHH':_0x306bcf(-0x11e,-0x118),'FBXka':_0x306bcf(-0x57,-0x112)+_0x4d5fbc(0x1b2,0x172)+_0x4d5fbc(0x12a,0x6e),'FlfpW':_0x4d5fbc(0x201,0x26e)+'ed','tSNZV':'code_patte'+'rn'};if(_0x235dca)return _0x51bc1e[_0x306bcf(-0x82,-0xaf)];function _0x4d5fbc(_0xb91b21,_0x526fc1){return _0x5372d2(_0x526fc1,_0xb91b21- -0x2cb);}const _0x2ad6f9=_0x5bab94[_0x306bcf(-0xa9,-0x26)]['toLowerCas'+'e']();if(_0x5bab94[_0x306bcf(-0x16b,-0xb6)]===_0x306bcf(-0x20b,-0x15d)){const _0x38d2e1=/^\[master |^\[main |^{"stdout":|^=== \d+\.|^\s*\d+ files? changed/m[_0x306bcf(-0x22a,-0x16f)](_0x5bab94['toolResult']);if(_0x38d2e1)return _0x306bcf(-0xd1,-0x4a);const _0x11417e=[_0x306bcf(-0x7c,-0x133),_0x51bc1e['jxSXL'],_0x51bc1e[_0x306bcf(-0x1e6,-0x139)],_0x51bc1e[_0x4d5fbc(0x199,0x1be)],_0x51bc1e[_0x306bcf(-0x1aa,-0x12e)],_0x4d5fbc(0x12d,0x15f)];if(_0x11417e['some'](_0xabc0e6=>_0x2ad6f9['includes'](_0xabc0e6)))return _0x4d5fbc(0x1ca,0x1ff);const _0x1a22a8=[_0x306bcf(0x49,-0x2c),_0x51bc1e[_0x4d5fbc(0xc8,0x11c)],_0x51bc1e['BaymS'],_0x306bcf(0x7c,0x9),_0x4d5fbc(0x1b6,0x246),_0x51bc1e[_0x306bcf(0x45,-0x2)]];if(_0x1a22a8[_0x306bcf(0x10,-0x57)](_0xd543ca=>_0x2ad6f9['includes'](_0xd543ca)))return _0x51bc1e[_0x4d5fbc(0x105,0x1ba)];}if(_0x5bab94[_0x306bcf(-0x8f,-0xb6)]===_0x306bcf(-0x13f,-0x15c)||_0x5bab94[_0x4d5fbc(0x13f,0xa3)]==='Grep'||_0x51bc1e[_0x4d5fbc(0x1d5,0x19c)](_0x5bab94[_0x306bcf(0x17,-0xb6)],_0x51bc1e[_0x4d5fbc(0x131,0x181)]))return _0x51bc1e[_0x4d5fbc(0x15e,0xd7)];if(_0x5bab94[_0x4d5fbc(0x13f,0xf6)]===_0x51bc1e[_0x4d5fbc(0xf8,0x1b7)]||_0x5bab94['toolName']===_0x306bcf(0x18,-0x1a)){const _0x309a6e=_0x51bc1e[_0x306bcf(-0x35,-0xa0)](extractFilePath,_0x5bab94[_0x306bcf(-0xcf,-0x88)]),_0x1ef685=_0x5bab94[_0x306bcf(-0xe1,-0x26)];if(_0x309a6e&&(_0x309a6e[_0x4d5fbc(0x14d,0x21b)](_0x51bc1e[_0x4d5fbc(0x142,0x1d2)])||_0x309a6e[_0x4d5fbc(0x14d,0x123)](_0x51bc1e['bwxHH'])))return'context';if(_0x1ef685['length']<0x32||_0x1ef685[_0x306bcf(-0x118,-0xf9)+'e']()['includes'](_0x51bc1e[_0x4d5fbc(0x179,0x1e4)])||_0x1ef685[_0x306bcf(-0xcc,-0xf9)+'e']()['includes'](_0x51bc1e[_0x4d5fbc(0xd2,0x18e)])||_0x1ef685['toLowerCas'+'e']()[_0x306bcf(-0x12a,-0xa8)]('created\x20su'+_0x4d5fbc(0xa2,0xba)))return _0x4d5fbc(0x1ab,0x18c);return _0x51bc1e[_0x306bcf(-0xaa,-0x11f)];}function _0x306bcf(_0x24e1a5,_0x21d016){return _0x5372d2(_0x24e1a5,_0x21d016- -0x4c0);}return _0x306bcf(-0x24,-0x4a);}function buildContent(_0xe9df57){const _0x5040dd={'uprSJ':'context','dLikZ':function(_0x66c2dc,_0x43e6f5){return _0x66c2dc(_0x43e6f5);},'wmqmV':function(_0x74df37,_0x294ca6){return _0x74df37>_0x294ca6;},'ckTSY':'GOsdC','eSpMs':'TCIRv','LsISc':function(_0x3ccb47,_0x2f0930){return _0x3ccb47(_0x2f0930);}},_0x586c24=extractFilePath(_0xe9df57['toolInput']),_0x3ca88a=[];if(_0x586c24)_0x3ca88a['push'](_0x5ec12a(0x4ee,0x44f)+_0x586c24);let _0x15adfe=_0xe9df57['toolResult']['slice'](0x0,0x5dc)['trim']();(_0xe9df57['toolName']===_0x50ac77(0x3b2,0x423)||_0xe9df57[_0x5ec12a(0x599,0x661)]==='Write')&&_0x15adfe[_0x50ac77(0x346,0x3a4)]('{')&&(_0x15adfe=_0x5040dd[_0x5ec12a(0x4fd,0x5b9)](stripDiffContent,_0x15adfe));_0xe9df57['toolName']==='Bash'&&_0x15adfe[_0x5ec12a(0x5b6,0x626)]('{')&&(_0x15adfe=extractBashContent(_0x15adfe));if(_0x5040dd[_0x5ec12a(0x5d1,0x54f)](_0x15adfe[_0x5ec12a(0x551,0x53a)],0x1f4)&&(_0x15adfe['startsWith']('{')||_0x15adfe[_0x5ec12a(0x5b6,0x4eb)]('['))){if(_0x5040dd['ckTSY']!==_0x5040dd[_0x5ec12a(0x63a,0x62e)])_0x15adfe=_0x5040dd[_0x5ec12a(0x5f5,0x647)](summarizeJsonResult,_0x15adfe);else return jDeaBG[_0x50ac77(0x2f2,0x322)];}function _0x50ac77(_0x2a84dd,_0x52dfc8){return _0x5372d2(_0x2a84dd,_0x52dfc8- -0x83);}_0x15adfe=_0x15adfe[_0x50ac77(0x2e0,0x2ff)](0x0,0x3e8)[_0x50ac77(0x358,0x31b)]();_0x15adfe&&!_0x5040dd[_0x5ec12a(0x4fd,0x543)](isNoiseResult,_0x15adfe)&&_0x3ca88a['push'](_0x15adfe);_0x3ca88a[_0x5ec12a(0x551,0x529)]===0x0&&_0x3ca88a[_0x5ec12a(0x52a,0x49b)](_0xe9df57[_0x5ec12a(0x599,0x5c3)]+_0x5ec12a(0x664,0x661));function _0x5ec12a(_0x133b5d,_0x14b536){return _0x5372d2(_0x14b536,_0x133b5d-0x18f);}return _0x3ca88a['join']('\x0a');}function stripDiffContent(_0x4fdd8f){function _0x307618(_0x867c04,_0x3ffa6a){return _0x5372d2(_0x3ffa6a,_0x867c04- -0x3e9);}const _0x9e7aa7={'NWklC':function(_0x2198c5,_0x342610){return _0x2198c5===_0x342610;},'bKLzU':_0x307618(-0xa4,-0x85),'FMgHt':_0x3dfd3a(-0x1a,-0x66)+'\x22','RDSya':_0x3dfd3a(-0xa9,-0xe2)+'\x22','NKKhU':_0x307618(0x49,0x11)+_0x307618(0xbf,0x17c)};function _0x3dfd3a(_0x38f665,_0x455a2c){return _0x5372d2(_0x38f665,_0x455a2c- -0x45c);}try{if(_0x9e7aa7[_0x307618(-0x51,-0xe8)]!==_0x3dfd3a(-0x1c9,-0x117))_0x2c0749=HowRHi[_0x307618(0xed,0xa2)](typeof _0x55eb84[_0x307618(0x4f,0x12)],_0x3dfd3a(0x89,0x11))?_0x68f63f['toolInput']:_0xdcd816;else{const _0x1cee82=JSON['parse'](_0x4fdd8f);if(_0x1cee82['oldString']||_0x1cee82['newString']||_0x1cee82['structured'+_0x3dfd3a(-0x11e,-0x11c)])return'';return _0x4fdd8f;}}catch{if(_0x4fdd8f[_0x3dfd3a(0x2d,-0x44)](_0x9e7aa7[_0x307618(-0x81,-0x111)])||_0x4fdd8f[_0x3dfd3a(-0x50,-0x44)](_0x9e7aa7['RDSya'])||_0x4fdd8f[_0x3dfd3a(-0xc2,-0x44)](_0x9e7aa7[_0x3dfd3a(-0x9,0x18)]))return'';return _0x4fdd8f;}}function _0x3084(_0x26114b,_0x346b9a){_0x26114b=_0x26114b-0x169;const _0x37871f=_0x3787();let _0x30842e=_0x37871f[_0x26114b];if(_0x3084['upMWOp']===undefined){var _0x4d79f2=function(_0x3f0e36){const _0x484c86='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5a8b8a='',_0x18e554='';for(let _0x3c64f8=0x0,_0x251296,_0x356dd8,_0x12b174=0x0;_0x356dd8=_0x3f0e36['charAt'](_0x12b174++);~_0x356dd8&&(_0x251296=_0x3c64f8%0x4?_0x251296*0x40+_0x356dd8:_0x356dd8,_0x3c64f8++%0x4)?_0x5a8b8a+=String['fromCharCode'](0xff&_0x251296>>(-0x2*_0x3c64f8&0x6)):0x0){_0x356dd8=_0x484c86['indexOf'](_0x356dd8);}for(let _0x33fbdd=0x0,_0x31299f=_0x5a8b8a['length'];_0x33fbdd<_0x31299f;_0x33fbdd++){_0x18e554+='%'+('00'+_0x5a8b8a['charCodeAt'](_0x33fbdd)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x18e554);};_0x3084['HRDGuE']=_0x4d79f2,_0x3084['jgIWTX']={},_0x3084['upMWOp']=!![];}const _0x31e8c8=_0x37871f[0x0],_0x4185f3=_0x26114b+_0x31e8c8,_0x6c075e=_0x3084['jgIWTX'][_0x4185f3];return!_0x6c075e?(_0x30842e=_0x3084['HRDGuE'](_0x30842e),_0x3084['jgIWTX'][_0x4185f3]=_0x30842e):_0x30842e=_0x6c075e,_0x30842e;}function extractBashContent(_0x3dde7d){function _0x525acd(_0x5d7653,_0xf6bca8){return _0x4c96d7(_0x5d7653-0x13e,_0xf6bca8);}function _0x5be436(_0x1af13d,_0x1f92e0){return _0x4c96d7(_0x1f92e0-0x6dc,_0x1af13d);}const _0x5f4e37={'QgxTl':'\x0a[Output]\x20'};try{const _0x2b97d1=JSON['parse'](_0x3dde7d),_0x11896f=(_0x2b97d1[_0x525acd(-0x4d,-0x7b)]||'')['trim'](),_0x231aef=(_0x2b97d1[_0x5be436(0x6be,0x60a)]||'')[_0x525acd(0x17,-0xb2)]();if(_0x231aef&&_0x231aef[_0x525acd(0x3b,0x7d)]>0xa)return'[Error]\x20'+_0x231aef[_0x525acd(-0x5,0x55)](0x0,0x1f4)+(_0x11896f?_0x5f4e37[_0x525acd(0x81,0x7e)]+_0x11896f[_0x525acd(-0x5,-0x93)](0x0,0x12c):'');if(_0x11896f)return _0x11896f['slice'](0x0,0x3e8);return _0x3dde7d[_0x5be436(0x5b3,0x599)](0x0,0x1f4);}catch{return _0x3dde7d[_0x5be436(0x602,0x599)](0x0,0x3e8);}}function summarizeJsonResult(_0x1cae1c){const _0x56f5e4={'JKbmq':'string'};function _0x196c6c(_0x562a3f,_0x1b6365){return _0x4c96d7(_0x562a3f-0x2c8,_0x1b6365);}function _0x3b9ab3(_0x4014c5,_0x2ce383){return _0x4c96d7(_0x4014c5-0x412,_0x2ce383);}try{const _0xa35b57=JSON['parse'](_0x1cae1c);if(Array[_0x196c6c(0x2b9,0x34e)](_0xa35b57))return _0x3b9ab3(0x2d8,0x296)+_0xa35b57[_0x196c6c(0x1c5,0x188)]+_0x196c6c(0x2b8,0x35f)+JSON[_0x3b9ab3(0x41e,0x493)](_0xa35b57[0x0])[_0x3b9ab3(0x2cf,0x2d8)](0x0,0xc8)+_0x3b9ab3(0x3bc,0x393);const _0x5efd80=Object['keys'](_0xa35b57)[_0x196c6c(0x185,0x10d)](0x0,0xa),_0x28400e=_0x5efd80[_0x196c6c(0x1b9,0x1a0)](_0x255aa4=>{const _0x5ae8c9=_0xa35b57[_0x255aa4];function _0x54c0a6(_0x4cea8e,_0x4b1da1){return _0x196c6c(_0x4cea8e-0x197,_0x4b1da1);}const _0x61855f=typeof _0x5ae8c9===_0x56f5e4[_0xaccf84(0x6ae,0x628)]?_0x5ae8c9[_0x54c0a6(0x31c,0x3d0)](0x0,0x50):JSON[_0xaccf84(0x728,0x67b)](_0x5ae8c9)[_0xaccf84(0x4d2,0x52c)](0x0,0x50);function _0xaccf84(_0x29178a,_0x56ec57){return _0x196c6c(_0x56ec57-0x3a7,_0x29178a);}return _0x255aa4+':\x20'+_0x61855f;})[_0x196c6c(0x25b,0x230)](',\x20');return _0x28400e[_0x3b9ab3(0x2cf,0x276)](0x0,0x320);}catch{return _0x1cae1c[_0x3b9ab3(0x2cf,0x284)](0x0,0x1f4);}}function isNoiseResult(_0x4476dd){function _0x5ecb10(_0x34e32a,_0x51f001){return _0x5372d2(_0x34e32a,_0x51f001- -0x416);}const _0x550a28=[/^File (?:created|updated|written|modified|deleted)(?: successfully)?\.?$/i,/^(?:File )?(?:written|created|saved) successfully\.?$/i,/^(?:No|0) (?:files?|changes?) /i,/^\d+ files? (?:found|matched|updated|deleted)\.?$/i,/^(?:Success|Done|OK|Created|Updated|Deleted)\.?$/i];function _0x5af8e0(_0x162517,_0x5a2cf1){return _0x5372d2(_0x162517,_0x5a2cf1-0xae);}return _0x550a28[_0x5af8e0(0x47e,0x517)](_0x1064b6=>_0x1064b6[_0x5af8e0(0x3cb,0x3ff)](_0x4476dd[_0x5af8e0(0x38f,0x44c)]()));}const TAG_BLOCKLIST=new Set(['id',_0x4c96d7(-0x11f,-0xd1),_0x4c96d7(-0xc2,-0x107),_0x5372d2(0x35d,0x356),_0x4c96d7(-0x9f,-0x15a),_0x5372d2(0x41d,0x4b2),_0x5372d2(0x484,0x3da),_0x5372d2(0x3f3,0x3e0),'to','in','of','a','is',_0x5372d2(0x41e,0x399),_0x4c96d7(-0x43,0x3e),_0x4c96d7(-0x69,-0x10e),_0x5372d2(0x41e,0x3bb),_0x4c96d7(-0x149,-0x16b),_0x5372d2(0x3fc,0x3b6),_0x5372d2(0x3ac,0x39e),_0x5372d2(0x416,0x35d),_0x5372d2(0x445,0x3c6),_0x4c96d7(-0xf3,-0x1af),_0x4c96d7(-0xbe,-0x15c),'test',_0x5372d2(0x52f,0x495),'error_solu'+_0x4c96d7(-0x1,0xba),_0x4c96d7(-0x142,-0x97)+'rn','context',_0x5372d2(0x444,0x494),_0x4c96d7(-0x65,-0x10c),_0x4c96d7(-0x173,-0xfd),_0x4c96d7(-0x20,-0x42)+'owledge',_0x4c96d7(-0xf1,-0xb3),_0x5372d2(0x458,0x4a6),_0x4c96d7(-0x162,-0x197),'Read',_0x5372d2(0x434,0x3a4),_0x5372d2(0x427,0x3d6),'Task',_0x5372d2(0x3a0,0x3d8),_0x4c96d7(-0x2a,-0x58),_0x5372d2(0x52c,0x48d),'edit','bash','read','glob',_0x4c96d7(-0x7c,-0x6c),'task',_0x5372d2(0x448,0x472),_0x5372d2(0x51d,0x45a)]);function buildTags(_0x55ba5d){const _0x11ea53={'ATEkc':function(_0x35c268,_0x420d88){return _0x35c268>_0x420d88;},'nJZUm':function(_0x30f5cf,_0x3341e9){return _0x30f5cf===_0x3341e9;},'nUcwW':_0x15aad6(0xac,0x17),'xyNPD':_0x42bdb0(0x4de,0x502),'gWKNO':'txt','aYygO':_0x15aad6(0x1,0x7c),'AOiAs':_0x15aad6(0x20,-0x72),'isjjQ':_0x42bdb0(0x48b,0x47e),'wIuxf':_0x15aad6(0x46,-0x4b),'nVJUm':_0x42bdb0(0x500,0x569)},_0x1b82be=[],_0x72edea=extractFilePath(_0x55ba5d[_0x15aad6(0xaf,0x19)]);function _0x42bdb0(_0x57584e,_0x2310c5){return _0x4c96d7(_0x2310c5-0x5c2,_0x57584e);}function _0x15aad6(_0x427c66,_0x279edf){return _0x4c96d7(_0x427c66-0x13c,_0x279edf);}if(_0x72edea){const _0x1a34a9=_0x72edea['split']('/')[_0x15aad6(-0x31,-0x15)](Boolean),_0x2513ba=_0x1a34a9[_0x42bdb0(0x501,0x47f)](-0x3)['filter'](_0x2abf14=>_0x2abf14[_0x15aad6(0x39,-0x68)]>0x2&&!TAG_BLOCKLIST['has'](_0x2abf14[_0x42bdb0(0x453,0x4c4)+'e']()));for(const _0x571bab of _0x2513ba[_0x15aad6(-0x7,-0xa5)](0x0,0x2)){const _0x14c38c=_0x571bab[_0x15aad6(0xde,0x10a)](/\.[^.]+$/,'');_0x11ea53[_0x15aad6(0x8b,0x18)](_0x14c38c[_0x15aad6(0x39,0x7a)],0x2)&&!TAG_BLOCKLIST[_0x42bdb0(0x51b,0x4dc)](_0x14c38c[_0x42bdb0(0x50d,0x4c4)+'e']())&&_0x1b82be[_0x15aad6(0x12,-0x91)](_0x14c38c);}const _0x1dda16=_0x72edea['split']('.')[_0x42bdb0(0x4b8,0x582)]();if(_0x1dda16){const _0x2fa555=_0x1dda16[_0x42bdb0(0x436,0x4c4)+'e']();if(!/^\d+$/[_0x15aad6(-0x38,-0xf6)](_0x1dda16)&&_0x1dda16[_0x15aad6(0x39,-0x6a)]>0x2&&!TAG_BLOCKLIST['has'](_0x2fa555)){if(_0x11ea53[_0x15aad6(0x3f,0x10f)](_0x11ea53['nUcwW'],_0x11ea53[_0x42bdb0(0x593,0x568)]))_0x3979af=_0x42bdb0(0x662,0x5ab);else{const _0x8c0db5=['md',_0x11ea53[_0x42bdb0(0x573,0x4e5)],_0x11ea53[_0x15aad6(0x58,0xf9)],_0x42bdb0(0x4d5,0x54c),_0x11ea53[_0x42bdb0(0x4ee,0x471)],_0x11ea53['isjjQ'],_0x11ea53[_0x15aad6(0x99,0xe4)],_0x11ea53['nVJUm']];!_0x8c0db5[_0x15aad6(0x8f,0x2a)](_0x2fa555)&&_0x1b82be['push'](_0x1dda16);}}}}return _0x1b82be;}export async function main(){function _0x5358ea(_0x324ddc,_0x29b64d){return _0x5372d2(_0x324ddc,_0x29b64d- -0x45c);}const _0x8dd1a1={'OcMQK':function(_0x2f23bd,_0x305583){return _0x2f23bd(_0x305583);},'DCJQL':_0x5358ea(0x3e,0xc)+_0x5358ea(-0x12d,-0x6a)+_0x5358ea(-0xd9,-0xcb),'EnPFZ':function(_0x211f4e,_0x670ccb){return _0x211f4e instanceof _0x670ccb;},'AEgVz':_0x4d3587(0x37a,0x3cf)},_0x43da8f=[];for await(const _0x505d67 of process[_0x5358ea(-0x9c,-0x29)]){_0x43da8f[_0x5358ea(-0x56,-0xc1)](_0x505d67);}function _0x4d3587(_0x4140b0,_0x472ac6){return _0x5372d2(_0x472ac6,_0x4140b0- -0x31);}const _0x1aee2b=Buffer[_0x4d3587(0x45f,0x500)](_0x43da8f)[_0x5358ea(-0x30,0x43)](_0x4d3587(0x322,0x2f1))['trim']();!_0x1aee2b&&process[_0x5358ea(0xf6,0x6b)](0x0);try{const _0x3e99f3=JSON['parse'](_0x1aee2b),_0x506f84=normalizeHookInput(_0x3e99f3);await _0x8dd1a1[_0x4d3587(0x32d,0x326)](handlePostToolUse,_0x506f84);}catch(_0x2b334a){console[_0x4d3587(0x49a,0x518)](_0x8dd1a1[_0x4d3587(0x379,0x36a)],_0x8dd1a1['EnPFZ'](_0x2b334a,Error)?_0x2b334a[_0x4d3587(0x3c3,0x38b)]:_0x2b334a),process[_0x4d3587(0x496,0x513)](0x0);}finally{if(_0x8dd1a1['AEgVz']!==_0x5358ea(-0x4d,-0xba))closeSharedDb();else{const _0x4788ad=_0xedb174(_0x31ed4e);if(!_0x4788ad)return![];const _0x24a8bd=_0x116d67(_0x42d10c);if(_0x13fdfb(_0x24a8bd)){const _0x387bfe=_0x85d558(_0x24a8bd,_0x4d3587(0x322,0x276)),_0x5c436d=_0x4788ad[_0x4d3587(0x351,0x3d7)](0x0,0x32);if(_0x5c436d&&_0x387bfe[_0x4d3587(0x3e7,0x498)](_0x5c436d))return![];}const _0x53ceff=_0x4d3587(0x3ba,0x2ed)+_0x4788ad+'\x0a',_0x22c100=_0xe0f7cb(_0x24a8bd)?'':'#\x20Auto-det'+_0x5358ea(-0x50,0x50)+_0x5358ea(0xf4,0x60)+_0x5358ea(-0x102,-0xfc)+'동\x20감지된\x20규칙입니'+_0x5358ea(0x1d,-0x97);return _0xe298dd(_0x24a8bd,_0x22c100,{'flag':'a'}),_0xd14698(_0x24a8bd,_0x53ceff,{'flag':'a'}),!![];}}}const isMainModule=process[_0x5372d2(0x476,0x44e)][0x1]?.[_0x4c96d7(-0xb9,-0xa9)](_0x4c96d7(-0x159,-0xfb)+'use.js')||process[_0x5372d2(0x3ca,0x44e)][0x1]?.[_0x5372d2(0x353,0x40c)](_0x4c96d7(-0x159,-0xc4)+_0x4c96d7(-0x17f,-0x1f8));isMainModule&&main();