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,294 +1 @@
1
- /**
2
- * CLAUDE.md Sync
3
- *
4
- * CLAUDE.md 파일을 파싱하여 섹션별 메모리를 생성/업데이트합니다.
5
- *
6
- * 동작:
7
- * 1. CLAUDE.md 파일 탐색 (프로젝트 루트, .claude/ 등)
8
- * 2. 마크다운 헤딩(##) 기준으로 섹션 분리
9
- * 3. Parent-Child 패턴: 파일 전체 → Parent, 섹션별 → Child
10
- * 4. content hash로 중복/변경 감지
11
- */
12
- import { readFileSync, existsSync } from 'node:fs';
13
- import { join, basename } from 'node:path';
14
- import { createHash } from 'node:crypto';
15
- const CLAUDE_MD_TAG = 'claude-md-sync';
16
- /**
17
- * Claude auto-memory 파일 여부 판별
18
- *
19
- * 감지 대상:
20
- * - ~/.claude/projects/{hash}/memory/*.md (auto memory 파일)
21
- * - {project}/CLAUDE.md (프로젝트 루트)
22
- */
23
- export function isClaudeMemoryFile(filePath) {
24
- // ~/.claude/projects/<hash>/memory/*.md
25
- if (/\/.claude\/projects\/[^/]+\/memory\/[^/]+\.md$/i.test(filePath))
26
- return true;
27
- // CLAUDE.md (프로젝트 루트)
28
- if (/\/CLAUDE\.md$/.test(filePath))
29
- return true;
30
- return false;
31
- }
32
- /**
33
- * CLAUDE.md 파일 동기화
34
- */
35
- export async function syncClaudeMd(db, options = {}) {
36
- const filePath = options.claudeMdPath ?? findClaudeMd(options.projectPath);
37
- if (!filePath || !existsSync(filePath)) {
38
- return {
39
- found: false,
40
- filePath: filePath ?? '',
41
- totalSections: 0,
42
- created: 0,
43
- updated: 0,
44
- skipped: 0,
45
- sections: [],
46
- };
47
- }
48
- const content = readFileSync(filePath, 'utf-8');
49
- const sections = parseClaudeMd(content);
50
- const filename = basename(filePath);
51
- const contentHash = computeHash(content);
52
- const result = {
53
- found: true,
54
- filePath,
55
- totalSections: sections.length,
56
- created: 0,
57
- updated: 0,
58
- skipped: 0,
59
- sections: [],
60
- };
61
- const projectPath = options.projectPath ?? process.cwd();
62
- // Parent-Child 패턴: Parent 탐색
63
- const existingParent = findExistingParent(db, filename);
64
- if (existingParent) {
65
- // hash 비교
66
- const existingHashTag = existingParent.tags.find(t => t.startsWith('hash:'));
67
- const existingHash = existingHashTag?.slice(5) ?? '';
68
- if (existingHash === contentHash && !options.force) {
69
- // 변경 없음 → 전체 스킵
70
- result.skipped = sections.length;
71
- for (const section of sections) {
72
- result.sections.push({ title: section.title, category: classifySection(section.title), action: 'skipped' });
73
- }
74
- return result;
75
- }
76
- // 변경됨 → Parent 업데이트 + Children 재생성
77
- if (!options.dryRun) {
78
- // sync_status 보존을 위해 기존 remoteId 저장
79
- const oldSyncStatus = db.getSyncStatus(existingParent.id);
80
- // 새 Parent + Children 생성 입력값 준비
81
- const parentTags = [CLAUDE_MD_TAG, `source:${filename}`, `hash:${contentHash}`];
82
- const childInputs = sections.map((section) => ({
83
- content: formatSectionAsMemory(section, filePath),
84
- category: classifySection(section.title),
85
- tier: 'semantic',
86
- tags: [CLAUDE_MD_TAG, `section:${section.title}`, `hash:${section.hash}`, `source:${filename}`],
87
- projectPath,
88
- }));
89
- // 원자적 교체: 기존 삭제 + 신규 생성을 단일 트랜잭션으로 처리
90
- const newParentId = db.replaceMemoryWithChunks(existingParent.id, {
91
- content,
92
- category: 'project_knowledge',
93
- tier: 'semantic',
94
- tags: parentTags,
95
- projectPath,
96
- }, childInputs);
97
- // 이전 sync_status의 remoteId가 있으면 새 parentId에 pending으로 복원
98
- if (oldSyncStatus?.remoteId) {
99
- db.setSyncStatus(newParentId, oldSyncStatus.remoteId, 'pending');
100
- }
101
- }
102
- result.updated = sections.length;
103
- for (const section of sections) {
104
- result.sections.push({ title: section.title, category: classifySection(section.title), action: 'updated' });
105
- }
106
- }
107
- else {
108
- // Parent 없음: 레거시 섹션별 메모리 존재 여부 확인
109
- const hasLegacyMemories = sections.some(s => findExistingMemory(db, s.title) !== null);
110
- if (hasLegacyMemories) {
111
- // 레거시 모드: 기존 섹션별 처리 (하위호환)
112
- for (const section of sections) {
113
- const category = classifySection(section.title);
114
- const memoryContent = formatSectionAsMemory(section, filePath);
115
- const sectionTags = [CLAUDE_MD_TAG, `section:${section.title}`, `hash:${section.hash}`];
116
- const existing = findExistingMemory(db, section.title);
117
- if (existing) {
118
- const existingHashTag = existing.tags.find(t => t.startsWith('hash:'));
119
- const existingHash = existingHashTag?.slice(5) ?? '';
120
- if (existingHash === section.hash && !options.force) {
121
- result.skipped++;
122
- result.sections.push({ title: section.title, category, action: 'skipped' });
123
- continue;
124
- }
125
- if (!options.dryRun) {
126
- db.updateMemory(existing.id, { content: memoryContent, category, tags: sectionTags });
127
- }
128
- result.updated++;
129
- result.sections.push({ title: section.title, category, action: 'updated' });
130
- }
131
- else {
132
- if (!options.dryRun) {
133
- db.createMemory({ content: memoryContent, category, tier: 'semantic', tags: sectionTags, projectPath });
134
- }
135
- result.created++;
136
- result.sections.push({ title: section.title, category, action: 'created' });
137
- }
138
- }
139
- }
140
- else {
141
- // 신규 Parent-Child 패턴
142
- if (!options.dryRun) {
143
- const parentTags = [CLAUDE_MD_TAG, `source:${filename}`, `hash:${contentHash}`];
144
- const childInputs = sections.map((section) => ({
145
- content: formatSectionAsMemory(section, filePath),
146
- category: classifySection(section.title),
147
- tier: 'semantic',
148
- tags: [CLAUDE_MD_TAG, `section:${section.title}`, `hash:${section.hash}`, `source:${filename}`],
149
- projectPath,
150
- }));
151
- db.createMemoryWithChunks({
152
- content,
153
- category: 'project_knowledge',
154
- tier: 'semantic',
155
- tags: parentTags,
156
- projectPath,
157
- }, childInputs);
158
- }
159
- result.created = sections.length;
160
- for (const section of sections) {
161
- result.sections.push({ title: section.title, category: classifySection(section.title), action: 'created' });
162
- }
163
- }
164
- }
165
- return result;
166
- }
167
- /**
168
- * CLAUDE.md 파일 탐색 (우선순위)
169
- */
170
- export function findClaudeMd(projectPath) {
171
- const base = projectPath ?? process.cwd();
172
- const candidates = [
173
- join(base, 'CLAUDE.md'),
174
- join(base, '.claude', 'CLAUDE.md'),
175
- join(base, 'claude.md'),
176
- ];
177
- for (const path of candidates) {
178
- if (existsSync(path))
179
- return path;
180
- }
181
- return null;
182
- }
183
- /**
184
- * CLAUDE.md를 섹션으로 파싱
185
- */
186
- export function parseClaudeMd(content) {
187
- const lines = content.split('\n');
188
- const sections = [];
189
- let currentTitle = '';
190
- let currentLevel = 0;
191
- let currentLines = [];
192
- for (const line of lines) {
193
- const headingMatch = line.match(/^(#{1,3})\s+(.+)/);
194
- if (headingMatch) {
195
- // 이전 섹션 저장
196
- if (currentTitle && currentLines.length > 0) {
197
- const sectionContent = currentLines.join('\n').trim();
198
- if (sectionContent.length > 10) { // 최소 길이 필터
199
- sections.push({
200
- title: currentTitle,
201
- content: sectionContent,
202
- level: currentLevel,
203
- hash: computeHash(sectionContent),
204
- });
205
- }
206
- }
207
- currentTitle = headingMatch[2].trim();
208
- currentLevel = headingMatch[1].length;
209
- currentLines = [];
210
- }
211
- else {
212
- currentLines.push(line);
213
- }
214
- }
215
- // 마지막 섹션
216
- if (currentTitle && currentLines.length > 0) {
217
- const sectionContent = currentLines.join('\n').trim();
218
- if (sectionContent.length > 10) {
219
- sections.push({
220
- title: currentTitle,
221
- content: sectionContent,
222
- level: currentLevel,
223
- hash: computeHash(sectionContent),
224
- });
225
- }
226
- }
227
- return sections;
228
- }
229
- /**
230
- * 섹션 제목으로 카테고리 분류
231
- */
232
- function classifySection(title) {
233
- const lower = title.toLowerCase();
234
- if (lower.includes('convention') || lower.includes('규칙') || lower.includes('rule') ||
235
- lower.includes('스타일') || lower.includes('style') || lower.includes('패턴') ||
236
- lower.includes('pattern') || lower.includes('원칙')) {
237
- return 'convention';
238
- }
239
- if (lower.includes('결정') || lower.includes('decision') || lower.includes('선택') ||
240
- lower.includes('why') || lower.includes('이유')) {
241
- return 'decision';
242
- }
243
- if (lower.includes('에러') || lower.includes('error') || lower.includes('문제') ||
244
- lower.includes('trouble') || lower.includes('fix') || lower.includes('해결')) {
245
- return 'error_solution';
246
- }
247
- if (lower.includes('학습') || lower.includes('learning') || lower.includes('배운')) {
248
- return 'learning';
249
- }
250
- return 'project_knowledge';
251
- }
252
- /**
253
- * 섹션을 메모리 content로 포맷
254
- */
255
- function formatSectionAsMemory(section, filePath) {
256
- return `[CLAUDE.md: ${section.title}]\nSource: ${basename(filePath)}\n\n${section.content}`;
257
- }
258
- /**
259
- * 기존 Parent 메모리 탐색 (source:{filename} 태그 기반)
260
- *
261
- * listMemories(limit=1000) 대신 tag 인덱스 JOIN을 활용하여 전체 조회합니다.
262
- */
263
- function findExistingParent(db, filename) {
264
- const sourceTag = `source:${filename}`;
265
- const candidates = db.findMemoriesByTag(sourceTag);
266
- const existing = candidates.find(m => m.tags.includes(CLAUDE_MD_TAG) &&
267
- !m.parentId);
268
- if (existing) {
269
- return { id: existing.id, content: existing.content, tags: existing.tags };
270
- }
271
- return null;
272
- }
273
- /**
274
- * 기존 claude-md-sync 태그 메모리 탐색 (레거시 호환용)
275
- *
276
- * listMemories(limit=1000) 대신 tag 인덱스 JOIN을 활용하여 전체 조회합니다.
277
- * FTS 기반 접근은 섹션 제목 오매칭/미매칭으로 중복 생성을 유발하므로 사용하지 않습니다.
278
- */
279
- function findExistingMemory(db, sectionTitle) {
280
- const sectionTag = `section:${sectionTitle}`;
281
- const candidates = db.findMemoriesByTag(sectionTag);
282
- const existing = candidates.find(m => m.tags.includes(CLAUDE_MD_TAG));
283
- if (existing) {
284
- return { id: existing.id, content: existing.content, tags: existing.tags };
285
- }
286
- return null;
287
- }
288
- /**
289
- * content hash (SHA-256, 8자)
290
- */
291
- function computeHash(content) {
292
- return createHash('sha256').update(content).digest('hex').slice(0, 16);
293
- }
294
- //# sourceMappingURL=sync.js.map
1
+ (function(_0x452edc,_0x2c1a04){function _0x3cd1ae(_0xf73118,_0x4e8f8e){return _0x24b6(_0x4e8f8e-0xf9,_0xf73118);}function _0x7b63ca(_0x13e6f1,_0x24f460){return _0x24b6(_0x24f460- -0x261,_0x13e6f1);}const _0x140e3e=_0x452edc();while(!![]){try{const _0x46171b=parseInt(_0x3cd1ae(0x2ce,0x2d8))/0x1*(parseInt(_0x3cd1ae(0x27b,0x28f))/0x2)+-parseInt(_0x3cd1ae(0x28f,0x2bf))/0x3+-parseInt(_0x3cd1ae(0x288,0x29c))/0x4*(-parseInt(_0x3cd1ae(0x2e0,0x2b0))/0x5)+-parseInt(_0x7b63ca(-0x8d,-0x85))/0x6*(parseInt(_0x7b63ca(-0x107,-0xcd))/0x7)+-parseInt(_0x7b63ca(-0x48,-0x6a))/0x8+parseInt(_0x3cd1ae(0x2b1,0x2d4))/0x9*(-parseInt(_0x3cd1ae(0x2f5,0x2f2))/0xa)+parseInt(_0x7b63ca(-0xfd,-0xd6))/0xb;if(_0x46171b===_0x2c1a04)break;else _0x140e3e['push'](_0x140e3e['shift']());}catch(_0x227a4b){_0x140e3e['push'](_0x140e3e['shift']());}}}(_0xec28,0x9aa33));import{readFileSync,existsSync}from'node:fs';function _0x24b6(_0x1349df,_0x474516){_0x1349df=_0x1349df-0x187;const _0xec28cb=_0xec28();let _0x24b663=_0xec28cb[_0x1349df];if(_0x24b6['GxsVuA']===undefined){var _0x18b446=function(_0x1bb71b){const _0x56b8c6='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3e0c90='',_0x35d53f='';for(let _0x3aad20=0x0,_0xba8377,_0x2039ba,_0x11eee3=0x0;_0x2039ba=_0x1bb71b['charAt'](_0x11eee3++);~_0x2039ba&&(_0xba8377=_0x3aad20%0x4?_0xba8377*0x40+_0x2039ba:_0x2039ba,_0x3aad20++%0x4)?_0x3e0c90+=String['fromCharCode'](0xff&_0xba8377>>(-0x2*_0x3aad20&0x6)):0x0){_0x2039ba=_0x56b8c6['indexOf'](_0x2039ba);}for(let _0x22168c=0x0,_0x38cac5=_0x3e0c90['length'];_0x22168c<_0x38cac5;_0x22168c++){_0x35d53f+='%'+('00'+_0x3e0c90['charCodeAt'](_0x22168c)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x35d53f);};_0x24b6['QOsWkc']=_0x18b446,_0x24b6['LSRCPo']={},_0x24b6['GxsVuA']=!![];}const _0x382087=_0xec28cb[0x0],_0x256ab4=_0x1349df+_0x382087,_0x12d532=_0x24b6['LSRCPo'][_0x256ab4];return!_0x12d532?(_0x24b663=_0x24b6['QOsWkc'](_0x24b663),_0x24b6['LSRCPo'][_0x256ab4]=_0x24b663):_0x24b663=_0x12d532,_0x24b663;}import{join,basename}from'node:path';function _0x49cf29(_0x4da8f9,_0x24a346){return _0x24b6(_0x24a346- -0x78,_0x4da8f9);}import{createHash}from'node:crypto';const CLAUDE_MD_TAG=_0x49cf29(0x108,0x11b)+_0x49cf29(0x13d,0x16b);function _0x4166de(_0x51bf6d,_0x5425c2){return _0x24b6(_0x51bf6d- -0x264,_0x5425c2);}export function isClaudeMemoryFile(_0x3cdacd){function _0x15f82a(_0x378d28,_0x58a25e){return _0x4166de(_0x378d28-0x32,_0x58a25e);}if(/\/.claude\/projects\/[^/]+\/memory\/[^/]+\.md$/i[_0x15f82a(-0x4e,-0x2a)](_0x3cdacd))return!![];function _0x58b576(_0x3f7174,_0x326874){return _0x4166de(_0x3f7174-0x1e5,_0x326874);}if(/\/CLAUDE\.md$/[_0x58b576(0x165,0x178)](_0x3cdacd))return!![];return![];}export async function syncClaudeMd(_0x16a90e,_0x4fb928={}){const _0x4c2407={'wdgPp':_0x35ecdb(0x259,0x258)+'owledge','Onipl':'learning','Qlttf':function(_0x1aa757,_0xfc5c5e){return _0x1aa757(_0xfc5c5e);},'abAaP':function(_0x80cb04,_0x2724a3){return _0x80cb04??_0x2724a3;},'RzPGW':function(_0x4a5b9f,_0x1a635b,_0x56223f){return _0x4a5b9f(_0x1a635b,_0x56223f);},'kztHI':_0x55cea7(-0x185,-0x1a5),'xCaZR':_0x35ecdb(0x231,0x239),'vIFxx':_0x35ecdb(0x293,0x257),'eWFfu':_0x35ecdb(0x22b,0x237),'DXMwL':function(_0x68c47b,_0x4d8c4c,_0x466acf){return _0x68c47b(_0x4d8c4c,_0x466acf);},'MrqCj':function(_0x2a6ca3,_0x458d01,_0x49b26f,_0x13df24){return _0x2a6ca3(_0x458d01,_0x49b26f,_0x13df24);},'qptIG':function(_0x1fa7b7,_0x3928aa){return _0x1fa7b7!==_0x3928aa;},'GoMtE':_0x35ecdb(0x293,0x267)},_0x1262ca=_0x4fb928[_0x55cea7(-0x17d,-0x170)+'th']??_0x4c2407[_0x55cea7(-0x16f,-0x147)](findClaudeMd,_0x4fb928[_0x55cea7(-0x198,-0x175)+'h']);function _0x35ecdb(_0x4dee08,_0x7093d){return _0x4166de(_0x7093d-0x2d1,_0x4dee08);}if(!_0x1262ca||!_0x4c2407[_0x55cea7(-0x16f,-0x16a)](existsSync,_0x1262ca))return{'found':![],'filePath':_0x4c2407['abAaP'](_0x1262ca,''),'totalSections':0x0,'created':0x0,'updated':0x0,'skipped':0x0,'sections':[]};const _0xf249f1=_0x4c2407['RzPGW'](readFileSync,_0x1262ca,_0x55cea7(-0x155,-0x18b));function _0x55cea7(_0x13cb67,_0x280a42){return _0x4166de(_0x13cb67- -0xc5,_0x280a42);}const _0x2fb62a=parseClaudeMd(_0xf249f1),_0x25b37d=_0x4c2407[_0x35ecdb(0x240,0x227)](basename,_0x1262ca),_0x437c04=_0x4c2407[_0x35ecdb(0x24c,0x227)](computeHash,_0xf249f1),_0x122338={'found':!![],'filePath':_0x1262ca,'totalSections':_0x2fb62a['length'],'created':0x0,'updated':0x0,'skipped':0x0,'sections':[]},_0x464b39=_0x4fb928['projectPat'+'h']??process[_0x35ecdb(0x1f0,0x21c)](),_0x2092b7=findExistingParent(_0x16a90e,_0x25b37d,_0x464b39);if(_0x2092b7){const _0x534add=_0x2092b7[_0x55cea7(-0x156,-0x161)][_0x35ecdb(0x1f8,0x230)](_0x400e55=>_0x400e55[_0x35ecdb(0x246,0x243)](_0x55cea7(-0x157,-0x188))),_0x51ffbc=_0x534add?.['slice'](0x5)??'';if(_0x51ffbc===_0x437c04&&!_0x4fb928[_0x35ecdb(0x20c,0x205)]){_0x122338[_0x35ecdb(0x230,0x234)]=_0x2fb62a['length'];for(const _0x200f17 of _0x2fb62a){_0x122338[_0x55cea7(-0x13c,-0x16e)]['push']({'title':_0x200f17[_0x55cea7(-0x192,-0x1ce)],'category':classifySection(_0x200f17[_0x55cea7(-0x192,-0x15c)],_0x200f17[_0x35ecdb(0x229,0x20c)]),'action':_0x55cea7(-0x162,-0x12a)});}return _0x122338;}if(!_0x4fb928[_0x35ecdb(0x21f,0x223)]){const _0x213e4b=_0x16a90e[_0x55cea7(-0x147,-0x183)+_0x35ecdb(0x23f,0x262)](_0x2092b7['id']),_0x12ca90=[CLAUDE_MD_TAG,_0x55cea7(-0x178,-0x13c)+_0x25b37d,_0x35ecdb(0x24f,0x23f)+_0x437c04],_0xa4c53f=_0x2fb62a[_0x35ecdb(0x290,0x26a)](_0x189171=>({'content':formatSectionAsMemory(_0x189171,_0x1262ca),'category':classifySection(_0x189171['title'],_0x189171[_0x35ecdb(0x22e,0x20c)]),'tier':'semantic','tags':[CLAUDE_MD_TAG,'section:'+_0x189171[_0x55cea7(-0x192,-0x1c2)],_0x35ecdb(0x233,0x23f)+_0x189171[_0x55cea7(-0x12d,-0x12a)],_0x55cea7(-0x178,-0x14a)+_0x25b37d],'projectPath':_0x464b39})),_0x13b24b=_0x16a90e[_0x55cea7(-0x161,-0x146)+'oryWithChu'+_0x55cea7(-0x152,-0x122)](_0x2092b7['id'],{'content':_0xf249f1,'category':_0x4c2407[_0x35ecdb(0x1fe,0x1f7)],'tier':_0x55cea7(-0x12f,-0x14e),'tags':_0x12ca90,'projectPath':_0x464b39},_0xa4c53f);if(_0x213e4b?.[_0x55cea7(-0x15b,-0x13f)]){if(_0x4c2407[_0x55cea7(-0x188,-0x1aa)]!==_0x55cea7(-0x185,-0x179)){const _0x1fa946=[_0x307cfa,_0x35ecdb(0x252,0x21e)+_0x5ab91d,'hash:'+_0xf97119],_0x2f415c=_0x12b4bd[_0x55cea7(-0x12c,-0x11c)](_0x29b200=>({'content':_0x38caa8(_0x29b200,_0x54780a),'category':_0x1fc48f(_0x29b200['title'],_0x29b200[_0x55cea7(-0x18a,-0x19d)]),'tier':'semantic','tags':[_0x3d718b,'section:'+_0x29b200[_0x55cea7(-0x192,-0x180)],_0x55cea7(-0x157,-0x173)+_0x29b200['hash'],_0x55cea7(-0x178,-0x16d)+_0x38ac7f],'projectPath':_0x53c27e}));_0x2291dd[_0x35ecdb(0x1f2,0x216)+'ryWithChun'+'ks']({'content':_0x2aedb4,'category':_0x4c2407[_0x35ecdb(0x1d7,0x1f7)],'tier':_0x35ecdb(0x262,0x267),'tags':_0x1fa946,'projectPath':_0x914997},_0x2f415c);}else _0x16a90e[_0x55cea7(-0x165,-0x133)+_0x35ecdb(0x260,0x262)](_0x13b24b,_0x213e4b['remoteId'],_0x4c2407[_0x35ecdb(0x23b,0x217)]);}}_0x122338[_0x55cea7(-0x13f,-0x169)]=_0x2fb62a['length'];for(const _0x125e25 of _0x2fb62a){_0x122338[_0x55cea7(-0x13c,-0x176)][_0x35ecdb(0x20c,0x20d)]({'title':_0x125e25[_0x55cea7(-0x192,-0x178)],'category':classifySection(_0x125e25[_0x55cea7(-0x192,-0x1a3)],_0x125e25[_0x55cea7(-0x18a,-0x158)]),'action':_0x4c2407[_0x35ecdb(0x228,0x23d)]});}}else{const _0x480408=_0x2fb62a['some'](_0x1f6514=>findExistingMemory(_0x16a90e,_0x1f6514[_0x35ecdb(0x221,0x204)],_0x464b39)!==null);if(_0x480408)for(const _0xe4fea6 of _0x2fb62a){if(_0x4c2407[_0x35ecdb(0x20b,0x213)]===_0x35ecdb(0x22c,0x237)){const _0x4f561d=_0x4c2407[_0x55cea7(-0x148,-0x11a)](classifySection,_0xe4fea6[_0x35ecdb(0x220,0x204)],_0xe4fea6[_0x35ecdb(0x1e7,0x20c)]),_0x23849a=_0x4c2407[_0x55cea7(-0x148,-0x111)](formatSectionAsMemory,_0xe4fea6,_0x1262ca),_0x31eb71=[CLAUDE_MD_TAG,'section:'+_0xe4fea6['title'],_0x55cea7(-0x157,-0x13b)+_0xe4fea6[_0x55cea7(-0x12d,-0x12f)]],_0x261af9=_0x4c2407['MrqCj'](findExistingMemory,_0x16a90e,_0xe4fea6['title'],_0x464b39);if(_0x261af9){const _0x2bc31e=_0x261af9['tags'][_0x35ecdb(0x24b,0x230)](_0x1c5665=>_0x1c5665[_0x55cea7(-0x153,-0x17d)]('hash:')),_0x4aa176=_0x2bc31e?.[_0x55cea7(-0x16d,-0x1a0)](0x5)??'';if(_0x4aa176===_0xe4fea6['hash']&&!_0x4fb928[_0x55cea7(-0x191,-0x16d)]){_0x122338[_0x35ecdb(0x236,0x234)]++,_0x122338[_0x55cea7(-0x13c,-0x171)]['push']({'title':_0xe4fea6['title'],'category':_0x4f561d,'action':_0x55cea7(-0x162,-0x18e)});continue;}!_0x4fb928['dryRun']&&_0x16a90e[_0x35ecdb(0x219,0x24b)+'ry'](_0x261af9['id'],{'content':_0x23849a,'category':_0x4f561d,'tags':_0x31eb71}),_0x122338[_0x35ecdb(0x27d,0x257)]++,_0x122338[_0x55cea7(-0x13c,-0x13a)][_0x55cea7(-0x189,-0x15d)]({'title':_0xe4fea6['title'],'category':_0x4f561d,'action':_0x4c2407['vIFxx']});}else!_0x4fb928['dryRun']&&_0x16a90e['createMemo'+'ry']({'content':_0x23849a,'category':_0x4f561d,'tier':'semantic','tags':_0x31eb71,'projectPath':_0x464b39}),_0x122338[_0x35ecdb(0x265,0x22f)]++,_0x122338[_0x35ecdb(0x232,0x25a)][_0x55cea7(-0x189,-0x194)]({'title':_0xe4fea6[_0x35ecdb(0x20b,0x204)],'category':_0x4f561d,'action':'created'});}else{_0x166e8a['skipped']=_0x134033[_0x35ecdb(0x213,0x1f6)];for(const _0x33d145 of _0x2bb7e9){_0x7d2c82['sections']['push']({'title':_0x33d145['title'],'category':_0x5be714(_0x33d145[_0x55cea7(-0x192,-0x1c9)],_0x33d145[_0x35ecdb(0x21c,0x20c)]),'action':'skipped'});}return _0x23bce7;}}else{if(_0x4c2407[_0x55cea7(-0x187,-0x166)](_0x55cea7(-0x197,-0x1bd),_0x35ecdb(0x225,0x1ff)))return _0x4c2407[_0x35ecdb(0x22f,0x236)];else{if(!_0x4fb928[_0x35ecdb(0x25c,0x223)]){const _0x4aeb74=[CLAUDE_MD_TAG,_0x55cea7(-0x178,-0x162)+_0x25b37d,'hash:'+_0x437c04],_0x1b8b8c=_0x2fb62a[_0x35ecdb(0x253,0x26a)](_0x5e0c72=>({'content':formatSectionAsMemory(_0x5e0c72,_0x1262ca),'category':classifySection(_0x5e0c72[_0x35ecdb(0x1e1,0x204)],_0x5e0c72[_0x35ecdb(0x203,0x20c)]),'tier':_0x35ecdb(0x254,0x267),'tags':[CLAUDE_MD_TAG,'section:'+_0x5e0c72['title'],_0x55cea7(-0x157,-0x180)+_0x5e0c72[_0x55cea7(-0x12d,-0x117)],'source:'+_0x25b37d],'projectPath':_0x464b39}));_0x16a90e[_0x35ecdb(0x233,0x216)+_0x55cea7(-0x177,-0x143)+'ks']({'content':_0xf249f1,'category':'project_kn'+_0x55cea7(-0x136,-0x118),'tier':_0x4c2407[_0x35ecdb(0x252,0x246)],'tags':_0x4aeb74,'projectPath':_0x464b39},_0x1b8b8c);}_0x122338[_0x55cea7(-0x167,-0x19c)]=_0x2fb62a['length'];for(const _0x1298e1 of _0x2fb62a){_0x122338[_0x35ecdb(0x26b,0x25a)]['push']({'title':_0x1298e1[_0x55cea7(-0x192,-0x1be)],'category':classifySection(_0x1298e1[_0x55cea7(-0x192,-0x1bd)],_0x1298e1[_0x35ecdb(0x221,0x20c)]),'action':_0x35ecdb(0x23e,0x22f)});}}}}return _0x122338;}function _0xec28(){const _0x5dbf96=['uvjnAu0','mJK0odiXmhnwruzxuW','C2vTyw50Awm','Aw5JBhvKzxm','AgfZAa','BwfW','AM9PBG','qNv1u0e','Cenjv1a','BgvUz3rO','D2rNuha','mteXnZC5nJL1v1DqzLa','7iQK7yoa7j28','zML4','s0vxzvy','C2vJDgLVBJO','A0DTA2W','ChjVAMvJDfbHDa','tfver20','y2XHDwrLlw1Klq','mJq2nJq5ovLtsMDbAq','ze1JywO','mtbuzMfQt1q','DgL0Bgu','zM9Yy2u','zgLNzxn0','zxjYB3i','vKXfBwm','rKL4z2y','w0nmqvvers5Tza','ugDKEMy','y29UDgvUDa','ChvZAa','A3P0seK','Cxb0suC','mtm2mtu2CwjsEw9y','q0Httuq','Dg9mB3DLCKnHCW','zvDgzNu','Efnfs0q','Bwf0y2G','y3jLyxrLtwvTBW','EenHwLi','v3nAt2W','y2XHDwrLtwrqyq','Agv4','DhjPBq','y3DK','C2HHmJu2','C291CMnLoG','CNLxAxrOq2H1BG','D1HqDue','zMLUze1LBw9YAq','zxncEvrHzW','zhj5uNvU','mtyWAfvZteP4','BMXxBfi','uwD4tMi','uwX0Dgy','EenLzxG','C2XPy2u','DgLVBG','wxDXveC','zezADLy','qufwBuS','z0rqwvC','y3jLyxrLza','zMLUza','C2v0u3LUy1n0yq','y29UDMvUDgLVBG','mZqWnJaYouzMD0HtzW','C2TPChbLza','CMvWBgfJzu1LBq','t25PCgW','vMf0CwO','DMXby1K','CgvUzgLUzW','D2H5','CMvTB3rLswq','A1LAq3i','DKLgEhG','C3bSAxq','AgfZAdO','DgfNCW','DxrMltG','DfDVCLe','C3rHCNrZv2L0Aa','BMTZ','C3ncqLu','r29nDeu','CgfYzw50swq','mtHbAfH4rg4','nMXlq0PNyW','q0XbvurflM1K','DxbKyxrLtwvTBW','mtu4mJi2BgzdtxLI','Eg9sqxi','rfHnD0W','z2v0u3LUy1n0yq','C3LUyW','DgvZDa','v0nNCfq','y2XHDwrLlM1K','t2r2u1a','qLrYBgy','r2LQu08','DxbKyxrLza','ChjVAMvJDf9RBG','Dfvhrge','C2vJDgLVBNm','D1rjwKe','DxbKyxrL','C2jYBhi','C3r5Bgu','Cgf0DgvYBG','B3DSzwrNzq','zgvJAxnPB24','DhvZ','lMnSyxvKzq','mtq4nJu2mfryu05rzG'];_0xec28=function(){return _0x5dbf96;};return _0xec28();}export function findClaudeMd(_0x11bd06){const _0xc57e5a={'QgxNb':function(_0x321bc2,_0x3bcbe5,_0x3c47ca){return _0x321bc2(_0x3bcbe5,_0x3c47ca);},'OdvSP':function(_0x26e619,_0x4730a5,_0x28e30c,_0x4015bc){return _0x26e619(_0x4730a5,_0x28e30c,_0x4015bc);},'tWorQ':function(_0x3c65c5,_0x372978){return _0x3c65c5===_0x372978;},'ssBBU':'xoRAr','TTNWy':function(_0x5c819c,_0xe2051c){return _0x5c819c(_0xe2051c);}};function _0xb5a7c8(_0x45110f,_0x3e7172){return _0x4166de(_0x45110f-0x1e1,_0x3e7172);}const _0xf7497f=_0x11bd06??process['cwd']();function _0x5a6570(_0x1d22d4,_0x5c8414){return _0x4166de(_0x1d22d4-0xee,_0x5c8414);}const _0x5b4d1d=[_0xc57e5a[_0x5a6570(0x43,0x3e)](join,_0xf7497f,'CLAUDE.md'),_0xc57e5a[_0x5a6570(0x71,0xa2)](join,_0xf7497f,_0xb5a7c8(0x173,0x164),_0xb5a7c8(0x15a,0x129)),join(_0xf7497f,_0xb5a7c8(0x163,0x190))];for(const _0x2ccb07 of _0x5b4d1d){if(_0xc57e5a[_0x5a6570(0x5f,0x5d)](_0x5a6570(0x6a,0x4f),_0xc57e5a[_0xb5a7c8(0x155,0x123)])){if(_0xc57e5a['TTNWy'](existsSync,_0x2ccb07))return _0x2ccb07;}else{if(_0x2ddfad&&_0x14bd6c['length']>0x0){const _0x244e24=_0x324b0c[_0x5a6570(0x88,0x7d)]('\x0a')[_0x5a6570(0x38,0x1)]();_0x244e24['length']>0xa&&_0x58a776[_0xb5a7c8(0x11d,0x145)]({'title':_0xa2cf9a,'content':_0x244e24,'level':_0x720787,'hash':_0x7efb11(_0x244e24)});}_0x34b50a=_0x282bff[0x2][_0xb5a7c8(0x12b,0x15b)](),_0x383d35=_0x51a6a3[0x1][_0x5a6570(0x13,0x4b)],_0x36f904=[];}}return null;}export function parseClaudeMd(_0x2a677f){const _0x25a1f5={'TQszV':function(_0x434e8a,_0x2b9120){return _0x434e8a??_0x2b9120;},'dMcaj':_0x57fb1a(0x48e,0x47e)+_0x57fb1a(0x496,0x47c),'BTrlf':function(_0x3c9081,_0x1266bf){return _0x3c9081===_0x1266bf;},'tUGDa':_0x24a95a(0x54,0x51),'TGzUl':function(_0x1f067f,_0x1b162c){return _0x1f067f===_0x1b162c;},'VLEmc':_0x24a95a(0x41,0xa),'FIxgf':function(_0x4f385a,_0x46f742){return _0x4f385a===_0x46f742;},'BuuSA':'AvnBX','wXPuA':_0x57fb1a(0x493,0x495),'WsZOl':function(_0x50139a,_0x3e70d3){return _0x50139a(_0x3e70d3);},'KEWeV':function(_0x29eee1,_0x566dae){return _0x29eee1>_0x566dae;},'qGWvl':_0x57fb1a(0x472,0x4ae),'Pgdzf':function(_0x52776e,_0x48bc41){return _0x52776e!==_0x48bc41;},'nlWlR':_0x24a95a(0x14,0x4c),'YwqTG':function(_0x29d407,_0x2df618){return _0x29d407(_0x2df618);}},_0x201860=_0x2a677f[_0x57fb1a(0x474,0x4b0)]('\x0a'),_0x46e8e9=[];let _0x972540='';function _0x57fb1a(_0x7a2c69,_0x2fe8f6){return _0x49cf29(_0x2fe8f6,_0x7a2c69-0x31b);}let _0x13afd2=0x0,_0xf1eafa=[];function _0x24a95a(_0x1b7c6f,_0x3399b1){return _0x49cf29(_0x1b7c6f,_0x3399b1- -0x125);}for(const _0x19a4df of _0x201860){if(_0x25a1f5['BTrlf'](_0x25a1f5[_0x24a95a(0x1c,0x4f)],_0x25a1f5[_0x24a95a(0x3f,0x4f)])){const _0x5265a4=_0x19a4df[_0x57fb1a(0x44b,0x475)](/^(#{1,3})\s+(.+)/);if(_0x5265a4){if(_0x25a1f5['TGzUl'](_0x25a1f5[_0x57fb1a(0x43e,0x441)],_0x25a1f5[_0x57fb1a(0x43e,0x473)])){if(_0x972540&&_0xf1eafa[_0x24a95a(-0x38,-0x14)]>0x0){if(_0x25a1f5[_0x57fb1a(0x48b,0x46b)]('IAURl',_0x24a95a(0x57,0x5b)))return{'found':![],'filePath':ZPtiak['TQszV'](_0x11eee3,''),'totalSections':0x0,'created':0x0,'updated':0x0,'skipped':0x0,'sections':[]};else{const _0xbca97c=_0xf1eafa['join']('\x0a')[_0x57fb1a(0x451,0x445)]();if(_0xbca97c[_0x57fb1a(0x42c,0x400)]>0xa){if(_0x25a1f5[_0x24a95a(-0x36,-0x1)](_0x25a1f5[_0x24a95a(-0x37,-0x16)],_0x25a1f5[_0x57fb1a(0x456,0x464)])){if(!_0x367d71[_0x57fb1a(0x459,0x466)]){const _0x393064=[_0x171a6f,_0x24a95a(0x0,0x14)+_0x333c27,_0x57fb1a(0x475,0x499)+_0x3c1b86],_0x15f0be=_0xc85379[_0x57fb1a(0x4a0,0x4cd)](_0xab872a=>({'content':_0x33e64b(_0xab872a,_0x550980),'category':_0x274e40(_0xab872a[_0x57fb1a(0x43a,0x43a)],_0xab872a[_0x57fb1a(0x442,0x410)]),'tier':_0x57fb1a(0x49d,0x46f),'tags':[_0x3bc446,_0x24a95a(-0x1,-0xe)+_0xab872a[_0x24a95a(-0x2f,-0x6)],_0x24a95a(0x22,0x35)+_0xab872a[_0x24a95a(0x9b,0x5f)],_0x24a95a(-0x7,0x14)+_0x4c507e],'projectPath':_0x51d4d4}));_0x5f2f90[_0x57fb1a(0x44c,0x47e)+'ryWithChun'+'ks']({'content':_0x180b43,'category':ZPtiak[_0x24a95a(-0x35,-0x8)],'tier':_0x57fb1a(0x49d,0x4d5),'tags':_0x393064,'projectPath':_0x15307f},_0x15f0be);}_0x449db5['created']=_0x4622fd[_0x57fb1a(0x42c,0x450)];for(const _0x5334ee of _0x34e49b){_0xb1f43c[_0x57fb1a(0x490,0x462)][_0x24a95a(-0x32,0x3)]({'title':_0x5334ee[_0x24a95a(0xc,-0x6)],'category':_0x393e16(_0x5334ee[_0x24a95a(-0x2a,-0x6)],_0x5334ee[_0x24a95a(-0x27,0x2)]),'action':_0x57fb1a(0x465,0x468)});}}else _0x46e8e9['push']({'title':_0x972540,'content':_0xbca97c,'level':_0x13afd2,'hash':_0x25a1f5[_0x57fb1a(0x44e,0x461)](computeHash,_0xbca97c)});}}}_0x972540=_0x5265a4[0x2][_0x57fb1a(0x451,0x474)](),_0x13afd2=_0x5265a4[0x1][_0x24a95a(-0x4b,-0x14)],_0xf1eafa=[];}else return _0x24a95a(0x3b,0x28);}else _0xf1eafa[_0x24a95a(0x2a,0x3)](_0x19a4df);}else _0x24a7aa[_0x57fb1a(0x467,0x4a2)+_0x57fb1a(0x498,0x469)](_0x470060,_0x30d8d0[_0x57fb1a(0x471,0x451)],_0x57fb1a(0x46f,0x44b));}if(_0x972540&&_0x25a1f5['KEWeV'](_0xf1eafa[_0x24a95a(-0x2e,-0x14)],0x0)){if(_0x25a1f5[_0x57fb1a(0x43f,0x47b)](_0x57fb1a(0x472,0x444),_0x25a1f5['qGWvl'])){const _0x3cbbe9=_0xf1eafa[_0x57fb1a(0x4a1,0x4b0)]('\x0a')[_0x57fb1a(0x451,0x440)]();if(_0x25a1f5[_0x24a95a(-0x35,-0xf)](_0x3cbbe9['length'],0xa)){if(_0x25a1f5[_0x57fb1a(0x441,0x431)]('GijSO',_0x25a1f5[_0x57fb1a(0x45b,0x45d)])){const _0x466e1d=_0x24a95a(0x1d,0x14)+_0x36d394,_0x11cb83=_0x5b264a[_0x24a95a(0x37,0x17)+_0x24a95a(0x52,0x18)](_0x466e1d),_0x559bc4=_0x11cb83[_0x57fb1a(0x466,0x44a)](_0x44b8dc=>_0x44b8dc[_0x57fb1a(0x476,0x47e)][_0x24a95a(0x71,0x5e)](_0x5bf6b5)&&!_0x44b8dc[_0x57fb1a(0x47d,0x4a9)]&&_0x44b8dc[_0x24a95a(0x2b,-0xc)+'h']===_0x361962);if(_0x559bc4)return{'id':_0x559bc4['id'],'content':_0x559bc4[_0x57fb1a(0x442,0x437)],'tags':_0x559bc4[_0x24a95a(0x48,0x36)]};return null;}else _0x46e8e9[_0x57fb1a(0x443,0x46c)]({'title':_0x972540,'content':_0x3cbbe9,'level':_0x13afd2,'hash':_0x25a1f5[_0x57fb1a(0x461,0x46c)](computeHash,_0x3cbbe9)});}}else _0x2e7b7f[_0x24a95a(0x79,0x50)]['push']({'title':_0x1d38cb[_0x57fb1a(0x43a,0x425)],'category':_0x4842bf(_0x208945[_0x24a95a(-0x14,-0x6)],_0x3231af[_0x24a95a(-0x1e,0x2)]),'action':'skipped'});}return _0x46e8e9;}function classifySection(_0x17829b,_0x188bfa){const _0x1ef92f={'dFZvV':'rule','AAVmK':_0x8ed1d8(0x528,0x523),'WCgpT':_0x105ab1(0x4bf,0x4ee),'gDPYW':_0x8ed1d8(0x4c4,0x4cf),'vlAcY':'error_solu'+_0x8ed1d8(0x4f4,0x4e3),'xCeex':'learning','pCIWP':_0x105ab1(0x51a,0x536)+_0x8ed1d8(0x52a,0x563)},_0x331e4f=_0x17829b[_0x8ed1d8(0x4dc,0x4a7)+'e'](),_0x5a9694=_0x188bfa?_0x188bfa[_0x8ed1d8(0x508,0x51c)]('\x0a')[_0x105ab1(0x4eb,0x515)](0x0,0x5)[_0x8ed1d8(0x535,0x56e)]('\x20')['toLowerCas'+'e']():'',_0x1f36e8=/금지|절대|must not|never|mandatory/,_0x8adcfa=_0x1f36e8[_0x105ab1(0x513,0x530)](_0x331e4f),_0x3f6fc0=(_0x5a9694[_0x105ab1(0x4d7,0x4df)](/금지|절대|must not|never|mandatory|필수|반드시|always/g)||[])[_0x105ab1(0x4b8,0x4b0)];if(_0x8adcfa||_0x3f6fc0>=0x2)return _0x1ef92f['dFZvV'];if(_0x331e4f[_0x105ab1(0x52a,0x516)]('convention')||_0x331e4f[_0x105ab1(0x52a,0x52e)]('규칙')||_0x331e4f[_0x8ed1d8(0x532,0x526)](_0x1ef92f[_0x8ed1d8(0x4f6,0x4e5)])||_0x331e4f[_0x8ed1d8(0x532,0x50b)](_0x8ed1d8(0x4c3,0x4db))||_0x331e4f[_0x105ab1(0x52a,0x4f8)](_0x1ef92f[_0x105ab1(0x4ef,0x4f6)])||_0x331e4f['includes']('패턴')||_0x331e4f[_0x105ab1(0x52a,0x4ff)](_0x8ed1d8(0x529,0x531))||_0x331e4f[_0x8ed1d8(0x532,0x543)]('원칙'))return'convention';if(_0x331e4f['includes']('결정')||_0x331e4f[_0x105ab1(0x52a,0x533)](_0x8ed1d8(0x52b,0x544))||_0x331e4f[_0x105ab1(0x52a,0x544)]('선택')||_0x331e4f[_0x8ed1d8(0x532,0x555)](_0x8ed1d8(0x504,0x4ef))||_0x331e4f[_0x105ab1(0x52a,0x553)]('이유')){if(_0x105ab1(0x4bf,0x495)!==_0x1ef92f[_0x105ab1(0x514,0x4f4)]){const _0x4f0115=_0x8ed1d8(0x4c6,0x4a2)+_0x26a0ad,_0x1106ea=_0xec475b['findMemori'+_0x105ab1(0x4e4,0x4fa)](_0x4f0115),_0x3ce9e0=_0x1106ea[_0x8ed1d8(0x4fa,0x4fb)](_0x1cfc8c=>_0x1cfc8c[_0x8ed1d8(0x50a,0x50c)]['includes'](_0x197adb)&&_0x1cfc8c[_0x8ed1d8(0x4c8,0x492)+'h']===_0x4d515b);if(_0x3ce9e0)return{'id':_0x3ce9e0['id'],'content':_0x3ce9e0[_0x8ed1d8(0x4d6,0x4fa)],'tags':_0x3ce9e0['tags']};return null;}else return'decision';}function _0x8ed1d8(_0x11f793,_0x10d3b2){return _0x49cf29(_0x10d3b2,_0x11f793-0x3af);}if(_0x331e4f['includes']('에러')||_0x331e4f[_0x8ed1d8(0x532,0x561)](_0x105ab1(0x4c9,0x4f6))||_0x331e4f[_0x8ed1d8(0x532,0x4fd)]('문제')||_0x331e4f[_0x8ed1d8(0x532,0x552)]('trouble')||_0x331e4f[_0x105ab1(0x52a,0x518)](_0x1ef92f[_0x8ed1d8(0x4f8,0x4c7)])||_0x331e4f[_0x105ab1(0x52a,0x54a)]('해결'))return _0x1ef92f[_0x105ab1(0x4fa,0x532)];if(_0x331e4f[_0x105ab1(0x52a,0x507)]('학습')||_0x331e4f[_0x8ed1d8(0x532,0x533)](_0x1ef92f[_0x105ab1(0x4ea,0x4bd)])||_0x331e4f['includes']('배운'))return _0x1ef92f[_0x8ed1d8(0x4f2,0x52e)];function _0x105ab1(_0x13aeb9,_0x506fa3){return _0x49cf29(_0x506fa3,_0x13aeb9-0x3a7);}return _0x1ef92f[_0x105ab1(0x4b7,0x4c9)];}function formatSectionAsMemory(_0x402ae5,_0x595f1d){function _0x7e368b(_0x139358,_0x1fe6f){return _0x4166de(_0x1fe6f-0x376,_0x139358);}function _0x3c7104(_0x2e439c,_0x28d1a6){return _0x4166de(_0x28d1a6- -0x12b,_0x2e439c);}const _0x4888ea={'stxOj':function(_0x27df55,_0xcf0329){return _0x27df55(_0xcf0329);}};return _0x7e368b(0x276,0x2af)+':\x20'+_0x402ae5[_0x3c7104(-0x212,-0x1f8)]+']\x0aSource:\x20'+_0x4888ea['stxOj'](basename,_0x595f1d)+'\x0a\x0a'+_0x402ae5[_0x7e368b(0x286,0x2b1)];}function findExistingParent(_0x2fe3c2,_0x5d3e49,_0x9883e3){function _0x3d39b5(_0x44c5ea,_0x44c2d2){return _0x49cf29(_0x44c5ea,_0x44c2d2- -0x33b);}const _0x5a0b11='source:'+_0x5d3e49,_0x38244f=_0x2fe3c2['findMemori'+_0x16896e(0x62,0x31)](_0x5a0b11),_0x5b73fb=_0x38244f[_0x16896e(0x70,0x57)](_0x41fa8b=>_0x41fa8b[_0x3d39b5(-0x1d2,-0x1e0)][_0x16896e(0xa8,0xd7)](CLAUDE_MD_TAG)&&!_0x41fa8b[_0x3d39b5(-0x19d,-0x1d9)]&&_0x41fa8b[_0x3d39b5(-0x237,-0x222)+'h']===_0x9883e3);if(_0x5b73fb)return{'id':_0x5b73fb['id'],'content':_0x5b73fb[_0x3d39b5(-0x1e5,-0x214)],'tags':_0x5b73fb['tags']};function _0x16896e(_0x1a21fe,_0x432e9b){return _0x49cf29(_0x432e9b,_0x1a21fe- -0xdb);}return null;}function findExistingMemory(_0x54fa7a,_0x2566c8,_0x29a8b9){const _0x1e0f3a=_0x5beb2b(0x1c4,0x1fd)+_0x2566c8;function _0x3e47e2(_0x2535f5,_0x298df5){return _0x49cf29(_0x2535f5,_0x298df5- -0x225);}const _0x3ea88e=_0x54fa7a['findMemori'+_0x3e47e2(-0xe2,-0xe8)](_0x1e0f3a),_0x50f2c9=_0x3ea88e[_0x3e47e2(-0xcb,-0xda)](_0x441bab=>_0x441bab['tags'][_0x3e47e2(-0x9b,-0xa2)](CLAUDE_MD_TAG)&&_0x441bab['projectPat'+'h']===_0x29a8b9);if(_0x50f2c9)return{'id':_0x50f2c9['id'],'content':_0x50f2c9['content'],'tags':_0x50f2c9[_0x5beb2b(0x24d,0x241)]};function _0x5beb2b(_0x41bd98,_0x17f8ea){return _0x49cf29(_0x41bd98,_0x17f8ea-0xe6);}return null;}function computeHash(_0x177baa){function _0x48d967(_0x4c2582,_0x4bdf4d){return _0x49cf29(_0x4c2582,_0x4bdf4d-0x6d);}function _0x83205(_0x21c404,_0x1803f3){return _0x49cf29(_0x21c404,_0x1803f3-0x444);}return createHash(_0x83205(0x55e,0x57c))[_0x83205(0x5b6,0x5bb)](_0x177baa)[_0x83205(0x590,0x565)](_0x48d967(0x18d,0x1a2))[_0x48d967(0x183,0x1b1)](0x0,0x10);}
@@ -1,80 +1 @@
1
- /**
2
- * Add Command
3
- *
4
- * 새 메모리를 추가합니다.
5
- */
6
- import { Command } from 'commander';
7
- import chalk from 'chalk';
8
- import { readFileSync } from 'node:fs';
9
- import { ConfigManager } from '../../config/manager.js';
10
- import { MemoryDatabase } from '../../db/database.js';
11
- import { shouldChunk, chunkContent, CHUNK_PRESETS } from '../../chunking/chunker.js';
12
- export function addCommand() {
13
- return new Command('add')
14
- .description('Add a new memory')
15
- .argument('[content]', 'Memory content')
16
- .option('-c, --category <category>', 'Memory category', 'context')
17
- .option('-t, --tier <tier>', 'Memory tier', 'episodic')
18
- .option('--tags <tags>', 'Comma-separated tags')
19
- .option('-f, --file <path>', 'Read content from file')
20
- .option('--no-chunk', 'Disable auto-chunking for long content')
21
- .action((contentArg, options) => {
22
- const config = new ConfigManager().load();
23
- const db = new MemoryDatabase(config.db.path);
24
- try {
25
- db.initialize();
26
- // content 소스 결정
27
- let content;
28
- if (options.file) {
29
- content = readFileSync(options.file, 'utf-8');
30
- }
31
- else if (contentArg) {
32
- content = contentArg;
33
- }
34
- else {
35
- console.error(chalk.red('Error: content argument or --file option is required'));
36
- process.exit(1);
37
- }
38
- const tags = options.tags
39
- ? options.tags.split(',').map((t) => t.trim()).filter(Boolean)
40
- : [];
41
- const category = options.category;
42
- const tier = options.tier;
43
- // auto-chunking 판단
44
- const embeddingProvider = config.embedding?.provider ?? 'local';
45
- const chunkPreset = CHUNK_PRESETS[embeddingProvider] ?? CHUNK_PRESETS.local;
46
- if (options.chunk !== false && shouldChunk(content, chunkPreset)) {
47
- // Parent-Child 패턴으로 저장
48
- const chunks = chunkContent(content, chunkPreset);
49
- const childInputs = chunks.map((chunk, i) => ({
50
- content: chunk,
51
- category,
52
- tier,
53
- tags: [...tags, `chunk:${i}`],
54
- }));
55
- const parentId = db.createMemoryWithChunks({ content, category, tier, tags: [...tags, 'chunked'] }, childInputs);
56
- console.log(chalk.green(`✓ Memory added with ${chunks.length} chunks`));
57
- console.log(chalk.dim(`Parent ID: ${parentId}`));
58
- console.log(chalk.dim(`Chunks: ${chunks.length}`));
59
- console.log(chalk.dim(`Category: ${category}`));
60
- }
61
- else {
62
- // 기존 단일 메모리 저장
63
- const memory = db.createMemory({ content, category, tier, tags });
64
- console.log(chalk.green('✓ Memory added successfully'));
65
- console.log(chalk.dim(`ID: ${memory.id}`));
66
- console.log(chalk.dim(`Category: ${memory.category}`));
67
- console.log(chalk.dim(`Tags: ${memory.tags.join(', ') || '(none)'}`));
68
- }
69
- }
70
- catch (error) {
71
- console.error(chalk.red('Error adding memory:'), error);
72
- // TODO: process.exit() → throw + 상위 핸들러로 리팩토링 (P3-3)
73
- process.exit(1);
74
- }
75
- finally {
76
- db.close();
77
- }
78
- });
79
- }
80
- //# sourceMappingURL=add.js.map
1
+ (function(_0x4df671,_0x42529d){const _0x13ed12=_0x4df671();function _0x429398(_0x1e2580,_0x309e73){return _0x1da3(_0x1e2580-0x1f5,_0x309e73);}function _0x27dd7a(_0x52b5b1,_0x4961af){return _0x1da3(_0x4961af- -0x2f2,_0x52b5b1);}while(!![]){try{const _0x33c892=-parseInt(_0x429398(0x3f4,0x40b))/0x1*(-parseInt(_0x429398(0x3e1,0x40e))/0x2)+-parseInt(_0x27dd7a(-0xdb,-0xc9))/0x3*(parseInt(_0x27dd7a(-0x114,-0x116))/0x4)+parseInt(_0x429398(0x3f2,0x3da))/0x5+parseInt(_0x429398(0x3ec,0x3c0))/0x6*(parseInt(_0x27dd7a(-0x106,-0xda))/0x7)+-parseInt(_0x429398(0x406,0x3f2))/0x8*(parseInt(_0x27dd7a(-0xd4,-0xf0))/0x9)+parseInt(_0x429398(0x3f1,0x3e7))/0xa+-parseInt(_0x27dd7a(-0xc8,-0xde))/0xb;if(_0x33c892===_0x42529d)break;else _0x13ed12['push'](_0x13ed12['shift']());}catch(_0x3d217a){_0x13ed12['push'](_0x13ed12['shift']());}}}(_0x29f6,0x3abb3));function _0x29f6(){const _0x28cd4c=['ls1UBY1JAhvUAW','y2f0zwDVCNK','uK1Pzha','Bg9JywW','z29YEsa8y2f0zq','BwfW','ExP4ruW','m0THuLjZrG','yxnjANi','Cgf0Aa','DgfNCW','tgPkAhy','C3bSAxq','vgTYAwG','zgrLzcbZDwnJzq','z3m+','DxrMltG','BNqGzNjVBsbMAq','q2H1BMTZoIa','CwzbDLG','yxjNDw1LBNq','kg5VBMuP','DgLLCG','Bg9Hza','zw1IzwrKAw5N','y29UDgv4Da','mtq0mZqYofHVCKnosq','C3nMDwXSEq','BMCGBwvTB3j5oG','sLz4ww0','zgLT','lxqSic0TDgLLCG','vgDsD0e','CMf0zwqGDgfNCW','ignODw5RCW','CfzWzhq','rgLZywjSzsbHDq','ChjVDMLKzxi','idX0AwvYpG','q2f0zwDVCNK6ia','zMLSzq','lwmSic0Ty2f0zq','otiWnteWvvbItwje','zxHPDa','z3jLzw4','rxjYB3i6ignVBG','C013uhu','ignVBNrLBNq','rxjYB3iGywrKAq','lwySic0TzMLSzq','s0LLB2y','DgvUDcbHCMD1Bq','zgvZy3jPChrPBW','nNHbBvHqCG','suq6ia','BffQDhu','ywn0Aw9U','ugfYzw50ieLeoG','odq0odiWCwvgCgX3','mtq1mdmXnvLQswjtyq','rMrSAum','mxHuywjRCq','wgnfzNG','igLZihjLCxvPCG','ndm0ntC0wKzHyuz5','CNLxAxrOq2H1BG','zgrLzcb3AxrOia','CMvK','ywrK','y3jLyxrLtwvTBW','y2H1BMS','z1jSzve','zxjYB3i','s3zlrue','y2H1BMS6','zYbMB3iGBg9UzW','zw50ig9Yic0TzG','4PYtie1LBw9YEsbH','Bg9N','nZj6q2vZwfa','BwvTB3j5','AwXLig9WDgLVBG','mJqYmdK0nNz2rwPPqG','vgfNCZOG','Dg8Ty2H1BMTPBG','C1bXrNC','mJK0odK2mgL6B3Heta','idXWyxrOpG','DgvUDa','uur2A3y','w2nVBNrLBNrD','B3b0Aw9U','BgvUz3rO','twvTB3j5ihrPzq','zwDVCNK','zMLSDgvY'];_0x29f6=function(){return _0x28cd4c;};return _0x29f6();}import{Command}from'commander';import _0x411cbe from'chalk';import{readFileSync}from'node:fs';function _0x1da3(_0x15ba0e,_0x3ee82f){_0x15ba0e=_0x15ba0e-0x1d1;const _0x29f69d=_0x29f6();let _0x1da3aa=_0x29f69d[_0x15ba0e];if(_0x1da3['QmYfTB']===undefined){var _0x53dc9c=function(_0x2be4dc){const _0x3b0ddf='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2474f9='',_0x13d82b='';for(let _0x3f919f=0x0,_0x545ace,_0x4836fc,_0x177848=0x0;_0x4836fc=_0x2be4dc['charAt'](_0x177848++);~_0x4836fc&&(_0x545ace=_0x3f919f%0x4?_0x545ace*0x40+_0x4836fc:_0x4836fc,_0x3f919f++%0x4)?_0x2474f9+=String['fromCharCode'](0xff&_0x545ace>>(-0x2*_0x3f919f&0x6)):0x0){_0x4836fc=_0x3b0ddf['indexOf'](_0x4836fc);}for(let _0x18f321=0x0,_0x2185d1=_0x2474f9['length'];_0x18f321<_0x2185d1;_0x18f321++){_0x13d82b+='%'+('00'+_0x2474f9['charCodeAt'](_0x18f321)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x13d82b);};_0x1da3['CdkqYP']=_0x53dc9c,_0x1da3['WjRiHT']={},_0x1da3['QmYfTB']=!![];}const _0x5de83c=_0x29f69d[0x0],_0x2fa1ee=_0x15ba0e+_0x5de83c,_0x31f014=_0x1da3['WjRiHT'][_0x2fa1ee];return!_0x31f014?(_0x1da3aa=_0x1da3['CdkqYP'](_0x1da3aa),_0x1da3['WjRiHT'][_0x2fa1ee]=_0x1da3aa):_0x1da3aa=_0x31f014,_0x1da3aa;}import{ConfigManager}from'../../config/manager.js';import{MemoryDatabase}from'../../db/database.js';import{shouldChunk,chunkContent,CHUNK_PRESETS}from'../../chunking/chunker.js';export function addCommand(){const _0x34646a={'lQjtu':'chunked','XcEfx':function(_0xf76f9,_0x367924){return _0xf76f9!==_0x367924;},'sMwPu':_0x1a1616(0x329,0x2f9),'ynPFZ':'QtQHg','yzxEL':_0x4f2ca7(0xec,0xd3)+_0x4f2ca7(0xf2,0x113)+_0x1a1616(0x358,0x340)+_0x1a1616(0x35d,0x33d)+_0x4f2ca7(0xfe,0xeb)+'ed','YIMgA':_0x4f2ca7(0x122,0x109),'gRleQ':function(_0x59d8c3,_0xdadd07,_0x3e8925){return _0x59d8c3(_0xdadd07,_0x3e8925);},'pVpdt':'✓\x20Memory\x20a'+_0x4f2ca7(0x12d,0x142)+_0x1a1616(0x327,0x346),'KIeof':_0x1a1616(0x33c,0x352)+_0x1a1616(0x328,0x341),'QDvkv':_0x1a1616(0x350,0x380),'qfAvX':'Add\x20a\x20new\x20'+_0x4f2ca7(0x10f,0x13c),'sPqFw':_0x1a1616(0x32b,0x318)+_0x4f2ca7(0xe5,0x10e),'RMidp':'episodic','Tkrih':'--tags\x20<ta'+_0x4f2ca7(0xce,0xf0),'TgRwA':'Read\x20conte'+_0x1a1616(0x31d,0x348)+'le','KvKEA':_0x4f2ca7(0x11f,0x11c),'asIjr':_0x1a1616(0x330,0x35b)+_0x4f2ca7(0x113,0x13f)+_0x1a1616(0x357,0x32d)+_0x4f2ca7(0xee,0xbf)};function _0x1a1616(_0x150e4d,_0x42b882){return _0x1da3(_0x150e4d-0x14a,_0x42b882);}function _0x4f2ca7(_0x4fb0cc,_0xca10ba){return _0x1da3(_0x4fb0cc- -0x103,_0xca10ba);}return new Command(_0x34646a[_0x4f2ca7(0x118,0x10d)])[_0x1a1616(0x340,0x358)+'n'](_0x34646a[_0x1a1616(0x31f,0x328)])[_0x1a1616(0x320,0x312)](_0x1a1616(0x366,0x380),'Memory\x20con'+_0x4f2ca7(0x117,0xe8))[_0x1a1616(0x367,0x350)](_0x4f2ca7(0xe8,0x110)+_0x1a1616(0x370,0x390)+'gory>','Memory\x20cat'+_0x1a1616(0x36a,0x340),_0x4f2ca7(0xd8,0xff))[_0x1a1616(0x367,0x365)](_0x34646a[_0x1a1616(0x361,0x36d)],_0x1a1616(0x369,0x385)+'r',_0x34646a[_0x4f2ca7(0x121,0x126)])[_0x4f2ca7(0x11a,0xf1)](_0x34646a[_0x4f2ca7(0x12c,0x14a)],'Comma-sepa'+_0x1a1616(0x32d,0x307))[_0x1a1616(0x367,0x397)](_0x1a1616(0x33d,0x30d)+_0x4f2ca7(0x116,0xf1),_0x34646a[_0x4f2ca7(0xdf,0xed)])[_0x4f2ca7(0x11a,0xfd)](_0x34646a[_0x4f2ca7(0x108,0x129)],_0x34646a[_0x4f2ca7(0x127,0x115)])[_0x1a1616(0x344,0x35f)]((_0xf1fe08,_0x46c387)=>{function _0x383957(_0x47e272,_0x48d357){return _0x4f2ca7(_0x47e272- -0x156,_0x48d357);}function _0x37266d(_0x20aa05,_0x55004a){return _0x4f2ca7(_0x20aa05- -0x211,_0x55004a);}if(_0x34646a[_0x37266d(-0x114,-0x103)](_0x34646a[_0x383957(-0x69,-0x3b)],_0x37266d(-0x116,-0x112))){const _0x495aa5=new ConfigManager()[_0x383957(-0x80,-0x79)](),_0x2675e7=new MemoryDatabase(_0x495aa5['db'][_0x383957(-0x2e,-0x5b)]);try{if(_0x34646a[_0x37266d(-0x114,-0x121)](_0x34646a['ynPFZ'],_0x383957(-0x2c,-0x52))){_0x2675e7['initialize']();let _0x3298fe;if(_0x46c387[_0x37266d(-0x12a,-0x13b)])_0x3298fe=readFileSync(_0x46c387[_0x383957(-0x6f,-0x95)],_0x383957(-0x87,-0x9f));else _0xf1fe08?_0x3298fe=_0xf1fe08:(console['error'](_0x411cbe[_0x383957(-0x54,-0x4f)](_0x34646a[_0x37266d(-0xec,-0xc4)])),process[_0x37266d(-0x127,-0xfa)](0x1));const _0x2a20a5=_0x46c387['tags']?_0x46c387[_0x37266d(-0xe8,-0xc0)][_0x37266d(-0xe6,-0xe9)](',')[_0x37266d(-0xed,-0xc4)](_0x4a3886=>_0x4a3886['trim']())[_0x37266d(-0xf3,-0xd9)](Boolean):[],_0xf7d949=_0x46c387['category'],_0x3d752a=_0x46c387[_0x37266d(-0x13c,-0x16c)],_0x567e09=_0x495aa5[_0x383957(-0x7f,-0x60)]?.[_0x383957(-0x72,-0x84)]??_0x34646a['YIMgA'],_0x3e4acc=CHUNK_PRESETS[_0x567e09]??CHUNK_PRESETS['local'];if(_0x46c387[_0x37266d(-0x10c,-0x108)]!==![]&&_0x34646a[_0x37266d(-0x10b,-0xe0)](shouldChunk,_0x3298fe,_0x3e4acc)){const _0x55fd52=chunkContent(_0x3298fe,_0x3e4acc),_0x31f400=_0x55fd52['map']((_0x5bda57,_0x311e2d)=>({'content':_0x5bda57,'category':_0xf7d949,'tier':_0x3d752a,'tags':[..._0x2a20a5,_0x37266d(-0x108,-0xe1)+_0x311e2d]})),_0x549cb3=_0x2675e7['createMemo'+_0x37266d(-0x111,-0x104)+'ks']({'content':_0x3298fe,'category':_0xf7d949,'tier':_0x3d752a,'tags':[..._0x2a20a5,_0x34646a[_0x37266d(-0x11b,-0x123)]]},_0x31f400);console[_0x37266d(-0x104,-0xe1)](_0x411cbe[_0x383957(-0x6b,-0x60)](_0x383957(-0x4a,-0x6c)+_0x383957(-0x55,-0x3d)+_0x55fd52['length']+_0x37266d(-0x130,-0x12f))),console[_0x37266d(-0x104,-0xd5)](_0x411cbe[_0x37266d(-0x134,-0x14c)](_0x383957(-0x5e,-0x8c)+'\x20'+_0x549cb3)),console[_0x383957(-0x49,-0x63)](_0x411cbe[_0x383957(-0x79,-0xa6)](_0x383957(-0x85,-0x71)+_0x55fd52[_0x383957(-0x3b,-0x39)])),console[_0x37266d(-0x104,-0x134)](_0x411cbe[_0x37266d(-0x134,-0x15a)](_0x37266d(-0x12b,-0x141)+_0xf7d949));}else{const _0x52fe7f=_0x2675e7[_0x37266d(-0x10d,-0x122)+'ry']({'content':_0x3298fe,'category':_0xf7d949,'tier':_0x3d752a,'tags':_0x2a20a5});console[_0x37266d(-0x104,-0x11e)](_0x411cbe[_0x383957(-0x6b,-0x6e)](_0x34646a[_0x383957(-0x74,-0x77)])),console['log'](_0x411cbe['dim'](_0x383957(-0x61,-0x39)+_0x52fe7f['id'])),console[_0x383957(-0x49,-0x1b)](_0x411cbe['dim'](_0x383957(-0x70,-0x89)+_0x52fe7f[_0x383957(-0x36,-0x30)])),console[_0x37266d(-0x104,-0x10f)](_0x411cbe['dim'](_0x383957(-0x44,-0x74)+(_0x52fe7f[_0x37266d(-0xe8,-0x10b)]['join'](',\x20')||_0x37266d(-0x13d,-0x134))));}}else{const _0x23895d=_0x1ad1b7(_0x2b3ce1,_0x2265bb),_0x4ea718=_0x23895d['map']((_0x51f71e,_0x382e61)=>({'content':_0x51f71e,'category':_0xca5c8,'tier':_0x55e838,'tags':[..._0x2c3734,_0x37266d(-0x108,-0xff)+_0x382e61]})),_0x3e338d=_0x4bda50[_0x37266d(-0x10d,-0x13d)+_0x383957(-0x56,-0x28)+'ks']({'content':_0x13abf8,'category':_0x28186d,'tier':_0x2212af,'tags':[..._0x36cd48,_0x34646a[_0x383957(-0x60,-0x4c)]]},_0x4ea718);_0x12715b[_0x37266d(-0x104,-0xea)](_0x838669['green'](_0x383957(-0x4a,-0x3f)+_0x383957(-0x55,-0x3d)+_0x23895d['length']+_0x37266d(-0x130,-0x12a))),_0x5053b9[_0x37266d(-0x104,-0x112)](_0x52aa66[_0x37266d(-0x134,-0x11c)](_0x37266d(-0x119,-0xf5)+'\x20'+_0x3e338d)),_0xa161a2[_0x383957(-0x49,-0x77)](_0x39ae3f[_0x383957(-0x79,-0x8d)](_0x37266d(-0x140,-0x15c)+_0x23895d['length'])),_0x5b1ce4[_0x37266d(-0x104,-0x12a)](_0x3ecace['dim'](_0x383957(-0x70,-0x60)+_0x321cef));}}catch(_0x5a8467){console[_0x37266d(-0x10a,-0xf4)](_0x411cbe['red'](_0x34646a[_0x383957(-0x65,-0x72)]),_0x5a8467),process['exit'](0x1);}finally{_0x2675e7['close']();}}else{const _0x48efdd=_0x346669['createMemo'+'ry']({'content':_0x29cf1a,'category':_0x9d66de,'tier':_0x48f7e3,'tags':_0x84b310});_0x85ac93[_0x383957(-0x49,-0x20)](_0x28f800['green']('✓\x20Memory\x20a'+_0x383957(-0x29,-0x1b)+'ssfully')),_0x2ac8aa[_0x383957(-0x49,-0x25)](_0x42bc2f[_0x37266d(-0x134,-0x11d)]('ID:\x20'+_0x48efdd['id'])),_0x14541d[_0x37266d(-0x104,-0x10c)](_0x12dbcb[_0x383957(-0x79,-0x7c)](_0x383957(-0x70,-0x89)+_0x48efdd[_0x37266d(-0xf1,-0xc8)])),_0x2de857[_0x383957(-0x49,-0x4e)](_0x2e4314['dim'](_0x383957(-0x44,-0x3d)+(_0x48efdd[_0x383957(-0x2d,-0x4e)]['join'](',\x20')||_0x37266d(-0x13d,-0x166))));}});}
@@ -1,70 +1 @@
1
- /**
2
- * Claude-Sync Command
3
- *
4
- * CLAUDE.md 파일의 내용을 메모리 DB에 동기화합니다.
5
- * - 프로젝트 루트의 CLAUDE.md를 파싱하여 섹션별 메모리 생성
6
- * - 이미 동기화된 내용은 스킵 (mtime + content hash 기반)
7
- * - convention/context 카테고리로 저장
8
- */
9
- import { Command } from 'commander';
10
- import chalk from 'chalk';
11
- import { ConfigManager } from '../../config/manager.js';
12
- import { MemoryDatabase } from '../../db/database.js';
13
- import { syncClaudeMd } from '../../claude/sync.js';
14
- export function claudeSyncCommand() {
15
- const cmd = new Command('claude-sync');
16
- cmd
17
- .description('Sync CLAUDE.md content to memory DB')
18
- .option('-p, --path <path>', 'Path to CLAUDE.md (auto-detect if omitted)')
19
- .option('--dry-run', 'Show what would be synced without writing')
20
- .option('--force', 'Force re-sync even if file unchanged')
21
- .action(async (options) => {
22
- const config = new ConfigManager().load();
23
- const db = new MemoryDatabase(config.db.path);
24
- try {
25
- db.initialize();
26
- const result = await syncClaudeMd(db, {
27
- claudeMdPath: options.path,
28
- dryRun: options.dryRun ?? false,
29
- force: options.force ?? false,
30
- });
31
- printResult(result, options.dryRun);
32
- }
33
- catch (error) {
34
- if (error instanceof Error) {
35
- console.error(chalk.red(`\n❌ 오류: ${error.message}\n`));
36
- }
37
- // TODO: process.exit() → throw + 상위 핸들러로 리팩토링 (P3-3)
38
- process.exit(1);
39
- }
40
- finally {
41
- db.close();
42
- }
43
- });
44
- return cmd;
45
- }
46
- function printResult(result, dryRun) {
47
- if (!result.found) {
48
- console.log(chalk.yellow('\n⚠️ CLAUDE.md 파일을 찾을 수 없습니다.\n'));
49
- console.log(chalk.dim(' 프로젝트 루트에 CLAUDE.md를 생성하거나'));
50
- console.log(chalk.dim(' --path 옵션으로 경로를 지정하세요.\n'));
51
- return;
52
- }
53
- const prefix = dryRun ? chalk.cyan('[DRY RUN] ') : '';
54
- console.log(chalk.bold(`\n${prefix}📋 CLAUDE.md 동기화 결과\n`));
55
- console.log(`${chalk.dim('파일:')} ${result.filePath}`);
56
- console.log(`${chalk.dim('섹션 수:')} ${result.totalSections}`);
57
- console.log(`${chalk.dim('새로 추가:')} ${chalk.green(result.created.toString())}개`);
58
- console.log(`${chalk.dim('업데이트:')} ${chalk.yellow(result.updated.toString())}개`);
59
- console.log(`${chalk.dim('스킵 (변경없음):')} ${chalk.dim(result.skipped.toString())}개`);
60
- if (result.sections.length > 0) {
61
- console.log(chalk.dim('\n섹션 상세:'));
62
- for (const section of result.sections) {
63
- const icon = section.action === 'created' ? '✅' :
64
- section.action === 'updated' ? '🔄' : '⏭️';
65
- console.log(` ${icon} ${chalk.dim(`[${section.category}]`)} ${section.title}`);
66
- }
67
- }
68
- console.log();
69
- }
70
- //# sourceMappingURL=claude-sync.js.map
1
+ function _0x48d5(_0x158624,_0x380585){_0x158624=_0x158624-0x172;const _0x58b8bb=_0x58b8();let _0x48d5f7=_0x58b8bb[_0x158624];if(_0x48d5['ZElMcL']===undefined){var _0x551be6=function(_0x567fc9){const _0x2ab92b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x37ecd4='',_0x5ab87c='';for(let _0x19bed9=0x0,_0x3ad975,_0x35b8b6,_0x42e346=0x0;_0x35b8b6=_0x567fc9['charAt'](_0x42e346++);~_0x35b8b6&&(_0x3ad975=_0x19bed9%0x4?_0x3ad975*0x40+_0x35b8b6:_0x35b8b6,_0x19bed9++%0x4)?_0x37ecd4+=String['fromCharCode'](0xff&_0x3ad975>>(-0x2*_0x19bed9&0x6)):0x0){_0x35b8b6=_0x2ab92b['indexOf'](_0x35b8b6);}for(let _0x4aaf68=0x0,_0x30f4d7=_0x37ecd4['length'];_0x4aaf68<_0x30f4d7;_0x4aaf68++){_0x5ab87c+='%'+('00'+_0x37ecd4['charCodeAt'](_0x4aaf68)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5ab87c);};_0x48d5['EJPXrq']=_0x551be6,_0x48d5['wIMKta']={},_0x48d5['ZElMcL']=!![];}const _0x773787=_0x58b8bb[0x0],_0x327809=_0x158624+_0x773787,_0x2bf5b2=_0x48d5['wIMKta'][_0x327809];return!_0x2bf5b2?(_0x48d5f7=_0x48d5['EJPXrq'](_0x48d5f7),_0x48d5['wIMKta'][_0x327809]=_0x48d5f7):_0x48d5f7=_0x2bf5b2,_0x48d5f7;}(function(_0x5d4050,_0x28ed55){function _0x3486f8(_0x5ebe03,_0x1148fe){return _0x48d5(_0x5ebe03- -0x289,_0x1148fe);}function _0x54f0c2(_0x349544,_0x4f37b9){return _0x48d5(_0x4f37b9- -0x99,_0x349544);}const _0x40b1c1=_0x5d4050();while(!![]){try{const _0x116045=-parseInt(_0x54f0c2(0xf0,0x103))/0x1+parseInt(_0x54f0c2(0x123,0x122))/0x2*(parseInt(_0x54f0c2(0x119,0x10d))/0x3)+parseInt(_0x54f0c2(0x10f,0x102))/0x4*(-parseInt(_0x3486f8(-0xd4,-0xe9))/0x5)+parseInt(_0x3486f8(-0xcf,-0xb1))/0x6*(-parseInt(_0x3486f8(-0xe2,-0xf1))/0x7)+-parseInt(_0x3486f8(-0xdf,-0xbb))/0x8+-parseInt(_0x3486f8(-0x107,-0x11c))/0x9+parseInt(_0x54f0c2(0x11c,0x109))/0xa*(parseInt(_0x3486f8(-0x116,-0xfe))/0xb);if(_0x116045===_0x28ed55)break;else _0x40b1c1['push'](_0x40b1c1['shift']());}catch(_0x377d98){_0x40b1c1['push'](_0x40b1c1['shift']());}}}(_0x58b8,0xa915d));import{Command}from'commander';import _0xb065ee from'chalk';function _0x58b8(){const _0x395e38=['ntK3nMngEKPqvW','ntuZmti2v3nwzeXb','zxjYB3i','u2zqs2q','icaTlxbHDgGG7jI1','zM91BMq','y3LHBG','yM9Sza','mtK4CKXItuTP','idXWyxrOpG','DgL0Bgu','7jEf642W7j207yQ4oG','ywn0Aw9U','66w8ioYdNEYeSE2vMoQXSoUcMa','Bxv1ELi','ls1KCNKTCNvU','EgznDwC','DxbKyxrLza','7ioi66gCioY2LoQWGdO','u3LUyYbdtefvra','AgfUz2vK','B25Z','cUYeUEYfMcdSG4hSHlG6','mZyZmdC4mhPfvxLsvW','zhj5uNvU','AuzZDfG','y2XHDwrLlxn5BG','7iwy7jY866gCioQYVEUHNoULVcdSP4dSOju','CMvK','lxaSic0TCgf0Aa','Cgf0Aa','Ew5Jigv2zw4GAq','BwvZC2fNzq','zMLSzvbHDgG','Aw5PDgLHBgL6zq','uLPdtKW','uwr0rhy','zgLT','7is57iwyioYiMdO','D2nIywq','rxzVuuW','zgvZy3jPChrPBW','D291BgqGyMuGCW','y2f0zwDVCNK','Dg9tDhjPBMC','C2vJDgLVBNm','vxfLuLq','Ew5JzwqGD2L0Aa','mJy0ntjpwhjlz1K','mte3oty0ne1AC2LprG','Bg9N','Dg90ywXtzwn0Aq','7zwy7is47jQulGO','BgvUz3rO','rs5TzcbJB250zq','mtyYnZu5mg9PzxDzAa','7yYm7j28oG','cUkDJcdSMktRPzG6ia','zIbMAwXLihvUyW','mtvdEgLyy3m','mJCZn2T6C0fisG','ANvYAMi','Bg9Hza','otmXnZi0mffpChf5rq','tK50sgC','CNKGrei','BNqGDg8GBwvTBW','qvvers5TzcaOyq','y3jLyxrLza','B3b0Aw9U','zM9Yy2u','zcdRJ5NQUldTMzqG6RkW6Ro8cG','cUkAOo+4JYaGq0Xbvurf','vfL4uwK','mZy1Eg1zvKXH','7iQK7yk1icJRS4dQSR3SL4BSNyWPoG','icdTLitROzZSOj3TIRGG66oO7yQ47jEq','EwvSBg93','ioYiMcdSL4BSIRxRI4JRI6qUcG'];_0x58b8=function(){return _0x395e38;};return _0x58b8();}import{ConfigManager}from'../../config/manager.js';import{MemoryDatabase}from'../../db/database.js';import{syncClaudeMd}from'../../claude/sync.js';export function claudeSyncCommand(){const _0x46a9f7={'muuzR':function(_0x4226d5,_0x1138dd,_0x938da5){return _0x4226d5(_0x1138dd,_0x938da5);},'TYxQi':function(_0x401fcd,_0x1b35b9){return _0x401fcd instanceof _0x1b35b9;},'xfMug':_0x3c9c96(-0x1f1,-0x1d0)+_0x73a1f4(0x4e5,0x501)+_0x3c9c96(-0x17a,-0x1a1)+_0x73a1f4(0x530,0x50c),'NNtHg':_0x3c9c96(-0x1e4,-0x1c6)+_0x3c9c96(-0x1e0,-0x1da),'YXXKK':'Path\x20to\x20CL'+_0x3c9c96(-0x1b3,-0x1a0)+'uto-detect'+'\x20if\x20omitte'+'d)','EvoQL':'Show\x20what\x20'+_0x73a1f4(0x4ed,0x4f5)+_0x73a1f4(0x4f0,0x4fa)+'out\x20writin'+'g','wcbad':'--force'},_0x512025=new Command(_0x3c9c96(-0x1ef,-0x1c9)+'c');_0x512025[_0x3c9c96(-0x1de,-0x1ba)+'n'](_0x46a9f7[_0x73a1f4(0x4e3,0x4db)])['option'](_0x46a9f7[_0x73a1f4(0x52e,0x50b)],_0x46a9f7['YXXKK'])[_0x73a1f4(0x51e,0x510)](_0x3c9c96(-0x1de,-0x1d4),_0x46a9f7[_0x73a1f4(0x4e1,0x4f3)])['option'](_0x46a9f7[_0x73a1f4(0x503,0x4f2)],'Force\x20re-s'+_0x3c9c96(-0x1d2,-0x1c4)+_0x73a1f4(0x4dd,0x505)+_0x3c9c96(-0x1df,-0x1cf))[_0x73a1f4(0x4fc,0x4d7)](async _0x13ac2f=>{function _0x21faf6(_0x212834,_0x2bb27e){return _0x73a1f4(_0x2bb27e,_0x212834-0x27);}const _0x3a569f=new ConfigManager()[_0x4810f1(0x3a3,0x3b7)](),_0x3f8813=new MemoryDatabase(_0x3a569f['db']['path']);function _0x4810f1(_0x4b5ac4,_0x5ae9fa){return _0x73a1f4(_0x4b5ac4,_0x5ae9fa- -0x152);}try{_0x3f8813[_0x21faf6(0x514,0x52b)]();const _0x278b7c=await _0x46a9f7[_0x21faf6(0x500,0x50b)](syncClaudeMd,_0x3f8813,{'claudeMdPath':_0x13ac2f[_0x21faf6(0x510,0x4ff)],'dryRun':_0x13ac2f[_0x21faf6(0x50a,0x523)]??![],'force':_0x13ac2f[_0x21faf6(0x538,0x54c)]??![]});printResult(_0x278b7c,_0x13ac2f[_0x4810f1(0x391,0x391)]);}catch(_0x386d82){_0x46a9f7[_0x4810f1(0x3ac,0x3c2)](_0x386d82,Error)&&console[_0x21faf6(0x543,0x542)](_0xb065ee[_0x21faf6(0x50e,0x531)](_0x21faf6(0x52b,0x529)+_0x386d82[_0x21faf6(0x512,0x4eb)]+'\x0a')),process['exit'](0x1);}finally{_0x3f8813['close']();}});function _0x3c9c96(_0x2b155e,_0x5acc5d){return _0x48d5(_0x5acc5d- -0x34e,_0x2b155e);}function _0x73a1f4(_0x5dfdb2,_0x2c41c2){return _0x48d5(_0x2c41c2-0x360,_0x5dfdb2);}return _0x512025;}function printResult(_0x42a736,_0x4ca87c){const _0x1a63f3={'SfPKd':_0x2b0a5d(0x16a,0x184)+'.md\x20파일을\x20찾을'+_0x2b0a5d(0x170,0x15b),'iFstX':_0x3fc943(0x1e8,0x1ff)+'\x20CLAUDE.md'+_0x3fc943(0x1c7,0x1c0),'ifOQA':'[DRY\x20RUN]\x20','RZCNL':_0x2b0a5d(0x134,0x158),'jurjb':_0x2b0a5d(0x12d,0x150),'UqeRT':function(_0x21bbda,_0x547fbb){return _0x21bbda>_0x547fbb;},'QdtDv':_0x2b0a5d(0x138,0x15c)};if(!_0x42a736[_0x2b0a5d(0x176,0x175)]){console['log'](_0xb065ee[_0x2b0a5d(0x16f,0x172)](_0x1a63f3[_0x2b0a5d(0x174,0x16c)])),console[_0x3fc943(0x1c6,0x1e5)](_0xb065ee[_0x3fc943(0x1f0,0x1d8)](_0x1a63f3[_0x3fc943(0x1ba,0x1cc)])),console[_0x3fc943(0x1c7,0x1e5)](_0xb065ee[_0x3fc943(0x1bf,0x1d8)](_0x3fc943(0x1eb,0x206)+_0x3fc943(0x1e8,0x1ce)+_0x2b0a5d(0x156,0x17a)));return;}const _0x39a8c5=_0x4ca87c?_0xb065ee[_0x2b0a5d(0x177,0x16b)](_0x1a63f3['ifOQA']):'';console[_0x3fc943(0x1f7,0x1e5)](_0xb065ee[_0x3fc943(0x19b,0x1ba)]('\x0a'+_0x39a8c5+('📋\x20CLAUDE.m'+_0x3fc943(0x218,0x1fa)))),console[_0x2b0a5d(0x154,0x15e)](_0xb065ee[_0x3fc943(0x1d3,0x1d8)](_0x2b0a5d(0x15a,0x141))+'\x20'+_0x42a736[_0x2b0a5d(0x143,0x15b)]),console['log'](_0xb065ee[_0x3fc943(0x1ff,0x1d8)](_0x3fc943(0x1bd,0x1d9))+'\x20'+_0x42a736[_0x2b0a5d(0x155,0x15a)+_0x3fc943(0x1c7,0x1c8)]),console[_0x2b0a5d(0x154,0x162)](_0xb065ee[_0x3fc943(0x1b0,0x1d8)](_0x1a63f3[_0x3fc943(0x1f8,0x1d6)])+'\x20'+_0xb065ee['green'](_0x42a736['created'][_0x2b0a5d(0x14e,0x12f)]())+'개');function _0x3fc943(_0x3d7560,_0x2a12bf){return _0x48d5(_0x2a12bf-0x48,_0x3d7560);}function _0x2b0a5d(_0x1042dd,_0x1f6a04){return _0x48d5(_0x1042dd- -0x49,_0x1f6a04);}console['log'](_0xb065ee[_0x3fc943(0x1f1,0x1d8)](_0x1a63f3[_0x3fc943(0x1f8,0x1f0)])+'\x20'+_0xb065ee[_0x2b0a5d(0x16f,0x17e)](_0x42a736[_0x2b0a5d(0x133,0x129)]['toString']())+'개'),console[_0x2b0a5d(0x154,0x148)](_0xb065ee['dim'](_0x2b0a5d(0x16d,0x193))+'\x20'+_0xb065ee[_0x2b0a5d(0x147,0x14b)](_0x42a736['skipped'][_0x2b0a5d(0x14e,0x147)]())+'개');if(_0x1a63f3[_0x2b0a5d(0x150,0x133)](_0x42a736[_0x3fc943(0x1b8,0x1e0)][_0x2b0a5d(0x157,0x14a)],0x0)){console['log'](_0xb065ee[_0x3fc943(0x1db,0x1d8)](_0x1a63f3[_0x3fc943(0x1e0,0x1d7)]));for(const _0xb3bdc1 of _0x42a736[_0x2b0a5d(0x14f,0x142)]){const _0x1d3c52=_0xb3bdc1['action']===_0x2b0a5d(0x166,0x18e)?'✅':_0xb3bdc1[_0x3fc943(0x1e4,0x1bf)]===_0x3fc943(0x1c4,0x1c4)?'🔄':'⏭️';console[_0x2b0a5d(0x154,0x15a)]('\x20\x20'+_0x1d3c52+'\x20'+_0xb065ee[_0x3fc943(0x1f2,0x1d8)]('['+_0xb3bdc1[_0x3fc943(0x1eb,0x1de)]+']')+'\x20'+_0xb3bdc1[_0x3fc943(0x1ac,0x1bd)]);}}console[_0x3fc943(0x1ea,0x1e5)]();}