@su-record/vibe 2.6.28 → 2.6.30

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 (240) hide show
  1. package/CLAUDE.md +235 -202
  2. package/LICENSE +21 -21
  3. package/README.md +276 -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 +1423 -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/postinstall.js +858 -858
  59. package/dist/lib/DeepInit.js +24 -24
  60. package/dist/lib/IterationTracker.js +11 -11
  61. package/dist/lib/PythonParser.js +108 -108
  62. package/dist/lib/ReviewRace.js +96 -96
  63. package/dist/lib/SkillFrontmatter.js +28 -28
  64. package/dist/lib/SkillQualityGate.js +9 -9
  65. package/dist/lib/SkillRepository.js +159 -159
  66. package/dist/lib/UltraQA.js +77 -77
  67. package/dist/lib/gemini-api.js +5 -5
  68. package/dist/lib/gpt-api.js +4 -4
  69. package/dist/lib/memory/KnowledgeGraph.js +4 -4
  70. package/dist/lib/memory/MemorySearch.js +43 -43
  71. package/dist/lib/memory/MemoryStorage.js +130 -130
  72. package/dist/lib/memory/ObservationStore.js +28 -28
  73. package/dist/lib/memory/SessionRAGRetriever.js +7 -7
  74. package/dist/lib/memory/SessionRAGStore.js +216 -216
  75. package/dist/lib/memory/SessionSummarizer.js +9 -9
  76. package/dist/orchestrator/AgentManager.js +12 -12
  77. package/dist/orchestrator/MultiLlmResearch.js +8 -8
  78. package/dist/orchestrator/SmartRouter.js +11 -11
  79. package/dist/orchestrator/SwarmOrchestrator.test.js +16 -16
  80. package/dist/orchestrator/parallelResearch.js +24 -24
  81. package/dist/tools/convention/analyzeComplexity.test.js +115 -115
  82. package/dist/tools/convention/validateCodeQuality.test.js +104 -104
  83. package/dist/tools/spec/prdParser.test.js +171 -171
  84. package/dist/tools/spec/specGenerator.js +169 -169
  85. package/dist/tools/spec/traceabilityMatrix.js +64 -64
  86. package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
  87. package/hooks/hooks.json +115 -115
  88. package/hooks/scripts/code-check.js +70 -70
  89. package/hooks/scripts/code-review.js +22 -22
  90. package/hooks/scripts/complexity.js +22 -22
  91. package/hooks/scripts/compound.js +23 -23
  92. package/hooks/scripts/context-save.js +53 -53
  93. package/hooks/scripts/gemini-ui-gen.js +281 -281
  94. package/hooks/scripts/generate-brand-assets.js +474 -474
  95. package/hooks/scripts/hud-multiline.js +262 -262
  96. package/hooks/scripts/hud-status.js +291 -291
  97. package/hooks/scripts/keyword-detector.js +214 -214
  98. package/hooks/scripts/llm-orchestrate.js +328 -171
  99. package/hooks/scripts/post-edit.js +97 -97
  100. package/hooks/scripts/post-tool-verify.js +210 -210
  101. package/hooks/scripts/pre-tool-guard.js +125 -125
  102. package/hooks/scripts/prompt-dispatcher.js +161 -161
  103. package/hooks/scripts/recall.js +22 -22
  104. package/hooks/scripts/session-start.js +30 -30
  105. package/hooks/scripts/skill-injector.js +191 -191
  106. package/hooks/scripts/utils.js +97 -97
  107. package/languages/csharp-unity.md +515 -515
  108. package/languages/gdscript-godot.md +470 -470
  109. package/languages/ruby-rails.md +489 -489
  110. package/languages/typescript-angular.md +433 -433
  111. package/languages/typescript-astro.md +416 -416
  112. package/languages/typescript-electron.md +406 -406
  113. package/languages/typescript-nestjs.md +524 -524
  114. package/languages/typescript-svelte.md +407 -407
  115. package/languages/typescript-tauri.md +365 -365
  116. package/package.json +84 -84
  117. package/skills/brand-assets.md +141 -141
  118. package/skills/commerce-patterns.md +361 -361
  119. package/skills/context7-usage.md +102 -102
  120. package/skills/e2e-commerce.md +304 -304
  121. package/skills/frontend-design.md +92 -92
  122. package/skills/git-worktree.md +181 -181
  123. package/skills/parallel-research.md +77 -77
  124. package/skills/priority-todos.md +239 -239
  125. package/skills/seo-checklist.md +244 -244
  126. package/skills/tool-fallback.md +190 -190
  127. package/skills/vibe-capabilities.md +161 -161
  128. package/vibe/constitution.md +227 -227
  129. package/vibe/rules/core/communication-guide.md +98 -98
  130. package/vibe/rules/core/development-philosophy.md +52 -52
  131. package/vibe/rules/core/quick-start.md +102 -102
  132. package/vibe/rules/quality/bdd-contract-testing.md +393 -393
  133. package/vibe/rules/quality/checklist.md +276 -276
  134. package/vibe/rules/quality/testing-strategy.md +440 -440
  135. package/vibe/rules/standards/anti-patterns.md +541 -541
  136. package/vibe/rules/standards/code-structure.md +291 -291
  137. package/vibe/rules/standards/complexity-metrics.md +313 -313
  138. package/vibe/rules/standards/naming-conventions.md +198 -198
  139. package/vibe/setup.sh +31 -31
  140. package/vibe/templates/constitution-template.md +252 -252
  141. package/vibe/templates/contract-backend-template.md +526 -526
  142. package/vibe/templates/contract-frontend-template.md +599 -599
  143. package/vibe/templates/feature-template.md +96 -96
  144. package/vibe/templates/spec-template.md +221 -221
  145. package/dist/cli/mcp.d.ts +0 -49
  146. package/dist/cli/mcp.d.ts.map +0 -1
  147. package/dist/cli/mcp.js +0 -169
  148. package/dist/cli/mcp.js.map +0 -1
  149. package/dist/lib/gemini-mcp.d.ts +0 -10
  150. package/dist/lib/gemini-mcp.d.ts.map +0 -1
  151. package/dist/lib/gemini-mcp.js +0 -353
  152. package/dist/lib/gemini-mcp.js.map +0 -1
  153. package/dist/lib/gpt-mcp.d.ts +0 -10
  154. package/dist/lib/gpt-mcp.d.ts.map +0 -1
  155. package/dist/lib/gpt-mcp.js +0 -352
  156. package/dist/lib/gpt-mcp.js.map +0 -1
  157. package/dist/tools/analytics/getUsageAnalytics.d.ts +0 -10
  158. package/dist/tools/analytics/getUsageAnalytics.d.ts.map +0 -1
  159. package/dist/tools/analytics/getUsageAnalytics.js +0 -246
  160. package/dist/tools/analytics/getUsageAnalytics.js.map +0 -1
  161. package/dist/tools/analytics/index.d.ts +0 -5
  162. package/dist/tools/analytics/index.d.ts.map +0 -1
  163. package/dist/tools/analytics/index.js +0 -5
  164. package/dist/tools/analytics/index.js.map +0 -1
  165. package/dist/tools/convention/getCodingGuide.d.ts +0 -7
  166. package/dist/tools/convention/getCodingGuide.d.ts.map +0 -1
  167. package/dist/tools/convention/getCodingGuide.js +0 -69
  168. package/dist/tools/convention/getCodingGuide.js.map +0 -1
  169. package/dist/tools/planning/analyzeRequirements.d.ts +0 -9
  170. package/dist/tools/planning/analyzeRequirements.d.ts.map +0 -1
  171. package/dist/tools/planning/analyzeRequirements.js +0 -171
  172. package/dist/tools/planning/analyzeRequirements.js.map +0 -1
  173. package/dist/tools/planning/createUserStories.d.ts +0 -9
  174. package/dist/tools/planning/createUserStories.d.ts.map +0 -1
  175. package/dist/tools/planning/createUserStories.js +0 -124
  176. package/dist/tools/planning/createUserStories.js.map +0 -1
  177. package/dist/tools/planning/featureRoadmap.d.ts +0 -10
  178. package/dist/tools/planning/featureRoadmap.d.ts.map +0 -1
  179. package/dist/tools/planning/featureRoadmap.js +0 -207
  180. package/dist/tools/planning/featureRoadmap.js.map +0 -1
  181. package/dist/tools/planning/generatePrd.d.ts +0 -11
  182. package/dist/tools/planning/generatePrd.d.ts.map +0 -1
  183. package/dist/tools/planning/generatePrd.js +0 -161
  184. package/dist/tools/planning/generatePrd.js.map +0 -1
  185. package/dist/tools/planning/index.d.ts +0 -8
  186. package/dist/tools/planning/index.d.ts.map +0 -1
  187. package/dist/tools/planning/index.js +0 -8
  188. package/dist/tools/planning/index.js.map +0 -1
  189. package/dist/tools/prompt/analyzePrompt.d.ts +0 -7
  190. package/dist/tools/prompt/analyzePrompt.d.ts.map +0 -1
  191. package/dist/tools/prompt/analyzePrompt.js +0 -150
  192. package/dist/tools/prompt/analyzePrompt.js.map +0 -1
  193. package/dist/tools/prompt/enhancePrompt.d.ts +0 -8
  194. package/dist/tools/prompt/enhancePrompt.d.ts.map +0 -1
  195. package/dist/tools/prompt/enhancePrompt.js +0 -110
  196. package/dist/tools/prompt/enhancePrompt.js.map +0 -1
  197. package/dist/tools/prompt/enhancePromptGemini.d.ts +0 -8
  198. package/dist/tools/prompt/enhancePromptGemini.d.ts.map +0 -1
  199. package/dist/tools/prompt/enhancePromptGemini.js +0 -332
  200. package/dist/tools/prompt/enhancePromptGemini.js.map +0 -1
  201. package/dist/tools/prompt/index.d.ts +0 -7
  202. package/dist/tools/prompt/index.d.ts.map +0 -1
  203. package/dist/tools/prompt/index.js +0 -7
  204. package/dist/tools/prompt/index.js.map +0 -1
  205. package/dist/tools/reasoning/applyReasoningFramework.d.ts +0 -8
  206. package/dist/tools/reasoning/applyReasoningFramework.d.ts.map +0 -1
  207. package/dist/tools/reasoning/applyReasoningFramework.js +0 -266
  208. package/dist/tools/reasoning/applyReasoningFramework.js.map +0 -1
  209. package/dist/tools/reasoning/index.d.ts +0 -5
  210. package/dist/tools/reasoning/index.d.ts.map +0 -1
  211. package/dist/tools/reasoning/index.js +0 -5
  212. package/dist/tools/reasoning/index.js.map +0 -1
  213. package/dist/tools/thinking/analyzeProblem.d.ts +0 -7
  214. package/dist/tools/thinking/analyzeProblem.d.ts.map +0 -1
  215. package/dist/tools/thinking/analyzeProblem.js +0 -55
  216. package/dist/tools/thinking/analyzeProblem.js.map +0 -1
  217. package/dist/tools/thinking/breakDownProblem.d.ts +0 -8
  218. package/dist/tools/thinking/breakDownProblem.d.ts.map +0 -1
  219. package/dist/tools/thinking/breakDownProblem.js +0 -145
  220. package/dist/tools/thinking/breakDownProblem.js.map +0 -1
  221. package/dist/tools/thinking/createThinkingChain.d.ts +0 -7
  222. package/dist/tools/thinking/createThinkingChain.d.ts.map +0 -1
  223. package/dist/tools/thinking/createThinkingChain.js +0 -44
  224. package/dist/tools/thinking/createThinkingChain.js.map +0 -1
  225. package/dist/tools/thinking/formatAsPlan.d.ts +0 -9
  226. package/dist/tools/thinking/formatAsPlan.d.ts.map +0 -1
  227. package/dist/tools/thinking/formatAsPlan.js +0 -78
  228. package/dist/tools/thinking/formatAsPlan.js.map +0 -1
  229. package/dist/tools/thinking/index.d.ts +0 -10
  230. package/dist/tools/thinking/index.d.ts.map +0 -1
  231. package/dist/tools/thinking/index.js +0 -10
  232. package/dist/tools/thinking/index.js.map +0 -1
  233. package/dist/tools/thinking/stepByStepAnalysis.d.ts +0 -8
  234. package/dist/tools/thinking/stepByStepAnalysis.d.ts.map +0 -1
  235. package/dist/tools/thinking/stepByStepAnalysis.js +0 -63
  236. package/dist/tools/thinking/stepByStepAnalysis.js.map +0 -1
  237. package/dist/tools/thinking/thinkAloudProcess.d.ts +0 -8
  238. package/dist/tools/thinking/thinkAloudProcess.d.ts.map +0 -1
  239. package/dist/tools/thinking/thinkAloudProcess.js +0 -80
  240. 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+)