@su-record/vibe 2.6.16 → 2.6.18

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 (249) hide show
  1. package/CLAUDE.md +681 -681
  2. package/LICENSE +21 -21
  3. package/README.md +235 -203
  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/e2e-tester.md +266 -266
  11. package/agents/explorer-low.md +42 -42
  12. package/agents/explorer-medium.md +59 -59
  13. package/agents/explorer.md +48 -48
  14. package/agents/implementer-low.md +43 -43
  15. package/agents/implementer-medium.md +52 -52
  16. package/agents/implementer.md +54 -54
  17. package/agents/refactor-cleaner.md +143 -143
  18. package/agents/research/best-practices-agent.md +199 -199
  19. package/agents/research/codebase-patterns-agent.md +157 -157
  20. package/agents/research/framework-docs-agent.md +188 -188
  21. package/agents/research/security-advisory-agent.md +213 -213
  22. package/agents/review/architecture-reviewer.md +107 -107
  23. package/agents/review/complexity-reviewer.md +116 -116
  24. package/agents/review/data-integrity-reviewer.md +88 -88
  25. package/agents/review/git-history-reviewer.md +103 -103
  26. package/agents/review/performance-reviewer.md +86 -86
  27. package/agents/review/python-reviewer.md +150 -150
  28. package/agents/review/rails-reviewer.md +139 -139
  29. package/agents/review/react-reviewer.md +144 -144
  30. package/agents/review/security-reviewer.md +80 -80
  31. package/agents/review/simplicity-reviewer.md +140 -140
  32. package/agents/review/test-coverage-reviewer.md +116 -116
  33. package/agents/review/typescript-reviewer.md +127 -127
  34. package/agents/searcher.md +54 -54
  35. package/agents/simplifier.md +120 -120
  36. package/agents/tester.md +49 -49
  37. package/agents/ui-previewer.md +268 -268
  38. package/commands/vibe.analyze.md +356 -356
  39. package/commands/vibe.reason.md +329 -329
  40. package/commands/vibe.review.md +412 -412
  41. package/commands/vibe.run.md +1266 -1266
  42. package/commands/vibe.spec.md +1054 -1054
  43. package/commands/vibe.spec.review.md +319 -319
  44. package/commands/vibe.trace.md +161 -161
  45. package/commands/vibe.utils.md +376 -376
  46. package/commands/vibe.verify.md +375 -375
  47. package/dist/cli/collaborator.js +52 -52
  48. package/dist/cli/detect.js +32 -32
  49. package/dist/cli/hud.js +20 -20
  50. package/dist/cli/index.d.ts.map +1 -1
  51. package/dist/cli/index.js +120 -118
  52. package/dist/cli/index.js.map +1 -1
  53. package/dist/cli/llm.js +144 -144
  54. package/dist/cli/postinstall.d.ts +1 -0
  55. package/dist/cli/postinstall.d.ts.map +1 -1
  56. package/dist/cli/postinstall.js +859 -859
  57. package/dist/cli/postinstall.js.map +1 -1
  58. package/dist/cli/setup/ProjectSetup.d.ts +2 -2
  59. package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
  60. package/dist/cli/setup/ProjectSetup.js +51 -17
  61. package/dist/cli/setup/ProjectSetup.js.map +1 -1
  62. package/dist/lib/DeepInit.js +24 -24
  63. package/dist/lib/IterationTracker.js +11 -11
  64. package/dist/lib/PythonParser.js +108 -108
  65. package/dist/lib/ReviewRace.js +96 -96
  66. package/dist/lib/SkillFrontmatter.js +28 -28
  67. package/dist/lib/SkillQualityGate.js +9 -9
  68. package/dist/lib/SkillRepository.js +159 -159
  69. package/dist/lib/UltraQA.js +77 -77
  70. package/dist/lib/gemini-api.js +5 -5
  71. package/dist/lib/gpt-api.js +4 -4
  72. package/dist/lib/memory/KnowledgeGraph.js +4 -4
  73. package/dist/lib/memory/MemorySearch.js +20 -20
  74. package/dist/lib/memory/MemoryStorage.js +64 -64
  75. package/dist/orchestrator/AgentManager.js +12 -12
  76. package/dist/orchestrator/MultiLlmResearch.js +8 -8
  77. package/dist/orchestrator/SmartRouter.js +11 -11
  78. package/dist/orchestrator/SwarmOrchestrator.d.ts +144 -0
  79. package/dist/orchestrator/SwarmOrchestrator.d.ts.map +1 -0
  80. package/dist/orchestrator/SwarmOrchestrator.js +361 -0
  81. package/dist/orchestrator/SwarmOrchestrator.js.map +1 -0
  82. package/dist/orchestrator/SwarmOrchestrator.test.d.ts +5 -0
  83. package/dist/orchestrator/SwarmOrchestrator.test.d.ts.map +1 -0
  84. package/dist/orchestrator/SwarmOrchestrator.test.js +95 -0
  85. package/dist/orchestrator/SwarmOrchestrator.test.js.map +1 -0
  86. package/dist/orchestrator/index.d.ts +2 -0
  87. package/dist/orchestrator/index.d.ts.map +1 -1
  88. package/dist/orchestrator/index.js +2 -0
  89. package/dist/orchestrator/index.js.map +1 -1
  90. package/dist/orchestrator/parallelResearch.js +24 -24
  91. package/dist/tools/convention/analyzeComplexity.test.js +115 -115
  92. package/dist/tools/convention/validateCodeQuality.test.js +104 -104
  93. package/dist/tools/spec/prdParser.test.js +171 -171
  94. package/dist/tools/spec/specGenerator.js +169 -169
  95. package/dist/tools/spec/traceabilityMatrix.js +64 -64
  96. package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
  97. package/hooks/hooks.json +222 -222
  98. package/hooks/scripts/code-check.js +22 -22
  99. package/hooks/scripts/code-review.js +22 -22
  100. package/hooks/scripts/complexity.js +22 -22
  101. package/hooks/scripts/compound.js +23 -23
  102. package/hooks/scripts/context-save.js +33 -33
  103. package/hooks/scripts/gemini-ui-gen.js +281 -281
  104. package/hooks/scripts/generate-brand-assets.js +474 -474
  105. package/hooks/scripts/hud-multiline.js +262 -262
  106. package/hooks/scripts/hud-status.js +291 -291
  107. package/hooks/scripts/keyword-detector.js +214 -214
  108. package/hooks/scripts/llm-orchestrate.js +171 -171
  109. package/hooks/scripts/post-edit.js +97 -97
  110. package/hooks/scripts/post-tool-verify.js +210 -210
  111. package/hooks/scripts/pre-tool-guard.js +125 -125
  112. package/hooks/scripts/recall.js +22 -22
  113. package/hooks/scripts/session-start.js +30 -30
  114. package/hooks/scripts/skill-injector.js +191 -191
  115. package/hooks/scripts/utils.js +97 -97
  116. package/languages/csharp-unity.md +515 -515
  117. package/languages/gdscript-godot.md +470 -470
  118. package/languages/ruby-rails.md +489 -489
  119. package/languages/typescript-angular.md +433 -433
  120. package/languages/typescript-astro.md +416 -416
  121. package/languages/typescript-electron.md +406 -406
  122. package/languages/typescript-nestjs.md +524 -524
  123. package/languages/typescript-svelte.md +407 -407
  124. package/languages/typescript-tauri.md +365 -365
  125. package/package.json +84 -84
  126. package/skills/brand-assets.md +141 -141
  127. package/skills/commerce-patterns.md +361 -361
  128. package/skills/context7-usage.md +102 -102
  129. package/skills/e2e-commerce.md +304 -304
  130. package/skills/frontend-design.md +92 -92
  131. package/skills/git-worktree.md +181 -181
  132. package/skills/parallel-research.md +77 -77
  133. package/skills/priority-todos.md +239 -239
  134. package/skills/seo-checklist.md +244 -244
  135. package/skills/tool-fallback.md +190 -190
  136. package/skills/vibe-capabilities.md +161 -161
  137. package/vibe/constitution.md +227 -227
  138. package/vibe/rules/core/communication-guide.md +98 -98
  139. package/vibe/rules/core/development-philosophy.md +52 -52
  140. package/vibe/rules/core/quick-start.md +102 -102
  141. package/vibe/rules/quality/bdd-contract-testing.md +393 -393
  142. package/vibe/rules/quality/checklist.md +276 -276
  143. package/vibe/rules/quality/testing-strategy.md +440 -440
  144. package/vibe/rules/standards/anti-patterns.md +541 -541
  145. package/vibe/rules/standards/code-structure.md +291 -291
  146. package/vibe/rules/standards/complexity-metrics.md +313 -313
  147. package/vibe/rules/standards/naming-conventions.md +198 -198
  148. package/vibe/setup.sh +31 -31
  149. package/vibe/templates/constitution-template.md +252 -252
  150. package/vibe/templates/contract-backend-template.md +526 -526
  151. package/vibe/templates/contract-frontend-template.md +599 -599
  152. package/vibe/templates/feature-template.md +96 -96
  153. package/vibe/templates/spec-template.md +221 -221
  154. package/dist/cli/mcp.d.ts +0 -49
  155. package/dist/cli/mcp.d.ts.map +0 -1
  156. package/dist/cli/mcp.js +0 -169
  157. package/dist/cli/mcp.js.map +0 -1
  158. package/dist/lib/gemini-mcp.d.ts +0 -10
  159. package/dist/lib/gemini-mcp.d.ts.map +0 -1
  160. package/dist/lib/gemini-mcp.js +0 -353
  161. package/dist/lib/gemini-mcp.js.map +0 -1
  162. package/dist/lib/gpt-mcp.d.ts +0 -10
  163. package/dist/lib/gpt-mcp.d.ts.map +0 -1
  164. package/dist/lib/gpt-mcp.js +0 -352
  165. package/dist/lib/gpt-mcp.js.map +0 -1
  166. package/dist/tools/analytics/getUsageAnalytics.d.ts +0 -10
  167. package/dist/tools/analytics/getUsageAnalytics.d.ts.map +0 -1
  168. package/dist/tools/analytics/getUsageAnalytics.js +0 -246
  169. package/dist/tools/analytics/getUsageAnalytics.js.map +0 -1
  170. package/dist/tools/analytics/index.d.ts +0 -5
  171. package/dist/tools/analytics/index.d.ts.map +0 -1
  172. package/dist/tools/analytics/index.js +0 -5
  173. package/dist/tools/analytics/index.js.map +0 -1
  174. package/dist/tools/convention/getCodingGuide.d.ts +0 -7
  175. package/dist/tools/convention/getCodingGuide.d.ts.map +0 -1
  176. package/dist/tools/convention/getCodingGuide.js +0 -69
  177. package/dist/tools/convention/getCodingGuide.js.map +0 -1
  178. package/dist/tools/planning/analyzeRequirements.d.ts +0 -9
  179. package/dist/tools/planning/analyzeRequirements.d.ts.map +0 -1
  180. package/dist/tools/planning/analyzeRequirements.js +0 -171
  181. package/dist/tools/planning/analyzeRequirements.js.map +0 -1
  182. package/dist/tools/planning/createUserStories.d.ts +0 -9
  183. package/dist/tools/planning/createUserStories.d.ts.map +0 -1
  184. package/dist/tools/planning/createUserStories.js +0 -124
  185. package/dist/tools/planning/createUserStories.js.map +0 -1
  186. package/dist/tools/planning/featureRoadmap.d.ts +0 -10
  187. package/dist/tools/planning/featureRoadmap.d.ts.map +0 -1
  188. package/dist/tools/planning/featureRoadmap.js +0 -207
  189. package/dist/tools/planning/featureRoadmap.js.map +0 -1
  190. package/dist/tools/planning/generatePrd.d.ts +0 -11
  191. package/dist/tools/planning/generatePrd.d.ts.map +0 -1
  192. package/dist/tools/planning/generatePrd.js +0 -161
  193. package/dist/tools/planning/generatePrd.js.map +0 -1
  194. package/dist/tools/planning/index.d.ts +0 -8
  195. package/dist/tools/planning/index.d.ts.map +0 -1
  196. package/dist/tools/planning/index.js +0 -8
  197. package/dist/tools/planning/index.js.map +0 -1
  198. package/dist/tools/prompt/analyzePrompt.d.ts +0 -7
  199. package/dist/tools/prompt/analyzePrompt.d.ts.map +0 -1
  200. package/dist/tools/prompt/analyzePrompt.js +0 -150
  201. package/dist/tools/prompt/analyzePrompt.js.map +0 -1
  202. package/dist/tools/prompt/enhancePrompt.d.ts +0 -8
  203. package/dist/tools/prompt/enhancePrompt.d.ts.map +0 -1
  204. package/dist/tools/prompt/enhancePrompt.js +0 -110
  205. package/dist/tools/prompt/enhancePrompt.js.map +0 -1
  206. package/dist/tools/prompt/enhancePromptGemini.d.ts +0 -8
  207. package/dist/tools/prompt/enhancePromptGemini.d.ts.map +0 -1
  208. package/dist/tools/prompt/enhancePromptGemini.js +0 -332
  209. package/dist/tools/prompt/enhancePromptGemini.js.map +0 -1
  210. package/dist/tools/prompt/index.d.ts +0 -7
  211. package/dist/tools/prompt/index.d.ts.map +0 -1
  212. package/dist/tools/prompt/index.js +0 -7
  213. package/dist/tools/prompt/index.js.map +0 -1
  214. package/dist/tools/reasoning/applyReasoningFramework.d.ts +0 -8
  215. package/dist/tools/reasoning/applyReasoningFramework.d.ts.map +0 -1
  216. package/dist/tools/reasoning/applyReasoningFramework.js +0 -266
  217. package/dist/tools/reasoning/applyReasoningFramework.js.map +0 -1
  218. package/dist/tools/reasoning/index.d.ts +0 -5
  219. package/dist/tools/reasoning/index.d.ts.map +0 -1
  220. package/dist/tools/reasoning/index.js +0 -5
  221. package/dist/tools/reasoning/index.js.map +0 -1
  222. package/dist/tools/thinking/analyzeProblem.d.ts +0 -7
  223. package/dist/tools/thinking/analyzeProblem.d.ts.map +0 -1
  224. package/dist/tools/thinking/analyzeProblem.js +0 -55
  225. package/dist/tools/thinking/analyzeProblem.js.map +0 -1
  226. package/dist/tools/thinking/breakDownProblem.d.ts +0 -8
  227. package/dist/tools/thinking/breakDownProblem.d.ts.map +0 -1
  228. package/dist/tools/thinking/breakDownProblem.js +0 -145
  229. package/dist/tools/thinking/breakDownProblem.js.map +0 -1
  230. package/dist/tools/thinking/createThinkingChain.d.ts +0 -7
  231. package/dist/tools/thinking/createThinkingChain.d.ts.map +0 -1
  232. package/dist/tools/thinking/createThinkingChain.js +0 -44
  233. package/dist/tools/thinking/createThinkingChain.js.map +0 -1
  234. package/dist/tools/thinking/formatAsPlan.d.ts +0 -9
  235. package/dist/tools/thinking/formatAsPlan.d.ts.map +0 -1
  236. package/dist/tools/thinking/formatAsPlan.js +0 -78
  237. package/dist/tools/thinking/formatAsPlan.js.map +0 -1
  238. package/dist/tools/thinking/index.d.ts +0 -10
  239. package/dist/tools/thinking/index.d.ts.map +0 -1
  240. package/dist/tools/thinking/index.js +0 -10
  241. package/dist/tools/thinking/index.js.map +0 -1
  242. package/dist/tools/thinking/stepByStepAnalysis.d.ts +0 -8
  243. package/dist/tools/thinking/stepByStepAnalysis.d.ts.map +0 -1
  244. package/dist/tools/thinking/stepByStepAnalysis.js +0 -63
  245. package/dist/tools/thinking/stepByStepAnalysis.js.map +0 -1
  246. package/dist/tools/thinking/thinkAloudProcess.d.ts +0 -8
  247. package/dist/tools/thinking/thinkAloudProcess.d.ts.map +0 -1
  248. package/dist/tools/thinking/thinkAloudProcess.js +0 -80
  249. package/dist/tools/thinking/thinkAloudProcess.js.map +0 -1
@@ -4,10 +4,10 @@ import { validateCodeQuality } from './validateCodeQuality.js';
4
4
  describe('validateCodeQuality', () => {
5
5
  describe('code validation', () => {
6
6
  it('should validate simple clean code', async () => {
7
- const code = `
8
- function add(a: number, b: number): number {
9
- return a + b;
10
- }
7
+ const code = `
8
+ function add(a: number, b: number): number {
9
+ return a + b;
10
+ }
11
11
  `;
12
12
  const result = await validateCodeQuality({ code });
13
13
  expect(result.content[0].type).toBe('text');
@@ -15,56 +15,56 @@ function add(a: number, b: number): number {
15
15
  expect(result.content[0].text).toContain('Grade');
16
16
  });
17
17
  it('should detect high nesting depth', async () => {
18
- const code = `
19
- function nested() {
20
- if (true) {
21
- if (true) {
22
- if (true) {
23
- if (true) {
24
- console.log('deep');
25
- }
26
- }
27
- }
28
- }
29
- }
18
+ const code = `
19
+ function nested() {
20
+ if (true) {
21
+ if (true) {
22
+ if (true) {
23
+ if (true) {
24
+ console.log('deep');
25
+ }
26
+ }
27
+ }
28
+ }
29
+ }
30
30
  `;
31
31
  const result = await validateCodeQuality({ code });
32
32
  expect(result.content[0].text).toContain('Nesting');
33
33
  });
34
34
  it('should detect any type usage', async () => {
35
- const code = `
36
- function process(data: any): any {
37
- return data;
38
- }
35
+ const code = `
36
+ function process(data: any): any {
37
+ return data;
38
+ }
39
39
  `;
40
40
  const result = await validateCodeQuality({ code });
41
41
  expect(result.content[0].text).toContain('type');
42
42
  });
43
43
  it('should detect loose equality', async () => {
44
- const code = `
45
- function compare(a, b) {
46
- return a == b;
47
- }
44
+ const code = `
45
+ function compare(a, b) {
46
+ return a == b;
47
+ }
48
48
  `;
49
49
  const result = await validateCodeQuality({ code });
50
50
  expect(result.content[0].text).toContain('Issues');
51
51
  });
52
52
  it('should detect var usage', async () => {
53
- const code = `
54
- function oldStyle() {
55
- var x = 1;
56
- var y = 2;
57
- return x + y;
58
- }
53
+ const code = `
54
+ function oldStyle() {
55
+ var x = 1;
56
+ var y = 2;
57
+ return x + y;
58
+ }
59
59
  `;
60
60
  const result = await validateCodeQuality({ code });
61
61
  expect(result.content[0].text).toContain('Issues');
62
62
  });
63
63
  it('should detect magic numbers', async () => {
64
- const code = `
65
- function calculate(value) {
66
- return value * 123 + 456;
67
- }
64
+ const code = `
65
+ function calculate(value) {
66
+ return value * 123 + 456;
67
+ }
68
68
  `;
69
69
  const result = await validateCodeQuality({ code });
70
70
  expect(result.content[0].text).toContain('Issues');
@@ -72,26 +72,26 @@ function calculate(value) {
72
72
  });
73
73
  describe('async code validation', () => {
74
74
  it('should warn about missing error handling in async', async () => {
75
- const code = `
76
- async function fetchData() {
77
- const response = await fetch('/api');
78
- return response.json();
79
- }
75
+ const code = `
76
+ async function fetchData() {
77
+ const response = await fetch('/api');
78
+ return response.json();
79
+ }
80
80
  `;
81
81
  const result = await validateCodeQuality({ code });
82
82
  expect(result.content[0].text).toContain('Issues');
83
83
  });
84
84
  it('should not warn when error handling exists', async () => {
85
- const code = `
86
- async function fetchData() {
87
- try {
88
- const response = await fetch('/api');
89
- return response.json();
90
- } catch (error) {
91
- console.error(error);
92
- throw error;
93
- }
94
- }
85
+ const code = `
86
+ async function fetchData() {
87
+ try {
88
+ const response = await fetch('/api');
89
+ return response.json();
90
+ } catch (error) {
91
+ console.error(error);
92
+ throw error;
93
+ }
94
+ }
95
95
  `;
96
96
  const result = await validateCodeQuality({ code });
97
97
  // Should have fewer issues or no error handling issue
@@ -100,27 +100,27 @@ async function fetchData() {
100
100
  });
101
101
  describe('React component validation', () => {
102
102
  it('should validate React component with type', async () => {
103
- const code = `
104
- import React from 'react';
105
-
106
- function MyComponent({ name }) {
107
- return <div>Hello, {name}!</div>;
108
- }
103
+ const code = `
104
+ import React from 'react';
105
+
106
+ function MyComponent({ name }) {
107
+ return <div>Hello, {name}!</div>;
108
+ }
109
109
  `;
110
110
  const result = await validateCodeQuality({ code, type: 'component' });
111
111
  expect(result.content[0].text).toContain('Type: component');
112
112
  });
113
113
  it('should suggest memo for React components', async () => {
114
- const code = `
115
- import React from 'react';
116
-
117
- function ExpensiveComponent({ data }) {
118
- return (
119
- <div>
120
- {data.map(item => <span key={item.id}>{item.name}</span>)}
121
- </div>
122
- );
123
- }
114
+ const code = `
115
+ import React from 'react';
116
+
117
+ function ExpensiveComponent({ data }) {
118
+ return (
119
+ <div>
120
+ {data.map(item => <span key={item.id}>{item.name}</span>)}
121
+ </div>
122
+ );
123
+ }
124
124
  `;
125
125
  const result = await validateCodeQuality({ code, type: 'component' });
126
126
  // Should mention performance optimization
@@ -144,27 +144,27 @@ function ExpensiveComponent({ data }) {
144
144
  });
145
145
  describe('grading system', () => {
146
146
  it('should give A grade for excellent code', async () => {
147
- const code = `
148
- const add = (a: number, b: number): number => a + b;
147
+ const code = `
148
+ const add = (a: number, b: number): number => a + b;
149
149
  `;
150
150
  const result = await validateCodeQuality({ code });
151
151
  expect(result.content[0].text).toContain('Grade: A');
152
152
  });
153
153
  it('should give lower grade for problematic code', async () => {
154
- const code = `
155
- function badCode(data: any) {
156
- var result;
157
- if (data == null) {
158
- if (true) {
159
- if (true) {
160
- if (true) {
161
- result = data * 123456;
162
- }
163
- }
164
- }
165
- }
166
- return result;
167
- }
154
+ const code = `
155
+ function badCode(data: any) {
156
+ var result;
157
+ if (data == null) {
158
+ if (true) {
159
+ if (true) {
160
+ if (true) {
161
+ result = data * 123456;
162
+ }
163
+ }
164
+ }
165
+ }
166
+ return result;
167
+ }
168
168
  `;
169
169
  const result = await validateCodeQuality({ code });
170
170
  // Should not be grade A
@@ -173,10 +173,10 @@ function badCode(data: any) {
173
173
  });
174
174
  describe('strict mode', () => {
175
175
  it('should accept strict flag', async () => {
176
- const code = `
177
- function test() {
178
- return 1;
179
- }
176
+ const code = `
177
+ function test() {
178
+ return 1;
179
+ }
180
180
  `;
181
181
  const result = await validateCodeQuality({ code, strict: true });
182
182
  expect(result.content[0].text).toContain('Score');
@@ -184,23 +184,23 @@ function test() {
184
184
  });
185
185
  describe('metrics option', () => {
186
186
  it('should accept complexity metrics', async () => {
187
- const code = `
188
- function test() {
189
- return 1;
190
- }
187
+ const code = `
188
+ function test() {
189
+ return 1;
190
+ }
191
191
  `;
192
192
  const result = await validateCodeQuality({ code, metrics: 'complexity' });
193
193
  expect(result.content[0].text).toContain('Complexity');
194
194
  });
195
195
  it('should accept all metrics', async () => {
196
- const code = `
197
- function test() {
198
- if (true) {
199
- for (let i = 0; i < 10; i++) {
200
- console.log(i);
201
- }
202
- }
203
- }
196
+ const code = `
197
+ function test() {
198
+ if (true) {
199
+ for (let i = 0; i < 10; i++) {
200
+ console.log(i);
201
+ }
202
+ }
203
+ }
204
204
  `;
205
205
  const result = await validateCodeQuality({ code, metrics: 'all' });
206
206
  expect(result.content[0].text).toContain('Score');
@@ -208,18 +208,18 @@ function test() {
208
208
  });
209
209
  describe('deductions', () => {
210
210
  it('should show deduction details', async () => {
211
- const code = `
212
- async function process(data: any) {
213
- var x = data == null ? 0 : data;
214
- return x * 12345;
215
- }
211
+ const code = `
212
+ async function process(data: any) {
213
+ var x = data == null ? 0 : data;
214
+ return x * 12345;
215
+ }
216
216
  `;
217
217
  const result = await validateCodeQuality({ code });
218
218
  expect(result.content[0].text).toContain('Deductions');
219
219
  });
220
220
  it('should calculate score correctly', async () => {
221
- const code = `
222
- const clean = (x: number): number => x + 1;
221
+ const code = `
222
+ const clean = (x: number): number => x + 1;
223
223
  `;
224
224
  const result = await validateCodeQuality({ code });
225
225
  // Clean code should have high score (90+)