@su-record/vibe 2.4.71 → 2.4.74
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.
- package/CLAUDE.md +216 -215
- package/README.md +4 -4
- package/agents/research/best-practices-agent.md +13 -13
- package/agents/research/codebase-patterns-agent.md +33 -33
- package/agents/research/framework-docs-agent.md +23 -23
- package/agents/research/security-advisory-agent.md +29 -29
- package/agents/review/architecture-reviewer.md +31 -31
- package/agents/review/complexity-reviewer.md +21 -21
- package/agents/review/data-integrity-reviewer.md +29 -29
- package/agents/review/git-history-reviewer.md +24 -24
- package/agents/review/performance-reviewer.md +29 -29
- package/agents/review/python-reviewer.md +53 -53
- package/agents/review/rails-reviewer.md +40 -40
- package/agents/review/react-reviewer.md +40 -40
- package/agents/review/security-reviewer.md +29 -29
- package/agents/review/simplicity-reviewer.md +24 -24
- package/agents/review/test-coverage-reviewer.md +31 -31
- package/agents/review/typescript-reviewer.md +41 -41
- package/commands/vibe.analyze.md +103 -7
- package/commands/vibe.reason.md +106 -0
- package/commands/vibe.review.md +123 -38
- package/commands/vibe.run.md +286 -221
- package/commands/vibe.spec.md +293 -173
- package/commands/vibe.utils.md +104 -3
- package/commands/vibe.verify.md +179 -86
- package/dist/cli/detect.js +40 -40
- package/dist/cli/detect.js.map +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/llm.js +5 -5
- package/dist/cli/llm.js.map +1 -1
- package/dist/cli/setup.js +3 -3
- package/dist/cli/setup.js.map +1 -1
- package/dist/lib/ContextCompressor.js +1 -1
- package/dist/lib/ContextCompressor.js.map +1 -1
- package/dist/lib/gemini-api.js +12 -12
- package/dist/lib/gemini-api.js.map +1 -1
- package/dist/lib/gemini-oauth.js +22 -22
- package/dist/lib/gemini-oauth.js.map +1 -1
- package/dist/lib/gemini-storage.js +3 -3
- package/dist/lib/gemini-storage.js.map +1 -1
- package/dist/lib/gpt-api.js +11 -11
- package/dist/lib/gpt-api.js.map +1 -1
- package/dist/lib/gpt-oauth.js +28 -28
- package/dist/lib/gpt-oauth.js.map +1 -1
- package/dist/lib/gpt-storage.js +3 -3
- package/dist/lib/gpt-storage.js.map +1 -1
- package/dist/orchestrator/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator/orchestrator.js +4 -6
- package/dist/orchestrator/orchestrator.js.map +1 -1
- package/dist/tools/convention/analyzeComplexity.js +3 -3
- package/dist/tools/convention/analyzeComplexity.js.map +1 -1
- package/dist/tools/convention/applyQualityRules.js +1 -1
- package/dist/tools/convention/applyQualityRules.js.map +1 -1
- package/dist/tools/convention/checkCouplingCohesion.js +2 -2
- package/dist/tools/convention/checkCouplingCohesion.js.map +1 -1
- package/dist/tools/convention/suggestImprovements.js +1 -1
- package/dist/tools/convention/suggestImprovements.js.map +1 -1
- package/dist/tools/convention/validateCodeQuality.js +1 -1
- package/dist/tools/convention/validateCodeQuality.js.map +1 -1
- package/dist/tools/memory/autoSaveContext.js +1 -1
- package/dist/tools/memory/autoSaveContext.js.map +1 -1
- package/dist/tools/memory/createMemoryTimeline.js +27 -27
- package/dist/tools/memory/createMemoryTimeline.js.map +1 -1
- package/dist/tools/memory/deleteMemory.js +1 -1
- package/dist/tools/memory/deleteMemory.js.map +1 -1
- package/dist/tools/memory/getMemoryGraph.js +24 -24
- package/dist/tools/memory/getMemoryGraph.js.map +1 -1
- package/dist/tools/memory/getSessionContext.js +36 -36
- package/dist/tools/memory/getSessionContext.js.map +1 -1
- package/dist/tools/memory/linkMemories.js +21 -21
- package/dist/tools/memory/linkMemories.js.map +1 -1
- package/dist/tools/memory/prioritizeMemory.js +1 -1
- package/dist/tools/memory/prioritizeMemory.js.map +1 -1
- package/dist/tools/memory/restoreSessionContext.js +1 -1
- package/dist/tools/memory/restoreSessionContext.js.map +1 -1
- package/dist/tools/memory/searchMemories.js +1 -1
- package/dist/tools/memory/searchMemories.js.map +1 -1
- package/dist/tools/memory/searchMemoriesAdvanced.js +42 -42
- package/dist/tools/memory/searchMemoriesAdvanced.js.map +1 -1
- package/dist/tools/memory/startSession.js +2 -2
- package/dist/tools/memory/startSession.js.map +1 -1
- package/dist/tools/memory/updateMemory.js +1 -1
- package/dist/tools/memory/updateMemory.js.map +1 -1
- package/dist/tools/semantic/analyzeDependencyGraph.js +38 -38
- package/dist/tools/semantic/analyzeDependencyGraph.js.map +1 -1
- package/dist/tools/semantic/findReferences.js +1 -1
- package/dist/tools/semantic/findReferences.js.map +1 -1
- package/dist/tools/semantic/findSymbol.js +1 -1
- package/dist/tools/semantic/findSymbol.js.map +1 -1
- package/dist/tools/time/getCurrentTime.js +1 -1
- package/dist/tools/time/getCurrentTime.js.map +1 -1
- package/dist/tools/ui/previewUiAscii.js +2 -2
- package/dist/tools/ui/previewUiAscii.js.map +1 -1
- package/hooks/hooks.json +11 -2
- package/hooks/scripts/llm-orchestrate.js +1 -1
- package/hooks/scripts/utils.js +31 -6
- package/languages/csharp-unity.md +82 -83
- package/languages/dart-flutter.md +89 -88
- package/languages/go.md +76 -75
- package/languages/java-spring.md +85 -84
- package/languages/kotlin-android.md +64 -63
- package/languages/python-django.md +83 -82
- package/languages/python-fastapi.md +82 -81
- package/languages/rust.md +75 -74
- package/languages/swift-ios.md +73 -72
- package/languages/typescript-electron.md +70 -71
- package/languages/typescript-nextjs.md +93 -92
- package/languages/typescript-node.md +64 -63
- package/languages/typescript-nuxt.md +113 -112
- package/languages/typescript-react-native.md +82 -81
- package/languages/typescript-react.md +76 -75
- package/languages/typescript-tauri.md +74 -75
- package/languages/typescript-vue.md +73 -72
- package/package.json +1 -1
- package/skills/git-worktree.md +25 -25
- package/skills/multi-llm-orchestration.md +4 -6
- package/skills/priority-todos.md +39 -39
- package/skills/vibe-capabilities.md +2 -2
- package/vibe/config.json +2 -2
|
@@ -1,23 +1,24 @@
|
|
|
1
|
-
#
|
|
1
|
+
# TypeScript + Node.js Backend Quality Rules
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## Core Principles (inherited from core)
|
|
4
4
|
|
|
5
5
|
```markdown
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
# Core Principles (inherited from core)
|
|
7
|
+
Single Responsibility (SRP)
|
|
8
|
+
No Duplication (DRY)
|
|
9
|
+
Reusability
|
|
10
|
+
Low Complexity
|
|
11
|
+
Function <= 30 lines
|
|
12
|
+
Nesting <= 3 levels
|
|
13
|
+
Cyclomatic complexity <= 10
|
|
13
14
|
```
|
|
14
15
|
|
|
15
|
-
## Express.js
|
|
16
|
+
## Express.js Rules
|
|
16
17
|
|
|
17
|
-
### 1.
|
|
18
|
+
### 1. Structured Routers
|
|
18
19
|
|
|
19
20
|
```typescript
|
|
20
|
-
//
|
|
21
|
+
// Good: routes/user.routes.ts
|
|
21
22
|
import { Router } from 'express';
|
|
22
23
|
import { UserController } from '@/controllers/user.controller';
|
|
23
24
|
import { authMiddleware } from '@/middleware/auth';
|
|
@@ -36,10 +37,10 @@ router.delete('/:id', authMiddleware, controller.delete);
|
|
|
36
37
|
export default router;
|
|
37
38
|
```
|
|
38
39
|
|
|
39
|
-
### 2. Controller
|
|
40
|
+
### 2. Controller Pattern
|
|
40
41
|
|
|
41
42
|
```typescript
|
|
42
|
-
//
|
|
43
|
+
// Good: controllers/user.controller.ts
|
|
43
44
|
import { Request, Response, NextFunction } from 'express';
|
|
44
45
|
import { UserService } from '@/services/user.service';
|
|
45
46
|
import { CreateUserDto, UpdateUserDto } from '@/dto/user.dto';
|
|
@@ -64,7 +65,7 @@ export class UserController {
|
|
|
64
65
|
try {
|
|
65
66
|
const user = await this.userService.findById(req.params.id);
|
|
66
67
|
if (!user) {
|
|
67
|
-
return res.status(404).json({ message: '
|
|
68
|
+
return res.status(404).json({ message: 'User not found' });
|
|
68
69
|
}
|
|
69
70
|
res.json(user);
|
|
70
71
|
} catch (error) {
|
|
@@ -84,10 +85,10 @@ export class UserController {
|
|
|
84
85
|
}
|
|
85
86
|
```
|
|
86
87
|
|
|
87
|
-
### 3. Service
|
|
88
|
+
### 3. Service Layer
|
|
88
89
|
|
|
89
90
|
```typescript
|
|
90
|
-
//
|
|
91
|
+
// Good: services/user.service.ts
|
|
91
92
|
import { prisma } from '@/lib/prisma';
|
|
92
93
|
import { CreateUserDto, UpdateUserDto } from '@/dto/user.dto';
|
|
93
94
|
import { hashPassword } from '@/utils/crypto';
|
|
@@ -124,7 +125,7 @@ export class UserService {
|
|
|
124
125
|
});
|
|
125
126
|
|
|
126
127
|
if (existing) {
|
|
127
|
-
throw new AppError('
|
|
128
|
+
throw new AppError('Email already exists', 409);
|
|
128
129
|
}
|
|
129
130
|
|
|
130
131
|
const hashedPassword = await hashPassword(dto.password);
|
|
@@ -139,12 +140,12 @@ export class UserService {
|
|
|
139
140
|
}
|
|
140
141
|
```
|
|
141
142
|
|
|
142
|
-
## NestJS
|
|
143
|
+
## NestJS Rules
|
|
143
144
|
|
|
144
|
-
### 1. Module
|
|
145
|
+
### 1. Module Structure
|
|
145
146
|
|
|
146
147
|
```typescript
|
|
147
|
-
//
|
|
148
|
+
// Good: user/user.module.ts
|
|
148
149
|
import { Module } from '@nestjs/common';
|
|
149
150
|
import { UserController } from './user.controller';
|
|
150
151
|
import { UserService } from './user.service';
|
|
@@ -161,7 +162,7 @@ export class UserModule {}
|
|
|
161
162
|
### 2. Controller (NestJS)
|
|
162
163
|
|
|
163
164
|
```typescript
|
|
164
|
-
//
|
|
165
|
+
// Good: user/user.controller.ts
|
|
165
166
|
import {
|
|
166
167
|
Controller,
|
|
167
168
|
Get,
|
|
@@ -186,19 +187,19 @@ export class UserController {
|
|
|
186
187
|
constructor(private readonly userService: UserService) {}
|
|
187
188
|
|
|
188
189
|
@Get()
|
|
189
|
-
@ApiOperation({ summary: '
|
|
190
|
+
@ApiOperation({ summary: 'Get user list' })
|
|
190
191
|
async findAll(@Query() query: UserQueryDto) {
|
|
191
192
|
return this.userService.findAll(query);
|
|
192
193
|
}
|
|
193
194
|
|
|
194
195
|
@Get(':id')
|
|
195
|
-
@ApiOperation({ summary: '
|
|
196
|
+
@ApiOperation({ summary: 'Get user detail' })
|
|
196
197
|
async findOne(@Param('id', ParseIntPipe) id: number) {
|
|
197
198
|
return this.userService.findById(id);
|
|
198
199
|
}
|
|
199
200
|
|
|
200
201
|
@Post()
|
|
201
|
-
@ApiOperation({ summary: '
|
|
202
|
+
@ApiOperation({ summary: 'Create user' })
|
|
202
203
|
async create(@Body() dto: CreateUserDto) {
|
|
203
204
|
return this.userService.create(dto);
|
|
204
205
|
}
|
|
@@ -206,7 +207,7 @@ export class UserController {
|
|
|
206
207
|
@Put(':id')
|
|
207
208
|
@UseGuards(JwtAuthGuard)
|
|
208
209
|
@ApiBearerAuth()
|
|
209
|
-
@ApiOperation({ summary: '
|
|
210
|
+
@ApiOperation({ summary: 'Update user' })
|
|
210
211
|
async update(
|
|
211
212
|
@Param('id', ParseIntPipe) id: number,
|
|
212
213
|
@Body() dto: UpdateUserDto,
|
|
@@ -220,7 +221,7 @@ export class UserController {
|
|
|
220
221
|
### 3. Service (NestJS)
|
|
221
222
|
|
|
222
223
|
```typescript
|
|
223
|
-
//
|
|
224
|
+
// Good: user/user.service.ts
|
|
224
225
|
import { Injectable, NotFoundException, ConflictException } from '@nestjs/common';
|
|
225
226
|
import { UserRepository } from './user.repository';
|
|
226
227
|
import { CreateUserDto, UpdateUserDto } from './dto';
|
|
@@ -237,7 +238,7 @@ export class UserService {
|
|
|
237
238
|
async findById(id: number) {
|
|
238
239
|
const user = await this.userRepository.findById(id);
|
|
239
240
|
if (!user) {
|
|
240
|
-
throw new NotFoundException('
|
|
241
|
+
throw new NotFoundException('User not found');
|
|
241
242
|
}
|
|
242
243
|
return user;
|
|
243
244
|
}
|
|
@@ -245,7 +246,7 @@ export class UserService {
|
|
|
245
246
|
async create(dto: CreateUserDto) {
|
|
246
247
|
const existing = await this.userRepository.findByEmail(dto.email);
|
|
247
248
|
if (existing) {
|
|
248
|
-
throw new ConflictException('
|
|
249
|
+
throw new ConflictException('Email already exists');
|
|
249
250
|
}
|
|
250
251
|
|
|
251
252
|
const hashedPassword = await bcrypt.hash(dto.password, 10);
|
|
@@ -257,24 +258,24 @@ export class UserService {
|
|
|
257
258
|
}
|
|
258
259
|
```
|
|
259
260
|
|
|
260
|
-
### 4. DTO
|
|
261
|
+
### 4. DTO and Validation
|
|
261
262
|
|
|
262
263
|
```typescript
|
|
263
|
-
//
|
|
264
|
+
// Good: user/dto/create-user.dto.ts
|
|
264
265
|
import { IsEmail, IsString, MinLength, IsOptional } from 'class-validator';
|
|
265
266
|
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
|
|
266
267
|
|
|
267
268
|
export class CreateUserDto {
|
|
268
269
|
@ApiProperty({ example: 'user@example.com' })
|
|
269
|
-
@IsEmail({}, { message: '
|
|
270
|
+
@IsEmail({}, { message: 'Invalid email format' })
|
|
270
271
|
email: string;
|
|
271
272
|
|
|
272
273
|
@ApiProperty({ example: 'password123' })
|
|
273
274
|
@IsString()
|
|
274
|
-
@MinLength(8, { message: '
|
|
275
|
+
@MinLength(8, { message: 'Password must be at least 8 characters' })
|
|
275
276
|
password: string;
|
|
276
277
|
|
|
277
|
-
@ApiProperty({ example: '
|
|
278
|
+
@ApiProperty({ example: 'John Doe' })
|
|
278
279
|
@IsString()
|
|
279
280
|
name: string;
|
|
280
281
|
|
|
@@ -285,12 +286,12 @@ export class CreateUserDto {
|
|
|
285
286
|
}
|
|
286
287
|
```
|
|
287
288
|
|
|
288
|
-
##
|
|
289
|
+
## Common Rules
|
|
289
290
|
|
|
290
|
-
###
|
|
291
|
+
### Error Handling
|
|
291
292
|
|
|
292
293
|
```typescript
|
|
293
|
-
//
|
|
294
|
+
// Good: utils/errors.ts
|
|
294
295
|
export class AppError extends Error {
|
|
295
296
|
constructor(
|
|
296
297
|
message: string,
|
|
@@ -302,7 +303,7 @@ export class AppError extends Error {
|
|
|
302
303
|
}
|
|
303
304
|
}
|
|
304
305
|
|
|
305
|
-
//
|
|
306
|
+
// Good: middleware/error.middleware.ts
|
|
306
307
|
import { Request, Response, NextFunction } from 'express';
|
|
307
308
|
import { AppError } from '@/utils/errors';
|
|
308
309
|
|
|
@@ -324,7 +325,7 @@ export function errorHandler(
|
|
|
324
325
|
|
|
325
326
|
res.status(500).json({
|
|
326
327
|
success: false,
|
|
327
|
-
message: '
|
|
328
|
+
message: 'Server error occurred',
|
|
328
329
|
});
|
|
329
330
|
}
|
|
330
331
|
```
|
|
@@ -332,14 +333,14 @@ export function errorHandler(
|
|
|
332
333
|
### Validation (Zod)
|
|
333
334
|
|
|
334
335
|
```typescript
|
|
335
|
-
//
|
|
336
|
+
// Good: schemas/user.schema.ts
|
|
336
337
|
import { z } from 'zod';
|
|
337
338
|
|
|
338
339
|
export const createUserSchema = z.object({
|
|
339
340
|
body: z.object({
|
|
340
|
-
email: z.string().email('
|
|
341
|
-
password: z.string().min(8, '
|
|
342
|
-
name: z.string().min(1, '
|
|
341
|
+
email: z.string().email('Invalid email format'),
|
|
342
|
+
password: z.string().min(8, 'Password must be at least 8 characters'),
|
|
343
|
+
name: z.string().min(1, 'Name is required'),
|
|
343
344
|
phone: z.string().optional(),
|
|
344
345
|
}),
|
|
345
346
|
});
|
|
@@ -347,29 +348,29 @@ export const createUserSchema = z.object({
|
|
|
347
348
|
export type CreateUserInput = z.infer<typeof createUserSchema>['body'];
|
|
348
349
|
```
|
|
349
350
|
|
|
350
|
-
##
|
|
351
|
+
## File Structure
|
|
351
352
|
|
|
352
|
-
```
|
|
353
|
+
```text
|
|
353
354
|
src/
|
|
354
|
-
├── controllers/ #
|
|
355
|
-
├── services/ #
|
|
356
|
-
├── repositories/ #
|
|
355
|
+
├── controllers/ # Route handlers
|
|
356
|
+
├── services/ # Business logic
|
|
357
|
+
├── repositories/ # Data access
|
|
357
358
|
├── dto/ # Data Transfer Objects
|
|
358
|
-
├── schemas/ # Validation
|
|
359
|
-
├── middleware/ # Express
|
|
360
|
-
├── routes/ #
|
|
361
|
-
├── utils/ #
|
|
362
|
-
├── types/ # TypeScript
|
|
363
|
-
├── config/ #
|
|
364
|
-
└── lib/ #
|
|
359
|
+
├── schemas/ # Validation schemas (Zod)
|
|
360
|
+
├── middleware/ # Express middleware
|
|
361
|
+
├── routes/ # Router definitions
|
|
362
|
+
├── utils/ # Utilities
|
|
363
|
+
├── types/ # TypeScript types
|
|
364
|
+
├── config/ # Configuration
|
|
365
|
+
└── lib/ # External library wrappers
|
|
365
366
|
```
|
|
366
367
|
|
|
367
|
-
##
|
|
368
|
+
## Checklist
|
|
368
369
|
|
|
369
|
-
- [ ] Controller
|
|
370
|
-
- [ ]
|
|
371
|
-
- [ ] Zod/class-validator
|
|
372
|
-
- [ ]
|
|
373
|
-
- [ ]
|
|
374
|
-
- [ ] `any`
|
|
375
|
-
- [ ] async/await + try/catch
|
|
370
|
+
- [ ] Controller -> Service -> Repository layer separation
|
|
371
|
+
- [ ] Define input/output types with DTO
|
|
372
|
+
- [ ] Validate input with Zod/class-validator
|
|
373
|
+
- [ ] Use custom error class
|
|
374
|
+
- [ ] Centralize error handling with error middleware
|
|
375
|
+
- [ ] No `any` type usage
|
|
376
|
+
- [ ] async/await + try/catch or error middleware
|