@simplysm/sd-claude 14.0.49 → 14.0.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/claude/rules/sd-claude-rules.md +26 -106
- package/claude/rules/sd-options.md +35 -28
- package/claude/sd-cache-read-hash.py +18 -0
- package/claude/sd-check-write.py +15 -3
- package/claude/settings.json +11 -0
- package/claude/skills/sd-check/SKILL.md +4 -26
- package/claude/skills/sd-claude-docs/SKILL.md +89 -80
- package/claude/skills/sd-claude-docs/merge-source.sh +23 -0
- package/claude/skills/sd-claude-docs/references/package-docs.md +594 -0
- package/claude/skills/sd-dev/SKILL.md +4 -1
- package/claude/skills/sd-inner-review/SKILL.md +17 -0
- package/claude/skills/sd-inner-review/merge-source.sh +41 -0
- package/claude/skills/sd-plan/SKILL.md +2 -2
- package/claude/skills/sd-tdd/SKILL.md +55 -97
- package/claude/skills/sd-wbs/SKILL.md +64 -26
- package/docs/assets.md +3 -11
- package/package.json +1 -1
- package/claude/references/sd-testing.md +0 -110
- package/claude/skills/sd-claude-docs/references/package-claudemd.md +0 -120
- package/claude/skills/sd-claude-docs/references/package-doc-gen.md +0 -252
|
@@ -6,13 +6,12 @@ effort: low
|
|
|
6
6
|
|
|
7
7
|
# sd-claude-docs: CLAUDE.md + README.md/docs 통합 생성
|
|
8
8
|
|
|
9
|
-
프로젝트를 분석하여 CLAUDE.md(내부
|
|
10
|
-
설정 파일, 스크립트, 소스 코드에서 검증 가능한 사실만 추출한다. 기존 문서가 있으면 섹션 단위로 병합한다.
|
|
9
|
+
프로젝트를 분석하여 **CLAUDE.md**(모노레포 내부 개발자용 컨텍스트)와 **README.md + docs/**(패키지 소비자용 API 문서)를 한 번에 생성·갱신한다. 설정 파일·스크립트·소스 코드에서 검증 가능한 사실만 추출하며, 기존 문서는 섹션 단위로 병합한다.
|
|
11
10
|
|
|
12
|
-
- **라이브러리 프로젝트** (`private: true`가 아닌
|
|
11
|
+
- **라이브러리 프로젝트** (`private: true`가 아닌 패키지 1개 이상 존재): CLAUDE.md + 각 패키지 `README.md` (+ 분량 조건에 해당 시 `docs/{category}/{entry}.md` 트리)
|
|
13
12
|
- **소비앱** (모든 패키지가 `private: true`): CLAUDE.md만 생성
|
|
14
13
|
|
|
15
|
-
CLAUDE.md는
|
|
14
|
+
**두 문서의 독립성.** CLAUDE.md는 **모노레포 내부 개발자(LLM 포함)**용, README.md + docs/는 **패키지 소비자**용이다. 대상·관점이 달라 중복되지 않는다. README.md + docs/는 **wiki 스타일**로 구성한다 — 각 export된 class/component(Entry)는 자체 md 파일로 분리되어, 소비자(특히 LLM)가 필요한 Entry 하나만 조회할 수 있게 한다. README.md는 인덱스, 상세는 각 Entry 파일에 둔다.
|
|
16
15
|
|
|
17
16
|
## 사용법
|
|
18
17
|
|
|
@@ -21,7 +20,33 @@ CLAUDE.md는 모노레포 **내부 개발자(LLM 포함)** 용 컨텍스트이
|
|
|
21
20
|
/sd-claude-docs angular ← packages/angular 만
|
|
22
21
|
```
|
|
23
22
|
|
|
24
|
-
##
|
|
23
|
+
## 공통 규칙
|
|
24
|
+
|
|
25
|
+
### 작성 언어
|
|
26
|
+
|
|
27
|
+
모든 문서는 **대화언어**로 작성한다. "적절히", "필요에 따라", "상황에 따라" 같은 모호한 표현을 사용하지 않는다.
|
|
28
|
+
|
|
29
|
+
### 문서 병합 규칙
|
|
30
|
+
|
|
31
|
+
기존 문서가 있으면 섹션(`##` 제목) 단위로 비교한다.
|
|
32
|
+
|
|
33
|
+
1. 동일 주제의 기존 섹션 → 새 콘텐츠로 **대체**
|
|
34
|
+
2. 대응 섹션이 없는 기존 섹션 → 그대로 **보존**
|
|
35
|
+
3. 기존 섹션 위치를 유지하고, 새로 생성된 섹션은 마지막 기존 섹션 **뒤에** 추가
|
|
36
|
+
|
|
37
|
+
### 출력 경로 규칙
|
|
38
|
+
|
|
39
|
+
라이브러리 프로젝트에서 패키지 소비자용 문서는 **해당 패키지 루트**에 위치한다.
|
|
40
|
+
|
|
41
|
+
| 구분 | CLAUDE.md | README.md | docs/ |
|
|
42
|
+
|------|-----------|-----------|-------|
|
|
43
|
+
| 모노레포 (각 패키지) | `{패키지 경로}/CLAUDE.md` | `{패키지 경로}/README.md` | `{패키지 경로}/docs/{category}/{entry}.md` |
|
|
44
|
+
| 모노레포 루트 | `./CLAUDE.md` | — | — |
|
|
45
|
+
| 단일 패키지 (루트=패키지) | `./CLAUDE.md` | `./README.md` | `./docs/{category}/{entry}.md` |
|
|
46
|
+
|
|
47
|
+
`private: true` 패키지는 README.md / docs/를 생성하지 않는다 (CLAUDE.md만).
|
|
48
|
+
|
|
49
|
+
## Step 1: 사전 분석
|
|
25
50
|
|
|
26
51
|
### 1-1. 패키지 매니저 감지
|
|
27
52
|
|
|
@@ -37,11 +62,11 @@ CLAUDE.md는 모노레포 **내부 개발자(LLM 포함)** 용 컨텍스트이
|
|
|
37
62
|
루트 `package.json`의 `scripts` 섹션을 읽고 각 스크립트의 CLI 도구를 분석한다.
|
|
38
63
|
|
|
39
64
|
- **잘 알려진 도구** (`tsc`, `vitest`, `eslint`, `prettier`, `playwright` 등): 명령어를 그대로 기록
|
|
40
|
-
- **커스텀 CLI
|
|
65
|
+
- **커스텀 CLI** (예: `tsx packages/.../cli.ts`): Bash에서 `--help`를 먼저 실행한다 (5초 타임아웃). 유용한 정보가 있으면 그 결과를 사용한다. `--help`가 실패하거나 정보가 부족할 때만 소스 코드를 Read로 분석한다.
|
|
41
66
|
|
|
42
67
|
### 1-3. 코딩 규칙 추출
|
|
43
68
|
|
|
44
|
-
|
|
69
|
+
아래 설정 파일을 찾아 읽는다 (없는 파일은 건너뛴다):
|
|
45
70
|
|
|
46
71
|
- ESLint: `eslint.config.*`, `.eslintrc.*`
|
|
47
72
|
- Prettier: `.prettierrc*`, `prettier.config.*`
|
|
@@ -49,113 +74,99 @@ CLAUDE.md는 모노레포 **내부 개발자(LLM 포함)** 용 컨텍스트이
|
|
|
49
74
|
- TypeScript: `tsconfig.json` → `compilerOptions`
|
|
50
75
|
- Stylelint: `.stylelintrc*`, `stylelint.config.*`
|
|
51
76
|
|
|
52
|
-
|
|
77
|
+
선별 기준:
|
|
53
78
|
|
|
54
|
-
-
|
|
79
|
+
- 도구 기본값과 다른 설정 (예: TypeScript `verbatimModuleSyntax: true`, Prettier `printWidth: 100`)
|
|
55
80
|
- error 수준의 비표준 규칙 (예: `no-console: error`)
|
|
56
81
|
- 특정 API를 금지하거나 요구하는 규칙 (예: `Buffer` 금지 → `Uint8Array` 사용)
|
|
57
82
|
|
|
58
|
-
### 1-4.
|
|
83
|
+
### 1-4. `.claude/rules/` 스캔
|
|
59
84
|
|
|
60
|
-
|
|
85
|
+
디렉토리가 존재하면 모든 `.md` 파일을 읽어 이미 다루고 있는 주제를 목록화한다. 해당 주제는 **CLAUDE.md에서 제외**한다 — 파일 간 규칙 중복은 LLM이 고유 지침 대신 중복 컨텍스트를 처리하게 되어 지침의 효과를 약화시킨다.
|
|
61
86
|
|
|
62
87
|
### 1-5. 프로젝트 유형 감지
|
|
63
88
|
|
|
64
|
-
|
|
89
|
+
모노레포면 모든 패키지의 `package.json`을, 단일 패키지면 루트 `package.json`을 확인한다.
|
|
65
90
|
|
|
66
|
-
- **라이브러리 프로젝트**: `private: true`가 아닌 패키지가 1개 이상
|
|
91
|
+
- **라이브러리 프로젝트**: `private: true`가 아닌 패키지가 1개 이상
|
|
67
92
|
- **소비앱**: 모든 패키지가 `private: true`
|
|
68
93
|
|
|
69
|
-
|
|
70
|
-
- `README.md` → `{패키지 경로}/README.md`
|
|
71
|
-
- 분량이 많은 경우 `{패키지 경로}/docs/*.md`
|
|
72
|
-
- 단일 패키지 프로젝트면 루트가 곧 패키지 경로다 (`./README.md`, `./docs/`)
|
|
73
|
-
|
|
74
|
-
`private: true` 패키지는 README.md / docs/를 생성하지 않는다 (CLAUDE.md만).
|
|
94
|
+
## Step 2: 처리 대상 결정
|
|
75
95
|
|
|
76
|
-
|
|
96
|
+
인자 유무와 워크스페이스 구성으로 **처리 대상 패키지 경로 목록**을 확정한다. 단일 패키지 프로젝트는 루트를 "가상 패키지"로 취급하여 동일 프로세스를 적용한다 (자기참조 없음).
|
|
77
97
|
|
|
78
|
-
|
|
98
|
+
| 경우 | 처리 대상 | Step 4 수행 |
|
|
99
|
+
|------|-----------|-------------|
|
|
100
|
+
| 인자 있음 | `packages/{인자}/package.json`이 존재하면 해당 1개 경로. 없으면 사용자에게 알리고 종료. | 건너뜀 |
|
|
101
|
+
| 인자 없음 + 모노레포 | `packages/` 하위 모든 패키지 경로 | 수행 |
|
|
102
|
+
| 인자 없음 + 단일 패키지 | 루트 경로 1개 (루트 = 패키지) | 건너뜀 |
|
|
79
103
|
|
|
80
|
-
|
|
81
|
-
존재하면 해당 패키지에 대해 subagent 1개를 실행한다 (3단계의 subagent 프롬프트와 동일).
|
|
82
|
-
root 문서는 생성·변경하지 않는다.
|
|
104
|
+
## Step 3: 각 패키지 처리
|
|
83
105
|
|
|
84
|
-
###
|
|
106
|
+
### 3-1. 소스 병합
|
|
85
107
|
|
|
86
|
-
|
|
87
|
-
패키지별 CLAUDE.md는 생성하지 않는다. 바로 4단계로 진행하여 root 문서를 생성한다.
|
|
88
|
-
라이브러리 프로젝트인 경우 `package-doc-gen.md`의 Step 2~4를 root에 직접 적용하여 루트의 `README.md` (+ 분량이 많으면 `docs/*.md`)를 생성한다.
|
|
108
|
+
subagent가 개별 파일을 하나씩 Read하는 대신 병합 파일 1회 Read로 전체 소스를 파악할 수 있게 한다. 컨텍스트 소비를 대폭 줄이는 핵심 단계이다.
|
|
89
109
|
|
|
90
|
-
|
|
110
|
+
각 패키지에 대해 Bash로 실행 (여러 패키지면 병렬):
|
|
91
111
|
|
|
92
|
-
|
|
112
|
+
```bash
|
|
113
|
+
bash .claude/skills/sd-claude-docs/merge-source.sh {패키지경로} ./tmp/{패키지명}-source.txt
|
|
114
|
+
```
|
|
93
115
|
|
|
94
|
-
|
|
116
|
+
### 3-2. subagent 병렬 실행
|
|
95
117
|
|
|
96
|
-
각
|
|
97
|
-
하나의 메시지에서 모든 패키지의 Agent 호출을 동시에 보낸다.
|
|
118
|
+
처리 대상 목록의 각 경로에 대해 **Agent 도구로 subagent(effort: `low`)를 병렬 실행**한다. 하나의 메시지에서 모든 Agent 호출을 동시에 보낸다.
|
|
98
119
|
|
|
99
|
-
|
|
120
|
+
#### subagent 프롬프트
|
|
100
121
|
|
|
101
122
|
```
|
|
102
|
-
{패키지 경로}의 CLAUDE.md와 README.md/docs를
|
|
123
|
+
{패키지 경로}의 CLAUDE.md와 README.md/docs를 생성·갱신한다.
|
|
103
124
|
|
|
104
|
-
|
|
125
|
+
`.claude/skills/sd-claude-docs/references/package-docs.md`를 읽고 그 지침을 따른다.
|
|
105
126
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
## README.md / docs/ 생성 {`private: true` 패키지이면 이 섹션 전체 생략}
|
|
112
|
-
|
|
113
|
-
`.claude/skills/sd-claude-docs/references/package-doc-gen.md`를 읽고 그 지침을 따른다.
|
|
114
|
-
출력 경로: `{패키지 경로}/` (README.md는 항상, docs/는 분량 분기 조건에 해당될 때)
|
|
127
|
+
전달 사항:
|
|
128
|
+
- 패키지 경로: {패키지 경로}
|
|
129
|
+
- 소스 병합 파일: {./tmp/{패키지명}-source.txt의 절대 경로}
|
|
130
|
+
- 루트 수준 설정 (이 내용과 중복되는 정보는 패키지 CLAUDE.md에 반복하지 않는다):
|
|
131
|
+
{Step 1에서 추출한 코딩 규칙·컴파일러 설정 목록}
|
|
115
132
|
```
|
|
116
133
|
|
|
117
|
-
각 subagent는 소스
|
|
134
|
+
각 subagent는 소스 병합 파일을 한 번 Read하여 CLAUDE.md(Key Patterns)와 README.md/docs(API 문서) 모두에 활용한다.
|
|
118
135
|
|
|
119
136
|
### subagent 반환 정보
|
|
120
137
|
|
|
121
|
-
-
|
|
122
|
-
-
|
|
123
|
-
-
|
|
138
|
+
- 패키지 경로
|
|
139
|
+
- CLAUDE.md 생성/갱신/건너뜀 여부
|
|
140
|
+
- README.md 생성/갱신/건너뜀 여부 + 구조 (README 단독 / README + docs 트리)
|
|
141
|
+
- Entry 수 / 총 API 항목 수
|
|
124
142
|
- 생성된 파일 목록
|
|
125
143
|
|
|
126
|
-
## Step 4:
|
|
144
|
+
## Step 4: 루트 CLAUDE.md 생성
|
|
127
145
|
|
|
128
|
-
|
|
146
|
+
Step 2의 "Step 4 수행" 열이 "수행"인 경우에만 진행한다.
|
|
129
147
|
|
|
130
|
-
1
|
|
148
|
+
### 4-1. 콘텐츠 구성
|
|
131
149
|
|
|
132
|
-
|
|
150
|
+
Step 1 결과와 Step 3의 각 패키지 CLAUDE.md를 조합하여 루트 CLAUDE.md를 생성한다. `.claude/rules/`에서 이미 다루는 주제(1-4에서 감지)는 **제외**한다. 패키지 CLAUDE.md에 기술된 상세(아키텍처, 패턴 등)는 루트에 중복하지 않고, 아키텍처 섹션에서 패키지 간 의존 관계와 역할 요약만 포함한다.
|
|
133
151
|
|
|
134
152
|
#### 포함할 섹션
|
|
135
153
|
|
|
136
|
-
- **프로젝트 정보**: `package.json`의 `name
|
|
137
|
-
- **모노레포 구조**:
|
|
138
|
-
- **기술 스택**:
|
|
139
|
-
- **명령어**: 1-2
|
|
140
|
-
- **아키텍처**:
|
|
141
|
-
- **코딩 규칙**: 1-3
|
|
154
|
+
- **프로젝트 정보**: 루트 `package.json`의 `name`/`description`, 패키지 매니저
|
|
155
|
+
- **모노레포 구조**: 워크스페이스 경로 나열, 각 패키지 10단어 이내 요약
|
|
156
|
+
- **기술 스택**: 주요 프레임워크·번들러·테스트 도구 (최대 10개)
|
|
157
|
+
- **명령어**: 1-2의 스크립트를 카테고리별 bash 코드 블록으로 포매팅, 인라인 주석 추가
|
|
158
|
+
- **아키텍처**: 패키지 간 의존 관계 및 역할 요약
|
|
159
|
+
- **코딩 규칙**: 1-3에서 선별한 규칙을 불릿 리스트로 포매팅
|
|
142
160
|
|
|
143
|
-
실질적 내용이 없는 섹션은 생략한다.
|
|
161
|
+
실질적 내용이 없는 섹션은 생략한다. 필요 시 위 외 섹션도 추가한다 (예: 통합 테스트).
|
|
144
162
|
|
|
145
|
-
|
|
163
|
+
### 4-2. 병합
|
|
146
164
|
|
|
147
|
-
|
|
148
|
-
- **기존 파일이 있는 경우**:
|
|
149
|
-
1. 기존 파일을 읽는다
|
|
150
|
-
2. 새 콘텐츠와 기존 콘텐츠를 섹션(`##` 제목) 단위로 비교한다
|
|
151
|
-
3. 병합 규칙:
|
|
152
|
-
- 생성된 섹션과 동일한 주제의 기존 섹션 → 새 콘텐츠로 **대체**
|
|
153
|
-
- 생성된 대응 섹션이 없는 기존 섹션 → 그대로 **보존**
|
|
154
|
-
- 기존 섹션의 위치를 보존한다. 새로 생성된 섹션은 반드시 마지막 기존 섹션 뒤에 추가한다
|
|
165
|
+
공통 규칙의 "문서 병합 규칙"을 적용한다.
|
|
155
166
|
|
|
156
|
-
|
|
167
|
+
### 참고 예시
|
|
157
168
|
|
|
158
|
-
|
|
169
|
+
아래 **섹션 구조와 포매팅 스타일**을 따른다.
|
|
159
170
|
|
|
160
171
|
````markdown
|
|
161
172
|
# Simplysm
|
|
@@ -164,8 +175,6 @@ pnpm 모노레포. 패키지 경로: `packages/*`, 테스트: `tests/*`
|
|
|
164
175
|
|
|
165
176
|
## 명령어
|
|
166
177
|
|
|
167
|
-
모든 명령어는 내부적으로 `pnpm sd-cli <command>`를 실행한다.
|
|
168
|
-
|
|
169
178
|
### 개발
|
|
170
179
|
|
|
171
180
|
```bash
|
|
@@ -176,7 +185,7 @@ pnpm watch [targets..] # 라이브러리 패키지를 watch
|
|
|
176
185
|
### 코드 품질
|
|
177
186
|
|
|
178
187
|
```bash
|
|
179
|
-
pnpm check [targets..] # 전체 검사
|
|
188
|
+
pnpm check [targets..] # 전체 검사
|
|
180
189
|
pnpm typecheck [targets..] # TypeScript 타입 체크
|
|
181
190
|
```
|
|
182
191
|
|
|
@@ -186,7 +195,7 @@ pnpm typecheck [targets..] # TypeScript 타입 체크
|
|
|
186
195
|
|
|
187
196
|
```
|
|
188
197
|
UI: angular (Angular)
|
|
189
|
-
서비스: service-server
|
|
198
|
+
서비스: service-server / service-client / service-common
|
|
190
199
|
코어: core-common (중립) / core-browser / core-node
|
|
191
200
|
```
|
|
192
201
|
|
|
@@ -201,20 +210,20 @@ UI: angular (Angular)
|
|
|
201
210
|
```markdown
|
|
202
211
|
## sd-claude-docs 결과
|
|
203
212
|
|
|
204
|
-
| 패키지 | CLAUDE.md | README.md | 구조 |
|
|
213
|
+
| 패키지 | CLAUDE.md | README.md | 구조 | Entry / API |
|
|
205
214
|
|--------|-----------|-----------|------|-------------|
|
|
206
215
|
| root | 생성 | — | — | — |
|
|
207
|
-
| @simplysm/core-common | 갱신 | 갱신 | README 단독 | 35 |
|
|
208
|
-
| @simplysm/angular | 갱신 | 갱신 | README + docs
|
|
209
|
-
| @simplysm/storage | 생성 | 생성 | README 단독 | 8 |
|
|
216
|
+
| @simplysm/core-common | 갱신 | 갱신 | README 단독 | 8 / 35 |
|
|
217
|
+
| @simplysm/angular | 갱신 | 갱신 | README + docs 트리 | 72 / 126 |
|
|
210
218
|
| @simplysm/internal | 생성 | — (private) | — | — |
|
|
211
219
|
|
|
212
220
|
### 생성된 파일 목록
|
|
213
221
|
- CLAUDE.md (root)
|
|
214
222
|
- packages/core-common/CLAUDE.md
|
|
215
223
|
- packages/core-common/README.md
|
|
224
|
+
- packages/core-common/docs/utils/string-utils.md
|
|
216
225
|
- packages/angular/CLAUDE.md
|
|
217
226
|
- packages/angular/README.md
|
|
218
|
-
- packages/angular/docs/
|
|
227
|
+
- packages/angular/docs/{category}/{entry}.md …
|
|
219
228
|
- ...
|
|
220
229
|
```
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# 패키지 소스 파일을 하나의 텍스트 파일로 병합
|
|
3
|
+
# Usage: merge-source.sh <패키지경로> <출력파일경로>
|
|
4
|
+
|
|
5
|
+
pkg_path="$1"
|
|
6
|
+
output="$2"
|
|
7
|
+
|
|
8
|
+
if [ -z "$pkg_path" ] || [ -z "$output" ]; then
|
|
9
|
+
echo "Usage: $0 <package-path> <output-file>" >&2
|
|
10
|
+
exit 1
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
mkdir -p "$(dirname "$output")"
|
|
14
|
+
|
|
15
|
+
files=$(find "$pkg_path/src" -name "*.ts" 2>/dev/null | sort)
|
|
16
|
+
[ -d "$pkg_path/scss" ] && files+=$'\n'$(find "$pkg_path/scss" -name "*.scss" 2>/dev/null | sort)
|
|
17
|
+
|
|
18
|
+
echo "$files" | while IFS= read -r f; do
|
|
19
|
+
[ -z "$f" ] && continue
|
|
20
|
+
echo "=== $f ==="
|
|
21
|
+
cat "$f"
|
|
22
|
+
echo
|
|
23
|
+
done > "$output"
|