Files
chungyeong 1fe59d16ca chore: my-deepagent-seed (BudgetTracker PoC + v0.1.0 seed assets)
Pre-flight assets prepared on the main machine before the new-machine
rewrite of my-deepagent in Python.

- poc/: BudgetTracker + CostMiddleware + MockChatModel PoC.
  Validates wrap_model_call pattern, SQLite WAL + ON CONFLICT upsert,
  per-scope cap accounting. 5/5 pytest PASS in isolated uv venv.
- schemas/: 10 personas (Anthropic Sonnet/Opus/Haiku + DeepSeek mix),
  3 workflows (spec-and-review, bug-fix-with-reproduction,
  code-investigation), 4 artifact JSON Schemas (dev/spec@1,
  dev/phase-plan@1, dev/review-finding-batch@1, common/final-report@1).
- schemas/validate.py: pydantic + Draft202012 cross-validation.
  18/18 assets verified.
- README.md: new-machine bootstrap instructions.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 19:39:37 +09:00

7.9 KiB

my-deepagent v0.1.0 Seed Assets

이 디렉토리는 새 머신(/Users/1111615/Desktop/Repository/my-deepagent)에서 v0.1.0 개발을 시작할 때 사용하는 자산 묶음입니다. 메인 머신에서 실제 검증 완료 (deepagents 0.6.1 API inspect, OpenRouter ChatOpenAI 인스턴스화, BudgetTracker PoC pytest 5/5 PASS, 시드 yaml/json 18개 validate.py 통과).

구성

my-deepagent-seed/
├── README.md                           # 이 문서
├── poc/                                # BudgetTracker + CostMiddleware PoC (검증 완료)
│   ├── pyproject.toml
│   ├── src/poc/{budget,pricing,middleware,mock_model}.py
│   └── tests/test_budget.py            # 5/5 PASSED
└── schemas/                            # v0.1.0 시드 자산 (validate.py 통과)
    ├── validate.py
    ├── personas/                       # 10개 yaml
    │   ├── default-interactive@1.yaml
    │   ├── openrouter-claude-spec-writer@1.yaml
    │   ├── openrouter-claude-phase-planner@1.yaml
    │   ├── openrouter-claude-code-editor@1.yaml
    │   ├── openrouter-claude-code-reviewer@1.yaml
    │   ├── openrouter-claude-security-auditor@1.yaml
    │   ├── openrouter-deepseek-verifier@1.yaml
    │   ├── openrouter-claude-debugger@1.yaml
    │   ├── openrouter-deepseek-log-analyzer@1.yaml
    │   └── openrouter-claude-architect@1.yaml
    ├── workflows/                      # 3개 yaml
    │   ├── spec-and-review@1.yaml
    │   ├── bug-fix-with-reproduction@1.yaml
    │   └── code-investigation@1.yaml
    └── artifacts/                      # 4개 JSON Schema 2020-12
        ├── dev/{spec,phase-plan,review-finding-batch}@1.json
        └── common/final-report@1.json

새 머신으로 옮기는 방법

이 디렉토리는 메인 머신 워크트리 안에 있습니다. 새 머신에서 사용하려면:

옵션 A: tar.zst 압축 후 수동 복사 (가장 단순)

# 메인 머신에서
cd /Users/chungyeong/Desktop/Dev/dev-puppeteer/.claude/worktrees/sad-satoshi-d938d4
tar --zstd -cf /tmp/my-deepagent-seed.tar.zst my-deepagent-seed/
# AirDrop / scp / iCloud Drive 등으로 새 머신에 복사
# 새 머신에서
cd /Users/1111615/Desktop/Repository
tar --zstd -xf my-deepagent-seed.tar.zst
mv my-deepagent-seed my-deepagent   # 이름 변경

옵션 B: Git push/clone

# 메인 머신에서 (워크트리에 commit 후)
git add my-deepagent-seed/
git commit -m "feat: my-deepagent v0.1.0 seed assets"
git push origin claude/sad-satoshi-d938d4
# 새 머신에서
git clone <repo-url>
# my-deepagent-seed/ 디렉토리만 추출 후 새 위치로 이동

옵션 C: 클립보드 (작은 파일은)

각 yaml/json/py를 채팅에서 복사 → 새 머신 에디터에 paste.

새 머신 시작 절차 (Step 0)

cd /Users/1111615/Desktop/Repository/my-deepagent

# 1. uv 설치 (없으면)
curl -LsSf https://astral.sh/uv/install.sh | sh

# 2. Python 프로젝트 초기화
uv init --no-readme

# 3. 의존성 추가 (정확한 1.x 버전)
uv add \
  'deepagents>=0.6.1,<0.7.0' \
  'langchain>=1.3.0,<2.0.0' \
  'langchain-core>=1.4.0,<2.0.0' \
  'langchain-openai>=1.2.1,<2.0.0' \
  'langgraph>=1.2.0' \
  'langgraph-checkpoint-sqlite>=3.1.0' \
  'openai>=2.26.0' \
  'pydantic>=2.9' \
  'pydantic-settings>=2.6' \
  'pyyaml>=6.0' \
  'jsonschema>=4.23' \
  'aiosqlite>=0.20' \
  'alembic>=1.14' \
  'typer>=0.14' \
  'prompt-toolkit>=3.0' \
  'rich>=13.9' \
  'structlog>=24.4' \
  'platformdirs>=4.9' \
  'keyring>=25.7' \
  'zstandard>=0.23' \
  'httpx>=0.28'

uv add --dev 'pytest>=8.3' 'pytest-asyncio>=0.24' 'pytest-httpx>=0.34' 'ruff>=0.8' 'mypy>=1.13' 'pre-commit>=4.0'

# 4. 시드 자산을 docs/schemas/ 로 복사
mkdir -p docs/schemas
cp -r my-deepagent-seed/schemas/personas docs/schemas/
cp -r my-deepagent-seed/schemas/workflows docs/schemas/
cp -r my-deepagent-seed/schemas/artifacts docs/schemas/

# 5. PoC 코드를 참조 (Step 5/8 구현 시 활용)
# 직접 복사하지 말고 패턴/구조만 참조해 src/my_deepagent/ 아래로 재작성

# 6. plan-v2.0 본문을 docs/plan.md로 저장
# (채팅의 plan v2.0 본문을 통째 복사 + 아래 §10 패치 반영)

plan v2.0 §10 middleware 패턴 정정 (필수)

채팅의 plan v2.0 §10 (DeepAgent Session Wrapper)에 적힌 cost_middleware(run, phase_def) 함수형은 잘못된 패턴입니다. PoC 검증 결과 langchain 1.x의 정확한 패턴은:

from langchain.agents.middleware import AgentMiddleware


class CostMiddleware(AgentMiddleware):
    """Track LLM cost per call. Sub-class pattern (not decorator)."""

    def __init__(
        self,
        tracker: BudgetTracker,
        run_id: UUID | None,
        persona_name: str,
        model_name: str,
    ) -> None:
        super().__init__()
        self.tracker = tracker
        self.run_id = run_id
        self.persona_name = persona_name
        self.model_name = model_name

    async def awrap_model_call(self, request, handler):
        estimated = compute_cost(self.model_name, 1000, 2000)  # worst-case estimate
        await self.tracker.assert_can_call(self.run_id, self.persona_name, estimated)
        response = await handler(request)
        usage = getattr(response, "usage_metadata", None) or {}
        actual = compute_cost(
            self.model_name,
            usage.get("input_tokens", 0),
            usage.get("output_tokens", 0),
        )
        await self.tracker.record(self.run_id, self.persona_name, actual)
        return response

핵심:

  • AgentMiddleware subclass (decorator 아님)
  • awrap_model_call async 메서드 오버라이드 (sync 변형 없음)
  • from langchain.agents.middleware import AgentMiddleware (정확한 import)
  • create_deep_agent(..., middleware=[CostMiddleware(tracker, run_id, persona.name, persona.model)])

audit_tool_middleware, safety_middleware, fallback_middleware, phase_artifact_watcher도 동일 패턴(class subclass + async method override)으로 구현. plan v2.0 §10 코드 블록을 위 형식으로 교체.

PoC에서 검증된 핵심 사실

  1. deepagents 0.6.1: 실제 설치 성공, create_deep_agent signature 확인됨 — model/tools/system_prompt/subagents/middleware/checkpointer/interrupt_on/permissions/backend/skills/memory/response_format 등 모두 keyword args
  2. SubAgent는 TypedDict: name, description, system_prompt 필수. dict 그대로 전달 가능
  3. FilesystemPermission은 dataclass: operations / paths (절대 경로 강제, ../~ 금지) / mode
  4. LocalShellBackend: execute tool 동작용 backend. inherit_env=False 권장 (보안)
  5. OpenRouter 통합 검증: ChatOpenAI(model="...", api_key="sk-or-...", base_url="https://openrouter.ai/api/v1", max_tokens=...) 인스턴스화 성공
  6. AgentMiddleware: subclass + awrap_model_call async 패턴 (위 정정)
  7. BudgetTracker: SQLite WAL + ON CONFLICT DO UPDATE upsert로 concurrent-safe ledger 가능 (PoC 검증)

v0.1.0 6주 계획 (Step 0 ~ 16)

채팅의 plan v2.0 §25 참조. 각 Step 끝에:

uv run ruff check . && uv run ruff format --check . && uv run mypy --strict . && uv run pytest

모두 PASS → commit → 다음 Step.

모델 위임 (메모리 룰)

  • Python 구현 → sonnet 서브에이전트
  • 코드 리뷰 → opus 서브에이전트
  • 리뷰 지적 수정 → sonnet
  • 메인 스레드 (Claude Code, Opus 4.7) 는 오케스트레이션만

다음 액션 (새 머신에서)

  1. 위 "새 머신 시작 절차" 1~6 실행
  2. Claude Code 새 세션: claude
  3. 첫 메시지로 plan v2.0 본문 + 본 README의 §10 정정 패치 + "Step 0부터 진행해" 지시
  4. Step 0 (스캐폴딩) → Step 1 (core) → ... 순차 진행
  5. 각 Step에서 sonnet 서브에이전트에 실제 구현 위임 (메인 스레드는 오케스트레이션)