@decencia/ch-cli 1.29.0 → 1.31.0

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.
Files changed (49) hide show
  1. package/agent/2t-decencia-channel-issue-coder.md +1 -1
  2. package/agent/2t-decencia-channel-pr-merger.md +1 -1
  3. package/agent/2t-decencia-channel-terraformer.md +1 -1
  4. package/dist/commands/policies.d.ts +12 -0
  5. package/dist/commands/policies.d.ts.map +1 -0
  6. package/dist/commands/policies.js +302 -0
  7. package/dist/commands/policies.js.map +1 -0
  8. package/dist/commands/screens.d.ts.map +1 -1
  9. package/dist/commands/screens.js +103 -23
  10. package/dist/commands/screens.js.map +1 -1
  11. package/dist/commands/skills.d.ts +13 -0
  12. package/dist/commands/skills.d.ts.map +1 -1
  13. package/dist/commands/skills.js +43 -7
  14. package/dist/commands/skills.js.map +1 -1
  15. package/dist/commands/specs.d.ts +15 -0
  16. package/dist/commands/specs.d.ts.map +1 -1
  17. package/dist/commands/specs.js +117 -10
  18. package/dist/commands/specs.js.map +1 -1
  19. package/dist/commands/sprints.d.ts +16 -0
  20. package/dist/commands/sprints.d.ts.map +1 -1
  21. package/dist/commands/sprints.js +152 -4
  22. package/dist/commands/sprints.js.map +1 -1
  23. package/dist/commands/sqa.d.ts +23 -0
  24. package/dist/commands/sqa.d.ts.map +1 -1
  25. package/dist/commands/sqa.js +252 -6
  26. package/dist/commands/sqa.js.map +1 -1
  27. package/dist/commands/userflows.d.ts +11 -0
  28. package/dist/commands/userflows.d.ts.map +1 -0
  29. package/dist/commands/userflows.js +275 -0
  30. package/dist/commands/userflows.js.map +1 -0
  31. package/dist/index.js +4 -0
  32. package/dist/index.js.map +1 -1
  33. package/package.json +1 -1
  34. package/skill/2t-decencia-channel-change-manager/SKILL.md +1 -1
  35. package/skill/2t-decencia-channel-change-propagation-v2/SKILL.md +11 -7
  36. package/skill/2t-decencia-channel-cli-v2/SKILL.md +48 -20
  37. package/skill/2t-decencia-channel-db-schema-v2/SKILL.md +4 -4
  38. package/skill/2t-decencia-channel-github-issue/SKILL.md +1 -1
  39. package/skill/2t-decencia-channel-orchestrator/SKILL.md +1 -1
  40. package/skill/2t-decencia-channel-policy-v2/SKILL.md +114 -0
  41. package/skill/2t-decencia-channel-prd-v2/SKILL.md +37 -12
  42. package/skill/2t-decencia-channel-project-bootstrap/SKILL.md +22 -25
  43. package/skill/2t-decencia-channel-screen-v2/SKILL.md +135 -0
  44. package/skill/2t-decencia-channel-spec-v2/SKILL.md +288 -443
  45. package/skill/2t-decencia-channel-sprint-builder-v2/SKILL.md +11 -3
  46. package/skill/2t-decencia-channel-sprint-runner/SKILL.md +1 -1
  47. package/skill/2t-decencia-channel-sqa-v2/SKILL.md +124 -21
  48. package/skill/2t-decencia-channel-userflow-v2/SKILL.md +125 -0
  49. package/skill/2t-decencia-channel-work-status-v2/SKILL.md +3 -3
@@ -3,7 +3,7 @@ name: 2t-decencia-channel-issue-coder
3
3
  description: GitHub issue 1개를 입력으로 받아 끝까지 처리하는 코딩 에이전트. 이슈 읽기 → 소통채널 spec/SQA 확인 → git worktree+브랜치에서 구현 → 자체 소프트리뷰 루프 → unittest + SQA → PR 생성 → 소통채널 workStatus·이슈 기록. 다수 병렬 실행 전제, PR까지만(머지·base 브랜치 직접 push·이슈 close는 사람).
4
4
  tools: Read, Write, Edit, Grep, Glob, Bash, Agent
5
5
  model: opus
6
- version: 1.29.0
6
+ version: 1.31.0
7
7
  ---
8
8
 
9
9
  ## 역할
@@ -3,7 +3,7 @@ name: 2t-decencia-channel-pr-merger
3
3
  description: issue-coder가 낸 PR을 기본 완전 자율로 base 브랜치(기본 브랜치 또는 sprint 통합 브랜치)에 머지하는 에이전트. 핵심 역량은 다수 병렬 worktree가 만든 충돌을 작업 의도 기반(semantic)으로 해결하는 것. CI green+충돌없음이면 바로 squash 머지, 충돌이면 의도대로 해결 후 테스트로 검증하여 머지. 재SQA·전면 재리뷰는 하지 않음. 다수 PR은 직렬 머지.
4
4
  tools: Read, Write, Edit, Grep, Glob, Bash
5
5
  model: opus
6
- version: 1.29.0
6
+ version: 1.31.0
7
7
  ---
8
8
 
9
9
  ## 역할
@@ -3,7 +3,7 @@ name: 2t-decencia-channel-terraformer
3
3
  description: 소통채널을 쓰지 않던 기존 코드베이스를 역분석하여 소통채널 프로젝트로 편입(terraforming)하는 자율 에이전트. 코드가 single source of truth — 코드를 읽어 DB 스키마 → 기능명세(spec) → PRD를 bottom-up으로 역생성한다(SQA 제외). 대량 분석은 서브에이전트 병렬, 코드로 못 메우는 의도는 [추정]으로 채우고 "사람확인 질문 리스트"를 산출물로 남긴다. PR/머지·이슈 발행은 하지 않음.
4
4
  tools: Read, Write, Edit, Grep, Glob, Bash, Agent
5
5
  model: opus
6
- version: 1.29.0
6
+ version: 1.31.0
7
7
  ---
8
8
 
9
9
  ## 역할
@@ -0,0 +1,12 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * 목록의 `specs` 칸: 연관 spec ID를 그대로 보여준다.
4
+ *
5
+ * 개수(`2`)가 아니라 ID를 쓴다 — 정책 목록을 여는 이유가 대개 "이 spec에 걸린 정책이
6
+ * 뭐냐"라서 ID가 보여야 목록에서 답이 난다. 다만 표는 줄바꿈을 하지 않으므로
7
+ * 너무 길면 말줄임한다(전체는 `ch policies get`에서 본다 — printAutoTable의 60자
8
+ * 절단과 같은 처리).
9
+ */
10
+ export declare function formatRelatedSpecs(ids: unknown): string;
11
+ export declare function registerPoliciesCommand(program: Command): void;
12
+ //# sourceMappingURL=policies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policies.d.ts","sourceRoot":"","sources":["../../src/commands/policies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyHpC;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAKvD;AAwLD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAU9D"}
@@ -0,0 +1,302 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatRelatedSpecs = formatRelatedSpecs;
4
+ exports.registerPoliciesCommand = registerPoliciesCommand;
5
+ const client_1 = require("../client");
6
+ const output_1 = require("../output");
7
+ const utils_1 = require("../utils");
8
+ /**
9
+ * ch policies — 정책정의서(Policy) 관리 명령
10
+ *
11
+ * ch-api의 /policies REST(이슈 #219)를 호출한다. 명령 계약의 SSOT는 스킬
12
+ * `2t-decencia-channel-policy-v2` §4다 — 플래그를 바꾸려면 그 스킬을 먼저 고친다.
13
+ *
14
+ * `ch screens` 선례를 따른다.
15
+ * - 출력(PLAT-003): `--json`(기계 모드)이면 stdout은 순수 JSON 문서 하나뿐이고
16
+ * 사람용 메시지는 stderr로 나간다. 빈 목록도 stdout에는 `[]`로 나간다.
17
+ * - 종료코드: HTTP 4xx/5xx는 client의 응답 인터셉터가 exitCode를 세우지만,
18
+ * 서버에 닿기 전 로컬 입력 오류(본문 파일 없음·본문 미지정·수정 필드 0개)는
19
+ * 아무도 세워주지 않는다. 그래서 공용 failInput()(output.ts)으로 직접
20
+ * exitCode=1을 세운다.
21
+ *
22
+ * 화면(screens)과 달리 relatedSpecIds에 플래그(`--related-specs`)가 있다. 정책 → spec
23
+ * 링크는 사람이 거는 단방향 링크라 서버가 유도할 원천이 없기 때문이다(spec ↔ screen은
24
+ * spec 쪽에서 걸어 서버가 양방향 동기화한다).
25
+ */
26
+ /** create/update의 help 하단에 붙는 입력 안내. */
27
+ const POLICY_HELP = `
28
+ 본문(content) 입력 (우선순위: --file > --content):
29
+ --file <경로> 마크다운 파일에서 (BOM·CRLF 자동 정제)
30
+ --file - stdin에서 (예: cat policy.md | ch policies create ... --file -)
31
+ --content "<문자열>" 인라인 (짧은 본문용)
32
+
33
+ stdin은 "--file -"로 명시할 때만 읽는다. 플래그 없이 stdin을 넘겨다보지 않는다 —
34
+ 에이전트·CI 셸에서 fd0가 '열린 채 EOF가 오지 않는 파이프'인 경우가 흔해서,
35
+ 암묵적 stdin 읽기는 "ch policies update POL-001 --name X" 같은 평범한 호출을
36
+ 무한 대기시킨다 (ch screens에서 겪은 회귀).
37
+
38
+ --related-specs (연관 Spec ID):
39
+ 쉼표 구분이며 **통째 교체**다. 일부만 더하려면 'ch policies get <id> --json'으로
40
+ 현재 배열을 받아 합쳐서 전체를 넘긴다 (Read-before-Write).
41
+ ""(빈 문자열)이면 연결을 모두 해제한다.
42
+ 실존하지 않는 spec ID가 있으면 서버가 400으로 거절한다 (죽은 링크 방지).
43
+
44
+ Policy ID:
45
+ --id는 spec ID와 같은 형식이다 (PREFIX-숫자, 예: POL-001). 생략하면 서버가
46
+ Firestore 자동 ID로 만든다 — 사람이 인용하는 키라 --id 지정을 권장한다.
47
+ 같은 ID가 이미 있으면 409다 (덮어쓰지 않는다).
48
+ `;
49
+ /**
50
+ * 본문(content)을 해석한다. 우선순위: --file > --content.
51
+ * `--file -`이면 stdin에서 읽는다. 어느 경로든 BOM 제거 + CRLF→LF 정규화.
52
+ *
53
+ * 입력 오류는 throw한다 — 호출부가 failInput으로 받아 종료코드를 세운다.
54
+ *
55
+ * 공용 utils.readContentInput을 쓰지 않는다. 그쪽은 플래그가 없으면 stdin을 암묵적으로
56
+ * 읽는데(requests 선례), 에이전트·CI 셸은 fd0를 'EOF가 오지 않는 파이프'로 물려주는
57
+ * 일이 흔해서 `ch policies update POL-001 --name X` 같은 평범한 호출이 무한 대기한다
58
+ * (ch screens에서 재현한 회귀). stdin은 `--file -`로 명시할 때만 읽는다.
59
+ */
60
+ function resolveContent(options) {
61
+ if (options.file === '-') {
62
+ const piped = (0, utils_1.readContentStdin)();
63
+ if (piped === null) {
64
+ throw new Error('--file -: stdin에서 읽을 내용이 없습니다. 본문을 파이프로 넘기거나 --file <경로>/--content를 쓰세요.');
65
+ }
66
+ return piped;
67
+ }
68
+ if (options.file !== undefined) {
69
+ return (0, utils_1.readContentFile)(options.file, '--file');
70
+ }
71
+ if (options.content !== undefined) {
72
+ return (0, utils_1.normalizeContent)(options.content);
73
+ }
74
+ return undefined;
75
+ }
76
+ /** 정책 필드 플래그 (create/update 공용). create만 --name·--category가 필수다. */
77
+ function addPolicyFieldOptions(cmd) {
78
+ return cmd
79
+ .option('--file <path>', '본문(마크다운)을 파일에서 읽기 ("-"이면 stdin, --content보다 우선)')
80
+ .option('--content <text>', '본문(마크다운) 인라인 — --file 대안')
81
+ .option('--related-specs <ids>', '연관 spec ID (쉼표 구분, 통째 교체, ""이면 모두 해제)');
82
+ }
83
+ /**
84
+ * 플래그를 요청 바디로 변환한다. 지정된 플래그만 담으므로 update에서 그대로 PATCH
85
+ * 바디가 되고, 미지정 필드는 서버가 보존한다.
86
+ */
87
+ function buildPolicyBody(options) {
88
+ const body = {};
89
+ if (options.name !== undefined)
90
+ body.name = options.name;
91
+ if (options.category !== undefined)
92
+ body.category = options.category;
93
+ const content = resolveContent(options);
94
+ if (content !== undefined)
95
+ body.content = content;
96
+ // 해제 판정은 `!== undefined`로 한다. falsy 체크를 쓰면 `--related-specs ""`
97
+ // (모두 해제)가 무시된다.
98
+ if (options.relatedSpecs !== undefined) {
99
+ body.relatedSpecIds = (0, utils_1.parseCommaSeparated)(options.relatedSpecs);
100
+ }
101
+ return body;
102
+ }
103
+ /** 기계 모드(=stdout이 순수 JSON이어야 하는 모드)인지. */
104
+ function isMachineOutput(globalOpts) {
105
+ return !!(globalOpts.json || globalOpts.csv || globalOpts.quiet);
106
+ }
107
+ /** 목록 `specs` 칸에 넣을 문자열 길이 상한 (넘으면 말줄임). */
108
+ const SPECS_CELL_MAX = 40;
109
+ /**
110
+ * 목록의 `specs` 칸: 연관 spec ID를 그대로 보여준다.
111
+ *
112
+ * 개수(`2`)가 아니라 ID를 쓴다 — 정책 목록을 여는 이유가 대개 "이 spec에 걸린 정책이
113
+ * 뭐냐"라서 ID가 보여야 목록에서 답이 난다. 다만 표는 줄바꿈을 하지 않으므로
114
+ * 너무 길면 말줄임한다(전체는 `ch policies get`에서 본다 — printAutoTable의 60자
115
+ * 절단과 같은 처리).
116
+ */
117
+ function formatRelatedSpecs(ids) {
118
+ if (!Array.isArray(ids) || ids.length === 0)
119
+ return '';
120
+ const joined = ids.map((id) => String(id)).join(', ');
121
+ if (joined.length <= SPECS_CELL_MAX)
122
+ return joined;
123
+ return `${joined.slice(0, SPECS_CELL_MAX - 1)}…`;
124
+ }
125
+ // ── 서브커맨드 ────────────────────────────────────────────────────────────
126
+ function registerPoliciesList(policies, program) {
127
+ policies
128
+ .command('list')
129
+ .description('정책정의서 목록 조회 (영역 → ID 순, 서버 정렬)')
130
+ .action(async () => {
131
+ const globalOpts = program.opts();
132
+ try {
133
+ const client = (0, client_1.createClient)({ projectId: globalOpts.project });
134
+ const { data } = await client.get('/policies');
135
+ const items = Array.isArray(data) ? data : data?.data ?? [];
136
+ // 기계 모드 분기를 빈값 안내(printInfo)보다 앞에 둔다. 빈 결과도 stdout에
137
+ // `[]`로 나가야 하고, 사람용 안내문이 stdout(JSON)을 오염시키면 안 된다.
138
+ // (PLAT-003, 이슈 #50 — db-tables에서 겪은 회귀)
139
+ if (isMachineOutput(globalOpts)) {
140
+ (0, output_1.formatOutput)(items, globalOpts);
141
+ return;
142
+ }
143
+ if (!items.length) {
144
+ (0, output_1.printInfo)('등록된 정책정의서가 없습니다.');
145
+ return;
146
+ }
147
+ (0, output_1.printTable)(['id', 'category', 'name', 'specs'], items.map((p) => [
148
+ String(p?.id ?? ''),
149
+ String(p?.category ?? ''),
150
+ String(p?.name ?? ''),
151
+ formatRelatedSpecs(p?.relatedSpecIds),
152
+ ]));
153
+ }
154
+ catch (error) {
155
+ // 오류 출력·종료코드는 client 인터셉터가 처리했다.
156
+ }
157
+ });
158
+ }
159
+ function registerPoliciesGet(policies, program) {
160
+ // 로컬 --json은 두지 않는다. commander가 부모(program)의 전역 옵션을 서브커맨드
161
+ // 뒤에서도 해석하므로 `ch policies get <id> --json`이 그대로 동작한다.
162
+ policies
163
+ .command('get <policyId>')
164
+ .description('정책정의서 상세 조회 (본문 포함)')
165
+ .action(async (policyId) => {
166
+ const globalOpts = program.opts();
167
+ try {
168
+ const client = (0, client_1.createClient)({ projectId: globalOpts.project });
169
+ const { data } = await client.get(`/policies/${policyId}`);
170
+ (0, output_1.formatOutput)(data, globalOpts);
171
+ }
172
+ catch (error) {
173
+ // Error already handled
174
+ }
175
+ });
176
+ }
177
+ function registerPoliciesCreate(policies, program) {
178
+ const create = policies
179
+ .command('create')
180
+ .description('정책정의서 생성')
181
+ .option('--id <policyId>', '사용자 지정 Policy ID (예: POL-001). 생략 시 서버 자동 ID')
182
+ .requiredOption('--name <name>', '정책명 (필수)')
183
+ .requiredOption('--category <category>', '영역/분류 (필수, 예: ORDER)');
184
+ addPolicyFieldOptions(create)
185
+ .addHelpText('after', POLICY_HELP)
186
+ .action(async (options) => {
187
+ const globalOpts = program.opts();
188
+ try {
189
+ // 파일을 먼저 읽고 dry-run을 판정한다 — 깨진 파일이 --dry-run에서 통과하면
190
+ // 정작 실행할 때 실패한다 (sqa add-scenario와 같은 순서).
191
+ let body;
192
+ try {
193
+ body = buildPolicyBody(options);
194
+ }
195
+ catch (e) {
196
+ (0, output_1.failInput)(e?.message ?? String(e));
197
+ return;
198
+ }
199
+ // 본문은 서버에서도 필수다. 빈 요청을 왕복시키지 않고 여기서 끊는다.
200
+ if (body.content === undefined) {
201
+ (0, output_1.failInput)('본문을 --file <경로> 또는 --content 로 지정하세요 (stdin은 --file -).');
202
+ return;
203
+ }
204
+ if (options.id)
205
+ body.id = options.id;
206
+ if (globalOpts.dryRun) {
207
+ (0, output_1.printInfo)(`[DRY-RUN] 정책정의서 "${options.name}" 생성 요청`);
208
+ return;
209
+ }
210
+ const client = (0, client_1.createClient)({ projectId: globalOpts.project });
211
+ const { data } = await client.post('/policies', body);
212
+ (0, output_1.formatOutput)(data, globalOpts);
213
+ // --id를 주지 않으면 서버가 자동 ID를 정한다. 인용할 키를 알려준다.
214
+ // 사람이 읽는 줄이라 stderr로 나간다(--json이면 stdout은 순수 JSON을 유지한다).
215
+ const createdId = data?.id;
216
+ if (createdId && !options.id) {
217
+ (0, output_1.printInfo)(`정책 ID: ${createdId} — 다르게 쓰려면 --id POL-001 처럼 직접 지정하세요.`);
218
+ }
219
+ (0, output_1.printSuccess)('정책정의서가 생성되었습니다.');
220
+ }
221
+ catch (error) {
222
+ // Error already handled
223
+ }
224
+ });
225
+ }
226
+ function registerPoliciesUpdate(policies, program) {
227
+ const update = policies
228
+ .command('update <policyId>')
229
+ .description('정책정의서 부분 업데이트 (지정한 필드만 변경, Policy ID는 불변)')
230
+ .option('--name <name>', '정책명')
231
+ .option('--category <category>', '영역/분류');
232
+ addPolicyFieldOptions(update)
233
+ .addHelpText('after', `${POLICY_HELP}
234
+ 지정한 플래그만 PATCH로 전송되어 미지정 필드는 서버가 보존한다. 본문을 고칠 때는
235
+ 먼저 'ch policies get <policyId> --json'으로 현재 본문을 받아 편집한다 (Read-before-Write).
236
+ `)
237
+ .action(async (policyId, options) => {
238
+ const globalOpts = program.opts();
239
+ try {
240
+ // 파일 읽기·입력 검증을 dry-run 판정보다 먼저 — create와 같은 이유.
241
+ let body;
242
+ try {
243
+ body = buildPolicyBody(options);
244
+ }
245
+ catch (e) {
246
+ (0, output_1.failInput)(e?.message ?? String(e));
247
+ return;
248
+ }
249
+ if (Object.keys(body).length === 0) {
250
+ (0, output_1.failInput)('수정할 필드를 지정하세요.');
251
+ return;
252
+ }
253
+ if (globalOpts.dryRun) {
254
+ (0, output_1.printInfo)(`[DRY-RUN] 정책정의서 "${policyId}" 수정 요청`);
255
+ return;
256
+ }
257
+ const client = (0, client_1.createClient)({ projectId: globalOpts.project });
258
+ const { data } = await client.patch(`/policies/${policyId}`, body);
259
+ (0, output_1.formatOutput)(data, globalOpts);
260
+ (0, output_1.printSuccess)('정책정의서가 수정되었습니다.');
261
+ }
262
+ catch (error) {
263
+ // Error already handled
264
+ }
265
+ });
266
+ }
267
+ function registerPoliciesDelete(policies, program) {
268
+ policies
269
+ .command('delete <policyId>')
270
+ .description('정책정의서 삭제')
271
+ .action(async (policyId) => {
272
+ const globalOpts = program.opts();
273
+ try {
274
+ if (globalOpts.dryRun) {
275
+ (0, output_1.printInfo)(`[DRY-RUN] 정책정의서 "${policyId}" 삭제 요청`);
276
+ return;
277
+ }
278
+ const client = (0, client_1.createClient)({ projectId: globalOpts.project });
279
+ const { data } = await client.delete(`/policies/${policyId}`);
280
+ // 기계 모드에서는 서버 응답을 stdout에 순수 JSON으로 남겨 JSON.parse가 되게 한다.
281
+ // 사람용(표) 모드에서는 성공 한 줄이면 충분하다.
282
+ if (isMachineOutput(globalOpts)) {
283
+ (0, output_1.formatOutput)(data, globalOpts);
284
+ }
285
+ (0, output_1.printSuccess)('정책정의서가 삭제되었습니다.');
286
+ }
287
+ catch (error) {
288
+ // Error already handled
289
+ }
290
+ });
291
+ }
292
+ function registerPoliciesCommand(program) {
293
+ const policies = program
294
+ .command('policies')
295
+ .description('정책정의서(Policy) 관리 — 횡단 정책 SSOT (/policies)');
296
+ registerPoliciesList(policies, program);
297
+ registerPoliciesGet(policies, program);
298
+ registerPoliciesCreate(policies, program);
299
+ registerPoliciesUpdate(policies, program);
300
+ registerPoliciesDelete(policies, program);
301
+ }
302
+ //# sourceMappingURL=policies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policies.js","sourceRoot":"","sources":["../../src/commands/policies.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"screens.d.ts","sourceRoot":"","sources":["../../src/commands/screens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmEpC;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAY,GAAG,MAAM,CAOzE;AAqTD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAa7D"}
1
+ {"version":3,"file":"screens.d.ts","sourceRoot":"","sources":["../../src/commands/screens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoGpC;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAY,GAAG,MAAM,CAOzE;AAqXD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAa7D"}
@@ -25,18 +25,51 @@ const screens_migrate_1 = require("./screens.migrate");
25
25
  * 조회하지도 게이팅하지도 않는다. 서버의 screens CRUD가 플래그와 무관하게 동작하기
26
26
  * 때문이다(migrate가 화면을 먼저 만들고 그 다음 플래그를 켠다 — SCREEN-001).
27
27
  */
28
- /** `--states` JSON 파일 형식 안내 (create/update의 help 하단에 게시). */
29
- const STATES_HELP = `
30
- --states <jsonFile> 형식 (ScreenState[]):
31
- states.json:
32
- [
33
- { "name": "빈 상태", "description": "화면이 없을 때 안내 문구와 생성 버튼을 보여준다" },
34
- { "name": "로딩" },
35
- { "name": "에러", "description": "조회 실패 시 재시도 버튼을 보여준다" }
36
- ]
28
+ /** 배열 JSON 파일 플래그 형식 안내 (create/update의 help 하단에 게시). */
29
+ const STRUCTURE_HELP = `
30
+ 화면설계서 구조 필드 — 각각 JSON 배열 파일이며 **통째 교체**다
31
+ (작성 표준: 스킬 2t-decencia-channel-screen-v2 §5):
37
32
 
38
- 화면 상태는 빈/로딩/에러 같은 UI 휘발성 상태다. 저장되는 엔티티 상태
39
- (db-table.stateMachines)와 섞지 않는다.
33
+ --areas <jsonFile> (ScreenArea[]) 영역별 표시 데이터. 출처(테이블.컬럼)까지 적는다.
34
+ areas.json:
35
+ [
36
+ { "name": "주문 요약", "description": "ORDERS.주문번호, 상품명, 결제금액" },
37
+ { "name": "배송 정보", "description": "SHIPMENTS.송장번호, 택배사, 배송상태" }
38
+ ]
39
+
40
+ --actions <jsonFile> (ScreenAction[]) — 액션별 동작·이동. 결과까지 적는다.
41
+ actions.json:
42
+ [
43
+ { "name": "취소 확정", "description": "PG 취소 요청. 성공 시 이동, 실패 시 E-02 노출",
44
+ "targetScreenId": "SCR-ORDER-CANCELED" },
45
+ { "name": "뒤로가기", "description": "목록으로 복귀 (변경사항 없음)",
46
+ "targetScreenId": "SCR-ORDER-LIST" }
47
+ ]
48
+
49
+ targetScreenId는 같은 프로젝트에 실존하는 화면 ID여야 한다 (없으면 서버가 400).
50
+
51
+ --input-rules <jsonFile> (ScreenInputRule[]) — 입력 검증 규칙. 필수/형식/길이/중복 +
52
+ 실패 시 노출 문구까지 적는다.
53
+ input-rules.json:
54
+ [
55
+ { "name": "취소 사유", "rules": "필수, 선택형+기타(200자), 미선택 시 '사유를 선택해주세요' 노출" }
56
+ ]
57
+
58
+ --states <jsonFile> (ScreenState[]) — 예외상태. 빈상태·로딩·에러·권한 없음 4종을 적는다.
59
+ states.json:
60
+ [
61
+ { "name": "빈상태", "description": "주문 내역이 없습니다 + [상품 보러가기]" },
62
+ { "name": "로딩", "description": "스켈레톤 3행" },
63
+ { "name": "에러", "description": "불러오지 못했습니다 + [재시도]" },
64
+ { "name": "권한 없음", "description": "본인 주문만 열람 가능 안내 후 목록으로 리다이렉트" }
65
+ ]
66
+
67
+ 화면 상태는 빈/로딩/에러 같은 UI 휘발성 상태다. 저장되는 엔티티 상태
68
+ (db-table.stateMachines)와 섞지 않는다.
69
+
70
+ ⚠️ 네 배열 모두 부분 병합이 아니라 통째 교체다. 기존 배열에서 항목 하나를 고치거나
71
+ 더하려면 먼저 'ch screens get <screenId> --json'으로 받아 배열 전체를 편집해 파일로
72
+ 넘긴다 (Read-before-Write). update에서 플래그를 아예 안 주면 그 배열은 손대지 않는다.
40
73
 
41
74
  화면 목적(purpose) 입력 (우선순위: --file > --purpose):
42
75
  --purpose "<문자열>" 인라인
@@ -110,6 +143,9 @@ function addScreenFieldOptions(cmd) {
110
143
  // 열려다 ENOENT를 뱉는다. 그래서 --page-file이다 (아카이브 첨부가 --attach가 된 것과 같은 이유).
111
144
  .option('--page-file <path>', '화면의 페이지 파일 경로 (예: src/app/store/[code]/page.tsx)')
112
145
  .option('--figma-node-id <id>', 'Figma 노드 ID (예: 123:456 — 화면 ID 슬러그가 아니다)')
146
+ .option('--areas <jsonFile>', '영역별 표시 데이터 JSON 파일 (ScreenArea[]) — 통째 교체')
147
+ .option('--actions <jsonFile>', '액션별 동작·이동 JSON 파일 (ScreenAction[]) — 통째 교체')
148
+ .option('--input-rules <jsonFile>', '입력 검증 규칙 JSON 파일 (ScreenInputRule[]) — 통째 교체')
113
149
  .option('--states <jsonFile>', '화면 상태 목록 JSON 파일 (ScreenState[]) — 통째 교체')
114
150
  .option('--entry-points <list>', '진입 경로 (쉼표 구분, ""이면 모두 해제)')
115
151
  .option('--exit-points <list>', '이탈 경로 (쉼표 구분, ""이면 모두 해제)')
@@ -117,11 +153,41 @@ function addScreenFieldOptions(cmd) {
117
153
  .option('--epic <name>', '에픽 라벨 (spec.epic과 같은 라벨 체계)')
118
154
  .option('--note <note>', '비고');
119
155
  }
156
+ /**
157
+ * 배열 JSON 파일로 받는 화면설계서 구조 필드들 (SCREEN-003 --states, E20 확장 3종).
158
+ *
159
+ * 넷 다 같은 계약이라 표로 두고 한 루프에서 처리한다: 파일을 읽어 배열이면 그대로
160
+ * 바디에 싣고(서버가 통째 교체), 배열이 아니면 플래그 이름과 예시를 담아 throw한다.
161
+ * 항목 내용은 검사하지 않는다 — 서버 DTO(screen-structure.dto.ts)가 유일한 검증자이고,
162
+ * CLI가 앞질러 막으면 초안 저장이 막힌다.
163
+ */
164
+ const ARRAY_FILE_FIELDS = [
165
+ {
166
+ key: 'areas',
167
+ flag: '--areas',
168
+ hint: 'ScreenArea 객체의 JSON 배열이어야 합니다 (예: [{"name": "주문 요약", "description": "ORDERS.주문번호"}])',
169
+ },
170
+ {
171
+ key: 'actions',
172
+ flag: '--actions',
173
+ hint: 'ScreenAction 객체의 JSON 배열이어야 합니다 (예: [{"name": "취소 확정", "targetScreenId": "SCR-ORDER-CANCELED"}])',
174
+ },
175
+ {
176
+ key: 'inputRules',
177
+ flag: '--input-rules',
178
+ hint: 'ScreenInputRule 객체의 JSON 배열이어야 합니다 (예: [{"name": "취소 사유", "rules": "필수, 200자"}])',
179
+ },
180
+ {
181
+ key: 'states',
182
+ flag: '--states',
183
+ hint: 'ScreenState 객체의 JSON 배열이어야 합니다 (예: [{"name": "로딩"}])',
184
+ },
185
+ ];
120
186
  /**
121
187
  * 플래그를 요청 바디로 변환한다. 지정된 플래그만 담으므로 update에서 그대로 PATCH
122
188
  * 바디가 되고, 미지정 필드는 서버가 보존한다.
123
189
  *
124
- * 입력 오류(파일 없음·JSON 깨짐·--order 비숫자·--states 비배열)는 throw한다 —
190
+ * 입력 오류(파일 없음·JSON 깨짐·--order 비숫자·배열 파일이 배열이 아님)는 throw한다 —
125
191
  * 호출부가 failInput으로 받아 종료코드를 세운다.
126
192
  */
127
193
  function buildScreenBody(options) {
@@ -145,12 +211,16 @@ function buildScreenBody(options) {
145
211
  const purpose = resolvePurpose(options);
146
212
  if (purpose !== undefined)
147
213
  body.purpose = purpose;
148
- if (options.states !== undefined) {
149
- const states = (0, utils_1.readJsonFile)(options.states, '--states');
150
- if (!Array.isArray(states)) {
151
- throw new Error('--states: ScreenState 객체의 JSON 배열이어야 합니다 (예: [{"name": "로딩"}]).');
214
+ // 화면설계서 구조 배열 4종 (--areas·--actions·--input-rules·--states) 전부 통째 교체.
215
+ for (const { key, flag, hint } of ARRAY_FILE_FIELDS) {
216
+ const filePath = options[key];
217
+ if (filePath === undefined)
218
+ continue;
219
+ const parsed = (0, utils_1.readJsonFile)(filePath, flag);
220
+ if (!Array.isArray(parsed)) {
221
+ throw new Error(`${flag}: ${hint}.`);
152
222
  }
153
- body.states = states;
223
+ body[key] = parsed;
154
224
  }
155
225
  // 배열 해제 판정은 `!== undefined`로 한다. falsy 체크를 쓰면 `--entry-points ""`
156
226
  // (모두 해제)가 무시된다.
@@ -214,7 +284,18 @@ function registerScreensGet(screens, program) {
214
284
  // 뒤에서도 해석하므로 `ch screens get <id> --json`이 그대로 동작한다.
215
285
  screens
216
286
  .command('get <screenId>')
217
- .description('화면 상세 조회')
287
+ .description('화면 상세 조회 (areas·actions·inputRules·states 포함 전체 문서)')
288
+ // 응답 문서를 필드 선별 없이 그대로 출력한다. 구조 배열을 통째 교체하는 update의
289
+ // Read 절반이라 무손실이어야 한다 — 여기서 필드를 걸러내면 편집 왕복이 값을 잃는다.
290
+ .addHelpText('after', `
291
+ 화면설계서 구조 배열(areas·actions·inputRules·states)은 응답에 그대로 실린다.
292
+ update가 이 배열들을 통째 교체하므로, 항목을 고치거나 더할 때는 여기서 먼저 받아
293
+ 배열 전체를 편집해 넘긴다 (Read-before-Write):
294
+
295
+ ch screens get SCR-ORDER-DETAIL --json > screen.json
296
+ # screen.json의 areas 배열을 편집해 areas.json으로 저장
297
+ ch screens update SCR-ORDER-DETAIL --areas ./areas.json
298
+ `)
218
299
  .action(async (screenId) => {
219
300
  const globalOpts = program.opts();
220
301
  try {
@@ -235,7 +316,7 @@ function registerScreensCreate(screens, program) {
235
316
  .option('--auto-id', '슬러그를 유도하지 않고 Firestore 자동 ID로 만든다 (라우트 개념이 없는 프로젝트용 탈출구)')
236
317
  .requiredOption('--name <name>', '화면명 (필수)');
237
318
  addScreenFieldOptions(create)
238
- .addHelpText('after', STATES_HELP)
319
+ .addHelpText('after', STRUCTURE_HELP)
239
320
  .addHelpText('after', `
240
321
  화면 ID (SCREEN-015):
241
322
  --id를 생략하면 서버가 라우트에서 사람이 읽는 슬러그를 유도한다. 그 문자열을 그대로
@@ -292,10 +373,9 @@ function registerScreensUpdate(screens, program) {
292
373
  .description('화면 부분 업데이트 (지정한 필드만 변경)')
293
374
  .option('--name <name>', '화면명');
294
375
  addScreenFieldOptions(update)
295
- .addHelpText('after', `${STATES_HELP}
296
- 지정한 플래그만 PATCH로 전송되어 미지정 필드는 서버가 보존한다. 다만 --states는
297
- 배열 통째 교체다 일부만 바꾸려면 먼저 'ch screens get <screenId> --json'으로 받아
298
- 배열 전체를 편집해 파일로 넘긴다 (Read-before-Write).
376
+ .addHelpText('after', `${STRUCTURE_HELP}
377
+ 지정한 플래그만 PATCH로 전송되어 미지정 필드는 서버가 보존한다
378
+ (배열 4종의 통째 교체·Read-before-Write는 참조).
299
379
  `)
300
380
  .action(async (screenId, options) => {
301
381
  const globalOpts = program.opts();
@@ -1 +1 @@
1
- {"version":3,"file":"screens.js","sourceRoot":"","sources":["../../src/commands/screens.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"screens.js","sourceRoot":"","sources":["../../src/commands/screens.ts"],"names":[],"mappings":"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"}
@@ -96,6 +96,19 @@ export declare function prepareSkillUpload(dir: string): {
96
96
  export declare function filterSkillsByGroup<T extends {
97
97
  group?: string | null;
98
98
  }>(rows: T[], group: string | undefined): T[];
99
+ /**
100
+ * commander 반복 옵션 수집기(collect) — `--tag a --tag b` 를 배열로 모은다.
101
+ * 기본값 `[]` 와 함께 쓴다(옵션 정의의 3·4번째 인자).
102
+ */
103
+ export declare function collectTag(value: string, previous: string[]): string[];
104
+ /**
105
+ * list 결과를 tag 로 거른다(클라이언트 필터, SKILL-010).
106
+ * 해당 tag 를 포함(배열 멤버십)하는 항목만 남긴다. 필터 값이 없으면 원본 그대로.
107
+ * 비교 전 앞뒤 공백은 무시(trim)한다.
108
+ */
109
+ export declare function filterSkillsByTag<T extends {
110
+ tags?: string[] | null;
111
+ }>(rows: T[], tag: string | undefined): T[];
99
112
  export declare function registerSkillsCommand(program: Command): void;
100
113
  export {};
101
114
  //# sourceMappingURL=skills.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,yCAAyC;AACzC,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE9C,kDAAkD;AAClD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,8CAA8C;AAC9C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,2CAA2C;AAC3C,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,iDAAiD;AACjD,eAAO,MAAM,uBAAuB,aAAa,CAAC;AAIlD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,UAAU,CAEnE;AAED,yBAAyB;AACzB,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEvD;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,UAAU,EAAE,CAErE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGnE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,EAAE,CAqB5D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAQtE;AAKD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAG9D;AA6BD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAsBxE;AAED,wDAAwD;AACxD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,eAAe,EAAE,EACvB,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,SAAS,CAEpB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG;IAC/C,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,WAAW,EAAE,gBAAgB,CAAC;CAC/B,CAoCA;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EACrE,IAAI,EAAE,CAAC,EAAE,EACT,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,CAAC,EAAE,CAIL;AAwBD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwN5D"}
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,yCAAyC;AACzC,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE9C,kDAAkD;AAClD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,8CAA8C;AAC9C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,2CAA2C;AAC3C,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,iDAAiD;AACjD,eAAO,MAAM,uBAAuB,aAAa,CAAC;AAIlD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,UAAU,CAEnE;AAED,yBAAyB;AACzB,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEvD;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,UAAU,EAAE,CAErE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGnE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,EAAE,CAqB5D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAQtE;AAKD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAG9D;AA6BD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAsBxE;AAED,wDAAwD;AACxD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,eAAe,EAAE,EACvB,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,SAAS,CAEpB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG;IAC/C,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,WAAW,EAAE,gBAAgB,CAAC;CAC/B,CAoCA;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EACrE,IAAI,EAAE,CAAC,EAAE,EACT,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,CAAC,EAAE,CAIL;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAEtE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS;IAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;CAAE,EACpE,IAAI,EAAE,CAAC,EAAE,EACT,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,CAAC,EAAE,CAIL;AAkCD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuP5D"}