@yeongjaeyou/claude-code-config 0.5.2 → 0.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.
@@ -1,30 +1,30 @@
1
1
  # CV Guidelines
2
2
 
3
- Computer Vision 작업 시 주의사항.
3
+ Best practices for Computer Vision tasks.
4
4
 
5
- ## BGR vs RGB 색상 형식
5
+ ## BGR vs RGB Color Format
6
6
 
7
- **핵심**: OpenCV BGR, matplotlib RGB 형식을 사용한다. supervision OpenCV 기반 라이브러리로 annotation할 때는 BGR 상태를 유지하고, matplotlib 표시 직전에만 RGB 변환한다.
7
+ **Key Point**: OpenCV uses BGR, matplotlib uses RGB. When annotating with OpenCV-based libraries like supervision, keep the image in BGR format and convert to RGB only right before displaying with matplotlib.
8
8
 
9
9
  ```python
10
- # 올바른 패턴
10
+ # Correct pattern
11
11
  img = cv2.imread(path) # BGR
12
- img = annotator.annotate(img, detections) # BGR 유지
13
- img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 표시 직전 변환
12
+ img = annotator.annotate(img, detections) # Keep BGR
13
+ img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # Convert just before display
14
14
  plt.imshow(img)
15
15
 
16
- # 잘못된 패턴 (색상 반전 발생)
16
+ # Wrong pattern (causes color inversion)
17
17
  img = cv2.imread(path)
18
- img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 너무 일찍 변환
19
- img = annotator.annotate(img, detections) # RGB에 BGR 색상 적용 -> 색상 반전
18
+ img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # Too early
19
+ img = annotator.annotate(img, detections) # BGR colors on RGB image -> inverted
20
20
  plt.imshow(img)
21
21
  ```
22
22
 
23
- ## Ultralytics WandB 연동
23
+ ## Ultralytics WandB Integration
24
24
 
25
- Ultralytics YOLO WandB 기본적으로 비활성화되어 있다.
25
+ Ultralytics YOLO has WandB disabled by default.
26
26
 
27
27
  ```bash
28
- yolo settings wandb=True # 활성화
29
- yolo settings wandb=False # 비활성화
28
+ yolo settings wandb=True # Enable
29
+ yolo settings wandb=False # Disable
30
30
  ```
package/bin/cli.js CHANGED
@@ -8,44 +8,45 @@ const readline = require('readline');
8
8
  const pkg = require('../package.json');
9
9
  const args = process.argv.slice(2);
10
10
 
11
- // 설치 대상 폴더 (사용자 데이터가 아닌 것들만)
12
- const INSTALL_FOLDERS = ['commands', 'agents', 'skills'];
11
+ // Installation target folders (non-user data only)
12
+ const INSTALL_FOLDERS = ['commands', 'agents', 'skills', 'guidelines'];
13
13
 
14
- // 옵션 파싱
14
+ // Parse options
15
15
  const isGlobal = args.includes('--global') || args.includes('-g');
16
16
  const showHelp = args.includes('--help') || args.includes('-h');
17
17
  const showVersion = args.includes('--version') || args.includes('-v');
18
18
 
19
- // 버전 출력
19
+ // Version output
20
20
  if (showVersion) {
21
21
  console.log(pkg.version);
22
22
  process.exit(0);
23
23
  }
24
24
 
25
- // 도움말 출력
25
+ // Help output
26
26
  if (showHelp) {
27
27
  console.log(`
28
28
  Claude Code Config v${pkg.version}
29
29
 
30
- 사용법:
31
- npx @yeongjaeyou/claude-code-config [옵션]
30
+ Usage:
31
+ npx @yeongjaeyou/claude-code-config [options]
32
32
 
33
- 옵션:
34
- -g, --global 전역 설치 (~/.claude/)
35
- -h, --help 도움말 출력
36
- -v, --version 버전 출력
33
+ Options:
34
+ -g, --global Global install (~/.claude/)
35
+ -h, --help Show help
36
+ -v, --version Show version
37
37
 
38
- 예시:
39
- npx @yeongjaeyou/claude-code-config # 현재 프로젝트에 설치
40
- npx @yeongjaeyou/claude-code-config --global # 전역 설치
38
+ Examples:
39
+ npx @yeongjaeyou/claude-code-config # Install to current project
40
+ npx @yeongjaeyou/claude-code-config --global # Global install
41
41
 
42
- 설치되는 폴더:
43
- - commands/ : 슬래시 커맨드
44
- - agents/ : 커스텀 에이전트
45
- - skills/ : 스킬 (재사용 가능한 도구 모음)
42
+ Installed folders:
43
+ - commands/ : Slash commands
44
+ - agents/ : Custom agents
45
+ - skills/ : Skills (reusable tool collections)
46
+ - guidelines/ : Shared guidelines
46
47
 
47
- 참고:
48
- --global 설치 기존 사용자 데이터(settings.json, history.jsonl ) 보존됩니다.
48
+ Note:
49
+ With --global install, existing user data (settings.json, history.jsonl, etc.) is preserved.
49
50
  `);
50
51
  process.exit(0);
51
52
  }
@@ -56,14 +57,14 @@ const dest = isGlobal
56
57
  : path.join(process.cwd(), '.claude');
57
58
 
58
59
  /**
59
- * 사용자에게 질문하고 답변을 받는다
60
- * @param {string} question - 질문 내용
61
- * @returns {Promise<string>} - 사용자 답변
60
+ * Ask user a question and get answer
61
+ * @param {string} question - Question content
62
+ * @returns {Promise<string>} - User answer
62
63
  */
63
64
  function askQuestion(question) {
64
- // 비대화형 환경 감지 (CI/CD, 파이프라인 )
65
+ // Detect non-interactive environment (CI/CD, pipelines, etc.)
65
66
  if (!process.stdin.isTTY) {
66
- console.log('비대화형 환경이 감지되었습니다. 기본값(merge)을 사용합니다.');
67
+ console.log('Non-interactive environment detected. Using default (merge).');
67
68
  return Promise.resolve('merge');
68
69
  }
69
70
 
@@ -81,8 +82,8 @@ function askQuestion(question) {
81
82
  }
82
83
 
83
84
  /**
84
- * 기존 설치 폴더 확인
85
- * @returns {string[]} - 존재하는 폴더 목록
85
+ * Check existing installation folders
86
+ * @returns {string[]} - List of existing folders
86
87
  */
87
88
  function checkExistingFolders() {
88
89
  const existing = [];
@@ -96,22 +97,22 @@ function checkExistingFolders() {
96
97
  }
97
98
 
98
99
  /**
99
- * 폴더 복사 (재귀적)
100
- * @param {string} src - 소스 경로
101
- * @param {string} dst - 대상 경로
102
- * @param {boolean} mergeMode - 병합 모드 여부
100
+ * Copy folder recursively
101
+ * @param {string} src - Source path
102
+ * @param {string} dst - Destination path
103
+ * @param {boolean} mergeMode - Whether to use merge mode
103
104
  */
104
105
  function copyFolder(src, dst, mergeMode = false) {
105
106
  if (!fs.existsSync(src)) {
106
107
  return;
107
108
  }
108
109
 
109
- // 대상 폴더 생성
110
+ // Create destination folder
110
111
  if (!fs.existsSync(dst)) {
111
112
  try {
112
113
  fs.mkdirSync(dst, { recursive: true });
113
114
  } catch (err) {
114
- throw new Error(`폴더 생성 실패: ${dst} - ${err.message}`);
115
+ throw new Error(`Failed to create folder: ${dst} - ${err.message}`);
115
116
  }
116
117
  }
117
118
 
@@ -124,21 +125,21 @@ function copyFolder(src, dst, mergeMode = false) {
124
125
  if (entry.isDirectory()) {
125
126
  copyFolder(srcPath, dstPath, mergeMode);
126
127
  } else {
127
- // 병합 모드에서는 기존 파일 유지
128
+ // In merge mode, keep existing files
128
129
  if (mergeMode && fs.existsSync(dstPath)) {
129
130
  continue;
130
131
  }
131
132
  try {
132
133
  fs.copyFileSync(srcPath, dstPath);
133
134
  } catch (err) {
134
- throw new Error(`파일 복사 실패: ${srcPath} -> ${dstPath} - ${err.message}`);
135
+ throw new Error(`Failed to copy file: ${srcPath} -> ${dstPath} - ${err.message}`);
135
136
  }
136
137
  }
137
138
  }
138
139
  }
139
140
 
140
141
  /**
141
- * 설치 대상 폴더만 선택적으로 복사
142
+ * Selectively copy installation target folders
142
143
  * @param {string} mode - 'merge' | 'overwrite'
143
144
  */
144
145
  function installFolders(mode) {
@@ -152,12 +153,12 @@ function installFolders(mode) {
152
153
  continue;
153
154
  }
154
155
 
155
- // 덮어쓰기 모드에서는 기존 폴더 삭제 복사
156
+ // In overwrite mode, delete existing folder before copying
156
157
  if (!mergeMode && fs.existsSync(dstFolder)) {
157
158
  try {
158
159
  fs.rmSync(dstFolder, { recursive: true });
159
160
  } catch (err) {
160
- throw new Error(`폴더 삭제 실패: ${dstFolder} - ${err.message}`);
161
+ throw new Error(`Failed to delete folder: ${dstFolder} - ${err.message}`);
161
162
  }
162
163
  }
163
164
 
@@ -166,7 +167,7 @@ function installFolders(mode) {
166
167
  }
167
168
 
168
169
  /**
169
- * 메인 함수
170
+ * Main function
170
171
  */
171
172
  async function main() {
172
173
  console.log('');
@@ -174,90 +175,91 @@ async function main() {
174
175
  console.log('==================');
175
176
  console.log('');
176
177
 
177
- // 소스 폴더 존재 확인
178
+ // Check source folder exists
178
179
  if (!fs.existsSync(source)) {
179
- console.error('오류: 소스 .claude/ 폴더를 찾을 수 없습니다.');
180
+ console.error('Error: Source .claude/ folder not found.');
180
181
  process.exit(1);
181
182
  }
182
183
 
183
- // 설치 위치 안내
184
+ // Display installation location
184
185
  if (isGlobal) {
185
- console.log('전역 설치 모드: ~/.claude/에 설치합니다.');
186
+ console.log('Global install mode: Installing to ~/.claude/');
186
187
  } else {
187
- console.log('로컬 설치 모드: 현재 디렉토리에 설치합니다.');
188
+ console.log('Local install mode: Installing to current directory.');
188
189
  }
189
- console.log(`설치 경로: ${dest}`);
190
+ console.log(`Install path: ${dest}`);
190
191
  console.log('');
191
192
 
192
- // 대상 폴더 생성 (없으면)
193
+ // Create destination folder if not exists
193
194
  if (!fs.existsSync(dest)) {
194
195
  try {
195
196
  fs.mkdirSync(dest, { recursive: true });
196
197
  } catch (err) {
197
- console.error(`오류: 대상 폴더를 생성할 없습니다: ${dest}`);
198
- console.error(`상세: ${err.message}`);
198
+ console.error(`Error: Cannot create destination folder: ${dest}`);
199
+ console.error(`Details: ${err.message}`);
199
200
  process.exit(1);
200
201
  }
201
202
  }
202
203
 
203
- // 기존 설치 폴더 확인
204
+ // Check existing installation folders
204
205
  const existingFolders = checkExistingFolders();
205
206
  let installMode = 'overwrite';
206
207
 
207
208
  if (existingFolders.length > 0) {
208
- console.log('기존 설치 폴더가 발견되었습니다:');
209
+ console.log('Existing installation folders found:');
209
210
  existingFolders.forEach(folder => {
210
211
  console.log(` - ${folder}/`);
211
212
  });
212
213
  console.log('');
213
214
 
214
215
  if (isGlobal) {
215
- console.log('(사용자 데이터는 보존됩니다: settings.json, history.jsonl )');
216
+ console.log('(User data will be preserved: settings.json, history.jsonl, etc.)');
216
217
  console.log('');
217
218
  }
218
219
 
219
- console.log('설치 옵션:');
220
- console.log(' [m] merge - 파일만 추가 (기존 파일 유지)');
221
- console.log(' [o] overwrite - 폴더들만 덮어쓰기');
222
- console.log(' [c] cancel - 설치 취소');
220
+ console.log('Installation options:');
221
+ console.log(' [m] merge - Add new files only (keep existing)');
222
+ console.log(' [o] overwrite - Overwrite above folders only');
223
+ console.log(' [c] cancel - Cancel installation');
223
224
  console.log('');
224
225
 
225
- const answer = await askQuestion('선택하세요 (m/o/c) [기본: m]: ');
226
+ const answer = await askQuestion('Choose (m/o/c) [default: m]: ');
226
227
 
227
228
  if (answer === 'c' || answer === 'cancel') {
228
- console.log('설치가 취소되었습니다.');
229
+ console.log('Installation cancelled.');
229
230
  process.exit(0);
230
231
  } else if (answer === 'o' || answer === 'overwrite') {
231
232
  installMode = 'overwrite';
232
233
  console.log('');
233
- console.log('덮어쓰기 모드로 설치합니다...');
234
+ console.log('Installing in overwrite mode...');
234
235
  } else {
235
- // 기본값: merge ( 값, 'm', 'merge' )
236
+ // Default: merge (empty, 'm', 'merge', etc.)
236
237
  installMode = 'merge';
237
238
  console.log('');
238
- console.log('병합 모드로 설치합니다 (기존 파일 유지)...');
239
+ console.log('Installing in merge mode (keeping existing files)...');
239
240
  }
240
241
  }
241
242
 
242
- // 폴더 설치
243
+ // Install folders
243
244
  installFolders(installMode);
244
245
 
245
246
  console.log('');
246
- console.log('.claude/ 폴더가 성공적으로 설치되었습니다!');
247
+ console.log('.claude/ folder installed successfully!');
247
248
  console.log('');
248
- console.log('설치된 내용:');
249
- console.log(' - commands/ : 슬래시 커맨드');
250
- console.log(' - agents/ : 커스텀 에이전트');
251
- console.log(' - skills/ : 스킬 (재사용 가능한 도구 모음)');
249
+ console.log('Installed:');
250
+ console.log(' - commands/ : Slash commands');
251
+ console.log(' - agents/ : Custom agents');
252
+ console.log(' - skills/ : Skills (reusable tool collections)');
253
+ console.log(' - guidelines/ : Shared guidelines');
252
254
  console.log('');
253
255
 
254
256
  if (isGlobal) {
255
- console.log('전역 설치가 완료되었습니다.');
256
- console.log('모든 프로젝트에서 Claude Code 커맨드를 사용할 있습니다.');
257
+ console.log('Global installation complete.');
258
+ console.log('Claude Code commands are now available in all projects.');
257
259
  }
258
260
  }
259
261
 
260
262
  main().catch((error) => {
261
- console.error('오류:', error.message);
263
+ console.error('Error:', error.message);
262
264
  process.exit(1);
263
265
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yeongjaeyou/claude-code-config",
3
- "version": "0.5.2",
3
+ "version": "0.6.0",
4
4
  "description": "Claude Code CLI custom commands, agents, and skills",
5
5
  "bin": {
6
6
  "claude-code-config": "./bin/cli.js"