@dusky-bluehour/agent-service 0.6.4 → 0.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -229
- package/package.json +2 -3
- package/scripts/init.mjs +71 -8
- package/scripts/validate.mjs +6 -1
package/README.md
CHANGED
|
@@ -1,255 +1,47 @@
|
|
|
1
1
|
# tri-agent-manager
|
|
2
2
|
|
|
3
3
|
```bash
|
|
4
|
-
pnpm dlx --package=@dusky-bluehour/agent-service tri-agent-manager --interactive
|
|
4
|
+
pnpm dlx --package=@dusky-bluehour/agent-service@latest tri-agent-manager --interactive
|
|
5
5
|
```
|
|
6
6
|
|
|
7
|
-
Claude Code
|
|
7
|
+
`@dusky-bluehour/agent-service` 패키지로 Claude Code / Antigravity / Codex 운영팩을 설치/업데이트하는 CLI입니다.
|
|
8
8
|
|
|
9
|
-
##
|
|
10
|
-
|
|
11
|
-
- 기획(PRD) → 설계 → 개발 → 코드리뷰/보안 → 배포/운영까지 동일한 품질 기준으로 실행하실 수 있습니다.
|
|
12
|
-
- 반복 작업(UI 컴포넌트화, Hook 분리, 최적화)을 역할/명령 단위로 고정해 일관성을 높입니다.
|
|
13
|
-
- 툴이 달라도 동일한 계약(명령 ID, 품질 게이트, 워크플로우)으로 결과를 맞출 수 있습니다.
|
|
14
|
-
|
|
15
|
-
## 용어 설명
|
|
16
|
-
|
|
17
|
-
| 용어 | 의미 |
|
|
18
|
-
| --- | --- |
|
|
19
|
-
| Skill | 작업 방식/규칙을 담은 실행 단위입니다. 툴마다 포맷은 다르지만 역할은 같습니다. |
|
|
20
|
-
| Workflow | 단계형 실행 시나리오입니다. 각 단계는 진입/종료 조건을 가집니다. |
|
|
21
|
-
| Command Contract | 입력/실행/품질게이트/산출물을 고정한 명령 계약입니다. |
|
|
22
|
-
| Agent / Subagent | 역할별 실행 주체입니다. 리드가 전문 역할에 위임할 수 있습니다. |
|
|
23
|
-
| Artifact (Antigravity) | 단계 입출력 계약 문서입니다. 스키마 검증 통과 후 다음 단계로 진행합니다. |
|
|
24
|
-
| PRD→구현 파이프라인 | PRD는 대화형으로 작성하고, 구현은 최종 수동 세팅 전까지 순차 자동 실행합니다. |
|
|
25
|
-
|
|
26
|
-
## 핵심 기능
|
|
27
|
-
|
|
28
|
-
| 기능 | 설명 | 관련 워크플로우 |
|
|
29
|
-
| --- | --- | --- |
|
|
30
|
-
| 표준 E2E 딜리버리 | 기획부터 배포 준비까지 표준 단계를 실행합니다. | `WF-SVC-001` |
|
|
31
|
-
| 코드리뷰/개선 루프 | 리뷰 지적 → 수정 → 재검증 루프를 수행합니다. | `WF-SVC-003` / `WF-SVC-002` |
|
|
32
|
-
| 보안 하드닝 | 위협 모델링 + 취약점 감사 + 재검증을 수행합니다. | `WF-SVC-004` / `WF-SVC-003` |
|
|
33
|
-
| 반복 프론트 개선 | 컴포넌트화, Hook 분리, 성능 최적화를 진행합니다. | `WF-SVC-006` / `WF-SVC-002` |
|
|
34
|
-
| 장애 대응 | 복구, RCA, 재발 방지를 수행합니다. | `WF-SVC-007` / `WF-SVC-005` |
|
|
35
|
-
| PRD→구현 자동 파이프라인 | PRD 대화형 작성 후 구현을 자동 순차 실행합니다. | `WF-PRD-IMPLEMENT-E2E` |
|
|
36
|
-
|
|
37
|
-
## 목록 (토글)
|
|
38
|
-
|
|
39
|
-
<details>
|
|
40
|
-
<summary><strong>Claude Code - Skills</strong></summary>
|
|
41
|
-
|
|
42
|
-
| Skill | 목적 |
|
|
43
|
-
| --- | --- |
|
|
44
|
-
| `service-lifecycle-orchestration` | 기획~배포 전체 수명주기를 실행합니다. |
|
|
45
|
-
| `code-review-and-improvement` | 리뷰/개선 루프를 실행합니다. |
|
|
46
|
-
| `security-hardening` | 위협/취약점 기반 보안 강화를 수행합니다. |
|
|
47
|
-
| `frontend-repetition-pack` | UI 컴포넌트화/Hook/최적화를 수행합니다. |
|
|
48
|
-
| `release-and-operations` | 배포/모니터링/인수인계를 수행합니다. |
|
|
49
|
-
| `incident-response` | 장애 대응~재발 방지를 수행합니다. |
|
|
50
|
-
| `prd-to-production-pipeline` | PRD 대화형 작성 후 순차 자동 구현을 수행합니다. |
|
|
51
|
-
|
|
52
|
-
</details>
|
|
53
|
-
|
|
54
|
-
<details>
|
|
55
|
-
<summary><strong>Claude Code - Subagents</strong></summary>
|
|
56
|
-
|
|
57
|
-
| Subagent | 역할 |
|
|
58
|
-
| --- | --- |
|
|
59
|
-
| `lead-orchestrator` | 전체 단계를 오케스트레이션합니다. |
|
|
60
|
-
| `prd-writer` | 마스터/세부 PRD를 작성합니다. |
|
|
61
|
-
| `product-planner` | 요구사항 잠금/범위 관리를 수행합니다. |
|
|
62
|
-
| `solution-architect` | ADR/기술 경계를 정의합니다. |
|
|
63
|
-
| `backend-engineer` | 계약 우선 API 구현을 수행합니다. |
|
|
64
|
-
| `frontend-engineer` | 프론트 기능 구현을 수행합니다. |
|
|
65
|
-
| `ui-component-engineer` | 반복 UI를 컴포넌트화합니다. |
|
|
66
|
-
| `hook-refactor-engineer` | Hook 분리/정규화를 수행합니다. |
|
|
67
|
-
| `performance-engineer` | 성능 병목을 개선합니다. |
|
|
68
|
-
| `qa-engineer` | 테스트/회귀 차단을 수행합니다. |
|
|
69
|
-
| `code-reviewer` | 코드리뷰/개선안을 도출합니다. |
|
|
70
|
-
| `security-engineer` | 위협/취약점 대응을 수행합니다. |
|
|
71
|
-
| `sre-release-engineer` | CI/CD 게이트/배포를 수행합니다. |
|
|
72
|
-
| `operations-owner` | 운영 대시보드/런북을 관리합니다. |
|
|
73
|
-
| `incident-commander` | 장애 워룸/복구 우선순위를 관리합니다. |
|
|
74
|
-
|
|
75
|
-
</details>
|
|
76
|
-
|
|
77
|
-
<details>
|
|
78
|
-
<summary><strong>Antigravity - Skills / Agents</strong></summary>
|
|
79
|
-
|
|
80
|
-
| 타입 | ID | 설명 |
|
|
81
|
-
| --- | --- | --- |
|
|
82
|
-
| Skill | `service-lifecycle-orchestration` | Plan-Implement-Test-Review-Release를 실행합니다. |
|
|
83
|
-
| Skill | `code-review-and-improvement` | 리뷰/개선 루프를 실행합니다. |
|
|
84
|
-
| Skill | `security-hardening` | 보안 하드닝을 수행합니다. |
|
|
85
|
-
| Skill | `frontend-repetition-pack` | 프론트 반복 개선을 수행합니다. |
|
|
86
|
-
| Skill | `release-and-operations` | 배포/운영 전환을 수행합니다. |
|
|
87
|
-
| Skill | `incident-response` | 장애 대응을 수행합니다. |
|
|
88
|
-
| Skill | `prd-to-production-pipeline` | PRD 대화형→자동 구현을 수행합니다. |
|
|
89
|
-
| Agent | `manager-agent` | 기본 오케스트레이터 역할을 수행합니다. |
|
|
90
|
-
| Agent | `prd-writer-agent` | PRD 대화형 작성을 수행합니다. |
|
|
91
|
-
| Agent | `implementation-agent` | 구현 자동 실행을 수행합니다. |
|
|
92
|
-
| Agent | `review-security-agent` | 리뷰/보안 검증을 수행합니다. |
|
|
93
|
-
| Agent | `release-ops-agent` | 최종 세팅/배포를 수행합니다. |
|
|
94
|
-
|
|
95
|
-
</details>
|
|
96
|
-
|
|
97
|
-
<details>
|
|
98
|
-
<summary><strong>Codex - Skills</strong></summary>
|
|
99
|
-
|
|
100
|
-
| Skill | 목적 |
|
|
101
|
-
| --- | --- |
|
|
102
|
-
| `service-lifecycle-orchestration` | 기획~배포 표준 실행을 수행합니다. |
|
|
103
|
-
| `code-review-and-improvement` | 리뷰/개선 루프를 수행합니다. |
|
|
104
|
-
| `security-hardening` | 보안 강화를 수행합니다. |
|
|
105
|
-
| `frontend-repetition-pack` | UI/Hook/성능 개선을 수행합니다. |
|
|
106
|
-
| `release-and-operations` | 릴리즈/운영 전환을 수행합니다. |
|
|
107
|
-
| `incident-response` | 장애 대응을 수행합니다. |
|
|
108
|
-
| `prd-to-production-pipeline` | PRD 대화형→순차 자동 구현을 수행합니다. |
|
|
109
|
-
|
|
110
|
-
</details>
|
|
111
|
-
|
|
112
|
-
## PRD→구현 자동 파이프라인 (신규)
|
|
113
|
-
|
|
114
|
-
- 워크플로우: `WF-PRD-IMPLEMENT-E2E`
|
|
115
|
-
- 단계:
|
|
116
|
-
1. 마스터 PRD 작성 (`CMD-PLAN-PRD-MASTER`) - 대화형
|
|
117
|
-
2. 세부 PRD 분해 (`CMD-PLAN-PRD-DETAILS`) - 대화형
|
|
118
|
-
3. 구현 부트스트랩 (`CMD-PLAN-IMPLEMENTATION-BOOTSTRAP`) - 대화형
|
|
119
|
-
4. 순차 자동 구현 (`CMD-DEV-SEQUENTIAL-AUTORUN`) - 자동
|
|
120
|
-
5. 검증/보안 - 자동
|
|
121
|
-
6. 최종 세팅/배포 준비 - 수동
|
|
122
|
-
|
|
123
|
-
PRD 단계에서는 UI 컴포넌트화, 톤앤매너, 성능, 보안, 가독성 기준을 명시하시고, 자동 단계에서는 배치별 검증을 통과해야 다음 배치로 진행됩니다.
|
|
124
|
-
|
|
125
|
-
## 설치/업데이트 사용법
|
|
126
|
-
|
|
127
|
-
### 가장 쉬운 시작 (pnpm dlx, 전부 대화형)
|
|
9
|
+
## 빠른 실행 (설치 없이)
|
|
128
10
|
|
|
129
11
|
```bash
|
|
130
|
-
pnpm dlx tri-agent-manager --interactive
|
|
12
|
+
pnpm dlx --package=@dusky-bluehour/agent-service@latest tri-agent-manager --interactive
|
|
131
13
|
```
|
|
132
14
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
1. 설치 경로 (현재 위치 또는 직접 입력)
|
|
136
|
-
2. 프리셋
|
|
137
|
-
3. 도구(Claude Code/Antigravity/Codex)
|
|
138
|
-
4. 구성요소(스킬, 워크플로우 등)
|
|
139
|
-
5. 실행 확인
|
|
140
|
-
|
|
141
|
-
도구별 실제 설치 루트:
|
|
142
|
-
|
|
143
|
-
- Claude Code: `<target>/.claude/*`
|
|
144
|
-
- Antigravity: `<target>/.agent/*`
|
|
145
|
-
- Codex: `<target>/.codex/*`
|
|
146
|
-
- 설치 직후 사용 가이드 자동 생성: `<target>/.tri-agent-manager/USAGE.ko.md`
|
|
147
|
-
|
|
148
|
-
설치 경로 기준(근거 문서):
|
|
149
|
-
|
|
150
|
-
- Claude Code: `claude-code/README.md` + Claude Code Subagents 공식 문서
|
|
151
|
-
- Antigravity: `antigravity/README.md` 기준의 로컬 워크스페이스 규약(`.agent/*`)
|
|
152
|
-
- Codex: `codex/README.md` + Codex 공식 문서
|
|
153
|
-
|
|
154
|
-
조작 키:
|
|
155
|
-
|
|
156
|
-
- `↑/↓`: 이동
|
|
157
|
-
- `←/→`: 해제/선택 또는 항목 이동
|
|
158
|
-
- `Space`: 다중 선택 토글
|
|
159
|
-
- `Enter`: 확정
|
|
160
|
-
|
|
161
|
-
업데이트도 동일하게 대화형으로 진행하실 수 있습니다.
|
|
15
|
+
## 패키지 다운로드 후 사용
|
|
162
16
|
|
|
163
17
|
```bash
|
|
164
|
-
|
|
165
|
-
|
|
18
|
+
# 프로젝트에 패키지 설치
|
|
19
|
+
pnpm add -D @dusky-bluehour/agent-service@latest
|
|
166
20
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
```bash
|
|
170
|
-
pnpm dlx tri-agent-manager setup
|
|
21
|
+
# 실행
|
|
22
|
+
pnpm exec tri-agent-manager --interactive
|
|
171
23
|
```
|
|
172
24
|
|
|
173
|
-
|
|
25
|
+
npm 사용자:
|
|
174
26
|
|
|
175
27
|
```bash
|
|
28
|
+
npm install -D @dusky-bluehour/agent-service@latest
|
|
176
29
|
npx tri-agent-manager --interactive
|
|
177
|
-
npx tri-agent-manager update --interactive
|
|
178
30
|
```
|
|
179
31
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
### 고급 옵션(필요한 경우)
|
|
183
|
-
|
|
184
|
-
- `--preset`: 미리 정의된 구성을 선택합니다.
|
|
185
|
-
- `--tool`: 툴을 직접 선택합니다. (`codex,claude-code` 등)
|
|
186
|
-
- `--components`: 구성요소를 직접 선택합니다. (`skills,workflows,commands` 등)
|
|
187
|
-
- `--install-root`: 도구별 설치 루트를 직접 지정합니다. (`codex=.codex,antigravity=.agent`)
|
|
188
|
-
- `--interactive`: 한글 대화형 선택 UI를 사용합니다.
|
|
189
|
-
- `--dry-run`: 실제 반영 없이 계획만 확인합니다.
|
|
190
|
-
- `--yes`: 확인 프롬프트를 생략합니다.
|
|
191
|
-
|
|
192
|
-
중복 선택 입력(예: `codex,codex,claude-code`)은 자동으로 1회로 정리됩니다.
|
|
193
|
-
|
|
194
|
-
### 다른 폴더에 설치하는 명령어
|
|
195
|
-
|
|
196
|
-
```bash
|
|
197
|
-
# 1) 전체 프리셋을 다른 프로젝트 경로에 설치
|
|
198
|
-
pnpm dlx --package=@dusky-bluehour/agent-service tri-agent-manager install \
|
|
199
|
-
--preset full-suite \
|
|
200
|
-
--target /path/to/your-project \
|
|
201
|
-
--yes --non-interactive
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
```bash
|
|
205
|
-
# 2) 특정 도구만 설치 (예: Antigravity)
|
|
206
|
-
pnpm dlx --package=@dusky-bluehour/agent-service tri-agent-manager install \
|
|
207
|
-
--tool antigravity \
|
|
208
|
-
--components skills,agents,artifacts,workflows,commands \
|
|
209
|
-
--target /path/to/your-project \
|
|
210
|
-
--yes --non-interactive
|
|
211
|
-
```
|
|
32
|
+
## 자주 쓰는 명령
|
|
212
33
|
|
|
213
34
|
```bash
|
|
214
|
-
#
|
|
215
|
-
pnpm dlx --package=@dusky-bluehour/agent-service tri-agent-manager
|
|
216
|
-
--preset balanced-core \
|
|
217
|
-
--install-root codex=.codex,claude-code=.claude,antigravity=.agent \
|
|
218
|
-
--target /path/to/your-project \
|
|
219
|
-
--yes --non-interactive
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
설치 후 실행 가이드는 아래 파일에서 확인하실 수 있습니다.
|
|
223
|
-
|
|
224
|
-
- `<target>/.tri-agent-manager/USAGE.ko.md`
|
|
225
|
-
|
|
226
|
-
## 프리셋
|
|
227
|
-
|
|
228
|
-
- `balanced-core`: 기본 운영팩(추천)
|
|
229
|
-
- `full-suite`: 전체 설치
|
|
230
|
-
- `security-first`: 보안 우선
|
|
231
|
-
- `frontend-refactor`: 프론트 반복개선
|
|
232
|
-
- `prd-to-production`: PRD→구현 자동 파이프라인
|
|
233
|
-
|
|
234
|
-
## 체크리스트 자동화
|
|
235
|
-
|
|
236
|
-
배포 전 자동 점검:
|
|
35
|
+
# 업데이트 대화형
|
|
36
|
+
pnpm dlx --package=@dusky-bluehour/agent-service@latest tri-agent-manager update --interactive
|
|
237
37
|
|
|
238
|
-
|
|
239
|
-
|
|
38
|
+
# 도움말
|
|
39
|
+
pnpm dlx --package=@dusky-bluehour/agent-service@latest tri-agent-manager --help
|
|
240
40
|
```
|
|
241
41
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
## 다음 단계 추천
|
|
245
|
-
|
|
246
|
-
1. `pnpm dlx tri-agent-manager --interactive`로 `prd-to-production` 프리셋을 먼저 설치해 보세요.
|
|
247
|
-
2. 첫 실행은 `--dry-run`으로 계획만 확인하신 뒤 실제 반영을 진행해 주세요.
|
|
248
|
-
3. 반영 후 `npm run prepublish:check`로 검증을 고정하신 뒤 배포해 주세요.
|
|
249
|
-
|
|
250
|
-
## 상세 구성 문서
|
|
42
|
+
## 설치 결과
|
|
251
43
|
|
|
252
|
-
-
|
|
253
|
-
-
|
|
254
|
-
-
|
|
255
|
-
-
|
|
44
|
+
- Claude Code: `<target>/.claude/*`
|
|
45
|
+
- Antigravity: `<target>/.agent/*`
|
|
46
|
+
- Codex: `<target>/.codex/*`
|
|
47
|
+
- 가이드: `<target>/.tri-agent-manager/USAGE.ko.md`
|
package/package.json
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dusky-bluehour/agent-service",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.5",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
7
|
"description": "Service operation skills/workflows pack for Claude Code, Antigravity, and Codex",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"bin": {
|
|
10
|
-
"tri-agent-manager": "scripts/init.mjs"
|
|
11
|
-
"tri-agent-os": "scripts/init.mjs"
|
|
10
|
+
"tri-agent-manager": "scripts/init.mjs"
|
|
12
11
|
},
|
|
13
12
|
"scripts": {
|
|
14
13
|
"validate": "node scripts/validate.mjs",
|
package/scripts/init.mjs
CHANGED
|
@@ -13,7 +13,6 @@ const rootDir = path.resolve(__dirname, '..');
|
|
|
13
13
|
const catalogPath = path.join(rootDir, 'catalog', 'tool-catalog.ko.json');
|
|
14
14
|
const packageJsonPath = path.join(rootDir, 'package.json');
|
|
15
15
|
const CLI_NAME = 'tri-agent-manager';
|
|
16
|
-
const CLI_COMPAT_NAME = 'tri-agent-os';
|
|
17
16
|
const STATE_DIR_NAME = '.tri-agent-manager';
|
|
18
17
|
const LEGACY_STATE_DIR_NAME = '.tri-agent-os';
|
|
19
18
|
const GUIDE_FILE_NAME = 'USAGE.ko.md';
|
|
@@ -42,14 +41,11 @@ const HELP_TEXT = [
|
|
|
42
41
|
' --non-interactive 비대화형 모드 강제',
|
|
43
42
|
' (중복 선택 입력은 자동으로 1회로 정리됨)',
|
|
44
43
|
'',
|
|
45
|
-
'호환 별칭:',
|
|
46
|
-
` ${CLI_COMPAT_NAME} ... (동일 동작)`,
|
|
47
|
-
'',
|
|
48
44
|
'pnpm 예시:',
|
|
49
|
-
' pnpm dlx tri-agent-manager --interactive',
|
|
50
|
-
' pnpm dlx tri-agent-manager update --interactive',
|
|
51
|
-
' pnpm dlx tri-agent-manager setup',
|
|
52
|
-
|
|
45
|
+
' pnpm dlx --package=@dusky-bluehour/agent-service@latest tri-agent-manager --interactive',
|
|
46
|
+
' pnpm dlx --package=@dusky-bluehour/agent-service@latest tri-agent-manager update --interactive',
|
|
47
|
+
' pnpm dlx --package=@dusky-bluehour/agent-service@latest tri-agent-manager setup',
|
|
48
|
+
' pnpm dlx --package=@dusky-bluehour/agent-service@latest tri-agent-manager list'
|
|
53
49
|
].join('\n');
|
|
54
50
|
|
|
55
51
|
function parseArgs(argv) {
|
|
@@ -450,6 +446,52 @@ function getToolExecutionGuide(tool, installRoot) {
|
|
|
450
446
|
return ['선택한 workflow의 stage.commands를 순서대로 실행합니다.'];
|
|
451
447
|
}
|
|
452
448
|
|
|
449
|
+
function getToolInteractionTips(tool, installRoot) {
|
|
450
|
+
if (tool.id === 'codex') {
|
|
451
|
+
return [
|
|
452
|
+
'Codex 대화 입력창에서 `$`를 누르면 사용 가능한 스킬 목록을 바로 열 수 있습니다.',
|
|
453
|
+
`프로젝트 루트에서 스킬 파일을 직접 확인하려면 \`ls ${path.join(
|
|
454
|
+
installRoot,
|
|
455
|
+
'skills'
|
|
456
|
+
)}\` 를 실행하세요.`,
|
|
457
|
+
`워크플로우 목록과 설명은 \`${path.join(
|
|
458
|
+
installRoot,
|
|
459
|
+
'workflows',
|
|
460
|
+
'workflow-catalog.json'
|
|
461
|
+
)}\` 에서 확인하세요.`
|
|
462
|
+
];
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
if (tool.id === 'claude-code') {
|
|
466
|
+
return [
|
|
467
|
+
`서브에이전트 이름은 \`${path.join(installRoot, 'agents')}\` 경로의 파일명 기준입니다.`,
|
|
468
|
+
`프로젝트 루트에서 \`ls ${path.join(
|
|
469
|
+
installRoot,
|
|
470
|
+
'agents'
|
|
471
|
+
)} | sed 's/\\.md$//'\` 로 서브에이전트 이름을 확인하세요.`,
|
|
472
|
+
`Claude 스킬 목록은 \`ls ${path.join(installRoot, 'skills')}\` 로 확인하세요.`
|
|
473
|
+
];
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
if (tool.id === 'antigravity') {
|
|
477
|
+
return [
|
|
478
|
+
`워크플로우 선택은 \`${path.join(
|
|
479
|
+
installRoot,
|
|
480
|
+
'workflows',
|
|
481
|
+
'workflow-catalog.json'
|
|
482
|
+
)}\` 에서 WF ID를 먼저 고르는 방식으로 진행하세요.`,
|
|
483
|
+
`에이전트 역할은 \`${path.join(installRoot, 'agents', 'agent-catalog.json')}\` 에서 확인하세요.`,
|
|
484
|
+
`입출력 아티팩트 스키마는 \`${path.join(
|
|
485
|
+
installRoot,
|
|
486
|
+
'artifacts',
|
|
487
|
+
'artifact-catalog.json'
|
|
488
|
+
)}\` 기준으로 맞추세요.`
|
|
489
|
+
];
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
return ['도구별 workflow 문서와 skill 문서를 기준으로 실행 순서를 고정하세요.'];
|
|
493
|
+
}
|
|
494
|
+
|
|
453
495
|
function renderMarkdownTable(headers, rows) {
|
|
454
496
|
const head = `| ${headers.join(' | ')} |`;
|
|
455
497
|
const divider = `| ${headers.map(() => '---').join(' | ')} |`;
|
|
@@ -508,6 +550,14 @@ async function writeUsageGuide({ catalog, selection, targetDir, mode }) {
|
|
|
508
550
|
lines.push(`${index + 1}. ${step}`);
|
|
509
551
|
});
|
|
510
552
|
|
|
553
|
+
lines.push('');
|
|
554
|
+
lines.push('### 도구별 실행 팁');
|
|
555
|
+
lines.push('아래 팁은 프로젝트 루트에서 바로 확인할 수 있는 방법입니다.');
|
|
556
|
+
const interactionTips = getToolInteractionTips(tool, installRoot);
|
|
557
|
+
interactionTips.forEach((tip, index) => {
|
|
558
|
+
lines.push(`${index + 1}. ${tip}`);
|
|
559
|
+
});
|
|
560
|
+
|
|
511
561
|
if (workflowSummary.length > 0) {
|
|
512
562
|
lines.push('');
|
|
513
563
|
lines.push('### 워크플로우 선택 가이드');
|
|
@@ -1305,6 +1355,15 @@ async function writeState({ catalog, targetDir, packageData, mode, selection })
|
|
|
1305
1355
|
await fs.writeFile(statePath, `${JSON.stringify(statePayload, null, 2)}\n`, 'utf8');
|
|
1306
1356
|
}
|
|
1307
1357
|
|
|
1358
|
+
async function cleanupLegacyStateDir(targetDir) {
|
|
1359
|
+
const legacyDir = path.join(targetDir, LEGACY_STATE_DIR_NAME);
|
|
1360
|
+
if (!(await exists(legacyDir))) {
|
|
1361
|
+
return false;
|
|
1362
|
+
}
|
|
1363
|
+
await fs.rm(legacyDir, { recursive: true, force: true });
|
|
1364
|
+
return true;
|
|
1365
|
+
}
|
|
1366
|
+
|
|
1308
1367
|
async function runInstallOrUpdate({ catalog, packageData, mode, selection, force, dryRun }) {
|
|
1309
1368
|
const overwrite = mode === 'update' || force;
|
|
1310
1369
|
const targetDir = selection.targetDir;
|
|
@@ -1397,9 +1456,13 @@ async function runInstallOrUpdate({ catalog, packageData, mode, selection, force
|
|
|
1397
1456
|
if (!dryRun) {
|
|
1398
1457
|
const generatedGuidePath = await writeUsageGuide({ catalog, selection, targetDir, mode });
|
|
1399
1458
|
await writeState({ catalog, targetDir, packageData, mode, selection });
|
|
1459
|
+
const legacyStateRemoved = await cleanupLegacyStateDir(targetDir);
|
|
1400
1460
|
console.log('');
|
|
1401
1461
|
console.log(`실행 가이드 저장: ${generatedGuidePath}`);
|
|
1402
1462
|
console.log(`상태 파일 저장: ${path.join(targetDir, STATE_DIR_NAME, 'state.json')}`);
|
|
1463
|
+
if (legacyStateRemoved) {
|
|
1464
|
+
console.log(`레거시 상태 폴더 정리: ${path.join(targetDir, LEGACY_STATE_DIR_NAME)}`);
|
|
1465
|
+
}
|
|
1403
1466
|
}
|
|
1404
1467
|
}
|
|
1405
1468
|
|
package/scripts/validate.mjs
CHANGED
|
@@ -210,6 +210,10 @@ async function validatePackageJson() {
|
|
|
210
210
|
}
|
|
211
211
|
}
|
|
212
212
|
|
|
213
|
+
if (!pkg.bin || pkg.bin['tri-agent-manager'] !== 'scripts/init.mjs') {
|
|
214
|
+
fail('[package] bin 설정 오류: tri-agent-manager -> scripts/init.mjs 가 필요합니다.');
|
|
215
|
+
}
|
|
216
|
+
|
|
213
217
|
const requiredFiles = [
|
|
214
218
|
'claude-code',
|
|
215
219
|
'antigravity',
|
|
@@ -228,7 +232,8 @@ async function validatePackageJson() {
|
|
|
228
232
|
'docs/COMPOSITION.ko.md',
|
|
229
233
|
'docs/DEPLOYMENT-GUIDE.ko.md',
|
|
230
234
|
'docs/UPDATE-GUIDE.ko.md',
|
|
231
|
-
'docs/UX-FLOW.ko.md'
|
|
235
|
+
'docs/UX-FLOW.ko.md',
|
|
236
|
+
'docs/NPM-PUBLISH-REPO-ONLY.ko.md'
|
|
232
237
|
];
|
|
233
238
|
for (const fileEntry of excludedFromPublish) {
|
|
234
239
|
if (Array.isArray(pkg.files) && pkg.files.includes(fileEntry)) {
|