modify coding template

This commit is contained in:
NINI
2026-05-09 02:20:01 +09:00
parent 38291723f0
commit a1aea6a449
55 changed files with 437 additions and 2862 deletions
+11 -18
View File
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
"""
Harness Step Executor - run phase steps sequentially with Codex and self-correction.
Harness Step Executor phase step을 순차 실행하고 자가 교정한다.
Usage:
python scripts/execute.py <phase-dir> [--push]
@@ -9,6 +9,7 @@ Usage:
import argparse
import contextlib
import json
import os
import subprocess
import sys
import threading
@@ -53,7 +54,7 @@ class StepExecutor:
"""Phase 디렉토리 안의 step들을 순차 실행하는 하네스."""
MAX_RETRIES = 3
FEAT_MSG = "feat({phase}): step {num} - {name}"
FEAT_MSG = "feat({phase}): step {num} {name}"
CHORE_MSG = "chore({phase}): step {num} output"
TZ = timezone(timedelta(hours=9))
@@ -177,9 +178,7 @@ class StepExecutor:
sections = []
agents_md = ROOT / "AGENTS.md"
if agents_md.exists():
sections.append(
f"## 프로젝트 규칙 (AGENTS.md)\n\n{agents_md.read_text(encoding='utf-8')}"
)
sections.append(f"## 프로젝트 규칙 (AGENTS.md)\n\n{agents_md.read_text(encoding='utf-8')}")
docs_dir = ROOT / "docs"
if docs_dir.is_dir():
for doc in sorted(docs_dir.glob("*.md")):
@@ -199,6 +198,9 @@ class StepExecutor:
def _build_preamble(self, guardrails: str, step_context: str,
prev_error: Optional[str] = None) -> str:
commit_example = self.FEAT_MSG.format(
phase=self._phase_name, num="N", name="<step-name>"
)
retry_section = ""
if prev_error:
retry_section = (
@@ -218,7 +220,8 @@ class StepExecutor:
f" - AC 통과 → \"completed\" + \"summary\" 필드에 이 step의 산출물을 한 줄로 요약\n"
f" - {self.MAX_RETRIES}회 수정 시도 후에도 실패 → \"error\" + \"error_message\" 기록\n"
f" - 사용자 개입이 필요한 경우 (API 키, 인증, 수동 설정 등) → \"blocked\" + \"blocked_reason\" 기록 후 즉시 중단\n"
f"6. 변경사항은 워킹 트리에 남겨라. step 완료 후 커밋은 execute.py가 정리한다.\n\n---\n\n"
f"6. 모든 변경사항을 커밋하라:\n"
f" {commit_example}\n\n---\n\n"
)
# --- Codex 호출 ---
@@ -232,14 +235,9 @@ class StepExecutor:
sys.exit(1)
prompt = preamble + step_file.read_text(encoding="utf-8")
last_message_path = self._phase_dir / f"step{step_num}-last-message.txt"
result = subprocess.run(
["codex", "exec", "--full-auto", "--json", "-C", self._root, "-o", str(last_message_path)],
cwd=self._root,
input=prompt,
capture_output=True,
text=True,
timeout=1800,
["codex", "exec", "--dangerously-bypass-approvals-and-sandbox", "--json", prompt],
cwd=self._root, capture_output=True, text=True, timeout=1800,
)
if result.returncode != 0:
@@ -247,14 +245,9 @@ class StepExecutor:
if result.stderr:
print(f" stderr: {result.stderr[:500]}")
final_message = None
if last_message_path.exists():
final_message = last_message_path.read_text(encoding="utf-8")
output = {
"step": step_num, "name": step_name,
"exitCode": result.returncode,
"finalMessage": final_message,
"stdout": result.stdout, "stderr": result.stderr,
}
out_path = self._phase_dir / f"step{step_num}-output.json"