Skip to content

feat: add category management(add, edit, remove)#44

Merged
ikjeong merged 13 commits intomainfrom
feat/category-edit
Dec 10, 2025
Merged

feat: add category management(add, edit, remove)#44
ikjeong merged 13 commits intomainfrom
feat/category-edit

Conversation

@ikjeong
Copy link
Contributor

@ikjeong ikjeong commented Dec 10, 2025

Summary

  • 카테고리 관리 기능을 CLI, MCP, Dashboard 전반에 걸쳐 추가하여 사용자가 convention 카테고리를 유연하게 관리할 수 있도록 함
  • LLM이 카테고리 메타데이터를 활용하여 더 정확한 룰 라우팅을 수행할 수 있도록 개선

Changes

  • CLI: sym category 서브커맨드 추가 (list/add/edit/remove) - 배치 모드 지원
  • MCP: add_category, edit_category, remove_category 도구 추가
  • Dashboard: 카테고리 관리 API 엔드포인트 및 UI 추가
  • Converter: LLM 라우팅 프롬프트에 카테고리 설명 포함
  • Template: 템플릿 적용 시 카테고리 처리 로직 개선

새로 추가된 기능 상세

1. CLI 카테고리 관리 (sym category)

카테고리를 커맨드라인에서 직접 관리할 수 있습니다.

카테고리 목록 조회

sym category list

카테고리 추가

# 단일 추가
sym category add accessibility "Accessibility rules (WCAG, ARIA, etc.)"

# 배치 추가 (JSON 파일)
sym category add -f categories.json
# categories.json 형식:
# [{"name": "security", "description": "Security rules"}, ...]

카테고리 수정

# 이름 변경
sym category edit old-name --name new-name

# 설명 변경
sym category edit security --description "Updated security rules"

# 이름과 설명 동시 변경
sym category edit security --name sec --description "Security conventions"

# 배치 수정 (JSON 파일)
sym category edit -f edits.json
# edits.json 형식:
# [{"name": "security", "new_name": "sec"}, {"name": "performance", "description": "New desc"}]

주의: 카테고리 이름을 변경하면 해당 카테고리를 참조하는 모든 규칙의 카테고리도 자동으로 업데이트됩니다.

카테고리 삭제

# 단일 삭제
sym category remove deprecated-category

# 여러 개 삭제
sym category remove cat1 cat2 cat3

# 배치 삭제 (JSON 파일)
sym category remove -f names.json
# names.json 형식: ["cat1", "cat2", "cat3"]

주의: 규칙이 참조하고 있는 카테고리는 삭제할 수 없습니다. 먼저 해당 규칙을 삭제하거나 다른 카테고리로 변경해야 합니다.

2. MCP 카테고리 관리 도구

AI 코딩 어시스턴트가 MCP를 통해 카테고리를 직접 관리할 수 있습니다.

add_category - 카테고리 추가

{
  "categories": [
    {"name": "security", "description": "Security rules"},
    {"name": "performance", "description": "Performance rules"}
  ]
}

edit_category - 카테고리 수정

{
  "edits": [
    {"name": "security", "new_name": "sec"},
    {"name": "performance", "description": "New description"}
  ]
}

remove_category - 카테고리 삭제

{
  "names": ["deprecated-cat1", "deprecated-cat2"]
}

모든 MCP 도구는 배치 처리를 지원하며, 부분 성공/실패 결과를 상세히 반환합니다.

3. Dashboard 카테고리 관리

웹 대시보드의 Global Settings 섹션에서 카테고리를 시각적으로 관리할 수 있습니다.

API 엔드포인트

Method Endpoint 설명
GET /api/categories 모든 카테고리 목록 조회
POST /api/categories 새 카테고리 추가
PUT /api/categories/{name} 기존 카테고리 수정
DELETE /api/categories/{name} 카테고리 삭제

응답에는 영향받은 규칙 수(affectedRules)가 포함됩니다.

UI 기능

  • 카테고리 목록 보기 (각 카테고리의 규칙 수 표시)
  • 인라인 편집 (이름, 설명)
  • 삭제 (규칙이 있는 카테고리는 삭제 버튼 비활성화)
  • 새 카테고리 추가 폼

4. LLM 라우팅 개선

규칙을 적절한 린터로 라우팅할 때, LLM 프롬프트에 카테고리 설명이 포함되어 더 정확한 라우팅이 가능합니다.

- Refactor sym category to parent command with subcommands
- Add sym category list (moved from sym category)
- Add sym category add <name> <description>
- Add sym category edit <name> --name/--description
- Add sym category remove <name> (blocked if rules reference it)
- add_category: add new category with name and description
- edit_category: edit category name/description, updates rule refs
- remove_category: remove category (blocked if rules reference it)
- TestAddCategory: success, duplicate, empty name/description
- TestEditCategory: description update, rename with rule refs, conflicts
- TestRemoveCategory: unused category, rules blocking, not found
- GET /api/categories: list all categories
- POST /api/categories: add new category
- PUT /api/categories/{name}: edit category
- DELETE /api/categories/{name}: remove category (blocked if used)
- MCP tools: batch-only mode (categories[], edits[], names[])
- CLI commands: single + batch mode with --file flag
- Partial failure handling with success/fail reporting
- Add category array to template files (node, python, go)
- Overwrite categories when applying template (remove merge logic)
- Fix LLM provider message in convert dialog
@ikjeong ikjeong self-assigned this Dec 10, 2025
@ikjeong ikjeong merged commit d7cc7c4 into main Dec 10, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant