feat(my-deepagent): v0.4 — workflow generator UI + hot-reload + UX polish

브라우저에서 YAML 안 쓰고도 새 워크플로우 템플릿 만들기 + 즉시 등록.
+ /new.html / index.html / new-workflow.html / runs.html / conversation.html
의 nav·copy·empty-state 정비.

A. /new.html UX:
- 제목 "새 Run" → "워크플로우 실행 (고급)"
- 상단 info-box: "자유 대화는 여기가 아닙니다 → 메인 페이지"
- 모든 필드에 한 줄 hint
- Persona 오버라이드 <details> 접힘

B. Nav 재정렬 (5 페이지):
- "대화" nav-primary, 나머지 nav-secondary (작고 dim)

C. 메인 안내 + CSS:
- 메인 / 에 "👋 my-deepagent" info-box 추가
- .info-box / .nav-primary / .nav-secondary / .wf-* 신규 스타일

D. Workflow hot-reload:
- api/deps.py get_workflows 가 매 요청 mtime 튜플 검사 후 변경 시 reload
- lifespan 도 user dir 포함하도록 _load_workflows_combined

E. Workflow generator:
- POST /api/workflows: CreateWorkflowRequest → WorkflowTemplate validate →
  <data_dir>/workflows/<name>@<version>.yaml 저장.  중복 409, validation 422.
- static/new-workflow.html: 기본 정보 / Roles / Phases / YAML preview
- app.js bootstrapWorkflowGenerator: capability chip 토글, role select 동적,
  실시간 YAML preview, XSS 정책 유지

테스트 (test_workflow_generator.py, 7 신규):
- 페이지 200 + 마크업
- POST happy / 422 (empty roles) / 422 (unknown role) / 409 (dup)
- GET hot-reload after POST
- GET hot-reload after external file drop

게이트:
- ruff / format / mypy: PASS (142 source files)
- pytest -q --ignore=tests/integration/test_e2e_workflow.py
  --ignore=tests/integration/test_openrouter_smoke.py: 709 passed (+7 신규)
- 라이브 smoke: / / new.html / new-workflow.html 모두 200, screenshot OK

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
chungyeong
2026-05-18 00:38:46 +09:00
parent 40ef833ad3
commit 6d371afadd
14 changed files with 1007 additions and 52 deletions

View File

@@ -2,6 +2,57 @@
## [Unreleased]
### Added
- **v0.4 — Workflow generator UI + hot-reload + UX polish**. 사용자가 직접
YAML 을 작성하지 않고도 브라우저에서 새 워크플로우 템플릿을 만들고 즉시
실행할 수 있도록 함. 메인 페이지 / new.html / runs.html / new-workflow.html
의 nav · copy · empty-state 도 동시에 정비.
- **A — `/new.html` UX 패치** (HTML/CSS only):
- 제목 "새 Run 시작" → "워크플로우 실행 (고급 기능)".
- 상단 `info-box`: "자유 대화는 여기가 아닙니다 → 메인 페이지" 안내 +
"+ 템플릿 만들기" 링크.
- 모든 필드에 한 줄 hint (예: `repo 절대경로 — 작업할 git 저장소 위치`).
- Persona 오버라이드를 `<details>` 접힘 상태로 → 첫 사용자가 압도되지
않도록.
- **B — nav 재정렬** (`/`, `/runs.html`, `/new.html`, `/run.html`,
`/conversation.html`):
- "대화" 가 `nav-primary` (큰 폰트 + 진한 색).
- "Runs" / "워크플로우 실행" / "+ 템플릿 만들기" 는 `nav-secondary`
(작은 폰트 + 65% opacity, hover 시 100%).
- **C — 메인 페이지 안내** + CSS:
- 메인 `/``info-box` 추가 ("👋 my-deepagent — OpenRouter 가성비 모델로
돌아가는 Claude Code 스타일 멀티턴 에이전트").
- `style.css``.info-box`, `.nav-primary`/`.nav-secondary`,
`.wf-row-card`, `.wf-chip` 등 신규 스타일 추가.
- **D — Workflow hot-reload**:
- `api/deps.py``get_workflows` 가 매 요청 시
`_workflow_dir_signature(config)` (seed + user 디렉터리의 mtime 튜플)
을 계산해 cached signature 와 다르면 `load_combined_workflows` 재호출.
파일 watcher / inotify 없이 stat 만으로 충분 (디렉터리가 작음).
- lifespan 의 `_load_seed_workflows``_load_workflows_combined`
교체해 user dir 첫 부팅 시도 자동 로드.
- **E — Workflow generator UI**:
- **API**: `POST /api/workflows` 신설. Body = `CreateWorkflowRequest`
pydantic (name / version / description / roles / phases / default_gates /
max_total_budget_usd). `WorkflowTemplate.model_validate` 로 strict
검증 → 실패 시 422 (loc:msg 포맷으로 평탄화). 성공 시
`<data_dir>/workflows/<name>@<version>.yaml` 에 YAML 저장 (`yaml.safe_dump
allow_unicode=True, sort_keys=False`). 중복 (name, version) 은 409.
- **HTML**: `static/new-workflow.html` (신규). 기본 정보 → Roles →
Phases → YAML 미리보기 → 저장 버튼.
- **JS**: `app.js``bootstrapWorkflowGenerator``WF_STATE` 추가.
Role 별 capability 를 chip 형태로 클릭 토글, Phase 의 role 셀렉트는
현재 Role 목록에서 동적으로 생성. 실시간 YAML preview. XSS 정책
유지 (모든 사용자 입력은 textContent).
- **신규 테스트** (`tests/integration/test_workflow_generator.py`, 7 케이스):
- `/new-workflow.html` 200 + 마크업
- POST happy path → yaml 파일 영속 + path / name / version 검증
- POST roles=[] → 422
- POST phase.role 미존재 → 422 + 메시지에 role id 포함
- POST duplicate (name, version) → 409
- GET hot-reload: POST 후 새 항목이 GET 응답에 등장
- GET hot-reload: 외부에서 YAML 파일 직접 떨궈도 mtime 으로 감지
### Changed
- **v0.3 plan-conformance fixes** — 1차 구현 후 plan-v0.3 와 대조해 발견된 18건
누락/명세 위반을 보강. 자기 리뷰 3 라운드 (누락·미완 / 오류·엣지케이스 /