Step 9 v4_all_judgments[] now exposes per-candidate min_height_px from catalog frame_contracts.visual_hints.min_height_px (None when contract unregistered). SlideCanvas pendingLayout zones render a red ring + 'min H Npx' badge when zone height falls below the active frame's threshold. Visual hint only; resize clamp (minSize=0.05) unchanged. 5 axes (single commit per Stage 5 plan): - u1 backend: src/phase_z2_pipeline.py — Step 9 builder adds min_height_px via single get_contract(c.template_id) lookup; reuses _contract for catalog_registered (no double-lookup). - u2 type: Front/client/src/types/designAgent.ts — FrameCandidate gains optional minHeightPx?: number. - u3 mapper: Front/client/src/services/designAgentApi.ts — maps snake-case min_height_px → camelCase minHeightPx on v4_all_judgments path; v4_candidates fallback remains undefined (graceful). - u4 active-frame lookup: Front/client/src/components/SlideCanvas.tsx — activeFrameId = overrideFrameId ?? defaultFrameId; activeCandidate via region.frame_candidates.find. - u5 hint render: Front/client/src/components/SlideCanvas.tsx — zoneHeightPx = height * SLIDE_H (logical px, no double-apply); compare against activeCandidate.minHeightPx in pendingLayout mode only; red border + badge when below. Tests: 5/5 pass in tests/test_phase_z2_step9_v4_all_judgments_min_height.py (source-string + catalog-shape guards + None propagation, registered and unregistered template_ids). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Design Agent Frontend
React + Vite + TypeScript frontend.
위치
Front/— 이 폴더- 원본 작업 위치 =
D:\ad-hoc\kei\design_agent_front\design-agent\(로컬 dev)
실행
cd Front/
pnpm install
pnpm dev
http://localhost:3000 에서 확인. DESIGN_AGENT_ROOT env 로 backend 경로 지정 가능.
구조
Front/
├── client/ React frontend (Vite root)
│ └── src/
│ ├── pages/
│ ├── components/
│ ├── services/
│ └── ...
├── server/ production express
├── vite.config.ts dev plugin + backend 연결
└── ...
Backend 연결 (vite.config.ts)
Vite dev plugin 이 다음 endpoint 등록 :
| Endpoint | 동작 |
|---|---|
POST /api/run |
MDX + overrides → backend pipeline spawn → run_id 반환 |
GET /api/sample-mdx?mdx=... |
sample MDX serve |
GET /frame-preview/{n} |
frame thumbnail |
GET /data/runs/{run_id}/{path} |
pipeline 산출물 serve |