--- domain: domain-model last_rule_review_commit: 09080ca7f67c07b5b9227de78ca11c6d6018c13f last_rule_updated_at: 2026-05-31 --- # domain-model ## 목적 / 책임 Agent interaction surface의 제품 비종속 계약을 정의한다. 메시지, tool call, command, event, capability, context 모델을 host 앱과 capability pack이 공유할 수 있게 유지한다. ## 포함 경로 - `lib/src/domain/` — agent shell의 순수 Dart 계약과 상태 모델을 둔다. - `lib/agent_shell.dart` — public export entrypoint로 domain model을 외부에 노출한다. ## 제외 경로 - `lib/src/widgets/` — Flutter UI rendering 책임은 widgets 도메인이다. - 제품별 IOP/NomadCode capability 구현 — 각 제품 repo 또는 optional composition package가 소유한다. ## 주요 구성 요소 - `AgentCapability` — host가 등록하는 agent capability interface. - `AgentCommand` — 사용자 입력 또는 capability 호출 요청 모델. - `AgentEvent` — agent runtime에서 UI로 전달되는 event envelope. - `AgentMessage` — 대화 메시지 모델. - `AgentToolCall` — tool call 상태와 승인 필요 여부를 표현한다. ## 유지할 패턴 - 제품명, backend endpoint, 인증, transport 세부를 domain model에 넣지 않는다. - `Map` 확장은 host-specific payload를 담는 최소 탈출구로만 사용한다. - public model을 추가하면 `lib/agent_shell.dart` export를 함께 갱신한다. ## 다른 도메인과의 경계 - **widgets**: domain-model은 상태와 계약만 정의하고, layout/rendering/interaction visual은 widgets가 담당한다. - **product capability pack**: domain-model은 interface를 제공하고, IOP/NomadCode의 실제 capability 구현은 외부 package가 담당한다. ## 금지 사항 - `package:flutter/material.dart` 같은 UI dependency를 domain model에 추가하지 않는다. - IOP, NomadCode, WebView, Control Plane, workflow 전용 타입을 import하지 않는다. - transport, token, endpoint, persistence 정책을 domain model에 고정하지 않는다.