# Milestone: Workbench Shell and Optional IOP Composition

## 위치

- Roadmap: `agent-roadmap/ROADMAP.md`
- Phase: `agent-roadmap/phase/project-workspace-management-ux/PHASE.md`

## 목표

NomadCode Flutter 앱을 상단 titlebar와 우측 icon rail이 만드는 ㄱ자 workbench shell로 정리하고, rail item 선택에 따라 중앙 content가 바뀌는 구조를 만든다. IOP 관리는 optional feature composition으로 두어 포함 빌드에서는 IOP의 native Flutter 관리 UI가 그대로 중앙 content에 들어오고, 기본 빌드에서는 IOP 의존성 없이 NomadCode가 독립적으로 빌드되어야 한다.

## 상태

[계획]

## 구현 잠금

- 상태: 해제
- 결정 필요: 없음

## 범위

- NomadCode desktop/workbench shell의 상단 titlebar + 우측 icon rail + center content 구조
- Agent, Workflow, IOP 관리, Web Context, Settings 같은 도메인 rail item 선택과 중앙 content 전환
- 공통 agent shell package를 NomadCode agent와 IOP agent capability가 함께 사용할 수 있는 조립 경계
- IOP 포함 빌드와 IOP 제외 기본 빌드를 분리하는 optional composition package/app 경계
- IOP 관리 페이지가 IOP repository의 embeddable console package를 native Flutter widget으로 그대로 삽입하는 구조
- NomadCode가 독립 제품으로 움직일 때 IOP feature import 없이 빌드 가능한 구조

## 기능

### Epic: [workbench-shell] NomadCode right-rail workbench

NomadCode는 여러 도메인 관리 화면을 우측 icon rail과 중앙 content host로 전환하는 제품 shell을 소유한다.

- [ ] [titlebar] NomadCode shell은 상단 titlebar 영역을 제공하고, 앱/워크스페이스/현재 컨텍스트 상태를 이 영역에서 표현한다.
- [ ] [right-rail] NomadCode shell은 VS Code activity bar처럼 아이콘만 있는 우측 rail을 제공한다.
- [ ] [center-content] 우측 rail item 선택에 따라 중앙 content가 Agent, Workflow, IOP 관리, Web Context, Settings 등으로 전환된다.
- [ ] [layout-shape] 상단 titlebar와 우측 rail이 ㄱ자 구조를 만들고, 중앙 content는 host 도메인 화면을 침범 없이 표시한다. 검증: narrow/wide layout에서 titlebar, rail, center content가 겹치지 않는다.

### Epic: [agent-surface] Shared agent shell composition

채팅형 agent shell은 NomadCode와 IOP가 함께 쓰는 공통 package로 두고, 각 제품은 capability pack만 등록한다.

- [ ] [agent-shell-package] 메시지, tool call, 승인 UI, capability registry를 포함한 공통 agent shell package를 NomadCode 제품 shell에서 사용할 수 있다.
- [ ] [nomad-agent] NomadCode agent capability는 WebView 화면 관찰/조작, workflow/task/workspace, project context 같은 NomadCode 책임 범위만 제공한다.
- [ ] [iop-agent-slot] IOP 포함 빌드는 같은 agent shell registry에 IOP agent capability pack을 추가 등록할 수 있다.

### Epic: [optional-iop] Optional IOP feature composition

IOP 관리는 NomadCode default app에 직접 박지 않고 별도 composition layer로 격리한다.

- [ ] [default-build] 기본 `apps/client` 빌드는 IOP package를 import하지 않고 NomadCode 기능만으로 빌드된다. 검증: IOP package가 없는 환경에서도 기본 client build/analyze가 실패하지 않는다.
- [ ] [iop-build] IOP 포함 빌드는 별도 app/flavor/composition package에서 IOP console package를 import하고 우측 rail의 IOP item에 연결한다.
- [ ] [feature-adapter] `nomadcode_iop_feature` 또는 동등한 adapter는 NomadCode feature registry와 IOP console public API 사이만 연결한다.
- [ ] [dependency-boundary] IOP 의존 import는 optional composition layer에만 존재하고 NomadCode core shell/domain package로 새지 않는다. 검증: default app dependency graph에서 IOP package가 제외된다.

### Epic: [iop-embed] Native Flutter IOP management embed

NomadCode의 IOP 관리 탭은 IOP에서 사용하는 화면을 webview나 별도 앱이 아니라 native Flutter widget으로 중앙 content에 삽입한다.

- [ ] [iop-center-page] 우측 rail의 IOP item 선택 시 중앙 content에 IOP embeddable console이 표시된다.
- [ ] [same-ui] NomadCode에 포함된 IOP 관리 화면과 IOP standalone 앱의 관리 화면은 같은 IOP console package를 사용한다.
- [ ] [host-config] NomadCode는 IOP endpoint/auth/token reference/theme/navigation callback을 주입하고 IOP package 내부 state와 NomadCode 제품 state를 느슨하게 연결한다.
- [ ] [remove-cleanly] IOP feature를 제거해도 NomadCode Agent, Workflow, Web Context, Settings rail item과 중앙 content 전환은 유지된다.

## 완료 리뷰

- 상태: 없음
- 요청일: 없음
- 완료 근거: 모든 기능 Task와 Task 안에 명시된 검증이 아직 충족되지 않았다.
- 리뷰 필요:
  - [ ] 사용자가 완료 결과를 확인했다
  - [ ] archive 이동을 승인했다
- 리뷰 코멘트: 없음

## 범위 제외

- IOP 관리 UI 자체 구현과 IOP Control Plane/Edge/Node 운영 책임
- IOP 내부 모델 라우팅, adapter/target 실행 정책, runtime 최적화 구현
- NomadCode default app에 IOP package를 직접 의존시키는 구조
- 런타임 동적 plugin framework 도입
- WebView를 통해 IOP 화면을 띄우는 대체 구현

## 작업 컨텍스트

- 관련 경로: `apps/client/`, `packages/contracts/`, `services/core/`
- 외부 관련 경로: `../iop/apps/client/`, `../iop/packages/`
- 표준선(선택): NomadCode shell은 상단 titlebar + 우측 icon rail + center content 구조를 소유한다.
- 표준선(선택): IOP 관리는 optional composition layer에서만 import하고, default build는 IOP 없이 빌드 가능해야 한다.
- 표준선(선택): Agent shell은 공통 package, NomadCode/IOP는 각각 capability pack으로 조립한다.
- 선행 작업: Client Integration Standardization, Project Workspace Management UX, IOP Embeddable Console Workbench
- 후속 작업: 실제 desktop/mobile project workspace 화면 구현, workflow/iop 관리 탭별 세부 content 구현
- 확인 필요: 후속 구현 계획에서 app/flavor/package 중 어떤 optional composition 방식을 택할지 확정한다.
