@tuzi-ince/hi-loop 0.3.2 → 0.3.4

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/bin/setup.js CHANGED
@@ -25,6 +25,8 @@ export const CLAUDE_MD_BLOCK = `${CLAUDE_MD_BEGIN}
25
25
  기능 추가·개선·리팩터처럼 **기획/설계가 선행되어야 하는 요청**은 소스만 보고 바로 구현하지 말고,
26
26
  \`hi-loop\` 스킬(또는 MCP 도구 \`hiloop_run\`, \`full: true\`)로 PLAN→DESIGN→DO→CHECK→HEAL 루프를 돌린다.
27
27
 
28
+ **응답 언어는 사용자의 요청 언어에 맞춘다** — 한국어 요청엔 한국어로, 영어 요청엔 영어로 답한다. hi-loop 도구·서브에이전트 결과(리포트·Gaps 등)를 옮길 때도 사용자 언어로 전한다.
29
+
28
30
  - 트리거: 기획, 설계, 구현, 개선, 기능 추가, 리팩터, plan, design, feature, PDCA, TDD
29
31
  - 예외: 오타·1줄 수정·문구 변경 등 사소한 작업은 루프 없이 바로 처리한다.
30
32
  - MCP 도구가 세션에서 deferred 이면 ToolSearch 로 \`hiloop_run\` 스키마를 먼저 로드한다.
package/docs/guide.md CHANGED
@@ -15,7 +15,7 @@ npm link # hi-loop, hi-loop-setup 명령 등록
15
15
 
16
16
  # 2) 사용할 프로젝트에서 설정 주입
17
17
  cd /path/to/my-project
18
- hi-loop-setup # .mcp.json / .gitignore / docs / tests
18
+ hi-loop-setup # .mcp.json / .gitignore / docs·tests / CLAUDE.md / docs/design.md
19
19
 
20
20
  # 3) 두 가지 방식 중 하나로 가동
21
21
  hi-loop run --goal "add 함수를 만들어라" --test "npm test" # 사람이 직접
@@ -91,8 +91,14 @@ hi-loop-setup # 실제 적용
91
91
  | 대상 | 동작 |
92
92
  |---|---|
93
93
  | `.mcp.json` | `hi-loop` MCP 서버 등록. **기존 다른 서버 항목은 보존** |
94
- | `.gitignore` | `.agent-state.json` 추가 (중복 없이) |
94
+ | `.gitignore` | `.agent-state.json` · `.agent-state.lock` 추가 (중복 없이) |
95
95
  | `docs/`, `tests/` | 없으면 생성 |
96
+ | `docs/design.md` | **표준 설계 문서**를 템플릿으로 생성. **있으면 절대 덮어쓰지 않음**(사람이 관리하는 진실) |
97
+ | `CLAUDE.md` | 기획/설계 요청을 hi-loop 으로 라우팅하는 상시 지침을 마커로 멱등 주입 |
98
+
99
+ > `docs/design.md` 는 이번 프로젝트의 **오라클**이다 — `--reconcile`(정합 게이트)·`--spec`(스펙 고정)이
100
+ > 이 문서를 기준으로 요청을 판정한다(§4-1 참조). 셋업 직후 이 문서를 채워두면, 이후 단말적 요청이
101
+ > 문서와 어긋날 때 엔진이 잡아준다. 비어 있으면 정합 게이트는 사실상 아무것도 막지 못한다.
96
102
 
97
103
  생성되는 `.mcp.json` 은 이렇게 **현재 설치본의 절대 경로**를 가리킨다:
98
104
 
@@ -132,6 +138,9 @@ hi-loop run --goal "JWT 인증 미들웨어를 만들어라" \
132
138
  | `--budget-usd` | — | (없음=무제한) | 누적 **비용** 상한(USD). 넘으면 다음 호출 전에 중단 |
133
139
  | `--stagnation` | — | `3` | 같은 실패가 이 횟수 연속이면 조기 종료. `--no-stagnation` 으로 끔 |
134
140
  | `--verify-spec` | — | (꺼짐) | 통과 후 별도 검증자로 스펙 대비 구현을 심판 (하향 전용, 비용 증가) |
141
+ | `--spec <path>` | — | (엔진이 결정) | 스펙 오라클을 이 문서로 **고정**. 이미 내용이 있으면 PLAN 이 덮어쓰지 않는다 |
142
+ | `--reconcile` / `--no-reconcile` | — | `--full` 이면 켜짐 | **문서 정합 게이트**: 요청이 표준 문서와 모순되면 구현 전에 멈춰 사람에게 묻는다 |
143
+ | `--reconcile-spec <path>` | — | design.md→spec.md | 정합 게이트가 대조할 문서 지정(지정하면 게이트가 켜진다) |
135
144
  | `--cwd` | `-c` | 현재 디렉터리 | 작업 대상 |
136
145
 
137
146
  > 세 상한의 관계: `--max-loops`(횟수) / `--budget-usd`(비용) / `--stagnation`(반복).
@@ -153,6 +162,14 @@ hi-loop status # 현재 루프 상태 요약 (누적 비용·정체
153
162
  hi-loop --help
154
163
  ```
155
164
 
165
+ > **문서↔소스 정합 (`--spec` / `--reconcile`)**: 기본적으로 이 엔진의 스펙·테스트는 에이전트
166
+ > **자신이** 쓴 것이라, 통과가 "자기 테스트를 통과"에 그칠 수 있다(완료 보고의 Gaps 가 이를 공개한다).
167
+ > 사람이 관리하는 표준 문서(`docs/design.md`, `hi-loop-setup` 이 만든다)를 오라클로 세우면 그 한계를 좁힌다:
168
+ > - `--spec docs/design.md` — 그 문서를 스펙 오라클로 **고정**(리뷰·검증이 이 문서 기준).
169
+ > - `--reconcile` — 새 요청이 그 문서와 **모순되면 구현 전에 멈춰** 묻는다(고정 / 분기 / 중단).
170
+ > 대상은 `--reconcile-spec` 명시 → `docs/design.md` → `docs/spec.md` 순. `hi-loop-setup` 을 했다면
171
+ > `--full`/`--reconcile` 만으로 design.md 가 자동 오라클이 된다.
172
+
156
173
  ### 4-1b. 전과정 라이프사이클 (`--full`) 과 배포·감시
157
174
 
158
175
  기본은 자가 치유 루프 하나다. 앞뒤 단계는 **켤 때만** 돈다 — 켜지 않은 사람의 비용이
@@ -238,17 +255,25 @@ hi-loop rollback --cwd . # 작업 대상 지정
238
255
 
239
256
  ### 4-2. MCP 서버 (클로드코드 / 커서)
240
257
 
241
- `hi-loop-setup` 후 에이전트를 재시작하면 도구 3개가 뜬다.
258
+ `hi-loop-setup` 후 에이전트를 재시작하면 도구 6개가 뜬다.
242
259
 
243
260
  | 도구 | 인자 | 용도 |
244
261
  |---|---|---|
245
- | `hiloop_run` | `goal`(필수), `testCommand`, `maxLoops`, `verifySpec`, `cwd` | 자가 치유 루프 실행 |
262
+ | `hiloop_run` | `goal`(필수), `testCommand`, `maxLoops`, `verifySpec`, `full`, `ship`, `watch`, `stopAfter`, `spec`, `reconcile`, `reconcileSpec`, `cwd` | 자가 치유(+전과정) 루프 실행 |
263
+ | `hiloop_answer` | `choice`, `note`, `cwd` | 대기 중인 질문에 답하고 재개 가능 상태로 되돌림 |
246
264
  | `hiloop_status` | `cwd` | 진행 상태 조회 (장시간 루프를 들여다보는 창) |
265
+ | `hiloop_rollback` | `to`, `cwd` | 체크포인트로 파일 복원 |
247
266
  | `hiloop_reset` | `cwd` | `.agent-state.json` 초기화 |
267
+ | `hiloop_setup` | `dryRun`, `cwd` | 프로젝트 설정 주입 |
248
268
 
249
269
  > MCP `hiloop_run`은 CLI와 달리 `--budget-usd`·`--stagnation`을 노출하지 않는다.
250
270
  > 예산 상한이 필요하면 CLI(`hi-loop run`)를 쓴다. 정체 감지는 기본값(3회)으로 동작한다.
251
271
 
272
+ > **cwd 기본값은 `CLAUDE_PROJECT_DIR || process.cwd()`.** MCP 는 호스트(클로드코드/커서)가 서버를
273
+ > 띄우는 경로라, "어느 프로젝트인가"의 정답은 호스트가 주입하는 `CLAUDE_PROJECT_DIR` 다. 각 도구에
274
+ > `cwd` 를 명시하면 그것이 최우선. (CLI 는 반대로 순수 `process.cwd()` — 터미널에서 cd 한 곳이 의도다.)
275
+ > 상위 폴더에서 여러 하위 프로젝트를 다룰 땐 `cwd` 를 명시하거나 프로젝트별로 `hi-loop-setup` 하라.
276
+
252
277
  수동 기동: `hi-loop mcp` (인자 없이 `hi-loop` 만 쳐도 서버로 뜬다)
253
278
 
254
279
  ### 4-3. 환경변수
@@ -260,6 +285,8 @@ hi-loop rollback --cwd . # 작업 대상 지정
260
285
  | `HILOOP_PERMISSION_MODE` | `acceptEdits` | 비대화형 편집 허용용. `bypassPermissions` 등으로 확대/축소 |
261
286
  | `HILOOP_VERIFY_CMD` | (`HILOOP_AGENT_CMD`→`claude`) | `--verify-spec` 검증자 실행 명령. 구현자와 다른 CLI로 검증 가능 |
262
287
  | `HILOOP_VERIFY_MODEL` | (구현자와 동일) | `--verify-spec` 검증자 모델 |
288
+ | `HILOOP_RECONCILE_CMD` | (`HILOOP_VERIFY_CMD`→구현자) | `--reconcile` 정합 판정자 실행 명령 |
289
+ | `HILOOP_RECONCILE_MODEL` | (`HILOOP_VERIFY_MODEL`→구현자) | `--reconcile` 정합 판정자 모델 |
263
290
  | `HILOOP_AGENT_TIMEOUT_MS` | `1800000` | 에이전트 호출 타임아웃(30분). 쓰레기값은 기본값으로 되돌림 |
264
291
  | `HILOOP_TEST_TIMEOUT_MS` | `600000` | 테스트 실행 타임아웃(10분). 〃 |
265
292
  | `TELEGRAM_BOT_TOKEN` | (없음) | 알림용. 미설정 시 조용히 생략 |
@@ -417,8 +444,9 @@ npm install -g @tuzi-ince/hi-loop # 명령 이름은 그대로 hi-loop / hi-l
417
444
  | 증상 | 원인 / 조치 |
418
445
  |---|---|
419
446
  | 에이전트가 파일을 하나도 안 쓰고 루프만 돈다 | 권한 모드 문제. `HILOOP_PERMISSION_MODE=bypassPermissions` 로 시도 |
420
- | `에이전트 실행 실패(claude): spawn ... ENOENT` | `claude`PATH 없음. `which claude` 확인 `HILOOP_AGENT_CMD` 에 절대 경로 지정 |
421
- | `spawn ... EACCES` | 커스텀 에이전트 스크립트에 실행 권한 없음 → `chmod +x` |
447
+ | `에이전트 명령 'claude' 찾을 없습니다` | preflight루프 진입 잡은 것. Claude Code 설치(`npm i -g @anthropic-ai/claude-code`) 또는 `HILOOP_AGENT_CMD` 에 절대 경로 지정 |
448
+ | `... 실행할 권한이 없습니다 (EACCES)` | 커스텀 에이전트 스크립트에 실행 권한 없음 → `chmod +x "$(command -v <명령>)"` |
449
+ | `API 키가 없거나 유효하지 않습니다 / 구독·크레딧 문제로 보입니다` | 에이전트 인증 문제. preflight 는 설치만 보고(비용 0), 인증은 첫 호출에서 감지된다 — `claude` 로그인 상태나 `ANTHROPIC_API_KEY` 를 확인 |
422
450
  | MCP 서버가 에이전트에 안 뜬다 | `.mcp.json` 경로가 실재하는지 확인(`hi-loop-setup` 재실행), 에이전트 재시작 |
423
451
  | MCP 응답이 깨진다 | stdout 은 프로토콜 채널이다. 커스텀 로거를 stdout 에 물리지 말 것 |
424
452
  | 같은 실패를 10회 반복하고 끝난다 | 알려진 한계(design.md L2). `--max-loops` 를 낮춰 비용부터 막고 goal 을 더 구체적으로 |
package/docs/spec.md CHANGED
@@ -253,7 +253,9 @@ runLoop({
253
253
  않는다**(사람이 관리하는 진실). FR-21 정합 게이트·FR-19 스펙 고정의 오라클 대상이다. PLAN 이
254
254
  쓰는 `spec.md` 와 달리 엔진은 이 파일을 손대지 않는다.
255
255
  - FR-6.7 `CLAUDE.md` 에 hi-loop 워크플로 라우팅 지침을 마커(`<!-- hi-loop:begin/end -->`)로 감싸
256
- 멱등 주입한다. 코드 변경 루프가 `docs/design.md` 와 정합하도록(`--reconcile-spec`/`--spec`) 안내한다.
256
+ 멱등 주입한다. 코드 변경 루프가 `docs/design.md` 와 정합하도록(`--reconcile-spec`/`--spec`) 안내하고,
257
+ **응답 언어를 사용자의 요청 언어에 맞추라는 지시**를 포함한다 — 영어 스킬/도구/프레임워크 표면이
258
+ 많아도 한국어 요청엔 한국어로 답하도록(언어 드리프트 방지).
257
259
 
258
260
  ---
259
261
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tuzi-ince/hi-loop",
3
- "version": "0.3.2",
3
+ "version": "0.3.4",
4
4
  "description": "CLI와 MCP 모드를 지원하는 초경량 자율형 자가 치유 엔진",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: hi-loop
2
+ name: flow
3
3
  description: >-
4
4
  기획·설계가 필요한 기능 개발/개선 요청을 소스만 보고 바로 구현하지 말고, PLAN→DESIGN→DO→CHECK→HEAL
5
5
  자율 루프(hiloop_run)로 처리한다. spec/설계를 먼저 세우고 테스트가 통과할 때까지 반복하며, full=true면
@@ -35,9 +35,11 @@ user-invocable: true
35
35
  - `never` → 분기하지 않는다.
36
36
  - 이미 feature 브랜치(보호 대상 아님)면 조용히 진행한다.
37
37
 
38
- 3. **MCP 도구 로드.** hi-loop MCP 도구는 세션에서 *deferred*(이름만)일 수 있다.
39
- 먼저 스키마를 불러온다:
40
- `ToolSearch` `select:mcp__plugin_hi-loop_hi-loop__hiloop_run,mcp__plugin_hi-loop_hi-loop__hiloop_answer`
38
+ 3. **MCP 도구 로드.** hi-loop MCP 도구(`hiloop_run`, `hiloop_answer` …)는 세션에서 *deferred*(이름만)일 수 있다.
39
+ 정확한 도구명 **접두사는 등록 방식(플러그인 vs 프로젝트 `.mcp.json`)에 따라 다르다**
40
+ (`mcp__hi-loop__hiloop_run` 또는 `mcp__plugin_...__hiloop_run`). 접두사를 하드코딩하지 말고
41
+ **이름으로 검색**해 매칭된 정확한 도구를 호출한다:
42
+ `ToolSearch` → 쿼리 `hiloop_run hiloop_answer` (키워드 검색)
41
43
 
42
44
  4. **루프 실행.** `hiloop_run` 을 호출한다:
43
45
  - `goal`: 위에서 정한 목표