@decencia/ch-cli 1.7.0 → 1.8.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.
- 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/client.d.ts +8 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +68 -1
- package/dist/client.js.map +1 -1
- package/dist/commands/db-schema.d.ts.map +1 -1
- package/dist/commands/db-schema.js +16 -2
- package/dist/commands/db-schema.js.map +1 -1
- package/dist/commands/db-tables.d.ts.map +1 -1
- package/dist/commands/db-tables.js +7 -5
- package/dist/commands/db-tables.js.map +1 -1
- package/dist/commands/dev-status.d.ts.map +1 -1
- package/dist/commands/dev-status.js +24 -6
- package/dist/commands/dev-status.js.map +1 -1
- package/dist/commands/prd.d.ts.map +1 -1
- package/dist/commands/prd.js +16 -2
- package/dist/commands/prd.js.map +1 -1
- package/dist/commands/qna.d.ts.map +1 -1
- package/dist/commands/qna.js +46 -6
- package/dist/commands/qna.js.map +1 -1
- package/dist/commands/sprints.d.ts.map +1 -1
- package/dist/commands/sprints.js +25 -6
- package/dist/commands/sprints.js.map +1 -1
- package/dist/config.d.ts +15 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +42 -0
- package/dist/config.js.map +1 -1
- package/dist/index.js +14 -2
- package/dist/index.js.map +1 -1
- package/dist/output.d.ts +13 -0
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +58 -9
- package/dist/output.js.map +1 -1
- package/dist/utils.d.ts +41 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +89 -8
- package/dist/utils.js.map +1 -1
- package/package.json +2 -2
- 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 +1 -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-orchestrator/SKILL.md +1 -1
- package/skill/2t-decencia-channel-prd-v2/SKILL.md +1 -1
- package/skill/2t-decencia-channel-project-bootstrap/SKILL.md +1 -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-work-status-v2/SKILL.md +1 -1
package/dist/utils.js
CHANGED
|
@@ -34,16 +34,35 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.parseCommaSeparated = parseCommaSeparated;
|
|
37
|
+
exports.normalizeContent = normalizeContent;
|
|
37
38
|
exports.readJsonFile = readJsonFile;
|
|
39
|
+
exports.readContentFile = readContentFile;
|
|
40
|
+
exports.readContentStdin = readContentStdin;
|
|
41
|
+
exports.readContentInput = readContentInput;
|
|
38
42
|
const fs = __importStar(require("fs"));
|
|
39
43
|
const path = __importStar(require("path"));
|
|
40
44
|
function parseCommaSeparated(value) {
|
|
41
45
|
return value.split(',').map((v) => v.trim()).filter(Boolean);
|
|
42
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* content류(자유 텍스트/마크다운) 문자열을 정규화합니다.
|
|
49
|
+
* - 선행 BOM() 제거
|
|
50
|
+
* - CRLF(\r\n) / 고립 CR(\r) → LF(\n) 정규화 (PowerShell Out-File·Windows 호환)
|
|
51
|
+
*
|
|
52
|
+
* 업로드되는 본문은 항상 이 함수를 거쳐 일관된 LF 줄바꿈으로 전송합니다.
|
|
53
|
+
*/
|
|
54
|
+
function normalizeContent(raw) {
|
|
55
|
+
let text = raw;
|
|
56
|
+
// BOM 제거
|
|
57
|
+
if (text.charCodeAt(0) === 0xfeff) {
|
|
58
|
+
text = text.slice(1);
|
|
59
|
+
}
|
|
60
|
+
// CRLF/CR → LF 정규화
|
|
61
|
+
return text.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
|
|
62
|
+
}
|
|
43
63
|
/**
|
|
44
64
|
* JSON 파일을 읽어 파싱합니다.
|
|
45
|
-
* - BOM() 제거
|
|
46
|
-
* - CRLF/CR을 LF로 정규화 (PowerShell Out-File 호환)
|
|
65
|
+
* - BOM() 제거 + CRLF/CR을 LF로 정규화 (PowerShell Out-File 호환)
|
|
47
66
|
* - 파일 미존재/파싱 실패 시 명확한 에러 throw
|
|
48
67
|
*/
|
|
49
68
|
function readJsonFile(filePath, label) {
|
|
@@ -59,12 +78,7 @@ function readJsonFile(filePath, label) {
|
|
|
59
78
|
catch (e) {
|
|
60
79
|
throw new Error(`${tag}파일 읽기 실패: ${resolved} (${e?.message ?? e})`);
|
|
61
80
|
}
|
|
62
|
-
|
|
63
|
-
if (raw.charCodeAt(0) === 0xfeff) {
|
|
64
|
-
raw = raw.slice(1);
|
|
65
|
-
}
|
|
66
|
-
// CRLF/CR → LF 정규화
|
|
67
|
-
raw = raw.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
|
|
81
|
+
raw = normalizeContent(raw);
|
|
68
82
|
try {
|
|
69
83
|
return JSON.parse(raw);
|
|
70
84
|
}
|
|
@@ -72,4 +86,71 @@ function readJsonFile(filePath, label) {
|
|
|
72
86
|
throw new Error(`${tag}JSON 파싱 실패: ${resolved} (${e?.message ?? e})`);
|
|
73
87
|
}
|
|
74
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* 파일 경로에서 content를 읽어 정규화합니다.
|
|
91
|
+
* - 파일 미존재/읽기 실패 시 명확한 에러 throw
|
|
92
|
+
* - normalizeContent로 BOM/CRLF 정규화
|
|
93
|
+
*/
|
|
94
|
+
function readContentFile(filePath, label) {
|
|
95
|
+
const resolved = path.resolve(filePath);
|
|
96
|
+
const tag = label ? `${label} ` : '';
|
|
97
|
+
if (!fs.existsSync(resolved)) {
|
|
98
|
+
throw new Error(`${tag}파일을 찾을 수 없습니다: ${resolved}`);
|
|
99
|
+
}
|
|
100
|
+
let raw;
|
|
101
|
+
try {
|
|
102
|
+
raw = fs.readFileSync(resolved, 'utf-8');
|
|
103
|
+
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
throw new Error(`${tag}파일 읽기 실패: ${resolved} (${e?.message ?? e})`);
|
|
106
|
+
}
|
|
107
|
+
return normalizeContent(raw);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* stdin(파이프)에서 content를 동기적으로 읽어 정규화합니다.
|
|
111
|
+
* TTY(대화형 터미널)면 입력이 없는 것으로 보고 null을 반환합니다(무한 대기 방지).
|
|
112
|
+
*/
|
|
113
|
+
function readContentStdin() {
|
|
114
|
+
if (process.stdin.isTTY) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
let raw;
|
|
118
|
+
try {
|
|
119
|
+
raw = fs.readFileSync(0, 'utf-8');
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
if (raw.length === 0) {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
return normalizeContent(raw);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* content류 입력을 우선순위에 따라 해석합니다.
|
|
131
|
+
*
|
|
132
|
+
* 우선순위: --file > --content > stdin(파이프)
|
|
133
|
+
* - --file 지정 시: 파일을 읽어 정규화(미존재/읽기 실패는 throw).
|
|
134
|
+
* - --content 지정 시: 그 문자열을 정규화.
|
|
135
|
+
* - 둘 다 없으면 stdin(파이프) 입력을 시도하고, 그것도 없으면 undefined.
|
|
136
|
+
*
|
|
137
|
+
* 어떤 경로든 결과 content는 BOM 제거 + CRLF→LF 정규화되어
|
|
138
|
+
* Windows 인자길이 한계로 인한 무음 절단을 방지합니다.
|
|
139
|
+
*
|
|
140
|
+
* @param label 에러 메시지에 붙일 옵션명(예: '--file')
|
|
141
|
+
* @returns 정규화된 content 문자열, 입력이 없으면 undefined
|
|
142
|
+
*/
|
|
143
|
+
function readContentInput(opts, label = '--file') {
|
|
144
|
+
if (opts.file !== undefined) {
|
|
145
|
+
return readContentFile(opts.file, label);
|
|
146
|
+
}
|
|
147
|
+
if (opts.content !== undefined) {
|
|
148
|
+
return normalizeContent(opts.content);
|
|
149
|
+
}
|
|
150
|
+
const stdin = readContentStdin();
|
|
151
|
+
if (stdin !== null) {
|
|
152
|
+
return stdin;
|
|
153
|
+
}
|
|
154
|
+
return undefined;
|
|
155
|
+
}
|
|
75
156
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,kDAEC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@decencia/ch-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.0",
|
|
4
4
|
"description": "Decencia Communication Channel CLI",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"build": "node scripts/sync-skill-version.js && tsc",
|
|
16
16
|
"dev": "tsc --watch",
|
|
17
17
|
"start": "node dist/index.js",
|
|
18
|
-
"test": "npm run build && node test/
|
|
18
|
+
"test": "npm run build && node test/run-all.js",
|
|
19
19
|
"sync-skill-version": "node scripts/sync-skill-version.js",
|
|
20
20
|
"prepublishOnly": "npm run build"
|
|
21
21
|
},
|
|
@@ -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.
|
|
5
|
+
version: 1.8.0
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
<!-- ch-version-gate -->
|
|
@@ -8,7 +8,7 @@ description: |
|
|
|
8
8
|
(2) Task에 description/points/completedAt을 기록할 때,
|
|
9
9
|
(3) ch db-tables 명령(list/get/create/update/delete)을 사용할 때,
|
|
10
10
|
(4) Spec ID를 JIRA 스타일(`LOGIN-001`)로 직접 지정할 때 (`ch specs create --id`).
|
|
11
|
-
version: 1.
|
|
11
|
+
version: 1.8.0
|
|
12
12
|
---
|
|
13
13
|
|
|
14
14
|
<!-- ch-version-gate -->
|
|
@@ -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.
|
|
5
|
+
version: 1.8.0
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
<!-- ch-version-gate -->
|
|
@@ -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.
|
|
5
|
+
version: 1.8.0
|
|
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)+DB스키마 → 승인 → (3)SQA 시트. 각 단계 사용자 승인 게이트, 작성 디테일은 기존 2t-decencia-channel-*-v2 스킬을 적극 재사용. "새 기획 만들어줘"·"프로젝트 처음부터 세팅" 류 요청 시.
|
|
4
4
|
allowed-tools: Bash(ch:*) Bash(git:*) Read Write
|
|
5
|
-
version: 1.
|
|
5
|
+
version: 1.8.0
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
<!-- ch-version-gate -->
|
|
@@ -10,7 +10,7 @@ description: |
|
|
|
10
10
|
(2) UI 메타데이터·비즈니스 로직·DB 참조를 함께 다룰 때,
|
|
11
11
|
(3) Task를 JIRA 스타일(points·assignee·description·completedAt)로 잘게 쪼갤 때,
|
|
12
12
|
(4) 신규 spec ID를 `LOGIN-001` 같은 JIRA 스타일로 부여하고 싶을 때 (`ch specs create --id`).
|
|
13
|
-
version: 1.
|
|
13
|
+
version: 1.8.0
|
|
14
14
|
---
|
|
15
15
|
|
|
16
16
|
<!-- ch-version-gate -->
|
|
@@ -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.
|
|
5
|
+
version: 1.8.0
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
<!-- ch-version-gate -->
|