@simplysm/sd-claude 14.0.42 → 14.0.44
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/claude/references/sd-simplysm14/angular/docs/directives.md +74 -3
- package/claude/references/sd-simplysm14/angular/docs/features.md +64 -14
- package/claude/references/sd-simplysm14/angular/docs/plugins.md +2 -90
- package/claude/references/sd-simplysm14/angular/docs/providers.md +2 -2
- package/claude/references/sd-simplysm14/angular/docs/type-utilities.md +1 -2
- package/claude/references/sd-simplysm14/angular/docs/ui-data.md +103 -23
- package/claude/references/sd-simplysm14/angular/docs/ui-form.md +173 -28
- package/claude/references/sd-simplysm14/angular/docs/ui-layout.md +19 -4
- package/claude/references/sd-simplysm14/angular/docs/ui-navigation.md +20 -2
- package/claude/references/sd-simplysm14/angular/docs/ui-overlay.md +23 -14
- package/claude/references/sd-simplysm14/angular/docs/ui-visual.md +15 -7
- package/claude/references/sd-simplysm14/angular/docs/utils.md +1 -1
- package/claude/references/sd-simplysm14/angular/usage.md +59 -15
- package/claude/references/sd-simplysm14/capacitor-plugin-auto-update/usage.md +1 -1
- package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/file-operations.md +154 -0
- package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/permissions.md +84 -0
- package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/storage-paths.md +107 -0
- package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/types.md +83 -0
- package/claude/references/sd-simplysm14/capacitor-plugin-file-system/usage.md +83 -128
- package/claude/references/sd-simplysm14/capacitor-plugin-usb-storage/usage.md +99 -1
- package/claude/references/sd-simplysm14/core-node/docs/child-process.md +182 -0
- package/claude/references/sd-simplysm14/core-node/docs/features.md +1 -1
- package/claude/references/sd-simplysm14/core-node/docs/file-system.md +509 -0
- package/claude/references/sd-simplysm14/core-node/docs/file-watching.md +139 -0
- package/claude/references/sd-simplysm14/core-node/docs/logging.md +180 -0
- package/claude/references/sd-simplysm14/core-node/docs/path.md +176 -0
- package/claude/references/sd-simplysm14/core-node/docs/worker-threads.md +334 -0
- package/claude/references/sd-simplysm14/core-node/usage.md +192 -96
- package/claude/references/sd-simplysm14/excel/docs/core-classes.md +33 -14
- package/claude/references/sd-simplysm14/excel/usage.md +47 -45
- package/claude/references/sd-simplysm14/lint/usage.md +3 -2
- package/claude/references/sd-simplysm14/orm-common/docs/queryable-executable.md +30 -35
- package/claude/references/sd-simplysm14/orm-common/usage.md +9 -8
- package/claude/references/sd-simplysm14/sd-claude/docs/assets.md +43 -34
- package/claude/references/sd-simplysm14/sd-claude/docs/cli.md +1 -1
- package/claude/references/sd-simplysm14/sd-claude/docs/hooks.md +20 -2
- package/claude/references/sd-simplysm14/sd-claude/docs/scripts.md +5 -18
- package/claude/references/sd-simplysm14/sd-claude/usage.md +6 -5
- package/claude/references/sd-simplysm14/sd-cli/usage.md +176 -1
- package/claude/references/sd-simplysm14/service-client/usage.md +126 -61
- package/claude/references/sd-simplysm14/service-common/usage.md +28 -28
- package/claude/references/sd-simplysm14/storage/usage.md +123 -30
- package/claude/{rules → references}/sd-simplysm14.md +1 -1
- package/claude/references/sd-testing.md +100 -4
- package/claude/rules/sd-claude-rules.md +21 -5
- package/claude/sd-check-write.py +1 -1
- package/claude/skills/sd-check/SKILL.md +7 -4
- package/claude/skills/sd-claude-docs/SKILL.md +7 -4
- package/claude/skills/sd-claude-docs/references/package-doc-gen.md +30 -7
- package/claude/skills/sd-commit/SKILL.md +2 -0
- package/claude/skills/sd-debug/SKILL.md +1 -1
- package/claude/skills/sd-deliverable/SKILL.md +2 -0
- package/claude/skills/sd-dev/SKILL.md +1 -1
- package/claude/skills/sd-doc-extract/SKILL.md +2 -0
- package/claude/{references/sd-debug.md → skills/sd-inner-debug/SKILL.md} +16 -20
- package/claude/{references/sd-review.md → skills/sd-inner-review/SKILL.md} +9 -4
- package/claude/skills/sd-issue/SKILL.md +2 -0
- package/claude/skills/sd-outlook/SKILL.md +2 -0
- package/claude/skills/sd-plan/SKILL.md +1 -1
- package/claude/skills/sd-prompt/SKILL.md +2 -2
- package/claude/skills/sd-refactor/SKILL.md +2 -2
- package/claude/skills/sd-review/SKILL.md +1 -1
- package/claude/skills/sd-tdd/SKILL.md +7 -7
- package/claude/skills/sd-use/SKILL.md +2 -0
- package/claude/skills/sd-wbs/SKILL.md +41 -18
- package/package.json +1 -1
- /package/claude/{references → rules}/sd-clarify.md +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @simplysm/lint
|
|
2
2
|
|
|
3
|
-
Simplysm 모노레포 전용 ESLint 플러그인 및 공유 Flat Config 설정. 커스텀 규칙
|
|
3
|
+
Simplysm 모노레포 전용 ESLint 플러그인 및 공유 Flat Config 설정. 커스텀 규칙 8개와 권장 설정을 제공한다.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -14,7 +14,7 @@ npm install @simplysm/lint
|
|
|
14
14
|
|
|
15
15
|
| API | Type | Description |
|
|
16
16
|
|-----|------|-------------|
|
|
17
|
-
| `default` | object | `{ rules: {...} }` 형태의 ESLint 플러그인 객체.
|
|
17
|
+
| `default` | object | `{ rules: {...} }` 형태의 ESLint 플러그인 객체. 8개의 커스텀 규칙을 포함한다 |
|
|
18
18
|
|
|
19
19
|
#### Rules
|
|
20
20
|
|
|
@@ -26,6 +26,7 @@ npm install @simplysm/lint
|
|
|
26
26
|
| `ts-no-unused-injects` | problem | autofix | 미사용 Angular `inject()` 필드를 감지하여 제거한다. 클래스 내 `inject()` 호출로 초기화된 프로퍼티 중 다른 곳에서 참조되지 않는 필드를 보고 |
|
|
27
27
|
| `ts-no-unused-protected-readonly` | problem | autofix | Angular `@Component` 클래스의 미사용 `protected readonly` 필드를 감지하여 제거한다. 인라인 템플릿과 클래스 본문 모두에서 참조 여부를 확인 |
|
|
28
28
|
| `ng-template-no-todo-comments` | problem | - | HTML 템플릿 내 `<!-- TODO: ... -->` 주석을 경고한다. raw text regex 방식으로 동작 |
|
|
29
|
+
| `ng-template-no-strict-null-check` | problem | - | Angular 템플릿에서 `=== null`, `!== null`, `=== undefined`, `!== undefined` 사용을 금지한다. `== null` / `!= null`로 통일하도록 강제. autofix 미제공(인라인 템플릿 offset 매핑 문제) |
|
|
29
30
|
| `ng-template-sd-require-binding-attrs` | problem | autofix | `sd-*` 컴포넌트에서 허용 목록 외 plain attribute 사용을 금지하고 Angular property binding(`[attr]="..."`)을 강제한다 |
|
|
30
31
|
|
|
31
32
|
#### `ng-template-sd-require-binding-attrs` Options
|
|
@@ -59,11 +59,11 @@ export class Queryable<TData extends DataRecord, TFrom extends TableBuilder | ne
|
|
|
59
59
|
|
|
60
60
|
// UPDATE
|
|
61
61
|
update(recordFwd: (cols: QueryableRecord<TData>) => QueryableWriteRecord<TFrom["$inferUpdate"]>): Promise<void>;
|
|
62
|
-
update<K>(recordFwd: ..., outputColumns: K[]): Promise<Pick<TFrom["$
|
|
62
|
+
update<K>(recordFwd: ..., outputColumns: K[]): Promise<Pick<TFrom["$inferColumns"], K>[]>;
|
|
63
63
|
|
|
64
64
|
// DELETE
|
|
65
65
|
delete(): Promise<void>;
|
|
66
|
-
delete<K>(outputColumns: K[]): Promise<Pick<TFrom["$
|
|
66
|
+
delete<K>(outputColumns: K[]): Promise<Pick<TFrom["$inferColumns"], K>[]>;
|
|
67
67
|
|
|
68
68
|
// UPSERT
|
|
69
69
|
upsert(updateFn: (cols: QueryableRecord<TData>) => QueryableWriteRecord<TFrom["$inferUpdate"]>): Promise<void>;
|
|
@@ -129,11 +129,19 @@ Queryable의 column 프록시 레코드 타입. 각 column이 `ExprUnit`으로
|
|
|
129
129
|
export type QueryableRecord<TData extends DataRecord> = {
|
|
130
130
|
[K in keyof TData]: TData[K] extends ColumnPrimitive
|
|
131
131
|
? ExprUnit<TData[K]>
|
|
132
|
-
: TData[K] extends (infer U
|
|
133
|
-
?
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
132
|
+
: TData[K] extends (infer U)[]
|
|
133
|
+
? U extends DataRecord
|
|
134
|
+
? QueryableRecord<U>[]
|
|
135
|
+
: never
|
|
136
|
+
: TData[K] extends (infer U)[] | undefined
|
|
137
|
+
? U extends DataRecord
|
|
138
|
+
? QueryableRecord<U>[] | undefined
|
|
139
|
+
: never
|
|
140
|
+
: TData[K] extends DataRecord
|
|
141
|
+
? QueryableRecord<TData[K]>
|
|
142
|
+
: TData[K] extends DataRecord | undefined
|
|
143
|
+
? QueryableRecord<Exclude<TData[K], undefined>> | undefined
|
|
144
|
+
: never;
|
|
137
145
|
};
|
|
138
146
|
```
|
|
139
147
|
|
|
@@ -143,23 +151,7 @@ UPDATE/INSERT용 column 레코드 타입. `ExprUnit` 또는 리터럴 값을 받
|
|
|
143
151
|
|
|
144
152
|
```typescript
|
|
145
153
|
export type QueryableWriteRecord<TData> = {
|
|
146
|
-
[K in keyof TData]: ExprInput<TData[K]
|
|
147
|
-
};
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
## `NullableQueryableRecord`
|
|
151
|
-
|
|
152
|
-
모든 column이 nullable인 Queryable 레코드 타입.
|
|
153
|
-
|
|
154
|
-
```typescript
|
|
155
|
-
export type NullableQueryableRecord<TData extends DataRecord> = {
|
|
156
|
-
[K in keyof TData]: TData[K] extends ColumnPrimitive
|
|
157
|
-
? ExprUnit<TData[K] | undefined>
|
|
158
|
-
: TData[K] extends (infer U extends DataRecord)[]
|
|
159
|
-
? [NullableQueryableRecord<U>]
|
|
160
|
-
: TData[K] extends DataRecord
|
|
161
|
-
? NullableQueryableRecord<TData[K]>
|
|
162
|
-
: ExprUnit<(TData[K] & ColumnPrimitive) | undefined>;
|
|
154
|
+
[K in keyof TData]: TData[K] extends ColumnPrimitive ? ExprInput<TData[K]> : never;
|
|
163
155
|
};
|
|
164
156
|
```
|
|
165
157
|
|
|
@@ -169,25 +161,28 @@ QueryableRecord에서 실제 데이터 타입을 추출한다.
|
|
|
169
161
|
|
|
170
162
|
```typescript
|
|
171
163
|
export type UnwrapQueryableRecord<R> = {
|
|
172
|
-
[K in keyof R]: R[K] extends ExprUnit<infer T>
|
|
173
|
-
|
|
174
|
-
: R[K] extends
|
|
175
|
-
|
|
164
|
+
[K in keyof R as K extends symbol ? never : K]: R[K] extends ExprUnit<infer T>
|
|
165
|
+
? T
|
|
166
|
+
: NonNullable<R[K]> extends (infer U)[]
|
|
167
|
+
? U extends Record<string, any>
|
|
168
|
+
? UnwrapQueryableRecord<U>[] | Extract<R[K], undefined>
|
|
169
|
+
: never
|
|
170
|
+
: NonNullable<R[K]> extends Record<string, any>
|
|
171
|
+
? UnwrapQueryableRecord<NonNullable<R[K]>> | Extract<R[K], undefined>
|
|
172
|
+
: never;
|
|
176
173
|
};
|
|
177
174
|
```
|
|
178
175
|
|
|
179
176
|
## `PathProxy`
|
|
180
177
|
|
|
181
|
-
include()에서 관계 경로를 타입 안전하게 지정하기 위한 프록시 타입.
|
|
178
|
+
include()에서 관계 경로를 타입 안전하게 지정하기 위한 프록시 타입. `ColumnPrimitive`가 아닌 필드(FK, FKT 관계)만 접근 가능하다.
|
|
182
179
|
|
|
183
180
|
```typescript
|
|
184
181
|
export type PathProxy<TObject> = {
|
|
185
|
-
[K in keyof TObject
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
: PathProxy<TObject[K]>;
|
|
190
|
-
} & { [PATH_SYMBOL]: string[] };
|
|
182
|
+
[K in keyof TObject as TObject[K] extends ColumnPrimitive ? never : K]-?: PathProxy<
|
|
183
|
+
UnwrapArray<TObject[K]>
|
|
184
|
+
>;
|
|
185
|
+
} & { readonly [PATH_SYMBOL]: string[] };
|
|
191
186
|
```
|
|
192
187
|
|
|
193
188
|
## `Executable`
|
|
@@ -22,7 +22,7 @@ npm install @simplysm/orm-common
|
|
|
22
22
|
| `DbErrorCode` | enum | 트랜잭션 에러 코드 (NO_ACTIVE_TRANSACTION, DEADLOCK 등) |
|
|
23
23
|
| `DbTransactionError` | class | DBMS 네이티브 에러를 표준 에러 코드로 래핑하는 에러 클래스 |
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
See [docs/core.md](./docs/core.md) for detailed API documentation.
|
|
26
26
|
|
|
27
27
|
### Queryable / Executable
|
|
28
28
|
|
|
@@ -33,7 +33,6 @@ npm install @simplysm/orm-common
|
|
|
33
33
|
| `getMatchedPrimaryKeys` | function | FK column 배열과 대상 테이블 PK를 매칭하여 PK column 이름 반환 |
|
|
34
34
|
| `QueryableRecord` | type | Queryable column 프록시 레코드 타입 |
|
|
35
35
|
| `QueryableWriteRecord` | type | UPDATE/INSERT용 column 레코드 타입 |
|
|
36
|
-
| `NullableQueryableRecord` | type | 모든 column이 nullable인 Queryable 레코드 타입 |
|
|
37
36
|
| `UnwrapQueryableRecord` | type | QueryableRecord에서 실제 데이터 타입 추출 |
|
|
38
37
|
| `PathProxy` | type | include()에서 관계 경로를 타입 안전하게 지정하기 위한 프록시 타입 |
|
|
39
38
|
| `Executable` | class | Stored Procedure 실행 래퍼 클래스 |
|
|
@@ -41,7 +40,7 @@ npm install @simplysm/orm-common
|
|
|
41
40
|
| `parseSearchQuery` | function | 검색 쿼리 문자열을 SQL LIKE 패턴으로 파싱 |
|
|
42
41
|
| `ParsedSearchQuery` | interface | parseSearchQuery 결과 타입 (or, must, not 배열) |
|
|
43
42
|
|
|
44
|
-
|
|
43
|
+
See [docs/queryable-executable.md](./docs/queryable-executable.md) for detailed API documentation.
|
|
45
44
|
|
|
46
45
|
### Expression
|
|
47
46
|
|
|
@@ -54,7 +53,7 @@ npm install @simplysm/orm-common
|
|
|
54
53
|
| `ExprInput` | type | ExprUnit 또는 리터럴 값을 받는 입력 타입 |
|
|
55
54
|
| `toExpr` | function | ExprInput을 Expr AST로 변환하는 내부 헬퍼 (커스텀 빌더 작성 시 사용) |
|
|
56
55
|
|
|
57
|
-
|
|
56
|
+
See [docs/expression.md](./docs/expression.md) for detailed API documentation.
|
|
58
57
|
|
|
59
58
|
### Schema Builders
|
|
60
59
|
|
|
@@ -88,7 +87,7 @@ npm install @simplysm/orm-common
|
|
|
88
87
|
| `ExtractRelationTargetResult` | type | FKTarget에서 대상 타입 추출 (배열/단일) |
|
|
89
88
|
| `InferDeepRelations` | type | 관계 정의에서 심층 타입 추론 |
|
|
90
89
|
|
|
91
|
-
|
|
90
|
+
See [docs/schema-builders.md](./docs/schema-builders.md) for detailed API documentation.
|
|
92
91
|
|
|
93
92
|
### Models
|
|
94
93
|
|
|
@@ -96,7 +95,7 @@ npm install @simplysm/orm-common
|
|
|
96
95
|
|-----|------|-------------|
|
|
97
96
|
| `_Migration` | const | 시스템 마이그레이션 테이블 정의 (TableBuilder 인스턴스) |
|
|
98
97
|
|
|
99
|
-
|
|
98
|
+
See [docs/models.md](./docs/models.md) for detailed API documentation.
|
|
100
99
|
|
|
101
100
|
### Query Builder
|
|
102
101
|
|
|
@@ -112,7 +111,7 @@ npm install @simplysm/orm-common
|
|
|
112
111
|
| `PostgresqlQueryBuilder` | class | PostgreSQL용 QueryBuilder |
|
|
113
112
|
| `PostgresqlExprRenderer` | class | PostgreSQL용 ExprRenderer |
|
|
114
113
|
|
|
115
|
-
|
|
114
|
+
See [docs/query-builder.md](./docs/query-builder.md) for detailed API documentation.
|
|
116
115
|
|
|
117
116
|
### Types
|
|
118
117
|
|
|
@@ -142,18 +141,20 @@ npm install @simplysm/orm-common
|
|
|
142
141
|
| `WinFn` | type | Window 함수 유니온 타입 |
|
|
143
142
|
| `QueryDef` | type | 모든 쿼리 정의의 유니온 타입 |
|
|
144
143
|
| `SelectQueryDef` | interface | SELECT 쿼리 정의 |
|
|
144
|
+
| `SelectQueryDefJoin` | interface | SELECT 쿼리 JOIN 정의 (SelectQueryDef 확장) |
|
|
145
145
|
| `InsertQueryDef` | interface | INSERT 쿼리 정의 |
|
|
146
146
|
| `UpdateQueryDef` | interface | UPDATE 쿼리 정의 |
|
|
147
147
|
| `DeleteQueryDef` | interface | DELETE 쿼리 정의 |
|
|
148
148
|
| `UpsertQueryDef` | interface | UPSERT 쿼리 정의 |
|
|
149
149
|
| `QueryDefObjectName` | interface | 테이블/뷰 이름 정의 (database, schema, name) |
|
|
150
|
+
| `CudOutputDef` | interface | INSERT/UPDATE/DELETE output 정의 (columns, pkColNames, aiColName) |
|
|
150
151
|
| `DDL_TYPES` | const | DDL 타입 문자열 목록 |
|
|
151
152
|
| `DdlType` | type | DDL 타입 유니온 |
|
|
152
153
|
| 60+ `Expr*` interfaces | interface | 각 표현식 AST 인터페이스 (ExprColumn, ExprValue, ExprEq, ...) |
|
|
153
154
|
| 13+ `WinFn*` interfaces | interface | Window 함수 AST 인터페이스 |
|
|
154
155
|
| DDL QueryDef interfaces | interface | DDL 쿼리 정의 인터페이스 (CreateTable, DropTable, ...) |
|
|
155
156
|
|
|
156
|
-
|
|
157
|
+
See [docs/types.md](./docs/types.md) for detailed API documentation.
|
|
157
158
|
|
|
158
159
|
## Usage Examples
|
|
159
160
|
|
|
@@ -9,15 +9,16 @@ claude/
|
|
|
9
9
|
├── references/ ← 스킬/규칙에서 참조하는 공유 문서
|
|
10
10
|
├── rules/ ← Claude Code 규칙 파일
|
|
11
11
|
├── skills/ ← 스킬 파일 디렉토리
|
|
12
|
-
├── sd-check-bash.py
|
|
13
|
-
├── sd-check-
|
|
14
|
-
├── sd-
|
|
15
|
-
|
|
12
|
+
├── sd-check-bash.py ← 훅 스크립트
|
|
13
|
+
├── sd-check-forbidden-files.py ← 훅 스크립트
|
|
14
|
+
├── sd-check-write.py ← 훅 스크립트
|
|
15
|
+
├── sd-session-start.sh ← 훅 스크립트
|
|
16
|
+
└── sd-statusline.py ← 훅 스크립트
|
|
16
17
|
```
|
|
17
18
|
|
|
18
19
|
## `claude/skills/`
|
|
19
20
|
|
|
20
|
-
|
|
21
|
+
다수의 스킬 디렉토리. `sd-*` 접두어 스킬은 postinstall로 소비 프로젝트에 배포되고, `my-apk-decompile/`·`playwright-cli/` 같이 `sd-*`로 시작하지 않는 스킬은 모노레포 로컬 전용이다. 각 스킬은 아래 파일을 포함한다:
|
|
21
22
|
|
|
22
23
|
| 파일 | 필수 | Description |
|
|
23
24
|
| --------------- | ---- | ------------------------------------------------------------ |
|
|
@@ -27,24 +28,28 @@ claude/
|
|
|
27
28
|
|
|
28
29
|
### 스킬 목록
|
|
29
30
|
|
|
30
|
-
| 디렉토리
|
|
31
|
-
|
|
|
32
|
-
| `
|
|
33
|
-
| `
|
|
34
|
-
| `sd-
|
|
35
|
-
| `sd-
|
|
36
|
-
| `sd-
|
|
37
|
-
| `sd-
|
|
38
|
-
| `sd-
|
|
39
|
-
| `sd-
|
|
40
|
-
| `sd-
|
|
41
|
-
| `sd-
|
|
42
|
-
| `sd-
|
|
43
|
-
| `sd-
|
|
44
|
-
| `sd-
|
|
45
|
-
| `sd-
|
|
46
|
-
| `sd-
|
|
47
|
-
| `sd-
|
|
31
|
+
| 디렉토리 | 스킬 이름 | Description |
|
|
32
|
+
| --------------------- | ------------------ | -------------------------------------------------- |
|
|
33
|
+
| `my-apk-decompile/` | my-apk-decompile | APK 파일 디컴파일 및 소스코드 분석 |
|
|
34
|
+
| `playwright-cli/` | playwright-cli | 브라우저 자동화 및 Playwright 테스트 |
|
|
35
|
+
| `sd-check/` | sd-check | typecheck/lint/test 실행 및 에러 해결 |
|
|
36
|
+
| `sd-claude-docs/` | sd-claude-docs | CLAUDE.md + usage 문서 동시 생성 |
|
|
37
|
+
| `sd-commit/` | sd-commit | 전체 변경사항에 대한 단일 커밋 생성 |
|
|
38
|
+
| `sd-debug/` | sd-debug | 버그 근본 원인 분석 및 해결책 제안 |
|
|
39
|
+
| `sd-deliverable/` | sd-deliverable | 매뉴얼/SIT 문서 생성 |
|
|
40
|
+
| `sd-dev/` | sd-dev | 통합 개발 오케스트레이터 (요구명세 → TDD → 리뷰) |
|
|
41
|
+
| `sd-doc-extract/` | sd-doc-extract | 문서 파일 텍스트/이미지 추출 (Python) |
|
|
42
|
+
| `sd-inner-debug/` | sd-inner-debug | (내부 전용) 근본 원인 분석(ACH) 로직 |
|
|
43
|
+
| `sd-inner-review/` | sd-inner-review | (내부 전용) 코드 리뷰 분석 로직 |
|
|
44
|
+
| `sd-issue/` | sd-issue | GitHub 이슈 생성 |
|
|
45
|
+
| `sd-outlook/` | sd-outlook | Outlook 메일 검색/다운로드 (Python) |
|
|
46
|
+
| `sd-plan/` | sd-plan | 요구명세/구현계획 작성 |
|
|
47
|
+
| `sd-prompt/` | sd-prompt | 스킬/프롬프트 파일 작성/개선 |
|
|
48
|
+
| `sd-refactor/` | sd-refactor | 리팩토링 분석 리포트 생성 |
|
|
49
|
+
| `sd-review/` | sd-review | 코드 리뷰 리포트 생성 |
|
|
50
|
+
| `sd-tdd/` | sd-tdd | TDD 개발 |
|
|
51
|
+
| `sd-use/` | sd-use | 자연어 → sd-\* 스킬 라우팅 |
|
|
52
|
+
| `sd-wbs/` | sd-wbs | WBS Feature 분해 |
|
|
48
53
|
|
|
49
54
|
### SKILL.md frontmatter 형식
|
|
50
55
|
|
|
@@ -73,17 +78,21 @@ Claude Code 규칙 파일. 세션 시작 시 `sd-session-start.sh`에 의해 읽
|
|
|
73
78
|
|
|
74
79
|
## `claude/references/`
|
|
75
80
|
|
|
76
|
-
스킬과 규칙에서 참조하는 공유 문서. 규칙 파일에서 `Read tool로 읽으라`는 지시로 참조된다.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
|
81
|
-
|
|
82
|
-
| `sd-frontend-design.md` | 프론트엔드 UI 코드 작성 지침
|
|
83
|
-
| `sd-
|
|
84
|
-
| `sd-
|
|
85
|
-
|
|
86
|
-
|
|
81
|
+
스킬과 규칙에서 참조하는 공유 문서. 규칙 파일에서 `Read tool로 읽으라`는 지시로 참조된다. 공유 문서(md파일)와 패키지별 사용 설명서 디렉토리.
|
|
82
|
+
|
|
83
|
+
### 공유 문서
|
|
84
|
+
|
|
85
|
+
| 파일 | Description |
|
|
86
|
+
|------|-------------|
|
|
87
|
+
| `sd-frontend-design.md` | 프론트엔드 UI 코드 작성 지침 |
|
|
88
|
+
| `sd-simplysm14.md` | simplysm 패키지 문서 진입점 |
|
|
89
|
+
| `sd-testing.md` | 테스트 작성 지침 |
|
|
90
|
+
|
|
91
|
+
### 패키지 문서 디렉토리
|
|
92
|
+
|
|
93
|
+
| 디렉토리 | Description |
|
|
94
|
+
|----------|-------------|
|
|
95
|
+
| `sd-simplysm14/` | simplysm v14 패키지별 CLAUDE.md와 usage.md |
|
|
87
96
|
|
|
88
97
|
## 소스 오브 트루스
|
|
89
98
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Hooks
|
|
2
2
|
|
|
3
|
-
`claude/` 디렉토리의 훅
|
|
3
|
+
`claude/` 디렉토리의 훅 스크립트 (총 5개). `postinstall`에 의해 `.claude/`에 설치되고, `settings.json`에 자동 등록되어 Claude Code 세션에서 실행된다.
|
|
4
4
|
|
|
5
5
|
## `sd-session-start.sh`
|
|
6
6
|
|
|
@@ -57,6 +57,24 @@ PreToolUse 훅 (matcher: `Bash`). 금지된 명령어를 차단한다. 명령어
|
|
|
57
57
|
| `npx\s+tsc` | `npx tsc` | `pnpm typecheck` 사용 필수 |
|
|
58
58
|
| `npx\s+eslint` | `npx eslint` | `pnpm lint` 사용 필수 |
|
|
59
59
|
|
|
60
|
+
## `sd-check-forbidden-files.py`
|
|
61
|
+
|
|
62
|
+
PreToolUse 훅 (matcher: `Write|Edit`). `tsconfig.json`, `eslint.config.ts` 등 보호 대상 파일의 수정을 차단한다.
|
|
63
|
+
|
|
64
|
+
```python
|
|
65
|
+
# stdin으로 tool_input JSON을 받아 file_path를 검사
|
|
66
|
+
# 보호 대상 파일이면 stderr에 메시지 출력 후 exit(2)
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
입력: stdin JSON (`tool_input.file_path`)
|
|
70
|
+
|
|
71
|
+
차단 대상 파일:
|
|
72
|
+
|
|
73
|
+
| 파일명 | 이유 |
|
|
74
|
+
|--------|------|
|
|
75
|
+
| `tsconfig.json` | 빌드 설정 보호 |
|
|
76
|
+
| `eslint.config.ts` | 린트 설정 보호 |
|
|
77
|
+
|
|
60
78
|
## `sd-statusline.py`
|
|
61
79
|
|
|
62
80
|
statusLine 훅. Claude Code 상태바에 `폴더 | 모델 | 컨텍스트% | 5h사용량 | 7d사용량 | $추가요금` 형식으로 표시한다.
|
|
@@ -99,7 +117,7 @@ statusLine 훅. Claude Code 상태바에 `폴더 | 모델 | 컨텍스트% | 5h
|
|
|
99
117
|
| Function | Description |
|
|
100
118
|
|----------|-------------|
|
|
101
119
|
| `format_model(model_id)` | 모델 ID를 `Name X.Y` 형식으로 변환 (예: `claude-opus-4-6` → `Opus 4.6`) |
|
|
102
|
-
| `format_remaining(reset_epoch)` | 리셋까지 남은 시간을 `Xd Yh` / `Xh Ym` / `Xm` 형식으로
|
|
120
|
+
| `format_remaining(reset_epoch)` | 리셋까지 남은 시간을 `Xd Yh` / `Xh Ym` / `Xm` 형식으로 변환. 만료 시 `0m` 반환 |
|
|
103
121
|
| `format_rate_limit(rate_limit)` | rate limit을 `X%(남은시간)` 형식으로 변환 |
|
|
104
122
|
| `read_cache()` | 캐시 파일을 읽어 딕셔너리로 반환 |
|
|
105
123
|
| `should_fetch(cache)` | 캐시가 없거나 180초 이상 경과했으면 `True` |
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## `postinstall.mjs`
|
|
6
6
|
|
|
7
|
-
`pnpm install` 후 자동 실행되는 라이프사이클 스크립트. `claude/` 디렉토리의 에셋을 소비 프로젝트의 `.claude/`에
|
|
7
|
+
`pnpm install` 후 자동 실행되는 라이프사이클 스크립트. `claude/` 디렉토리의 에셋을 소비 프로젝트의 `.claude/`에 복사한다. `settings.json`도 `sd-*` 항목과 함께 복사된다.
|
|
8
8
|
|
|
9
9
|
전체 try-catch로 감싸서 실패해도 `pnpm install`을 차단하지 않는다.
|
|
10
10
|
|
|
@@ -14,22 +14,9 @@
|
|
|
14
14
|
2. **자기 자신 설치 방지**: simplysm 모노레포에서 동일 메이저 버전이면 건너뜀
|
|
15
15
|
3. **소스 디렉토리 확인**: `claude/` 디렉토리가 없으면 건너뜀
|
|
16
16
|
4. **cleanSdEntries**: 기존 `.claude/` 내 `sd-*` 항목 삭제
|
|
17
|
-
5. **copySdEntries**: `claude
|
|
18
|
-
6. **setupSettings**: `.claude/settings.json`에 훅 등록
|
|
17
|
+
5. **copySdEntries**: `claude/sd-*` + `settings.json` → `.claude/` 복사
|
|
19
18
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
`settings.json`에 아래 훅을 멱등적으로 등록한다. 기존 항목이 있으면 덮어쓰고, 없으면 추가한다.
|
|
23
|
-
|
|
24
|
-
| Hook Type | Matcher | Command | Description |
|
|
25
|
-
|-----------|---------|---------|-------------|
|
|
26
|
-
| `SessionStart` | `startup\|resume\|clear\|compact` | `bash .claude/sd-session-start.sh` | 세션 시작 시 규칙 파일 경로 출력 |
|
|
27
|
-
| `PreToolUse` | `Write` | `python .claude/sd-check-write.py` | 기존 파일 Write 차단 |
|
|
28
|
-
| `PreToolUse` | `Bash` | `python .claude/sd-check-bash.py` | 금지 명령어 차단 (git, cd, npx tsc/eslint) |
|
|
29
|
-
| `SubagentStart` | (없음) | `bash .claude/sd-session-start.sh` | 서브에이전트 시작 시 규칙 파일 경로 출력 |
|
|
30
|
-
| `statusLine` | — | `python .claude/sd-statusline.py` | 상태바 표시 |
|
|
31
|
-
|
|
32
|
-
마이그레이션: 루트 레벨에 잘못 위치한 `SessionStart` 키를 `hooks.SessionStart`로 이동한다.
|
|
19
|
+
`settings.json`은 훅이 미리 등록된 정적 파일로 관리된다. 소비 프로젝트에서 커스텀 훅이 필요하면 `settings.local.json`을 사용한다.
|
|
33
20
|
|
|
34
21
|
### 내부 함수
|
|
35
22
|
|
|
@@ -96,8 +83,8 @@ function setupSettings(targetDir) → void
|
|
|
96
83
|
|
|
97
84
|
동작:
|
|
98
85
|
1. 기존 `claude/` 디렉토리 삭제
|
|
99
|
-
2. 루트 `.claude/`에서 `sd-*`
|
|
100
|
-
3. 수집된 항목을 `claude/`로 복사
|
|
86
|
+
2. 루트 `.claude/`에서 `sd-*` 항목 수집, `settings.json` 포함
|
|
87
|
+
3. 수집된 항목을 `claude/`로 복사 (단, `SKILL.eval.md`와 `eval_*` 파일은 제외)
|
|
101
88
|
|
|
102
89
|
---
|
|
103
90
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @simplysm/sd-claude
|
|
2
2
|
|
|
3
|
-
Claude Code 에셋을 소비 프로젝트의 `.claude/` 디렉토리에 자동 설치하는 패키지.
|
|
3
|
+
Claude Code 에셋을 소비 프로젝트의 `.claude/` 디렉토리에 자동 설치하는 패키지. 다수의 스킬(`sd-*` 접두어 포함), 2개 rules 파일, 참조 문서, 훅 스크립트를 포함한다. CLI(`sd-claude`)로 멀티 계정 전환 기능도 제공한다.
|
|
4
4
|
|
|
5
5
|
TypeScript 소스 없음. `scripts/`는 Node.js `.mjs` 스크립트이고, `claude/`는 배포 에셋 디렉토리다.
|
|
6
6
|
|
|
@@ -10,7 +10,7 @@ TypeScript 소스 없음. `scripts/`는 Node.js `.mjs` 스크립트이고, `clau
|
|
|
10
10
|
npm install @simplysm/sd-claude
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
설치 시 `postinstall` 스크립트가 자동 실행되어, `claude
|
|
13
|
+
설치 시 `postinstall` 스크립트가 자동 실행되어, `claude/sd-*` 에셋과 `settings.json`을 프로젝트 루트 `.claude/`에 복사한다. `settings.json`은 훅이 미리 등록된 정적 파일이다.
|
|
14
14
|
|
|
15
15
|
## API Overview
|
|
16
16
|
|
|
@@ -27,7 +27,7 @@ npm install @simplysm/sd-claude
|
|
|
27
27
|
|
|
28
28
|
| API | Type | Description |
|
|
29
29
|
|-----|------|-------------|
|
|
30
|
-
| `postinstall.mjs` | lifecycle script | `pnpm install` 후
|
|
30
|
+
| `postinstall.mjs` | lifecycle script | `pnpm install` 후 `claude/sd-*` 및 `settings.json`을 소비 프로젝트 `.claude/`에 복사 |
|
|
31
31
|
| `sync.mjs` | lifecycle script | `prepack` 시 루트 `.claude/sd-*` 에셋을 `claude/`로 동기화 |
|
|
32
32
|
| `forEachSdEntry(dir, callback)` | function | 디렉토리에서 `sd-*` 항목을 2단계 깊이로 탐색하며 콜백 호출 |
|
|
33
33
|
| `collectSdEntries(dir)` | function | `forEachSdEntry`로 수집한 `sd-*` 항목의 상대 경로 배열 반환 |
|
|
@@ -41,6 +41,7 @@ npm install @simplysm/sd-claude
|
|
|
41
41
|
| `sd-session-start.sh` | SessionStart / SubagentStart hook | 세션 시작 시 `.claude/rules/*.md`와 `CLAUDE.md` 경로를 출력하여 Claude가 읽도록 안내 |
|
|
42
42
|
| `sd-check-write.py` | PreToolUse hook (Write) | 기존 파일에 Write 도구 사용 시 차단하고 Edit 도구 사용을 안내 |
|
|
43
43
|
| `sd-check-bash.py` | PreToolUse hook (Bash) | 금지된 명령어 차단 (git stash/checkout/restore/reset/clean, cd, npx tsc, npx eslint) |
|
|
44
|
+
| `sd-check-forbidden-files.py` | PreToolUse hook (Write/Edit) | `tsconfig.json`, `eslint.config.ts` 등 보호 파일 수정 차단 |
|
|
44
45
|
| `sd-statusline.py` | statusLine hook | 상태바에 `폴더 | 모델 | 컨텍스트% | 5h사용량 | 7d사용량 | $추가요금` 표시 |
|
|
45
46
|
|
|
46
47
|
→ See [docs/hooks.md](./docs/hooks.md) for details.
|
|
@@ -49,9 +50,9 @@ npm install @simplysm/sd-claude
|
|
|
49
50
|
|
|
50
51
|
| API | Type | Description |
|
|
51
52
|
|-----|------|-------------|
|
|
52
|
-
| `claude/skills/` | asset directory | 16개 sd-* 스킬 디렉토리 (각 스킬은 `SKILL.md` + 선택적 `references/` 포함) |
|
|
53
|
+
| `claude/skills/` | asset directory | 16개 sd-* 스킬 디렉토리 (각 스킬은 `SKILL.md` + 선택적 `SKILL.eval.md`와 `references/` 포함) |
|
|
53
54
|
| `claude/rules/` | asset directory | Claude Code 규칙 파일 (`sd-claude-rules.md`, `sd-options.md`) |
|
|
54
|
-
| `claude/references/` | asset directory | 스킬/규칙에서 참조하는 공유 문서
|
|
55
|
+
| `claude/references/` | asset directory | 스킬/규칙에서 참조하는 공유 문서 및 패키지 문서 디렉토리 |
|
|
55
56
|
|
|
56
57
|
→ See [docs/assets.md](./docs/assets.md) for details.
|
|
57
58
|
|