--- ui_doc_type: view view_id: workbench-shell status: 구현됨 frame: null source_evidence: - type: code path: apps/client/lib/src/app/nomadcode_workbench_shell.dart notes: NomadCodeWorkbenchShell, _WorkbenchTitleBar, _WorkbenchActivityRail, _AgentDockPanel, section placeholder 구현. - type: code path: apps/client/lib/src/app/nomadcode_client_app.dart notes: MaterialApp home에서 WorkspaceHomePage를 workbench shell에 mount하는 조립 근거. - type: docs path: apps/client/README.md notes: Workbench shell, Agent dock, IOP slot composition 설명. - type: docs path: README.md notes: 제품 경계의 workbench shell, Agent dock, IOP slot 설명. - type: user path: null notes: agent-ui 생성 요청. regions: - workbench-shell.titlebar - workbench-shell.center - workbench-shell.activity-rail - workbench-shell.agent-dock - workbench-shell.iop-slot --- # Workbench Shell View ID: `workbench-shell` Frame: - 없음 Status: `구현됨` ## Source Evidence | Type | Path | Notes | |------|------|-------| | code | `apps/client/lib/src/app/nomadcode_workbench_shell.dart` | NomadCodeWorkbenchShell, _WorkbenchTitleBar, _WorkbenchActivityRail, _AgentDockPanel, section placeholder 구현. | | code | `apps/client/lib/src/app/nomadcode_client_app.dart` | MaterialApp home에서 WorkspaceHomePage를 workbench shell에 mount하는 조립 근거. | | docs | `apps/client/README.md` | Workbench shell, Agent dock, IOP slot composition 설명. | | docs | `README.md` | 제품 경계의 workbench shell, Agent dock, IOP slot 설명. | | user | 없음 | agent-ui 생성 요청. | ## Purpose NomadCode Console의 최상위 작업 표면이다. 상단 titlebar, 중앙 product section, 우측 activity rail, 우측 Agent dock, optional IOP content slot을 하나의 workbench로 조립한다. ## Primary Users - NomadCode로 개발 workspace와 agent 작업 상태를 오가는 사용자 - provider console 또는 IOP slot을 함께 열어보는 운영 사용자 ## Primary Tasks - Workspace, Workflow, Terminal, Review, Web Context, Settings, IOP section 사이를 전환한다. - 우측 Agent dock을 열고 닫는다. - optional IOP content가 제공되면 IOP section에 mount한다. ## Information Priority 1. 현재 선택된 workbench section과 중앙 content 2. Agent dock 열림 상태와 우측 rail navigation 3. IOP/provider slot availability ## Regions | Region ID | Purpose | Component | Priority | Notes | |-----------|---------|-----------|----------|-------| | `workbench-shell.titlebar` | Console brand, 현재 section label 표시 | `workbench-titlebar` | high | `_WorkbenchTitleBar` 구현. | | `workbench-shell.center` | 선택된 product section content 표시 | 없음 | high | Workspace는 `WorkspaceHomePage`, 나머지 section은 placeholder 또는 slot. | | `workbench-shell.activity-rail` | Agent toggle과 section navigation | `activity-rail` | high | 우측 고정 rail. | | `workbench-shell.agent-dock` | AgentShell 기반 대화/작업 dock | `agent-dock-panel` | medium | compact width에서는 center content를 숨기고 dock을 우선 표시. | | `workbench-shell.iop-slot` | optional IOP console content mount | 없음 | medium | `iopContent`가 없으면 IOP placeholder를 표시한다. | ## Actions | Action ID | Trigger | Result | Guard | |-----------|---------|--------|-------| | `workbench-shell.select-section` | activity rail section button | 중앙 content를 선택 section으로 전환하고 Agent dock을 닫는다. | 없음 | | `workbench-shell.toggle-agent` | Agent rail button | Agent dock open/closed 상태를 전환한다. | 없음 | | `workbench-shell.mount-iop-slot` | `iopContent` widget 제공 | IOP section에 외부 IOP console content를 표시한다. | IOP package/widget은 optional boundary로 유지한다. | ## States - loading: shell 자체 loading state는 없다. - empty: section content가 아직 없으면 `_WorkbenchPlaceholder`를 표시한다. - error: shell 자체 error state는 없다. - permission-denied: view-level permission guard는 구현되어 있지 않다. ## Open Questions - 없음 ## Decision History - 2026-06-24: 구현된 Flutter workbench shell을 `구현됨` view로 등록했다.