@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.
Files changed (120) hide show
  1. package/CLAUDE.md +216 -215
  2. package/README.md +4 -4
  3. package/agents/research/best-practices-agent.md +13 -13
  4. package/agents/research/codebase-patterns-agent.md +33 -33
  5. package/agents/research/framework-docs-agent.md +23 -23
  6. package/agents/research/security-advisory-agent.md +29 -29
  7. package/agents/review/architecture-reviewer.md +31 -31
  8. package/agents/review/complexity-reviewer.md +21 -21
  9. package/agents/review/data-integrity-reviewer.md +29 -29
  10. package/agents/review/git-history-reviewer.md +24 -24
  11. package/agents/review/performance-reviewer.md +29 -29
  12. package/agents/review/python-reviewer.md +53 -53
  13. package/agents/review/rails-reviewer.md +40 -40
  14. package/agents/review/react-reviewer.md +40 -40
  15. package/agents/review/security-reviewer.md +29 -29
  16. package/agents/review/simplicity-reviewer.md +24 -24
  17. package/agents/review/test-coverage-reviewer.md +31 -31
  18. package/agents/review/typescript-reviewer.md +41 -41
  19. package/commands/vibe.analyze.md +103 -7
  20. package/commands/vibe.reason.md +106 -0
  21. package/commands/vibe.review.md +123 -38
  22. package/commands/vibe.run.md +286 -221
  23. package/commands/vibe.spec.md +293 -173
  24. package/commands/vibe.utils.md +104 -3
  25. package/commands/vibe.verify.md +179 -86
  26. package/dist/cli/detect.js +40 -40
  27. package/dist/cli/detect.js.map +1 -1
  28. package/dist/cli/index.d.ts +1 -1
  29. package/dist/cli/index.js +1 -1
  30. package/dist/cli/llm.js +5 -5
  31. package/dist/cli/llm.js.map +1 -1
  32. package/dist/cli/setup.js +3 -3
  33. package/dist/cli/setup.js.map +1 -1
  34. package/dist/lib/ContextCompressor.js +1 -1
  35. package/dist/lib/ContextCompressor.js.map +1 -1
  36. package/dist/lib/gemini-api.js +12 -12
  37. package/dist/lib/gemini-api.js.map +1 -1
  38. package/dist/lib/gemini-oauth.js +22 -22
  39. package/dist/lib/gemini-oauth.js.map +1 -1
  40. package/dist/lib/gemini-storage.js +3 -3
  41. package/dist/lib/gemini-storage.js.map +1 -1
  42. package/dist/lib/gpt-api.js +11 -11
  43. package/dist/lib/gpt-api.js.map +1 -1
  44. package/dist/lib/gpt-oauth.js +28 -28
  45. package/dist/lib/gpt-oauth.js.map +1 -1
  46. package/dist/lib/gpt-storage.js +3 -3
  47. package/dist/lib/gpt-storage.js.map +1 -1
  48. package/dist/orchestrator/orchestrator.d.ts.map +1 -1
  49. package/dist/orchestrator/orchestrator.js +4 -6
  50. package/dist/orchestrator/orchestrator.js.map +1 -1
  51. package/dist/tools/convention/analyzeComplexity.js +3 -3
  52. package/dist/tools/convention/analyzeComplexity.js.map +1 -1
  53. package/dist/tools/convention/applyQualityRules.js +1 -1
  54. package/dist/tools/convention/applyQualityRules.js.map +1 -1
  55. package/dist/tools/convention/checkCouplingCohesion.js +2 -2
  56. package/dist/tools/convention/checkCouplingCohesion.js.map +1 -1
  57. package/dist/tools/convention/suggestImprovements.js +1 -1
  58. package/dist/tools/convention/suggestImprovements.js.map +1 -1
  59. package/dist/tools/convention/validateCodeQuality.js +1 -1
  60. package/dist/tools/convention/validateCodeQuality.js.map +1 -1
  61. package/dist/tools/memory/autoSaveContext.js +1 -1
  62. package/dist/tools/memory/autoSaveContext.js.map +1 -1
  63. package/dist/tools/memory/createMemoryTimeline.js +27 -27
  64. package/dist/tools/memory/createMemoryTimeline.js.map +1 -1
  65. package/dist/tools/memory/deleteMemory.js +1 -1
  66. package/dist/tools/memory/deleteMemory.js.map +1 -1
  67. package/dist/tools/memory/getMemoryGraph.js +24 -24
  68. package/dist/tools/memory/getMemoryGraph.js.map +1 -1
  69. package/dist/tools/memory/getSessionContext.js +36 -36
  70. package/dist/tools/memory/getSessionContext.js.map +1 -1
  71. package/dist/tools/memory/linkMemories.js +21 -21
  72. package/dist/tools/memory/linkMemories.js.map +1 -1
  73. package/dist/tools/memory/prioritizeMemory.js +1 -1
  74. package/dist/tools/memory/prioritizeMemory.js.map +1 -1
  75. package/dist/tools/memory/restoreSessionContext.js +1 -1
  76. package/dist/tools/memory/restoreSessionContext.js.map +1 -1
  77. package/dist/tools/memory/searchMemories.js +1 -1
  78. package/dist/tools/memory/searchMemories.js.map +1 -1
  79. package/dist/tools/memory/searchMemoriesAdvanced.js +42 -42
  80. package/dist/tools/memory/searchMemoriesAdvanced.js.map +1 -1
  81. package/dist/tools/memory/startSession.js +2 -2
  82. package/dist/tools/memory/startSession.js.map +1 -1
  83. package/dist/tools/memory/updateMemory.js +1 -1
  84. package/dist/tools/memory/updateMemory.js.map +1 -1
  85. package/dist/tools/semantic/analyzeDependencyGraph.js +38 -38
  86. package/dist/tools/semantic/analyzeDependencyGraph.js.map +1 -1
  87. package/dist/tools/semantic/findReferences.js +1 -1
  88. package/dist/tools/semantic/findReferences.js.map +1 -1
  89. package/dist/tools/semantic/findSymbol.js +1 -1
  90. package/dist/tools/semantic/findSymbol.js.map +1 -1
  91. package/dist/tools/time/getCurrentTime.js +1 -1
  92. package/dist/tools/time/getCurrentTime.js.map +1 -1
  93. package/dist/tools/ui/previewUiAscii.js +2 -2
  94. package/dist/tools/ui/previewUiAscii.js.map +1 -1
  95. package/hooks/hooks.json +11 -2
  96. package/hooks/scripts/llm-orchestrate.js +1 -1
  97. package/hooks/scripts/utils.js +31 -6
  98. package/languages/csharp-unity.md +82 -83
  99. package/languages/dart-flutter.md +89 -88
  100. package/languages/go.md +76 -75
  101. package/languages/java-spring.md +85 -84
  102. package/languages/kotlin-android.md +64 -63
  103. package/languages/python-django.md +83 -82
  104. package/languages/python-fastapi.md +82 -81
  105. package/languages/rust.md +75 -74
  106. package/languages/swift-ios.md +73 -72
  107. package/languages/typescript-electron.md +70 -71
  108. package/languages/typescript-nextjs.md +93 -92
  109. package/languages/typescript-node.md +64 -63
  110. package/languages/typescript-nuxt.md +113 -112
  111. package/languages/typescript-react-native.md +82 -81
  112. package/languages/typescript-react.md +76 -75
  113. package/languages/typescript-tauri.md +74 -75
  114. package/languages/typescript-vue.md +73 -72
  115. package/package.json +1 -1
  116. package/skills/git-worktree.md +25 -25
  117. package/skills/multi-llm-orchestration.md +4 -6
  118. package/skills/priority-todos.md +39 -39
  119. package/skills/vibe-capabilities.md +2 -2
  120. package/vibe/config.json +2 -2
@@ -1,27 +1,28 @@
1
- # 📱 TypeScript + React Native 품질 규칙
1
+ # TypeScript + React Native Quality Rules
2
2
 
3
- ## 핵심 원칙 (core + React에서 상속)
3
+ ## Core Principles (inherited from core + React)
4
4
 
5
5
  ```markdown
6
- 단일 책임 (SRP)
7
- 중복 제거 (DRY)
8
- 재사용성
9
- ✅ 낮은 복잡도
10
- 함수 ≤ 30줄, JSX ≤ 50줄
11
- React 규칙 모두 적용
6
+ # Core Principles (inherited from core + React)
7
+ Single Responsibility (SRP)
8
+ No Duplication (DRY)
9
+ Reusability
10
+ Low Complexity
11
+ Function <= 30 lines, JSX <= 50 lines
12
+ All React rules apply
12
13
  ```
13
14
 
14
- ## React Native 특화 규칙
15
+ ## React Native Specific Rules
15
16
 
16
- ### 1. 플랫폼별 코드 분리
17
+ ### 1. Platform-specific Code Separation
17
18
 
18
19
  ```typescript
19
- // 파일 확장자로 분리
20
- Button.ios.tsx // iOS 전용
21
- Button.android.tsx // Android 전용
22
- Button.tsx // 공통
20
+ // Good: Separate by file extension
21
+ Button.ios.tsx // iOS only
22
+ Button.android.tsx // Android only
23
+ Button.tsx // Common
23
24
 
24
- // Platform API 사용
25
+ // Good: Using Platform API
25
26
  import { Platform, StyleSheet } from 'react-native';
26
27
 
27
28
  const styles = StyleSheet.create({
@@ -39,21 +40,21 @@ const styles = StyleSheet.create({
39
40
  },
40
41
  });
41
42
 
42
- // Platform.OS 체크
43
+ // Good: Platform.OS check
43
44
  if (Platform.OS === 'ios') {
44
- // iOS 전용 로직
45
+ // iOS specific logic
45
46
  } else if (Platform.OS === 'android') {
46
- // Android 전용 로직
47
+ // Android specific logic
47
48
  }
48
49
  ```
49
50
 
50
- ### 2. StyleSheet 사용 (인라인 스타일 지양)
51
+ ### 2. Use StyleSheet (Avoid Inline Styles)
51
52
 
52
53
  ```typescript
53
- // 인라인 스타일 (성능 저하)
54
+ // Bad: Inline style (performance degradation)
54
55
  <View style={{ flex: 1, padding: 16, backgroundColor: '#fff' }} />
55
56
 
56
- // StyleSheet (최적화됨)
57
+ // Good: StyleSheet (optimized)
57
58
  import { StyleSheet } from 'react-native';
58
59
 
59
60
  const styles = StyleSheet.create({
@@ -66,18 +67,18 @@ const styles = StyleSheet.create({
66
67
 
67
68
  <View style={styles.container} />
68
69
 
69
- // 조건부 스타일
70
+ // Good: Conditional styles
70
71
  <View style={[
71
72
  styles.container,
72
73
  isActive && styles.active,
73
- { marginTop: offset }, // 동적 값만 인라인
74
+ { marginTop: offset }, // Inline only for dynamic values
74
75
  ]} />
75
76
  ```
76
77
 
77
- ### 3. FlatList 최적화
78
+ ### 3. FlatList Optimization
78
79
 
79
80
  ```typescript
80
- // FlatList 성능 최적화
81
+ // Good: FlatList performance optimization
81
82
  interface User {
82
83
  id: string;
83
84
  name: string;
@@ -96,23 +97,23 @@ const UserList = ({ users }: { users: User[] }) => {
96
97
  data={users}
97
98
  renderItem={renderItem}
98
99
  keyExtractor={keyExtractor}
99
- // 성능 최적화 옵션
100
+ // Performance optimization options
100
101
  removeClippedSubviews={true}
101
102
  maxToRenderPerBatch={10}
102
103
  updateCellsBatchingPeriod={50}
103
104
  initialNumToRender={10}
104
105
  windowSize={5}
105
- // 헤더 고정
106
+ // Sticky header
106
107
  stickyHeaderIndices={[0]}
107
- // 리스트 분리
108
+ // List separator
108
109
  ItemSeparatorComponent={() => <View style={styles.separator} />}
109
- // 상태
110
+ // Empty state
110
111
  ListEmptyComponent={<EmptyState />}
111
112
  />
112
113
  );
113
114
  };
114
115
 
115
- // UserCard 메모이제이션
116
+ // Good: UserCard memoization
116
117
  const UserCard = React.memo<{ user: User }>(({ user }) => {
117
118
  return (
118
119
  <View style={styles.card}>
@@ -126,11 +127,11 @@ const UserCard = React.memo<{ user: User }>(({ user }) => {
126
127
  ### 4. Navigation (React Navigation)
127
128
 
128
129
  ```typescript
129
- // 타입 안전한 네비게이션
130
+ // Good: Type-safe navigation
130
131
  import { NavigationContainer } from '@react-navigation/native';
131
132
  import { createNativeStackNavigator } from '@react-navigation/native-stack';
132
133
 
133
- // 네비게이션 타입 정의
134
+ // Navigation type definition
134
135
  type RootStackParamList = {
135
136
  Home: undefined;
136
137
  UserProfile: { userId: string };
@@ -151,7 +152,7 @@ function App() {
151
152
  );
152
153
  }
153
154
 
154
- // 타입 안전한 네비게이션 훅
155
+ // Good: Type-safe navigation hook
155
156
  import { NativeStackNavigationProp } from '@react-navigation/native-stack';
156
157
  import { useNavigation } from '@react-navigation/native';
157
158
 
@@ -164,19 +165,19 @@ function HomeScreen() {
164
165
  const navigation = useNavigation<HomeScreenNavigationProp>();
165
166
 
166
167
  const navigateToProfile = (userId: string) => {
167
- navigation.navigate('UserProfile', { userId }); // 타입 안전
168
+ navigation.navigate('UserProfile', { userId }); // Type safe
168
169
  };
169
170
 
170
171
  return <Button onPress={() => navigateToProfile('123')} title="Profile" />;
171
172
  }
172
173
  ```
173
174
 
174
- ### 5. AsyncStorage (데이터 저장)
175
+ ### 5. AsyncStorage (Data Persistence)
175
176
 
176
177
  ```typescript
177
178
  import AsyncStorage from '@react-native-async-storage/async-storage';
178
179
 
179
- // 타입 안전한 Storage 래퍼
180
+ // Good: Type-safe Storage wrapper
180
181
  class Storage {
181
182
  static async set<T>(key: string, value: T): Promise<void> {
182
183
  await AsyncStorage.setItem(key, JSON.stringify(value));
@@ -192,7 +193,7 @@ class Storage {
192
193
  }
193
194
  }
194
195
 
195
- // 사용
196
+ // Usage
196
197
  interface User {
197
198
  id: string;
198
199
  name: string;
@@ -202,13 +203,13 @@ await Storage.set<User>('user', { id: '123', name: 'John' });
202
203
  const user = await Storage.get<User>('user');
203
204
  ```
204
205
 
205
- ### 6. 이미지 최적화
206
+ ### 6. Image Optimization
206
207
 
207
208
  ```typescript
208
209
  import { Image } from 'react-native';
209
210
  import FastImage from 'react-native-fast-image';
210
211
 
211
- // FastImage 사용 (캐싱, 성능)
212
+ // Good: Use FastImage (caching, performance)
212
213
  <FastImage
213
214
  source={{
214
215
  uri: user.avatar,
@@ -218,10 +219,10 @@ import FastImage from 'react-native-fast-image';
218
219
  resizeMode={FastImage.resizeMode.cover}
219
220
  />
220
221
 
221
- // 로컬 이미지
222
+ // Good: Local image
222
223
  <Image source={require('./assets/logo.png')} style={styles.logo} />
223
224
 
224
- // 조건부 로딩
225
+ // Good: Conditional loading
225
226
  {imageUrl && (
226
227
  <Image
227
228
  source={{ uri: imageUrl }}
@@ -230,12 +231,12 @@ import FastImage from 'react-native-fast-image';
230
231
  )}
231
232
  ```
232
233
 
233
- ### 7. SafeAreaView (안전 영역)
234
+ ### 7. SafeAreaView (Safe Areas)
234
235
 
235
236
  ```typescript
236
237
  import { SafeAreaView } from 'react-native-safe-area-context';
237
238
 
238
- // SafeAreaView 사용 (노치/상태바 대응)
239
+ // Good: Use SafeAreaView (notch/status bar handling)
239
240
  function Screen() {
240
241
  return (
241
242
  <SafeAreaView style={styles.container} edges={['top', 'bottom']}>
@@ -244,7 +245,7 @@ function Screen() {
244
245
  );
245
246
  }
246
247
 
247
- // useSafeAreaInsets
248
+ // Good: useSafeAreaInsets hook
248
249
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
249
250
 
250
251
  function CustomHeader() {
@@ -258,20 +259,20 @@ function CustomHeader() {
258
259
  }
259
260
  ```
260
261
 
261
- ### 8. Hooks 최적화
262
+ ### 8. Hooks Optimization
262
263
 
263
264
  ```typescript
264
- // useCallback (이벤트 핸들러)
265
+ // Good: useCallback (event handlers)
265
266
  const handlePress = useCallback(() => {
266
267
  navigation.navigate('UserProfile', { userId });
267
268
  }, [navigation, userId]);
268
269
 
269
- // useMemo (무거운 계산)
270
+ // Good: useMemo (expensive calculations)
270
271
  const sortedUsers = useMemo(() => {
271
272
  return users.sort((a, b) => a.name.localeCompare(b.name));
272
273
  }, [users]);
273
274
 
274
- // Custom Hook (로직 재사용)
275
+ // Good: Custom Hook (logic reuse)
275
276
  function useKeyboard() {
276
277
  const [isVisible, setIsVisible] = useState(false);
277
278
 
@@ -293,13 +294,13 @@ function useKeyboard() {
293
294
  }
294
295
  ```
295
296
 
296
- ### 9. 권한 처리
297
+ ### 9. Permission Handling
297
298
 
298
299
  ```typescript
299
300
  import { check, request, PERMISSIONS, RESULTS } from 'react-native-permissions';
300
301
  import { Platform } from 'react-native';
301
302
 
302
- // 권한 체크 요청
303
+ // Good: Permission check and request
303
304
  async function requestCameraPermission(): Promise<boolean> {
304
305
  const permission =
305
306
  Platform.OS === 'ios'
@@ -315,7 +316,7 @@ async function requestCameraPermission(): Promise<boolean> {
315
316
  const requested = await request(permission);
316
317
  return requested === RESULTS.GRANTED;
317
318
  case RESULTS.BLOCKED:
318
- // 설정으로 이동 안내
319
+ // Guide to settings
319
320
  return false;
320
321
  default:
321
322
  return false;
@@ -323,10 +324,10 @@ async function requestCameraPermission(): Promise<boolean> {
323
324
  }
324
325
  ```
325
326
 
326
- ### 10. 에러 경계 (Error Boundary)
327
+ ### 10. Error Boundary
327
328
 
328
329
  ```typescript
329
- // React Native Error Boundary
330
+ // Good: React Native Error Boundary
330
331
  import React, { Component, ErrorInfo, ReactNode } from 'react';
331
332
  import { View, Text, Button } from 'react-native';
332
333
 
@@ -351,7 +352,7 @@ class ErrorBoundary extends Component<Props, State> {
351
352
 
352
353
  componentDidCatch(error: Error, errorInfo: ErrorInfo) {
353
354
  console.error('Error caught:', error, errorInfo);
354
- // 에러 로깅 서비스 (Sentry )
355
+ // Error logging service (Sentry etc.)
355
356
  }
356
357
 
357
358
  handleReset = () => {
@@ -373,18 +374,18 @@ class ErrorBoundary extends Component<Props, State> {
373
374
  }
374
375
  ```
375
376
 
376
- ## 안티패턴
377
+ ## Anti-patterns
377
378
 
378
379
  ```typescript
379
- // ScrollView 리스트
380
+ // Bad: ScrollView for long lists
380
381
  <ScrollView>
381
382
  {users.map(user => <UserCard key={user.id} user={user} />)}
382
383
  </ScrollView>
383
384
 
384
- // FlatList 사용
385
+ // Good: Use FlatList
385
386
  <FlatList data={users} renderItem={renderItem} />
386
387
 
387
- // 중첩된 FlatList (성능 저하)
388
+ // Bad: Nested FlatList (performance degradation)
388
389
  <FlatList
389
390
  data={categories}
390
391
  renderItem={({ item }) => (
@@ -392,17 +393,17 @@ class ErrorBoundary extends Component<Props, State> {
392
393
  )}
393
394
  />
394
395
 
395
- // 단일 FlatList + 섹션
396
+ // Good: Single FlatList + sections
396
397
  <SectionList sections={sections} renderItem={renderItem} />
397
398
 
398
- // 비동기 setState in useEffect cleanup
399
+ // Bad: Async setState in useEffect cleanup
399
400
  useEffect(() => {
400
401
  return () => {
401
- setData(null); // 언마운트 setState
402
+ setData(null); // Bad: setState after unmount
402
403
  };
403
404
  }, []);
404
405
 
405
- // isMounted 체크
406
+ // Good: isMounted check
406
407
  useEffect(() => {
407
408
  let isMounted = true;
408
409
 
@@ -416,31 +417,31 @@ useEffect(() => {
416
417
  }, []);
417
418
  ```
418
419
 
419
- ## 성능 최적화 도구
420
+ ## Performance Optimization Tools
420
421
 
421
422
  ```bash
422
- # Flipper (디버깅)
423
+ # Flipper (debugging)
423
424
  npx react-native-flipper
424
425
 
425
- # Bundle 분석
426
+ # Bundle analysis
426
427
  npx react-native bundle --platform android --dev false \
427
428
  --entry-file index.js --bundle-output android.bundle
428
429
 
429
- # 메모리 프로파일링 (Flipper 사용)
430
+ # Memory profiling (use Flipper)
430
431
  ```
431
432
 
432
- ## 체크리스트
433
-
434
- React Native 코드 작성 시:
435
-
436
- - [ ] StyleSheet 사용 (인라인 지양)
437
- - [ ] FlatList 최적화 ( 리스트)
438
- - [ ] Platform 분기 처리
439
- - [ ] 타입 안전한 Navigation
440
- - [ ] SafeAreaView 사용
441
- - [ ] FastImage 사용 (이미지)
442
- - [ ] useCallback/useMemo 최적화
443
- - [ ] 권한 처리 (카메라, 위치 )
444
- - [ ] Error Boundary 적용
445
- - [ ] AsyncStorage 타입 래퍼
446
- - [ ] 복잡도 10
433
+ ## Checklist
434
+
435
+ When writing React Native code:
436
+
437
+ - [ ] Use StyleSheet (avoid inline)
438
+ - [ ] FlatList optimization (long lists)
439
+ - [ ] Platform branching
440
+ - [ ] Type-safe Navigation
441
+ - [ ] Use SafeAreaView
442
+ - [ ] Use FastImage (images)
443
+ - [ ] useCallback/useMemo optimization
444
+ - [ ] Permission handling (camera, location, etc.)
445
+ - [ ] Apply Error Boundary
446
+ - [ ] AsyncStorage type wrapper
447
+ - [ ] Complexity <= 10