@decencia/ch-cli 1.31.11 → 1.31.12
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/agent/2t-decencia-channel-issue-coder.md +1 -1
- package/agent/2t-decencia-channel-pr-merger.md +1 -1
- package/agent/2t-decencia-channel-terraformer.md +1 -1
- package/dist/commands/ia.d.ts +10 -0
- package/dist/commands/ia.d.ts.map +1 -0
- package/dist/commands/ia.js +120 -0
- package/dist/commands/ia.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/skill/2t-decencia-channel-change-manager/SKILL.md +1 -1
- package/skill/2t-decencia-channel-change-propagation-v2/SKILL.md +1 -1
- package/skill/2t-decencia-channel-cli-v2/SKILL.md +15 -1
- package/skill/2t-decencia-channel-db-schema-v2/SKILL.md +1 -1
- package/skill/2t-decencia-channel-github-issue/SKILL.md +1 -1
- package/skill/2t-decencia-channel-ia-v2/SKILL.md +47 -1
- package/skill/2t-decencia-channel-orchestrator/SKILL.md +1 -1
- package/skill/2t-decencia-channel-policy-v2/SKILL.md +1 -1
- package/skill/2t-decencia-channel-prd-v2/SKILL.md +1 -1
- package/skill/2t-decencia-channel-project-bootstrap/SKILL.md +4 -1
- package/skill/2t-decencia-channel-screen-v2/SKILL.md +13 -1
- package/skill/2t-decencia-channel-spec-v2/SKILL.md +1 -1
- package/skill/2t-decencia-channel-sprint-builder-v2/SKILL.md +1 -1
- package/skill/2t-decencia-channel-sprint-runner/SKILL.md +1 -1
- package/skill/2t-decencia-channel-sqa-v2/SKILL.md +1 -1
- package/skill/2t-decencia-channel-userflow-v2/SKILL.md +1 -1
- package/skill/2t-decencia-channel-work-status-v2/SKILL.md +1 -1
|
@@ -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.31.
|
|
6
|
+
version: 1.31.12
|
|
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.31.
|
|
6
|
+
version: 1.31.12
|
|
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.31.
|
|
6
|
+
version: 1.31.12
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
## 역할
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* `ch ia` — IA(정보구조) 문서. 프로젝트당 1건.
|
|
4
|
+
*
|
|
5
|
+
* 배치(route)는 여기서 다루지 않는다 — 그건 `ch screens --route`가 SSOT다.
|
|
6
|
+
* 이 리소스가 맡는 것은 route로 표현되지 않는 **내비게이션 체계**다:
|
|
7
|
+
* 역할별 GNB, 허브 메뉴, 진입 규칙, 그리고 그렇게 배치한 근거(본문).
|
|
8
|
+
*/
|
|
9
|
+
export declare function registerIaCommand(program: Command): void;
|
|
10
|
+
//# sourceMappingURL=ia.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ia.d.ts","sourceRoot":"","sources":["../../src/commands/ia.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkHxD"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerIaCommand = registerIaCommand;
|
|
4
|
+
const client_1 = require("../client");
|
|
5
|
+
const output_1 = require("../output");
|
|
6
|
+
const utils_1 = require("../utils");
|
|
7
|
+
/**
|
|
8
|
+
* `ch ia` — IA(정보구조) 문서. 프로젝트당 1건.
|
|
9
|
+
*
|
|
10
|
+
* 배치(route)는 여기서 다루지 않는다 — 그건 `ch screens --route`가 SSOT다.
|
|
11
|
+
* 이 리소스가 맡는 것은 route로 표현되지 않는 **내비게이션 체계**다:
|
|
12
|
+
* 역할별 GNB, 허브 메뉴, 진입 규칙, 그리고 그렇게 배치한 근거(본문).
|
|
13
|
+
*/
|
|
14
|
+
function registerIaCommand(program) {
|
|
15
|
+
const ia = program.command('ia').description('IA(정보구조) 관리');
|
|
16
|
+
ia.command('get')
|
|
17
|
+
.description('IA 조회')
|
|
18
|
+
.action(async () => {
|
|
19
|
+
const globalOpts = program.opts();
|
|
20
|
+
try {
|
|
21
|
+
const client = (0, client_1.createClient)({ projectId: globalOpts.project });
|
|
22
|
+
const { data } = await client.get('/ia');
|
|
23
|
+
if (globalOpts.json || globalOpts.csv || globalOpts.quiet) {
|
|
24
|
+
(0, output_1.formatOutput)(data, globalOpts);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (!data) {
|
|
28
|
+
(0, output_1.printInfo)('IA가 아직 작성되지 않았습니다.');
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
(0, output_1.printInfo)(`${data.title} (v${data.currentVersion})`);
|
|
32
|
+
const navs = data.navigations ?? [];
|
|
33
|
+
if (navs.length) {
|
|
34
|
+
(0, output_1.printTable)(['역할', '메뉴', '주 CTA'], navs.map((n) => [
|
|
35
|
+
n.role ?? '',
|
|
36
|
+
(n.items ?? []).map((i) => i.label).join(' · '),
|
|
37
|
+
n.primaryCta ? `${n.primaryCta.label}` : '',
|
|
38
|
+
]));
|
|
39
|
+
}
|
|
40
|
+
const hubs = data.hubs ?? [];
|
|
41
|
+
if (hubs.length) {
|
|
42
|
+
(0, output_1.printTable)(['허브', '화면', '메뉴'], hubs.map((h) => [
|
|
43
|
+
h.name ?? '',
|
|
44
|
+
h.screenId ?? '',
|
|
45
|
+
(h.items ?? []).map((i) => i.label).join(' · '),
|
|
46
|
+
]));
|
|
47
|
+
}
|
|
48
|
+
const rules = data.entryRules ?? [];
|
|
49
|
+
if (rules.length) {
|
|
50
|
+
(0, output_1.printInfo)('진입 규칙:');
|
|
51
|
+
rules.forEach((r, i) => (0, output_1.printInfo)(` ${i + 1}. ${r}`));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// Error already handled
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
ia.command('set')
|
|
59
|
+
.description('IA 생성/수정 (navigations·hubs·entry-rules는 통째 교체)')
|
|
60
|
+
.requiredOption('--title <title>', 'IA 문서 제목')
|
|
61
|
+
.option('--file <path>', '본문(트리·배치 근거) 마크다운 파일 — 내용이 저장된다')
|
|
62
|
+
.option('--navigations <jsonFile>', '역할별 GNB JSON 파일 (IaNavigation[]) — 통째 교체')
|
|
63
|
+
.option('--hubs <jsonFile>', '허브 JSON 파일 (IaHub[]) — 통째 교체')
|
|
64
|
+
.option('--entry-rules <jsonFile>', '진입 규칙 JSON 파일 (string[]) — 통째 교체')
|
|
65
|
+
.option('--no-version', '버전 기록 없이 수정 (기본: 항상 새 버전 기록)')
|
|
66
|
+
.action(async (options) => {
|
|
67
|
+
const globalOpts = program.opts();
|
|
68
|
+
try {
|
|
69
|
+
const body = { title: options.title };
|
|
70
|
+
if (options.file !== undefined) {
|
|
71
|
+
body.content = (0, utils_1.readContentFile)(options.file, '--file');
|
|
72
|
+
}
|
|
73
|
+
const arrays = [
|
|
74
|
+
['navigations', options.navigations, '--navigations'],
|
|
75
|
+
['hubs', options.hubs, '--hubs'],
|
|
76
|
+
['entryRules', options.entryRules, '--entry-rules'],
|
|
77
|
+
];
|
|
78
|
+
for (const [key, path, flag] of arrays) {
|
|
79
|
+
if (path === undefined)
|
|
80
|
+
continue;
|
|
81
|
+
const parsed = (0, utils_1.readJsonFile)(path, flag);
|
|
82
|
+
if (!Array.isArray(parsed)) {
|
|
83
|
+
(0, output_1.printError)(`${flag}: JSON 배열이어야 합니다.`);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
body[key] = parsed;
|
|
87
|
+
}
|
|
88
|
+
if (globalOpts.dryRun) {
|
|
89
|
+
(0, output_1.printInfo)(`[DRY-RUN] IA "${options.title}" 생성/수정 요청`);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const client = (0, client_1.createClient)({ projectId: globalOpts.project });
|
|
93
|
+
const params = {};
|
|
94
|
+
if (options.version === false)
|
|
95
|
+
params.newVersion = 'false';
|
|
96
|
+
const { data } = await client.put('/ia', body, { params });
|
|
97
|
+
(0, output_1.formatOutput)(data, globalOpts);
|
|
98
|
+
(0, output_1.printSuccess)(data.message || 'IA가 저장되었습니다.');
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
if (e?.__handled)
|
|
102
|
+
return;
|
|
103
|
+
(0, output_1.printError)(e?.message ?? String(e));
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
ia.command('versions')
|
|
107
|
+
.description('IA 버전 이력 조회')
|
|
108
|
+
.action(async () => {
|
|
109
|
+
const globalOpts = program.opts();
|
|
110
|
+
try {
|
|
111
|
+
const client = (0, client_1.createClient)({ projectId: globalOpts.project });
|
|
112
|
+
const { data } = await client.get('/ia/versions');
|
|
113
|
+
(0, output_1.formatOutput)(data, globalOpts);
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// Error already handled
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=ia.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ia.js","sourceRoot":"","sources":["../../src/commands/ia.ts"],"names":[],"mappings":";;AAYA,8CAkHC;AA7HD,sCAAyC;AACzC,sCAA0F;AAC1F,oCAAyD;AAEzD;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAAC,OAAgB;IAChD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAE5D,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,OAAO,CAAC;SACpB,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,EAAE,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAEzC,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;gBAC1D,IAAA,qBAAY,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAC/B,OAAO;YACT,CAAC;YACD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAA,kBAAS,EAAC,oBAAoB,CAAC,CAAC;gBAChC,OAAO;YACT,CAAC;YAED,IAAA,kBAAS,EAAC,GAAG,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;YACrD,MAAM,IAAI,GAAU,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;YAC3C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAA,mBAAU,EACR,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EACrB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBACd,CAAC,CAAC,IAAI,IAAI,EAAE;oBACZ,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;oBACpD,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;iBAC5C,CAAC,CACH,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAU,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAA,mBAAU,EACR,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAClB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBACd,CAAC,CAAC,IAAI,IAAI,EAAE;oBACZ,CAAC,CAAC,QAAQ,IAAI,EAAE;oBAChB,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;iBACrD,CAAC,CACH,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,GAAa,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;YAC9C,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAA,kBAAS,EAAC,QAAQ,CAAC,CAAC;gBACpB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAA,kBAAS,EAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,gDAAgD,CAAC;SAC7D,cAAc,CAAC,iBAAiB,EAAE,UAAU,CAAC;SAC7C,MAAM,CAAC,eAAe,EAAE,iCAAiC,CAAC;SAC1D,MAAM,CAAC,0BAA0B,EAAE,0CAA0C,CAAC;SAC9E,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,CAAC;SAC3D,MAAM,CAAC,0BAA0B,EAAE,kCAAkC,CAAC;SACtE,MAAM,CAAC,cAAc,EAAE,8BAA8B,CAAC;SACtD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,IAAI,GAA4B,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;YAE/D,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC/B,IAAI,CAAC,OAAO,GAAG,IAAA,uBAAe,EAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACzD,CAAC;YACD,MAAM,MAAM,GAAoC;gBAC9C,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC;gBACrD,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;gBAChC,CAAC,YAAY,EAAE,OAAO,CAAC,UAAU,EAAE,eAAe,CAAC;aACpD,CAAC;YACF,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvC,IAAI,IAAI,KAAK,SAAS;oBAAE,SAAS;gBACjC,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC3B,IAAA,mBAAU,EAAC,GAAG,IAAI,mBAAmB,CAAC,CAAC;oBACvC,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;YACrB,CAAC;YAED,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBACtB,IAAA,kBAAS,EAAC,iBAAiB,OAAO,CAAC,KAAK,YAAY,CAAC,CAAC;gBACtD,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,EAAE,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAQ,EAAE,CAAC;YACvB,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK;gBAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC;YAE3D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3D,IAAA,qBAAY,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC/B,IAAA,qBAAY,EAAC,IAAI,CAAC,OAAO,IAAI,cAAc,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,IAAI,CAAC,EAAE,SAAS;gBAAE,OAAO;YACzB,IAAA,mBAAU,EAAC,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,aAAa,CAAC;SAC1B,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,EAAE,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAClD,IAAA,qBAAY,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -55,6 +55,7 @@ const db_tables_1 = require("./commands/db-tables");
|
|
|
55
55
|
const screens_1 = require("./commands/screens");
|
|
56
56
|
const userflows_1 = require("./commands/userflows");
|
|
57
57
|
const policies_1 = require("./commands/policies");
|
|
58
|
+
const ia_1 = require("./commands/ia");
|
|
58
59
|
const backup_1 = require("./commands/backup");
|
|
59
60
|
const handoff_1 = require("./commands/handoff");
|
|
60
61
|
const notifications_1 = require("./commands/notifications");
|
|
@@ -116,6 +117,7 @@ program.hook('preAction', (thisCommand) => {
|
|
|
116
117
|
(0, screens_1.registerScreensCommand)(program);
|
|
117
118
|
(0, userflows_1.registerUserflowsCommand)(program);
|
|
118
119
|
(0, policies_1.registerPoliciesCommand)(program);
|
|
120
|
+
(0, ia_1.registerIaCommand)(program);
|
|
119
121
|
(0, backup_1.registerBackupCommand)(program);
|
|
120
122
|
(0, handoff_1.registerHandoffCommand)(program);
|
|
121
123
|
(0, notifications_1.registerNotificationsCommand)(program);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,2CAA6B;AAC7B,uCAAyB;AAEzB,0CAAsD;AACtD,0CAAsD;AACtD,kDAA8D;AAC9D,4CAAwD;AACxD,gDAA4D;AAC5D,kDAA8D;AAC9D,wCAAoD;AACpD,wCAAoD;AACpD,kDAA8D;AAC9D,8CAA0D;AAC1D,gDAA4D;AAC5D,sDAAiE;AACjE,wCAAoD;AACpD,oDAA+D;AAC/D,oDAA+D;AAC/D,gDAA4D;AAC5D,oDAAgE;AAChE,kDAA8D;AAC9D,sCAAkD;AAClD,8CAA0D;AAC1D,gDAA4D;AAE5D,4DAAwE;AACxE,oDAAgE;AAChE,8CAA0D;AAC1D,wDAAmE;AACnE,4CAAwD;AAExD,qCAA+D;AAE/D,iCAAiC;AACjC,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1D,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,oCAAoC,CAAC;KACjD,OAAO,CAAC,UAAU,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC;KAC/C,MAAM,CACL,QAAQ,EACR,4DAA4D,CAC7D;KACA,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC;KACtC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC;KAC9B,MAAM,CAAC,uBAAuB,EAAE,eAAe,CAAC;KAChD,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC;KAC/B,MAAM,CAAC,SAAS,EAAE,2CAA2C,CAAC;KAC9D,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AAEtC,2EAA2E;AAC3E,0EAA0E;AAC1E,6EAA6E;AAC7E,mEAAmE;AACnE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;IACxC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,IAAA,4BAAmB,GAAE,CAAC;IACxB,CAAC;IACD,IAAA,uBAAc,EAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9C,CAAC,CAAC,CAAC;AAEH,+BAA+B;AAC/B,IAAA,0BAAmB,EAAC,OAAO,CAAC,CAAC;AAC7B,IAAA,0BAAmB,EAAC,OAAO,CAAC,CAAC;AAC7B,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,gCAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,wBAAkB,EAAC,OAAO,CAAC,CAAC;AAC5B,IAAA,wBAAkB,EAAC,OAAO,CAAC,CAAC;AAC5B,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,gCAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,qCAAwB,EAAC,OAAO,CAAC,CAAC;AAClC,IAAA,wBAAkB,EAAC,OAAO,CAAC,CAAC;AAC5B,IAAA,mCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,mCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,gCAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,oCAAwB,EAAC,OAAO,CAAC,CAAC;AAClC,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,sBAAiB,EAAC,OAAO,CAAC,CAAC;AAC3B,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,gCAAsB,EAAC,OAAO,CAAC,CAAC;AAEhC,IAAA,4CAA4B,EAAC,OAAO,CAAC,CAAC;AACtC,IAAA,oCAAwB,EAAC,OAAO,CAAC,CAAC;AAClC,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,uCAAyB,EAAC,OAAO,CAAC,CAAC;AACnC,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC;AAE9B,oBAAoB;AACpB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC7C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: 2t-decencia-channel-change-manager
|
|
3
3
|
description: 기존 소통채널 프로젝트의 기능 추가/수정을 사용자와 대화로 명확화 → 전파 스킬로 연관 PRD/spec/DB/SQA 일괄 갱신 → 변경으로 생긴 새 할일을 GitHub 이슈로 발행하는 오케스트레이터 스킬. (1)대화로 변경 내용 확정 → (2)[게이트] 영향 범위 확인 후 전파 적용 → (3)[게이트] 할일 목록 확인 후 이슈 발행. "이 기능 바꿀래"·"기획 수정"·"이거 추가해줘(기존 프로젝트)" 류 요청 시.
|
|
4
4
|
allowed-tools: Bash(ch:*) Bash(git:*) Bash(gh:*) Read Write
|
|
5
|
-
version: 1.31.
|
|
5
|
+
version: 1.31.12
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
<!-- ch-version-gate -->
|
|
@@ -10,7 +10,7 @@ description: |
|
|
|
10
10
|
(4) ch screens 명령(list/get/create/update/delete/migrate)으로 화면을 다루거나 레거시 프로젝트를 화면 모드로 이관할 때,
|
|
11
11
|
(5) spec의 화면 연결을 CLI로 걸거나 풀 때 (`ch specs screen-refs`),
|
|
12
12
|
(6) Spec ID를 JIRA 스타일(`LOGIN-001`)로 직접 지정할 때 (`ch specs create --id`).
|
|
13
|
-
version: 1.31.
|
|
13
|
+
version: 1.31.12
|
|
14
14
|
---
|
|
15
15
|
|
|
16
16
|
<!-- ch-version-gate -->
|
|
@@ -200,6 +200,20 @@ ch specs update <specId> --db-tables tbl_users,tbl_sessions
|
|
|
200
200
|
ch specs update <specId> --db-tables "" # 모두 해제
|
|
201
201
|
```
|
|
202
202
|
|
|
203
|
+
## IA 명령 (`ch ia`)
|
|
204
|
+
|
|
205
|
+
프로젝트당 1건인 정보구조 문서다. 작성 기준은 [[2t-decencia-channel-ia-v2]].
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
ch ia get [--json]
|
|
209
|
+
ch ia set --title "<제목>" --file ./ia.md --navigations ./navigations.json --hubs ./hubs.json --entry-rules ./entry-rules.json
|
|
210
|
+
ch ia versions
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
- `--navigations`·`--hubs`·`--entry-rules`는 각각 **JSON 배열 파일**이고 **통째 교체**다. 수정 전 `ch ia get --json`으로 받아 편집한다(Read-before-Write).
|
|
214
|
+
- 메뉴의 `screenId`는 실존 화면이어야 한다(없으면 400). 죽은 메뉴를 서버가 막는다.
|
|
215
|
+
- **route는 여기 넣지 않는다** — 배치의 SSOT는 `ch screens --route`다.
|
|
216
|
+
|
|
203
217
|
### 화면 연결 (`ch specs screen-refs`)
|
|
204
218
|
|
|
205
219
|
`ui.screenRefs`는 **서버 관리 필드**다. `ch specs update --ui`로 보내면 서버가 버리고 기존 값을 지킨다. 화면 연결은 이 전용 커맨드로만 바꾼다 (웹 화면 선택기와 같은 경로 — `PATCH /specs/:id/screen-refs`).
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: 2t-decencia-channel-github-issue
|
|
3
3
|
description: gh CLI로 현재 repo에 GitHub 이슈를 작성한다. 이슈 1개=유형 1개(feat/fix/bug), 표준 본문 양식(작업내용·관련 명세 백링크·완료조건)으로 발행. "이슈 만들어줘"/"깃헙 이슈로 등록해줘" 요청 시, 또는 소통채널 기획·명세 작업 후 처리할 일들을 GitHub 이슈로 옮길 때 사용. 멱등성/중복방지·확인단계는 다루지 않음(요청대로 바로 생성).
|
|
4
4
|
allowed-tools: Bash(gh:*) Bash(git:*) Read Write
|
|
5
|
-
version: 1.31.
|
|
5
|
+
version: 1.31.12
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
<!-- ch-version-gate -->
|
|
@@ -8,7 +8,7 @@ description: |
|
|
|
8
8
|
(1) 화면설계서를 쓰기 전에 화면들의 배치·route를 정할 때,
|
|
9
9
|
(2) 기존 프로젝트의 IA가 어색해 재배치를 검토할 때,
|
|
10
10
|
(3) "이 화면이 왜 여기 있지" 같은 구조 문제를 점검할 때.
|
|
11
|
-
version: 1.31.
|
|
11
|
+
version: 1.31.12
|
|
12
12
|
---
|
|
13
13
|
|
|
14
14
|
<!-- ch-version-gate -->
|
|
@@ -93,6 +93,50 @@ IA가 설계물이 아니라 **부산물**이 되는 것이다. 그러면 각
|
|
|
93
93
|
**배치표(행=화면, 열 하나가 route)로 승인받지 않는다.** 표에서는 구조가 보이지 않아서, 잘못된 배치가
|
|
94
94
|
그대로 통과한다. 사람은 트리를 봐야 "견적이 왜 마이페이지 밖에 있지"를 즉시 알아챈다.
|
|
95
95
|
|
|
96
|
+
### 승인받은 결과는 반드시 저장한다
|
|
97
|
+
|
|
98
|
+
트리를 승인받고 대화에만 남기면, 나중에 GNB가 바뀌었을 때 무엇이 진실인지 판별할 수 없다.
|
|
99
|
+
**IA 리소스**(프로젝트당 1건)에 올린다 — 웹 "IA" 탭에서도 같은 문서를 본다.
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
ch ia get [--json] # 현재 IA (Read-before-Write)
|
|
103
|
+
ch ia set --title "LUBridge 정보구조" --file ./ia.md \ # 트리 그림 + 배치 근거(마크다운)
|
|
104
|
+
--navigations ./navigations.json \ # 역할별 GNB
|
|
105
|
+
--hubs ./hubs.json \ # 허브와 그 아래 메뉴
|
|
106
|
+
--entry-rules ./entry-rules.json # 진입·노출 규칙
|
|
107
|
+
ch ia versions # 변경 이력
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
`navigations.json` — 역할별 GNB (배열 통째 교체):
|
|
111
|
+
|
|
112
|
+
```json
|
|
113
|
+
[
|
|
114
|
+
{ "role": "비회원",
|
|
115
|
+
"items": [ { "label": "제품 검색", "screenId": "SCR-PRODUCTS" },
|
|
116
|
+
{ "label": "공고", "screenId": "SCR-RFQS" } ],
|
|
117
|
+
"primaryCta": { "label": "회원가입", "screenId": "SCR-SIGNUP" } },
|
|
118
|
+
{ "role": "구매회원",
|
|
119
|
+
"items": [ { "label": "제품 검색", "screenId": "SCR-PRODUCTS" } ],
|
|
120
|
+
"primaryCta": { "label": "공고 등록", "screenId": "SCR-MY-RFQ-NEW" } }
|
|
121
|
+
]
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
`hubs.json` — 허브와 그 아래 메뉴:
|
|
125
|
+
|
|
126
|
+
```json
|
|
127
|
+
[
|
|
128
|
+
{ "name": "마이페이지", "screenId": "SCR-MY",
|
|
129
|
+
"items": [ { "label": "내 구매공고", "screenId": "SCR-MY-RFQS", "role": "구매회원" },
|
|
130
|
+
{ "label": "내 견적", "screenId": "SCR-MY-BIDS", "role": "공급회원" } ] }
|
|
131
|
+
]
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
- `screenId`는 **실존 화면만 허용**한다(없으면 서버가 400). 죽은 메뉴를 기계가 잡아 준다.
|
|
135
|
+
- **route는 여기 담지 않는다.** 배치의 SSOT는 `screens.route`다 — 같은 값을 두 곳에 두면 반드시 어긋난다.
|
|
136
|
+
IA 문서가 맡는 것은 route로 표현되지 않는 것(무엇을 GNB에 얹었나, 왜 그렇게 묶었나)이다.
|
|
137
|
+
- 본문(`--file`)에는 **승인받은 트리 그림과 배치 근거**를 적는다. 근거가 사라지면 다음 사람은
|
|
138
|
+
이유를 모른 채 트리만 보게 되고, 그때부터 IA는 다시 흐트러진다.
|
|
139
|
+
|
|
96
140
|
## 5. 구조 검증 (승인 전 필수)
|
|
97
141
|
|
|
98
142
|
- [ ] **형제 일관성** — 같은 성격의 화면이 서로 다른 부모에 흩어져 있지 않은가. ("내 ○○"가 대표적)
|
|
@@ -118,3 +162,5 @@ route는 수정할 수 있지만 **화면 ID는 불변**이다. 재배치하면
|
|
|
118
162
|
- **역할로 최상위를 가르기** — `/buyer`·`/supplier`로 시작하면 "내 것"이 두 곳으로 찢어진다 (§2-2).
|
|
119
163
|
- **배치표로 승인받기** — 구조가 안 보인다 (§4).
|
|
120
164
|
- **화면을 다 만든 뒤에 IA를 보기** — 그때는 되돌리는 비용이 크다 (§6).
|
|
165
|
+
- **IA를 대화에만 남기기** — 승인받은 트리를 `ch ia set`으로 저장하지 않으면, 나중에 GNB가 바뀌어도
|
|
166
|
+
무엇이 진실인지 판별할 수 없다. 배치 근거는 특히 잃기 쉽다 (§4).
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: 2t-decencia-channel-orchestrator
|
|
3
3
|
description: 소통채널 작업의 단일 진입점(디스패처). 사용자 요청을 듣고 7종(bootstrap·terraformer·change-manager·github-issue·issue-coder·pr-merger·sprint-runner) 중 적절한 곳으로 라우팅하고, 필요하면 여러 단계를 순차 오케스트레이션한다. 대화형 스킬은 메인 세션에서 Skill로, 자율 에이전트는 Agent로 위임. "소통채널 작업 해줘"·"이거 어떻게 처리하지?"처럼 무엇부터 할지 모를 때, 또는 신규기획/코드편입/기획변경/이슈/구현/머지/스프린트실행 어디로든 시작할 때.
|
|
4
4
|
allowed-tools: Skill Agent Read Bash(ch:*) Bash(gh:*) Bash(git:*)
|
|
5
|
-
version: 1.31.
|
|
5
|
+
version: 1.31.12
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
<!-- ch-version-gate -->
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: 2t-decencia-channel-project-bootstrap
|
|
3
3
|
description: 신규 기획을 사용자와 대화하며 step-by-step으로 소통채널 프로젝트로 만드는 오케스트레이터 스킬. (1)대화로 PRD 완성 → (2)기능명세(spec) 내용 확정 → (3)spec 업로드 → (4)유저플로우 → (5)정책정의서 → (6)DB 스키마·spec 연결 → (7)화면설계서(화면 생성·연결) → (8)검증기준서(SQA). 각 단계 사용자 승인 게이트, 작성 디테일은 기존 2t-decencia-channel-*-v2 스킬을 적극 재사용. "새 기획 만들어줘"·"프로젝트 처음부터 세팅" 류 요청 시.
|
|
4
4
|
allowed-tools: Bash(ch:*) Bash(git:*) Read Write
|
|
5
|
-
version: 1.31.
|
|
5
|
+
version: 1.31.12
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
<!-- ch-version-gate -->
|
|
@@ -151,6 +151,9 @@ ch specs create --id PROJ-001 --name "프로젝트 목록" \
|
|
|
151
151
|
3. [[2t-decencia-channel-ia-v2]] §5 **구조 검증**을 돌린다(형제 일관성·고아 부모·탐색 역질문·명세 대조·깊이/폭).
|
|
152
152
|
4. → **[게이트] 사람이 승인한다.** **배치표가 아니라 트리로** 보여준다 — 표에서는 구조가 보이지 않아
|
|
153
153
|
잘못된 배치가 그대로 통과한다. 승인 전에는 아무것도 만들지 않는다.
|
|
154
|
+
5. 승인받은 결과를 **저장한다** — `ch ia set --title ... --file ./ia.md --navigations ./navigations.json
|
|
155
|
+
--hubs ./hubs.json --entry-rules ./entry-rules.json` ([[2t-decencia-channel-ia-v2]] §4).
|
|
156
|
+
대화에만 남기면 나중에 무엇이 진실인지 판별할 수 없다. 웹 "IA" 탭에서 같은 문서를 본다.
|
|
154
157
|
- → OK면 8단계.
|
|
155
158
|
|
|
156
159
|
## 8. 화면설계서 — 화면 생성·연결
|
|
@@ -9,7 +9,7 @@ description: |
|
|
|
9
9
|
(1) 화면(screens) 문서를 작성·수정할 때,
|
|
10
10
|
(2) 화면의 표시 데이터·액션·입력 검증·예외상태를 기재할 때,
|
|
11
11
|
(3) 웹 "화면" 탭의 IA 트리·화면 상세에 올릴 내용을 쓸 때.
|
|
12
|
-
version: 1.31.
|
|
12
|
+
version: 1.31.12
|
|
13
13
|
---
|
|
14
14
|
|
|
15
15
|
<!-- ch-version-gate -->
|
|
@@ -197,6 +197,18 @@ ch screens update SCR-ORDER-DETAIL \
|
|
|
197
197
|
|
|
198
198
|
전부 ✅가 될 때까지 4를 반복한다. 완성된 대조표가 곧 사람 확인용 증빙이다.
|
|
199
199
|
|
|
200
|
+
### 내비게이션 대조도 함께 한다
|
|
201
|
+
|
|
202
|
+
위 대조는 **화면 누락**만 잡는다. 메뉴가 낡은 것은 못 잡는다 — 실제로 대조표가 전부 ✅인데
|
|
203
|
+
IA는 낡아 있던 적이 있다. `ch ia get`으로 IA를 받아 두 가지를 더 본다.
|
|
204
|
+
|
|
205
|
+
- [ ] **죽은 메뉴** — GNB·허브의 각 항목이 실존 화면을 가리키는가. (서버가 저장 시 막지만, 화면을
|
|
206
|
+
지운 뒤에는 IA에 그대로 남는다)
|
|
207
|
+
- [ ] **고아 화면** — 어느 GNB·허브에도 없고 다른 화면의 `actions` 대상도 아닌 화면이 있는가.
|
|
208
|
+
있다면 사용자가 도달할 방법이 없다는 뜻이다.
|
|
209
|
+
|
|
210
|
+
어긋나면 화면이 아니라 **IA를 고친다**([[2t-decencia-channel-ia-v2]] §4의 `ch ia set`).
|
|
211
|
+
|
|
200
212
|
## 6. 흔한 함정
|
|
201
213
|
|
|
202
214
|
- **컴포넌트 설명에 모든 걸 밀어 넣기** — 조건절·정책 ID·조건 붙은 출처 표기까지 한 문장에 담으면
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: 2t-decencia-channel-sprint-runner
|
|
3
3
|
description: 특정 Sprint를 끝까지 실행(run)하는 오케스트레이터 스킬. Sprint의 spec을 시드로 이슈 목록을 분해·발행(github-issue)하고, GitHub milestone에 묶인 이슈를 상태별로 분류해 issue-coder(병렬)·pr-merger(직렬)로 전진시킨 뒤, 사람확인이 필요한 곳에서 멈춘다. 사람이 확인·체크 후 재호출하면 멱등하게 이어간다(반복 루프). "스프린트 돌려줘"·"sprint N 실행"·"이 스프린트 개발 진행해줘" 류 요청 시.
|
|
4
4
|
allowed-tools: Skill Agent Read Bash(ch:*) Bash(gh:*) Bash(git:*)
|
|
5
|
-
version: 1.31.
|
|
5
|
+
version: 1.31.12
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
<!-- ch-version-gate -->
|