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,183 +1 @@
1
- /**
2
- * Migrate-File-Refs Command
3
- *
4
- * 기존 메모리의 .md 파일 참조를 감지하고 원격 Storage에 업로드 + 연결합니다.
5
- *
6
- * 동작:
7
- * 1. 로컬 DB에서 synced 상태인 메모리 전체 스캔
8
- * 2. content에서 .md 파일 참조 감지
9
- * 3. 파일 해시 기반 중복 확인
10
- * 4. 미업로드 파일 → Storage 업로드
11
- * 5. memory_files 연결 생성 (remote ID 사용)
12
- */
13
- import { Command } from 'commander';
14
- import chalk from 'chalk';
15
- import { createHash } from 'node:crypto';
16
- import { readFileSync } from 'node:fs';
17
- import { resolve } from 'node:path';
18
- import { ConfigManager } from '../../config/manager.js';
19
- import { MemoryDatabase } from '../../db/database.js';
20
- import { A2AClient } from '../../sync/client.js';
21
- import { detectMdReferences } from '../../extraction/file-reference.js';
22
- export function migrateFileRefsCommand() {
23
- const cmd = new Command('migrate-file-refs');
24
- cmd
25
- .description('기존 메모리의 .md 파일 참조를 원격 Storage에 업로드하고 연결합니다')
26
- .option('--dry-run', '실제 업로드 없이 감지된 참조만 표시', false)
27
- .option('--limit <number>', '처리할 최대 메모리 수', '10000')
28
- .option('--project <path>', '프로젝트 경로 (파일 참조 해석 기준)')
29
- .action(async (options) => {
30
- const config = new ConfigManager().load();
31
- if (!config.server?.apiKey || !config.server?.url) {
32
- console.error(chalk.red('✗ 서버 설정이 필요합니다 (server.url, server.apiKey)'));
33
- process.exit(1);
34
- }
35
- const projectPath = options.project || process.cwd();
36
- const limit = parseInt(options.limit, 10);
37
- console.log(chalk.blue('📂 메모리-파일 참조 마이그레이션'));
38
- console.log(` 프로젝트: ${projectPath}`);
39
- console.log(` 최대 처리: ${limit}`);
40
- console.log(` 모드: ${options.dryRun ? 'DRY RUN' : 'LIVE'}`);
41
- console.log();
42
- const db = new MemoryDatabase(config.db.path);
43
- const client = new A2AClient({
44
- baseUrl: config.server.url,
45
- apiKey: config.server.apiKey,
46
- timeout: 30000,
47
- });
48
- // 연결 테스트
49
- const connected = await client.testConnection();
50
- if (!connected) {
51
- console.error(chalk.red('✗ 서버 연결 실패'));
52
- process.exit(1);
53
- }
54
- // 전체 메모리 스캔 (synced 상태만)
55
- const allMemories = db.listMemories({ limit });
56
- console.log(`📊 전체 메모리: ${allMemories.length}개`);
57
- // 카테고리 우선순위 (높을수록 먼저 처리)
58
- const CATEGORY_PRIORITY = {
59
- skill: 10,
60
- project_knowledge: 9,
61
- decision: 8,
62
- convention: 7,
63
- learning: 6,
64
- error_solution: 5,
65
- code_pattern: 4,
66
- context: 3,
67
- };
68
- // 파일 참조가 있는 메모리 필터링
69
- const memoriesWithRefs = [];
70
- let skippedNoRemote = 0;
71
- for (const memory of allMemories) {
72
- const syncStatus = db.getSyncStatus(memory.id);
73
- if (!syncStatus?.remoteId) {
74
- const refs = detectMdReferences(memory.content, projectPath);
75
- if (refs.length > 0)
76
- skippedNoRemote++;
77
- continue;
78
- }
79
- const refs = detectMdReferences(memory.content, projectPath);
80
- if (refs.length > 0) {
81
- memoriesWithRefs.push({
82
- memory,
83
- remoteId: syncStatus.remoteId,
84
- refs,
85
- });
86
- }
87
- }
88
- console.log(`🔗 .md 참조 포함 메모리: ${memoriesWithRefs.length}개 (미동기화 스킵: ${skippedNoRemote}개)`);
89
- // 카테고리별 정렬 (우선순위 높은 것부터)
90
- memoriesWithRefs.sort((a, b) => {
91
- const pa = CATEGORY_PRIORITY[a.memory.category] ?? 0;
92
- const pb = CATEGORY_PRIORITY[b.memory.category] ?? 0;
93
- return pb - pa;
94
- });
95
- // 카테고리별 통계
96
- const catStats = new Map();
97
- for (const { memory } of memoriesWithRefs) {
98
- catStats.set(memory.category, (catStats.get(memory.category) ?? 0) + 1);
99
- }
100
- console.log(`📊 카테고리별: ${[...catStats.entries()].sort((a, b) => (CATEGORY_PRIORITY[b[0]] ?? 0) - (CATEGORY_PRIORITY[a[0]] ?? 0)).map(([k, v]) => `${k}(${v})`).join(', ')}`);
101
- // 고유 파일 수집
102
- const uniqueFiles = new Set();
103
- for (const { refs } of memoriesWithRefs) {
104
- for (const ref of refs)
105
- uniqueFiles.add(ref);
106
- }
107
- console.log(`📄 고유 .md 파일: ${uniqueFiles.size}개`);
108
- console.log();
109
- if (memoriesWithRefs.length === 0) {
110
- console.log(chalk.green('✓ 처리할 참조가 없습니다.'));
111
- return;
112
- }
113
- // 파일별 상세 출력 (상위 20개만)
114
- const fileRefCounts = [...uniqueFiles].map(f => ({
115
- path: f,
116
- count: memoriesWithRefs.filter(m => m.refs.includes(f)).length,
117
- })).sort((a, b) => b.count - a.count);
118
- for (const { path: filePath, count } of fileRefCounts.slice(0, 20)) {
119
- console.log(` ${chalk.cyan(filePath)} — ${count}개 메모리에서 참조`);
120
- }
121
- if (fileRefCounts.length > 20) {
122
- console.log(` ... 외 ${fileRefCounts.length - 20}개`);
123
- }
124
- console.log();
125
- if (options.dryRun) {
126
- console.log(chalk.yellow('🔍 DRY RUN 완료. --dry-run 없이 실행하면 실제 업로드됩니다.'));
127
- return;
128
- }
129
- // 실제 업로드 + 연결
130
- const uploadedFiles = new Map(); // hash → fileId
131
- let linkedCount = 0;
132
- let errorCount = 0;
133
- for (const { remoteId, refs } of memoriesWithRefs) {
134
- for (const refPath of refs) {
135
- try {
136
- const fullPath = resolve(projectPath, refPath);
137
- const content = readFileSync(fullPath);
138
- const hash = createHash('sha256').update(content).digest('hex');
139
- let fileId = uploadedFiles.get(hash);
140
- if (!fileId) {
141
- const dup = await client.checkFileDuplicate(hash);
142
- if (dup.exists && dup.file_id) {
143
- fileId = dup.file_id;
144
- console.log(` ${chalk.gray('↩')} ${refPath} — 이미 업로드됨`);
145
- }
146
- else {
147
- const result = await client.uploadFile(fullPath, {
148
- category: 'reference',
149
- tags: ['memory-reference', 'md-document'],
150
- });
151
- fileId = result.id;
152
- console.log(` ${chalk.green('↑')} ${refPath} — 업로드 완료`);
153
- }
154
- uploadedFiles.set(hash, fileId);
155
- }
156
- await client.createMemoryFileLink(remoteId, fileId, {
157
- reference_type: 'cited',
158
- reference_path: refPath,
159
- });
160
- linkedCount++;
161
- }
162
- catch (err) {
163
- const msg = err instanceof Error ? err.message : String(err);
164
- // 409 Conflict는 정상 (이미 연결됨)
165
- if (msg.includes('409') || msg.includes('already exists')) {
166
- continue;
167
- }
168
- errorCount++;
169
- console.error(` ${chalk.red('✗')} ${refPath}: ${msg}`);
170
- }
171
- }
172
- }
173
- console.log();
174
- console.log(chalk.green(`✓ 마이그레이션 완료`));
175
- console.log(` 업로드된 파일: ${uploadedFiles.size}개`);
176
- console.log(` 생성된 연결: ${linkedCount}개`);
177
- if (errorCount > 0) {
178
- console.log(` ${chalk.red(`에러: ${errorCount}건`)}`);
179
- }
180
- });
181
- return cmd;
182
- }
183
- //# sourceMappingURL=migrate-file-refs.js.map
1
+ (function(_0x1fd010,_0x19d6f9){const _0x7069cc=_0x1fd010();function _0x469f85(_0x58578e,_0x187e43){return _0x46b9(_0x58578e-0x1f1,_0x187e43);}function _0x2ac04c(_0x8a04b9,_0x264295){return _0x46b9(_0x264295- -0x181,_0x8a04b9);}while(!![]){try{const _0x21040a=parseInt(_0x469f85(0x410,0x3e0))/0x1*(-parseInt(_0x469f85(0x3cf,0x3f9))/0x2)+parseInt(_0x469f85(0x3e8,0x40e))/0x3*(-parseInt(_0x469f85(0x40a,0x3eb))/0x4)+parseInt(_0x469f85(0x3e3,0x3e1))/0x5*(parseInt(_0x469f85(0x3d7,0x3f3))/0x6)+parseInt(_0x2ac04c(0x5a,0x2f))/0x7+parseInt(_0x469f85(0x3ad,0x3d7))/0x8*(-parseInt(_0x2ac04c(0xc9,0x9b))/0x9)+parseInt(_0x2ac04c(0x3f,0x59))/0xa*(-parseInt(_0x469f85(0x39e,0x3aa))/0xb)+-parseInt(_0x2ac04c(0x8a,0x6f))/0xc*(-parseInt(_0x2ac04c(0x45,0x33))/0xd);if(_0x21040a===_0x19d6f9)break;else _0x7069cc['push'](_0x7069cc['shift']());}catch(_0x4cc06b){_0x7069cc['push'](_0x7069cc['shift']());}}}(_0xff4e,0x4f9f4));import{Command}from'commander';import _0x3503bc from'chalk';function _0x46b9(_0x181652,_0x2cb705){_0x181652=_0x181652-0x1a4;const _0xff4ec7=_0xff4e();let _0x46b9bf=_0xff4ec7[_0x181652];if(_0x46b9['Fllzfo']===undefined){var _0x324d0e=function(_0x417004){const _0x30b831='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x13e6b2='',_0x593abc='';for(let _0x179e03=0x0,_0x1c3e0c,_0x138715,_0x45b984=0x0;_0x138715=_0x417004['charAt'](_0x45b984++);~_0x138715&&(_0x1c3e0c=_0x179e03%0x4?_0x1c3e0c*0x40+_0x138715:_0x138715,_0x179e03++%0x4)?_0x13e6b2+=String['fromCharCode'](0xff&_0x1c3e0c>>(-0x2*_0x179e03&0x6)):0x0){_0x138715=_0x30b831['indexOf'](_0x138715);}for(let _0x21ad54=0x0,_0x69c920=_0x13e6b2['length'];_0x21ad54<_0x69c920;_0x21ad54++){_0x593abc+='%'+('00'+_0x13e6b2['charCodeAt'](_0x21ad54)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x593abc);};_0x46b9['ECBKxW']=_0x324d0e,_0x46b9['voUJTa']={},_0x46b9['Fllzfo']=!![];}const _0x2117c1=_0xff4ec7[0x0],_0x53fcbd=_0x181652+_0x2117c1,_0x1021b0=_0x46b9['voUJTa'][_0x53fcbd];return!_0x1021b0?(_0x46b9bf=_0x46b9['ECBKxW'](_0x46b9bf),_0x46b9['voUJTa'][_0x53fcbd]=_0x46b9bf):_0x46b9bf=_0x1021b0,_0x46b9bf;}import{createHash}from'node:crypto';import{readFileSync}from'node:fs';import{resolve}from'node:path';import{ConfigManager}from'../../config/manager.js';import{MemoryDatabase}from'../../db/database.js';function _0xff4e(){const _0x3d5e36=['4PYtioYYMoUMRo2vOcdSSlJSOBdQSiaG','6Rcq7kEa65cCioYWUoYHSoUNJcdTKzZSI5W','Axn0CW','y2L0zwq','vLLZEMi','zgvZy3jPChrPBW','icdSG53SHlhRKjWG7jEW6RkWoIa','DxbSB2fKrMLSzq','Dw1Izxi+','wuHcCxm','DvfHCwi','nJeXnNfzDg9yAa','7jEq65+SoIa','BgLTAxq','nJC4ndyXsK9HwuTH','sxfzqvu','mtaWmda','Ehnevg0','mZi1u1jcvNjO','yxbPs2v5','wvjrwhO','yNjysKi','zxjLBMnL','BgLZDe1LBw9YAq','CNLgAwXLtgLUAW','AM9PBG','mtGXnMLpqLbnrG','r3z2ywG','6RkPifn0B3jHz2xSL5a','BwfW','BwvTB3j5','7lky66AS7zwGioY1NoUmGcdRQztRQQJRPQW','rfjzifjvtG','CMvTB3rLswq','uefxz3q','yMX1zq','EhjVB2i','zxHPC3rZ','y3jLyxrLtwvTBW','4PYtioUNIoYDToQ3UoUGIoYDToYfMcdSMyq','BxLPuvu','C29YDa','BK16zvi','AeXdzgm','DgLVBG','BwLNCMf0zs1MAq','C1HZy2q','DgvZDenVBM5LyW','ywrK','z2v0','AeTtvgm','Cg1ttxm','zhj5uNvU','phbHDgG+','Bg9N','teLwrq','otq5mhvYBKz2ra','zw50CMLLCW','ls1KCNKTCNvU','zxjYB3i','nKziuvrlua','sLvcrvK','BKvcEvG','y3LHBG','7jMe66omlIaTlwrYEs0','y2HLy2TgAwXLra','4PYxioYeNoUYHcdSHktSOjxSNBqG7zwe','7iUK7kcCioYxHEUHNoUtNcdSL4BSNBqG','mtK4mdzMCNPWwvC','DhvZ','ugfPrKi','y3zxuwS','DxjS','ChjVAMvJDa','CMvK','svHYzMe','uM5HDMW','8j+tHcdQS6dSNkaGlM1Kio2mJa','nJuXotaWruHUDwLL','6RcCicJRR7JRJ5NQUldTMzqG7iQK7yk1','mtvnBNnorwy','CMvMCW','C2vYDMvY','6RcCioUPLoUQQoUMRoYxKoYeNcdSSlJSOBa','BwqTzg9JDw1LBG','ndG1otfStfPRs1a','DxbSAwnHDgu','EwvSBg93','zcdTJiZSNBWG7lc47kgW66w8ioYBKa','uurpsKK','EfPNCg4','CMvMzxjLBMnL','Aw5JBhvKzxm','iokaLcdSL4xROzZRK5WG7jMe66om','4PYxioYeNoUYHcdSL7dQSRaG7iUK7yYO','zxiUDxjSlcbZzq','z3jLzw4','zMLSzv9Pza','y3DK','BgvUz3rO','y2f0zwDVCNK','ioYxHEUHNoUtNo2vMoQZOcdSL7dQSRdTLAK','8j+tIIdSUBtTHyZQS6dRPQZRS4q6ia','icaUlI4G7jM4ia','y29UDgvUDa','qNfmwxa','DxbKyxrL','C2HHmJu2','Cgf0Aa','7zwOioUPLoUQQoUMRdOG','svjuuMG','iokaLcdSNBtRR7GG7jEf66gC65oC65cO','zgLNzxn0','ww1qz00','icdSTzZRJiaG7lky66ASoIa','8j+uJsbeuLKGuLvoia','C2L6zq','8j+uLYaUBwqG7lc47kgWio2pRa','BguTCMvMCW','neHhqM9iAW','y291BNq','zhv0EuS','mZC1m0z1q1jPEq','C2v0','B3b0Aw9U','mty2nZCZAuzuz3Dy'];_0xff4e=function(){return _0x3d5e36;};return _0xff4e();}import{A2AClient}from'../../sync/client.js';import{detectMdReferences}from'../../extraction/file-reference.js';export function migrateFileRefsCommand(){const _0x1eb91e={'sXscd':function(_0x2d3bf9,_0x57e3d8){return _0x2d3bf9-_0x57e3d8;},'hLCdc':function(_0x1f8b17,_0x3c23cf){return _0x1f8b17-_0x3c23cf;},'YmPgM':function(_0x38d922,_0x2cb09f){return _0x38d922!==_0x2cb09f;},'LYoQJ':_0x3fe7a5(-0x19,0x18),'xroob':_0x3fe7a5(-0xe,0x11),'IRTRh':function(_0x500d99,_0x38376d,_0x19e36c){return _0x500d99(_0x38376d,_0x19e36c);},'QDOJI':function(_0x136370,_0x132d55){return _0x136370>_0x132d55;},'PAWgt':function(_0x25cebf,_0x178b2d){return _0x25cebf!==_0x178b2d;},'PaiFB':function(_0x2315a6,_0x26e047){return _0x2315a6+_0x26e047;},'brXJB':'oWWxJ','nEByX':function(_0x46fef4,_0x434dde){return _0x46fef4===_0x434dde;},'IXrfa':function(_0x496966,_0x58ced2){return _0x496966>_0x58ced2;},'Gvvah':function(_0x34e1e3,_0x11d222){return _0x34e1e3(_0x11d222);},'TFdRZ':'sIrOt','cvWQk':_0x3fe7a5(0x1a,0x58),'jAuyt':_0x5e6b3c(0x4a6,0x4b3)+'t','uQaqb':'409','Rnavl':function(_0x267ce0,_0x5a615f){return _0x267ce0!==_0x5a615f;},'xsDTm':_0x5e6b3c(0x4cb,0x4f7),'nFUMA':_0x5e6b3c(0x484,0x45c),'YGkep':'기존\x20메모리의\x20.m'+_0x5e6b3c(0x4aa,0x4d4)+_0x5e6b3c(0x46e,0x440)+_0x5e6b3c(0x4b7,0x4b7)+'니다','xZgpn':_0x5e6b3c(0x471,0x478)+'\x20수','JUBEY':_0x3fe7a5(-0x31,0xe),'UDKTf':'프로젝트\x20경로\x20(파'+'일\x20참조\x20해석\x20기준'+')'};function _0x5e6b3c(_0x466699,_0x5effa9){return _0x46b9(_0x466699-0x2b0,_0x5effa9);}const _0x3602bd=new Command(_0x3fe7a5(-0x14,-0x18)+_0x5e6b3c(0x4c8,0x49e));function _0x3fe7a5(_0x1473e6,_0xdb4eba){return _0x46b9(_0x1473e6- -0x1e3,_0xdb4eba);}return _0x3602bd[_0x3fe7a5(-0x3c,-0x1)+'n'](_0x1eb91e['YGkep'])[_0x3fe7a5(0x3b,0x1e)](_0x5e6b3c(0x48c,0x4b0),_0x3fe7a5(0x2,0x11)+_0x5e6b3c(0x4d1,0x4b6),![])[_0x5e6b3c(0x4ce,0x4c3)]('--limit\x20<n'+_0x5e6b3c(0x45a,0x48a),_0x1eb91e[_0x5e6b3c(0x4ac,0x498)],_0x1eb91e[_0x5e6b3c(0x48f,0x4ba)])['option']('--project\x20'+_0x3fe7a5(-0xc,-0x1c),_0x1eb91e['UDKTf'])['action'](async _0x449e28=>{const _0x4046af={'nMzeR':function(_0x393f90,_0x24734b){function _0x407278(_0x19fa83,_0x3e5812){return _0x46b9(_0x3e5812-0x20b,_0x19fa83);}return _0x1eb91e[_0x407278(0x3a3,0x3d8)](_0x393f90,_0x24734b);},'VYszb':function(_0x5d1bd9,_0x265687){function _0x3600c0(_0x3e8fd3,_0x29ae8c){return _0x46b9(_0x3e8fd3- -0x30,_0x29ae8c);}return _0x1eb91e[_0x3600c0(0x1e3,0x214)](_0x5d1bd9,_0x265687);},'slJIM':'xcnVi'},_0x345a9b=new ConfigManager()['load']();(!_0x345a9b[_0x3e906f(0x477,0x443)]?.['apiKey']||!_0x345a9b[_0x59d989(-0x8a,-0x6d)]?.[_0x59d989(-0x39,-0x77)])&&(console['error'](_0x3503bc[_0x3e906f(0x467,0x43b)](_0x3e906f(0x423,0x433)+'요합니다\x20(serv'+_0x3e906f(0x487,0x450)+'rver.apiKe'+'y)')),process['exit'](0x1));const _0x5d8558=_0x449e28[_0x3e906f(0x412,0x43a)]||process[_0x59d989(-0x75,-0x5d)](),_0x1c17b9=parseInt(_0x449e28[_0x3e906f(0x421,0x3fe)],0xa);console['log'](_0x3503bc[_0x3e906f(0x3db,0x414)]('📂\x20메모리-파일\x20참'+'조\x20마이그레이션')),console['log']('\x20\x20프로젝트:\x20'+_0x5d8558),console[_0x3e906f(0x435,0x427)](_0x3e906f(0x460,0x463)+_0x1c17b9);function _0x59d989(_0x484d22,_0x290327){return _0x3fe7a5(_0x290327- -0x7e,_0x484d22);}console[_0x59d989(-0x9b,-0x89)]('\x20\x20모드:\x20'+(_0x449e28[_0x59d989(-0x50,-0x8b)]?_0x3e906f(0x43f,0x411):_0x59d989(-0x90,-0x88))),console['log']();const _0x3aa810=new MemoryDatabase(_0x345a9b['db'][_0x59d989(-0x20,-0x53)]),_0xf5ca96=new A2AClient({'baseUrl':_0x345a9b[_0x3e906f(0x465,0x443)][_0x3e906f(0x468,0x439)],'apiKey':_0x345a9b[_0x3e906f(0x453,0x443)][_0x59d989(-0x9b,-0xac)],'timeout':0x7530}),_0x3e1a51=await _0xf5ca96[_0x59d989(-0x8e,-0x90)+_0x3e906f(0x40a,0x41d)]();!_0x3e1a51&&(console[_0x3e906f(0x461,0x42c)](_0x3503bc[_0x59d989(-0x95,-0x75)](_0x59d989(-0x26,-0x61))),process['exit'](0x1));const _0x5a4d48=_0x3aa810[_0x59d989(-0xca,-0xa8)+'es']({'limit':_0x1c17b9});console[_0x59d989(-0xb4,-0x89)]('📊\x20전체\x20메모리:\x20'+_0x5a4d48['length']+'개');const _0xfdc7f0={'skill':0xa,'project_knowledge':0x9,'decision':0x8,'convention':0x7,'learning':0x6,'error_solution':0x5,'code_pattern':0x4,'context':0x3},_0x5a0762=[];let _0x1cb374=0x0;for(const _0x3501bd of _0x5a4d48){if(_0x1eb91e['LYoQJ']===_0x1eb91e[_0x3e906f(0x43a,0x415)]){const _0x5cb180=_0x3bcd53[_0x55cb44[_0x59d989(-0xce,-0xa1)][_0x59d989(-0x4d,-0x5b)]]??0x0,_0x2598b3=_0x490780[_0x5f2cc4[_0x59d989(-0x67,-0xa1)]['category']]??0x0;return _0x4046af[_0x3e906f(0x42b,0x41b)](_0x2598b3,_0x5cb180);}else{const _0x3f4d46=_0x3aa810['getSyncSta'+_0x3e906f(0x445,0x436)](_0x3501bd['id']);if(!_0x3f4d46?.['remoteId']){const _0x28da53=_0x1eb91e[_0x59d989(-0x31,-0x51)](detectMdReferences,_0x3501bd['content'],_0x5d8558);if(_0x28da53['length']>0x0)_0x1cb374++;continue;}const _0x19c005=detectMdReferences(_0x3501bd[_0x3e906f(0x496,0x459)],_0x5d8558);_0x1eb91e[_0x59d989(-0x5b,-0x66)](_0x19c005[_0x3e906f(0x437,0x454)],0x0)&&(_0x1eb91e['PAWgt'](_0x3e906f(0x3da,0x3fa),_0x59d989(-0x5e,-0x56))?_0x5a0762['push']({'memory':_0x3501bd,'remoteId':_0x3f4d46[_0x59d989(-0x61,-0x9e)],'refs':_0x19c005}):_0x52ccaf[_0x3e906f(0x478,0x46c)](_0x12aa6b[_0x3e906f(0x46a,0x455)],(_0x21b881[_0x3e906f(0x422,0x422)](_0x26964a['category'])??0x0)+0x1));}}console['log'](_0x3e906f(0x432,0x466)+_0x3e906f(0x48d,0x45e)+_0x5a0762[_0x59d989(-0x29,-0x5c)]+(_0x3e906f(0x44f,0x440)+':\x20')+_0x1cb374+'개)'),_0x5a0762[_0x3e906f(0x439,0x41a)]((_0x86683,_0x3d7e81)=>{function _0x22523a(_0x548486,_0x140087){return _0x59d989(_0x140087,_0x548486-0x603);}function _0x4351fe(_0x4dfc0d,_0x3f97b4){return _0x59d989(_0x3f97b4,_0x4dfc0d- -0xfe);}if(_0x4046af[_0x22523a(0x548,0x565)](_0x4046af['slJIM'],_0x22523a(0x558,0x573))){const _0x255e48=_0xfdc7f0[_0x86683['memory']['category']]??0x0,_0x7789bf=_0xfdc7f0[_0x3d7e81[_0x22523a(0x562,0x55f)][_0x4351fe(-0x159,-0x17e)]]??0x0;return _0x4046af[_0x22523a(0x56e,0x57e)](_0x7789bf,_0x255e48);}else{for(const _0x2dd22e of _0x2a3081)_0x20d764['add'](_0x2dd22e);}});const _0xb6b705=new Map();for(const {memory:_0x5a5488}of _0x5a0762){_0xb6b705['set'](_0x5a5488[_0x59d989(-0x86,-0x5b)],_0x1eb91e[_0x3e906f(0x407,0x437)](_0xb6b705[_0x3e906f(0x43c,0x422)](_0x5a5488[_0x59d989(-0x75,-0x5b)])??0x0,0x1));}console[_0x3e906f(0x44a,0x427)](_0x59d989(-0x2c,-0x59)+[..._0xb6b705[_0x59d989(-0x49,-0x86)]()][_0x3e906f(0x3e7,0x41a)]((_0x378822,_0x266511)=>(_0xfdc7f0[_0x266511[0x0]]??0x0)-(_0xfdc7f0[_0x378822[0x0]]??0x0))[_0x59d989(-0xa8,-0xa2)](([_0x53b5d1,_0x28b4fa])=>_0x53b5d1+'('+_0x28b4fa+')')[_0x3e906f(0x41e,0x40a)](',\x20'));const _0x43a7ff=new Set();for(const {refs:_0x7d6d7c}of _0x5a0762){if(_0x1eb91e['brXJB']===_0x1eb91e[_0x3e906f(0x438,0x406)]){for(const _0x13c4c1 of _0x7d6d7c)_0x43a7ff[_0x3e906f(0x407,0x421)](_0x13c4c1);}else{_0x28a57c[_0x3e906f(0x421,0x427)](_0x42937c[_0x59d989(-0xa1,-0x68)](_0x59d989(-0x79,-0x4c)+_0x3e906f(0x448,0x431)+'run\x20없이\x20실행하'+'면\x20실제\x20업로드됩니'+'다.'));return;}}console[_0x3e906f(0x446,0x427)](_0x59d989(-0x88,-0x72)+'일:\x20'+_0x43a7ff[_0x3e906f(0x496,0x465)]+'개'),console[_0x59d989(-0x97,-0x89)]();if(_0x1eb91e[_0x59d989(-0x44,-0x81)](_0x5a0762['length'],0x0)){console['log'](_0x3503bc[_0x3e906f(0x482,0x451)](_0x59d989(-0x35,-0x41)+'없습니다.'));return;}function _0x3e906f(_0x3bb80a,_0x12eb33){return _0x3fe7a5(_0x12eb33-0x432,_0x3bb80a);}const _0x579250=[..._0x43a7ff][_0x3e906f(0x400,0x40e)](_0x3ab595=>({'path':_0x3ab595,'count':_0x5a0762['filter'](_0x5f0526=>_0x5f0526[_0x3e906f(0x44a,0x442)][_0x59d989(-0x86,-0x63)](_0x3ab595))[_0x59d989(-0x77,-0x5c)]}))[_0x59d989(-0xc1,-0x96)]((_0x52f809,_0x107fe8)=>_0x107fe8[_0x3e906f(0x488,0x469)]-_0x52f809[_0x3e906f(0x46a,0x469)]);for(const {path:_0x2c5d5b,count:_0x35d3ec}of _0x579250['slice'](0x0,0x14)){console[_0x3e906f(0x41b,0x427)]('\x20\x20'+_0x3503bc[_0x59d989(-0xb2,-0x80)](_0x2c5d5b)+'\x20—\x20'+_0x35d3ec+_0x59d989(-0x3d,-0x6c));}_0x1eb91e[_0x59d989(-0x79,-0x74)](_0x579250[_0x3e906f(0x444,0x454)],0x14)&&console['log'](_0x59d989(-0x1f,-0x58)+(_0x579250['length']-0x14)+'개');console[_0x3e906f(0x41c,0x427)]();if(_0x449e28['dryRun']){if(_0x1eb91e[_0x59d989(-0xdb,-0x9d)]('IqYAU',_0x3e906f(0x3ec,0x400)))_0x49751f[_0x59d989(-0xa5,-0x89)](_0x59d989(-0x7c,-0x58)+_0x1eb91e[_0x3e906f(0x456,0x41f)](_0x5d883f[_0x3e906f(0x486,0x454)],0x14)+'개');else{console[_0x59d989(-0xb8,-0x89)](_0x3503bc[_0x3e906f(0x478,0x448)]('🔍\x20DRY\x20RUN\x20'+_0x3e906f(0x41f,0x431)+'run\x20없이\x20실행하'+'면\x20실제\x20업로드됩니'+'다.'));return;}}const _0x2b0c8b=new Map();let _0x2a8135=0x0,_0x3eb7fd=0x0;for(const {remoteId:_0x3e3228,refs:_0x8b8af}of _0x5a0762){for(const _0xb3172 of _0x8b8af){try{const _0x50c81e=resolve(_0x5d8558,_0xb3172),_0x496ed5=_0x1eb91e['Gvvah'](readFileSync,_0x50c81e),_0x16f785=_0x1eb91e[_0x3e906f(0x40b,0x40c)](createHash,_0x3e906f(0x472,0x45c))[_0x59d989(-0x91,-0x55)](_0x496ed5)[_0x3e906f(0x444,0x461)]('hex');let _0x5127d3=_0x2b0c8b['get'](_0x16f785);if(!_0x5127d3){if(_0x1eb91e['TFdRZ']==='JGGTm')_0x35e932[_0x3e906f(0x43e,0x427)]('\x20\x20'+_0x1d40c0[_0x59d989(-0x58,-0x75)](_0x3e906f(0x422,0x3fd)+_0x4fce41+'건'));else{const _0x227213=await _0xf5ca96[_0x59d989(-0x9f,-0x7e)+_0x3e906f(0x45a,0x447)](_0x16f785);if(_0x227213[_0x59d989(-0x9c,-0x9a)]&&_0x227213[_0x59d989(-0x67,-0x5e)])_0x5127d3=_0x227213[_0x3e906f(0x44f,0x452)],console[_0x59d989(-0x56,-0x89)]('\x20\x20'+_0x3503bc['gray']('↩')+'\x20'+_0xb3172+_0x3e906f(0x484,0x460));else{const _0x5db2e3=await _0xf5ca96[_0x3e906f(0x3e0,0x3f8)](_0x50c81e,{'category':_0x1eb91e[_0x59d989(-0x71,-0x78)],'tags':['memory-ref'+_0x3e906f(0x3ed,0x407),_0x1eb91e['jAuyt']]});_0x5127d3=_0x5db2e3['id'],console[_0x3e906f(0x438,0x427)]('\x20\x20'+_0x3503bc[_0x59d989(-0x93,-0x5f)]('↑')+'\x20'+_0xb3172+_0x3e906f(0x42e,0x44e));}_0x2b0c8b[_0x3e906f(0x46f,0x46c)](_0x16f785,_0x5127d3);}}await _0xf5ca96[_0x59d989(-0x7e,-0x99)+_0x3e906f(0x3d6,0x409)](_0x3e3228,_0x5127d3,{'reference_type':_0x3e906f(0x403,0x3f4),'reference_path':_0xb3172}),_0x2a8135++;}catch(_0x2f4e1a){const _0x279599=_0x2f4e1a instanceof Error?_0x2f4e1a['message']:String(_0x2f4e1a);if(_0x279599['includes'](_0x1eb91e[_0x3e906f(0x40d,0x3fb)])||_0x279599[_0x3e906f(0x437,0x44d)]('already\x20ex'+_0x3e906f(0x406,0x3f3))){if(_0x1eb91e[_0x59d989(-0x35,-0x73)](_0x1eb91e[_0x3e906f(0x3d6,0x402)],_0x1eb91e['nFUMA']))continue;else _0x48bbdf[_0x3e906f(0x43c,0x427)]('\x20\x20'+_0x5c19ca['cyan'](_0xdbde10)+'\x20—\x20'+_0x1d2d1d+_0x59d989(-0x92,-0x6c));}_0x3eb7fd++,console['error']('\x20\x20'+_0x3503bc[_0x59d989(-0x72,-0x75)]('✗')+'\x20'+_0xb3172+':\x20'+_0x279599);}}}console['log'](),console[_0x59d989(-0x4d,-0x89)](_0x3503bc[_0x59d989(-0x6d,-0x5f)](_0x3e906f(0x43f,0x418)+'료')),console[_0x59d989(-0x4f,-0x89)]('\x20\x20업로드된\x20파일:'+'\x20'+_0x2b0c8b[_0x59d989(-0x5c,-0x4b)]+'개'),console[_0x59d989(-0x7d,-0x89)](_0x3e906f(0x401,0x3f7)+_0x2a8135+'개'),_0x3eb7fd>0x0&&console['log']('\x20\x20'+_0x3503bc['red'](_0x59d989(-0xdd,-0xb3)+_0x3eb7fd+'건'));}),_0x3602bd;}
@@ -1,146 +1 @@
1
- /**
2
- * Proficiency Command
3
- *
4
- * 스킬 숙련도 관리 (목록, 상세 조회, 시뮬레이션).
5
- */
6
- import { Command } from 'commander';
7
- import chalk from 'chalk';
8
- import ora from 'ora';
9
- import { ConfigManager } from '../../config/manager.js';
10
- import { MemoryDatabase } from '../../db/database.js';
11
- import { ProficiencyTracker } from '../../proficiency/tracker.js';
12
- export function proficiencyCommand() {
13
- const cmd = new Command('proficiency')
14
- .description('Manage skill proficiency tracking');
15
- // a2a-memory proficiency list
16
- cmd.command('list')
17
- .description('List proficiency records')
18
- .option('-p, --project <path>', 'Filter by project path')
19
- .action((options) => {
20
- const config = new ConfigManager().load();
21
- const db = new MemoryDatabase(config.db.path);
22
- try {
23
- db.initialize();
24
- const records = db.listProficiencies({ projectPath: options.project });
25
- if (records.length === 0) {
26
- console.log(chalk.dim('No proficiency records found. Enable proficiency tracking first.'));
27
- return;
28
- }
29
- console.log(chalk.cyan(`\nProficiency Records (${records.length}):\n`));
30
- for (const rec of records) {
31
- const levelBar = '█'.repeat(rec.level) + '░'.repeat(10 - rec.level);
32
- const levelColor = rec.level >= 7 ? chalk.green : rec.level >= 4 ? chalk.yellow : chalk.red;
33
- console.log(` ${chalk.bold(rec.id.slice(0, 8))} ${rec.skillName.slice(0, 50)}`);
34
- console.log(` Level: ${levelColor(`${rec.level}/10`)} ${chalk.dim(levelBar)}`);
35
- console.log(chalk.dim(` XP: ${rec.experienceCount} Success: ${(rec.successRate * 100).toFixed(0)}% Activation: ${rec.actrActivation.toFixed(2)}`));
36
- console.log('');
37
- }
38
- }
39
- catch (error) {
40
- console.error(chalk.red('Error listing proficiency:'), error);
41
- // TODO: process.exit() → throw + 상위 핸들러로 리팩토링 (P3-3)
42
- process.exit(1);
43
- }
44
- finally {
45
- db.close();
46
- }
47
- });
48
- // a2a-memory proficiency inspect <id>
49
- cmd.command('inspect <id>')
50
- .description('Inspect proficiency record with experience events')
51
- .action((id) => {
52
- const config = new ConfigManager().load();
53
- const db = new MemoryDatabase(config.db.path);
54
- try {
55
- db.initialize();
56
- // prefix 매치
57
- const records = db.listProficiencies();
58
- const target = records.find((r) => r.id === id || r.id.startsWith(id));
59
- if (!target) {
60
- console.log(chalk.red(`Proficiency record not found: ${id}`));
61
- // TODO: process.exit() → throw + 상위 핸들러로 리팩토링 (P3-3)
62
- process.exit(1);
63
- }
64
- console.log(chalk.cyan('\nProficiency Record:\n'));
65
- console.log(` ID: ${target.id}`);
66
- console.log(` Skill: ${target.skillName}`);
67
- console.log(` Skill ID: ${target.skillMemoryId}`);
68
- console.log(` Level: ${target.level}/${config.proficiency?.maxLevel ?? 10}`);
69
- console.log(` XP Count: ${target.experienceCount}`);
70
- console.log(` Success: ${(target.successRate * 100).toFixed(1)}%`);
71
- console.log(` Activation: ${target.actrActivation.toFixed(4)}`);
72
- console.log(` Last: ${target.lastPracticedAt}`);
73
- console.log(` Project: ${target.projectPath ?? '(none)'}`);
74
- // 최근 이벤트
75
- const events = db.getExperienceEvents(target.id, { limit: 10, order: 'desc' });
76
- if (events.length > 0) {
77
- console.log(chalk.cyan('\n Recent Events:\n'));
78
- for (const event of events) {
79
- const outcomeColor = event.outcome === 'success' ? chalk.green : event.outcome === 'partial' ? chalk.yellow : chalk.red;
80
- const date = new Date(event.timestamp * 1000).toLocaleString();
81
- console.log(` ${chalk.dim(date)} ${outcomeColor(event.outcome.padEnd(7))} d=${event.difficulty.toFixed(2)} ${chalk.dim(event.contextTags.join(', '))}`);
82
- }
83
- }
84
- }
85
- catch (error) {
86
- console.error(chalk.red('Error inspecting proficiency:'), error);
87
- // TODO: process.exit() → throw + 상위 핸들러로 리팩토링 (P3-3)
88
- process.exit(1);
89
- }
90
- finally {
91
- db.close();
92
- }
93
- });
94
- // a2a-memory proficiency simulate
95
- cmd.command('simulate')
96
- .description('Run proficiency simulation (PoC validation)')
97
- .option('-n, --events <count>', 'Number of events', '120')
98
- .option('-s, --success <rate>', 'Success rate (0-1)', '0.8')
99
- .option('-d, --days <days>', 'Time span in days', '60')
100
- .action((options) => {
101
- const config = new ConfigManager().load();
102
- const profConfig = config.proficiency ?? {
103
- enabled: false,
104
- actr: { decayRate: 0.5, baseLevelConstant: 0.0, maxAssociativeStrength: 2.0,
105
- fanEffectFactor: 1.0, mismatchPenalty: 1.0, retrievalThreshold: 0.0 },
106
- levelFormula: 'activation',
107
- maxLevel: 10,
108
- };
109
- const db = new MemoryDatabase(config.db.path);
110
- try {
111
- db.initialize();
112
- const spinner = ora('Running simulation...').start();
113
- const tracker = new ProficiencyTracker(db, profConfig);
114
- const levels = tracker.simulate({
115
- eventCount: parseInt(options.events),
116
- successRate: parseFloat(options.success),
117
- difficultyRange: [0.3, 0.7],
118
- timeSpanDays: parseInt(options.days),
119
- expectedMinLevel: 1,
120
- expectedMaxLevel: 10,
121
- });
122
- spinner.succeed(chalk.green('Simulation complete'));
123
- // 레벨 진행 표시
124
- console.log(chalk.cyan('\nLevel Progression:\n'));
125
- const step = Math.max(1, Math.floor(levels.length / 20));
126
- for (let i = 0; i < levels.length; i += step) {
127
- const pct = ((i / levels.length) * 100).toFixed(0).padStart(3);
128
- const bar = '█'.repeat(levels[i]) + '░'.repeat(10 - levels[i]);
129
- console.log(` ${pct}% Level ${levels[i].toString().padStart(2)} ${chalk.dim(bar)}`);
130
- }
131
- const finalLevel = levels[levels.length - 1] ?? 1;
132
- console.log(chalk.cyan(`\n Final Level: ${finalLevel}/10`));
133
- console.log(chalk.dim(` Events: ${levels.length} Peak: ${Math.max(...levels)}`));
134
- }
135
- catch (error) {
136
- console.error(chalk.red('Simulation error:'), error);
137
- // TODO: process.exit() → throw + 상위 핸들러로 리팩토링 (P3-3)
138
- process.exit(1);
139
- }
140
- finally {
141
- db.close();
142
- }
143
- });
144
- return cmd;
145
- }
146
- //# sourceMappingURL=proficiency.js.map
1
+ (function(_0x4ecbb5,_0x5037e2){function _0x1d4a84(_0x1ca013,_0x1a62dd){return _0x391b(_0x1ca013- -0x158,_0x1a62dd);}const _0x1d476a=_0x4ecbb5();function _0x215b66(_0xf13183,_0x414f97){return _0x391b(_0xf13183-0x3db,_0x414f97);}while(!![]){try{const _0x1fa457=-parseInt(_0x1d4a84(0x1c,0x27))/0x1*(parseInt(_0x215b66(0x5a1,0x5d2))/0x2)+parseInt(_0x215b66(0x5ad,0x5ca))/0x3+parseInt(_0x215b66(0x57c,0x5aa))/0x4*(-parseInt(_0x1d4a84(0x5b,0x49))/0x5)+parseInt(_0x1d4a84(0x47,0x7f))/0x6*(-parseInt(_0x1d4a84(0x5f,0x17))/0x7)+parseInt(_0x215b66(0x585,0x5cb))/0x8+parseInt(_0x1d4a84(0x6d,0x34))/0x9+-parseInt(_0x1d4a84(0x18,-0x2f))/0xa*(-parseInt(_0x1d4a84(0x42,0x48))/0xb);if(_0x1fa457===_0x5037e2)break;else _0x1d476a['push'](_0x1d476a['shift']());}catch(_0xd66866){_0x1d476a['push'](_0x1d476a['shift']());}}}(_0x49a3,0xec5d8));import{Command}from'commander';function _0x49a3(){const _0x8ddff2=['BgfZDfbYywn0Aq','y29UDgv4DfrHzW','zxHPDa','mJCYB1LXtwLw','DgLVBG','z3jLC3nPB246cG','CMfJA2LUzYbMAq','zxzLBNrZ','EsbYzwnVCMqGBG','y3KGuMvJB3jKCW','Aw4Gzgf5CW','AwnoEw8','zxzLBdOG','kg5VBMuP','C3vJy2vZC1jHDa','jsaGtgv2zwWG','AxPOwfK','CgfYDgLHBa','CMvJB3jKihDPDa','Dg9tDhjPBMC','qYb2ywXPzgf0Aq','icbqCM9Qzwn0oG','AwvUy3KGC2LTDq','icaGifHqoIa','zMLJAwvUy3K6','uNvUBMLUzYbZAq','icbtA2LSBdOGia','Bg9Hza','z2v0rxHWzxjPzq','ChjVAMvJDcbWyq','C3rHCNq','tgLZDcbWCM9MAq','q291BNq','CMvK','z3jLzw4','mtiW','AwvUy2LLCW','y2LLBMn5ihjLyW','jsaGqwn0AxzHDa','C2XPy2u','CgfKu3rHCNq','mZq1mZG3ntDptwzItNm','u3vJy2vZCYbYyq','lZeW','Bg9N','cLbYB2zPy2LLBG','nty0vuT5z2Lc','s2LHr1C','odK0mhngwuD2wa','zgLT','CMLUzW','zgvZyW','zMLUza','CNn0lG','zxnZidXYyxrLpG','oIaGia','C3vJy2vLza','nZm3odK2zKPwDeLt','ktOk','ChjVAMvJDa','C3vJy2vZCW','cKXLDMvSifbYBW','twfUywDLihnRAq','cIaGrMLUywWGta','B3v0y29Tzq','Dg9mB2nHBgvtDa','mJm5nufswKXdtW','zhmGzM91BMqUia','icaGia','ywn0CKfJDgL2yq','nJa1otjRufjNyK0','ywn0Aw9U','B3b0Aw9U','q21Itvy','zKPmu1G','icbtDwnJzxnZoG','zgvZy3jPChrPBW','DgLTzxn0yw1W','Bgf0Aw9UicHqBW','icbfDMvUDhm6ia','wfrhrNK','rw5HyMXLihbYBW','yLrZzNq','zxHWzxjPzw5Jzq','mJm3ntGXmvnkBNPVBa','nJe0nMTWu1fgyG','y2uGzxzLBNrZ','CMvWzwf0','cIaGuMvJzw50ia','icbmyxn0oIaGia','Aw5PDgLHBgL6zq','AcbLEhbLCMLLBG','tg5zzxi','y3LHBG','zeXosfC','DhmGpgnVDw50pG','icaGieXLDMvSoG','ntC2ndaYAfbjC3fw','sLnUuuO','y3KGuMvJB3jKoG','uhjVzMLJAwvUyW','AwDqA3m','BgvUz3rO','uhfWwKm','C2TPBgXnzw1VCG','BgLZDfbYB2zPyW','igvYCM9YoG','uMnmAfq','ChjVAMvJDfbHDa','BMnLrxzLBNrZ','wKXQC3G','AfHSAeG','rxzLBNrZoGO','zwn0idXWyxrOpG','y2XVC2u','u2LTDwXHDgLVBG','EK9Isxe','C3rHCNrZv2L0Aa','tM8GChjVzMLJAq','zxjYB3i','Cgf0Aa','icbtA2LSBcbjra','zw5JEsbYzwnVCG','icbjrdOGicaGia','EuPnr1G','EMjushy','BgLZDa','B246ia','rMLSDgvYigj5ia','sw5ZCgvJDcbWCG','icbby3rPDMf0Aq','zMXVB3i','icbyucbdB3vUDa','Bgv2zwW','icbKpq','lwqSic0Tzgf5CW','uNvUihbYB2zPyW','wLrku2u','zMLJAwvUy3KGDa','vhfMzKm','B24P','y29TBwfUza','ChjVzMLJAwvUyW','Eeftwuy','EuLK','lxaSic0TChjVAG','yM9Sza','ywn0AxzHDgLVBG','B3qGzM91BMq6ia','EwvSBg93','lw4Sic0TzxzLBG','BgWGChjVzMLJAq','Dg9gAxHLza','C2TPBgXoyw1L','mtbfD3Diuwu'];_0x49a3=function(){return _0x8ddff2;};return _0x49a3();}import _0x2e5b93 from'chalk';import _0x3d81c from'ora';function _0x391b(_0x436e71,_0x592cd5){_0x436e71=_0x436e71-0x15c;const _0x49a348=_0x49a3();let _0x391b01=_0x49a348[_0x436e71];if(_0x391b['AxTWLI']===undefined){var _0x3b2367=function(_0x124abd){const _0x5edd46='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x521a2a='',_0x2cef00='';for(let _0x52600d=0x0,_0x532b1b,_0x19cde9,_0x1f5735=0x0;_0x19cde9=_0x124abd['charAt'](_0x1f5735++);~_0x19cde9&&(_0x532b1b=_0x52600d%0x4?_0x532b1b*0x40+_0x19cde9:_0x19cde9,_0x52600d++%0x4)?_0x521a2a+=String['fromCharCode'](0xff&_0x532b1b>>(-0x2*_0x52600d&0x6)):0x0){_0x19cde9=_0x5edd46['indexOf'](_0x19cde9);}for(let _0x17b0b7=0x0,_0x365242=_0x521a2a['length'];_0x17b0b7<_0x365242;_0x17b0b7++){_0x2cef00+='%'+('00'+_0x521a2a['charCodeAt'](_0x17b0b7)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2cef00);};_0x391b['uWocaG']=_0x3b2367,_0x391b['oumuel']={},_0x391b['AxTWLI']=!![];}const _0x12d1a5=_0x49a348[0x0],_0x138941=_0x436e71+_0x12d1a5,_0x2a468e=_0x391b['oumuel'][_0x138941];return!_0x2a468e?(_0x391b01=_0x391b['uWocaG'](_0x391b01),_0x391b['oumuel'][_0x138941]=_0x391b01):_0x391b01=_0x2a468e,_0x391b01;}import{ConfigManager}from'../../config/manager.js';import{MemoryDatabase}from'../../db/database.js';import{ProficiencyTracker}from'../../proficiency/tracker.js';export function proficiencyCommand(){function _0x4e721e(_0x5dc1dc,_0x420bba){return _0x391b(_0x5dc1dc- -0xcb,_0x420bba);}function _0xcd61f7(_0x1bb27f,_0x32a9a0){return _0x391b(_0x1bb27f- -0x372,_0x32a9a0);}const _0xd9db2a={'LnYer':'Error\x20list'+'ing\x20profic'+'iency:','PqpZC':function(_0x3bfa62,_0x1a9855){return _0x3bfa62>_0x1a9855;},'yJMGX':function(_0x2ab4cd,_0x4fd235){return _0x2ab4cd===_0x4fd235;},'zbTHv':function(_0x56ba09,_0x5b25df){return _0x56ba09(_0x5b25df);},'ZTJSe':function(_0x395193,_0x143bee){return _0x395193===_0x143bee;},'TqffC':'Error\x20insp'+'ecting\x20pro'+_0x4e721e(0xbe,0xdd),'bTsft':_0x4e721e(0x9e,0x58),'dOdFM':function(_0x5bfa12,_0x52dab9){return _0x5bfa12(_0x52dab9);},'hXlhH':_0xcd61f7(-0x1e8,-0x22f)+'mulation..'+'.','ZLjsx':function(_0x4b470b,_0x16dbca){return _0x4b470b(_0x16dbca);},'KiaGW':_0x4e721e(0x119,0x124)+'\x20complete','fJLSX':function(_0x564340,_0x32d40c){return _0x564340*_0x32d40c;},'RcLhT':'Simulation'+_0x4e721e(0x110,0xf9),'icNyo':_0x4e721e(0x99,0x67)+'y','CmbMV':_0xcd61f7(-0x1c3,-0x17c)+_0xcd61f7(-0x205,-0x208)+'ency\x20track'+'ing','zObIq':_0xcd61f7(-0x183,-0x15b),'JSnQJ':_0x4e721e(0x9c,0xa5)+_0x4e721e(0x117,0x10d),'MgNWu':_0xcd61f7(-0x180,-0x1a9)+'oficiency\x20'+_0x4e721e(0xb8,0xfd)+_0xcd61f7(-0x1a6,-0x17a)+_0x4e721e(0xfc,0x139),'yReYJ':'simulate','igPks':'Number\x20of\x20'+_0xcd61f7(-0x1fa,-0x1c3),'dLNHW':_0x4e721e(0xc9,0xc6),'nDwRx':_0xcd61f7(-0x215,-0x257)+'\x20<days>'},_0x26f697=new Command(_0xd9db2a[_0x4e721e(0xb1,0x82)])[_0xcd61f7(-0x1b5,-0x1cc)+'n'](_0xd9db2a[_0x4e721e(0xef,0x102)]);return _0x26f697['command'](_0xd9db2a[_0x4e721e(0x11a,0x15a)])[_0x4e721e(0xf2,0xdc)+'n'](_0x4e721e(0xc5,0xe4)+_0xcd61f7(-0x1dc,-0x191)+'ords')[_0xcd61f7(-0x1b9,-0x16e)](_0xd9db2a[_0xcd61f7(-0x19f,-0x1ce)],_0x4e721e(0x126,0x14a)+_0xcd61f7(-0x1e4,-0x1ed)+'th')[_0x4e721e(0xed,0x110)](_0x5212c0=>{function _0x224cb2(_0x58c0be,_0x5d5521){return _0xcd61f7(_0x5d5521-0x4e4,_0x58c0be);}function _0x4df826(_0x2cbda6,_0x566457){return _0xcd61f7(_0x566457-0x653,_0x2cbda6);}const _0x5b9858=new ConfigManager()[_0x224cb2(0x310,0x2fe)](),_0x44e993=new MemoryDatabase(_0x5b9858['db'][_0x4df826(0x4a6,0x4ca)]);try{_0x44e993[_0x224cb2(0x317,0x33d)]();const _0x486161=_0x44e993[_0x4df826(0x4ff,0x4bb)+_0x4df826(0x43c,0x476)]({'projectPath':_0x5212c0[_0x4df826(0x47b,0x48d)]});if(_0x486161[_0x224cb2(0x335,0x349)]===0x0){console[_0x4df826(0x465,0x47e)](_0x2e5b93['dim'](_0x4df826(0x4b0,0x4c8)+_0x224cb2(0x387,0x35d)+_0x4df826(0x45e,0x495)+_0x4df826(0x474,0x4a3)+_0x224cb2(0x2b1,0x2d2)+_0x224cb2(0x329,0x2e9)+_0x4df826(0x44b,0x487)));return;}console[_0x4df826(0x45b,0x47e)](_0x2e5b93[_0x4df826(0x46c,0x4af)](_0x224cb2(0x2eb,0x310)+_0x224cb2(0x2d5,0x2ec)+'\x20('+_0x486161[_0x224cb2(0x357,0x349)]+_0x224cb2(0x303,0x31d)));for(const _0x4fb1fc of _0x486161){const _0x58a91e='█'[_0x4df826(0x481,0x4a9)](_0x4fb1fc[_0x224cb2(0x355,0x368)])+'░'[_0x224cb2(0x341,0x33a)](0xa-_0x4fb1fc[_0x4df826(0x4f5,0x4d7)]),_0x4f15e9=_0x4fb1fc[_0x224cb2(0x380,0x368)]>=0x7?_0x2e5b93[_0x224cb2(0x2e6,0x305)]:_0x4fb1fc[_0x4df826(0x50b,0x4d7)]>=0x4?_0x2e5b93['yellow']:_0x2e5b93['red'];console[_0x224cb2(0x2ec,0x30f)]('\x20\x20'+_0x2e5b93[_0x4df826(0x458,0x449)](_0x4fb1fc['id']['slice'](0x0,0x8))+'\x20\x20'+_0x4fb1fc[_0x4df826(0x491,0x450)][_0x4df826(0x455,0x479)](0x0,0x32)),console[_0x224cb2(0x2f7,0x30f)](_0x224cb2(0x2fb,0x343)+'\x20'+_0x4f15e9(_0x4fb1fc['level']+_0x4df826(0x4c1,0x47d))+'\x20'+_0x2e5b93[_0x4df826(0x43c,0x483)](_0x58a91e)),console['log'](_0x2e5b93['dim'](_0x4df826(0x42c,0x469)+_0x4fb1fc['experience'+'Count']+(_0x224cb2(0x2e4,0x32e)+'\x20')+(_0x4fb1fc['successRat'+'e']*0x64)[_0x224cb2(0x29f,0x2e0)](0x0)+(_0x4df826(0x449,0x478)+'ion:\x20')+_0x4fb1fc[_0x4df826(0x48f,0x497)+_0x224cb2(0x2d4,0x2e7)]['toFixed'](0x2))),console['log']('');}}catch(_0x4a1a9d){console[_0x224cb2(0x38a,0x35a)](_0x2e5b93[_0x4df826(0x468,0x473)](_0xd9db2a[_0x4df826(0x4bb,0x4ae)]),_0x4a1a9d),process['exit'](0x1);}finally{_0x44e993[_0x224cb2(0x359,0x355)]();}}),_0x26f697['command']('inspect\x20<i'+'d>')[_0x4e721e(0xf2,0xba)+'n'](_0xd9db2a['MgNWu'])['action'](_0x50308f=>{function _0x5055f1(_0x14a55f,_0x3e4183){return _0xcd61f7(_0x14a55f-0x16d,_0x3e4183);}const _0x4ed1bc={'izhXY':function(_0x43bfbc,_0x37fe4d){return _0x43bfbc+_0x37fe4d;}},_0x503f20=new ConfigManager()['load'](),_0x4a1d3a=new MemoryDatabase(_0x503f20['db'][_0x5055f1(-0x1c,0x1e)]);function _0x109482(_0x33d492,_0x62092e){return _0xcd61f7(_0x62092e-0x558,_0x33d492);}try{_0x4a1d3a[_0x5055f1(-0x3a,-0x68)]();const _0x510fe6=_0x4a1d3a[_0x5055f1(-0x2b,-0x60)+_0x109482(0x3ba,0x37b)](),_0xd3530b=_0x510fe6[_0x109482(0x376,0x38b)](_0x1c00dd=>_0x1c00dd['id']===_0x50308f||_0x1c00dd['id'][_0x109482(0x3f0,0x3cc)](_0x50308f));!_0xd3530b&&(console[_0x5055f1(-0x68,-0x61)](_0x2e5b93[_0x5055f1(-0x73,-0x57)](_0x5055f1(-0x30,-0x1b)+_0x5055f1(-0x8c,-0x75)+_0x109482(0x32b,0x350)+_0x50308f)),process['exit'](0x1));console[_0x5055f1(-0x68,-0x44)](_0x2e5b93[_0x109482(0x3db,0x3b4)](_0x109482(0x358,0x384)+_0x5055f1(-0x31,-0x69)+'\x0a')),console[_0x109482(0x380,0x383)](_0x109482(0x40f,0x3d2)+_0x109482(0x3ac,0x39b)+_0xd3530b['id']),console[_0x5055f1(-0x68,-0x82)](_0x5055f1(-0x7a,-0x35)+_0x109482(0x370,0x39b)+_0xd3530b[_0x109482(0x316,0x355)]),console['log'](_0x109482(0x40d,0x3d0)+_0x5055f1(-0x5d,-0xa1)+_0xd3530b[_0x109482(0x377,0x3bf)+_0x5055f1(-0x9f,-0xd7)]),console[_0x5055f1(-0x68,-0x20)]('\x20\x20Level:\x20\x20'+_0x5055f1(-0x50,-0x77)+_0xd3530b[_0x5055f1(-0xf,-0x3b)]+'/'+(_0x503f20[_0x5055f1(-0xa1,-0x81)+'y']?.['maxLevel']??0xa)),console[_0x5055f1(-0x68,-0x3a)](_0x109482(0x3bb,0x3db)+_0x109482(0x3b1,0x38e)+_0xd3530b[_0x5055f1(-0x41,-0x4c)+_0x109482(0x34a,0x377)]),console[_0x109482(0x3bc,0x383)](_0x5055f1(-0x49,-0x68)+_0x5055f1(-0x50,-0x7f)+(_0xd3530b[_0x109482(0x398,0x365)+'e']*0x64)['toFixed'](0x1)+'%'),console[_0x109482(0x378,0x383)](_0x109482(0x3cc,0x3d9)+_0x109482(0x416,0x3d6)+_0xd3530b[_0x109482(0x378,0x39c)+_0x109482(0x397,0x35b)][_0x109482(0x382,0x354)](0x4)),console['log'](_0x5055f1(-0x3b,-0x72)+_0x5055f1(-0x50,-0x95)+_0xd3530b[_0x109482(0x380,0x357)+'cedAt']),console['log'](_0x5055f1(-0x7f,-0x33)+_0x109482(0x378,0x39b)+(_0xd3530b[_0x109482(0x3a1,0x3c3)+'h']??_0x5055f1(-0x87,-0x99)));const _0x43acb3=_0x4a1d3a[_0x5055f1(-0x78,-0x32)+_0x5055f1(-0x27,0x24)](_0xd3530b['id'],{'limit':0xa,'order':_0x5055f1(-0x61,-0x3b)});if(_0xd9db2a[_0x109482(0x3a6,0x3be)](_0x43acb3[_0x109482(0x37b,0x3bd)],0x0)){console[_0x109482(0x355,0x383)](_0x2e5b93[_0x5055f1(-0x37,-0x36)](_0x109482(0x379,0x3af)+_0x109482(0x3e6,0x3c7)));for(const _0x511215 of _0x43acb3){const _0x118d48=_0xd9db2a[_0x109482(0x41a,0x3d3)](_0x511215[_0x5055f1(-0x54,-0x7d)],_0x5055f1(-0x58,-0x8c))?_0x2e5b93[_0x5055f1(-0x72,-0xa2)]:_0xd9db2a[_0x5055f1(-0x18,0x3)](_0x511215[_0x109482(0x3be,0x397)],_0x5055f1(-0x83,-0x6b))?_0x2e5b93[_0x5055f1(-0x9a,-0x92)]:_0x2e5b93[_0x5055f1(-0x73,-0xa5)],_0x2416a5=new Date(_0x511215[_0x5055f1(-0x47,-0x93)]*0x3e8)[_0x5055f1(-0x53,-0x9f)+_0x109482(0x384,0x389)]();console[_0x109482(0x3bb,0x383)](_0x5055f1(-0x50,-0x8f)+_0x2e5b93['dim'](_0x2416a5)+'\x20\x20'+_0xd9db2a[_0x5055f1(-0x17,-0x5e)](_0x118d48,_0x511215['outcome']['padEnd'](0x7))+_0x5055f1(-0xa9,-0x7b)+_0x511215['difficulty']['toFixed'](0x2)+'\x20\x20'+_0x2e5b93[_0x5055f1(-0x63,-0x80)](_0x511215[_0x5055f1(-0x93,-0x4a)+'s']['join'](',\x20')));}}}catch(_0x3f1dce){if(_0xd9db2a[_0x5055f1(-0xa6,-0xd9)](_0x5055f1(-0xa0,-0x8d),_0x5055f1(-0x44,-0x2b))){const _0x468b7e=(_0x251a6f/_0x25d1db['length']*0x64)['toFixed'](0x0)[_0x109482(0x381,0x37f)](0x3),_0xe2ea06=_0x4ed1bc[_0x109482(0x3b3,0x367)]('█'[_0x5055f1(-0x3d,-0x19)](_0x4a9abe[_0x269911]),'░'['repeat'](0xa-_0x2b0aba[_0x5dc778]));_0xcd04ca['log']('\x20\x20'+_0x468b7e+'%\x20\x20Level\x20'+_0x5410aa[_0xb366fd][_0x109482(0x3ae,0x36a)]()[_0x109482(0x3a6,0x37f)](0x2)+'\x20'+_0x58ee9c[_0x109482(0x35a,0x388)](_0xe2ea06));}else console[_0x109482(0x3c9,0x3ce)](_0x2e5b93['red'](_0xd9db2a[_0x5055f1(-0xa4,-0xeb)]),_0x3f1dce),process[_0x109482(0x30f,0x359)](0x1);}finally{_0x4a1d3a[_0x5055f1(-0x22,0x2a)]();}}),_0x26f697[_0x4e721e(0x98,0x7a)](_0xd9db2a['yReYJ'])[_0xcd61f7(-0x1b5,-0x1f9)+'n'](_0xcd61f7(-0x214,-0x261)+_0x4e721e(0xbc,0xe1)+_0xcd61f7(-0x1b3,-0x1ef)+_0xcd61f7(-0x1ed,-0x202)+_0xcd61f7(-0x210,-0x1f3))[_0xcd61f7(-0x1b9,-0x1d3)](_0xcd61f7(-0x206,-0x23f)+_0x4e721e(0x105,0x142),_0xd9db2a[_0xcd61f7(-0x19c,-0x175)],_0xd9db2a[_0x4e721e(0x104,0x102)])['option']('-s,\x20--succ'+_0xcd61f7(-0x1cb,-0x1cc),_0x4e721e(0xd0,0x84)+'te\x20(0-1)','0.8')[_0xcd61f7(-0x1b9,-0x19b)](_0xd9db2a['nDwRx'],'Time\x20span\x20'+_0x4e721e(0xb0,0x72),'60')['action'](_0x1dc9bb=>{const _0x4b9ead=new ConfigManager()[_0x7b615(-0x2c,-0x3)]();function _0x7b615(_0x3f1613,_0x4b8c63){return _0x4e721e(_0x3f1613- -0xed,_0x4b8c63);}function _0x4502ce(_0x3bb0bb,_0x2fdc4e){return _0x4e721e(_0x3bb0bb-0x44,_0x2fdc4e);}const _0x1dc740=_0x4b9ead['proficienc'+'y']??{'enabled':![],'actr':{'decayRate':0.5,'baseLevelConstant':0x0,'maxAssociativeStrength':0x2,'fanEffectFactor':0x1,'mismatchPenalty':0x1,'retrievalThreshold':0x0},'levelFormula':_0xd9db2a[_0x7b615(0xb,0x41)],'maxLevel':0xa},_0x43c3ea=new MemoryDatabase(_0x4b9ead['db'][_0x4502ce(0x162,0x128)]);try{_0x43c3ea[_0x7b615(0x13,0x2d)]();const _0x505ec5=_0xd9db2a['dOdFM'](_0x3d81c,_0xd9db2a[_0x7b615(0x28,0x62)])[_0x7b615(-0x29,-0x66)](),_0x5e5b19=new ProficiencyTracker(_0x43c3ea,_0x1dc740),_0x56ea73=_0x5e5b19['simulate']({'eventCount':_0xd9db2a[_0x4502ce(0x158,0x18f)](parseInt,_0x1dc9bb[_0x7b615(-0x40,-0x80)]),'successRate':parseFloat(_0x1dc9bb[_0x7b615(-0xb,-0x1)]),'difficultyRange':[0.3,0.7],'timeSpanDays':_0xd9db2a[_0x4502ce(0x167,0x122)](parseInt,_0x1dc9bb['days']),'expectedMinLevel':0x1,'expectedMaxLevel':0xa});_0x505ec5[_0x7b615(-0xf,-0x15)](_0x2e5b93['green'](_0xd9db2a[_0x7b615(-0x18,-0xd)])),console[_0x4502ce(0x116,0xce)](_0x2e5b93[_0x7b615(0x16,0x52)](_0x7b615(-0xa,-0x43)+_0x7b615(-0x42,-0x10)));const _0x1dcdca=Math['max'](0x1,Math[_0x7b615(0x3c,0x12)](_0x56ea73['length']/0x14));for(let _0xf0782f=0x0;_0xf0782f<_0x56ea73[_0x7b615(0x1f,0x4)];_0xf0782f+=_0x1dcdca){const _0x563e2c=_0xd9db2a[_0x4502ce(0x134,0x101)](_0xf0782f/_0x56ea73[_0x4502ce(0x150,0x142)],0x64)[_0x7b615(-0x4a,-0x86)](0x0)['padStart'](0x3),_0x54d839='█'[_0x7b615(0x10,-0x19)](_0x56ea73[_0xf0782f])+'░'[_0x4502ce(0x141,0x158)](0xa-_0x56ea73[_0xf0782f]);console['log']('\x20\x20'+_0x563e2c+_0x4502ce(0xf9,0x111)+_0x56ea73[_0xf0782f][_0x7b615(-0x34,0x15)]()[_0x7b615(-0x1f,-0xc)](0x2)+'\x20'+_0x2e5b93[_0x4502ce(0x11b,0x10a)](_0x54d839));}const _0x3f8433=_0x56ea73[_0x56ea73['length']-0x1]??0x1;console[_0x4502ce(0x116,0x14a)](_0x2e5b93[_0x4502ce(0x147,0x12d)](_0x7b615(-0x8,-0x25)+_0x4502ce(0xf6,0xf4)+_0x3f8433+'/10')),console[_0x4502ce(0x116,0xe5)](_0x2e5b93[_0x4502ce(0x11b,0x163)](_0x4502ce(0x139,0x10a)+_0x56ea73[_0x4502ce(0x150,0x13d)]+'\x20\x20Peak:\x20'+Math['max'](..._0x56ea73)));}catch(_0x23d376){console[_0x7b615(0x30,0x49)](_0x2e5b93['red'](_0xd9db2a[_0x7b615(0x24,-0x1e)]),_0x23d376),process['exit'](0x1);}finally{_0x43c3ea[_0x7b615(0x2b,-0x1b)]();}}),_0x26f697;}
@@ -1,64 +1 @@
1
- /**
2
- * Remove Command
3
- *
4
- * 메모리를 삭제합니다.
5
- */
6
- import { Command } from 'commander';
7
- import chalk from 'chalk';
8
- import ora from 'ora';
9
- import { ConfigManager } from '../../config/manager.js';
10
- import { MemoryDatabase } from '../../db/database.js';
11
- export function rmCommand() {
12
- return new Command('rm')
13
- .description('Remove memory(s)')
14
- .argument('[id]', 'Memory ID to remove')
15
- .option('--all', 'Remove all memories')
16
- .option('--confirm', 'Confirm removal (required with --all)')
17
- .action((id, options) => {
18
- const config = new ConfigManager().load();
19
- const db = new MemoryDatabase(config.db.path);
20
- try {
21
- db.initialize();
22
- // 전체 삭제 모드
23
- if (options.all) {
24
- if (!options.confirm) {
25
- console.error(chalk.red('Error: --confirm is required when using --all'));
26
- console.log(chalk.yellow('Use: a2a-memory rm --all --confirm'));
27
- // TODO: process.exit() → throw + 상위 핸들러로 리팩토링 (P3-3)
28
- process.exit(1);
29
- }
30
- const spinner = ora('Removing all memories...').start();
31
- const allMemories = db.listMemories({ limit: 999999 });
32
- const ids = allMemories.map((m) => m.id);
33
- const deleted = db.deleteMemories(ids);
34
- spinner.succeed(chalk.green(`✓ Removed ${deleted} memories`));
35
- return;
36
- }
37
- // 단일 삭제 모드
38
- if (!id) {
39
- console.error(chalk.red('Error: Memory ID is required'));
40
- console.log(chalk.yellow('Use: a2a-memory rm <id>'));
41
- console.log(chalk.yellow('Or: a2a-memory rm --all --confirm'));
42
- // TODO: process.exit() → throw + 상위 핸들러로 리팩토링 (P3-3)
43
- process.exit(1);
44
- }
45
- const existing = db.getMemory(id);
46
- if (!existing) {
47
- console.error(chalk.red(`Error: Memory with ID ${id} not found`));
48
- // TODO: process.exit() → throw + 상위 핸들러로 리팩토링 (P3-3)
49
- process.exit(1);
50
- }
51
- db.deleteMemory(id);
52
- console.log(chalk.green(`✓ Memory ${id} removed`));
53
- }
54
- catch (error) {
55
- console.error(chalk.red('Error removing memory:'), error);
56
- // TODO: process.exit() → throw + 상위 핸들러로 리팩토링 (P3-3)
57
- process.exit(1);
58
- }
59
- finally {
60
- db.close();
61
- }
62
- });
63
- }
64
- //# sourceMappingURL=rm.js.map
1
+ (function(_0x2a3a38,_0x1105e5){const _0x4981f8=_0x2a3a38();function _0xf28f44(_0x412010,_0x42122e){return _0x1ba7(_0x412010- -0x126,_0x42122e);}function _0x527929(_0x47d2ed,_0x138bfe){return _0x1ba7(_0x138bfe-0xe1,_0x47d2ed);}while(!![]){try{const _0x214cdf=parseInt(_0x527929(0x272,0x259))/0x1*(-parseInt(_0xf28f44(0x84,0x7c))/0x2)+parseInt(_0x527929(0x282,0x282))/0x3+parseInt(_0xf28f44(0x86,0x88))/0x4*(parseInt(_0xf28f44(0x6d,0x58))/0x5)+-parseInt(_0xf28f44(0x51,0x48))/0x6*(parseInt(_0xf28f44(0x93,0xa1))/0x7)+parseInt(_0x527929(0x2a2,0x29c))/0x8+parseInt(_0x527929(0x248,0x25a))/0x9+-parseInt(_0x527929(0x268,0x261))/0xa*(parseInt(_0xf28f44(0x64,0x86))/0xb);if(_0x214cdf===_0x1105e5)break;else _0x4981f8['push'](_0x4981f8['shift']());}catch(_0x6c59e6){_0x4981f8['push'](_0x4981f8['shift']());}}}(_0x4782,0xe5f84));function _0x1ba7(_0x385cc5,_0x4442ef){_0x385cc5=_0x385cc5-0x177;const _0x478263=_0x4782();let _0x1ba73e=_0x478263[_0x385cc5];if(_0x1ba7['rEDkYd']===undefined){var _0x44ade0=function(_0x5e6299){const _0x953a70='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x467ba6='',_0x1ef05f='';for(let _0x5f4949=0x0,_0x1aab51,_0x239478,_0x533098=0x0;_0x239478=_0x5e6299['charAt'](_0x533098++);~_0x239478&&(_0x1aab51=_0x5f4949%0x4?_0x1aab51*0x40+_0x239478:_0x239478,_0x5f4949++%0x4)?_0x467ba6+=String['fromCharCode'](0xff&_0x1aab51>>(-0x2*_0x5f4949&0x6)):0x0){_0x239478=_0x953a70['indexOf'](_0x239478);}for(let _0x417eac=0x0,_0x34a989=_0x467ba6['length'];_0x417eac<_0x34a989;_0x417eac++){_0x1ef05f+='%'+('00'+_0x467ba6['charCodeAt'](_0x417eac)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1ef05f);};_0x1ba7['ZsyVhz']=_0x44ade0,_0x1ba7['VZUMpw']={},_0x1ba7['rEDkYd']=!![];}const _0x266be5=_0x478263[0x0],_0x188353=_0x385cc5+_0x266be5,_0x58edf4=_0x1ba7['VZUMpw'][_0x188353];return!_0x58edf4?(_0x1ba73e=_0x1ba7['ZsyVhz'](_0x1ba73e),_0x1ba7['VZUMpw'][_0x188353]=_0x1ba73e):_0x1ba73e=_0x58edf4,_0x1ba73e;}import{Command}from'commander';import _0x2b7df8 from'chalk';import _0x2131bb from'ora';import{ConfigManager}from'../../config/manager.js';import{MemoryDatabase}from'../../db/database.js';export function rmCommand(){const _0xfe4da1={'qzJFS':_0x2fb7b6(0x2ad,0x2b2)+'emory\x20rm\x20-'+_0x453375(-0x16f,-0x15a)+_0x453375(-0x149,-0x152),'hWMWG':function(_0x27636d,_0x39dc01){return _0x27636d!==_0x39dc01;},'SEYCb':'alyYJ','tNUbY':'Removing\x20a'+_0x453375(-0x15a,-0x159)+'s...','wFsAB':_0x453375(-0x187,-0x18e)+'emory\x20rm\x20<'+_0x2fb7b6(0x2ef,0x2ea),'YCBmi':'Or:\x20a2a-me'+_0x453375(-0x185,-0x16b)+_0x2fb7b6(0x302,0x2f9)+_0x2fb7b6(0x2c2,0x2b5),'QmPix':_0x2fb7b6(0x2d6,0x2b1)+_0x453375(-0x171,-0x162)+'y:','XpzwW':_0x2fb7b6(0x2e8,0x2df)+_0x2fb7b6(0x2f7,0x2f4),'sjGDe':_0x453375(-0x157,-0x14b),'BiAAQ':_0x2fb7b6(0x308,0x2fa)+_0x453375(-0x12c,-0x148)};function _0x453375(_0x2832d5,_0x1a7082){return _0x1ba7(_0x1a7082- -0x309,_0x2832d5);}function _0x2fb7b6(_0x2a2d60,_0x285a2c){return _0x1ba7(_0x285a2c-0x137,_0x2a2d60);}return new Command('rm')[_0x2fb7b6(0x2d8,0x2cb)+'n'](_0x453375(-0x167,-0x17e)+_0x2fb7b6(0x2e6,0x2c4))[_0x453375(-0x191,-0x179)](_0x2fb7b6(0x2cf,0x2cd),_0xfe4da1[_0x453375(-0x172,-0x158)])['option'](_0xfe4da1[_0x453375(-0x171,-0x18a)],_0xfe4da1[_0x453375(-0x14f,-0x174)])[_0x453375(-0x17c,-0x172)]('--confirm',_0x2fb7b6(0x2db,0x2dd)+_0x453375(-0x176,-0x15e)+_0x453375(-0x193,-0x177)+_0x2fb7b6(0x2ba,0x2d1))['action']((_0xb41701,_0x3d668d)=>{const _0x59eb1d={'PPPZT':_0x425a37(-0x9,-0x14)+'ory\x20ID\x20is\x20'+_0x564ea0(0x24b,0x269)},_0x5d84ff=new ConfigManager()['load'](),_0x386de=new MemoryDatabase(_0x5d84ff['db'][_0x425a37(-0x8,-0xd)]);function _0x425a37(_0x5d2417,_0xd9aa07){return _0x2fb7b6(_0x5d2417,_0xd9aa07- -0x2d3);}function _0x564ea0(_0x553acc,_0x8e503b){return _0x2fb7b6(_0x8e503b,_0x553acc- -0x7d);}try{_0x386de[_0x425a37(-0x21,-0x16)]();if(_0x3d668d[_0x425a37(0x14,0x1c)]){if(_0xfe4da1[_0x564ea0(0x23e,0x241)](_0xfe4da1[_0x425a37(0x2b,0x4)],_0x564ea0(0x253,0x259))){!_0x3d668d[_0x564ea0(0x23d,0x250)]&&(console[_0x425a37(0x2a,0x1e)](_0x2b7df8[_0x425a37(0x20,0x7)](_0x564ea0(0x23c,0x250)+_0x564ea0(0x23f,0x232)+'required\x20w'+_0x425a37(0x1e,0x1)+_0x425a37(0x35,0x22))),console[_0x425a37(-0x6,-0x4)](_0x2b7df8['yellow'](_0x425a37(-0x3a,-0x21)+_0x425a37(-0x9,-0x20)+'-all\x20--con'+_0x425a37(0x2f,0x1b))),process[_0x564ea0(0x25e,0x263)](0x1));const _0x2d13f2=_0x2131bb(_0xfe4da1[_0x564ea0(0x259,0x238)])[_0x425a37(0x1f,0x16)](),_0x498c16=_0x386de[_0x564ea0(0x241,0x258)+'es']({'limit':0xf423f}),_0x2504fb=_0x498c16['map'](_0x533645=>_0x533645['id']),_0x40f152=_0x386de['deleteMemo'+_0x425a37(-0xf,-0x1b)](_0x2504fb);_0x2d13f2[_0x425a37(0x15,0x19)](_0x2b7df8['green'](_0x564ea0(0x255,0x279)+_0x40f152+'\x20memories'));return;}else _0x33cf7c[_0x425a37(0x23,0x1e)](_0x56afbb[_0x564ea0(0x25d,0x25a)](_0x59eb1d[_0x425a37(-0xe,-0x13)])),_0x9ed1be[_0x425a37(0x10,-0x4)](_0x5b5889['yellow']('Use:\x20a2a-m'+_0x564ea0(0x248,0x231)+'id>')),_0x15ae93[_0x425a37(0x1c,-0x4)](_0x29e936[_0x425a37(-0x31,-0x10)]('Or:\x20a2a-me'+_0x564ea0(0x258,0x238)+_0x425a37(0x3,0x26)+_0x425a37(-0x2a,-0x1e))),_0x560057['exit'](0x1);}!_0xb41701&&(console[_0x564ea0(0x274,0x284)](_0x2b7df8['red'](_0x564ea0(0x242,0x251)+_0x425a37(-0x4,0x12)+_0x425a37(-0x1d,-0xb))),console['log'](_0x2b7df8['yellow'](_0xfe4da1['wFsAB'])),console['log'](_0x2b7df8[_0x564ea0(0x246,0x254)](_0xfe4da1['YCBmi'])),process[_0x564ea0(0x25e,0x25e)](0x1));const _0x412150=_0x386de[_0x425a37(-0xb,-0x1f)](_0xb41701);!_0x412150&&(console[_0x564ea0(0x274,0x298)](_0x2b7df8[_0x425a37(0x3,0x7)]('Error:\x20Mem'+_0x564ea0(0x256,0x26a)+'D\x20'+_0xb41701+'\x20not\x20found')),process['exit'](0x1)),_0x386de[_0x564ea0(0x27a,0x28c)+'ry'](_0xb41701),console['log'](_0x2b7df8[_0x564ea0(0x26e,0x289)](_0x564ea0(0x25f,0x24b)+_0xb41701+_0x425a37(0x2,0x6)));}catch(_0x25822b){console[_0x564ea0(0x274,0x269)](_0x2b7df8[_0x564ea0(0x25d,0x281)](_0xfe4da1[_0x425a37(0x2c,0x20)]),_0x25822b),process['exit'](0x1);}finally{_0xfe4da1['hWMWG'](_0x425a37(0xb,0xd),_0x425a37(0x1b,0x1a))?_0x386de[_0x564ea0(0x267,0x26e)]():(_0x584b75[_0x564ea0(0x274,0x264)](_0xf4464b[_0x564ea0(0x25d,0x278)]('Error:\x20--c'+'onfirm\x20is\x20'+_0x425a37(0x44,0x23)+_0x425a37(0x22,0x1)+_0x564ea0(0x278,0x28a))),_0x10338d[_0x564ea0(0x252,0x262)](_0x3cea7f[_0x564ea0(0x246,0x23d)](_0xfe4da1['qzJFS'])),_0x1a439b['exit'](0x1));}});}function _0x4782(){const _0x56f6b1=['Awq+','z3jLzw4','C3vJy2vLza','uw5Pwgy','zMLYBq','ywXS','nZe1mdiYzMDxBKfi','zxjYB3i','otCWmZq3mLn1vLPysa','uw1qAxG','Dg8GCMvTB3zL','ls1HBgW','CMvXDwLYzwqGDW','zgvSzxrLtwvTBW','ig1LBw9YAwvZ','ywXSic0Ty29UzG','uMvTB3zLigfSBa','mZzLC0f3v0G','mJq1twfNtMXK','otqYodyWn095DvbirW','rxjYB3iGCMvTBW','vxnLoIbHmMeTBq','zw1VCNKGCM0Glq','z2v0twvTB3j5','AxjT','C2Phrgu','mtGXmfHwB0jLAa','CMLLCW','rxjYB3i6ic0TyW','y29UzMLYBq','AfDnv0C','B25MAxjTigLZia','Aw5PDgLHBgL6zq','BgLZDe1LBw9YAq','rxjYB3i6ie1LBq','ufbqwLq','nJyZmtLsquX2Cfy','uMvTB3zLig1LBq','EwvSBg93','B3j5khmP','zw1VCNKGCM0Gpa','Cgf0Aa','yxjNDw1LBNq','CMvXDwLYzwq','DwLYzwqGD2L0Aa','otm3otG0nujSCM1tuG','zgvZy3jPChrPBW','qMLbqve','w2LKxq','B3b0Aw9U','Bg9N','wKfxC3K','ic0TywXSkq','4PYtifjLBw92zwqG','B3j5ihDPDgGGsq','AgvUihvZAw5Nia','Bw9YEsbYBsaTlq','De5vyLK','u0vzq2i','nZC4mdm1q3bit3rq','ihjLBw92zwq','CMvK','zxHPDa','4PYtie1LBw9YEsa','q29UzMLYBsbYzq','DMLUzYbTzw1VCG','twvTB3j5ieLeia','D2LRuKO','mtqYodrRAwTsDM8','Bw92ywWGkhjLCq','ngr1Auj3qW','y2XVC2u','B3j5ieLeigLZia','lwfSBcaTlwnVBG','BgWGBwvTB3jPzq','whb6D1C','C3rHCNq'];_0x4782=function(){return _0x56f6b1;};return _0x4782();}
@@ -1,90 +1 @@
1
- /**
2
- * Search Command
3
- */
4
- import { Command } from 'commander';
5
- import { ConfigManager } from '../../config/manager.js';
6
- import { MemoryDatabase } from '../../db/database.js';
7
- import { HybridRanker } from '../../search/ranker.js';
8
- import { createEmbeddingProvider } from '../../embedding/index.js';
9
- export function searchCommand() {
10
- return new Command('search')
11
- .description('Search memories')
12
- .argument('<query>', 'Search query')
13
- .option('-l, --limit <n>', 'Max results', '10')
14
- .option('-c, --category <category>', 'Filter by category')
15
- .option('-t, --tier <tier>', 'Filter by tier')
16
- .option('-p, --project <path>', 'Filter by project path')
17
- .action(async (query, options) => {
18
- const config = new ConfigManager().load();
19
- const db = new MemoryDatabase(config.db.path);
20
- try {
21
- db.initialize();
22
- const parsedLimit = parseInt(options.limit, 10);
23
- const limit = Number.isNaN(parsedLimit) || parsedLimit < 1 ? 10 : parsedLimit;
24
- const category = options.category;
25
- const tier = options.tier;
26
- const projectPath = options.project;
27
- let results;
28
- try {
29
- // FTS 결과
30
- const ftsResults = db.search({
31
- query,
32
- limit: limit * 2,
33
- category,
34
- tier,
35
- projectPath,
36
- });
37
- // Vector 결과 (embedding provider 사용 가능한 경우)
38
- let vectorResults = [];
39
- if (config.embedding?.provider) {
40
- const embeddingProvider = createEmbeddingProvider(config.embedding, config.llm);
41
- const queryEmbedding = await embeddingProvider.embed(query);
42
- vectorResults = db.searchByVector(queryEmbedding, limit * 2, 0.5, projectPath).filter((r) => {
43
- if (category && r.memory.category !== category)
44
- return false;
45
- if (tier && r.memory.tier !== tier)
46
- return false;
47
- return true;
48
- });
49
- }
50
- // HybridRanker로 RRF 통합
51
- const ranker = new HybridRanker({
52
- categoryBoost: true,
53
- tierBoost: true,
54
- });
55
- const ranked = ranker.rank(ftsResults, vectorResults);
56
- results = ranked.slice(0, limit).map((r) => ({
57
- memory: r.memory,
58
- score: r.score,
59
- matchType: 'hybrid',
60
- }));
61
- }
62
- catch {
63
- // HybridRanker 실패 시 FTS fallback
64
- results = db.search({
65
- query,
66
- limit,
67
- category,
68
- tier,
69
- projectPath,
70
- });
71
- }
72
- if (results.length === 0) {
73
- console.log('No memories found.');
74
- return;
75
- }
76
- console.log(`Found ${results.length} memories:\n`);
77
- for (const result of results) {
78
- console.log(`--- [${result.memory.category}] score: ${result.score.toFixed(2)} (${result.matchType})`);
79
- console.log(`ID: ${result.memory.id}`);
80
- console.log(`Tags: ${result.memory.tags.join(', ')}`);
81
- console.log(result.memory.content.slice(0, 200));
82
- console.log('');
83
- }
84
- }
85
- finally {
86
- db.close();
87
- }
88
- });
89
- }
90
- //# sourceMappingURL=search.js.map
1
+ (function(_0x47479f,_0x4379c8){function _0x477302(_0x3c24f0,_0x52d5b0){return _0x2c90(_0x3c24f0- -0x5d,_0x52d5b0);}const _0x43c72d=_0x47479f();function _0x166cbd(_0x573834,_0x3adf7c){return _0x2c90(_0x573834-0x25b,_0x3adf7c);}while(!![]){try{const _0x273515=-parseInt(_0x477302(0xa4,0x8b))/0x1+parseInt(_0x166cbd(0x367,0x368))/0x2+-parseInt(_0x166cbd(0x35e,0x36b))/0x3*(parseInt(_0x166cbd(0x354,0x356))/0x4)+-parseInt(_0x166cbd(0x368,0x370))/0x5+parseInt(_0x477302(0x93,0x8f))/0x6*(parseInt(_0x477302(0xae,0xae))/0x7)+parseInt(_0x477302(0x97,0xb7))/0x8*(-parseInt(_0x166cbd(0x360,0x34e))/0x9)+parseInt(_0x166cbd(0x36e,0x37d))/0xa;if(_0x273515===_0x4379c8)break;else _0x43c72d['push'](_0x43c72d['shift']());}catch(_0x2e585f){_0x43c72d['push'](_0x43c72d['shift']());}}}(_0x493b,0xf28c1));function _0x2c90(_0x4e7163,_0x49314b){_0x4e7163=_0x4e7163-0xdf;const _0x493be6=_0x493b();let _0x2c901b=_0x493be6[_0x4e7163];if(_0x2c90['WMTsUo']===undefined){var _0x334035=function(_0x4ebf22){const _0xf43ec6='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x16aad4='',_0x2220af='';for(let _0x21e49b=0x0,_0x37d66,_0x4fadad,_0x1f8a10=0x0;_0x4fadad=_0x4ebf22['charAt'](_0x1f8a10++);~_0x4fadad&&(_0x37d66=_0x21e49b%0x4?_0x37d66*0x40+_0x4fadad:_0x4fadad,_0x21e49b++%0x4)?_0x16aad4+=String['fromCharCode'](0xff&_0x37d66>>(-0x2*_0x21e49b&0x6)):0x0){_0x4fadad=_0xf43ec6['indexOf'](_0x4fadad);}for(let _0xf5e147=0x0,_0x37936c=_0x16aad4['length'];_0xf5e147<_0x37936c;_0xf5e147++){_0x2220af+='%'+('00'+_0x16aad4['charCodeAt'](_0xf5e147)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2220af);};_0x2c90['lqFAnS']=_0x334035,_0x2c90['WpzXrK']={},_0x2c90['WMTsUo']=!![];}const _0x4b3525=_0x493be6[0x0],_0x352005=_0x4e7163+_0x4b3525,_0x188e8f=_0x2c90['WpzXrK'][_0x352005];return!_0x188e8f?(_0x2c901b=_0x2c90['lqFAnS'](_0x2c901b),_0x2c90['WpzXrK'][_0x352005]=_0x2c901b):_0x2c901b=_0x188e8f,_0x2c901b;}import{Command}from'commander';function _0x493b(){const _0x1558d4=['yxjNDw1LBNq','mtaZnJC3mZbOD0HrsLG','ChjVAMvJDcbWyq','C2vHCMnOqNLwzq','BwvTB3j5','y3rVCG','zgvZy3jPChrPBW','zwn0idXWyxrOpG','zw1IzwrKAw5N','BgLTAxq','Bg9Hza','Cgf0Aa','BgXT','C2XPy2u','Ee9izuu','ig1LBw9YAwvZoG','z1LSA3u','rgvLwNC','rM91BMqG','suq6ia','C0Tlugq','lxqSic0TDgLLCG','Dca8BJ4','y2f0zwDVCNK','A3HivLu','Bg9N','s1jtDK0','y29UDgvUDa','swLgBgG','nJG5nty5oeDUy2TIAW','lwWSic0TBgLTAq','BgvUz3rO','lxaSic0TChjVAG','mtmWnZqYmdb6wMPSruG','lwmSic0Ty2f0zq','DgLLCG','idX0AwvYpG','rMLSDgvYigj5ia','ngXlz3zlCq','Bwf0y2HuExbL','vuX1q1m','ls0TifS','CYbMB3vUzc4','y2XVC2u','DgfNCW','tMTKt00','mZa0mtzMDvzMCem','ChjVAMvJDa','otuXode2Efv6Afns','zMLSDgvY','owXvCKzlDG','tM8GBwvTB3jPzq','wwDpr00','yMzhCLa','AhLICMLK','B3b0Aw9U','n3vKrej4yG','mJa1mJyZmNzvsezeEG','mte4ndy4mhPPy2TfCW','Axnoyu4','u2vHCMnOihf1zq','C2vHCMnO','z29YEsa8y2f0zq'];_0x493b=function(){return _0x1558d4;};return _0x493b();}import{ConfigManager}from'../../config/manager.js';import{MemoryDatabase}from'../../db/database.js';import{HybridRanker}from'../../search/ranker.js';import{createEmbeddingProvider}from'../../embedding/index.js';export function searchCommand(){const _0x4f13cc={'IiFlh':function(_0x469c0a,_0x1e2ed6){return _0x469c0a!==_0x1e2ed6;},'ULuCS':function(_0x247211,_0x352808){return _0x247211<_0x352808;},'bfGrP':function(_0x2b5d5f,_0x274505){return _0x2b5d5f!==_0x274505;},'YgOGM':_0x2a94c4(-0x1f4,-0x1ea),'YytPy':function(_0x22e718,_0x18f16f){return _0x22e718*_0x18f16f;},'xOHeE':'Search\x20mem'+'ories','KRSvM':'<query>','sKKPd':_0x2a94c4(-0x1ee,-0x1d6)+'category'};function _0x2a94c4(_0x1ae753,_0x56731b){return _0x2c90(_0x56731b- -0x2ce,_0x1ae753);}function _0x25fa98(_0x387713,_0x8a65dc){return _0x2c90(_0x387713- -0x5b,_0x8a65dc);}return new Command('search')[_0x2a94c4(-0x1be,-0x1b6)+'n'](_0x4f13cc[_0x25fa98(0x86,0x6e)])[_0x25fa98(0xb7,0xcb)](_0x4f13cc[_0x2a94c4(-0x1c9,-0x1e1)],_0x25fa98(0xb4,0xb0)+'ry')[_0x25fa98(0xaf,0xa2)](_0x25fa98(0x96,0x9b)+_0x25fa98(0x8e,0x8e),'Max\x20result'+'s','10')[_0x2a94c4(-0x1cb,-0x1c4)](_0x2a94c4(-0x1d5,-0x1d9)+_0x2a94c4(-0x1c3,-0x1bd)+'gory>',_0x4f13cc[_0x2a94c4(-0x1d7,-0x1e7)])[_0x25fa98(0xaf,0x93)](_0x2a94c4(-0x1c7,-0x1e6)+_0x25fa98(0x9c,0xa6),_0x2a94c4(-0x1c0,-0x1d6)+'tier')[_0x25fa98(0xaf,0xb0)](_0x25fa98(0x98,0x8e)+_0x25fa98(0xbe,0xdc),_0x2a94c4(-0x1f2,-0x1d6)+_0x2a94c4(-0x1a0,-0x1ba)+'th')['action'](async(_0xa5c72b,_0xfa0dd6)=>{const _0x354580={'NkdOM':function(_0x139c59,_0x131eb6){return _0x139c59!==_0x131eb6;},'kxHVU':function(_0xcc0fa0,_0x46d277){return _0x4f13cc['IiFlh'](_0xcc0fa0,_0x46d277);},'gYlku':function(_0x2dbbab,_0x155903){function _0x4f8040(_0x14e8e2,_0x8c63ae){return _0x2c90(_0x14e8e2-0x3e0,_0x8c63ae);}return _0x4f13cc[_0x4f8040(0x4cf,0x4b3)](_0x2dbbab,_0x155903);}};function _0x50a740(_0x5a58bc,_0x51bb7c){return _0x25fa98(_0x5a58bc-0x2d8,_0x51bb7c);}const _0x2ccca3=new ConfigManager()[_0x50a740(0x399,0x3af)]();function _0x3d6530(_0x1821a7,_0x26fb6d){return _0x25fa98(_0x26fb6d-0x3aa,_0x1821a7);}const _0x18789b=new MemoryDatabase(_0x2ccca3['db'][_0x50a740(0x39a,0x39a)]);try{_0x18789b['initialize']();const _0x3485d9=parseInt(_0xfa0dd6[_0x50a740(0x398,0x37d)],0xa),_0x2235dd=Number[_0x50a740(0x38b,0x374)](_0x3485d9)||_0x4f13cc[_0x3d6530(0x44c,0x44a)](_0x3485d9,0x1)?0xa:_0x3485d9,_0x215f67=_0xfa0dd6['category'],_0x4314a9=_0xfa0dd6[_0x50a740(0x373,0x380)],_0x145960=_0xfa0dd6[_0x50a740(0x37f,0x388)];let _0xcdef5d;try{if(_0x4f13cc[_0x3d6530(0x453,0x457)]('jcJml',_0x4f13cc[_0x50a740(0x384,0x375)])){const _0x5c40e4=_0x18789b[_0x3d6530(0x46d,0x45f)]({'query':_0xa5c72b,'limit':_0x4f13cc['YytPy'](_0x2235dd,0x2),'category':_0x215f67,'tier':_0x4314a9,'projectPath':_0x145960});let _0x45093d=[];if(_0x2ccca3[_0x3d6530(0x480,0x469)]?.['provider']){const _0x45e7bf=createEmbeddingProvider(_0x2ccca3[_0x3d6530(0x45f,0x469)],_0x2ccca3[_0x3d6530(0x42f,0x42e)]),_0x38383c=await _0x45e7bf['embed'](_0xa5c72b);_0x45093d=_0x18789b[_0x50a740(0x392,0x39e)+_0x3d6530(0x47d,0x466)](_0x38383c,_0x2235dd*0x2,0.5,_0x145960)[_0x3d6530(0x45d,0x453)](_0x2f3ecd=>{function _0x5b3f9c(_0x3867da,_0x45c45f){return _0x50a740(_0x45c45f- -0x4bd,_0x3867da);}function _0x529879(_0x120f6d,_0x246336){return _0x50a740(_0x120f6d- -0x5d0,_0x246336);}if(_0x215f67&&_0x2f3ecd[_0x529879(-0x23d,-0x248)][_0x5b3f9c(-0x151,-0x156)]!==_0x215f67)return![];if(_0x4314a9&&_0x354580[_0x529879(-0x253,-0x241)](_0x2f3ecd['memory']['tier'],_0x4314a9))return![];return!![];});}const _0x2bc81a=new HybridRanker({'categoryBoost':!![],'tierBoost':!![]}),_0xb811f4=_0x2bc81a['rank'](_0x5c40e4,_0x45093d);_0xcdef5d=_0xb811f4[_0x3d6530(0x41e,0x42f)](0x0,_0x2235dd)['map'](_0x3de420=>({'memory':_0x3de420[_0x3d6530(0x477,0x465)],'score':_0x3de420['score'],'matchType':_0x3d6530(0x468,0x458)}));}else{if(_0xf5e147&&_0x354580[_0x50a740(0x368,0x374)](_0x37936c['memory']['category'],_0x175a1e))return![];if(_0xe23051&&_0x354580[_0x50a740(0x360,0x374)](_0x416d93[_0x3d6530(0x46a,0x465)]['tier'],_0x2e9353))return![];return!![];}}catch{_0xcdef5d=_0x18789b['search']({'query':_0xa5c72b,'limit':_0x2235dd,'category':_0x215f67,'tier':_0x4314a9,'projectPath':_0x145960});}if(_0xcdef5d[_0x50a740(0x36f,0x36b)]===0x0){console[_0x50a740(0x369,0x35e)](_0x3d6530(0x469,0x455)+_0x3d6530(0x456,0x44c));return;}console[_0x3d6530(0x441,0x43b)](_0x3d6530(0x42c,0x434)+_0xcdef5d[_0x50a740(0x36f,0x36b)]+(_0x3d6530(0x434,0x431)+'\x0a'));for(const _0x2b441b of _0xcdef5d){console['log'](_0x50a740(0x379,0x37d)+_0x2b441b['memory']['category']+']\x20score:\x20'+_0x2b441b['score']['toFixed'](0x2)+'\x20('+_0x2b441b[_0x50a740(0x377,0x370)]+')'),console['log'](_0x3d6530(0x433,0x435)+_0x2b441b['memory']['id']),console[_0x3d6530(0x451,0x43b)]('Tags:\x20'+_0x2b441b[_0x50a740(0x393,0x3ac)][_0x50a740(0x37c,0x37e)]['join'](',\x20')),console[_0x3d6530(0x427,0x43b)](_0x2b441b['memory'][_0x50a740(0x36b,0x355)]['slice'](0x0,0xc8)),console['log']('');}}finally{_0x18789b[_0x50a740(0x37b,0x372)]();}});}