@team-semicolon/semo-cli 3.0.27 → 3.0.28
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 +231 -231
- package/dist/index.js +352 -342
- package/package.json +48 -48
package/README.md
CHANGED
|
@@ -1,231 +1,231 @@
|
|
|
1
|
-
# @team-semicolon/semo-cli
|
|
2
|
-
|
|
3
|
-
> SEMO CLI v3.0 - AI Agent Orchestration Framework Installer
|
|
4
|
-
|
|
5
|
-
## 설치
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm install -g @team-semicolon/semo-cli
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## 빠른 시작
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
# 프로젝트에 SEMO 설치
|
|
15
|
-
semo init
|
|
16
|
-
|
|
17
|
-
# Extension 패키지 추가
|
|
18
|
-
semo add eng/nextjs
|
|
19
|
-
|
|
20
|
-
# 버전 확인 및 업데이트 체크
|
|
21
|
-
semo -v
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
## 명령어
|
|
25
|
-
|
|
26
|
-
### `semo init`
|
|
27
|
-
|
|
28
|
-
현재 프로젝트에 SEMO를 설치합니다.
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
semo init # 기본 설치 (프로젝트 유형 자동 감지)
|
|
32
|
-
semo init --force # 기존 설정 덮어쓰기
|
|
33
|
-
semo init --skip-mcp # MCP 설정 생략
|
|
34
|
-
semo init --with next,infra # 특정 패키지와 함께 설치
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
### `semo add <packages>`
|
|
38
|
-
|
|
39
|
-
Extension 패키지를 추가로 설치합니다.
|
|
40
|
-
|
|
41
|
-
```bash
|
|
42
|
-
# 개별 패키지 설치
|
|
43
|
-
semo add eng/nextjs
|
|
44
|
-
semo add biz/discovery
|
|
45
|
-
|
|
46
|
-
# 그룹 일괄 설치
|
|
47
|
-
semo add biz # Business 전체 (discovery, design, management, poc)
|
|
48
|
-
semo add eng # Engineering 전체 (nextjs, spring, ms, infra)
|
|
49
|
-
semo add ops # Operations 전체 (qa, monitor, improve)
|
|
50
|
-
|
|
51
|
-
# 여러 패키지 동시 설치
|
|
52
|
-
semo add eng/nextjs,eng/infra
|
|
53
|
-
|
|
54
|
-
# 레거시 별칭 지원
|
|
55
|
-
semo add next # → eng/nextjs
|
|
56
|
-
semo add backend # → eng/spring
|
|
57
|
-
semo add mvp # → biz/poc
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
### `semo list`
|
|
61
|
-
|
|
62
|
-
사용 가능한 모든 패키지를 표시합니다.
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
semo list
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### `semo status`
|
|
69
|
-
|
|
70
|
-
SEMO 설치 상태를 확인합니다.
|
|
71
|
-
|
|
72
|
-
```bash
|
|
73
|
-
semo status
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### `semo version` / `semo -v`
|
|
77
|
-
|
|
78
|
-
버전 정보 및 업데이트 확인을 표시합니다.
|
|
79
|
-
|
|
80
|
-
```bash
|
|
81
|
-
semo version
|
|
82
|
-
semo -v
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
출력 예시:
|
|
86
|
-
```
|
|
87
|
-
📦 SEMO CLI 버전 정보
|
|
88
|
-
|
|
89
|
-
현재 버전: 3.0.7
|
|
90
|
-
최신 버전: 3.0.7
|
|
91
|
-
|
|
92
|
-
✓ 최신 버전을 사용 중입니다.
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
### `semo update`
|
|
96
|
-
|
|
97
|
-
SEMO를 최신 버전으로 업데이트합니다.
|
|
98
|
-
|
|
99
|
-
```bash
|
|
100
|
-
semo update # CLI + semo-system 전체 업데이트
|
|
101
|
-
semo update --self # CLI만 업데이트
|
|
102
|
-
semo update --system # semo-system만 업데이트
|
|
103
|
-
semo update --skip-cli # CLI 업데이트 건너뛰기
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
## 패키지 구조
|
|
107
|
-
|
|
108
|
-
### Standard (필수)
|
|
109
|
-
|
|
110
|
-
모든 프로젝트에 기본 설치됩니다.
|
|
111
|
-
|
|
112
|
-
| 패키지 | 설명 |
|
|
113
|
-
|--------|------|
|
|
114
|
-
| `semo-core` | 원칙, 오케스트레이터, 공통 커맨드 |
|
|
115
|
-
| `semo-skills` | 13개 통합 스킬 (coder, tester, planner, deployer 등) |
|
|
116
|
-
|
|
117
|
-
### Extensions (선택)
|
|
118
|
-
|
|
119
|
-
프로젝트 유형에 맞게 선택적으로 설치합니다.
|
|
120
|
-
|
|
121
|
-
#### Business Layer (`biz`)
|
|
122
|
-
|
|
123
|
-
| 패키지 | 설명 | 설치 |
|
|
124
|
-
|--------|------|------|
|
|
125
|
-
| `biz/discovery` | 아이템 발굴, 시장 조사, Epic/Task | `semo add biz/discovery` |
|
|
126
|
-
| `biz/design` | 컨셉 설계, 목업, UX | `semo add biz/design` |
|
|
127
|
-
| `biz/management` | 일정/인력/스프린트 관리 | `semo add biz/management` |
|
|
128
|
-
| `biz/poc` | 빠른 PoC, 패스트트랙 | `semo add biz/poc` |
|
|
129
|
-
|
|
130
|
-
#### Engineering Layer (`eng`)
|
|
131
|
-
|
|
132
|
-
| 패키지 | 설명 | 자동 감지 | 설치 |
|
|
133
|
-
|--------|------|----------|------|
|
|
134
|
-
| `eng/nextjs` | Next.js 프론트엔드 개발 | `next.config.*` | `semo add eng/nextjs` |
|
|
135
|
-
| `eng/spring` | Spring Boot 백엔드 개발 | `pom.xml`, `build.gradle` | `semo add eng/spring` |
|
|
136
|
-
| `eng/ms` | 마이크로서비스 아키텍처 | - | `semo add eng/ms` |
|
|
137
|
-
| `eng/infra` | 인프라/배포 관리 | `Dockerfile`, `docker-compose.yml` | `semo add eng/infra` |
|
|
138
|
-
|
|
139
|
-
#### Operations Layer (`ops`)
|
|
140
|
-
|
|
141
|
-
| 패키지 | 설명 | 설치 |
|
|
142
|
-
|--------|------|------|
|
|
143
|
-
| `ops/qa` | 테스트/품질 관리 | `semo add ops/qa` |
|
|
144
|
-
| `ops/monitor` | 서비스 현황 모니터링 | `semo add ops/monitor` |
|
|
145
|
-
| `ops/improve` | 개선 제안 | `semo add ops/improve` |
|
|
146
|
-
|
|
147
|
-
#### Meta
|
|
148
|
-
|
|
149
|
-
| 패키지 | 설명 | 설치 |
|
|
150
|
-
|--------|------|------|
|
|
151
|
-
| `meta` | SEMO 프레임워크 자체 개발/관리 | `semo add meta` |
|
|
152
|
-
|
|
153
|
-
## 설치 후 구조
|
|
154
|
-
|
|
155
|
-
```
|
|
156
|
-
your-project/
|
|
157
|
-
├── .claude/
|
|
158
|
-
│ ├── CLAUDE.md # 프로젝트 설정 (Extension CLAUDE.md 병합)
|
|
159
|
-
│ ├── settings.json # MCP 서버 설정
|
|
160
|
-
│ ├── memory/ # Context Mesh (세션 간 컨텍스트)
|
|
161
|
-
│ │ ├── context.md # 프로젝트 상태
|
|
162
|
-
│ │ ├── decisions.md # 아키텍처 결정
|
|
163
|
-
│ │ └── rules/ # 프로젝트별 규칙
|
|
164
|
-
│ ├── agents/ # 에이전트 심볼릭 링크
|
|
165
|
-
│ ├── skills/ # 스킬 심볼릭 링크
|
|
166
|
-
│ └── commands/SEMO/ # SEMO 커맨드
|
|
167
|
-
│
|
|
168
|
-
└── semo-system/ # White Box (읽기 전용)
|
|
169
|
-
├── semo-core/ # Layer 0: 원칙, 오케스트레이션
|
|
170
|
-
├── semo-skills/ # Layer 1: 통합 스킬
|
|
171
|
-
├── biz/ # Business Layer (선택)
|
|
172
|
-
├── eng/ # Engineering Layer (선택)
|
|
173
|
-
└── ops/ # Operations Layer (선택)
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
## MCP 서버
|
|
177
|
-
|
|
178
|
-
SEMO CLI는 다음 MCP 서버를 자동으로 등록합니다:
|
|
179
|
-
|
|
180
|
-
| 서버 | 설명 |
|
|
181
|
-
|------|------|
|
|
182
|
-
| `semo-integrations` | GitHub, Slack, Supabase 연동 |
|
|
183
|
-
| `context7` | 라이브러리 문서 조회 |
|
|
184
|
-
| `sequential-thinking` | 순차적 사고 지원 |
|
|
185
|
-
|
|
186
|
-
### 환경변수
|
|
187
|
-
|
|
188
|
-
MCP 연동을 위해 다음 환경변수를 설정하세요:
|
|
189
|
-
|
|
190
|
-
| 변수 | 설명 |
|
|
191
|
-
|------|------|
|
|
192
|
-
| `GITHUB_TOKEN` | GitHub API 토큰 |
|
|
193
|
-
| `SLACK_BOT_TOKEN` | Slack Bot 토큰 |
|
|
194
|
-
| `SUPABASE_URL` | Supabase 프로젝트 URL |
|
|
195
|
-
| `SUPABASE_KEY` | Supabase 서비스 키 |
|
|
196
|
-
|
|
197
|
-
## 프로젝트 유형 자동 감지
|
|
198
|
-
|
|
199
|
-
`semo init` 실행 시 프로젝트 파일을 분석하여 적절한 패키지를 추천합니다:
|
|
200
|
-
|
|
201
|
-
| 감지 파일 | 추천 패키지 |
|
|
202
|
-
|----------|-------------|
|
|
203
|
-
| `next.config.js`, `next.config.mjs`, `next.config.ts` | `eng/nextjs` |
|
|
204
|
-
| `pom.xml`, `build.gradle` | `eng/spring` |
|
|
205
|
-
| `Dockerfile`, `docker-compose.yml` | `eng/infra` |
|
|
206
|
-
| `semo-core`, `semo-skills` | `meta` |
|
|
207
|
-
|
|
208
|
-
## 레거시 명령어 호환
|
|
209
|
-
|
|
210
|
-
이전 버전 사용자를 위해 레거시 패키지명도 지원합니다:
|
|
211
|
-
|
|
212
|
-
| 레거시 | 현재 |
|
|
213
|
-
|--------|------|
|
|
214
|
-
| `semo add next` | `semo add eng/nextjs` |
|
|
215
|
-
| `semo add backend` | `semo add eng/spring` |
|
|
216
|
-
| `semo add ms` | `semo add eng/ms` |
|
|
217
|
-
| `semo add infra` | `semo add eng/infra` |
|
|
218
|
-
| `semo add qa` | `semo add ops/qa` |
|
|
219
|
-
| `semo add po` | `semo add biz/discovery` |
|
|
220
|
-
| `semo add pm` | `semo add biz/management` |
|
|
221
|
-
| `semo add design` | `semo add biz/design` |
|
|
222
|
-
| `semo add mvp` | `semo add biz/poc` |
|
|
223
|
-
|
|
224
|
-
## 참조
|
|
225
|
-
|
|
226
|
-
- [SEMO 레포지토리](https://github.com/semicolon-devteam/semo)
|
|
227
|
-
- [SEMO MCP Server](https://www.npmjs.com/package/@team-semicolon/semo-mcp)
|
|
228
|
-
|
|
229
|
-
## 라이선스
|
|
230
|
-
|
|
231
|
-
MIT
|
|
1
|
+
# @team-semicolon/semo-cli
|
|
2
|
+
|
|
3
|
+
> SEMO CLI v3.0 - AI Agent Orchestration Framework Installer
|
|
4
|
+
|
|
5
|
+
## 설치
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g @team-semicolon/semo-cli
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 빠른 시작
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# 프로젝트에 SEMO 설치
|
|
15
|
+
semo init
|
|
16
|
+
|
|
17
|
+
# Extension 패키지 추가
|
|
18
|
+
semo add eng/nextjs
|
|
19
|
+
|
|
20
|
+
# 버전 확인 및 업데이트 체크
|
|
21
|
+
semo -v
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## 명령어
|
|
25
|
+
|
|
26
|
+
### `semo init`
|
|
27
|
+
|
|
28
|
+
현재 프로젝트에 SEMO를 설치합니다.
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
semo init # 기본 설치 (프로젝트 유형 자동 감지)
|
|
32
|
+
semo init --force # 기존 설정 덮어쓰기
|
|
33
|
+
semo init --skip-mcp # MCP 설정 생략
|
|
34
|
+
semo init --with next,infra # 특정 패키지와 함께 설치
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### `semo add <packages>`
|
|
38
|
+
|
|
39
|
+
Extension 패키지를 추가로 설치합니다.
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# 개별 패키지 설치
|
|
43
|
+
semo add eng/nextjs
|
|
44
|
+
semo add biz/discovery
|
|
45
|
+
|
|
46
|
+
# 그룹 일괄 설치
|
|
47
|
+
semo add biz # Business 전체 (discovery, design, management, poc)
|
|
48
|
+
semo add eng # Engineering 전체 (nextjs, spring, ms, infra)
|
|
49
|
+
semo add ops # Operations 전체 (qa, monitor, improve)
|
|
50
|
+
|
|
51
|
+
# 여러 패키지 동시 설치
|
|
52
|
+
semo add eng/nextjs,eng/infra
|
|
53
|
+
|
|
54
|
+
# 레거시 별칭 지원
|
|
55
|
+
semo add next # → eng/nextjs
|
|
56
|
+
semo add backend # → eng/spring
|
|
57
|
+
semo add mvp # → biz/poc
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### `semo list`
|
|
61
|
+
|
|
62
|
+
사용 가능한 모든 패키지를 표시합니다.
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
semo list
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### `semo status`
|
|
69
|
+
|
|
70
|
+
SEMO 설치 상태를 확인합니다.
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
semo status
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### `semo version` / `semo -v`
|
|
77
|
+
|
|
78
|
+
버전 정보 및 업데이트 확인을 표시합니다.
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
semo version
|
|
82
|
+
semo -v
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
출력 예시:
|
|
86
|
+
```
|
|
87
|
+
📦 SEMO CLI 버전 정보
|
|
88
|
+
|
|
89
|
+
현재 버전: 3.0.7
|
|
90
|
+
최신 버전: 3.0.7
|
|
91
|
+
|
|
92
|
+
✓ 최신 버전을 사용 중입니다.
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### `semo update`
|
|
96
|
+
|
|
97
|
+
SEMO를 최신 버전으로 업데이트합니다.
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
semo update # CLI + semo-system 전체 업데이트
|
|
101
|
+
semo update --self # CLI만 업데이트
|
|
102
|
+
semo update --system # semo-system만 업데이트
|
|
103
|
+
semo update --skip-cli # CLI 업데이트 건너뛰기
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## 패키지 구조
|
|
107
|
+
|
|
108
|
+
### Standard (필수)
|
|
109
|
+
|
|
110
|
+
모든 프로젝트에 기본 설치됩니다.
|
|
111
|
+
|
|
112
|
+
| 패키지 | 설명 |
|
|
113
|
+
|--------|------|
|
|
114
|
+
| `semo-core` | 원칙, 오케스트레이터, 공통 커맨드 |
|
|
115
|
+
| `semo-skills` | 13개 통합 스킬 (coder, tester, planner, deployer 등) |
|
|
116
|
+
|
|
117
|
+
### Extensions (선택)
|
|
118
|
+
|
|
119
|
+
프로젝트 유형에 맞게 선택적으로 설치합니다.
|
|
120
|
+
|
|
121
|
+
#### Business Layer (`biz`)
|
|
122
|
+
|
|
123
|
+
| 패키지 | 설명 | 설치 |
|
|
124
|
+
|--------|------|------|
|
|
125
|
+
| `biz/discovery` | 아이템 발굴, 시장 조사, Epic/Task | `semo add biz/discovery` |
|
|
126
|
+
| `biz/design` | 컨셉 설계, 목업, UX | `semo add biz/design` |
|
|
127
|
+
| `biz/management` | 일정/인력/스프린트 관리 | `semo add biz/management` |
|
|
128
|
+
| `biz/poc` | 빠른 PoC, 패스트트랙 | `semo add biz/poc` |
|
|
129
|
+
|
|
130
|
+
#### Engineering Layer (`eng`)
|
|
131
|
+
|
|
132
|
+
| 패키지 | 설명 | 자동 감지 | 설치 |
|
|
133
|
+
|--------|------|----------|------|
|
|
134
|
+
| `eng/nextjs` | Next.js 프론트엔드 개발 | `next.config.*` | `semo add eng/nextjs` |
|
|
135
|
+
| `eng/spring` | Spring Boot 백엔드 개발 | `pom.xml`, `build.gradle` | `semo add eng/spring` |
|
|
136
|
+
| `eng/ms` | 마이크로서비스 아키텍처 | - | `semo add eng/ms` |
|
|
137
|
+
| `eng/infra` | 인프라/배포 관리 | `Dockerfile`, `docker-compose.yml` | `semo add eng/infra` |
|
|
138
|
+
|
|
139
|
+
#### Operations Layer (`ops`)
|
|
140
|
+
|
|
141
|
+
| 패키지 | 설명 | 설치 |
|
|
142
|
+
|--------|------|------|
|
|
143
|
+
| `ops/qa` | 테스트/품질 관리 | `semo add ops/qa` |
|
|
144
|
+
| `ops/monitor` | 서비스 현황 모니터링 | `semo add ops/monitor` |
|
|
145
|
+
| `ops/improve` | 개선 제안 | `semo add ops/improve` |
|
|
146
|
+
|
|
147
|
+
#### Meta
|
|
148
|
+
|
|
149
|
+
| 패키지 | 설명 | 설치 |
|
|
150
|
+
|--------|------|------|
|
|
151
|
+
| `meta` | SEMO 프레임워크 자체 개발/관리 | `semo add meta` |
|
|
152
|
+
|
|
153
|
+
## 설치 후 구조
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
your-project/
|
|
157
|
+
├── .claude/
|
|
158
|
+
│ ├── CLAUDE.md # 프로젝트 설정 (Extension CLAUDE.md 병합)
|
|
159
|
+
│ ├── settings.json # MCP 서버 설정
|
|
160
|
+
│ ├── memory/ # Context Mesh (세션 간 컨텍스트)
|
|
161
|
+
│ │ ├── context.md # 프로젝트 상태
|
|
162
|
+
│ │ ├── decisions.md # 아키텍처 결정
|
|
163
|
+
│ │ └── rules/ # 프로젝트별 규칙
|
|
164
|
+
│ ├── agents/ # 에이전트 심볼릭 링크
|
|
165
|
+
│ ├── skills/ # 스킬 심볼릭 링크
|
|
166
|
+
│ └── commands/SEMO/ # SEMO 커맨드
|
|
167
|
+
│
|
|
168
|
+
└── semo-system/ # White Box (읽기 전용)
|
|
169
|
+
├── semo-core/ # Layer 0: 원칙, 오케스트레이션
|
|
170
|
+
├── semo-skills/ # Layer 1: 통합 스킬
|
|
171
|
+
├── biz/ # Business Layer (선택)
|
|
172
|
+
├── eng/ # Engineering Layer (선택)
|
|
173
|
+
└── ops/ # Operations Layer (선택)
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## MCP 서버
|
|
177
|
+
|
|
178
|
+
SEMO CLI는 다음 MCP 서버를 자동으로 등록합니다:
|
|
179
|
+
|
|
180
|
+
| 서버 | 설명 |
|
|
181
|
+
|------|------|
|
|
182
|
+
| `semo-integrations` | GitHub, Slack, Supabase 연동 |
|
|
183
|
+
| `context7` | 라이브러리 문서 조회 |
|
|
184
|
+
| `sequential-thinking` | 순차적 사고 지원 |
|
|
185
|
+
|
|
186
|
+
### 환경변수
|
|
187
|
+
|
|
188
|
+
MCP 연동을 위해 다음 환경변수를 설정하세요:
|
|
189
|
+
|
|
190
|
+
| 변수 | 설명 |
|
|
191
|
+
|------|------|
|
|
192
|
+
| `GITHUB_TOKEN` | GitHub API 토큰 |
|
|
193
|
+
| `SLACK_BOT_TOKEN` | Slack Bot 토큰 |
|
|
194
|
+
| `SUPABASE_URL` | Supabase 프로젝트 URL |
|
|
195
|
+
| `SUPABASE_KEY` | Supabase 서비스 키 |
|
|
196
|
+
|
|
197
|
+
## 프로젝트 유형 자동 감지
|
|
198
|
+
|
|
199
|
+
`semo init` 실행 시 프로젝트 파일을 분석하여 적절한 패키지를 추천합니다:
|
|
200
|
+
|
|
201
|
+
| 감지 파일 | 추천 패키지 |
|
|
202
|
+
|----------|-------------|
|
|
203
|
+
| `next.config.js`, `next.config.mjs`, `next.config.ts` | `eng/nextjs` |
|
|
204
|
+
| `pom.xml`, `build.gradle` | `eng/spring` |
|
|
205
|
+
| `Dockerfile`, `docker-compose.yml` | `eng/infra` |
|
|
206
|
+
| `semo-core`, `semo-skills` | `meta` |
|
|
207
|
+
|
|
208
|
+
## 레거시 명령어 호환
|
|
209
|
+
|
|
210
|
+
이전 버전 사용자를 위해 레거시 패키지명도 지원합니다:
|
|
211
|
+
|
|
212
|
+
| 레거시 | 현재 |
|
|
213
|
+
|--------|------|
|
|
214
|
+
| `semo add next` | `semo add eng/nextjs` |
|
|
215
|
+
| `semo add backend` | `semo add eng/spring` |
|
|
216
|
+
| `semo add ms` | `semo add eng/ms` |
|
|
217
|
+
| `semo add infra` | `semo add eng/infra` |
|
|
218
|
+
| `semo add qa` | `semo add ops/qa` |
|
|
219
|
+
| `semo add po` | `semo add biz/discovery` |
|
|
220
|
+
| `semo add pm` | `semo add biz/management` |
|
|
221
|
+
| `semo add design` | `semo add biz/design` |
|
|
222
|
+
| `semo add mvp` | `semo add biz/poc` |
|
|
223
|
+
|
|
224
|
+
## 참조
|
|
225
|
+
|
|
226
|
+
- [SEMO 레포지토리](https://github.com/semicolon-devteam/semo)
|
|
227
|
+
- [SEMO MCP Server](https://www.npmjs.com/package/@team-semicolon/semo-mcp)
|
|
228
|
+
|
|
229
|
+
## 라이선스
|
|
230
|
+
|
|
231
|
+
MIT
|
package/dist/index.js
CHANGED
|
@@ -806,8 +806,12 @@ function checkRequiredTools() {
|
|
|
806
806
|
{
|
|
807
807
|
name: "Supabase CLI",
|
|
808
808
|
installed: false,
|
|
809
|
-
installCmd: isWindows ? "
|
|
809
|
+
installCmd: isWindows ? "winget install Supabase.CLI" : "brew install supabase/tap/supabase",
|
|
810
810
|
description: "Supabase 데이터베이스 연동",
|
|
811
|
+
windowsAltCmds: isWindows ? [
|
|
812
|
+
"scoop bucket add supabase https://github.com/supabase/scoop-bucket.git && scoop install supabase",
|
|
813
|
+
"choco install supabase"
|
|
814
|
+
] : undefined,
|
|
811
815
|
},
|
|
812
816
|
];
|
|
813
817
|
// GitHub CLI 확인
|
|
@@ -849,6 +853,12 @@ async function showToolsStatus() {
|
|
|
849
853
|
console.log(chalk_1.default.cyan("📋 설치 명령어:"));
|
|
850
854
|
for (const tool of missingTools) {
|
|
851
855
|
console.log(chalk_1.default.white(` ${tool.installCmd}`));
|
|
856
|
+
if (tool.windowsAltCmds && tool.windowsAltCmds.length > 0) {
|
|
857
|
+
console.log(chalk_1.default.gray(" (대체 방법)"));
|
|
858
|
+
for (const altCmd of tool.windowsAltCmds) {
|
|
859
|
+
console.log(chalk_1.default.gray(` ${altCmd}`));
|
|
860
|
+
}
|
|
861
|
+
}
|
|
852
862
|
}
|
|
853
863
|
console.log();
|
|
854
864
|
const { continueWithout } = await inquirer_1.default.prompt([
|
|
@@ -1435,89 +1445,89 @@ function createMergedOrchestrator(claudeAgentsDir, orchestratorSources) {
|
|
|
1435
1445
|
}
|
|
1436
1446
|
}
|
|
1437
1447
|
// 병합된 orchestrator.md 생성
|
|
1438
|
-
const mergedContent = `---
|
|
1439
|
-
name: orchestrator
|
|
1440
|
-
description: |
|
|
1441
|
-
SEMO Merged Orchestrator - Routes all user requests to appropriate agents/skills.
|
|
1442
|
-
This orchestrator combines routing tables from ${orchestratorSources.length} packages.
|
|
1443
|
-
PROACTIVELY delegate on ALL requests. Never process directly.
|
|
1444
|
-
tools:
|
|
1445
|
-
- read_file
|
|
1446
|
-
- list_dir
|
|
1447
|
-
- run_command
|
|
1448
|
-
- glob
|
|
1449
|
-
- grep
|
|
1450
|
-
- task
|
|
1451
|
-
- skill
|
|
1452
|
-
model: inherit
|
|
1453
|
-
---
|
|
1454
|
-
|
|
1455
|
-
# SEMO Merged Orchestrator
|
|
1456
|
-
|
|
1457
|
-
> 이 파일은 **자동 생성**되었습니다. 직접 수정하지 마세요.
|
|
1458
|
-
> 원본 파일: \`_packages/\` 디렉토리 참조
|
|
1459
|
-
|
|
1460
|
-
모든 사용자 요청을 분석하고 적절한 Agent 또는 Skill로 라우팅하는 **Primary Router**입니다.
|
|
1461
|
-
|
|
1462
|
-
## 🔴 설치된 패키지
|
|
1463
|
-
|
|
1464
|
-
${orchestratorSources.map(s => `- **${EXTENSION_PACKAGES[s.pkg]?.name || s.pkg}**: \`semo-system/${s.pkg}\``).join("\n")}
|
|
1465
|
-
|
|
1466
|
-
## �� Quick Routing Table (Merged)
|
|
1467
|
-
|
|
1468
|
-
> 키워드 매칭 시 **첫 번째 매칭된 패키지**로 라우팅됩니다.
|
|
1469
|
-
|
|
1470
|
-
${routingTables.join("\n\n---\n\n")}
|
|
1471
|
-
|
|
1472
|
-
## SEMO 메시지 포맷
|
|
1473
|
-
|
|
1474
|
-
### Agent 위임
|
|
1475
|
-
|
|
1476
|
-
\`\`\`markdown
|
|
1477
|
-
[SEMO] Orchestrator: 의도 분석 완료 → {intent_category}
|
|
1478
|
-
|
|
1479
|
-
[SEMO] Agent 위임: {agent_name} (사유: {reason})
|
|
1480
|
-
\`\`\`
|
|
1481
|
-
|
|
1482
|
-
### Skill 호출
|
|
1483
|
-
|
|
1484
|
-
\`\`\`markdown
|
|
1485
|
-
[SEMO] Orchestrator: 의도 분석 완료 → {intent_category}
|
|
1486
|
-
|
|
1487
|
-
[SEMO] Skill 호출: {skill_name}
|
|
1488
|
-
\`\`\`
|
|
1489
|
-
|
|
1490
|
-
### 라우팅 실패
|
|
1491
|
-
|
|
1492
|
-
\`\`\`markdown
|
|
1493
|
-
[SEMO] Orchestrator: 라우팅 실패 → 적절한 Agent/Skill 없음
|
|
1494
|
-
|
|
1495
|
-
⚠️ 직접 처리 필요
|
|
1496
|
-
\`\`\`
|
|
1497
|
-
|
|
1498
|
-
## Critical Rules
|
|
1499
|
-
|
|
1500
|
-
1. **Routing-Only**: 직접 작업 수행 금지
|
|
1501
|
-
2. **SEMO 메시지 필수**: 모든 위임에 SEMO 메시지 포함
|
|
1502
|
-
3. **Package Priority**: 라우팅 충돌 시 설치 순서대로 우선순위 적용
|
|
1503
|
-
4. **Cross-Package**: 다른 패키지 전문 영역 요청 시 인계 권유
|
|
1504
|
-
|
|
1505
|
-
${crossPackageRouting.length > 0 ? `## 🔄 Cross-Package Routing
|
|
1506
|
-
|
|
1507
|
-
${crossPackageRouting[0]}` : ""}
|
|
1508
|
-
|
|
1509
|
-
${availableAgents.length > 0 ? `## Available Agents (All Packages)
|
|
1510
|
-
|
|
1511
|
-
${availableAgents.join("\n\n")}` : ""}
|
|
1512
|
-
|
|
1513
|
-
${availableSkills.length > 0 ? `## Available Skills (All Packages)
|
|
1514
|
-
|
|
1515
|
-
${availableSkills.join("\n\n")}` : ""}
|
|
1516
|
-
|
|
1517
|
-
## References
|
|
1518
|
-
|
|
1519
|
-
- 원본 Orchestrator: \`_packages/\` 디렉토리
|
|
1520
|
-
- 병합된 References: \`references/\` 디렉토리
|
|
1448
|
+
const mergedContent = `---
|
|
1449
|
+
name: orchestrator
|
|
1450
|
+
description: |
|
|
1451
|
+
SEMO Merged Orchestrator - Routes all user requests to appropriate agents/skills.
|
|
1452
|
+
This orchestrator combines routing tables from ${orchestratorSources.length} packages.
|
|
1453
|
+
PROACTIVELY delegate on ALL requests. Never process directly.
|
|
1454
|
+
tools:
|
|
1455
|
+
- read_file
|
|
1456
|
+
- list_dir
|
|
1457
|
+
- run_command
|
|
1458
|
+
- glob
|
|
1459
|
+
- grep
|
|
1460
|
+
- task
|
|
1461
|
+
- skill
|
|
1462
|
+
model: inherit
|
|
1463
|
+
---
|
|
1464
|
+
|
|
1465
|
+
# SEMO Merged Orchestrator
|
|
1466
|
+
|
|
1467
|
+
> 이 파일은 **자동 생성**되었습니다. 직접 수정하지 마세요.
|
|
1468
|
+
> 원본 파일: \`_packages/\` 디렉토리 참조
|
|
1469
|
+
|
|
1470
|
+
모든 사용자 요청을 분석하고 적절한 Agent 또는 Skill로 라우팅하는 **Primary Router**입니다.
|
|
1471
|
+
|
|
1472
|
+
## 🔴 설치된 패키지
|
|
1473
|
+
|
|
1474
|
+
${orchestratorSources.map(s => `- **${EXTENSION_PACKAGES[s.pkg]?.name || s.pkg}**: \`semo-system/${s.pkg}\``).join("\n")}
|
|
1475
|
+
|
|
1476
|
+
## �� Quick Routing Table (Merged)
|
|
1477
|
+
|
|
1478
|
+
> 키워드 매칭 시 **첫 번째 매칭된 패키지**로 라우팅됩니다.
|
|
1479
|
+
|
|
1480
|
+
${routingTables.join("\n\n---\n\n")}
|
|
1481
|
+
|
|
1482
|
+
## SEMO 메시지 포맷
|
|
1483
|
+
|
|
1484
|
+
### Agent 위임
|
|
1485
|
+
|
|
1486
|
+
\`\`\`markdown
|
|
1487
|
+
[SEMO] Orchestrator: 의도 분석 완료 → {intent_category}
|
|
1488
|
+
|
|
1489
|
+
[SEMO] Agent 위임: {agent_name} (사유: {reason})
|
|
1490
|
+
\`\`\`
|
|
1491
|
+
|
|
1492
|
+
### Skill 호출
|
|
1493
|
+
|
|
1494
|
+
\`\`\`markdown
|
|
1495
|
+
[SEMO] Orchestrator: 의도 분석 완료 → {intent_category}
|
|
1496
|
+
|
|
1497
|
+
[SEMO] Skill 호출: {skill_name}
|
|
1498
|
+
\`\`\`
|
|
1499
|
+
|
|
1500
|
+
### 라우팅 실패
|
|
1501
|
+
|
|
1502
|
+
\`\`\`markdown
|
|
1503
|
+
[SEMO] Orchestrator: 라우팅 실패 → 적절한 Agent/Skill 없음
|
|
1504
|
+
|
|
1505
|
+
⚠️ 직접 처리 필요
|
|
1506
|
+
\`\`\`
|
|
1507
|
+
|
|
1508
|
+
## Critical Rules
|
|
1509
|
+
|
|
1510
|
+
1. **Routing-Only**: 직접 작업 수행 금지
|
|
1511
|
+
2. **SEMO 메시지 필수**: 모든 위임에 SEMO 메시지 포함
|
|
1512
|
+
3. **Package Priority**: 라우팅 충돌 시 설치 순서대로 우선순위 적용
|
|
1513
|
+
4. **Cross-Package**: 다른 패키지 전문 영역 요청 시 인계 권유
|
|
1514
|
+
|
|
1515
|
+
${crossPackageRouting.length > 0 ? `## 🔄 Cross-Package Routing
|
|
1516
|
+
|
|
1517
|
+
${crossPackageRouting[0]}` : ""}
|
|
1518
|
+
|
|
1519
|
+
${availableAgents.length > 0 ? `## Available Agents (All Packages)
|
|
1520
|
+
|
|
1521
|
+
${availableAgents.join("\n\n")}` : ""}
|
|
1522
|
+
|
|
1523
|
+
${availableSkills.length > 0 ? `## Available Skills (All Packages)
|
|
1524
|
+
|
|
1525
|
+
${availableSkills.join("\n\n")}` : ""}
|
|
1526
|
+
|
|
1527
|
+
## References
|
|
1528
|
+
|
|
1529
|
+
- 원본 Orchestrator: \`_packages/\` 디렉토리
|
|
1530
|
+
- 병합된 References: \`references/\` 디렉토리
|
|
1521
1531
|
`;
|
|
1522
1532
|
fs.writeFileSync(path.join(orchestratorDir, "orchestrator.md"), mergedContent);
|
|
1523
1533
|
}
|
|
@@ -1872,12 +1882,12 @@ async function mergeExtensionSettings(cwd, packages) {
|
|
|
1872
1882
|
function updateGitignore(cwd) {
|
|
1873
1883
|
console.log(chalk_1.default.cyan("\n📝 .gitignore 업데이트"));
|
|
1874
1884
|
const gitignorePath = path.join(cwd, ".gitignore");
|
|
1875
|
-
const semoIgnoreBlock = `
|
|
1876
|
-
# === SEMO ===
|
|
1877
|
-
.claude/*
|
|
1878
|
-
!.claude/memory/
|
|
1879
|
-
!.claude/memory/**
|
|
1880
|
-
semo-system/
|
|
1885
|
+
const semoIgnoreBlock = `
|
|
1886
|
+
# === SEMO ===
|
|
1887
|
+
.claude/*
|
|
1888
|
+
!.claude/memory/
|
|
1889
|
+
!.claude/memory/**
|
|
1890
|
+
semo-system/
|
|
1881
1891
|
`;
|
|
1882
1892
|
if (fs.existsSync(gitignorePath)) {
|
|
1883
1893
|
const content = fs.readFileSync(gitignorePath, "utf-8");
|
|
@@ -1905,36 +1915,36 @@ async function setupContextMesh(cwd) {
|
|
|
1905
1915
|
// context.md
|
|
1906
1916
|
const contextPath = path.join(memoryDir, "context.md");
|
|
1907
1917
|
if (!fs.existsSync(contextPath)) {
|
|
1908
|
-
const contextContent = `# Project Context
|
|
1909
|
-
|
|
1910
|
-
> 세션 간 영속화되는 프로젝트 컨텍스트
|
|
1911
|
-
> SEMO의 memory 스킬이 이 파일을 자동으로 업데이트합니다.
|
|
1912
|
-
|
|
1913
|
-
---
|
|
1914
|
-
|
|
1915
|
-
## 프로젝트 정보
|
|
1916
|
-
|
|
1917
|
-
| 항목 | 값 |
|
|
1918
|
-
|------|-----|
|
|
1919
|
-
| **이름** | ${path.basename(cwd)} |
|
|
1920
|
-
| **SEMO 버전** | ${VERSION} |
|
|
1921
|
-
| **설치일** | ${new Date().toISOString().split("T")[0]} |
|
|
1922
|
-
|
|
1923
|
-
---
|
|
1924
|
-
|
|
1925
|
-
## 현재 작업 상태
|
|
1926
|
-
|
|
1927
|
-
_아직 작업 기록이 없습니다._
|
|
1928
|
-
|
|
1929
|
-
---
|
|
1930
|
-
|
|
1931
|
-
## 기술 스택
|
|
1932
|
-
|
|
1933
|
-
_프로젝트 분석 후 자동으로 채워집니다._
|
|
1934
|
-
|
|
1935
|
-
---
|
|
1936
|
-
|
|
1937
|
-
*마지막 업데이트: ${new Date().toISOString().split("T")[0]}*
|
|
1918
|
+
const contextContent = `# Project Context
|
|
1919
|
+
|
|
1920
|
+
> 세션 간 영속화되는 프로젝트 컨텍스트
|
|
1921
|
+
> SEMO의 memory 스킬이 이 파일을 자동으로 업데이트합니다.
|
|
1922
|
+
|
|
1923
|
+
---
|
|
1924
|
+
|
|
1925
|
+
## 프로젝트 정보
|
|
1926
|
+
|
|
1927
|
+
| 항목 | 값 |
|
|
1928
|
+
|------|-----|
|
|
1929
|
+
| **이름** | ${path.basename(cwd)} |
|
|
1930
|
+
| **SEMO 버전** | ${VERSION} |
|
|
1931
|
+
| **설치일** | ${new Date().toISOString().split("T")[0]} |
|
|
1932
|
+
|
|
1933
|
+
---
|
|
1934
|
+
|
|
1935
|
+
## 현재 작업 상태
|
|
1936
|
+
|
|
1937
|
+
_아직 작업 기록이 없습니다._
|
|
1938
|
+
|
|
1939
|
+
---
|
|
1940
|
+
|
|
1941
|
+
## 기술 스택
|
|
1942
|
+
|
|
1943
|
+
_프로젝트 분석 후 자동으로 채워집니다._
|
|
1944
|
+
|
|
1945
|
+
---
|
|
1946
|
+
|
|
1947
|
+
*마지막 업데이트: ${new Date().toISOString().split("T")[0]}*
|
|
1938
1948
|
`;
|
|
1939
1949
|
fs.writeFileSync(contextPath, contextContent);
|
|
1940
1950
|
console.log(chalk_1.default.green("✓ .claude/memory/context.md 생성됨"));
|
|
@@ -1942,36 +1952,36 @@ _프로젝트 분석 후 자동으로 채워집니다._
|
|
|
1942
1952
|
// decisions.md
|
|
1943
1953
|
const decisionsPath = path.join(memoryDir, "decisions.md");
|
|
1944
1954
|
if (!fs.existsSync(decisionsPath)) {
|
|
1945
|
-
const decisionsContent = `# Architecture Decisions
|
|
1946
|
-
|
|
1947
|
-
> 프로젝트 아키텍처 결정 기록 (ADR)
|
|
1948
|
-
> 중요한 기술적 결정을 여기에 기록합니다.
|
|
1949
|
-
|
|
1950
|
-
---
|
|
1951
|
-
|
|
1952
|
-
## 결정 목록
|
|
1953
|
-
|
|
1954
|
-
_아직 기록된 결정이 없습니다._
|
|
1955
|
-
|
|
1956
|
-
---
|
|
1957
|
-
|
|
1958
|
-
## 템플릿
|
|
1959
|
-
|
|
1960
|
-
\`\`\`markdown
|
|
1961
|
-
### ADR-XXX: 결정 제목
|
|
1962
|
-
|
|
1963
|
-
**날짜**: YYYY-MM-DD
|
|
1964
|
-
**상태**: Proposed | Accepted | Deprecated
|
|
1965
|
-
|
|
1966
|
-
#### 배경
|
|
1967
|
-
결정이 필요한 이유
|
|
1968
|
-
|
|
1969
|
-
#### 결정
|
|
1970
|
-
선택한 방안
|
|
1971
|
-
|
|
1972
|
-
#### 근거
|
|
1973
|
-
선택 이유
|
|
1974
|
-
\`\`\`
|
|
1955
|
+
const decisionsContent = `# Architecture Decisions
|
|
1956
|
+
|
|
1957
|
+
> 프로젝트 아키텍처 결정 기록 (ADR)
|
|
1958
|
+
> 중요한 기술적 결정을 여기에 기록합니다.
|
|
1959
|
+
|
|
1960
|
+
---
|
|
1961
|
+
|
|
1962
|
+
## 결정 목록
|
|
1963
|
+
|
|
1964
|
+
_아직 기록된 결정이 없습니다._
|
|
1965
|
+
|
|
1966
|
+
---
|
|
1967
|
+
|
|
1968
|
+
## 템플릿
|
|
1969
|
+
|
|
1970
|
+
\`\`\`markdown
|
|
1971
|
+
### ADR-XXX: 결정 제목
|
|
1972
|
+
|
|
1973
|
+
**날짜**: YYYY-MM-DD
|
|
1974
|
+
**상태**: Proposed | Accepted | Deprecated
|
|
1975
|
+
|
|
1976
|
+
#### 배경
|
|
1977
|
+
결정이 필요한 이유
|
|
1978
|
+
|
|
1979
|
+
#### 결정
|
|
1980
|
+
선택한 방안
|
|
1981
|
+
|
|
1982
|
+
#### 근거
|
|
1983
|
+
선택 이유
|
|
1984
|
+
\`\`\`
|
|
1975
1985
|
`;
|
|
1976
1986
|
fs.writeFileSync(decisionsPath, decisionsContent);
|
|
1977
1987
|
console.log(chalk_1.default.green("✓ .claude/memory/decisions.md 생성됨"));
|
|
@@ -1979,62 +1989,62 @@ _아직 기록된 결정이 없습니다._
|
|
|
1979
1989
|
// projects.md
|
|
1980
1990
|
const projectsPath = path.join(memoryDir, "projects.md");
|
|
1981
1991
|
if (!fs.existsSync(projectsPath)) {
|
|
1982
|
-
const projectsContent = `# 프로젝트 별칭 매핑
|
|
1983
|
-
|
|
1984
|
-
> 외부 프로젝트 배포 및 GitHub Projects 상태 관리
|
|
1985
|
-
> SEMO의 deployer, project-status 스킬이 이 파일을 참조합니다.
|
|
1986
|
-
|
|
1987
|
-
---
|
|
1988
|
-
|
|
1989
|
-
## GitHub Projects 설정
|
|
1990
|
-
|
|
1991
|
-
> **⚠️ 프로젝트 상태 관리 시 이 설정을 참조합니다.**
|
|
1992
|
-
|
|
1993
|
-
### 기본 프로젝트
|
|
1994
|
-
|
|
1995
|
-
| 프로젝트 | 번호 | Project ID | 용도 |
|
|
1996
|
-
|---------|------|------------|------|
|
|
1997
|
-
| 이슈관리 | #1 | \`PVT_xxx\` | 메인 태스크 관리 (기본값) |
|
|
1998
|
-
|
|
1999
|
-
### Status 옵션
|
|
2000
|
-
|
|
2001
|
-
| Status | 설명 |
|
|
2002
|
-
|--------|------|
|
|
2003
|
-
| 백로그 | 초기 상태 |
|
|
2004
|
-
| 작업중 | 개발 진행 중 |
|
|
2005
|
-
| 리뷰요청 | 코드 리뷰 대기 |
|
|
2006
|
-
| 테스트중 | QA 테스트 단계 |
|
|
2007
|
-
| 완료 | 작업 완료 |
|
|
2008
|
-
|
|
2009
|
-
### 🔴 상태값 Alias (한글 ↔ 영문)
|
|
2010
|
-
|
|
2011
|
-
> **SEMO는 아래 키워드를 자동으로 Status 필드값으로 매핑합니다.**
|
|
2012
|
-
|
|
2013
|
-
| 사용자 입력 | → Status 값 | 비고 |
|
|
2014
|
-
|------------|-------------|------|
|
|
2015
|
-
| 리뷰요청, 리뷰 요청, review | 리뷰요청 | 코드 리뷰 대기 |
|
|
2016
|
-
| 테스트중, 테스트 중, testing, qa | 테스트중 | QA 단계 |
|
|
2017
|
-
| 작업중, 작업 중, 진행중, in progress, wip | 작업중 | 개발 중 |
|
|
2018
|
-
| 완료, done, closed | 완료 | 완료 처리 |
|
|
2019
|
-
| 백로그, 대기, pending, backlog | 백로그 | 초기 상태 |
|
|
2020
|
-
|
|
2021
|
-
**예시:**
|
|
2022
|
-
\`\`\`
|
|
2023
|
-
"리뷰요청 이슈들 테스트중으로 바꿔줘"
|
|
2024
|
-
→ Status == "리뷰요청" 인 항목들을 Status = "테스트중" 으로 변경
|
|
2025
|
-
\`\`\`
|
|
2026
|
-
|
|
2027
|
-
---
|
|
2028
|
-
|
|
2029
|
-
## 프로젝트 별칭
|
|
2030
|
-
|
|
2031
|
-
| 별칭 | 레포지토리 | 환경 | 배포 방법 |
|
|
2032
|
-
|------|-----------|------|----------|
|
|
2033
|
-
| 예시 | owner/repo | stg | Milestone close |
|
|
2034
|
-
|
|
2035
|
-
---
|
|
2036
|
-
|
|
2037
|
-
*마지막 업데이트: ${new Date().toISOString().split("T")[0]}*
|
|
1992
|
+
const projectsContent = `# 프로젝트 별칭 매핑
|
|
1993
|
+
|
|
1994
|
+
> 외부 프로젝트 배포 및 GitHub Projects 상태 관리
|
|
1995
|
+
> SEMO의 deployer, project-status 스킬이 이 파일을 참조합니다.
|
|
1996
|
+
|
|
1997
|
+
---
|
|
1998
|
+
|
|
1999
|
+
## GitHub Projects 설정
|
|
2000
|
+
|
|
2001
|
+
> **⚠️ 프로젝트 상태 관리 시 이 설정을 참조합니다.**
|
|
2002
|
+
|
|
2003
|
+
### 기본 프로젝트
|
|
2004
|
+
|
|
2005
|
+
| 프로젝트 | 번호 | Project ID | 용도 |
|
|
2006
|
+
|---------|------|------------|------|
|
|
2007
|
+
| 이슈관리 | #1 | \`PVT_xxx\` | 메인 태스크 관리 (기본값) |
|
|
2008
|
+
|
|
2009
|
+
### Status 옵션
|
|
2010
|
+
|
|
2011
|
+
| Status | 설명 |
|
|
2012
|
+
|--------|------|
|
|
2013
|
+
| 백로그 | 초기 상태 |
|
|
2014
|
+
| 작업중 | 개발 진행 중 |
|
|
2015
|
+
| 리뷰요청 | 코드 리뷰 대기 |
|
|
2016
|
+
| 테스트중 | QA 테스트 단계 |
|
|
2017
|
+
| 완료 | 작업 완료 |
|
|
2018
|
+
|
|
2019
|
+
### 🔴 상태값 Alias (한글 ↔ 영문)
|
|
2020
|
+
|
|
2021
|
+
> **SEMO는 아래 키워드를 자동으로 Status 필드값으로 매핑합니다.**
|
|
2022
|
+
|
|
2023
|
+
| 사용자 입력 | → Status 값 | 비고 |
|
|
2024
|
+
|------------|-------------|------|
|
|
2025
|
+
| 리뷰요청, 리뷰 요청, review | 리뷰요청 | 코드 리뷰 대기 |
|
|
2026
|
+
| 테스트중, 테스트 중, testing, qa | 테스트중 | QA 단계 |
|
|
2027
|
+
| 작업중, 작업 중, 진행중, in progress, wip | 작업중 | 개발 중 |
|
|
2028
|
+
| 완료, done, closed | 완료 | 완료 처리 |
|
|
2029
|
+
| 백로그, 대기, pending, backlog | 백로그 | 초기 상태 |
|
|
2030
|
+
|
|
2031
|
+
**예시:**
|
|
2032
|
+
\`\`\`
|
|
2033
|
+
"리뷰요청 이슈들 테스트중으로 바꿔줘"
|
|
2034
|
+
→ Status == "리뷰요청" 인 항목들을 Status = "테스트중" 으로 변경
|
|
2035
|
+
\`\`\`
|
|
2036
|
+
|
|
2037
|
+
---
|
|
2038
|
+
|
|
2039
|
+
## 프로젝트 별칭
|
|
2040
|
+
|
|
2041
|
+
| 별칭 | 레포지토리 | 환경 | 배포 방법 |
|
|
2042
|
+
|------|-----------|------|----------|
|
|
2043
|
+
| 예시 | owner/repo | stg | Milestone close |
|
|
2044
|
+
|
|
2045
|
+
---
|
|
2046
|
+
|
|
2047
|
+
*마지막 업데이트: ${new Date().toISOString().split("T")[0]}*
|
|
2038
2048
|
`;
|
|
2039
2049
|
fs.writeFileSync(projectsPath, projectsContent);
|
|
2040
2050
|
console.log(chalk_1.default.green("✓ .claude/memory/projects.md 생성됨"));
|
|
@@ -2044,21 +2054,21 @@ _아직 기록된 결정이 없습니다._
|
|
|
2044
2054
|
fs.mkdirSync(rulesDir, { recursive: true });
|
|
2045
2055
|
const rulesPath = path.join(rulesDir, "project-specific.md");
|
|
2046
2056
|
if (!fs.existsSync(rulesPath)) {
|
|
2047
|
-
const rulesContent = `# Project-Specific Rules
|
|
2048
|
-
|
|
2049
|
-
> 이 프로젝트에만 적용되는 규칙
|
|
2050
|
-
|
|
2051
|
-
---
|
|
2052
|
-
|
|
2053
|
-
## 코딩 규칙
|
|
2054
|
-
|
|
2055
|
-
_프로젝트별 코딩 규칙을 여기에 추가하세요._
|
|
2056
|
-
|
|
2057
|
-
---
|
|
2058
|
-
|
|
2059
|
-
## 예외 사항
|
|
2060
|
-
|
|
2061
|
-
_SEMO 기본 규칙의 예외 사항을 여기에 추가하세요._
|
|
2057
|
+
const rulesContent = `# Project-Specific Rules
|
|
2058
|
+
|
|
2059
|
+
> 이 프로젝트에만 적용되는 규칙
|
|
2060
|
+
|
|
2061
|
+
---
|
|
2062
|
+
|
|
2063
|
+
## 코딩 규칙
|
|
2064
|
+
|
|
2065
|
+
_프로젝트별 코딩 규칙을 여기에 추가하세요._
|
|
2066
|
+
|
|
2067
|
+
---
|
|
2068
|
+
|
|
2069
|
+
## 예외 사항
|
|
2070
|
+
|
|
2071
|
+
_SEMO 기본 규칙의 예외 사항을 여기에 추가하세요._
|
|
2062
2072
|
`;
|
|
2063
2073
|
fs.writeFileSync(rulesPath, rulesContent);
|
|
2064
2074
|
console.log(chalk_1.default.green("✓ .claude/memory/rules/project-specific.md 생성됨"));
|
|
@@ -2194,129 +2204,129 @@ async function setupClaudeMd(cwd, extensions, force) {
|
|
|
2194
2204
|
orchestratorPaths.unshift("semo-system/semo-core/agents/orchestrator/orchestrator.md");
|
|
2195
2205
|
// Orchestrator 참조 섹션 생성
|
|
2196
2206
|
const orchestratorRefSection = orchestratorPaths.length > 1
|
|
2197
|
-
? `**Primary Orchestrator**: \`semo-system/${primaryOrchestratorPath}\`
|
|
2198
|
-
|
|
2199
|
-
> Extension 패키지가 설치되어 해당 패키지의 Orchestrator를 우선 참조합니다.
|
|
2200
|
-
|
|
2201
|
-
**모든 Orchestrator 파일** (라우팅 테이블 병합됨):
|
|
2202
|
-
${orchestratorPaths.map(p => `- \`${p}\``).join("\n")}
|
|
2203
|
-
|
|
2207
|
+
? `**Primary Orchestrator**: \`semo-system/${primaryOrchestratorPath}\`
|
|
2208
|
+
|
|
2209
|
+
> Extension 패키지가 설치되어 해당 패키지의 Orchestrator를 우선 참조합니다.
|
|
2210
|
+
|
|
2211
|
+
**모든 Orchestrator 파일** (라우팅 테이블 병합됨):
|
|
2212
|
+
${orchestratorPaths.map(p => `- \`${p}\``).join("\n")}
|
|
2213
|
+
|
|
2204
2214
|
이 파일들에서 라우팅 테이블, 의도 분류, 메시지 포맷을 확인하세요.`
|
|
2205
|
-
: `**반드시 읽어야 할 파일**: \`semo-system/semo-core/agents/orchestrator/orchestrator.md\`
|
|
2206
|
-
|
|
2215
|
+
: `**반드시 읽어야 할 파일**: \`semo-system/semo-core/agents/orchestrator/orchestrator.md\`
|
|
2216
|
+
|
|
2207
2217
|
이 파일에서 라우팅 테이블, 의도 분류, 메시지 포맷을 확인하세요.`;
|
|
2208
|
-
const claudeMdContent = `# SEMO Project Configuration
|
|
2209
|
-
|
|
2210
|
-
> SEMO (Semicolon Orchestrate) - AI Agent Orchestration Framework v${VERSION}
|
|
2211
|
-
|
|
2212
|
-
---
|
|
2213
|
-
|
|
2214
|
-
## 🔴 MANDATORY: Orchestrator-First Execution
|
|
2215
|
-
|
|
2216
|
-
> **⚠️ 이 규칙은 모든 사용자 요청에 적용됩니다. 예외 없음.**
|
|
2217
|
-
|
|
2218
|
-
### 실행 흐름 (필수)
|
|
2219
|
-
|
|
2220
|
-
\`\`\`
|
|
2221
|
-
1. 사용자 요청 수신
|
|
2222
|
-
2. Orchestrator가 의도 분석 후 적절한 Agent/Skill 라우팅
|
|
2223
|
-
3. Agent/Skill이 작업 수행
|
|
2224
|
-
4. 실행 결과 반환
|
|
2225
|
-
\`\`\`
|
|
2226
|
-
|
|
2227
|
-
### Orchestrator 참조
|
|
2228
|
-
|
|
2229
|
-
${orchestratorRefSection}
|
|
2230
|
-
|
|
2231
|
-
---
|
|
2232
|
-
|
|
2233
|
-
## 🔴 NON-NEGOTIABLE RULES
|
|
2234
|
-
|
|
2235
|
-
### 1. Orchestrator-First Policy
|
|
2236
|
-
|
|
2237
|
-
> **모든 요청은 반드시 Orchestrator를 통해 라우팅됩니다. 직접 처리 금지.**
|
|
2238
|
-
|
|
2239
|
-
**직접 처리 금지 항목**:
|
|
2240
|
-
- 코드 작성/수정 → \`implementation-master\` 또는 \`coder\` 스킬
|
|
2241
|
-
- Git 커밋/푸시 → \`git-workflow\` 스킬
|
|
2242
|
-
- 품질 검증 → \`quality-master\` 또는 \`verify\` 스킬
|
|
2243
|
-
- 명세 작성 → \`spec-master\`
|
|
2244
|
-
- 일반 작업 → Orchestrator 분석 후 라우팅
|
|
2245
|
-
|
|
2246
|
-
### 2. Pre-Commit Quality Gate
|
|
2247
|
-
|
|
2248
|
-
> **코드 변경이 포함된 커밋 전 반드시 Quality Gate를 통과해야 합니다.**
|
|
2249
|
-
|
|
2250
|
-
\`\`\`bash
|
|
2251
|
-
# 필수 검증 순서
|
|
2252
|
-
npm run lint # 1. ESLint 검사
|
|
2253
|
-
npx tsc --noEmit # 2. TypeScript 타입 체크
|
|
2254
|
-
npm run build # 3. 빌드 검증 (Next.js/TypeScript 프로젝트)
|
|
2255
|
-
\`\`\`
|
|
2256
|
-
|
|
2257
|
-
**차단 항목**:
|
|
2258
|
-
- \`--no-verify\` 플래그 사용 금지
|
|
2259
|
-
- Quality Gate 우회 시도 거부
|
|
2260
|
-
- "그냥 커밋해줘", "빌드 생략해줘" 등 거부
|
|
2261
|
-
|
|
2262
|
-
---
|
|
2263
|
-
|
|
2264
|
-
## 설치된 구성
|
|
2265
|
-
|
|
2266
|
-
### Standard (필수)
|
|
2267
|
-
- **semo-core**: 원칙, 오케스트레이터, 공통 커맨드
|
|
2268
|
-
- **semo-skills**: 13개 통합 스킬
|
|
2269
|
-
- 행동: coder, tester, planner, deployer, writer
|
|
2270
|
-
- 운영: memory, notify-slack, feedback, version-updater, semo-help, semo-architecture-checker, circuit-breaker, list-bugs
|
|
2271
|
-
|
|
2272
|
-
${extensions.length > 0 ? `### Extensions (선택)
|
|
2273
|
-
${extensions.map(pkg => `- **${pkg}**: ${EXTENSION_PACKAGES[pkg].desc}`).join("\n")}` : ""}
|
|
2274
|
-
|
|
2275
|
-
## 구조
|
|
2276
|
-
|
|
2277
|
-
\`\`\`
|
|
2278
|
-
.claude/
|
|
2279
|
-
├── settings.json # MCP 서버 설정 (Black Box)
|
|
2280
|
-
├── memory/ # Context Mesh (장기 기억)
|
|
2281
|
-
│ ├── context.md # 프로젝트 상태
|
|
2282
|
-
│ ├── decisions.md # 아키텍처 결정
|
|
2283
|
-
│ └── rules/ # 프로젝트별 규칙
|
|
2284
|
-
├── agents → semo-system/semo-core/agents
|
|
2285
|
-
├── skills → semo-system/semo-skills
|
|
2286
|
-
└── commands/SEMO → semo-system/semo-core/commands/SEMO
|
|
2287
|
-
|
|
2288
|
-
semo-system/ # White Box (읽기 전용)
|
|
2289
|
-
├── semo-core/ # Layer 0: 원칙, 오케스트레이션
|
|
2290
|
-
├── semo-skills/ # Layer 1: 통합 스킬
|
|
2291
|
-
${extensionsList}
|
|
2292
|
-
\`\`\`
|
|
2293
|
-
|
|
2294
|
-
## 사용 가능한 커맨드
|
|
2295
|
-
|
|
2296
|
-
| 커맨드 | 설명 |
|
|
2297
|
-
|--------|------|
|
|
2298
|
-
| \`/SEMO:help\` | 도움말 |
|
|
2299
|
-
| \`/SEMO:feedback\` | 피드백 제출 |
|
|
2300
|
-
| \`/SEMO:update\` | SEMO 업데이트 |
|
|
2301
|
-
| \`/SEMO:onboarding\` | 온보딩 가이드 |
|
|
2302
|
-
| \`/SEMO:dry-run {프롬프트}\` | 명령 검증 (라우팅 시뮬레이션) |
|
|
2303
|
-
|
|
2304
|
-
## Context Mesh 사용
|
|
2305
|
-
|
|
2306
|
-
SEMO는 \`.claude/memory/\`를 통해 세션 간 컨텍스트를 유지합니다:
|
|
2307
|
-
|
|
2308
|
-
- **context.md**: 프로젝트 상태, 진행 중인 작업
|
|
2309
|
-
- **decisions.md**: 아키텍처 결정 기록 (ADR)
|
|
2310
|
-
- **rules/**: 프로젝트별 커스텀 규칙
|
|
2311
|
-
|
|
2312
|
-
memory 스킬이 자동으로 이 파일들을 관리합니다.
|
|
2313
|
-
|
|
2314
|
-
## References
|
|
2315
|
-
|
|
2316
|
-
- [SEMO Principles](semo-system/semo-core/principles/PRINCIPLES.md)
|
|
2317
|
-
- [SEMO Skills](semo-system/semo-skills/)
|
|
2318
|
-
${extensions.length > 0 ? extensions.map(pkg => `- [${EXTENSION_PACKAGES[pkg].name} Package](semo-system/${pkg}/)`).join("\n") : ""}
|
|
2319
|
-
${packageClaudeMdSections}
|
|
2218
|
+
const claudeMdContent = `# SEMO Project Configuration
|
|
2219
|
+
|
|
2220
|
+
> SEMO (Semicolon Orchestrate) - AI Agent Orchestration Framework v${VERSION}
|
|
2221
|
+
|
|
2222
|
+
---
|
|
2223
|
+
|
|
2224
|
+
## 🔴 MANDATORY: Orchestrator-First Execution
|
|
2225
|
+
|
|
2226
|
+
> **⚠️ 이 규칙은 모든 사용자 요청에 적용됩니다. 예외 없음.**
|
|
2227
|
+
|
|
2228
|
+
### 실행 흐름 (필수)
|
|
2229
|
+
|
|
2230
|
+
\`\`\`
|
|
2231
|
+
1. 사용자 요청 수신
|
|
2232
|
+
2. Orchestrator가 의도 분석 후 적절한 Agent/Skill 라우팅
|
|
2233
|
+
3. Agent/Skill이 작업 수행
|
|
2234
|
+
4. 실행 결과 반환
|
|
2235
|
+
\`\`\`
|
|
2236
|
+
|
|
2237
|
+
### Orchestrator 참조
|
|
2238
|
+
|
|
2239
|
+
${orchestratorRefSection}
|
|
2240
|
+
|
|
2241
|
+
---
|
|
2242
|
+
|
|
2243
|
+
## 🔴 NON-NEGOTIABLE RULES
|
|
2244
|
+
|
|
2245
|
+
### 1. Orchestrator-First Policy
|
|
2246
|
+
|
|
2247
|
+
> **모든 요청은 반드시 Orchestrator를 통해 라우팅됩니다. 직접 처리 금지.**
|
|
2248
|
+
|
|
2249
|
+
**직접 처리 금지 항목**:
|
|
2250
|
+
- 코드 작성/수정 → \`implementation-master\` 또는 \`coder\` 스킬
|
|
2251
|
+
- Git 커밋/푸시 → \`git-workflow\` 스킬
|
|
2252
|
+
- 품질 검증 → \`quality-master\` 또는 \`verify\` 스킬
|
|
2253
|
+
- 명세 작성 → \`spec-master\`
|
|
2254
|
+
- 일반 작업 → Orchestrator 분석 후 라우팅
|
|
2255
|
+
|
|
2256
|
+
### 2. Pre-Commit Quality Gate
|
|
2257
|
+
|
|
2258
|
+
> **코드 변경이 포함된 커밋 전 반드시 Quality Gate를 통과해야 합니다.**
|
|
2259
|
+
|
|
2260
|
+
\`\`\`bash
|
|
2261
|
+
# 필수 검증 순서
|
|
2262
|
+
npm run lint # 1. ESLint 검사
|
|
2263
|
+
npx tsc --noEmit # 2. TypeScript 타입 체크
|
|
2264
|
+
npm run build # 3. 빌드 검증 (Next.js/TypeScript 프로젝트)
|
|
2265
|
+
\`\`\`
|
|
2266
|
+
|
|
2267
|
+
**차단 항목**:
|
|
2268
|
+
- \`--no-verify\` 플래그 사용 금지
|
|
2269
|
+
- Quality Gate 우회 시도 거부
|
|
2270
|
+
- "그냥 커밋해줘", "빌드 생략해줘" 등 거부
|
|
2271
|
+
|
|
2272
|
+
---
|
|
2273
|
+
|
|
2274
|
+
## 설치된 구성
|
|
2275
|
+
|
|
2276
|
+
### Standard (필수)
|
|
2277
|
+
- **semo-core**: 원칙, 오케스트레이터, 공통 커맨드
|
|
2278
|
+
- **semo-skills**: 13개 통합 스킬
|
|
2279
|
+
- 행동: coder, tester, planner, deployer, writer
|
|
2280
|
+
- 운영: memory, notify-slack, feedback, version-updater, semo-help, semo-architecture-checker, circuit-breaker, list-bugs
|
|
2281
|
+
|
|
2282
|
+
${extensions.length > 0 ? `### Extensions (선택)
|
|
2283
|
+
${extensions.map(pkg => `- **${pkg}**: ${EXTENSION_PACKAGES[pkg].desc}`).join("\n")}` : ""}
|
|
2284
|
+
|
|
2285
|
+
## 구조
|
|
2286
|
+
|
|
2287
|
+
\`\`\`
|
|
2288
|
+
.claude/
|
|
2289
|
+
├── settings.json # MCP 서버 설정 (Black Box)
|
|
2290
|
+
├── memory/ # Context Mesh (장기 기억)
|
|
2291
|
+
│ ├── context.md # 프로젝트 상태
|
|
2292
|
+
│ ├── decisions.md # 아키텍처 결정
|
|
2293
|
+
│ └── rules/ # 프로젝트별 규칙
|
|
2294
|
+
├── agents → semo-system/semo-core/agents
|
|
2295
|
+
├── skills → semo-system/semo-skills
|
|
2296
|
+
└── commands/SEMO → semo-system/semo-core/commands/SEMO
|
|
2297
|
+
|
|
2298
|
+
semo-system/ # White Box (읽기 전용)
|
|
2299
|
+
├── semo-core/ # Layer 0: 원칙, 오케스트레이션
|
|
2300
|
+
├── semo-skills/ # Layer 1: 통합 스킬
|
|
2301
|
+
${extensionsList}
|
|
2302
|
+
\`\`\`
|
|
2303
|
+
|
|
2304
|
+
## 사용 가능한 커맨드
|
|
2305
|
+
|
|
2306
|
+
| 커맨드 | 설명 |
|
|
2307
|
+
|--------|------|
|
|
2308
|
+
| \`/SEMO:help\` | 도움말 |
|
|
2309
|
+
| \`/SEMO:feedback\` | 피드백 제출 |
|
|
2310
|
+
| \`/SEMO:update\` | SEMO 업데이트 |
|
|
2311
|
+
| \`/SEMO:onboarding\` | 온보딩 가이드 |
|
|
2312
|
+
| \`/SEMO:dry-run {프롬프트}\` | 명령 검증 (라우팅 시뮬레이션) |
|
|
2313
|
+
|
|
2314
|
+
## Context Mesh 사용
|
|
2315
|
+
|
|
2316
|
+
SEMO는 \`.claude/memory/\`를 통해 세션 간 컨텍스트를 유지합니다:
|
|
2317
|
+
|
|
2318
|
+
- **context.md**: 프로젝트 상태, 진행 중인 작업
|
|
2319
|
+
- **decisions.md**: 아키텍처 결정 기록 (ADR)
|
|
2320
|
+
- **rules/**: 프로젝트별 커스텀 규칙
|
|
2321
|
+
|
|
2322
|
+
memory 스킬이 자동으로 이 파일들을 관리합니다.
|
|
2323
|
+
|
|
2324
|
+
## References
|
|
2325
|
+
|
|
2326
|
+
- [SEMO Principles](semo-system/semo-core/principles/PRINCIPLES.md)
|
|
2327
|
+
- [SEMO Skills](semo-system/semo-skills/)
|
|
2328
|
+
${extensions.length > 0 ? extensions.map(pkg => `- [${EXTENSION_PACKAGES[pkg].name} Package](semo-system/${pkg}/)`).join("\n") : ""}
|
|
2329
|
+
${packageClaudeMdSections}
|
|
2320
2330
|
`;
|
|
2321
2331
|
fs.writeFileSync(claudeMdPath, claudeMdContent);
|
|
2322
2332
|
console.log(chalk_1.default.green("✓ .claude/CLAUDE.md 생성됨"));
|
package/package.json
CHANGED
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@team-semicolon/semo-cli",
|
|
3
|
-
"version": "3.0.
|
|
4
|
-
"description": "SEMO CLI - AI Agent Orchestration Framework Installer",
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"bin": {
|
|
7
|
-
"semo": "./dist/index.js",
|
|
8
|
-
"semo-cli": "./dist/index.js"
|
|
9
|
-
},
|
|
10
|
-
"scripts": {
|
|
11
|
-
"build": "tsc",
|
|
12
|
-
"start": "node dist/index.js",
|
|
13
|
-
"dev": "ts-node src/index.ts"
|
|
14
|
-
},
|
|
15
|
-
"keywords": [
|
|
16
|
-
"semo",
|
|
17
|
-
"cli",
|
|
18
|
-
"ai-agent",
|
|
19
|
-
"claude",
|
|
20
|
-
"semicolon"
|
|
21
|
-
],
|
|
22
|
-
"author": "Semicolon DevTeam",
|
|
23
|
-
"license": "MIT",
|
|
24
|
-
"repository": {
|
|
25
|
-
"type": "git",
|
|
26
|
-
"url": "https://github.com/semicolon-devteam/semo.git",
|
|
27
|
-
"directory": "packages/cli"
|
|
28
|
-
},
|
|
29
|
-
"dependencies": {
|
|
30
|
-
"chalk": "^5.3.0",
|
|
31
|
-
"commander": "^12.0.0",
|
|
32
|
-
"ora": "^8.0.0",
|
|
33
|
-
"inquirer": "^9.2.0"
|
|
34
|
-
},
|
|
35
|
-
"devDependencies": {
|
|
36
|
-
"@types/node": "^20.0.0",
|
|
37
|
-
"@types/inquirer": "^9.0.0",
|
|
38
|
-
"typescript": "^5.0.0",
|
|
39
|
-
"ts-node": "^10.0.0"
|
|
40
|
-
},
|
|
41
|
-
"engines": {
|
|
42
|
-
"node": ">=18.0.0"
|
|
43
|
-
},
|
|
44
|
-
"files": [
|
|
45
|
-
"dist",
|
|
46
|
-
"README.md"
|
|
47
|
-
]
|
|
48
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@team-semicolon/semo-cli",
|
|
3
|
+
"version": "3.0.28",
|
|
4
|
+
"description": "SEMO CLI - AI Agent Orchestration Framework Installer",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"semo": "./dist/index.js",
|
|
8
|
+
"semo-cli": "./dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"start": "node dist/index.js",
|
|
13
|
+
"dev": "ts-node src/index.ts"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"semo",
|
|
17
|
+
"cli",
|
|
18
|
+
"ai-agent",
|
|
19
|
+
"claude",
|
|
20
|
+
"semicolon"
|
|
21
|
+
],
|
|
22
|
+
"author": "Semicolon DevTeam",
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "https://github.com/semicolon-devteam/semo.git",
|
|
27
|
+
"directory": "packages/cli"
|
|
28
|
+
},
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"chalk": "^5.3.0",
|
|
31
|
+
"commander": "^12.0.0",
|
|
32
|
+
"ora": "^8.0.0",
|
|
33
|
+
"inquirer": "^9.2.0"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/node": "^20.0.0",
|
|
37
|
+
"@types/inquirer": "^9.0.0",
|
|
38
|
+
"typescript": "^5.0.0",
|
|
39
|
+
"ts-node": "^10.0.0"
|
|
40
|
+
},
|
|
41
|
+
"engines": {
|
|
42
|
+
"node": ">=18.0.0"
|
|
43
|
+
},
|
|
44
|
+
"files": [
|
|
45
|
+
"dist",
|
|
46
|
+
"README.md"
|
|
47
|
+
]
|
|
48
|
+
}
|