agent-shell/agent-ops/rules/project/domain/widgets/rules.md
toki a43a9f66fa chore(agent-ops): agent-ops 운영 인프라와 진입 파일을 도입한다
agent-ops 공통 규칙/스킬/스크립트, 진입 파일(CLAUDE.md, GEMINI.md 등),
AI 도구별 ignore 정책을 추가해 워크스페이스 공통 운영 체계를 적용한다.
2026-06-02 21:48:27 +09:00

45 lines
2.1 KiB
Markdown

---
domain: widgets
last_rule_review_commit: 09080ca7f67c07b5b9227de78ca11c6d6018c13f
last_rule_updated_at: 2026-05-31
---
# widgets
## 목적 / 책임
AgentShell을 구성하는 embeddable Flutter UI primitives를 제공한다. 메시지 목록, composer, tool call card, approval prompt를 host 앱의 workbench layout 안에 자연스럽게 들어갈 수 있는 위젯으로 유지한다.
## 포함 경로
- `lib/src/widgets/` — agent shell의 Flutter widget 구현을 둔다.
## 제외 경로
- `lib/src/domain/` — UI와 무관한 계약과 상태 모델은 domain-model 도메인이다.
- application bootstrap — `runApp`, `MaterialApp`, Firebase/SystemChrome 초기화는 host 앱 책임이다.
## 주요 구성 요소
- `AgentShell` — message list와 composer를 조립하는 embeddable surface.
- `AgentComposer` — 사용자 입력과 submit callback을 제공한다.
- `AgentMessageList` — agent/user/tool 메시지를 표시한다.
- `ToolCallCard` — tool call 상태, arguments, result/error, approval prompt를 표시한다.
- `ApprovalPrompt` — approve/reject action을 host callback으로 전달한다.
## 유지할 패턴
- 위젯은 host theme를 사용하고 자체 app chrome을 만들지 않는다.
- rail, tab, center content, modal 같은 다양한 host container에 들어갈 수 있도록 크기와 padding을 보수적으로 둔다.
- action은 callback으로 host에 전달하고, backend/transport를 직접 호출하지 않는다.
## 다른 도메인과의 경계
- **domain-model**: widgets는 domain model을 표시하고 사용자 action을 callback으로 전달한다. 상태 계약 자체를 이 도메인에서 새로 정의하지 않는다.
- **host app**: host app은 navigation, persistence, runtime connection, auth, capability registry 조립을 소유한다.
## 금지 사항
- `MaterialApp`, `Navigator` root, global theme, platform bootstrap을 widgets 안에 만들지 않는다.
- IOP/NomadCode 전용 layout이나 WebView 조작 UI를 직접 넣지 않는다.
- tool approval을 위젯 내부에서 자동 승인하거나 실행하지 않는다.