cmp-standards 2.0.1 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/README.md +633 -541
  2. package/dist/cli/index.js +239 -7
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/dashboard/server.d.ts.map +1 -1
  5. package/dist/dashboard/server.js +203 -39
  6. package/dist/dashboard/server.js.map +1 -1
  7. package/dist/db/cloud.d.ts +174 -0
  8. package/dist/db/cloud.d.ts.map +1 -0
  9. package/dist/db/cloud.js +241 -0
  10. package/dist/db/cloud.js.map +1 -0
  11. package/dist/db/drizzle-client.d.ts +3 -3
  12. package/dist/db/drizzle-client.d.ts.map +1 -1
  13. package/dist/db/drizzle-client.js +57 -58
  14. package/dist/db/drizzle-client.js.map +1 -1
  15. package/dist/db/errors.d.ts +76 -0
  16. package/dist/db/errors.d.ts.map +1 -0
  17. package/dist/db/errors.js +135 -0
  18. package/dist/db/errors.js.map +1 -0
  19. package/dist/db/turso-client.d.ts +178 -0
  20. package/dist/db/turso-client.d.ts.map +1 -0
  21. package/dist/db/turso-client.js +455 -0
  22. package/dist/db/turso-client.js.map +1 -0
  23. package/dist/db/upstash-client.d.ts +161 -0
  24. package/dist/db/upstash-client.d.ts.map +1 -0
  25. package/dist/db/upstash-client.js +325 -0
  26. package/dist/db/upstash-client.js.map +1 -0
  27. package/dist/eslint/rules/no-async-useeffect.js +6 -6
  28. package/dist/hooks/cloud-post-tool-use.d.ts +30 -0
  29. package/dist/hooks/cloud-post-tool-use.d.ts.map +1 -0
  30. package/dist/hooks/cloud-post-tool-use.js +116 -0
  31. package/dist/hooks/cloud-post-tool-use.js.map +1 -0
  32. package/dist/hooks/cloud-pre-tool-use.d.ts +19 -0
  33. package/dist/hooks/cloud-pre-tool-use.d.ts.map +1 -0
  34. package/dist/hooks/cloud-pre-tool-use.js +149 -0
  35. package/dist/hooks/cloud-pre-tool-use.js.map +1 -0
  36. package/dist/hooks/cloud-session-start.d.ts +32 -0
  37. package/dist/hooks/cloud-session-start.d.ts.map +1 -0
  38. package/dist/hooks/cloud-session-start.js +257 -0
  39. package/dist/hooks/cloud-session-start.js.map +1 -0
  40. package/dist/hooks/index.d.ts +3 -0
  41. package/dist/hooks/index.d.ts.map +1 -1
  42. package/dist/hooks/index.js +5 -0
  43. package/dist/hooks/index.js.map +1 -1
  44. package/dist/hooks/memory-checkpoint.d.ts.map +1 -1
  45. package/dist/hooks/memory-checkpoint.js +12 -20
  46. package/dist/hooks/memory-checkpoint.js.map +1 -1
  47. package/dist/hooks/pre-tool-use.d.ts +2 -8
  48. package/dist/hooks/pre-tool-use.d.ts.map +1 -1
  49. package/dist/hooks/pre-tool-use.js +7 -106
  50. package/dist/hooks/pre-tool-use.js.map +1 -1
  51. package/dist/hooks/session-start.d.ts +2 -1
  52. package/dist/hooks/session-start.d.ts.map +1 -1
  53. package/dist/hooks/session-start.js +111 -77
  54. package/dist/hooks/session-start.js.map +1 -1
  55. package/dist/index.d.ts +14 -0
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +18 -1
  58. package/dist/index.js.map +1 -1
  59. package/dist/mcp/server.d.ts.map +1 -1
  60. package/dist/mcp/server.js +225 -2
  61. package/dist/mcp/server.js.map +1 -1
  62. package/dist/schema/plans.d.ts +194 -0
  63. package/dist/schema/plans.d.ts.map +1 -0
  64. package/dist/schema/plans.js +180 -0
  65. package/dist/schema/plans.js.map +1 -0
  66. package/dist/schema/tracking.d.ts +644 -0
  67. package/dist/schema/tracking.d.ts.map +1 -0
  68. package/dist/schema/tracking.js +204 -0
  69. package/dist/schema/tracking.js.map +1 -0
  70. package/dist/services/ContextGenerator.d.ts +16 -0
  71. package/dist/services/ContextGenerator.d.ts.map +1 -0
  72. package/dist/services/ContextGenerator.js +62 -0
  73. package/dist/services/ContextGenerator.js.map +1 -0
  74. package/dist/services/PlanManager.d.ts +99 -0
  75. package/dist/services/PlanManager.d.ts.map +1 -0
  76. package/dist/services/PlanManager.js +372 -0
  77. package/dist/services/PlanManager.js.map +1 -0
  78. package/dist/services/ProjectScaffold.d.ts.map +1 -1
  79. package/dist/services/ProjectScaffold.js +109 -81
  80. package/dist/services/ProjectScaffold.js.map +1 -1
  81. package/dist/services/TaskTracker.d.ts +1 -1
  82. package/dist/services/TaskTracker.d.ts.map +1 -1
  83. package/dist/services/TaskTracker.js +4 -8
  84. package/dist/services/TaskTracker.js.map +1 -1
  85. package/dist/services/WorkPlanManager.d.ts +1 -1
  86. package/dist/services/WorkPlanManager.d.ts.map +1 -1
  87. package/dist/services/WorkPlanManager.js +8 -14
  88. package/dist/services/WorkPlanManager.js.map +1 -1
  89. package/dist/services/auto-inject.d.ts +1 -0
  90. package/dist/services/auto-inject.d.ts.map +1 -1
  91. package/dist/services/auto-inject.js +12 -17
  92. package/dist/services/auto-inject.js.map +1 -1
  93. package/dist/services/context-injector.d.ts +105 -0
  94. package/dist/services/context-injector.d.ts.map +1 -0
  95. package/dist/services/context-injector.js +357 -0
  96. package/dist/services/context-injector.js.map +1 -0
  97. package/dist/services/cross-project-sync.d.ts +2 -0
  98. package/dist/services/cross-project-sync.d.ts.map +1 -1
  99. package/dist/services/cross-project-sync.js +26 -21
  100. package/dist/services/cross-project-sync.js.map +1 -1
  101. package/dist/services/index.d.ts +15 -15
  102. package/dist/services/index.d.ts.map +1 -1
  103. package/dist/services/index.js +18 -20
  104. package/dist/services/index.js.map +1 -1
  105. package/dist/services/memory-consolidation.d.ts.map +1 -1
  106. package/dist/services/memory-consolidation.js +30 -27
  107. package/dist/services/memory-consolidation.js.map +1 -1
  108. package/dist/services/memory-router.d.ts +98 -0
  109. package/dist/services/memory-router.d.ts.map +1 -0
  110. package/dist/services/memory-router.js +373 -0
  111. package/dist/services/memory-router.js.map +1 -0
  112. package/dist/services/pattern-tracker.d.ts +93 -0
  113. package/dist/services/pattern-tracker.d.ts.map +1 -0
  114. package/dist/services/pattern-tracker.js +347 -0
  115. package/dist/services/pattern-tracker.js.map +1 -0
  116. package/dist/services/semantic-search.d.ts +33 -35
  117. package/dist/services/semantic-search.d.ts.map +1 -1
  118. package/dist/services/semantic-search.js +207 -165
  119. package/dist/services/semantic-search.js.map +1 -1
  120. package/dist/utils/env-loader.d.ts +41 -0
  121. package/dist/utils/env-loader.d.ts.map +1 -0
  122. package/dist/utils/env-loader.js +78 -0
  123. package/dist/utils/env-loader.js.map +1 -0
  124. package/dist/utils/git.d.ts +52 -0
  125. package/dist/utils/git.d.ts.map +1 -0
  126. package/dist/utils/git.js +267 -0
  127. package/dist/utils/git.js.map +1 -0
  128. package/dist/utils/paths.d.ts +39 -5
  129. package/dist/utils/paths.d.ts.map +1 -1
  130. package/dist/utils/paths.js +88 -7
  131. package/dist/utils/paths.js.map +1 -1
  132. package/package.json +100 -94
  133. package/standards/README.md +50 -0
  134. package/standards/experts/expert-routing.md +215 -0
  135. package/standards/general/code-quality.md +86 -0
  136. package/standards/general/memory-usage.md +205 -0
  137. package/standards/general/sync-workflow.md +235 -0
  138. package/standards/general/workflow.md +82 -0
  139. package/standards/hooks/mandatory-tracking.md +446 -0
  140. package/standards/infrastructure/cloud-database.md +287 -0
  141. package/standards/mcp/server-design.md +243 -0
  142. package/standards/mcp/tool-patterns.md +354 -0
  143. package/standards/skills/skill-structure.md +286 -0
  144. package/standards/skills/workflow-design.md +323 -0
  145. package/standards/tools/tool-design.md +297 -0
  146. package/templates/agents/architecture-expert.md +61 -61
  147. package/templates/agents/database-expert.md +62 -62
  148. package/templates/agents/documentation-expert.md +57 -57
  149. package/templates/agents/memory-expert.md +88 -88
  150. package/templates/agents/performance-expert.md +61 -61
  151. package/templates/agents/security-expert.md +59 -59
  152. package/templates/agents/ux-expert.md +63 -63
  153. package/templates/agents/worker.md +75 -75
  154. package/templates/ai-skills/SKILL_TEMPLATE.md +55 -55
  155. package/templates/claude-settings.json +72 -0
  156. package/templates/commands/experts.md +138 -138
  157. package/templates/hooks/README.md +158 -158
  158. package/templates/hooks/project.config.json.template +77 -77
  159. package/templates/hooks/settings.local.json.template +57 -57
  160. package/templates/memory-config.json +56 -82
  161. package/templates/memory-config.schema.json +212 -212
  162. package/templates/settings.json +58 -58
  163. package/templates/skills/continue.md +205 -0
  164. package/templates/workflows/business-improvement.md +264 -264
  165. package/templates/workflows/expert-review.md +153 -153
  166. package/templates/workflows/internal-app.md +245 -245
  167. package/templates/workflows/sync-docs.md +187 -187
@@ -0,0 +1,323 @@
1
+ # Diseño de Workflows con Skills
2
+
3
+ ## Concepto
4
+
5
+ Un **workflow** es una secuencia de pasos que Claude ejecuta. Las skills definen workflows reutilizables.
6
+
7
+ ## Tipos de Workflows
8
+
9
+ ### 1. Linear Workflow
10
+
11
+ Pasos en secuencia:
12
+
13
+ ```markdown
14
+ ---
15
+ name: deploy
16
+ description: Deploy to production
17
+ ---
18
+
19
+ # Deploy Workflow
20
+
21
+ ## Steps (execute in order)
22
+
23
+ 1. **Verify** - Run tests and typecheck
24
+ 2. **Build** - Create production build
25
+ 3. **Deploy** - Push to production
26
+ 4. **Verify** - Check deployment health
27
+ ```
28
+
29
+ ### 2. Branching Workflow
30
+
31
+ Decisiones basadas en condiciones:
32
+
33
+ ```markdown
34
+ ---
35
+ name: fix-issue
36
+ description: Fix a reported issue
37
+ arguments:
38
+ - name: issueType
39
+ enum: [bug, performance, security]
40
+ ---
41
+
42
+ # Fix Issue
43
+
44
+ ## Analyze
45
+
46
+ First, identify the type of issue.
47
+
48
+ ## If bug
49
+ 1. Reproduce the issue
50
+ 2. Write failing test
51
+ 3. Fix the code
52
+ 4. Verify test passes
53
+
54
+ ## If performance
55
+ 1. Profile the code
56
+ 2. Identify bottleneck
57
+ 3. Optimize
58
+ 4. Benchmark improvement
59
+
60
+ ## If security
61
+ 1. Assess severity
62
+ 2. Create fix
63
+ 3. Run security scan
64
+ 4. Document in changelog
65
+ ```
66
+
67
+ ### 3. Iterative Workflow
68
+
69
+ Repetir hasta condición:
70
+
71
+ ```markdown
72
+ ---
73
+ name: refactor
74
+ description: Iterative refactoring
75
+ ---
76
+
77
+ # Refactor Workflow
78
+
79
+ ## Loop until complete
80
+
81
+ 1. **Identify** next refactoring opportunity
82
+ 2. **Apply** refactoring
83
+ 3. **Verify** tests still pass
84
+ 4. **Check** if more refactoring needed
85
+ - If yes: continue to step 1
86
+ - If no: complete workflow
87
+ ```
88
+
89
+ ### 4. Parallel Workflow
90
+
91
+ Tareas independientes en paralelo:
92
+
93
+ ```markdown
94
+ ---
95
+ name: full-check
96
+ description: Run all checks
97
+ ---
98
+
99
+ # Full Check Workflow
100
+
101
+ ## Run in parallel
102
+
103
+ Execute these independently:
104
+ - `npm run typecheck`
105
+ - `npm run lint`
106
+ - `npm run test`
107
+ - `npm run build`
108
+
109
+ ## Collect results
110
+
111
+ Report status of all checks.
112
+ ```
113
+
114
+ ## Integración con Expertos
115
+
116
+ Para decisiones críticas, consultar `/experts`:
117
+
118
+ ```markdown
119
+ ---
120
+ name: implement-feature
121
+ description: Implement a new feature with expert review
122
+ ---
123
+
124
+ # Implement Feature
125
+
126
+ ## 1. Plan
127
+
128
+ Create implementation plan using TodoWrite.
129
+
130
+ ## 2. Implement
131
+
132
+ Execute the plan step by step.
133
+
134
+ ## 3. Expert Review
135
+
136
+ If touching critical paths (finance, auth, schema):
137
+
138
+ ```
139
+ /experts [modified files]
140
+ ```
141
+
142
+ Wait for approval before proceeding.
143
+
144
+ ## 4. Finalize
145
+
146
+ If approved:
147
+ - Run final verification
148
+ - Create commit
149
+
150
+ If rejected:
151
+ - Address feedback
152
+ - Return to step 2
153
+ ```
154
+
155
+ ## Workflows Estándar Recomendados
156
+
157
+ ### Feature Development
158
+
159
+ ```markdown
160
+ 1. Understand requirements
161
+ 2. Create plan (TodoWrite)
162
+ 3. Implement incrementally
163
+ 4. Write tests for critical paths
164
+ 5. Run verification (typecheck, lint)
165
+ 6. Expert review if critical
166
+ 7. Commit changes
167
+ ```
168
+
169
+ ### Bug Fix
170
+
171
+ ```markdown
172
+ 1. Reproduce issue
173
+ 2. Identify root cause
174
+ 3. Write failing test
175
+ 4. Implement fix
176
+ 5. Verify test passes
177
+ 6. Check for regressions
178
+ 7. Commit with issue reference
179
+ ```
180
+
181
+ ### Refactoring
182
+
183
+ ```markdown
184
+ 1. Identify scope
185
+ 2. Ensure test coverage
186
+ 3. Small, incremental changes
187
+ 4. Run tests after each change
188
+ 5. No behavior changes
189
+ 6. Commit atomically
190
+ ```
191
+
192
+ ## Estado y Tracking
193
+
194
+ Usar TodoWrite para tracking:
195
+
196
+ ```markdown
197
+ ## Tracking
198
+
199
+ Use TodoWrite to:
200
+ - Create tasks at workflow start
201
+ - Update status as you progress
202
+ - Mark completed when done
203
+ - Add discovered tasks as needed
204
+ ```
205
+
206
+ ## Memory Integration
207
+
208
+ Registrar aprendizajes:
209
+
210
+ ```markdown
211
+ ## Learning Capture
212
+
213
+ During workflow:
214
+ - Capture new patterns discovered
215
+ - Note gotchas for future reference
216
+ - Record decisions made and why
217
+
218
+ Use memory tools to persist learnings.
219
+ ```
220
+
221
+ ## Error Handling
222
+
223
+ ```markdown
224
+ ## If errors occur
225
+
226
+ 1. **Log** the error context
227
+ 2. **Analyze** root cause
228
+ 3. **Decide** next action:
229
+ - Retry if transient
230
+ - Ask user if unclear
231
+ - Abort if unrecoverable
232
+ 4. **Document** the issue if new pattern
233
+ ```
234
+
235
+ ## Composing Workflows
236
+
237
+ Skills pueden llamar otras skills:
238
+
239
+ ```markdown
240
+ ---
241
+ name: release
242
+ description: Full release workflow
243
+ ---
244
+
245
+ # Release
246
+
247
+ ## Steps
248
+
249
+ 1. Run `/full-check` - all validations
250
+ 2. Run `/changelog` - update changelog
251
+ 3. Run `/version-bump` - increment version
252
+ 4. Run `/deploy` - push to production
253
+ 5. Run `/notify` - send notifications
254
+ ```
255
+
256
+ ## Ejemplo Completo
257
+
258
+ ```markdown
259
+ ---
260
+ name: add-api-endpoint
261
+ description: Add new TRPC endpoint with full workflow
262
+ arguments:
263
+ - name: routerName
264
+ required: true
265
+ - name: procedureName
266
+ required: true
267
+ ---
268
+
269
+ # Add API Endpoint: {{routerName}}.{{procedureName}}
270
+
271
+ ## 1. Setup Tasks
272
+
273
+ Create TodoWrite entries:
274
+ - [ ] Create procedure in router
275
+ - [ ] Add Zod schema
276
+ - [ ] Write tests
277
+ - [ ] Update client types
278
+
279
+ ## 2. Implementation
280
+
281
+ ### 2.1 Locate Router
282
+
283
+ Find `src/server/api/routers/{{routerName}}.ts`
284
+
285
+ ### 2.2 Add Procedure
286
+
287
+ ```typescript
288
+ {{procedureName}}: protectedProcedure
289
+ .input({{procedureName}}Schema)
290
+ .mutation(async ({ ctx, input }) => {
291
+ // Implementation
292
+ })
293
+ ```
294
+
295
+ ### 2.3 Add Schema
296
+
297
+ ```typescript
298
+ const {{procedureName}}Schema = z.object({
299
+ // Define input schema
300
+ })
301
+ ```
302
+
303
+ ## 3. Testing
304
+
305
+ Create test at `src/server/api/routers/__tests__/{{routerName}}.test.ts`
306
+
307
+ ## 4. Verification
308
+
309
+ Run:
310
+ - `npm run typecheck`
311
+ - `npm run test -- {{routerName}}`
312
+
313
+ ## 5. Expert Review
314
+
315
+ If {{routerName}} is in critical path:
316
+ ```
317
+ /experts src/server/api/routers/{{routerName}}.ts
318
+ ```
319
+
320
+ ## 6. Complete
321
+
322
+ Mark all todos as completed.
323
+ ```
@@ -0,0 +1,297 @@
1
+ # Diseño de Tools Internas
2
+
3
+ ## Qué es una Tool
4
+
5
+ Una **Tool** es una utilidad reutilizable que automatiza tareas comunes. Diferente de MCP tools, estas son funciones/scripts internos del proyecto.
6
+
7
+ ## Categorías
8
+
9
+ ### 1. CLI Tools
10
+
11
+ Scripts ejecutables desde terminal:
12
+
13
+ ```
14
+ scripts/
15
+ ├── checks/ # Validaciones
16
+ │ ├── typecheck.mjs
17
+ │ └── lint.mjs
18
+ ├── migration/ # Migraciones
19
+ │ └── run-migration.mjs
20
+ └── ai/ # AI-related
21
+ └── generate.mjs
22
+ ```
23
+
24
+ ### 2. Build Tools
25
+
26
+ Parte del proceso de build:
27
+
28
+ ```typescript
29
+ // tools/build/
30
+ ├── compile.ts
31
+ ├── bundle.ts
32
+ └── optimize.ts
33
+ ```
34
+
35
+ ### 3. Dev Tools
36
+
37
+ Para desarrollo local:
38
+
39
+ ```typescript
40
+ // tools/dev/
41
+ ├── mock-server.ts
42
+ ├── seed-db.ts
43
+ └── test-utils.ts
44
+ ```
45
+
46
+ ## Estructura de una CLI Tool
47
+
48
+ ```typescript
49
+ #!/usr/bin/env node
50
+ // scripts/my-tool.mjs
51
+
52
+ import { parseArgs } from 'node:util'
53
+
54
+ // 1. Parse arguments
55
+ const { values, positionals } = parseArgs({
56
+ options: {
57
+ verbose: { type: 'boolean', short: 'v', default: false },
58
+ output: { type: 'string', short: 'o' }
59
+ },
60
+ allowPositionals: true
61
+ })
62
+
63
+ // 2. Validate input
64
+ if (positionals.length === 0) {
65
+ console.error('Usage: my-tool <input> [--verbose] [--output path]')
66
+ process.exit(1)
67
+ }
68
+
69
+ // 3. Execute
70
+ async function main() {
71
+ try {
72
+ const result = await doWork(positionals[0], values)
73
+ console.log('Done:', result)
74
+ process.exit(0)
75
+ } catch (error) {
76
+ console.error('Error:', error.message)
77
+ process.exit(1)
78
+ }
79
+ }
80
+
81
+ main()
82
+ ```
83
+
84
+ ## Patrones Recomendados
85
+
86
+ ### Patrón: Reporter
87
+
88
+ Para tools que analizan y reportan:
89
+
90
+ ```typescript
91
+ interface ReportResult {
92
+ passed: boolean
93
+ items: ReportItem[]
94
+ summary: string
95
+ }
96
+
97
+ async function analyze(path: string): Promise<ReportResult> {
98
+ const items = await scanFiles(path)
99
+ const issues = items.filter(i => !i.valid)
100
+
101
+ return {
102
+ passed: issues.length === 0,
103
+ items: issues,
104
+ summary: `Found ${issues.length} issues in ${items.length} files`
105
+ }
106
+ }
107
+ ```
108
+
109
+ ### Patrón: Transformer
110
+
111
+ Para tools que transforman archivos:
112
+
113
+ ```typescript
114
+ interface TransformOptions {
115
+ input: string
116
+ output: string
117
+ dryRun?: boolean
118
+ }
119
+
120
+ async function transform(options: TransformOptions): Promise<void> {
121
+ const content = await readFile(options.input, 'utf-8')
122
+ const transformed = applyTransformations(content)
123
+
124
+ if (options.dryRun) {
125
+ console.log('Would write to:', options.output)
126
+ console.log(transformed)
127
+ return
128
+ }
129
+
130
+ await writeFile(options.output, transformed)
131
+ }
132
+ ```
133
+
134
+ ### Patrón: Batch Processor
135
+
136
+ Para operaciones sobre múltiples archivos:
137
+
138
+ ```typescript
139
+ async function processBatch(
140
+ files: string[],
141
+ processor: (file: string) => Promise<void>
142
+ ): Promise<BatchResult> {
143
+ const results = await Promise.allSettled(
144
+ files.map(processor)
145
+ )
146
+
147
+ return {
148
+ total: files.length,
149
+ succeeded: results.filter(r => r.status === 'fulfilled').length,
150
+ failed: results.filter(r => r.status === 'rejected').length
151
+ }
152
+ }
153
+ ```
154
+
155
+ ## Configuración
156
+
157
+ ### En package.json
158
+
159
+ ```json
160
+ {
161
+ "scripts": {
162
+ "tool:analyze": "node scripts/analyze.mjs",
163
+ "tool:migrate": "node scripts/migrate.mjs",
164
+ "tool:generate": "node scripts/generate.mjs"
165
+ }
166
+ }
167
+ ```
168
+
169
+ ### Con argumentos
170
+
171
+ ```json
172
+ {
173
+ "scripts": {
174
+ "lint:all": "npm run lint -- --fix",
175
+ "check:verbose": "npm run check -- --verbose"
176
+ }
177
+ }
178
+ ```
179
+
180
+ ## Logging
181
+
182
+ ```typescript
183
+ // Usar chalk para colores
184
+ import chalk from 'chalk'
185
+
186
+ function log(level: 'info' | 'warn' | 'error', msg: string) {
187
+ const prefix = {
188
+ info: chalk.blue('ℹ'),
189
+ warn: chalk.yellow('⚠'),
190
+ error: chalk.red('✖')
191
+ }
192
+ console.error(`${prefix[level]} ${msg}`)
193
+ }
194
+
195
+ // Usar stderr para logs, stdout para output
196
+ console.error('[INFO] Processing...') // logs
197
+ console.log(JSON.stringify(result)) // output (puede ser piped)
198
+ ```
199
+
200
+ ## Testing Tools
201
+
202
+ ```typescript
203
+ import { describe, it, expect } from 'vitest'
204
+ import { execSync } from 'child_process'
205
+
206
+ describe('my-tool', () => {
207
+ it('should process valid input', () => {
208
+ const result = execSync('node scripts/my-tool.mjs input.txt')
209
+ expect(result.toString()).toContain('Done')
210
+ })
211
+
212
+ it('should fail on invalid input', () => {
213
+ expect(() => {
214
+ execSync('node scripts/my-tool.mjs')
215
+ }).toThrow()
216
+ })
217
+ })
218
+ ```
219
+
220
+ ## Anti-Patterns
221
+
222
+ ### NO: Hardcoded paths
223
+
224
+ ```typescript
225
+ // MAL
226
+ const config = await readFile('/Users/carlos/project/config.json')
227
+
228
+ // BIEN
229
+ const config = await readFile(path.join(process.cwd(), 'config.json'))
230
+ ```
231
+
232
+ ### NO: Silent failures
233
+
234
+ ```typescript
235
+ // MAL
236
+ try {
237
+ await doWork()
238
+ } catch {
239
+ // silencio
240
+ }
241
+
242
+ // BIEN
243
+ try {
244
+ await doWork()
245
+ } catch (error) {
246
+ console.error('Failed:', error.message)
247
+ process.exit(1)
248
+ }
249
+ ```
250
+
251
+ ### NO: Sin validación de input
252
+
253
+ ```typescript
254
+ // MAL
255
+ async function main() {
256
+ await processFile(process.argv[2])
257
+ }
258
+
259
+ // BIEN
260
+ async function main() {
261
+ const file = process.argv[2]
262
+ if (!file) {
263
+ console.error('Usage: tool <file>')
264
+ process.exit(1)
265
+ }
266
+ if (!existsSync(file)) {
267
+ console.error(`File not found: ${file}`)
268
+ process.exit(1)
269
+ }
270
+ await processFile(file)
271
+ }
272
+ ```
273
+
274
+ ## Documentación
275
+
276
+ Cada tool debe tener:
277
+
278
+ 1. **JSDoc header** con descripción y ejemplos
279
+ 2. **--help** flag que explica uso
280
+ 3. **README** si es compleja
281
+
282
+ ```typescript
283
+ /**
284
+ * @file Analyze TypeScript files for common issues
285
+ * @example
286
+ * ```bash
287
+ * # Analyze single file
288
+ * npm run tool:analyze src/index.ts
289
+ *
290
+ * # Analyze directory
291
+ * npm run tool:analyze src/ --recursive
292
+ *
293
+ * # Output JSON
294
+ * npm run tool:analyze src/ --format json > report.json
295
+ * ```
296
+ */
297
+ ```