@su-record/vibe 2.5.7 → 2.5.9

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 (190) hide show
  1. package/CLAUDE.md +348 -338
  2. package/LICENSE +21 -21
  3. package/README.md +262 -262
  4. package/agents/build-error-resolver.md +115 -0
  5. package/agents/compounder.md +261 -261
  6. package/agents/diagrammer.md +178 -178
  7. package/agents/e2e-tester.md +266 -266
  8. package/agents/explorer.md +48 -48
  9. package/agents/implementer.md +54 -54
  10. package/agents/refactor-cleaner.md +143 -0
  11. package/agents/research/best-practices-agent.md +189 -189
  12. package/agents/research/codebase-patterns-agent.md +147 -147
  13. package/agents/research/framework-docs-agent.md +178 -178
  14. package/agents/research/security-advisory-agent.md +203 -203
  15. package/agents/review/architecture-reviewer.md +107 -107
  16. package/agents/review/complexity-reviewer.md +116 -116
  17. package/agents/review/data-integrity-reviewer.md +88 -88
  18. package/agents/review/git-history-reviewer.md +103 -103
  19. package/agents/review/performance-reviewer.md +86 -86
  20. package/agents/review/python-reviewer.md +150 -150
  21. package/agents/review/rails-reviewer.md +139 -139
  22. package/agents/review/react-reviewer.md +144 -144
  23. package/agents/review/security-reviewer.md +80 -80
  24. package/agents/review/simplicity-reviewer.md +140 -140
  25. package/agents/review/test-coverage-reviewer.md +116 -116
  26. package/agents/review/typescript-reviewer.md +127 -127
  27. package/agents/searcher.md +54 -54
  28. package/agents/simplifier.md +120 -120
  29. package/agents/tester.md +49 -49
  30. package/agents/ui-previewer.md +129 -129
  31. package/commands/vibe.analyze.md +356 -356
  32. package/commands/vibe.reason.md +329 -329
  33. package/commands/vibe.review.md +326 -326
  34. package/commands/vibe.run.md +1031 -1031
  35. package/commands/vibe.spec.md +1022 -1022
  36. package/commands/vibe.utils.md +296 -202
  37. package/commands/vibe.verify.md +375 -375
  38. package/dist/cli/collaborator.js +52 -52
  39. package/dist/cli/detect.js +32 -32
  40. package/dist/cli/index.d.ts.map +1 -1
  41. package/dist/cli/index.js +102 -112
  42. package/dist/cli/index.js.map +1 -1
  43. package/dist/cli/llm.js +144 -144
  44. package/dist/cli/mcp.d.ts +49 -0
  45. package/dist/cli/mcp.d.ts.map +1 -0
  46. package/dist/cli/mcp.js +169 -0
  47. package/dist/cli/mcp.js.map +1 -0
  48. package/dist/lib/PythonParser.js +108 -108
  49. package/dist/lib/gemini-mcp.d.ts +10 -0
  50. package/dist/lib/gemini-mcp.d.ts.map +1 -0
  51. package/dist/lib/gemini-mcp.js +353 -0
  52. package/dist/lib/gemini-mcp.js.map +1 -0
  53. package/dist/lib/gpt-api.js +4 -4
  54. package/dist/lib/gpt-mcp.d.ts +10 -0
  55. package/dist/lib/gpt-mcp.d.ts.map +1 -0
  56. package/dist/lib/gpt-mcp.js +352 -0
  57. package/dist/lib/gpt-mcp.js.map +1 -0
  58. package/dist/lib/memory/KnowledgeGraph.js +4 -4
  59. package/dist/lib/memory/MemorySearch.js +20 -20
  60. package/dist/lib/memory/MemoryStorage.js +64 -64
  61. package/dist/tools/analytics/getUsageAnalytics.d.ts +10 -0
  62. package/dist/tools/analytics/getUsageAnalytics.d.ts.map +1 -0
  63. package/dist/tools/analytics/getUsageAnalytics.js +246 -0
  64. package/dist/tools/analytics/getUsageAnalytics.js.map +1 -0
  65. package/dist/tools/analytics/index.d.ts +5 -0
  66. package/dist/tools/analytics/index.d.ts.map +1 -0
  67. package/dist/tools/analytics/index.js +5 -0
  68. package/dist/tools/analytics/index.js.map +1 -0
  69. package/dist/tools/convention/analyzeComplexity.test.js +115 -115
  70. package/dist/tools/convention/getCodingGuide.d.ts +7 -0
  71. package/dist/tools/convention/getCodingGuide.d.ts.map +1 -0
  72. package/dist/tools/convention/getCodingGuide.js +69 -0
  73. package/dist/tools/convention/getCodingGuide.js.map +1 -0
  74. package/dist/tools/convention/validateCodeQuality.test.js +104 -104
  75. package/dist/tools/planning/analyzeRequirements.d.ts +9 -0
  76. package/dist/tools/planning/analyzeRequirements.d.ts.map +1 -0
  77. package/dist/tools/planning/analyzeRequirements.js +171 -0
  78. package/dist/tools/planning/analyzeRequirements.js.map +1 -0
  79. package/dist/tools/planning/createUserStories.d.ts +9 -0
  80. package/dist/tools/planning/createUserStories.d.ts.map +1 -0
  81. package/dist/tools/planning/createUserStories.js +124 -0
  82. package/dist/tools/planning/createUserStories.js.map +1 -0
  83. package/dist/tools/planning/featureRoadmap.d.ts +10 -0
  84. package/dist/tools/planning/featureRoadmap.d.ts.map +1 -0
  85. package/dist/tools/planning/featureRoadmap.js +207 -0
  86. package/dist/tools/planning/featureRoadmap.js.map +1 -0
  87. package/dist/tools/planning/generatePrd.d.ts +11 -0
  88. package/dist/tools/planning/generatePrd.d.ts.map +1 -0
  89. package/dist/tools/planning/generatePrd.js +161 -0
  90. package/dist/tools/planning/generatePrd.js.map +1 -0
  91. package/dist/tools/planning/index.d.ts +8 -0
  92. package/dist/tools/planning/index.d.ts.map +1 -0
  93. package/dist/tools/planning/index.js +8 -0
  94. package/dist/tools/planning/index.js.map +1 -0
  95. package/dist/tools/prompt/analyzePrompt.d.ts +7 -0
  96. package/dist/tools/prompt/analyzePrompt.d.ts.map +1 -0
  97. package/dist/tools/prompt/analyzePrompt.js +150 -0
  98. package/dist/tools/prompt/analyzePrompt.js.map +1 -0
  99. package/dist/tools/prompt/enhancePrompt.d.ts +8 -0
  100. package/dist/tools/prompt/enhancePrompt.d.ts.map +1 -0
  101. package/dist/tools/prompt/enhancePrompt.js +110 -0
  102. package/dist/tools/prompt/enhancePrompt.js.map +1 -0
  103. package/dist/tools/prompt/enhancePromptGemini.d.ts +8 -0
  104. package/dist/tools/prompt/enhancePromptGemini.d.ts.map +1 -0
  105. package/dist/tools/prompt/enhancePromptGemini.js +332 -0
  106. package/dist/tools/prompt/enhancePromptGemini.js.map +1 -0
  107. package/dist/tools/prompt/index.d.ts +7 -0
  108. package/dist/tools/prompt/index.d.ts.map +1 -0
  109. package/dist/tools/prompt/index.js +7 -0
  110. package/dist/tools/prompt/index.js.map +1 -0
  111. package/dist/tools/reasoning/applyReasoningFramework.d.ts +8 -0
  112. package/dist/tools/reasoning/applyReasoningFramework.d.ts.map +1 -0
  113. package/dist/tools/reasoning/applyReasoningFramework.js +266 -0
  114. package/dist/tools/reasoning/applyReasoningFramework.js.map +1 -0
  115. package/dist/tools/reasoning/index.d.ts +5 -0
  116. package/dist/tools/reasoning/index.d.ts.map +1 -0
  117. package/dist/tools/reasoning/index.js +5 -0
  118. package/dist/tools/reasoning/index.js.map +1 -0
  119. package/dist/tools/thinking/analyzeProblem.d.ts +7 -0
  120. package/dist/tools/thinking/analyzeProblem.d.ts.map +1 -0
  121. package/dist/tools/thinking/analyzeProblem.js +55 -0
  122. package/dist/tools/thinking/analyzeProblem.js.map +1 -0
  123. package/dist/tools/thinking/breakDownProblem.d.ts +8 -0
  124. package/dist/tools/thinking/breakDownProblem.d.ts.map +1 -0
  125. package/dist/tools/thinking/breakDownProblem.js +145 -0
  126. package/dist/tools/thinking/breakDownProblem.js.map +1 -0
  127. package/dist/tools/thinking/createThinkingChain.d.ts +7 -0
  128. package/dist/tools/thinking/createThinkingChain.d.ts.map +1 -0
  129. package/dist/tools/thinking/createThinkingChain.js +44 -0
  130. package/dist/tools/thinking/createThinkingChain.js.map +1 -0
  131. package/dist/tools/thinking/formatAsPlan.d.ts +9 -0
  132. package/dist/tools/thinking/formatAsPlan.d.ts.map +1 -0
  133. package/dist/tools/thinking/formatAsPlan.js +78 -0
  134. package/dist/tools/thinking/formatAsPlan.js.map +1 -0
  135. package/dist/tools/thinking/index.d.ts +10 -0
  136. package/dist/tools/thinking/index.d.ts.map +1 -0
  137. package/dist/tools/thinking/index.js +10 -0
  138. package/dist/tools/thinking/index.js.map +1 -0
  139. package/dist/tools/thinking/stepByStepAnalysis.d.ts +8 -0
  140. package/dist/tools/thinking/stepByStepAnalysis.d.ts.map +1 -0
  141. package/dist/tools/thinking/stepByStepAnalysis.js +63 -0
  142. package/dist/tools/thinking/stepByStepAnalysis.js.map +1 -0
  143. package/dist/tools/thinking/thinkAloudProcess.d.ts +8 -0
  144. package/dist/tools/thinking/thinkAloudProcess.d.ts.map +1 -0
  145. package/dist/tools/thinking/thinkAloudProcess.js +80 -0
  146. package/dist/tools/thinking/thinkAloudProcess.js.map +1 -0
  147. package/hooks/hooks.json +204 -195
  148. package/hooks/scripts/code-check.js +22 -22
  149. package/hooks/scripts/code-review.js +22 -22
  150. package/hooks/scripts/complexity.js +22 -22
  151. package/hooks/scripts/compound.js +23 -23
  152. package/hooks/scripts/context-save.js +33 -33
  153. package/hooks/scripts/llm-orchestrate.js +171 -171
  154. package/hooks/scripts/post-edit.js +97 -0
  155. package/hooks/scripts/recall.js +22 -22
  156. package/hooks/scripts/session-start.js +30 -30
  157. package/hooks/scripts/utils.js +97 -65
  158. package/languages/csharp-unity.md +515 -515
  159. package/languages/gdscript-godot.md +470 -470
  160. package/languages/ruby-rails.md +489 -489
  161. package/languages/typescript-angular.md +433 -433
  162. package/languages/typescript-astro.md +416 -416
  163. package/languages/typescript-electron.md +406 -406
  164. package/languages/typescript-nestjs.md +524 -524
  165. package/languages/typescript-svelte.md +407 -407
  166. package/languages/typescript-tauri.md +365 -365
  167. package/package.json +83 -83
  168. package/skills/context7-usage.md +102 -102
  169. package/skills/git-worktree.md +181 -181
  170. package/skills/parallel-research.md +77 -77
  171. package/skills/priority-todos.md +239 -239
  172. package/skills/tool-fallback.md +190 -190
  173. package/skills/vibe-capabilities.md +161 -161
  174. package/vibe/constitution.md +227 -227
  175. package/vibe/rules/core/communication-guide.md +98 -98
  176. package/vibe/rules/core/development-philosophy.md +52 -52
  177. package/vibe/rules/core/quick-start.md +102 -102
  178. package/vibe/rules/quality/bdd-contract-testing.md +393 -393
  179. package/vibe/rules/quality/checklist.md +276 -276
  180. package/vibe/rules/quality/testing-strategy.md +440 -440
  181. package/vibe/rules/standards/anti-patterns.md +541 -369
  182. package/vibe/rules/standards/code-structure.md +291 -291
  183. package/vibe/rules/standards/complexity-metrics.md +313 -313
  184. package/vibe/rules/standards/naming-conventions.md +198 -198
  185. package/vibe/setup.sh +31 -31
  186. package/vibe/templates/constitution-template.md +252 -252
  187. package/vibe/templates/contract-backend-template.md +526 -526
  188. package/vibe/templates/contract-frontend-template.md +599 -599
  189. package/vibe/templates/feature-template.md +96 -96
  190. package/vibe/templates/spec-template.md +221 -221
@@ -1,291 +1,291 @@
1
- # Code Structure Automation Rules
2
-
3
- ## Component Structure (Strict Order)
4
-
5
- ```typescript
6
- // 1. Import statements
7
- import React, { useState, useEffect } from 'react';
8
-
9
- // 2. Type/Interface definitions
10
- interface Props {
11
- userId: string;
12
- }
13
-
14
- // 3. Component definition
15
- function UserProfile({ userId }: Props) {
16
- // 4. State & Refs
17
- const [user, setUser] = useState<User | null>(null);
18
- const inputRef = useRef<HTMLInputElement>(null);
19
-
20
- // 5. Custom Hooks
21
- const { isAuthenticated } = useAuth();
22
- const { data, loading } = useUserData(userId);
23
-
24
- // 6. Event Handlers
25
- const handleSubmit = (e: FormEvent) => {
26
- e.preventDefault();
27
- // ...
28
- };
29
-
30
- // 7. Effects
31
- useEffect(() => {
32
- // ...
33
- }, [userId]);
34
-
35
- // 8. Early returns
36
- if (loading) return <Spinner />;
37
- if (!user) return <NotFound />;
38
-
39
- // 9. Main return JSX
40
- return (
41
- <div>
42
- {/* ... */}
43
- </div>
44
- );
45
- }
46
- ```
47
-
48
- ## Function Separation Criteria
49
-
50
- ### 1. Function Length Criteria
51
-
52
- ```typescript
53
- // ❌ Over 20 lines - needs separation
54
- function processUserData(user: User) {
55
- // 30 lines of complex logic
56
- }
57
-
58
- // ✅ Separate by single responsibility
59
- function processUserData(user: User) {
60
- const validated = validateUser(user);
61
- const transformed = transformUserData(validated);
62
- return saveUserData(transformed);
63
- }
64
-
65
- function validateUser(user: User) { /* ... */ }
66
- function transformUserData(user: User) { /* ... */ }
67
- function saveUserData(user: User) { /* ... */ }
68
- ```
69
-
70
- ### 2. Component JSX Length Criteria
71
-
72
- ```typescript
73
- // ❌ JSX over 50 lines - needs separation
74
- function Dashboard() {
75
- return (
76
- <div>
77
- {/* 60 lines of complex JSX */}
78
- </div>
79
- );
80
- }
81
-
82
- // ✅ Extract sub-components
83
- function Dashboard() {
84
- return (
85
- <div>
86
- <DashboardHeader />
87
- <DashboardContent />
88
- <DashboardFooter />
89
- </div>
90
- );
91
- }
92
-
93
- function DashboardHeader() { /* ... */ }
94
- function DashboardContent() { /* ... */ }
95
- function DashboardFooter() { /* ... */ }
96
- ```
97
-
98
- ### 3. Nesting Depth Criteria
99
-
100
- ```typescript
101
- // ❌ Nesting over 3 levels
102
- function processData(data: Data) {
103
- if (data) {
104
- if (data.isValid) {
105
- if (data.user) {
106
- if (data.user.isActive) {
107
- // Too deep nesting
108
- }
109
- }
110
- }
111
- }
112
- }
113
-
114
- // ✅ Flatten with early returns
115
- function processData(data: Data) {
116
- if (!data) return null;
117
- if (!data.isValid) return null;
118
- if (!data.user) return null;
119
- if (!data.user.isActive) return null;
120
-
121
- // Execute logic
122
- }
123
- ```
124
-
125
- ### 4. Cyclomatic Complexity > 10
126
-
127
- ```typescript
128
- // ❌ High complexity (15)
129
- function calculatePrice(item: Item) {
130
- let price = item.basePrice;
131
- if (item.discount) price *= 0.9;
132
- if (item.bulk) price *= 0.8;
133
- if (item.seasonal) price *= 0.95;
134
- if (item.member) price *= 0.85;
135
- if (item.firstTime) price *= 0.9;
136
- // ... more conditions
137
- return price;
138
- }
139
-
140
- // ✅ Reduced complexity (3)
141
- function calculatePrice(item: Item) {
142
- const basePrice = item.basePrice;
143
- const discounts = getApplicableDiscounts(item);
144
- return applyDiscounts(basePrice, discounts);
145
- }
146
- ```
147
-
148
- ### 5. Cognitive Complexity > 15
149
-
150
- ```typescript
151
- // ❌ High cognitive complexity
152
- function processOrder(order: Order) {
153
- if (order.isPremium) {
154
- for (let item of order.items) {
155
- if (item.category === 'electronics') {
156
- if (item.price > 1000) {
157
- // Nested complex logic
158
- }
159
- }
160
- }
161
- }
162
- }
163
-
164
- // ✅ Reduced cognitive complexity
165
- function processOrder(order: Order) {
166
- if (!order.isPremium) return;
167
-
168
- const electronics = filterElectronics(order.items);
169
- const expensive = filterExpensive(electronics);
170
-
171
- processItems(expensive);
172
- }
173
- ```
174
-
175
- ## File Structure Standard
176
-
177
- ```typescript
178
- // 📁 user-profile.component.tsx
179
-
180
- // 1. Imports
181
- import { ... } from 'react';
182
- import { ... } from '@/lib';
183
-
184
- // 2. Types
185
- interface UserProfileProps { }
186
- type UserRole = 'admin' | 'user';
187
-
188
- // 3. Constants
189
- const MAX_BIO_LENGTH = 500;
190
- const DEFAULT_AVATAR = '/avatar.png';
191
-
192
- // 4. Helper Functions (internal only)
193
- function formatUserName(name: string) { }
194
-
195
- // 5. Main Component
196
- export function UserProfile() { }
197
-
198
- // 6. Sub Components (not exported)
199
- function ProfileHeader() { }
200
- function ProfileContent() { }
201
- ```
202
-
203
- ## Module Organization Principles
204
-
205
- ### 1. Cohesion
206
-
207
- ```typescript
208
- // ✅ High cohesion - only related functions
209
- // 📁 user.service.ts
210
- export class UserService {
211
- getUser(id: string) { }
212
- updateUser(id: string, data: User) { }
213
- deleteUser(id: string) { }
214
- }
215
-
216
- // ❌ Low cohesion - unrelated functions mixed
217
- // 📁 utils.ts (anti-pattern)
218
- export class Utils {
219
- validateEmail(email: string) { }
220
- formatCurrency(amount: number) { }
221
- uploadFile(file: File) { }
222
- }
223
- ```
224
-
225
- ### 2. Coupling
226
-
227
- ```typescript
228
- // ✅ Loose coupling - depends on interface
229
- interface Storage {
230
- save(key: string, value: unknown): void;
231
- load(key: string): unknown;
232
- }
233
-
234
- class UserService {
235
- constructor(private storage: Storage) { }
236
- }
237
-
238
- // ❌ Tight coupling - depends on implementation directly
239
- class UserService {
240
- private storage = new LocalStorage(); // Direct dependency
241
- }
242
- ```
243
-
244
- ## Function Parameter Limit
245
-
246
- ```typescript
247
- // ❌ Over 5 parameters
248
- function createUser(
249
- name: string,
250
- email: string,
251
- age: number,
252
- address: string,
253
- phone: string,
254
- role: string
255
- ) { }
256
-
257
- // ✅ Group into object
258
- interface CreateUserParams {
259
- name: string;
260
- email: string;
261
- age: number;
262
- address: string;
263
- phone: string;
264
- role: string;
265
- }
266
-
267
- function createUser(params: CreateUserParams) { }
268
- ```
269
-
270
- ## Preventing Circular Dependencies
271
-
272
- ```typescript
273
- // ❌ Circular dependency
274
- // fileA.ts
275
- import { funcB } from './fileB';
276
- export function funcA() { funcB(); }
277
-
278
- // fileB.ts
279
- import { funcA } from './fileA'; // Circular!
280
- export function funcB() { funcA(); }
281
-
282
- // ✅ Separate common module
283
- // shared.ts
284
- export function sharedFunc() { }
285
-
286
- // fileA.ts
287
- import { sharedFunc } from './shared';
288
-
289
- // fileB.ts
290
- import { sharedFunc } from './shared';
291
- ```
1
+ # Code Structure Automation Rules
2
+
3
+ ## Component Structure (Strict Order)
4
+
5
+ ```typescript
6
+ // 1. Import statements
7
+ import React, { useState, useEffect } from 'react';
8
+
9
+ // 2. Type/Interface definitions
10
+ interface Props {
11
+ userId: string;
12
+ }
13
+
14
+ // 3. Component definition
15
+ function UserProfile({ userId }: Props) {
16
+ // 4. State & Refs
17
+ const [user, setUser] = useState<User | null>(null);
18
+ const inputRef = useRef<HTMLInputElement>(null);
19
+
20
+ // 5. Custom Hooks
21
+ const { isAuthenticated } = useAuth();
22
+ const { data, loading } = useUserData(userId);
23
+
24
+ // 6. Event Handlers
25
+ const handleSubmit = (e: FormEvent) => {
26
+ e.preventDefault();
27
+ // ...
28
+ };
29
+
30
+ // 7. Effects
31
+ useEffect(() => {
32
+ // ...
33
+ }, [userId]);
34
+
35
+ // 8. Early returns
36
+ if (loading) return <Spinner />;
37
+ if (!user) return <NotFound />;
38
+
39
+ // 9. Main return JSX
40
+ return (
41
+ <div>
42
+ {/* ... */}
43
+ </div>
44
+ );
45
+ }
46
+ ```
47
+
48
+ ## Function Separation Criteria
49
+
50
+ ### 1. Function Length Criteria
51
+
52
+ ```typescript
53
+ // ❌ Over 20 lines - needs separation
54
+ function processUserData(user: User) {
55
+ // 30 lines of complex logic
56
+ }
57
+
58
+ // ✅ Separate by single responsibility
59
+ function processUserData(user: User) {
60
+ const validated = validateUser(user);
61
+ const transformed = transformUserData(validated);
62
+ return saveUserData(transformed);
63
+ }
64
+
65
+ function validateUser(user: User) { /* ... */ }
66
+ function transformUserData(user: User) { /* ... */ }
67
+ function saveUserData(user: User) { /* ... */ }
68
+ ```
69
+
70
+ ### 2. Component JSX Length Criteria
71
+
72
+ ```typescript
73
+ // ❌ JSX over 50 lines - needs separation
74
+ function Dashboard() {
75
+ return (
76
+ <div>
77
+ {/* 60 lines of complex JSX */}
78
+ </div>
79
+ );
80
+ }
81
+
82
+ // ✅ Extract sub-components
83
+ function Dashboard() {
84
+ return (
85
+ <div>
86
+ <DashboardHeader />
87
+ <DashboardContent />
88
+ <DashboardFooter />
89
+ </div>
90
+ );
91
+ }
92
+
93
+ function DashboardHeader() { /* ... */ }
94
+ function DashboardContent() { /* ... */ }
95
+ function DashboardFooter() { /* ... */ }
96
+ ```
97
+
98
+ ### 3. Nesting Depth Criteria
99
+
100
+ ```typescript
101
+ // ❌ Nesting over 3 levels
102
+ function processData(data: Data) {
103
+ if (data) {
104
+ if (data.isValid) {
105
+ if (data.user) {
106
+ if (data.user.isActive) {
107
+ // Too deep nesting
108
+ }
109
+ }
110
+ }
111
+ }
112
+ }
113
+
114
+ // ✅ Flatten with early returns
115
+ function processData(data: Data) {
116
+ if (!data) return null;
117
+ if (!data.isValid) return null;
118
+ if (!data.user) return null;
119
+ if (!data.user.isActive) return null;
120
+
121
+ // Execute logic
122
+ }
123
+ ```
124
+
125
+ ### 4. Cyclomatic Complexity > 10
126
+
127
+ ```typescript
128
+ // ❌ High complexity (15)
129
+ function calculatePrice(item: Item) {
130
+ let price = item.basePrice;
131
+ if (item.discount) price *= 0.9;
132
+ if (item.bulk) price *= 0.8;
133
+ if (item.seasonal) price *= 0.95;
134
+ if (item.member) price *= 0.85;
135
+ if (item.firstTime) price *= 0.9;
136
+ // ... more conditions
137
+ return price;
138
+ }
139
+
140
+ // ✅ Reduced complexity (3)
141
+ function calculatePrice(item: Item) {
142
+ const basePrice = item.basePrice;
143
+ const discounts = getApplicableDiscounts(item);
144
+ return applyDiscounts(basePrice, discounts);
145
+ }
146
+ ```
147
+
148
+ ### 5. Cognitive Complexity > 15
149
+
150
+ ```typescript
151
+ // ❌ High cognitive complexity
152
+ function processOrder(order: Order) {
153
+ if (order.isPremium) {
154
+ for (let item of order.items) {
155
+ if (item.category === 'electronics') {
156
+ if (item.price > 1000) {
157
+ // Nested complex logic
158
+ }
159
+ }
160
+ }
161
+ }
162
+ }
163
+
164
+ // ✅ Reduced cognitive complexity
165
+ function processOrder(order: Order) {
166
+ if (!order.isPremium) return;
167
+
168
+ const electronics = filterElectronics(order.items);
169
+ const expensive = filterExpensive(electronics);
170
+
171
+ processItems(expensive);
172
+ }
173
+ ```
174
+
175
+ ## File Structure Standard
176
+
177
+ ```typescript
178
+ // 📁 user-profile.component.tsx
179
+
180
+ // 1. Imports
181
+ import { ... } from 'react';
182
+ import { ... } from '@/lib';
183
+
184
+ // 2. Types
185
+ interface UserProfileProps { }
186
+ type UserRole = 'admin' | 'user';
187
+
188
+ // 3. Constants
189
+ const MAX_BIO_LENGTH = 500;
190
+ const DEFAULT_AVATAR = '/avatar.png';
191
+
192
+ // 4. Helper Functions (internal only)
193
+ function formatUserName(name: string) { }
194
+
195
+ // 5. Main Component
196
+ export function UserProfile() { }
197
+
198
+ // 6. Sub Components (not exported)
199
+ function ProfileHeader() { }
200
+ function ProfileContent() { }
201
+ ```
202
+
203
+ ## Module Organization Principles
204
+
205
+ ### 1. Cohesion
206
+
207
+ ```typescript
208
+ // ✅ High cohesion - only related functions
209
+ // 📁 user.service.ts
210
+ export class UserService {
211
+ getUser(id: string) { }
212
+ updateUser(id: string, data: User) { }
213
+ deleteUser(id: string) { }
214
+ }
215
+
216
+ // ❌ Low cohesion - unrelated functions mixed
217
+ // 📁 utils.ts (anti-pattern)
218
+ export class Utils {
219
+ validateEmail(email: string) { }
220
+ formatCurrency(amount: number) { }
221
+ uploadFile(file: File) { }
222
+ }
223
+ ```
224
+
225
+ ### 2. Coupling
226
+
227
+ ```typescript
228
+ // ✅ Loose coupling - depends on interface
229
+ interface Storage {
230
+ save(key: string, value: unknown): void;
231
+ load(key: string): unknown;
232
+ }
233
+
234
+ class UserService {
235
+ constructor(private storage: Storage) { }
236
+ }
237
+
238
+ // ❌ Tight coupling - depends on implementation directly
239
+ class UserService {
240
+ private storage = new LocalStorage(); // Direct dependency
241
+ }
242
+ ```
243
+
244
+ ## Function Parameter Limit
245
+
246
+ ```typescript
247
+ // ❌ Over 5 parameters
248
+ function createUser(
249
+ name: string,
250
+ email: string,
251
+ age: number,
252
+ address: string,
253
+ phone: string,
254
+ role: string
255
+ ) { }
256
+
257
+ // ✅ Group into object
258
+ interface CreateUserParams {
259
+ name: string;
260
+ email: string;
261
+ age: number;
262
+ address: string;
263
+ phone: string;
264
+ role: string;
265
+ }
266
+
267
+ function createUser(params: CreateUserParams) { }
268
+ ```
269
+
270
+ ## Preventing Circular Dependencies
271
+
272
+ ```typescript
273
+ // ❌ Circular dependency
274
+ // fileA.ts
275
+ import { funcB } from './fileB';
276
+ export function funcA() { funcB(); }
277
+
278
+ // fileB.ts
279
+ import { funcA } from './fileA'; // Circular!
280
+ export function funcB() { funcA(); }
281
+
282
+ // ✅ Separate common module
283
+ // shared.ts
284
+ export function sharedFunc() { }
285
+
286
+ // fileA.ts
287
+ import { sharedFunc } from './shared';
288
+
289
+ // fileB.ts
290
+ import { sharedFunc } from './shared';
291
+ ```