30eggis

spec-component-loader

by @30eggis in Tools
0
0
# Install this skill:
npx skills add 30eggis/claude-frontend-skills --skill "spec-component-loader"

Install specific skill from multi-skill repository

# Description

|

# SKILL.md


name: spec-component-loader
description: |
์ ์ง„์ ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ ์ŠคํŽ™์„ ๋กœ๋”ฉํ•ฉ๋‹ˆ๋‹ค.
์นดํ…Œ๊ณ ๋ฆฌ๋ณ„, ์šฐ์„ ์ˆœ์œ„๋ณ„, ์˜์กด์„ฑ ๊ธฐ๋ฐ˜ ๋กœ๋”ฉ ์ง€์›.
Agent์˜ ์ปจํ…์ŠคํŠธ ํšจ์œจ์„ฑ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์„ ํƒ์ ์œผ๋กœ ๋กœ๋”ฉํ•ฉ๋‹ˆ๋‹ค.
allowed-tools: Read, Glob, Grep
argument-hint: " [--list] [--category ] [--name ] [--with-deps] [--gap]"
permissionMode: bypassPermissions


spec-component-loader

์ปดํฌ๋„ŒํŠธ ์ŠคํŽ™์„ ์ ์ง„์ ์œผ๋กœ ๋กœ๋”ฉํ•˜์—ฌ Agent์˜ ์ปจํ…์ŠคํŠธ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๋ชฉ์ 

  • ์ปดํฌ๋„ŒํŠธ ์ŠคํŽ™์ด ๋งŽ์œผ๋ฉด Agent ํ˜ธ์ถœ ์‹œ ์ปจํ…์ŠคํŠธ ์ดˆ๊ณผ ์œ„ํ—˜
  • ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ๋งŒ ์ ์ง„์ ์œผ๋กœ ๋กœ๋”ฉ
  • ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ณ ๋ คํ•œ ํšจ์œจ์ ์ธ ๊ตฌํ˜„ ์ˆœ์„œ ์ œ๊ณต

์‚ฌ์šฉ๋ฒ•

์ „์ฒด ์ปดํฌ๋„ŒํŠธ ๋ชฉ๋ก

/spec-component-loader {spec-folder} --list

์ถœ๋ ฅ:

# ์ปดํฌ๋„ŒํŠธ ๋ชฉ๋ก

## ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๋ถ„๋ฅ˜

### Layout (4๊ฐœ)
- Header
- Sidebar
- Footer
- MainLayout

### Cards (6๊ฐœ)
- StockCard
- PortfolioCard
- NewsCard
- AlertCard
- WatchlistCard
- SummaryCard

### Display (8๊ฐœ)
- PriceDisplay
- ChangeIndicator
- Sparkline
- ChartWidget
- DataTable
- Badge
- Tooltip
- Avatar

### Forms (5๊ฐœ)
- SearchInput
- OrderForm
- AlertForm
- SettingsForm
- LoginForm

### Feedback (3๊ฐœ)
- Toast
- LoadingSpinner
- ErrorBoundary

## ์˜์กด์„ฑ ์š”์•ฝ
| ์ปดํฌ๋„ŒํŠธ | ์˜์กด | ํ”ผ์˜์กด | ๋ณต์žก๋„ |
|----------|------|--------|--------|
| StockCard | 3 | 5 | HIGH |
| PriceDisplay | 1 | 8 | MEDIUM |
| Header | 2 | 1 | LOW |

์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๋กœ๋”ฉ

/spec-component-loader {spec-folder} --category layout
/spec-component-loader {spec-folder} --category cards
/spec-component-loader {spec-folder} --category display
/spec-component-loader {spec-folder} --category forms

์ถœ๋ ฅ: ํ•ด๋‹น ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ ์ŠคํŽ™ ์ „์ฒด ๋‚ด์šฉ

ํŠน์ • ์ปดํฌ๋„ŒํŠธ ๋กœ๋”ฉ

/spec-component-loader {spec-folder} --name StockCard
/spec-component-loader {spec-folder} --name PriceDisplay

์ถœ๋ ฅ: ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ ์ŠคํŽ™ ์ „์ฒด ๋‚ด์šฉ

์˜์กด์„ฑ ํฌํ•จ ๋กœ๋”ฉ

/spec-component-loader {spec-folder} --name StockCard --with-deps

์ถœ๋ ฅ:

# StockCard + ์˜์กด์„ฑ

## ์˜์กด์„ฑ ํŠธ๋ฆฌ
StockCard
โ”œโ”€โ”€ PriceDisplay (display)
โ”œโ”€โ”€ ChangeIndicator (display)
โ””โ”€โ”€ Sparkline (display)

## 1. PriceDisplay (์˜์กด์„ฑ)
{PriceDisplay spec content}

## 2. ChangeIndicator (์˜์กด์„ฑ)
{ChangeIndicator spec content}

## 3. Sparkline (์˜์กด์„ฑ)
{Sparkline spec content}

## 4. StockCard (๋Œ€์ƒ)
{StockCard spec content}

Gap Analysis (๋ฏธ๊ตฌํ˜„ ์ปดํฌ๋„ŒํŠธ)

/spec-component-loader {spec-folder} --gap

์ถœ๋ ฅ:

# ์ปดํฌ๋„ŒํŠธ Gap Analysis

## ๋ฏธ๊ตฌํ˜„ ์ปดํฌ๋„ŒํŠธ (12๊ฐœ)

### ์šฐ์„ ์ˆœ์œ„๋ณ„
| ์šฐ์„ ์ˆœ์œ„ | ์ปดํฌ๋„ŒํŠธ | ์นดํ…Œ๊ณ ๋ฆฌ | ๋ณต์žก๋„ |
|----------|----------|----------|--------|
| P0 | StockCard | cards | HIGH |
| P0 | PriceDisplay | display | MEDIUM |
| P1 | Header | layout | LOW |
| ... |

## ๊ถŒ์žฅ ๊ตฌํ˜„ ์ˆœ์„œ
1. PriceDisplay (display) - ์˜์กด์„ฑ ์—†์Œ, 8๊ฐœ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์˜์กด
2. ChangeIndicator (display) - ์˜์กด์„ฑ ์—†์Œ, 5๊ฐœ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์˜์กด
3. Sparkline (display) - ์˜์กด์„ฑ ์—†์Œ, 3๊ฐœ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์˜์กด
4. StockCard (cards) - ์œ„ 3๊ฐœ ์˜์กด, P0 ์šฐ์„ ์ˆœ์œ„
...

## ๊ตฌํ˜„ ๋ฐฐ์น˜ (๋ณ‘๋ ฌํ™” ๊ฐ€๋Šฅ)
### Batch 1 (์˜์กด์„ฑ ์—†์Œ)
- PriceDisplay
- ChangeIndicator
- Sparkline
- Badge

### Batch 2 (Batch 1 ์™„๋ฃŒ ํ›„)
- StockCard
- PortfolioCard
- AlertCard

### Batch 3
...

Spec ํด๋” ๊ตฌ์กฐ

{spec-folder}/03-components/
โ”œโ”€โ”€ component-inventory.md     โ†’ ์ „์ฒด ์ปดํฌ๋„ŒํŠธ ๋ชฉ๋ก
โ”œโ”€โ”€ gap-analysis.md            โ†’ Gap ๋ถ„์„ ๊ฒฐ๊ณผ
โ””โ”€โ”€ specs/
    โ”œโ”€โ”€ layout/
    โ”‚   โ”œโ”€โ”€ Header.md          โ†’ Markdown (legacy)
    โ”‚   โ”œโ”€โ”€ Header.yaml        โ†’ YAML (preferred)
    โ”‚   โ”œโ”€โ”€ Sidebar.md
    โ”‚   โ””โ”€โ”€ Footer.md
    โ”œโ”€โ”€ cards/
    โ”‚   โ”œโ”€โ”€ StockCard.md
    โ”‚   โ”œโ”€โ”€ StockCard.yaml     โ†’ YAML format
    โ”‚   โ””โ”€โ”€ PortfolioCard.md
    โ”œโ”€โ”€ display/
    โ”‚   โ”œโ”€โ”€ PriceDisplay.md
    โ”‚   โ””โ”€โ”€ ChangeIndicator.md
    โ”œโ”€โ”€ forms/
    โ”‚   โ””โ”€โ”€ SearchInput.md
    โ””โ”€โ”€ feedback/
        โ””โ”€โ”€ Toast.md

Format Detection

The loader auto-detects spec format by file extension:

Extension Format Priority
.yaml YAML (structured) Preferred
.md Markdown (legacy) Fallback

When both formats exist for a component, YAML takes precedence.

๋กœ๋”ฉ ๋กœ์ง

--list ๋ชจ๋“œ

1. Read: {spec-folder}/03-components/component-inventory.md
2. Glob: {spec-folder}/03-components/specs/**/*.{yaml,md}
3. ๊ฐ ํŒŒ์ผ์—์„œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ถ”์ถœ (YAML: direct parse, MD: regex)
4. ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„, ์˜์กด์„ฑ ์š”์•ฝ ์ƒ์„ฑ

--category ๋ชจ๋“œ

1. Glob: {spec-folder}/03-components/specs/{category}/*.{yaml,md}
2. YAML ํŒŒ์ผ ์šฐ์„ , MD fallback
3. ๋ชจ๋“  ํŒŒ์ผ ๋‚ด์šฉ Read
4. ํ†ตํ•ฉ ์ถœ๋ ฅ

--name ๋ชจ๋“œ

1. Glob: {spec-folder}/03-components/specs/**/{name}.yaml (preferred)
2. Fallback: Glob: {spec-folder}/03-components/specs/**/{name}.md
3. Read ํ•ด๋‹น ํŒŒ์ผ
4. ์ถœ๋ ฅ

--with-deps ๋ชจ๋“œ

1. --name์œผ๋กœ ๋Œ€์ƒ ์ปดํฌ๋„ŒํŠธ ๋กœ๋”ฉ
2. ์ŠคํŽ™์—์„œ ์˜์กด์„ฑ ํŒŒ์‹ฑ:
   - YAML: dependencies.internal[].name
   - MD: "Dependencies:" ์„น์…˜
3. ๊ฐ ์˜์กด์„ฑ ์žฌ๊ท€์ ์œผ๋กœ ๋กœ๋”ฉ (์ˆœํ™˜ ์ฐธ์กฐ ๋ฐฉ์ง€)
4. ํ† ํด๋กœ์ง€ ์ •๋ ฌํ•˜์—ฌ ์ถœ๋ ฅ (์˜์กด์„ฑ ๋จผ์ €)

--gap ๋ชจ๋“œ

1. Read: {spec-folder}/03-components/gap-analysis.md
2. ๋˜๋Š” ๋™์  ๋ถ„์„:
   - ์ŠคํŽ™์— ์ •์˜๋œ ์ปดํฌ๋„ŒํŠธ ๋ชฉ๋ก (*.yaml + *.md)
   - ์‹ค์ œ ๊ตฌํ˜„๋œ ์ปดํฌ๋„ŒํŠธ (src/components/**/*.tsx)
   - ์ฐจ์ง‘ํ•ฉ ๊ณ„์‚ฐ
3. ๊ตฌํ˜„ ์ˆœ์„œ ๊ถŒ์žฅ (์˜์กด์„ฑ ๊ณ ๋ ค)

YAML Parsing Guide

YAML ํฌ๋งท ์ปดํฌ๋„ŒํŠธ ์ŠคํŽ™์—์„œ ๋ฐ์ดํ„ฐ ์ถ”์ถœ:

# ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ
id: "CMP-001"           โ†’ ์ปดํฌ๋„ŒํŠธ ID
name: "StockCard"       โ†’ ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„
category: "cards"       โ†’ ์นดํ…Œ๊ณ ๋ฆฌ
priority: "P0"          โ†’ ์šฐ์„ ์ˆœ์œ„

# ์˜์กด์„ฑ
dependencies:
  internal:
    - name: "PriceDisplay"
    - name: "ChangeIndicator"

# Props
props:
  - name: "symbol"
    type: "string"
    required: true

# Design tokens reference
styles:
  _ref: "../../shared/design-tokens.yaml"

์ปดํฌ๋„ŒํŠธ ์ŠคํŽ™ ํฌ๋งท

๊ฐ ์ปดํฌ๋„ŒํŠธ ์ŠคํŽ™์€ ๋‹ค์Œ ํ˜•์‹์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค:

# StockCard

**์นดํ…Œ๊ณ ๋ฆฌ:** cards
**์šฐ์„ ์ˆœ์œ„:** P0
**๋ณต์žก๋„:** HIGH

## ์˜์กด์„ฑ (Dependencies)
- PriceDisplay
- ChangeIndicator
- Sparkline

## ํ”ผ์˜์กด์„ฑ (Used By)
- Dashboard
- WatchlistPage
- SearchResults

## Props

| Prop | Type | Required | Default | Description |
|------|------|----------|---------|-------------|
| symbol | string | Yes | - | ์ข…๋ชฉ ์ฝ”๋“œ |
| onSelect | () => void | No | - | ์„ ํƒ ์‹œ ์ฝœ๋ฐฑ |
| variant | 'compact' \| 'full' | No | 'full' | ํ‘œ์‹œ ๋ชจ๋“œ |

## States

| State | Description | Visual |
|-------|-------------|--------|
| default | ๊ธฐ๋ณธ ์ƒํƒœ | ํฐ์ƒ‰ ๋ฐฐ๊ฒฝ |
| hover | ๋งˆ์šฐ์Šค ์˜ค๋ฒ„ | ๋ฐ์€ ๊ทธ๋ฆผ์ž |
| selected | ์„ ํƒ๋จ | ํŒŒ๋ž€ ํ…Œ๋‘๋ฆฌ |
| loading | ๋กœ๋”ฉ ์ค‘ | ์Šค์ผˆ๋ ˆํ†ค |
| error | ์—๋Ÿฌ | ๋นจ๊ฐ„ ํ…Œ๋‘๋ฆฌ |

## Interactions

| Trigger | Action | Result |
|---------|--------|--------|
| Click | onSelect ํ˜ธ์ถœ | ์ƒ์„ธ ํŽ˜์ด์ง€ ์ด๋™ |
| Long Press | ์ปจํ…์ŠคํŠธ ๋ฉ”๋‰ด | ๋น ๋ฅธ ์•ก์…˜ ํ‘œ์‹œ |

## ์ ‘๊ทผ์„ฑ (a11y)
- role: article
- aria-label: "{symbol} ์ฃผ์‹ ์นด๋“œ"
- ํ‚ค๋ณด๋“œ: Enter/Space๋กœ ์„ ํƒ

## ํ…Œ์ŠคํŠธ ํžŒํŠธ
- ์‹ค์‹œ๊ฐ„ ๊ฐ€๊ฒฉ ์—…๋ฐ์ดํŠธ ํ…Œ์ŠคํŠธ
- ๋กœ๋”ฉ ์ƒํƒœ ๋ Œ๋”๋ง
- ์—๋Ÿฌ ์ƒํƒœ ๋ Œ๋”๋ง

Agent ์—ฐ๋™ ์˜ˆ์‹œ

Phase 3: EXECUTE์—์„œ ์‚ฌ์šฉ

Task(spec-executor, opus):
  prompt: "
    # Step 1: ๊ตฌํ˜„ํ•  ์ปดํฌ๋„ŒํŠธ ์ŠคํŽ™ ๋กœ๋”ฉ
    Skill(spec-component-loader {spec-folder} --name PriceDisplay --with-deps)

    # Step 2: ๊ตฌํ˜„
    - ์˜์กด์„ฑ๋ถ€ํ„ฐ ๊ตฌํ˜„
    - ๋Œ€์ƒ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„
    - ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

    # Step 3: ๋‹ค์Œ ์ปดํฌ๋„ŒํŠธ
    Skill(spec-component-loader {spec-folder} --name StockCard --with-deps)
  "

์ ์ง„์  ๋กœ๋”ฉ ํŒจํ„ด

# 1๋‹จ๊ณ„: ์ „์ฒด ๊ตฌ์กฐ ํŒŒ์•…
Skill(spec-component-loader specs --list)

# 2๋‹จ๊ณ„: Gap ๋ถ„์„์œผ๋กœ ๊ตฌํ˜„ ์ˆœ์„œ ๊ฒฐ์ •
Skill(spec-component-loader specs --gap)

# 3๋‹จ๊ณ„: Batch 1 ์ปดํฌ๋„ŒํŠธ (์˜์กด์„ฑ ์—†์Œ) ๋ณ‘๋ ฌ ๊ตฌํ˜„
Skill(spec-component-loader specs --category display)

# 4๋‹จ๊ณ„: Batch 2 ์ปดํฌ๋„ŒํŠธ (์˜์กด์„ฑ ์žˆ์Œ)
Skill(spec-component-loader specs --name StockCard --with-deps)

์ถœ๋ ฅ ํฌ๋งท

๋ชจ๋“  ์ถœ๋ ฅ์€ Markdown ํ˜•์‹์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค:

# {๋กœ๋”ฉ ํƒ€์ž…} ๊ฒฐ๊ณผ

## ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ
- ๋กœ๋”ฉ ์ผ์‹œ: {timestamp}
- ์†Œ์Šค: {spec-folder}
- ํ•„ํ„ฐ: {filter-type}
- ์ปดํฌ๋„ŒํŠธ ์ˆ˜: {count}

## ๋‚ด์šฉ

{actual content}

---
*Loaded by spec-component-loader*

๊ด€๋ จ Skill

  • spec-test-loader: ํ…Œ์ŠคํŠธ ๊ณ„ํš์„œ ๋กœ๋”ฉ
  • spec-scenario-loader: ์‹œ๋‚˜๋ฆฌ์˜ค ๊ณ„ํš์„œ ๋กœ๋”ฉ
  • spec-it-execute: Phase 3, 5์—์„œ ์ด skill ์‚ฌ์šฉ

# Supported AI Coding Agents

This skill is compatible with the SKILL.md standard and works with all major AI coding agents:

Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.