Skip to content

대화형 세션의 턴 예산을 24로 늘리고 멈춘 이유를 보이게 했다 - #98

Merged
SonAIengine merged 1 commit into
mainfrom
fix/repl-turn-budget
Oct 25, 2026
Merged

SonAIengine merged 1 commit into
mainfrom
fix/repl-turn-budget

Conversation

@SonAIengine

Copy link
Copy Markdown
Contributor

문제

실사용 시나리오에서 "기능 수정 + 테스트 추가 + 테스트 실행" 요청이 최종 응답 없이 paused: quiescent로 끝났다.

  • REPL은 max_model_turns: None으로 Run을 시작해서 bare 작업공간 예산(턴 8)을 쓴다.
  • 모델이 한 턴에 한 단계씩 8단계를 진행했다: 목록 → 읽기 → 읽기 → 수정 → 읽기 → 수정 → 테스트 → npm install. 여기서 예산이 끝나 완료 응답을 쓸 턴이 남지 않았다.
  • 멈춘 이유가 화면에 나오지 않았다. /resume은 manifest에 기록된 예산을 그대로 써서 바로 같은 상태로 끝났고, 새 요청은 active_run_paused로 막혀 /clear 말고는 방법이 없었다.

변경

  • REPL 기본 턴 예산을 24로 올렸다. 프로젝트 eval이 Node.js·Python 작업에 이미 쓰던 값이다. xgen --max-model-turns N으로 바꿀 수 있다.
  • foreground tick 상한은 턴당 10으로 정하고 MAX_TICKS(1024)를 넘지 않게 했다.
  • PauseReason::Quiescent가 AgentLoopQuiescence를 담는다. 기계용 출력 XGEN_PAUSED reason=quiescent는 바꾸지 않았다.
  • REPL은 paused: quiescent (model_turn_budget_exhausted)처럼 이유를 같이 보여 준다.
  • 예산이나 컨텍스트가 소진된 경우는 재개해도 풀리지 않으므로, REPL이 Run을 떼어 내고 다음 요청을 바로 받는다. 다른 quiescence는 기존처럼 Run이 붙어 있다.

검증

  • cargo test -p xgen-cli 198개 통과(새 REPL 테스트 3개 포함), clippy 경고 0
  • 같은 JS 저장소에서 같은 요청을 다시 실행했다. 9단계 후 최종 응답이 나왔고 38초 걸렸다. 결과물은 ava 4 passed, xo 통과로 직접 다시 확인했다.
  • --max-model-turns 3으로 예산을 일부러 소진시켰다. 이유와 안내가 보였고, /clear 없이 다음 요청이 시작됐다.

이번 범위 밖 (따로 처리)

  • 처음 쓰는 Python 저장소에서는 다른 이유로 실패했다. 75KB 파일이 read-text 한도(64 KiB)를 넘었는데, 나눠 읽는 방법이 없어서 읽기 한 번 실패로 goal 전체가 failed_work로 끝났다.

🤖 Generated with Claude Code

실사용 시나리오에서 "기능 수정 + 테스트 추가 + 테스트 실행" 요청이 최종 응답 없이
`paused: quiescent`로 끝났다. REPL이 `max_model_turns`를 주지 않아 bare 작업공간
예산(턴 8)을 썼고, 모델이 한 턴에 한 단계씩 8단계(목록·읽기·수정·테스트·npm install)를
쓰고 나니 완료 응답 턴이 남지 않았다. 이유는 화면에 없었고 /resume 도 manifest 에
기록된 예산을 그대로 써서 즉시 같은 상태로 끝났으며, 새 요청은 active_run_paused 로
막혀 /clear 밖에 길이 없었다.

- REPL 기본 턴 예산을 24로 올렸다. 프로젝트 eval 이 Node.js·Python 작업에 이미 쓰던
  값이다. `xgen --max-model-turns N` 으로 바꿀 수 있다.
- foreground tick 상한은 턴당 10으로 맞추고 MAX_TICKS(1024)에서 자른다. 32로 두면 큰
  예산이 tick 에서 먼저 끊긴다.
- PauseReason::Quiescent 가 AgentLoopQuiescence 를 담는다. 기계용 `XGEN_PAUSED
  reason=quiescent` 출력은 그대로 두고, REPL 은 `paused: quiescent
  (model_turn_budget_exhausted)` 처럼 이유를 함께 보여 준다.
- 예산·컨텍스트 소진은 재개로 풀리지 않으므로 REPL 이 Run 을 떼어 내고 다음 요청을
  바로 받는다. 다음 요청이 이전 단계를 모른다는 점도 안내한다. 의존성 대기 등 다른
  quiescence 는 기존처럼 붙어 있다.
- tick 소진 pause 에는 /resume 으로 이어진다는 안내를 붙였다.

검증
- cargo test -p xgen-cli 198개 통과(REPL 테스트 3개 추가), clippy 경고 0
- 같은 JS 저장소·같은 요청 재실행: 9단계 후 최종 응답, 38초. 결과물은 ava 4 passed,
  xo 통과로 직접 재확인
- `--max-model-turns 3` 으로 강제 소진: 이유와 안내가 보이고, /clear 없이 다음 요청이
  시작됐다

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@SonAIengine
SonAIengine merged commit 6cd965c into main Oct 25, 2026
3 checks passed
@SonAIengine
SonAIengine deleted the fix/repl-turn-budget branch October 25, 2026 11:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant