@su-record/vibe 2.6.27 → 2.6.28

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 (246) hide show
  1. package/CLAUDE.md +202 -202
  2. package/LICENSE +21 -21
  3. package/README.md +267 -267
  4. package/agents/architect-low.md +41 -41
  5. package/agents/architect-medium.md +59 -59
  6. package/agents/architect.md +80 -80
  7. package/agents/build-error-resolver.md +115 -115
  8. package/agents/compounder.md +261 -261
  9. package/agents/diagrammer.md +178 -178
  10. package/agents/docs/api-documenter.md +99 -99
  11. package/agents/docs/changelog-writer.md +93 -93
  12. package/agents/e2e-tester.md +266 -266
  13. package/agents/explorer-low.md +42 -42
  14. package/agents/explorer-medium.md +59 -59
  15. package/agents/explorer.md +48 -48
  16. package/agents/implementer-low.md +43 -43
  17. package/agents/implementer-medium.md +52 -52
  18. package/agents/implementer.md +54 -54
  19. package/agents/planning/requirements-analyst.md +84 -84
  20. package/agents/planning/ux-advisor.md +83 -83
  21. package/agents/qa/acceptance-tester.md +86 -86
  22. package/agents/qa/edge-case-finder.md +93 -93
  23. package/agents/refactor-cleaner.md +143 -143
  24. package/agents/research/best-practices-agent.md +199 -199
  25. package/agents/research/codebase-patterns-agent.md +157 -157
  26. package/agents/research/framework-docs-agent.md +188 -188
  27. package/agents/research/security-advisory-agent.md +213 -213
  28. package/agents/review/architecture-reviewer.md +107 -107
  29. package/agents/review/complexity-reviewer.md +116 -116
  30. package/agents/review/data-integrity-reviewer.md +88 -88
  31. package/agents/review/git-history-reviewer.md +103 -103
  32. package/agents/review/performance-reviewer.md +86 -86
  33. package/agents/review/python-reviewer.md +150 -150
  34. package/agents/review/rails-reviewer.md +139 -139
  35. package/agents/review/react-reviewer.md +144 -144
  36. package/agents/review/security-reviewer.md +80 -80
  37. package/agents/review/simplicity-reviewer.md +140 -140
  38. package/agents/review/test-coverage-reviewer.md +116 -116
  39. package/agents/review/typescript-reviewer.md +127 -127
  40. package/agents/searcher.md +54 -54
  41. package/agents/simplifier.md +120 -120
  42. package/agents/tester.md +49 -49
  43. package/agents/ui-previewer.md +268 -268
  44. package/commands/vibe.analyze.md +356 -356
  45. package/commands/vibe.reason.md +329 -329
  46. package/commands/vibe.review.md +423 -423
  47. package/commands/vibe.run.md +1313 -1313
  48. package/commands/vibe.spec.md +1054 -1054
  49. package/commands/vibe.spec.review.md +412 -412
  50. package/commands/vibe.trace.md +161 -161
  51. package/commands/vibe.utils.md +376 -376
  52. package/commands/vibe.verify.md +375 -375
  53. package/dist/cli/collaborator.js +52 -52
  54. package/dist/cli/detect.js +32 -32
  55. package/dist/cli/hud.js +20 -20
  56. package/dist/cli/index.js +112 -112
  57. package/dist/cli/llm.js +144 -144
  58. package/dist/cli/mcp.d.ts +49 -0
  59. package/dist/cli/mcp.d.ts.map +1 -0
  60. package/dist/cli/mcp.js +169 -0
  61. package/dist/cli/mcp.js.map +1 -0
  62. package/dist/cli/postinstall.d.ts.map +1 -1
  63. package/dist/cli/postinstall.js +886 -858
  64. package/dist/cli/postinstall.js.map +1 -1
  65. package/dist/cli/setup/GlobalInstaller.d.ts +6 -0
  66. package/dist/cli/setup/GlobalInstaller.d.ts.map +1 -1
  67. package/dist/cli/setup/GlobalInstaller.js +26 -0
  68. package/dist/cli/setup/GlobalInstaller.js.map +1 -1
  69. package/dist/lib/DeepInit.js +24 -24
  70. package/dist/lib/IterationTracker.js +11 -11
  71. package/dist/lib/PythonParser.js +108 -108
  72. package/dist/lib/ReviewRace.js +96 -96
  73. package/dist/lib/SkillFrontmatter.js +28 -28
  74. package/dist/lib/SkillQualityGate.js +9 -9
  75. package/dist/lib/SkillRepository.js +159 -159
  76. package/dist/lib/UltraQA.js +77 -77
  77. package/dist/lib/gemini-api.js +5 -5
  78. package/dist/lib/gemini-mcp.d.ts +10 -0
  79. package/dist/lib/gemini-mcp.d.ts.map +1 -0
  80. package/dist/lib/gemini-mcp.js +353 -0
  81. package/dist/lib/gemini-mcp.js.map +1 -0
  82. package/dist/lib/gpt-api.js +4 -4
  83. package/dist/lib/gpt-mcp.d.ts +10 -0
  84. package/dist/lib/gpt-mcp.d.ts.map +1 -0
  85. package/dist/lib/gpt-mcp.js +352 -0
  86. package/dist/lib/gpt-mcp.js.map +1 -0
  87. package/dist/lib/memory/KnowledgeGraph.js +4 -4
  88. package/dist/lib/memory/MemorySearch.js +43 -43
  89. package/dist/lib/memory/MemoryStorage.js +130 -130
  90. package/dist/lib/memory/ObservationStore.js +28 -28
  91. package/dist/lib/memory/SessionRAGRetriever.js +7 -7
  92. package/dist/lib/memory/SessionRAGStore.js +216 -216
  93. package/dist/lib/memory/SessionSummarizer.js +9 -9
  94. package/dist/orchestrator/AgentManager.js +12 -12
  95. package/dist/orchestrator/MultiLlmResearch.js +8 -8
  96. package/dist/orchestrator/SmartRouter.js +11 -11
  97. package/dist/orchestrator/SwarmOrchestrator.test.js +16 -16
  98. package/dist/orchestrator/parallelResearch.js +24 -24
  99. package/dist/tools/analytics/getUsageAnalytics.d.ts +10 -0
  100. package/dist/tools/analytics/getUsageAnalytics.d.ts.map +1 -0
  101. package/dist/tools/analytics/getUsageAnalytics.js +246 -0
  102. package/dist/tools/analytics/getUsageAnalytics.js.map +1 -0
  103. package/dist/tools/analytics/index.d.ts +5 -0
  104. package/dist/tools/analytics/index.d.ts.map +1 -0
  105. package/dist/tools/analytics/index.js +5 -0
  106. package/dist/tools/analytics/index.js.map +1 -0
  107. package/dist/tools/convention/analyzeComplexity.test.js +115 -115
  108. package/dist/tools/convention/getCodingGuide.d.ts +7 -0
  109. package/dist/tools/convention/getCodingGuide.d.ts.map +1 -0
  110. package/dist/tools/convention/getCodingGuide.js +69 -0
  111. package/dist/tools/convention/getCodingGuide.js.map +1 -0
  112. package/dist/tools/convention/validateCodeQuality.test.js +104 -104
  113. package/dist/tools/planning/analyzeRequirements.d.ts +9 -0
  114. package/dist/tools/planning/analyzeRequirements.d.ts.map +1 -0
  115. package/dist/tools/planning/analyzeRequirements.js +171 -0
  116. package/dist/tools/planning/analyzeRequirements.js.map +1 -0
  117. package/dist/tools/planning/createUserStories.d.ts +9 -0
  118. package/dist/tools/planning/createUserStories.d.ts.map +1 -0
  119. package/dist/tools/planning/createUserStories.js +124 -0
  120. package/dist/tools/planning/createUserStories.js.map +1 -0
  121. package/dist/tools/planning/featureRoadmap.d.ts +10 -0
  122. package/dist/tools/planning/featureRoadmap.d.ts.map +1 -0
  123. package/dist/tools/planning/featureRoadmap.js +207 -0
  124. package/dist/tools/planning/featureRoadmap.js.map +1 -0
  125. package/dist/tools/planning/generatePrd.d.ts +11 -0
  126. package/dist/tools/planning/generatePrd.d.ts.map +1 -0
  127. package/dist/tools/planning/generatePrd.js +161 -0
  128. package/dist/tools/planning/generatePrd.js.map +1 -0
  129. package/dist/tools/planning/index.d.ts +8 -0
  130. package/dist/tools/planning/index.d.ts.map +1 -0
  131. package/dist/tools/planning/index.js +8 -0
  132. package/dist/tools/planning/index.js.map +1 -0
  133. package/dist/tools/prompt/analyzePrompt.d.ts +7 -0
  134. package/dist/tools/prompt/analyzePrompt.d.ts.map +1 -0
  135. package/dist/tools/prompt/analyzePrompt.js +150 -0
  136. package/dist/tools/prompt/analyzePrompt.js.map +1 -0
  137. package/dist/tools/prompt/enhancePrompt.d.ts +8 -0
  138. package/dist/tools/prompt/enhancePrompt.d.ts.map +1 -0
  139. package/dist/tools/prompt/enhancePrompt.js +110 -0
  140. package/dist/tools/prompt/enhancePrompt.js.map +1 -0
  141. package/dist/tools/prompt/enhancePromptGemini.d.ts +8 -0
  142. package/dist/tools/prompt/enhancePromptGemini.d.ts.map +1 -0
  143. package/dist/tools/prompt/enhancePromptGemini.js +332 -0
  144. package/dist/tools/prompt/enhancePromptGemini.js.map +1 -0
  145. package/dist/tools/prompt/index.d.ts +7 -0
  146. package/dist/tools/prompt/index.d.ts.map +1 -0
  147. package/dist/tools/prompt/index.js +7 -0
  148. package/dist/tools/prompt/index.js.map +1 -0
  149. package/dist/tools/reasoning/applyReasoningFramework.d.ts +8 -0
  150. package/dist/tools/reasoning/applyReasoningFramework.d.ts.map +1 -0
  151. package/dist/tools/reasoning/applyReasoningFramework.js +266 -0
  152. package/dist/tools/reasoning/applyReasoningFramework.js.map +1 -0
  153. package/dist/tools/reasoning/index.d.ts +5 -0
  154. package/dist/tools/reasoning/index.d.ts.map +1 -0
  155. package/dist/tools/reasoning/index.js +5 -0
  156. package/dist/tools/reasoning/index.js.map +1 -0
  157. package/dist/tools/spec/prdParser.test.js +171 -171
  158. package/dist/tools/spec/specGenerator.js +169 -169
  159. package/dist/tools/spec/traceabilityMatrix.js +64 -64
  160. package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
  161. package/dist/tools/thinking/analyzeProblem.d.ts +7 -0
  162. package/dist/tools/thinking/analyzeProblem.d.ts.map +1 -0
  163. package/dist/tools/thinking/analyzeProblem.js +55 -0
  164. package/dist/tools/thinking/analyzeProblem.js.map +1 -0
  165. package/dist/tools/thinking/breakDownProblem.d.ts +8 -0
  166. package/dist/tools/thinking/breakDownProblem.d.ts.map +1 -0
  167. package/dist/tools/thinking/breakDownProblem.js +145 -0
  168. package/dist/tools/thinking/breakDownProblem.js.map +1 -0
  169. package/dist/tools/thinking/createThinkingChain.d.ts +7 -0
  170. package/dist/tools/thinking/createThinkingChain.d.ts.map +1 -0
  171. package/dist/tools/thinking/createThinkingChain.js +44 -0
  172. package/dist/tools/thinking/createThinkingChain.js.map +1 -0
  173. package/dist/tools/thinking/formatAsPlan.d.ts +9 -0
  174. package/dist/tools/thinking/formatAsPlan.d.ts.map +1 -0
  175. package/dist/tools/thinking/formatAsPlan.js +78 -0
  176. package/dist/tools/thinking/formatAsPlan.js.map +1 -0
  177. package/dist/tools/thinking/index.d.ts +10 -0
  178. package/dist/tools/thinking/index.d.ts.map +1 -0
  179. package/dist/tools/thinking/index.js +10 -0
  180. package/dist/tools/thinking/index.js.map +1 -0
  181. package/dist/tools/thinking/stepByStepAnalysis.d.ts +8 -0
  182. package/dist/tools/thinking/stepByStepAnalysis.d.ts.map +1 -0
  183. package/dist/tools/thinking/stepByStepAnalysis.js +63 -0
  184. package/dist/tools/thinking/stepByStepAnalysis.js.map +1 -0
  185. package/dist/tools/thinking/thinkAloudProcess.d.ts +8 -0
  186. package/dist/tools/thinking/thinkAloudProcess.d.ts.map +1 -0
  187. package/dist/tools/thinking/thinkAloudProcess.js +80 -0
  188. package/dist/tools/thinking/thinkAloudProcess.js.map +1 -0
  189. package/hooks/hooks.json +115 -115
  190. package/hooks/scripts/code-check.js +70 -70
  191. package/hooks/scripts/code-review.js +22 -22
  192. package/hooks/scripts/complexity.js +22 -22
  193. package/hooks/scripts/compound.js +23 -23
  194. package/hooks/scripts/context-save.js +53 -53
  195. package/hooks/scripts/gemini-ui-gen.js +281 -281
  196. package/hooks/scripts/generate-brand-assets.js +474 -474
  197. package/hooks/scripts/hud-multiline.js +262 -262
  198. package/hooks/scripts/hud-status.js +291 -291
  199. package/hooks/scripts/keyword-detector.js +214 -214
  200. package/hooks/scripts/llm-orchestrate.js +171 -171
  201. package/hooks/scripts/post-edit.js +97 -97
  202. package/hooks/scripts/post-tool-verify.js +210 -210
  203. package/hooks/scripts/pre-tool-guard.js +125 -125
  204. package/hooks/scripts/prompt-dispatcher.js +161 -161
  205. package/hooks/scripts/recall.js +22 -22
  206. package/hooks/scripts/session-start.js +30 -30
  207. package/hooks/scripts/skill-injector.js +191 -191
  208. package/hooks/scripts/utils.js +97 -97
  209. package/languages/csharp-unity.md +515 -515
  210. package/languages/gdscript-godot.md +470 -470
  211. package/languages/ruby-rails.md +489 -489
  212. package/languages/typescript-angular.md +433 -433
  213. package/languages/typescript-astro.md +416 -416
  214. package/languages/typescript-electron.md +406 -406
  215. package/languages/typescript-nestjs.md +524 -524
  216. package/languages/typescript-svelte.md +407 -407
  217. package/languages/typescript-tauri.md +365 -365
  218. package/package.json +84 -84
  219. package/skills/brand-assets.md +141 -141
  220. package/skills/commerce-patterns.md +361 -361
  221. package/skills/context7-usage.md +102 -102
  222. package/skills/e2e-commerce.md +304 -304
  223. package/skills/frontend-design.md +92 -92
  224. package/skills/git-worktree.md +181 -181
  225. package/skills/parallel-research.md +77 -77
  226. package/skills/priority-todos.md +239 -239
  227. package/skills/seo-checklist.md +244 -244
  228. package/skills/tool-fallback.md +190 -190
  229. package/skills/vibe-capabilities.md +161 -161
  230. package/vibe/constitution.md +227 -227
  231. package/vibe/rules/core/communication-guide.md +98 -98
  232. package/vibe/rules/core/development-philosophy.md +52 -52
  233. package/vibe/rules/core/quick-start.md +102 -102
  234. package/vibe/rules/quality/bdd-contract-testing.md +393 -393
  235. package/vibe/rules/quality/checklist.md +276 -276
  236. package/vibe/rules/quality/testing-strategy.md +440 -440
  237. package/vibe/rules/standards/anti-patterns.md +541 -541
  238. package/vibe/rules/standards/code-structure.md +291 -291
  239. package/vibe/rules/standards/complexity-metrics.md +313 -313
  240. package/vibe/rules/standards/naming-conventions.md +198 -198
  241. package/vibe/setup.sh +31 -31
  242. package/vibe/templates/constitution-template.md +252 -252
  243. package/vibe/templates/contract-backend-template.md +526 -526
  244. package/vibe/templates/contract-frontend-template.md +599 -599
  245. package/vibe/templates/feature-template.md +96 -96
  246. package/vibe/templates/spec-template.md +221 -221
@@ -167,17 +167,17 @@ export class SmartRouter {
167
167
  const errorSummary = Object.entries(errors)
168
168
  .map(([provider, msg]) => `- ${provider}: ${msg}`)
169
169
  .join('\n');
170
- return `[External LLM Unavailable - Claude Direct Handling]
171
-
172
- All external LLMs failed. Claude should handle this ${type} task directly.
173
-
174
- **Original Request:**
175
- ${prompt}
176
-
177
- **Failed Providers:**
178
- ${errorSummary}
179
-
180
- **Action Required:**
170
+ return `[External LLM Unavailable - Claude Direct Handling]
171
+
172
+ All external LLMs failed. Claude should handle this ${type} task directly.
173
+
174
+ **Original Request:**
175
+ ${prompt}
176
+
177
+ **Failed Providers:**
178
+ ${errorSummary}
179
+
180
+ **Action Required:**
181
181
  Claude, please handle this task using your own capabilities. Do NOT retry external LLMs.`;
182
182
  }
183
183
  delay(ms) {
@@ -10,14 +10,14 @@ describe('SwarmOrchestrator', () => {
10
10
  expect(analysis.score).toBeLessThan(10);
11
11
  });
12
12
  it('복잡한 프롬프트는 높은 복잡도', async () => {
13
- const complexPrompt = `
14
- Implement a complete login feature:
15
- 1. Create the login form UI with React
16
- 2. Add form validation with Zod
17
- 3. Implement the API endpoint with authentication
18
- 4. Add error handling and loading states
19
- 5. Write unit tests for all components
20
- 6. Add security measures against CSRF
13
+ const complexPrompt = `
14
+ Implement a complete login feature:
15
+ 1. Create the login form UI with React
16
+ 2. Add form validation with Zod
17
+ 3. Implement the API endpoint with authentication
18
+ 4. Add error handling and loading states
19
+ 5. Write unit tests for all components
20
+ 6. Add security measures against CSRF
21
21
  `;
22
22
  const analysis = await analyzeTaskComplexity(complexPrompt);
23
23
  expect(analysis.score).toBeGreaterThan(15);
@@ -29,10 +29,10 @@ describe('SwarmOrchestrator', () => {
29
29
  expect(analysis.factors).toContain('5-files');
30
30
  });
31
31
  it('숫자 목록은 분할 제안 생성', async () => {
32
- const prompt = `
33
- 1. First do this task
34
- 2. Then do second task
35
- 3. Finally do third task
32
+ const prompt = `
33
+ 1. First do this task
34
+ 2. Then do second task
35
+ 3. Finally do third task
36
36
  `;
37
37
  const analysis = await analyzeTaskComplexity(prompt);
38
38
  expect(analysis.suggestedSplits?.length).toBeGreaterThanOrEqual(2);
@@ -65,10 +65,10 @@ describe('SwarmOrchestrator', () => {
65
65
  it('maxDepth 도달 시 분할 안함', async () => {
66
66
  // maxDepth: 0으로 설정하면 분할하지 않음
67
67
  const orchestrator = new SwarmOrchestrator({
68
- prompt: `
69
- 1. Task one
70
- 2. Task two
71
- 3. Task three
68
+ prompt: `
69
+ 1. Task one
70
+ 2. Task two
71
+ 3. Task three
72
72
  `,
73
73
  maxDepth: 0
74
74
  });
@@ -19,45 +19,45 @@ export function createResearchTasks(feature, techStack = []) {
19
19
  {
20
20
  name: 'best-practices-agent',
21
21
  category: 'best-practices',
22
- prompt: `Research best practices for implementing "${feature}" with ${stackStr}. Focus on:
23
- 1. Industry-standard patterns
24
- 2. Common pitfalls to avoid
25
- 3. Recommended libraries/tools
26
- 4. Testing strategies
27
-
22
+ prompt: `Research best practices for implementing "${feature}" with ${stackStr}. Focus on:
23
+ 1. Industry-standard patterns
24
+ 2. Common pitfalls to avoid
25
+ 3. Recommended libraries/tools
26
+ 4. Testing strategies
27
+
28
28
  Provide actionable recommendations.`
29
29
  },
30
30
  {
31
31
  name: 'framework-docs-agent',
32
32
  category: 'framework-docs',
33
- prompt: `Find the latest documentation for ${stackStr} related to "${feature}". Include:
34
- 1. Official API references
35
- 2. Configuration options
36
- 3. Migration guides if applicable
37
- 4. Code examples from official docs
38
-
33
+ prompt: `Find the latest documentation for ${stackStr} related to "${feature}". Include:
34
+ 1. Official API references
35
+ 2. Configuration options
36
+ 3. Migration guides if applicable
37
+ 4. Code examples from official docs
38
+
39
39
  Use context7 MCP if available for up-to-date documentation.`
40
40
  },
41
41
  {
42
42
  name: 'codebase-patterns-agent',
43
43
  category: 'codebase-patterns',
44
- prompt: `Analyze the current codebase for patterns related to "${feature}". Look for:
45
- 1. Similar existing implementations
46
- 2. Established conventions
47
- 3. Reusable utilities
48
- 4. Potential conflicts or dependencies
49
-
44
+ prompt: `Analyze the current codebase for patterns related to "${feature}". Look for:
45
+ 1. Similar existing implementations
46
+ 2. Established conventions
47
+ 3. Reusable utilities
48
+ 4. Potential conflicts or dependencies
49
+
50
50
  Use Glob and Grep to search the codebase.`
51
51
  },
52
52
  {
53
53
  name: 'security-advisory-agent',
54
54
  category: 'security-advisory',
55
- prompt: `Review security considerations for "${feature}" with ${stackStr}. Check:
56
- 1. OWASP Top 10 relevance
57
- 2. Authentication/authorization requirements
58
- 3. Data validation needs
59
- 4. Known vulnerabilities in dependencies
60
-
55
+ prompt: `Review security considerations for "${feature}" with ${stackStr}. Check:
56
+ 1. OWASP Top 10 relevance
57
+ 2. Authentication/authorization requirements
58
+ 3. Data validation needs
59
+ 4. Known vulnerabilities in dependencies
60
+
61
61
  Provide security recommendations.`
62
62
  }
63
63
  ];
@@ -0,0 +1,10 @@
1
+ import { ToolResult, ToolDefinition } from '../../types/tool.js';
2
+ export declare const getUsageAnalyticsDefinition: ToolDefinition;
3
+ interface GetUsageAnalyticsArgs {
4
+ type?: 'memory' | 'graph' | 'all';
5
+ timeRange?: '1d' | '7d' | '30d' | 'all';
6
+ detailed?: boolean;
7
+ }
8
+ export declare function getUsageAnalytics(args: GetUsageAnalyticsArgs): Promise<ToolResult>;
9
+ export {};
10
+ //# sourceMappingURL=getUsageAnalytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getUsageAnalytics.d.ts","sourceRoot":"","sources":["../../../src/tools/analytics/getUsageAnalytics.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAc,MAAM,qBAAqB,CAAC;AAG7E,eAAO,MAAM,2BAA2B,EAAE,cA0CzC,CAAC;AAEF,UAAU,qBAAqB;IAC7B,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;IAClC,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,CAqCxF"}
@@ -0,0 +1,246 @@
1
+ // v2.0 - Get usage analytics and telemetry
2
+ import { MemoryManager } from '../../lib/MemoryManager.js';
3
+ export const getUsageAnalyticsDefinition = {
4
+ name: 'get_usage_analytics',
5
+ description: `도구 사용 분석 및 통계를 조회합니다.
6
+
7
+ 키워드: 분석, 통계, 사용량, analytics, statistics, usage
8
+
9
+ **제공 정보:**
10
+ - 메모리 사용 통계
11
+ - 카테고리별 분포
12
+ - 시간별 사용 패턴
13
+ - 그래프 관계 통계
14
+
15
+ 사용 예시:
16
+ - "사용 통계 보여줘"
17
+ - "메모리 분석"`,
18
+ inputSchema: {
19
+ type: 'object',
20
+ properties: {
21
+ type: {
22
+ type: 'string',
23
+ description: '분석 유형',
24
+ enum: ['memory', 'graph', 'all']
25
+ },
26
+ timeRange: {
27
+ type: 'string',
28
+ description: '시간 범위',
29
+ enum: ['1d', '7d', '30d', 'all']
30
+ },
31
+ detailed: {
32
+ type: 'boolean',
33
+ description: '상세 정보 포함 여부 (기본값: false)'
34
+ }
35
+ }
36
+ },
37
+ annotations: {
38
+ title: 'Get Usage Analytics',
39
+ audience: ['user', 'assistant'],
40
+ readOnlyHint: true,
41
+ destructiveHint: false,
42
+ idempotentHint: true,
43
+ openWorldHint: false
44
+ }
45
+ };
46
+ export async function getUsageAnalytics(args) {
47
+ try {
48
+ const { type = 'all', timeRange = 'all', detailed = false } = args;
49
+ const memoryManager = MemoryManager.getInstance();
50
+ let output = '## Hi-AI 사용 분석\n\n';
51
+ // Memory statistics
52
+ if (type === 'memory' || type === 'all') {
53
+ output += await generateMemoryStats(memoryManager, timeRange, detailed);
54
+ }
55
+ // Graph statistics
56
+ if (type === 'graph' || type === 'all') {
57
+ output += await generateGraphStats(memoryManager, detailed);
58
+ }
59
+ // System info
60
+ output += `---\n### 시스템 정보\n\n`;
61
+ output += `- **Hi-AI 버전**: 2.0.0\n`;
62
+ output += `- **분석 시간**: ${new Date().toLocaleString('ko-KR')}\n`;
63
+ output += `- **시간 범위**: ${getTimeRangeLabel(timeRange)}\n`;
64
+ return {
65
+ content: [{
66
+ type: 'text',
67
+ text: output
68
+ }]
69
+ };
70
+ }
71
+ catch (error) {
72
+ return {
73
+ content: [{
74
+ type: 'text',
75
+ text: `✗ 분석 오류: ${error instanceof Error ? error.message : '알 수 없는 오류'}`
76
+ }]
77
+ };
78
+ }
79
+ }
80
+ async function generateMemoryStats(memoryManager, timeRange, detailed) {
81
+ const stats = memoryManager.getStats();
82
+ const allMemories = memoryManager.list();
83
+ let output = '### 메모리 통계\n\n';
84
+ output += `- **총 메모리 수**: ${stats.total}개\n`;
85
+ output += `- **카테고리 수**: ${Object.keys(stats.byCategory).length}개\n\n`;
86
+ // Category distribution
87
+ output += `#### 카테고리별 분포\n\n`;
88
+ const sortedCategories = Object.entries(stats.byCategory)
89
+ .sort((a, b) => b[1] - a[1]);
90
+ for (const [category, count] of sortedCategories) {
91
+ const percentage = ((count / stats.total) * 100).toFixed(1);
92
+ const bar = '█'.repeat(Math.round(count / stats.total * 20));
93
+ output += `- **${category}**: ${count}개 (${percentage}%) ${bar}\n`;
94
+ }
95
+ output += '\n';
96
+ // Time analysis
97
+ if (allMemories.length > 0) {
98
+ output += `#### 시간 분석\n\n`;
99
+ const now = new Date();
100
+ const filterDate = getFilterDate(timeRange);
101
+ const recentMemories = filterDate
102
+ ? allMemories.filter(m => new Date(m.timestamp) >= filterDate)
103
+ : allMemories;
104
+ // Group by day
105
+ const byDay = {};
106
+ for (const memory of recentMemories) {
107
+ const day = memory.timestamp.substring(0, 10);
108
+ byDay[day] = (byDay[day] || 0) + 1;
109
+ }
110
+ const sortedDays = Object.entries(byDay)
111
+ .sort((a, b) => b[0].localeCompare(a[0]))
112
+ .slice(0, 7);
113
+ if (sortedDays.length > 0) {
114
+ output += `**최근 일별 활동**:\n`;
115
+ for (const [day, count] of sortedDays) {
116
+ const bar = '▓'.repeat(Math.min(count, 20));
117
+ output += `- ${day}: ${count}개 ${bar}\n`;
118
+ }
119
+ output += '\n';
120
+ }
121
+ // Priority distribution
122
+ const priorityCounts = {};
123
+ for (const memory of allMemories) {
124
+ const priority = memory.priority || 0;
125
+ priorityCounts[priority] = (priorityCounts[priority] || 0) + 1;
126
+ }
127
+ if (Object.keys(priorityCounts).length > 1) {
128
+ output += `**우선순위 분포**:\n`;
129
+ for (const [priority, count] of Object.entries(priorityCounts).sort((a, b) => Number(b[0]) - Number(a[0]))) {
130
+ output += `- 우선순위 ${priority}: ${count}개\n`;
131
+ }
132
+ output += '\n';
133
+ }
134
+ }
135
+ // Detailed info
136
+ if (detailed && allMemories.length > 0) {
137
+ output += `#### 상세 정보\n\n`;
138
+ // Most recently accessed
139
+ const byAccess = [...allMemories]
140
+ .sort((a, b) => new Date(b.lastAccessed).getTime() - new Date(a.lastAccessed).getTime())
141
+ .slice(0, 5);
142
+ output += `**최근 접근한 메모리**:\n`;
143
+ for (const memory of byAccess) {
144
+ output += `- \`${memory.key}\` (${formatDate(memory.lastAccessed)})\n`;
145
+ }
146
+ output += '\n';
147
+ // Oldest memories
148
+ const oldest = [...allMemories]
149
+ .sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime())
150
+ .slice(0, 5);
151
+ output += `**가장 오래된 메모리**:\n`;
152
+ for (const memory of oldest) {
153
+ output += `- \`${memory.key}\` (${formatDate(memory.timestamp)})\n`;
154
+ }
155
+ output += '\n';
156
+ }
157
+ return output;
158
+ }
159
+ async function generateGraphStats(memoryManager, detailed) {
160
+ const graph = memoryManager.getMemoryGraph();
161
+ let output = '### 지식 그래프 통계\n\n';
162
+ output += `- **노드 수**: ${graph.nodes.length}개\n`;
163
+ output += `- **관계 수**: ${graph.edges.length}개\n`;
164
+ output += `- **클러스터 수**: ${graph.clusters.length}개\n\n`;
165
+ if (graph.edges.length > 0) {
166
+ // Relation type distribution
167
+ const relationTypes = {};
168
+ for (const edge of graph.edges) {
169
+ relationTypes[edge.relationType] = (relationTypes[edge.relationType] || 0) + 1;
170
+ }
171
+ output += `#### 관계 유형 분포\n\n`;
172
+ for (const [type, count] of Object.entries(relationTypes).sort((a, b) => b[1] - a[1])) {
173
+ output += `- **${type}**: ${count}개\n`;
174
+ }
175
+ output += '\n';
176
+ // Average connections per node
177
+ const avgConnections = (graph.edges.length * 2 / graph.nodes.length).toFixed(2);
178
+ output += `- **평균 연결 수**: ${avgConnections}개/노드\n`;
179
+ // Most connected nodes
180
+ const connectionCount = {};
181
+ for (const edge of graph.edges) {
182
+ connectionCount[edge.sourceKey] = (connectionCount[edge.sourceKey] || 0) + 1;
183
+ connectionCount[edge.targetKey] = (connectionCount[edge.targetKey] || 0) + 1;
184
+ }
185
+ const topConnected = Object.entries(connectionCount)
186
+ .sort((a, b) => b[1] - a[1])
187
+ .slice(0, 5);
188
+ if (topConnected.length > 0) {
189
+ output += `\n**가장 많이 연결된 노드**:\n`;
190
+ for (const [key, count] of topConnected) {
191
+ output += `- \`${key}\`: ${count}개 연결\n`;
192
+ }
193
+ output += '\n';
194
+ }
195
+ }
196
+ // Cluster info
197
+ if (graph.clusters.length > 0 && detailed) {
198
+ output += `#### 클러스터 상세\n\n`;
199
+ for (let i = 0; i < Math.min(graph.clusters.length, 5); i++) {
200
+ const cluster = graph.clusters[i];
201
+ output += `**클러스터 ${i + 1}** (${cluster.length}개 노드):\n`;
202
+ output += `- ${cluster.slice(0, 5).join(', ')}`;
203
+ if (cluster.length > 5) {
204
+ output += ` ... 외 ${cluster.length - 5}개`;
205
+ }
206
+ output += '\n';
207
+ }
208
+ output += '\n';
209
+ }
210
+ return output;
211
+ }
212
+ function getFilterDate(timeRange) {
213
+ const now = new Date();
214
+ switch (timeRange) {
215
+ case '1d':
216
+ return new Date(now.getTime() - 24 * 60 * 60 * 1000);
217
+ case '7d':
218
+ return new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);
219
+ case '30d':
220
+ return new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000);
221
+ default:
222
+ return null;
223
+ }
224
+ }
225
+ function getTimeRangeLabel(timeRange) {
226
+ switch (timeRange) {
227
+ case '1d':
228
+ return '최근 24시간';
229
+ case '7d':
230
+ return '최근 7일';
231
+ case '30d':
232
+ return '최근 30일';
233
+ default:
234
+ return '전체';
235
+ }
236
+ }
237
+ function formatDate(dateString) {
238
+ try {
239
+ const date = new Date(dateString);
240
+ return date.toLocaleDateString('ko-KR');
241
+ }
242
+ catch { /* ignore: optional operation */
243
+ return dateString;
244
+ }
245
+ }
246
+ //# sourceMappingURL=getUsageAnalytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getUsageAnalytics.js","sourceRoot":"","sources":["../../../src/tools/analytics/getUsageAnalytics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Analytics Tools - 사용 분석
3
+ */
4
+ export { getUsageAnalytics } from './getUsageAnalytics.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/analytics/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Analytics Tools - 사용 분석
3
+ */
4
+ export { getUsageAnalytics } from './getUsageAnalytics.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/analytics/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}