sleepcode 1.1.0 → 1.2.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.
package/README.md CHANGED
@@ -48,19 +48,19 @@ npx sleepcode
48
48
  **macOS / Linux:**
49
49
  ```bash
50
50
  # 1회 실행
51
- ./.sleepcode/ai_worker.sh
51
+ ./.sleepcode/scripts/ai_worker.sh
52
52
 
53
53
  # 무한 루프 (tmux 권장)
54
- tmux new -s ai './.sleepcode/run_forever.sh'
54
+ tmux new -s ai './.sleepcode/scripts/run_forever.sh'
55
55
  ```
56
56
 
57
57
  **Windows (PowerShell):**
58
58
  ```powershell
59
59
  # 1회 실행
60
- powershell -File .\.sleepcode\ai_worker.ps1
60
+ powershell -File .\.sleepcode\scripts\ai_worker.ps1
61
61
 
62
62
  # 무한 루프
63
- powershell -File .\.sleepcode\run_forever.ps1
63
+ powershell -File .\.sleepcode\scripts\run_forever.ps1
64
64
  ```
65
65
 
66
66
  ### 4. 아침에 확인
@@ -106,17 +106,18 @@ npx sleepcode --type react-native --name my-app --role "쇼핑몰 앱 개발"
106
106
 
107
107
  ```
108
108
  .sleepcode/
109
- rules.md # AI 역할 + 작업 규칙 (프롬프트)
110
- tasks.md # 작업 목록 (체크리스트)
111
- docs/ # 참고 자료 (피그마 스크린샷, 기획서 등)
112
- ai_worker.sh/.ps1 # 1회 실행 스크립트 (OS별)
113
- run_forever.sh/.ps1 # 무한 루프 스크립트 (OS별)
114
- log_filter.py # 실시간 로그 필터
115
- logs/ # 실행 로그 (자동 생성)
116
- README.md # 사용 가이드
109
+ rules.md # ✏️ AI 역할 + 작업 규칙 (수정하세요)
110
+ tasks.md # ✏️ 작업 목록 (수정하세요)
111
+ docs/ # ✏️ 참고 자료 (피그마 스크린샷, 기획서 등)
112
+ scripts/ # ⚙️ 시스템 스크립트 (수정하지 마세요)
113
+ ai_worker.sh/.ps1 # 1회 실행 스크립트 (OS별)
114
+ run_forever.sh/.ps1 # 무한 루프 스크립트 (OS별)
115
+ log_filter.py # 실시간 로그 필터
116
+ logs/ # 실행 로그 (자동 생성)
117
+ README.md # 사용 가이드
117
118
 
118
119
  .claude/
119
- settings.local.json # Claude 권한 설정
120
+ settings.local.json # Claude 권한 설정
120
121
  ```
121
122
 
122
123
  ---
@@ -152,7 +153,7 @@ rules.md + tasks.md → 프롬프트 조합 → claude -p (비대화형) → 코
152
153
 
153
154
  | 동작 | 명령어 |
154
155
  |------|--------|
155
- | 세션 생성 + 실행 | `tmux new -s ai './.sleepcode/run_forever.sh'` |
156
+ | 세션 생성 + 실행 | `tmux new -s ai './.sleepcode/scripts/run_forever.sh'` |
156
157
  | 백그라운드 전환 | `Ctrl+B` → `D` |
157
158
  | 세션 재접속 | `tmux attach -t ai` |
158
159
  | 실시간 로그 | `tail -f .sleepcode/logs/worker_*.log` |
@@ -214,7 +215,7 @@ Windows에서는 `.sh` 대신 **PowerShell 스크립트(`.ps1`)가 자동 생성
214
215
  - **AI 역할/규칙 변경**: `.sleepcode/rules.md` 수정
215
216
  - **작업 목록 변경**: `.sleepcode/tasks.md` 수정
216
217
  - **참고 자료 추가**: `.sleepcode/docs/`에 파일 추가 (스크린샷, 기획서 등)
217
- - **반복 간격 변경**: `.sleepcode/run_forever.sh` (또는 `.ps1`)의 sleep 값 수정
218
+ - **반복 간격 변경**: `.sleepcode/scripts/run_forever.sh` (또는 `.ps1`)의 sleep 값 수정
218
219
  - **Claude 권한 변경**: `.claude/settings.local.json` 수정
219
220
 
220
221
  ---
package/bin/index.js CHANGED
@@ -250,18 +250,19 @@ function generateFiles(targetDir, { typeKey, projectName, role, buildCmd, testCm
250
250
  const scDir = path.join(targetDir, '.sleepcode');
251
251
  const claudeDir = path.join(targetDir, '.claude');
252
252
  fs.mkdirSync(path.join(scDir, 'docs'), { recursive: true });
253
+ fs.mkdirSync(path.join(scDir, 'scripts'), { recursive: true });
253
254
  fs.mkdirSync(path.join(scDir, 'logs'), { recursive: true });
254
255
  fs.mkdirSync(claudeDir, { recursive: true });
255
256
 
256
- // 공통 파일 복사 (OS별 분기)
257
+ // 스크립트 파일 → scripts/ 하위로 복사 (OS별 분기)
257
258
  const scriptFiles = IS_WIN
258
259
  ? ['ai_worker.ps1', 'run_forever.ps1']
259
260
  : ['ai_worker.sh', 'run_forever.sh'];
260
- const commonFiles = [...scriptFiles, 'log_filter.py', 'README.md'];
261
+ const allScriptFiles = [...scriptFiles, 'log_filter.py'];
261
262
 
262
- for (const file of commonFiles) {
263
+ for (const file of allScriptFiles) {
263
264
  const src = path.join(TEMPLATES_DIR, 'common', file);
264
- const dest = path.join(scDir, file);
265
+ const dest = path.join(scDir, 'scripts', file);
265
266
  if (fs.existsSync(src)) {
266
267
  let content = fs.readFileSync(src, 'utf-8');
267
268
  content = content.replace(/\{\{SLEEP_INTERVAL\}\}/g, sleepInterval);
@@ -269,11 +270,17 @@ function generateFiles(targetDir, { typeKey, projectName, role, buildCmd, testCm
269
270
  }
270
271
  }
271
272
 
273
+ // README.md → .sleepcode/ 루트에 복사
274
+ const readmeSrc = path.join(TEMPLATES_DIR, 'common', 'README.md');
275
+ if (fs.existsSync(readmeSrc)) {
276
+ fs.writeFileSync(path.join(scDir, 'README.md'), fs.readFileSync(readmeSrc, 'utf-8'));
277
+ }
278
+
272
279
  // 실행 권한 (Unix만)
273
280
  if (!IS_WIN) {
274
- fs.chmodSync(path.join(scDir, 'ai_worker.sh'), 0o755);
275
- fs.chmodSync(path.join(scDir, 'run_forever.sh'), 0o755);
276
- fs.chmodSync(path.join(scDir, 'log_filter.py'), 0o755);
281
+ fs.chmodSync(path.join(scDir, 'scripts', 'ai_worker.sh'), 0o755);
282
+ fs.chmodSync(path.join(scDir, 'scripts', 'run_forever.sh'), 0o755);
283
+ fs.chmodSync(path.join(scDir, 'scripts', 'log_filter.py'), 0o755);
277
284
  }
278
285
 
279
286
  // docs/.gitkeep
@@ -332,13 +339,13 @@ function printResult() {
332
339
  const foreverScript = IS_WIN ? 'run_forever.ps1' : 'run_forever.sh';
333
340
 
334
341
  console.log(`\n${C.bold}파일 생성 완료:${C.reset}\n`);
335
- console.log(` ${C.green}✓${C.reset} .sleepcode/rules.md`);
336
- console.log(` ${C.green}✓${C.reset} .sleepcode/tasks.md`);
337
- console.log(` ${C.green}✓${C.reset} .sleepcode/${workerScript}`);
338
- console.log(` ${C.green}✓${C.reset} .sleepcode/${foreverScript}`);
339
- console.log(` ${C.green}✓${C.reset} .sleepcode/log_filter.py`);
342
+ console.log(` ${C.green}✓${C.reset} .sleepcode/rules.md ${C.dim}← 수정하세요${C.reset}`);
343
+ console.log(` ${C.green}✓${C.reset} .sleepcode/tasks.md ${C.dim}← 수정하세요${C.reset}`);
344
+ console.log(` ${C.green}✓${C.reset} .sleepcode/docs/ ${C.dim}← 참고자료 추가${C.reset}`);
345
+ console.log(` ${C.green}✓${C.reset} .sleepcode/scripts/${workerScript}`);
346
+ console.log(` ${C.green}✓${C.reset} .sleepcode/scripts/${foreverScript}`);
347
+ console.log(` ${C.green}✓${C.reset} .sleepcode/scripts/log_filter.py`);
340
348
  console.log(` ${C.green}✓${C.reset} .sleepcode/README.md`);
341
- console.log(` ${C.green}✓${C.reset} .sleepcode/docs/`);
342
349
  console.log(` ${C.green}✓${C.reset} .claude/settings.local.json`);
343
350
 
344
351
  if (IS_WIN) {
@@ -349,10 +356,10 @@ ${C.bold}${C.green}완료!${C.reset} 다음 단계:
349
356
  ${C.bold}2.${C.reset} .sleepcode/tasks.md 에 작업 목록 작성
350
357
  ${C.bold}3.${C.reset} 실행 (PowerShell):
351
358
  ${C.dim}# 1회 실행${C.reset}
352
- powershell -File .\\.sleepcode\\ai_worker.ps1
359
+ powershell -File .\\.sleepcode\\scripts\\ai_worker.ps1
353
360
 
354
361
  ${C.dim}# 무한 루프${C.reset}
355
- powershell -File .\\.sleepcode\\run_forever.ps1
362
+ powershell -File .\\.sleepcode\\scripts\\run_forever.ps1
356
363
  `);
357
364
  } else {
358
365
  console.log(`
@@ -362,10 +369,10 @@ ${C.bold}${C.green}완료!${C.reset} 다음 단계:
362
369
  ${C.bold}2.${C.reset} .sleepcode/tasks.md 에 작업 목록 작성
363
370
  ${C.bold}3.${C.reset} 실행:
364
371
  ${C.dim}# 1회 실행${C.reset}
365
- ./.sleepcode/ai_worker.sh
372
+ ./.sleepcode/scripts/ai_worker.sh
366
373
 
367
374
  ${C.dim}# 무한 루프 (tmux)${C.reset}
368
- tmux new -s ai './.sleepcode/run_forever.sh'
375
+ tmux new -s ai './.sleepcode/scripts/run_forever.sh'
369
376
  `);
370
377
  }
371
378
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sleepcode",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "AI codes while you sleep — Claude AI 야간 자동화 세팅 CLI",
5
5
  "bin": {
6
6
  "sleepcode": "./bin/index.js"
@@ -8,13 +8,14 @@ AI codes while you sleep — 밤새 개발 작업을 자동화하는 시스템
8
8
 
9
9
  ```
10
10
  .sleepcode/
11
- rules.md # AI 역할 + 작업 규칙
12
- tasks.md # 오늘 진행할 작업 목록
13
- docs/ # 개발 참고 자료 (피그마 스크린샷, 기획서 등)
14
- ai_worker.sh # 1회 실행 스크립트
15
- run_forever.sh # 무한 루프 감시자 스크립트
16
- log_filter.py # 로그 필터 (핵심 메시지만 추출)
17
- logs/ # 실행 로그 (자동 생성)
11
+ rules.md # ✏️ AI 역할 + 작업 규칙 (수정하세요)
12
+ tasks.md # ✏️ 오늘 진행할 작업 목록 (수정하세요)
13
+ docs/ # ✏️ 개발 참고 자료 (피그마 스크린샷, 기획서 등)
14
+ scripts/ # ⚙️ 시스템 스크립트 (수정하지 마세요)
15
+ ai_worker.* # 1회 실행 스크립트
16
+ run_forever.* # 무한 루프 감시자 스크립트
17
+ log_filter.py # 로그 필터 (핵심 메시지만 추출)
18
+ logs/ # 실행 로그 (자동 생성)
18
19
  ```
19
20
 
20
21
  ---
@@ -30,13 +31,7 @@ AI codes while you sleep — 밤새 개발 작업을 자동화하는 시스템
30
31
 
31
32
  ## 실행 방법
32
33
 
33
- ### 1. 권한 부여
34
-
35
- ```bash
36
- chmod +x .sleepcode/*.sh
37
- ```
38
-
39
- ### 2. (최초 1회) --dangerously-skip-permissions 수락
34
+ ### 1. (최초 1회) --dangerously-skip-permissions 수락
40
35
 
41
36
  ```bash
42
37
  claude --dangerously-skip-permissions
@@ -44,24 +39,33 @@ claude --dangerously-skip-permissions
44
39
 
45
40
  동의 프롬프트가 뜨면 수락 후 `Ctrl + C`로 나옵니다.
46
41
 
47
- ### 3. tmux 세션 생성 + 실행
42
+ ### 2. 실행
48
43
 
44
+ **macOS / Linux:**
49
45
  ```bash
50
- tmux new -s ai './.sleepcode/run_forever.sh'
51
- ```
46
+ # 권한 부여
47
+ chmod +x .sleepcode/scripts/*.sh
52
48
 
53
- ### 4. tmux 분리 (백그라운드 전환)
49
+ # 1회 실행
50
+ ./.sleepcode/scripts/ai_worker.sh
54
51
 
55
- ```
56
- Ctrl + B D
52
+ # 무한 루프 (tmux)
53
+ tmux new -s ai './.sleepcode/scripts/run_forever.sh'
57
54
  ```
58
55
 
59
- ---
56
+ **Windows (PowerShell):**
57
+ ```powershell
58
+ # 1회 실행
59
+ powershell -File .\.sleepcode\scripts\ai_worker.ps1
60
60
 
61
- ## 수동 1회 실행
61
+ # 무한 루프
62
+ powershell -File .\.sleepcode\scripts\run_forever.ps1
63
+ ```
62
64
 
63
- ```bash
64
- ./.sleepcode/ai_worker.sh
65
+ ### 3. tmux 분리 (백그라운드 전환, macOS/Linux)
66
+
67
+ ```
68
+ Ctrl + B → D
65
69
  ```
66
70
 
67
71
  ---
@@ -94,4 +98,3 @@ tail -100 .sleepcode/logs/worker_*.log
94
98
  - **역할/규칙 변경**: `.sleepcode/rules.md` 수정
95
99
  - **태스크 변경**: `.sleepcode/tasks.md` 수정
96
100
  - **참고 자료 추가**: `.sleepcode/docs/` 에 파일 추가
97
- - **반복 간격 변경**: `run_forever.sh` 의 `sleep` 값 수정
@@ -2,7 +2,7 @@
2
2
  # run_forever.ps1 (무한 루프) 대신 수동으로 1회만 돌릴 때 사용
3
3
 
4
4
  $ErrorActionPreference = "Stop"
5
- Set-Location (Split-Path $PSScriptRoot -Parent)
5
+ Set-Location (Split-Path (Split-Path $PSScriptRoot -Parent) -Parent)
6
6
 
7
7
  $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
8
8
  Write-Host "[$timestamp] AI 단일 실행 시작"
@@ -14,7 +14,7 @@ $prompt = "$rules`n`n---`n`n$tasks"
14
14
 
15
15
  # stream-json + verbose: 토큰 단위 실시간 출력
16
16
  $prompt | claude -p --dangerously-skip-permissions --output-format stream-json --verbose 2>&1 |
17
- python .sleepcode/log_filter.py
17
+ python .sleepcode/scripts/log_filter.py
18
18
 
19
19
  $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
20
20
  Write-Host "[$timestamp] AI 단일 실행 종료"
@@ -3,7 +3,7 @@
3
3
  # AI Worker - 1회 실행 스크립트
4
4
  # run_forever.sh (무한 루프) 대신 수동으로 1회만 돌릴 때 사용
5
5
 
6
- cd "$(dirname "$0")/.." || exit 1
6
+ cd "$(dirname "$0")/../.." || exit 1
7
7
 
8
8
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] AI 단일 실행 시작"
9
9
 
@@ -18,6 +18,6 @@ ${TASKS}"
18
18
 
19
19
  # stream-json + verbose: 토큰 단위 실시간 출력
20
20
  claude -p "$PROMPT" --dangerously-skip-permissions --output-format stream-json --verbose 2>&1 \
21
- | python3 .sleepcode/log_filter.py
21
+ | python3 .sleepcode/scripts/log_filter.py
22
22
 
23
23
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] AI 단일 실행 종료"
@@ -1,8 +1,8 @@
1
1
  # AI Night Worker - 감시자 스크립트 (Windows PowerShell)
2
- # 사용법: powershell -File .\.sleepcode\run_forever.ps1
2
+ # 사용법: powershell -File .\.sleepcode\scripts\run_forever.ps1
3
3
 
4
4
  $ErrorActionPreference = "Continue"
5
- Set-Location (Split-Path $PSScriptRoot -Parent)
5
+ Set-Location (Split-Path (Split-Path $PSScriptRoot -Parent) -Parent)
6
6
 
7
7
  $logDir = ".sleepcode/logs"
8
8
  if (!(Test-Path $logDir)) { New-Item -ItemType Directory -Path $logDir -Force | Out-Null }
@@ -43,7 +43,7 @@ while ($true) {
43
43
  Log "claude 실행 중..."
44
44
  # stream-json -> log_filter.py 로 핵심 메시지만 추출
45
45
  $prompt | claude -p --dangerously-skip-permissions --output-format stream-json --verbose 2>&1 |
46
- python .sleepcode/log_filter.py |
46
+ python .sleepcode/scripts/log_filter.py |
47
47
  Tee-Object -Append $logFile
48
48
  $exitCode = $LASTEXITCODE
49
49
  Log "claude 종료 (exit code: $exitCode)"
@@ -1,9 +1,9 @@
1
1
  #!/bin/bash
2
2
 
3
3
  # AI Night Worker - 감시자 스크립트
4
- # 사용법: tmux new -s ai './.sleepcode/run_forever.sh'
4
+ # 사용법: tmux new -s ai './.sleepcode/scripts/run_forever.sh'
5
5
 
6
- cd "$(dirname "$0")/.." || exit 1
6
+ cd "$(dirname "$0")/../.." || exit 1
7
7
 
8
8
  LOG_DIR=".sleepcode/logs"
9
9
  mkdir -p "$LOG_DIR"
@@ -44,7 +44,7 @@ ${TASKS}"
44
44
  log "claude 실행 중..."
45
45
  # stream-json → log_filter.py 로 핵심 메시지만 추출
46
46
  claude -p "$PROMPT" --dangerously-skip-permissions --output-format stream-json --verbose 2>&1 \
47
- | python3 .sleepcode/log_filter.py \
47
+ | python3 .sleepcode/scripts/log_filter.py \
48
48
  | tee -a "$LOG_FILE"
49
49
  EXIT_CODE=${PIPESTATUS[0]}
50
50
  log "claude 종료 (exit code: $EXIT_CODE)"