Skip to content

Commit 2206cfa

Browse files
authored
docs: update documentation for category feature (#46)
1 parent f15aa40 commit 2206cfa

8 files changed

Lines changed: 271 additions & 35 deletions

File tree

README.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ Symphony는 AI 개발환경(IDE, MCP 기반 LLM Tooling)을 위한 정책 기반
1717
- [사용 가능한 MCP 도구](#사용-가능한-mcp-도구)
1818
- [`query_conventions`](#query_conventions)
1919
- [`validate_code`](#validate_code)
20+
- [`list_category`](#list_category)
21+
- [`add_category`](#add_category)
22+
- [`edit_category`](#edit_category)
23+
- [`remove_category`](#remove_category)
2024
- [컨벤션 파일](#컨벤션-파일)
2125
- [요구사항](#요구사항)
2226
- [지원 플랫폼](#지원-플랫폼)
@@ -29,6 +33,7 @@ Symphony는 AI 개발환경(IDE, MCP 기반 LLM Tooling)을 위한 정책 기반
2933
- 자연어로 컨벤션 정의
3034
- LLM이 MCP를 통해 필요한 컨벤션만 추출하여 컨텍스트에 포함
3135
- LLM이 MCP를 통해 코드 변경사항에 대한 컨벤션 준수 여부를 검사
36+
- 카테고리 기반 규칙 분류 및 관리
3237
- RBAC 기반 접근 제어
3338

3439
---
@@ -80,6 +85,26 @@ sym dashboard
8085
- 코드가 정의된 규칙을 따르는지 검사합니다.
8186
- 필수 파라미터: `files`
8287

88+
### `list_category`
89+
90+
- 프로젝트에 정의된 카테고리 목록을 조회합니다.
91+
- 파라미터 없음
92+
93+
### `add_category`
94+
95+
- 새 카테고리를 추가합니다 (배치 지원).
96+
- 필수 파라미터: `categories` (배열)
97+
98+
### `edit_category`
99+
100+
- 기존 카테고리를 편집합니다 (배치 지원).
101+
- 필수 파라미터: `edits` (배열)
102+
103+
### `remove_category`
104+
105+
- 카테고리를 삭제합니다 (배치 지원).
106+
- 필수 파라미터: `names` (배열)
107+
83108
---
84109

85110
## 컨벤션 파일

docs/ARCHITECTURE.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,9 @@ AI 코딩 도구(Claude Code, Cursor 등)와 stdio를 통해 통신합니다.
141141
| `query_conventions` | 프로젝트 컨벤션 조회 |
142142
| `validate_code` | 코드 변경사항 검증 |
143143
| `list_category` | 카테고리 목록 조회 |
144+
| `add_category` | 카테고리 추가 (배치 지원) |
145+
| `edit_category` | 카테고리 편집 (배치 지원) |
146+
| `remove_category` | 카테고리 삭제 (배치 지원) |
144147

145148
#### HTTP Server (`internal/server`)
146149

@@ -152,6 +155,10 @@ AI 코딩 도구(Claude Code, Cursor 등)와 stdio를 통해 통신합니다.
152155
| `POST /api/policy` | 정책 저장 |
153156
| `GET /api/roles` | 역할 목록 조회 |
154157
| `POST /api/select-role` | 역할 선택 |
158+
| `GET /api/categories` | 카테고리 목록 조회 |
159+
| `POST /api/categories` | 카테고리 추가 |
160+
| `PUT /api/categories/{name}` | 카테고리 편집 |
161+
| `DELETE /api/categories/{name}` | 카테고리 삭제 |
155162

156163
### Layer 3: Core
157164

docs/COMMAND.md

Lines changed: 178 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ Symphony (`sym`)는 코드 컨벤션 관리와 RBAC(역할 기반 접근 제어)
4141
- [query\_conventions](#query_conventions)
4242
- [validate\_code](#validate_code)
4343
- [list\_category](#list_category)
44+
- [add\_category](#add_category)
45+
- [edit\_category](#edit_category)
46+
- [remove\_category](#remove_category)
4447
- [등록 방법](#등록-방법)
4548
- [LLM 프로바이더](#llm-프로바이더)
4649
- [지원 프로바이더](#지원-프로바이더)
@@ -372,19 +375,27 @@ sym validate --timeout 60
372375

373376
### sym category
374377

375-
**설명**: 사용 가능한 모든 컨벤션 카테고리와 설명을 표시합니다.
378+
**설명**: 컨벤션 카테고리를 관리합니다.
376379

377-
user-policy.json에 정의된 카테고리를 표시합니다. `sym init` 실행 시 7개의 기본 카테고리(security, style, documentation, error_handling, architecture, performance, testing)가 생성됩니다. 사용자는 이 카테고리를 수정, 삭제하거나 새로운 카테고리를 추가할 수 있습니다.
380+
user-policy.json에 정의된 카테고리를 조회, 추가, 편집, 삭제할 수 있습니다. `sym init` 실행 시 7개의 기본 카테고리(security, style, documentation, error_handling, architecture, performance, testing)가 생성됩니다.
381+
382+
**서브커맨드**:
383+
- `list` - 카테고리 목록 조회
384+
- `add` - 새 카테고리 추가
385+
- `edit` - 기존 카테고리 편집
386+
- `remove` - 카테고리 삭제
387+
388+
**관련 파일**: `internal/cmd/category.go`
389+
390+
---
391+
392+
#### sym category list
393+
394+
**설명**: 모든 카테고리와 설명을 표시합니다.
378395

379396
**문법**:
380397
```
381-
sym category
382-
```
383-
384-
**예시**:
385-
```bash
386-
# 카테고리 목록 조회
387-
sym category
398+
sym category list
388399
```
389400

390401
**출력 예시**:
@@ -399,36 +410,115 @@ sym category
399410
400411
• documentation
401412
Documentation rules (comments, docstrings, etc.)
413+
```
402414

403-
• error_handling
404-
Error handling and exception management rules
415+
---
405416

406-
• architecture
407-
Code structure and architecture rules
417+
#### sym category add
408418

409-
• performance
410-
Performance optimization rules
419+
**설명**: 새 카테고리를 추가합니다.
411420

412-
• testing
413-
Testing rules (coverage, test patterns, etc.)
421+
**문법**:
422+
```
423+
sym category add <name> <description>
424+
sym category add -f <file.json>
414425
```
415426

416-
**사용자 정의 카테고리**:
427+
**플래그**:
428+
- `-f, --file` - 배치 추가를 위한 JSON 파일
417429

418-
user-policy.json에 `category` 필드를 추가하여 사용자 정의 카테고리를 추가하거나 기존 카테고리 설명을 변경할 수 있습니다:
430+
**예시**:
431+
```bash
432+
# 단일 추가
433+
sym category add accessibility "Accessibility rules (WCAG, ARIA, etc.)"
434+
435+
# 배치 추가
436+
sym category add -f categories.json
437+
```
419438

439+
**배치 파일 형식** (`categories.json`):
420440
```json
421-
{
422-
"version": "1.0",
423-
"category": [
424-
{"name": "security", "description": "보안 관련 규칙 (인증, 인가, 취약점 방지 등)"},
425-
{"name": "naming", "description": "네이밍 컨벤션 규칙 (변수, 함수, 클래스 등)"}
426-
],
427-
"rules": [...]
428-
}
441+
[
442+
{"name": "security", "description": "Security rules"},
443+
{"name": "performance", "description": "Performance rules"}
444+
]
429445
```
430446

431-
**관련 파일**: `internal/cmd/category.go`
447+
---
448+
449+
#### sym category edit
450+
451+
**설명**: 기존 카테고리의 이름 또는 설명을 변경합니다.
452+
453+
**문법**:
454+
```
455+
sym category edit <name> [--name <new-name>] [--description <desc>]
456+
sym category edit -f <file.json>
457+
```
458+
459+
**플래그**:
460+
- `--name` - 새 카테고리 이름
461+
- `--description` - 새 설명
462+
- `-f, --file` - 배치 편집을 위한 JSON 파일
463+
464+
**예시**:
465+
```bash
466+
# 설명만 변경
467+
sym category edit security --description "Updated security rules"
468+
469+
# 이름 변경 (관련 규칙도 자동 업데이트)
470+
sym category edit old-name --name new-name
471+
472+
# 이름과 설명 모두 변경
473+
sym category edit security --name sec --description "Security conventions"
474+
475+
# 배치 편집
476+
sym category edit -f edits.json
477+
```
478+
479+
**배치 파일 형식** (`edits.json`):
480+
```json
481+
[
482+
{"name": "security", "new_name": "sec"},
483+
{"name": "performance", "description": "New description"}
484+
]
485+
```
486+
487+
**참고**: 카테고리 이름 변경 시 해당 카테고리를 참조하는 모든 규칙이 자동으로 업데이트됩니다.
488+
489+
---
490+
491+
#### sym category remove
492+
493+
**설명**: 카테고리를 삭제합니다.
494+
495+
**문법**:
496+
```
497+
sym category remove <name> [names...]
498+
sym category remove -f <file.json>
499+
```
500+
501+
**플래그**:
502+
- `-f, --file` - 삭제할 카테고리 이름이 담긴 JSON 파일
503+
504+
**예시**:
505+
```bash
506+
# 단일 삭제
507+
sym category remove deprecated-category
508+
509+
# 다중 삭제
510+
sym category remove cat1 cat2 cat3
511+
512+
# 배치 삭제
513+
sym category remove -f names.json
514+
```
515+
516+
**배치 파일 형식** (`names.json`):
517+
```json
518+
["cat1", "cat2", "cat3"]
519+
```
520+
521+
**참고**: 규칙이 참조하고 있는 카테고리는 삭제할 수 없습니다. 먼저 해당 규칙을 삭제하거나 다른 카테고리로 변경해야 합니다.
432522

433523
---
434524

@@ -440,6 +530,9 @@ user-policy.json에 `category` 필드를 추가하여 사용자 정의 카테고
440530
- `query_conventions`: 주어진 컨텍스트에 대한 컨벤션 쿼리
441531
- `validate_code`: 코드의 컨벤션 준수 여부 검증
442532
- `list_category`: 사용 가능한 카테고리 목록 조회
533+
- `add_category`: 카테고리 추가 (배치 지원)
534+
- `edit_category`: 카테고리 편집 (배치 지원)
535+
- `remove_category`: 카테고리 삭제 (배치 지원)
443536

444537
**통신 방식**: stdio (Claude Desktop, Claude Code, Cursor 등 MCP 클라이언트와 통합)
445538

@@ -726,6 +819,63 @@ Available categories (7):
726819
Use query_conventions with a specific category to get rules for that category.
727820
```
728821

822+
#### add_category
823+
824+
카테고리를 추가합니다 (배치 모드).
825+
826+
**입력 스키마**:
827+
828+
| 파라미터 | 타입 | 필수 | 설명 |
829+
|----------|------|------|------|
830+
| `categories` | array || `{name, description}` 객체 배열 |
831+
832+
**예시**:
833+
```json
834+
{
835+
"categories": [
836+
{"name": "accessibility", "description": "Accessibility rules (WCAG, ARIA)"},
837+
{"name": "i18n", "description": "Internationalization rules"}
838+
]
839+
}
840+
```
841+
842+
#### edit_category
843+
844+
카테고리를 편집합니다 (배치 모드). 이름 변경 시 규칙 참조도 자동 업데이트됩니다.
845+
846+
**입력 스키마**:
847+
848+
| 파라미터 | 타입 | 필수 | 설명 |
849+
|----------|------|------|------|
850+
| `edits` | array || `{name, new_name?, description?}` 객체 배열 |
851+
852+
**예시**:
853+
```json
854+
{
855+
"edits": [
856+
{"name": "security", "description": "Updated security rules"},
857+
{"name": "style", "new_name": "formatting"}
858+
]
859+
}
860+
```
861+
862+
#### remove_category
863+
864+
카테고리를 삭제합니다 (배치 모드). 규칙이 참조하는 카테고리는 삭제할 수 없습니다.
865+
866+
**입력 스키마**:
867+
868+
| 파라미터 | 타입 | 필수 | 설명 |
869+
|----------|------|------|------|
870+
| `names` | array || 삭제할 카테고리 이름 배열 |
871+
872+
**예시**:
873+
```json
874+
{
875+
"names": ["deprecated-category", "unused-category"]
876+
}
877+
```
878+
729879
### 등록 방법
730880

731881
```bash

internal/cmd/README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ cmd/
2020
├── llm.go # sym llm status|test|setup 명령어 (LLM 관리)
2121
├── mcp.go # sym mcp 명령어 (MCP 서버)
2222
├── mcp_register.go # MCP 서버 등록 헬퍼 함수
23-
├── category.go # sym category 명령어 (카테고리 목록)
23+
├── category.go # sym category list|add|edit|remove 명령어 (카테고리 관리)
2424
├── survey_templates.go # 커스텀 survey UI 템플릿
2525
└── README.md
2626
```
@@ -102,7 +102,10 @@ cmd/
102102
| `runLLMTest(cmd, args)` | llm.go:107 | llm test 실행 |
103103
| `runLLMSetup(cmd, args)` | llm.go:142 | llm setup 실행 |
104104
| `runMCP(cmd, args)` | mcp.go:37 | mcp 실행 |
105-
| `runCategory(cmd, args)` | category.go:27 | category 실행 |
105+
| `runCategoryList(cmd, args)` | category.go:138 | category list 실행 |
106+
| `runCategoryAdd(cmd, args)` | category.go:165 | category add 실행 |
107+
| `runCategoryEdit(cmd, args)` | category.go:240 | category edit 실행 |
108+
| `runCategoryRemove(cmd, args)` | category.go:353 | category remove 실행 |
106109

107110
#### 헬퍼 함수 - 초기화
108111

internal/mcp/README.md

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,13 @@ mcp/
5353
| `RPCError` | server.go:184 | JSON-RPC 에러 타입 |
5454
| `QueryConventionsInput` | server.go:190 | query_conventions 입력 스키마 |
5555
| `ValidateCodeInput` | server.go:196 | validate_code 입력 스키마 |
56-
| `ListCategoryInput` | server.go:202 | list_category 입력 스키마 |
57-
| `QueryConventionsRequest` | server.go:244 | 컨벤션 조회 요청 |
56+
| `ListCategoryInput` | server.go:201 | list_category 입력 스키마 |
57+
| `CategoryItem` | server.go:206 | 카테고리 항목 (배치용) |
58+
| `CategoryEditItem` | server.go:212 | 카테고리 편집 항목 (배치용) |
59+
| `AddCategoryInput` | server.go:225 | add_category 입력 스키마 |
60+
| `EditCategoryInput` | server.go:230 | edit_category 입력 스키마 |
61+
| `RemoveCategoryInput` | server.go:235 | remove_category 입력 스키마 |
62+
| `QueryConventionsRequest` | server.go:330 | 컨벤션 조회 요청 |
5863
| `ConventionItem` | server.go:250 | 컨벤션 항목 |
5964
| `ValidateCodeRequest` | server.go:411 | 검증 요청 |
6065
| `ViolationItem` | server.go:416 | 위반 항목 |
@@ -90,8 +95,13 @@ mcp/
9095
| `convertUserPolicy(userPath, codePath)` | 정책 변환 래퍼 |
9196
| `getRBACInfo()` | RBAC 정보 생성 |
9297
| `saveValidationResults(result, violations, hasErrors)` | 검증 결과 저장 |
98+
| `handleListCategory()` | 카테고리 목록 핸들러 |
99+
| `handleAddCategory(input)` | 카테고리 추가 핸들러 |
100+
| `handleEditCategory(input)` | 카테고리 편집 핸들러 |
101+
| `handleRemoveCategory(input)` | 카테고리 삭제 핸들러 |
102+
| `saveUserPolicy()` | 정책 파일 저장 |
93103

94104
## 참고 문헌
95105

96-
- [MCP 도구 스키마](../../docs/COMMAND.md#mcp-도구-스키마) - query_conventions, validate_code, list_category 입력/출력 스펙
106+
- [MCP 도구 스키마](../../docs/COMMAND.md#mcp-도구-스키마) - query_conventions, validate_code, list_category, add_category, edit_category, remove_category 입력/출력 스펙
97107
- [MCP 통합 가이드](../../docs/COMMAND.md#mcp-통합) - 지원 도구 및 등록 방법

internal/server/README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ type Server struct {
6767
- `hasPermissionForRoleWithPolicy(role, permission string, policy *schema.UserPolicy) (bool, error)` - 제공된 정책으로 권한 확인
6868
- `checkPermissionForRole(userRole, permission string, policy *schema.UserPolicy) (bool, error)` - 권한 검사 핵심 로직
6969

70-
**HTTP 핸들러 (14개):**
70+
**HTTP 핸들러 (19개):**
7171

7272
| 핸들러 | 라우트 | 설명 |
7373
|--------|--------|------|
@@ -87,6 +87,11 @@ type Server struct {
8787
| handlePolicyTemplateDetail | GET /api/policy/templates/{name} | 특정 템플릿 상세 |
8888
| handleUsers | GET /api/users | 모든 사용자 목록 |
8989
| handleConvert | POST /api/policy/convert | 정책 변환 실행 |
90+
| handleCategories | /api/categories | GET/POST/PUT/DELETE 라우터 |
91+
| handleGetCategories | GET /api/categories | 카테고리 목록 조회 |
92+
| handleAddCategory | POST /api/categories | 카테고리 추가 |
93+
| handleEditCategory | PUT /api/categories/{name} | 카테고리 편집 |
94+
| handleDeleteCategory | DELETE /api/categories/{name} | 카테고리 삭제 |
9095

9196
## 참고 문헌
9297

0 commit comments

Comments
 (0)