Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
162 changes: 0 additions & 162 deletions .claude/CLAUDE.md

This file was deleted.

77 changes: 32 additions & 45 deletions docs/ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,43 +69,24 @@ src/
hook/ ← Hook 도메인 (types, constants, utils, service, server, queries, config, components/)
skill/ ← Skill/Command 도메인 (types, utils, config, service, server, queries, components/)
subagent/ ← Subagent 도메인 (config, server, queries, components/)
mcp/ ← MCP 도메인 (config, utils, service, server, queries, components/)
plugin/ ← Plugin 도메인 (config, constants, service, server, queries, components/)
file/ ← File 도메인 (config, constants, service, server, queries, components/)
memory/ ← Memory 도메인 (config, service, server, components/)
components/
ui/ ← shadcn primitives (Button, Sheet, ListItem, Inspector 등)
memory/ ← MemoryInspector
agent/ ← AgentInspector
mcp/ ← McpInspector
plugin/ ← PluginInspector
file/ ← FileInspector
board/ ← BoardLayout, EntityListPanel, EntityInspector, Add*Dialog
board/ ← BoardLayout, EntityListPanel, EntityInspector, FilesPanel, PluginsPanel
layout/ ← Sidebar, StatusBar, AppHeader
config-editor/ ← Settings 페이지 (ConfigPage, 카테고리별 설정)
files-editor/ ← 파일 트리 (FileTree, FileViewerPanel)
marketplace/ ← 마켓플레이스 (skills-tab, marketplace-page 등)
icons/ ← entity-icons, agent-logos, editor-icons
config/
entity-registry.ts ← EntityConfig<T> 타입 + 레지스트리
entities/ ← 엔티티별 config (skill, command, agent, mcp, plugin, memory, file)
hooks/ ← React Query 커스텀 훅 (use-mcp, use-plugins 등)
server/ ← Server Functions (createServerFn 기반)
skills.ts, marketplace.ts, items.ts, agents.ts
mcp-fns.ts, plugins-fns.ts, files.ts, overview.ts
claude-md.ts, config-settings.ts, memory.ts, editor.ts
config.ts, validation.ts, projects.ts, middleware/auth.ts
services/ ← 서버 사이드 서비스
config-service.ts ← 설정 파일 파싱 (스킬, 커맨드, 에이전트)
agent-file-service.ts ← AgentFile CRUD
skills-service.ts ← 스킬 설치/삭제 (skills.sh CLI)
mcp-service.ts ← MCP 서버 관리 (Claude CLI 위임)
plugin-service.ts ← 플러그인 관리
memory-service.ts ← 메모리 파일 조회
overview-service.ts ← 대시보드 개요 데이터
files-scanner.service.ts ← 파일 트리 스캔
claude-cli.ts ← Claude CLI spawn 래퍼
file-writer.ts ← 파일 쓰기
project-store.ts ← 프로젝트 경로 관리
config-settings.service.ts ← settings.json 관리
scope-management.ts ← 스코프 이동/복사
agentfiles-config.ts ← agentfiles 자체 설정
entities/ ← index.ts (등록 진입점, 모든 config를 features/에서 import)
hooks/ ← 공용 React Query 훅 (use-config 등)
server/ ← 공용 Server Functions (overview, projects, editor 등)
services/ ← 공용 서비스 (claude-cli, file-writer, project-store 등)
routes/ ← TanStack Router 라우트 (/, /marketplace, /settings)
__root.tsx ← 루트 레이아웃
index.tsx ← Dashboard (/)
Expand All @@ -114,8 +95,8 @@ src/
api/ ← API 라우트
lib/ ← 유틸리티, 상수, 엔티티 액션/아이콘 정의
shared/
types.ts ← 공유 타입·스키마 (AgentType, AgentConfig, Skill 등)
agents.ts ← agents Record (에이전트별 설정 데이터)
types.ts ← 공유 타입·스키마
agents.ts ← agents Record
messages/ ← i18n 메시지 (en/ko)
bin/cli.ts ← CLI 진입점
tests/ ← 통합/E2E 테스트
Expand Down Expand Up @@ -223,22 +204,28 @@ interface EntityConfig<T> {
v1에서 서비스를 추가하고, v2에서 AI 서비스를 추가한다.

```text
현재 Services v1+ 추가 v2 추가
┌────────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ ConfigService │ │ MarketplaceService│ │ AIService │
│ AgentFileService │ └──────────────────┘ │ ReleaseService │
│ SkillsService │ └──────────────────┘
│ HooksService │
│ McpService │
│ PluginService │
│ MemoryService │
OverviewService
FilesScannerService│
│ FileWriter │
│ Claude CLI │
│ ProjectStore │
│ ScopeManagement │
현재 Services → 위치
┌────────────────────┐
│ ConfigService │ services/
│ AgentFileService │ services/
│ SkillsService │ features/skill/
│ HooksService │ features/hook/
│ McpService │ features/mcp/
│ PluginService │ features/plugin/
│ MemoryService │ features/memory/
FilesScannerService│ features/file/
OverviewService │ services/
│ FileWriter │ services/
│ Claude CLI │ services/
│ ProjectStore │ services/
│ ScopeManagement │ services/
└────────────────────┘

v1+ 추가 v2 추가
┌──────────────────┐ ┌──────────────────┐
│ MarketplaceService│ │ AIService │
└──────────────────┘ │ ReleaseService │
└──────────────────┘
```

---
Expand Down
2 changes: 1 addition & 1 deletion docs/CONVENTIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

- 인프라(CLI spawn, 파일 I/O)와 비즈니스 로직을 같은 서비스 파일에 배치 (`claude-cli.ts`, `features/skill/service.ts` 참조)
- 별도 repository 파일로 분리하지 말 것 — 프로젝트 규모에서 과도한 추상화
- Feature directory 패턴: 도메인별 타입, 서비스, 서버 함수, 쿼리, 컴포넌트를 `src/features/{domain}/`에 co-locate (예: `features/hook/`, `features/skill/`)
- Feature directory 패턴: 도메인별 타입, 서비스, 서버 함수, 쿼리, 컴포넌트를 `src/features/{domain}/`에 co-locate. 전체 7개 도메인: `hook`, `skill`, `subagent`, `mcp`, `plugin`, `file`, `memory`

## shared/ 디렉토리 규칙

Expand Down
1 change: 1 addition & 0 deletions docs/ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ Claude Code가 자체 설정 관리 GUI를 추가하면, 그걸 쓰면 된다. a

## Shipped

- **MCP/Plugin/File/Memory feature directory 이관** (2026-03-20) — 나머지 4개 도메인을 `src/features/`로 통합. 전체 7개 엔티티 도메인 co-located 구조 완성. 통합 테스트 16개 + 복원 테스트 19개 추가. ARCHITECTURE.md 동기화.
- **Agent→Subagent 리네이밍 + feature directory 이관** (2026-03-19) — 엔티티 타입 `"agent"`→`"subagent"` 리네이밍. `src/features/subagent/`로 이관. i18n 키, board column, entity icons/actions 전면 업데이트. CONVENTIONS.md에 Agent vs Subagent 용어 규칙 추가.
- **Skill feature directory 이관** (2026-03-19) — Skill/Command 도메인을 `src/features/skill/`로 통합. utils 4개 파일 병합, config 병합, 유닛 테스트 co-locate.
- **Hook feature directory 이관 + 리스트 액션 제거** (2026-03-19) — Hook 도메인 파일을 `src/features/hook/`로 통합. 서버 Zod 스키마 중복 제거, Inspector에 EntityActionDropdown 적용. EntityListPanel에서 더보기 버튼/컨텍스트 메뉴 제거 (조작은 Inspector에서만).
Expand Down
21 changes: 9 additions & 12 deletions src/components/board/BoardLayout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,27 +41,24 @@ import {
SheetTitle,
} from "@/components/ui/sheet"
import { Switch } from "@/components/ui/switch"
import {
commandConfig,
type HookItem,
hookConfig,
mcpConfig,
memoryConfig,
skillConfig,
subagentConfig,
} from "@/config/entities"
import { getEntityConfig } from "@/config/entity-registry"
import { AddHookDialog } from "@/features/hook/components/add-hook-dialog"
import type { HookItem } from "@/features/hook/config"
import { hookConfig } from "@/features/hook/config"
import { useHooksQuery } from "@/features/hook/queries"
import type { HookScope, HooksSettings } from "@/features/hook/types"
import { getHookIcon } from "@/features/hook/utils"
import { AddMcpDialog } from "@/features/mcp/components/add-mcp-dialog"
import { mcpConfig } from "@/features/mcp/config"
import { useMcpMutations, useMcpQuery } from "@/features/mcp/queries"
import { memoryConfig } from "@/features/memory/config"
import { usePluginsQuery } from "@/features/plugin/queries"
import { commandConfig, skillConfig } from "@/features/skill/config"
import { AddSubagentDialog } from "@/features/subagent/components/add-subagent-dialog"
import { subagentConfig } from "@/features/subagent/config"
import { useAgentFiles, useMemoryFiles } from "@/hooks/use-config"
import { useMcpMutations, useMcpQuery } from "@/hooks/use-mcp"
import { usePluginsQuery } from "@/hooks/use-plugins"
import { m } from "@/paraglide/messages"
import type { BoardColumnId, Scope } from "@/shared/types"
import { AddMcpDialog } from "./AddMcpDialog"
import { AddSkillDialog } from "./AddSkillDialog"
import { BoardColumnSettings } from "./BoardColumnSettings"
import { EntityListPanel } from "./EntityListPanel"
Expand Down
2 changes: 1 addition & 1 deletion src/components/board/FilesPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import { FileTreeNode } from "@/components/files-editor/components/FileTree"
import { useProjectContext } from "@/components/ProjectContext"
import { Empty, EmptyDescription, EmptyMedia } from "@/components/ui/empty"
import { Skeleton } from "@/components/ui/skeleton"
import { getFileTreeFn } from "@/features/file/server"
import { m } from "@/paraglide/messages"
import { getFileTreeFn } from "@/server/files"

interface FilesPanelProps {
scopeFilter?: string
Expand Down
2 changes: 1 addition & 1 deletion src/components/board/LspServersPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
EntityActionDropdown,
} from "@/components/ui/entity-action-menu"
import { ListItem } from "@/components/ui/list-item"
import { usePluginsQuery } from "@/hooks/use-plugins"
import { usePluginsQuery } from "@/features/plugin/queries"
import type { EntityActionId } from "@/lib/entity-actions"
import { ENTITY_ACTIONS } from "@/lib/entity-actions"
import { m } from "@/paraglide/messages"
Expand Down
Loading
Loading