feat(my-deepagent): v0.3 PR #9 — workflow optionization + user dir wiring
Workflow engine 을 주력에서 "옵션" 으로 격하: 사용자가 명시적
`/workflow <name>` 호출 시만 활성. 대신 `<data_dir>/personas/` 와
`<data_dir>/workflows/` 에 YAML 파일을 떨궈 자신만의 persona·workflow 를
등록할 수 있게 함 (seed override 가능).
핵심 동작:
- `ensure_user_dirs_initialized(config)` — 두 사용자 디렉터리 `mkdir -p`,
idempotent. 매 REPL 시작 시 호출.
- `load_combined_personas(config, seed_dir)` — seed (strict) + user
(best-effort per-file skip) merge. Dedupe key `(name, version)`,
user-overrides-seed. Broken user YAML 1개 가 REPL 죽이지 못함.
- `load_combined_workflows(config, seed_dir)` — workflow 도 동일.
데이터·라이브러리:
- `user_dirs.py` (신규): `user_personas_dir`, `user_workflows_dir`,
`ensure_user_dirs_initialized`, `load_combined_personas`,
`load_combined_workflows`, `_safe_load_personas`, `_safe_load_workflows`.
REPL 통합 (`cli/interactive.py`):
- `InteractiveSession(..., workflows=...)` 시그니처 확장.
- `_interactive_loop_async` 가 user dir bootstrap + combined load 사용.
- 신규 슬래시 4개:
- `/personas` — 로드된 persona 목록 (현재 활성 표시)
- `/workflows` — 로드된 workflow 템플릿 목록 (phase/role 개수, 파일명)
- `/workflow <name>` — `mydeepagent run` 명령 안내 (현재 백그라운드 invoke
는 안내 메시지만; 실제 kick-off 는 별도 PR 또는 `mydeepagent run` CLI)
- `/binding show` — 각 workflow 의 role 별 required_capabilities 표시
- `_register_workflow_slash` 의 복잡도(C901) 회피를 위해 print 헬퍼
(`_print_personas` 등) 를 module-level 로 추출.
테스트 (`tests/integration/test_user_dirs.py`, 10 케이스):
- 부트스트랩 idempotency
- persona seed-only / seed+user / user-overrides-seed / malformed-user-skip
- workflow 동일 4종
- 빈 user 디렉터리 처리
게이트:
- ruff check / format --check / mypy: PASS
- pytest -q --ignore=tests/integration/test_e2e_workflow.py
--ignore=tests/integration/test_openrouter_smoke.py: 685 passed (10 신규 포함)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2,6 +2,36 @@
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Added
|
||||
- **v0.3 PR #9 — Workflow 옵션화 + user 디렉터리 wiring**. Workflow engine 은
|
||||
주력이 아니라 "옵션" 으로 격하 (사용자가 명시적 `/workflow <name>` 호출 시만
|
||||
활성). 대신 사용자가 `<data_dir>/personas/` 와 `<data_dir>/workflows/` 에
|
||||
YAML 파일을 떨궈 자신만의 persona·workflow 를 등록할 수 있게 함.
|
||||
- `user_dirs.py` (신규):
|
||||
- `user_personas_dir(config)`, `user_workflows_dir(config)` — 경로 헬퍼.
|
||||
- `ensure_user_dirs_initialized(config)` — `mkdir -p`, idempotent.
|
||||
- `load_combined_personas(config, seed_dir)` — seed (strict) + user
|
||||
(best-effort per-file skip on malformed) merge. Dedupe key
|
||||
`(name, version)`, user-overrides-seed. Broken user YAML 1개 가 REPL
|
||||
을 죽이지 못함.
|
||||
- `load_combined_workflows(config, seed_dir)` — workflow 도 동일.
|
||||
- `cli/interactive.py`:
|
||||
- `InteractiveSession(..., workflows=...)` 시그니처 확장 — 세션은 로드된
|
||||
workflow 리스트를 기억.
|
||||
- `_interactive_loop_async` 가 `ensure_user_dirs_initialized` 호출 +
|
||||
`load_combined_personas` / `load_combined_workflows` 사용.
|
||||
- 신규 슬래시 4개:
|
||||
- `/personas` — 모든 로드된 persona 목록 (현재 활성 표시)
|
||||
- `/workflows` — 모든 로드된 workflow 템플릿 목록 (phase/role 개수, 파일명)
|
||||
- `/workflow <name[@version]>` — `mydeepagent run` 명령으로 진행하라는
|
||||
안내 (실제 백그라운드 invoke 은 별도 PR — 현재는 안내만 제공)
|
||||
- `/binding show` — 각 workflow 의 role 별 required_capabilities 표시
|
||||
- `tests/integration/test_user_dirs.py` (신규, 10 케이스):
|
||||
- 부트스트랩 idempotency
|
||||
- seed-only / seed+user / user-overrides-seed / malformed-user-skip (persona)
|
||||
- workflow 동일 4종
|
||||
- 빈 user 디렉터리 처리
|
||||
|
||||
### Added
|
||||
- **v0.3 PR #8 — Conversation-centric Web GUI (`/conversation.html`)**.
|
||||
Workflow run 페이지는 archive 로 격하; 사용자가 처음 보는 화면은 chat-style
|
||||
|
||||
Reference in New Issue
Block a user