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

2.1 KiB

domain last_rule_review_commit last_rule_updated_at
widgets 09080ca7f6 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을 위젯 내부에서 자동 승인하거나 실행하지 않는다.