nomadcode/agent-ops/rules/domain/web/project-workspace/rules.md

46 lines
2.2 KiB
Markdown

# project-workspace
## 목적 / 책임
NomadCode에서 관리할 workspace/project 목록, 선택 상태, active workspace tab, 프로젝트 상세 동작을 담당한다. 현재 프로젝트 데이터와 action은 mock/placeholder 상태다.
## 포함 경로
- `src/routes/ProjectsPage.tsx` : Projects page composition
- `src/components/projects/` : project card, detail, workspace tabs
- `src/stores/projectStore.ts` : 선택 프로젝트와 active workspace 상태
- `src/api/projects.ts` : project 타입, mock list, workspace action placeholder
## 제외 경로
- `src/stores/agentStore.ts` : agent 대화와 context 상태
- `src/api/tasks.ts` : task API는 backend-integration
- `src/components/common/` : ui-shell common primitive
## 주요 구성 요소
- `Project` : workspace, repo, Plane, Outline, default agent metadata
- `mockProjects` : 현재 project inventory seed
- `ProjectCard` : project 선택과 주요 action entry
- `ProjectDetail` : 선택 project metadata 표시
- `WorkspaceTabs` : active workspace tab 표시와 close action
- `useProjectStore` : selected project와 active workspace ids 관리
## 유지할 패턴
- project 선택 상태는 `useProjectStore`를 원천으로 사용한다.
- 외부 링크 열기와 placeholder action은 API/helper 함수로 격리한다.
- 실제 metadata API가 생기면 `mockProjects`를 Query 기반 fetch로 대체하고 store에는 UI 선택 상태만 남긴다.
- project action이 agent message를 만들 때는 `useAgentStore.sendMessage` 경계를 통해 요청한다.
## 다른 도메인과의 경계
- **agent-workspace**: project action이 agent 요청을 만들 수 있지만 agent message 생성 규칙은 agent-workspace가 유지한다.
- **backend-integration**: task 생성과 서버 project metadata 연동은 backend-integration에 둔다.
- **ui-shell**: workspace tab과 project detail의 내부 동작은 project-workspace, 전체 route/layout은 ui-shell.
## 금지 사항
- project mock 데이터를 여러 파일에 중복 선언하지 않는다.
- `window.open` 같은 브라우저 side effect를 UI 깊은 곳에 흩뿌리지 않는다.
- workspace tab 상태와 selected project 상태가 서로 불일치하도록 업데이트하지 않는다.