@graypark/loophaus 3.5.0 → 3.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.
- package/README.ko.md +44 -68
- package/README.md +46 -64
- package/commands/loop-plan.md +22 -0
- package/dist/README.ko.md +44 -68
- package/dist/README.md +46 -64
- package/dist/bin/loophaus.js +111 -1
- package/dist/bin/loophaus.js.map +1 -1
- package/dist/commands/loop-plan.md +22 -0
- package/dist/core/benchmark.d.ts +39 -0
- package/dist/core/benchmark.d.ts.map +1 -0
- package/dist/core/benchmark.js +208 -0
- package/dist/core/benchmark.js.map +1 -0
- package/dist/core/cleanup.d.ts +24 -0
- package/dist/core/cleanup.d.ts.map +1 -0
- package/dist/core/cleanup.js +145 -0
- package/dist/core/cleanup.js.map +1 -0
- package/dist/package.json +3 -1
- package/package.json +3 -1
package/README.ko.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<a href="https://github.com/vcz-Gray/loophaus/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square" alt="license" /></a>
|
|
11
11
|
<img src="https://img.shields.io/badge/node-%3E%3D20-brightgreen.svg?style=flat-square" alt="node version" />
|
|
12
12
|
<img src="https://img.shields.io/badge/platform-Claude%20Code%20%7C%20Codex%20CLI%20%7C%20Kiro%20CLI-purple.svg?style=flat-square" alt="platform" />
|
|
13
|
-
<img src="https://img.shields.io/badge/tests-
|
|
13
|
+
<img src="https://img.shields.io/badge/tests-296%20passing-brightgreen.svg?style=flat-square" alt="tests" />
|
|
14
14
|
</p>
|
|
15
15
|
|
|
16
16
|
<p align="center">
|
|
@@ -156,7 +156,7 @@ loophaus는 세 개의 주요 코딩 에이전트 플랫폼을 지원합니다:
|
|
|
156
156
|
| Stop hook | bash 기반 | Node.js 기반 | bash 기반 |
|
|
157
157
|
| 루프 실행 | Skill tool | 네이티브 커맨드 | 네이티브 커맨드 |
|
|
158
158
|
| 멀티 에이전트 | Agent tool | 서브에이전트 | 서브에이전트 |
|
|
159
|
-
| 상태 파일 | `.
|
|
159
|
+
| 상태 파일 | `.loophaus/state.json` | `.loophaus/state.json` | `.loophaus/state.json` |
|
|
160
160
|
|
|
161
161
|
## 설치
|
|
162
162
|
|
|
@@ -271,49 +271,52 @@ loophaus quality --story US-001 # 특정 스토리 품질 측정
|
|
|
271
271
|
|
|
272
272
|
```
|
|
273
273
|
loophaus/
|
|
274
|
-
├── .claude-plugin/plugin.json # Claude Code 마켓플레이스 매니페스트
|
|
275
274
|
├── bin/
|
|
276
|
-
│ ├── loophaus.
|
|
277
|
-
│ ├── install.
|
|
278
|
-
│ └── uninstall.
|
|
279
|
-
├── hooks/
|
|
280
|
-
│ └── stop-hook.mjs # 핵심 루프 엔진 (Node.js)
|
|
281
|
-
├── commands/
|
|
282
|
-
│ ├── loop.md # /loop 커맨드
|
|
283
|
-
│ ├── loop-plan.md # /loop-plan 커맨드
|
|
284
|
-
│ ├── loop-stop.md # /loop-stop 커맨드
|
|
285
|
-
│ ├── loop-pulse.md # /loop-pulse 커맨드
|
|
286
|
-
│ └── help.md # /help 커맨드
|
|
287
|
-
├── platforms/ # 호스트별 어댑터
|
|
288
|
-
├── store/ # 상태 저장소
|
|
275
|
+
│ ├── loophaus.ts # CLI 진입점
|
|
276
|
+
│ ├── install.ts # 크로스 플랫폼 설치기
|
|
277
|
+
│ └── uninstall.ts # 제거기
|
|
289
278
|
├── core/
|
|
290
|
-
│ ├──
|
|
291
|
-
│ ├──
|
|
292
|
-
│ ├──
|
|
293
|
-
│ ├──
|
|
294
|
-
│
|
|
295
|
-
├──
|
|
296
|
-
│ ├──
|
|
297
|
-
│ ├──
|
|
298
|
-
│ ├──
|
|
299
|
-
│ ├──
|
|
300
|
-
│ ├──
|
|
301
|
-
│
|
|
279
|
+
│ ├── types.ts # 공유 TypeScript 인터페이스
|
|
280
|
+
│ ├── engine.ts # 핵심 루프 엔진
|
|
281
|
+
│ ├── event-logger.ts # 이벤트 추적
|
|
282
|
+
│ ├── quality-scorer.ts # 품질 측정 (점수, 평가, 로깅)
|
|
283
|
+
│ ├── refine-loop.ts # 유지/폐기 개선 로직
|
|
284
|
+
│ ├── validate.ts # PRD + 상태 스키마 검증
|
|
285
|
+
│ ├── policy.ts # 루프 정책 평가
|
|
286
|
+
│ ├── cost-tracker.ts # 토큰 비용 추정
|
|
287
|
+
│ ├── trace-analyzer.ts # 트레이스 분석 + 비교
|
|
288
|
+
│ ├── worktree.ts # Git 워크트리 관리
|
|
289
|
+
│ ├── merge-strategy.ts # 병렬 머지 전략
|
|
290
|
+
│ ├── parallel-runner.ts # 멀티 워크트리 오케스트레이션
|
|
291
|
+
│ ├── session.ts # 체크포인트 / 세션 관리
|
|
292
|
+
│ └── loop-registry.ts # 멀티 루프 레지스트리
|
|
293
|
+
├── store/
|
|
294
|
+
│ └── state-store.ts # 루프 상태 저장소
|
|
302
295
|
├── lib/
|
|
303
|
-
│ ├── paths.
|
|
304
|
-
│
|
|
305
|
-
|
|
306
|
-
|
|
296
|
+
│ ├── paths.ts # 크로스 플랫폼 경로
|
|
297
|
+
│ └── stop-hook-core.ts # 테스트 가능한 hook 로직
|
|
298
|
+
├── platforms/
|
|
299
|
+
│ ├── claude-code/installer.mjs # 플러그인 캐시 설치기
|
|
300
|
+
│ ├── codex-cli/installer.mjs # hooks.json 설치기
|
|
301
|
+
│ └── kiro-cli/installer.mjs # agents/ + steering/ 설치기
|
|
302
|
+
├── hooks/
|
|
303
|
+
│ └── stop-hook.mjs # 범용 Stop hook (Node.js)
|
|
304
|
+
├── commands/ # 슬래시 커맨드 정의
|
|
305
|
+
├── skills/ # 플랫폼별 스킬 정의
|
|
306
|
+
├── .claude-plugin/
|
|
307
|
+
│ └── plugin.json # Claude Code 마켓플레이스 매니페스트
|
|
308
|
+
├── dist/ # 컴파일 출력 (tsc)
|
|
309
|
+
└── tests/ # 296개 테스트 케이스 (vitest)
|
|
307
310
|
```
|
|
308
311
|
|
|
309
312
|
## PRD 포맷
|
|
310
313
|
|
|
311
|
-
loophaus는
|
|
314
|
+
loophaus는 `prd.json` 포맷을 사용합니다:
|
|
312
315
|
|
|
313
316
|
```json
|
|
314
317
|
{
|
|
315
318
|
"project": "MyApp",
|
|
316
|
-
"branchName": "
|
|
319
|
+
"branchName": "feature/auth-system",
|
|
317
320
|
"description": "JWT 인증 시스템과 로그인 UI",
|
|
318
321
|
"userStories": [
|
|
319
322
|
{
|
|
@@ -335,37 +338,6 @@ loophaus는 **ralph-skills 호환** `prd.json` 포맷을 사용합니다:
|
|
|
335
338
|
|
|
336
339
|
각 스토리는 **한 번의 반복**(하나의 컨텍스트 윈도우)에서 완료할 수 있는 크기입니다. 의존성은 priority 순으로 정렬됩니다.
|
|
337
340
|
|
|
338
|
-
## ralph-codex에서 마이그레이션
|
|
339
|
-
|
|
340
|
-
기존에 `ralph-codex`를 사용하고 있었다면, loophaus가 자동으로 마이그레이션을 처리합니다:
|
|
341
|
-
|
|
342
|
-
- **상태 파일 호환** — 기존 `prd.json`과 `progress.txt`를 그대로 사용 가능
|
|
343
|
-
- **자동 감지** — 설치 시 기존 ralph-codex 설정을 감지하고 loophaus 포맷으로 업그레이드
|
|
344
|
-
- **커맨드 매핑** — 기존 `/ralph-interview` → `/loop-plan`, `/ralph-loop` → `/loop`, `/cancel-ralph` → `/loop-stop`
|
|
345
|
-
|
|
346
|
-
마이그레이션 방법:
|
|
347
|
-
|
|
348
|
-
```bash
|
|
349
|
-
# 기존 ralph-codex 제거
|
|
350
|
-
npx @graypark/ralph-codex uninstall
|
|
351
|
-
|
|
352
|
-
# loophaus 설치 (기존 상태 파일 자동 인식)
|
|
353
|
-
npx @graypark/loophaus install
|
|
354
|
-
```
|
|
355
|
-
|
|
356
|
-
기존 PRD 파일은 수정 없이 그대로 동작합니다. `progress.txt`에 축적된 학습 내용도 보존됩니다.
|
|
357
|
-
|
|
358
|
-
## 생태계 호환성
|
|
359
|
-
|
|
360
|
-
loophaus는 기존 Ralph 도구들과 호환됩니다:
|
|
361
|
-
|
|
362
|
-
| 도구 | 호환성 |
|
|
363
|
-
| --- | --- |
|
|
364
|
-
| `ralph-skills:prd` | 동일한 `prd.json` 포맷 — 거기서 PRD를 생성하고 여기서 루프 실행 |
|
|
365
|
-
| `ralph-skills:ralph` | 동일한 `progress.txt`, `passes` 추적, `COMPLETE` promise |
|
|
366
|
-
| 공식 `ralph-loop` 플러그인 | PRD 파일이 양쪽 stop hook에서 동작 |
|
|
367
|
-
| `snarktank/ralph` | 호환되는 PRD 구조 및 반복 패턴 |
|
|
368
|
-
|
|
369
341
|
## 멀티 에이전트 오케스트레이션
|
|
370
342
|
|
|
371
343
|
여러 서비스에 걸치거나 광범위한 탐색이 필요한 태스크에 사용합니다:
|
|
@@ -395,19 +367,23 @@ Phase 2 — 순차 수정 (루프):
|
|
|
395
367
|
## 업데이트
|
|
396
368
|
|
|
397
369
|
```bash
|
|
398
|
-
|
|
370
|
+
npm install -g @graypark/loophaus@latest
|
|
371
|
+
loophaus install --force
|
|
399
372
|
```
|
|
400
373
|
|
|
401
374
|
## 제거
|
|
402
375
|
|
|
403
376
|
```bash
|
|
404
|
-
|
|
377
|
+
loophaus uninstall
|
|
378
|
+
npm uninstall -g @graypark/loophaus
|
|
405
379
|
```
|
|
406
380
|
|
|
407
381
|
## 개발
|
|
408
382
|
|
|
409
383
|
```bash
|
|
410
|
-
npm install && npm test
|
|
384
|
+
npm install && npm test # 296개 테스트
|
|
385
|
+
npm run typecheck # TypeScript strict 모드
|
|
386
|
+
npm run build # dist/로 컴파일
|
|
411
387
|
npx vitest # watch 모드
|
|
412
388
|
```
|
|
413
389
|
|
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<a href="https://github.com/vcz-Gray/loophaus/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square" alt="license" /></a>
|
|
11
11
|
<img src="https://img.shields.io/badge/node-%3E%3D20-brightgreen.svg?style=flat-square" alt="node version" />
|
|
12
12
|
<img src="https://img.shields.io/badge/platform-Claude%20Code%20%7C%20Codex%20CLI%20%7C%20Kiro%20CLI-purple.svg?style=flat-square" alt="platform" />
|
|
13
|
-
<img src="https://img.shields.io/badge/tests-
|
|
13
|
+
<img src="https://img.shields.io/badge/tests-296%20passing-brightgreen.svg?style=flat-square" alt="tests" />
|
|
14
14
|
</p>
|
|
15
15
|
|
|
16
16
|
<h3 align="center">Control plane for coding agents — iterative dev loops across Claude Code, Codex CLI, and Kiro CLI.</h3>
|
|
@@ -117,7 +117,7 @@ That's it. The interview generates a PRD, activates the loop, and starts impleme
|
|
|
117
117
|
| **Commands** | `/reload-plugins` | native | steering manual mode |
|
|
118
118
|
| **Multi-agent** | Agent tool | subprocesses | steering agents |
|
|
119
119
|
|
|
120
|
-
All three platforms share the same core engine (`core/engine.
|
|
120
|
+
All three platforms share the same core engine (`core/engine.ts`) and state store (`store/state-store.ts`). Platform-specific adapters handle the differences.
|
|
121
121
|
|
|
122
122
|
## Installation
|
|
123
123
|
|
|
@@ -215,60 +215,51 @@ loophaus quality --story US-001 # Score a specific story
|
|
|
215
215
|
```
|
|
216
216
|
loophaus/
|
|
217
217
|
├── bin/
|
|
218
|
-
│ ├── loophaus.
|
|
219
|
-
│ ├── install.
|
|
220
|
-
│ └── uninstall.
|
|
218
|
+
│ ├── loophaus.ts # CLI entry point
|
|
219
|
+
│ ├── install.ts # Cross-platform installer
|
|
220
|
+
│ └── uninstall.ts # Clean uninstaller
|
|
221
221
|
├── core/
|
|
222
|
-
│ ├──
|
|
223
|
-
│ ├──
|
|
224
|
-
│ ├──
|
|
225
|
-
│ ├──
|
|
226
|
-
│
|
|
222
|
+
│ ├── types.ts # Shared TypeScript interfaces
|
|
223
|
+
│ ├── engine.ts # Core loop engine (shared)
|
|
224
|
+
│ ├── event-logger.ts # Iteration event tracking
|
|
225
|
+
│ ├── quality-scorer.ts # Quality scoring (score, evaluate, log)
|
|
226
|
+
│ ├── refine-loop.ts # Keep/discard refinement logic
|
|
227
|
+
│ ├── validate.ts # PRD + state schema validation
|
|
228
|
+
│ ├── policy.ts # Loop policy evaluation
|
|
229
|
+
│ ├── cost-tracker.ts # Token cost estimation
|
|
230
|
+
│ ├── trace-analyzer.ts # Trace analysis + comparison
|
|
231
|
+
│ ├── worktree.ts # Git worktree lifecycle
|
|
232
|
+
│ ├── merge-strategy.ts # Parallel merge strategies
|
|
233
|
+
│ ├── parallel-runner.ts # Multi-worktree orchestration
|
|
234
|
+
│ ├── session.ts # Checkpoint / session management
|
|
235
|
+
│ └── loop-registry.ts # Multi-loop registry
|
|
227
236
|
├── store/
|
|
228
|
-
│ └── state-store.
|
|
237
|
+
│ └── state-store.ts # Loop state persistence
|
|
238
|
+
├── lib/
|
|
239
|
+
│ ├── paths.ts # Cross-platform path resolution
|
|
240
|
+
│ └── stop-hook-core.ts # Testable hook logic
|
|
229
241
|
├── platforms/
|
|
230
|
-
│ ├── claude-code/
|
|
231
|
-
│
|
|
232
|
-
│
|
|
233
|
-
│ ├── codex-cli/
|
|
234
|
-
│ │ ├── adapter.mjs # Codex CLI platform adapter
|
|
235
|
-
│ │ └── installer.mjs # hooks.json installer
|
|
236
|
-
│ └── kiro-cli/
|
|
237
|
-
│ ├── adapter.mjs # Kiro CLI platform adapter
|
|
238
|
-
│ └── installer.mjs # agents/ + steering/ installer
|
|
242
|
+
│ ├── claude-code/installer.mjs # Plugin cache installer
|
|
243
|
+
│ ├── codex-cli/installer.mjs # hooks.json installer
|
|
244
|
+
│ └── kiro-cli/installer.mjs # agents/ + steering/ installer
|
|
239
245
|
├── hooks/
|
|
240
|
-
│
|
|
241
|
-
|
|
242
|
-
├──
|
|
243
|
-
│ ├── loop-plan.md # /loop-plan command definition
|
|
244
|
-
│ ├── loop.md # /loop command definition
|
|
245
|
-
│ ├── loop-stop.md # /loop-stop command definition
|
|
246
|
-
│ ├── loop-pulse.md # /loop-pulse command definition
|
|
247
|
-
│ └── help.md # /help command definition
|
|
248
|
-
├── skills/
|
|
249
|
-
│ ├── ralph-interview/ # Interactive PRD generator
|
|
250
|
-
│ ├── ralph-orchestrator/ # Multi-agent patterns
|
|
251
|
-
│ ├── ralph-claude-interview/ # Claude Code interview + Skill tool
|
|
252
|
-
│ ├── ralph-claude-loop/ # Claude Code PRD-driven loop
|
|
253
|
-
│ ├── ralph-claude-cancel/ # Claude Code cancel
|
|
254
|
-
│ └── ralph-claude-orchestrator/# Claude Code Agent tool patterns
|
|
255
|
-
├── lib/
|
|
256
|
-
│ ├── paths.mjs # Cross-platform path resolution
|
|
257
|
-
│ ├── state.mjs # Legacy state management
|
|
258
|
-
│ └── stop-hook-core.mjs # Testable hook logic
|
|
246
|
+
│ └── stop-hook.mjs # Universal stop hook (Node.js)
|
|
247
|
+
├── commands/ # Slash command definitions
|
|
248
|
+
├── skills/ # Platform-specific skill definitions
|
|
259
249
|
├── .claude-plugin/
|
|
260
250
|
│ └── plugin.json # Claude Code marketplace manifest
|
|
261
|
-
|
|
251
|
+
├── dist/ # Compiled output (tsc)
|
|
252
|
+
└── tests/ # 296 test cases (vitest)
|
|
262
253
|
```
|
|
263
254
|
|
|
264
255
|
## PRD Format
|
|
265
256
|
|
|
266
|
-
loophaus uses a `prd.json` format
|
|
257
|
+
loophaus uses a `prd.json` format:
|
|
267
258
|
|
|
268
259
|
```json
|
|
269
260
|
{
|
|
270
261
|
"project": "MyApp",
|
|
271
|
-
"branchName": "
|
|
262
|
+
"branchName": "feature/auth-system",
|
|
272
263
|
"description": "JWT authentication with login UI",
|
|
273
264
|
"userStories": [
|
|
274
265
|
{
|
|
@@ -290,30 +281,19 @@ loophaus uses a `prd.json` format compatible with the ralph-skills ecosystem:
|
|
|
290
281
|
|
|
291
282
|
Each story is sized to complete in one iteration (one context window). Dependencies are ordered by priority. The loop engine picks the next story where `passes` is `false` and works on it until verification succeeds.
|
|
292
283
|
|
|
293
|
-
##
|
|
294
|
-
|
|
295
|
-
`@graypark/ralph-codex` has been deprecated in favor of `@graypark/loophaus`. The migration is straightforward:
|
|
296
|
-
|
|
297
|
-
1. **Install loophaus** — it replaces ralph-codex entirely:
|
|
298
|
-
```bash
|
|
299
|
-
npx @graypark/loophaus install --force
|
|
300
|
-
```
|
|
301
|
-
|
|
302
|
-
2. **State files auto-migrate** — Existing `prd.json` and `progress.txt` files are fully compatible. No changes needed.
|
|
284
|
+
## Update
|
|
303
285
|
|
|
304
|
-
|
|
286
|
+
```bash
|
|
287
|
+
npm install -g @graypark/loophaus@latest
|
|
288
|
+
loophaus install --force
|
|
289
|
+
```
|
|
305
290
|
|
|
306
|
-
|
|
307
|
-
|-------------|----------|
|
|
308
|
-
| `/ralph-interview` | `/loop-plan` |
|
|
309
|
-
| `/ralph-loop` | `/loop` |
|
|
310
|
-
| `/cancel-ralph` | `/loop-stop` |
|
|
311
|
-
| (none) | `/loop-pulse` |
|
|
291
|
+
## Uninstall
|
|
312
292
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
293
|
+
```bash
|
|
294
|
+
loophaus uninstall
|
|
295
|
+
npm uninstall -g @graypark/loophaus
|
|
296
|
+
```
|
|
317
297
|
|
|
318
298
|
## Development
|
|
319
299
|
|
|
@@ -321,7 +301,9 @@ Each story is sized to complete in one iteration (one context window). Dependenc
|
|
|
321
301
|
git clone https://github.com/vcz-Gray/loophaus.git
|
|
322
302
|
cd loophaus
|
|
323
303
|
npm install
|
|
324
|
-
npm test #
|
|
304
|
+
npm test # 296 test cases
|
|
305
|
+
npm run typecheck # TypeScript strict mode
|
|
306
|
+
npm run build # Compile to dist/
|
|
325
307
|
npx vitest # watch mode
|
|
326
308
|
```
|
|
327
309
|
|
package/commands/loop-plan.md
CHANGED
|
@@ -11,6 +11,28 @@ The user runs `/loop-plan` once and gets a single merged branch with all work do
|
|
|
11
11
|
|
|
12
12
|
---
|
|
13
13
|
|
|
14
|
+
## Phase 0: Cleanup Previous Data
|
|
15
|
+
|
|
16
|
+
Before starting a new plan, apply the cleanup policy from `.loophaus/config.json`:
|
|
17
|
+
|
|
18
|
+
```javascript
|
|
19
|
+
import { applyOnNewPlanPolicy } from "../core/cleanup.js";
|
|
20
|
+
const cleanResult = await applyOnNewPlanPolicy();
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
| Policy | Behavior |
|
|
24
|
+
|--------|----------|
|
|
25
|
+
| `"keep"` (default) | Do nothing — old traces/results persist alongside new data |
|
|
26
|
+
| `"archive"` | Move trace.jsonl + results.tsv + sessions/ to `.loophaus/archive/{date}/` |
|
|
27
|
+
| `"delete"` | Remove trace.jsonl + results.tsv + sessions/ (benchmark.tsv always preserved) |
|
|
28
|
+
|
|
29
|
+
If cleanup was performed, briefly note it (e.g., "Archived previous loop data.") then continue.
|
|
30
|
+
|
|
31
|
+
To configure: `loophaus clean --config` to view, or create `.loophaus/config.json`:
|
|
32
|
+
```json
|
|
33
|
+
{ "cleanup": { "onNewPlan": "archive", "traceRetentionDays": 30, "sessionRetentionDays": 7 } }
|
|
34
|
+
```
|
|
35
|
+
|
|
14
36
|
## Phase 1: Discovery Interview
|
|
15
37
|
|
|
16
38
|
Ask 3-5 focused questions about $ARGUMENTS:
|
package/dist/README.ko.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<a href="https://github.com/vcz-Gray/loophaus/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square" alt="license" /></a>
|
|
11
11
|
<img src="https://img.shields.io/badge/node-%3E%3D20-brightgreen.svg?style=flat-square" alt="node version" />
|
|
12
12
|
<img src="https://img.shields.io/badge/platform-Claude%20Code%20%7C%20Codex%20CLI%20%7C%20Kiro%20CLI-purple.svg?style=flat-square" alt="platform" />
|
|
13
|
-
<img src="https://img.shields.io/badge/tests-
|
|
13
|
+
<img src="https://img.shields.io/badge/tests-296%20passing-brightgreen.svg?style=flat-square" alt="tests" />
|
|
14
14
|
</p>
|
|
15
15
|
|
|
16
16
|
<p align="center">
|
|
@@ -156,7 +156,7 @@ loophaus는 세 개의 주요 코딩 에이전트 플랫폼을 지원합니다:
|
|
|
156
156
|
| Stop hook | bash 기반 | Node.js 기반 | bash 기반 |
|
|
157
157
|
| 루프 실행 | Skill tool | 네이티브 커맨드 | 네이티브 커맨드 |
|
|
158
158
|
| 멀티 에이전트 | Agent tool | 서브에이전트 | 서브에이전트 |
|
|
159
|
-
| 상태 파일 | `.
|
|
159
|
+
| 상태 파일 | `.loophaus/state.json` | `.loophaus/state.json` | `.loophaus/state.json` |
|
|
160
160
|
|
|
161
161
|
## 설치
|
|
162
162
|
|
|
@@ -271,49 +271,52 @@ loophaus quality --story US-001 # 특정 스토리 품질 측정
|
|
|
271
271
|
|
|
272
272
|
```
|
|
273
273
|
loophaus/
|
|
274
|
-
├── .claude-plugin/plugin.json # Claude Code 마켓플레이스 매니페스트
|
|
275
274
|
├── bin/
|
|
276
|
-
│ ├── loophaus.
|
|
277
|
-
│ ├── install.
|
|
278
|
-
│ └── uninstall.
|
|
279
|
-
├── hooks/
|
|
280
|
-
│ └── stop-hook.mjs # 핵심 루프 엔진 (Node.js)
|
|
281
|
-
├── commands/
|
|
282
|
-
│ ├── loop.md # /loop 커맨드
|
|
283
|
-
│ ├── loop-plan.md # /loop-plan 커맨드
|
|
284
|
-
│ ├── loop-stop.md # /loop-stop 커맨드
|
|
285
|
-
│ ├── loop-pulse.md # /loop-pulse 커맨드
|
|
286
|
-
│ └── help.md # /help 커맨드
|
|
287
|
-
├── platforms/ # 호스트별 어댑터
|
|
288
|
-
├── store/ # 상태 저장소
|
|
275
|
+
│ ├── loophaus.ts # CLI 진입점
|
|
276
|
+
│ ├── install.ts # 크로스 플랫폼 설치기
|
|
277
|
+
│ └── uninstall.ts # 제거기
|
|
289
278
|
├── core/
|
|
290
|
-
│ ├──
|
|
291
|
-
│ ├──
|
|
292
|
-
│ ├──
|
|
293
|
-
│ ├──
|
|
294
|
-
│
|
|
295
|
-
├──
|
|
296
|
-
│ ├──
|
|
297
|
-
│ ├──
|
|
298
|
-
│ ├──
|
|
299
|
-
│ ├──
|
|
300
|
-
│ ├──
|
|
301
|
-
│
|
|
279
|
+
│ ├── types.ts # 공유 TypeScript 인터페이스
|
|
280
|
+
│ ├── engine.ts # 핵심 루프 엔진
|
|
281
|
+
│ ├── event-logger.ts # 이벤트 추적
|
|
282
|
+
│ ├── quality-scorer.ts # 품질 측정 (점수, 평가, 로깅)
|
|
283
|
+
│ ├── refine-loop.ts # 유지/폐기 개선 로직
|
|
284
|
+
│ ├── validate.ts # PRD + 상태 스키마 검증
|
|
285
|
+
│ ├── policy.ts # 루프 정책 평가
|
|
286
|
+
│ ├── cost-tracker.ts # 토큰 비용 추정
|
|
287
|
+
│ ├── trace-analyzer.ts # 트레이스 분석 + 비교
|
|
288
|
+
│ ├── worktree.ts # Git 워크트리 관리
|
|
289
|
+
│ ├── merge-strategy.ts # 병렬 머지 전략
|
|
290
|
+
│ ├── parallel-runner.ts # 멀티 워크트리 오케스트레이션
|
|
291
|
+
│ ├── session.ts # 체크포인트 / 세션 관리
|
|
292
|
+
│ └── loop-registry.ts # 멀티 루프 레지스트리
|
|
293
|
+
├── store/
|
|
294
|
+
│ └── state-store.ts # 루프 상태 저장소
|
|
302
295
|
├── lib/
|
|
303
|
-
│ ├── paths.
|
|
304
|
-
│
|
|
305
|
-
|
|
306
|
-
|
|
296
|
+
│ ├── paths.ts # 크로스 플랫폼 경로
|
|
297
|
+
│ └── stop-hook-core.ts # 테스트 가능한 hook 로직
|
|
298
|
+
├── platforms/
|
|
299
|
+
│ ├── claude-code/installer.mjs # 플러그인 캐시 설치기
|
|
300
|
+
│ ├── codex-cli/installer.mjs # hooks.json 설치기
|
|
301
|
+
│ └── kiro-cli/installer.mjs # agents/ + steering/ 설치기
|
|
302
|
+
├── hooks/
|
|
303
|
+
│ └── stop-hook.mjs # 범용 Stop hook (Node.js)
|
|
304
|
+
├── commands/ # 슬래시 커맨드 정의
|
|
305
|
+
├── skills/ # 플랫폼별 스킬 정의
|
|
306
|
+
├── .claude-plugin/
|
|
307
|
+
│ └── plugin.json # Claude Code 마켓플레이스 매니페스트
|
|
308
|
+
├── dist/ # 컴파일 출력 (tsc)
|
|
309
|
+
└── tests/ # 296개 테스트 케이스 (vitest)
|
|
307
310
|
```
|
|
308
311
|
|
|
309
312
|
## PRD 포맷
|
|
310
313
|
|
|
311
|
-
loophaus는
|
|
314
|
+
loophaus는 `prd.json` 포맷을 사용합니다:
|
|
312
315
|
|
|
313
316
|
```json
|
|
314
317
|
{
|
|
315
318
|
"project": "MyApp",
|
|
316
|
-
"branchName": "
|
|
319
|
+
"branchName": "feature/auth-system",
|
|
317
320
|
"description": "JWT 인증 시스템과 로그인 UI",
|
|
318
321
|
"userStories": [
|
|
319
322
|
{
|
|
@@ -335,37 +338,6 @@ loophaus는 **ralph-skills 호환** `prd.json` 포맷을 사용합니다:
|
|
|
335
338
|
|
|
336
339
|
각 스토리는 **한 번의 반복**(하나의 컨텍스트 윈도우)에서 완료할 수 있는 크기입니다. 의존성은 priority 순으로 정렬됩니다.
|
|
337
340
|
|
|
338
|
-
## ralph-codex에서 마이그레이션
|
|
339
|
-
|
|
340
|
-
기존에 `ralph-codex`를 사용하고 있었다면, loophaus가 자동으로 마이그레이션을 처리합니다:
|
|
341
|
-
|
|
342
|
-
- **상태 파일 호환** — 기존 `prd.json`과 `progress.txt`를 그대로 사용 가능
|
|
343
|
-
- **자동 감지** — 설치 시 기존 ralph-codex 설정을 감지하고 loophaus 포맷으로 업그레이드
|
|
344
|
-
- **커맨드 매핑** — 기존 `/ralph-interview` → `/loop-plan`, `/ralph-loop` → `/loop`, `/cancel-ralph` → `/loop-stop`
|
|
345
|
-
|
|
346
|
-
마이그레이션 방법:
|
|
347
|
-
|
|
348
|
-
```bash
|
|
349
|
-
# 기존 ralph-codex 제거
|
|
350
|
-
npx @graypark/ralph-codex uninstall
|
|
351
|
-
|
|
352
|
-
# loophaus 설치 (기존 상태 파일 자동 인식)
|
|
353
|
-
npx @graypark/loophaus install
|
|
354
|
-
```
|
|
355
|
-
|
|
356
|
-
기존 PRD 파일은 수정 없이 그대로 동작합니다. `progress.txt`에 축적된 학습 내용도 보존됩니다.
|
|
357
|
-
|
|
358
|
-
## 생태계 호환성
|
|
359
|
-
|
|
360
|
-
loophaus는 기존 Ralph 도구들과 호환됩니다:
|
|
361
|
-
|
|
362
|
-
| 도구 | 호환성 |
|
|
363
|
-
| --- | --- |
|
|
364
|
-
| `ralph-skills:prd` | 동일한 `prd.json` 포맷 — 거기서 PRD를 생성하고 여기서 루프 실행 |
|
|
365
|
-
| `ralph-skills:ralph` | 동일한 `progress.txt`, `passes` 추적, `COMPLETE` promise |
|
|
366
|
-
| 공식 `ralph-loop` 플러그인 | PRD 파일이 양쪽 stop hook에서 동작 |
|
|
367
|
-
| `snarktank/ralph` | 호환되는 PRD 구조 및 반복 패턴 |
|
|
368
|
-
|
|
369
341
|
## 멀티 에이전트 오케스트레이션
|
|
370
342
|
|
|
371
343
|
여러 서비스에 걸치거나 광범위한 탐색이 필요한 태스크에 사용합니다:
|
|
@@ -395,19 +367,23 @@ Phase 2 — 순차 수정 (루프):
|
|
|
395
367
|
## 업데이트
|
|
396
368
|
|
|
397
369
|
```bash
|
|
398
|
-
|
|
370
|
+
npm install -g @graypark/loophaus@latest
|
|
371
|
+
loophaus install --force
|
|
399
372
|
```
|
|
400
373
|
|
|
401
374
|
## 제거
|
|
402
375
|
|
|
403
376
|
```bash
|
|
404
|
-
|
|
377
|
+
loophaus uninstall
|
|
378
|
+
npm uninstall -g @graypark/loophaus
|
|
405
379
|
```
|
|
406
380
|
|
|
407
381
|
## 개발
|
|
408
382
|
|
|
409
383
|
```bash
|
|
410
|
-
npm install && npm test
|
|
384
|
+
npm install && npm test # 296개 테스트
|
|
385
|
+
npm run typecheck # TypeScript strict 모드
|
|
386
|
+
npm run build # dist/로 컴파일
|
|
411
387
|
npx vitest # watch 모드
|
|
412
388
|
```
|
|
413
389
|
|