commitgate 0.2.1 โ 0.3.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/AGENTS.template.md +85 -48
- package/README.en.md +332 -238
- package/README.md +332 -238
- package/bin/commitgate.mjs +12 -4
- package/bin/init.ts +61 -12
- package/bin/uninstall.ts +551 -0
- package/package.json +1 -1
- package/scripts/req/lib/adapters.ts +35 -8
- package/scripts/req/review-codex.ts +243 -20
- package/workflow/machine.schema.json +19 -2
package/README.md
CHANGED
|
@@ -1,238 +1,332 @@
|
|
|
1
|
-
# CommitGate
|
|
2
|
-
|
|
3
|
-
๐ **ํ๊ตญ์ด** ยท [English](./README.en.md)
|
|
4
|
-
|
|
5
|
-
**AI ์ฝ๋ฉ ๋ณ๊ฒฝ์ Codex ๋ฆฌ๋ทฐ ์น์ธ ์์ด๋ ์ปค๋ฐํ์ง ๋ชปํ๊ฒ ๋ง๋ ์ปค๋ฐ ๊ฒ์ดํธ์
๋๋ค.**
|
|
6
|
-
|
|
7
|
-
AI ์์ด์ ํธ๊ฐ ์ฝ๋๋ฅผ ๋น ๋ฅด๊ฒ ๋ง๋ค๋๋ผ๋, ๋ฆฌ๋ทฐ ์์ด ๋ฐ๋ก ์ปค๋ฐ๋๋ฉด ์ํํฉ๋๋ค. CommitGate๋ ๋ณ๊ฒฝ์ ํฐ์ผ ๋จ์๋ก ๋ฌถ๊ณ , Codex๊ฐ ์น์ธํ staged tree๋ง ์ปค๋ฐ๋๊ฒ ํฉ๋๋ค. ์น์ธ ํ ์ฝ๋๊ฐ ๋ฐ๋๊ฑฐ๋ ์ฆ๊ฑฐ๊ฐ ๋ถ์กฑํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ง์ต๋๋ค.
|
|
8
|
-
|
|
9
|
-
[](https://github.com/sol5288/commitgate/actions/workflows/ci.yml)
|
|
10
|
-
[](https://www.npmjs.com/package/commitgate)
|
|
11
|
-
[](./LICENSE)
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Quick Start
|
|
16
|
-
|
|
17
|
-
์๋๋ ๊ฐ์ฅ ์งง์ ์ฌ์ฉ ๊ฒฝ๋ก์
๋๋ค. ํ๋ก์ ํธ ๋ฃจํธ๋ **git ์ ์ฅ์์ด๊ณ `package.json`์ด ์๋ ํด๋**์ฌ์ผ ํฉ๋๋ค.
|
|
18
|
-
|
|
19
|
-
```sh
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
- req:
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
1
|
+
# CommitGate
|
|
2
|
+
|
|
3
|
+
๐ **ํ๊ตญ์ด** ยท [English](./README.en.md)
|
|
4
|
+
|
|
5
|
+
**AI ์ฝ๋ฉ ๋ณ๊ฒฝ์ Codex ๋ฆฌ๋ทฐ ์น์ธ ์์ด๋ ์ปค๋ฐํ์ง ๋ชปํ๊ฒ ๋ง๋ ์ปค๋ฐ ๊ฒ์ดํธ์
๋๋ค.**
|
|
6
|
+
|
|
7
|
+
AI ์์ด์ ํธ๊ฐ ์ฝ๋๋ฅผ ๋น ๋ฅด๊ฒ ๋ง๋ค๋๋ผ๋, ๋ฆฌ๋ทฐ ์์ด ๋ฐ๋ก ์ปค๋ฐ๋๋ฉด ์ํํฉ๋๋ค. CommitGate๋ ๋ณ๊ฒฝ์ ํฐ์ผ ๋จ์๋ก ๋ฌถ๊ณ , Codex๊ฐ ์น์ธํ staged tree๋ง ์ปค๋ฐ๋๊ฒ ํฉ๋๋ค. ์น์ธ ํ ์ฝ๋๊ฐ ๋ฐ๋๊ฑฐ๋ ์ฆ๊ฑฐ๊ฐ ๋ถ์กฑํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ง์ต๋๋ค.
|
|
8
|
+
|
|
9
|
+
[](https://github.com/sol5288/commitgate/actions/workflows/ci.yml)
|
|
10
|
+
[](https://www.npmjs.com/package/commitgate)
|
|
11
|
+
[](./LICENSE)
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Quick Start
|
|
16
|
+
|
|
17
|
+
์๋๋ ๊ฐ์ฅ ์งง์ ์ฌ์ฉ ๊ฒฝ๋ก์
๋๋ค. ํ๋ก์ ํธ ๋ฃจํธ๋ **git ์ ์ฅ์์ด๊ณ `package.json`์ด ์๋ ํด๋**์ฌ์ผ ํฉ๋๋ค.
|
|
18
|
+
|
|
19
|
+
```sh
|
|
20
|
+
# ์์ง git ์ ์ฅ์๊ฐ ์๋๊ฑฐ๋ package.json์ด ์๋ ์ ํด๋๋ผ๋ฉด ๋จผ์ :
|
|
21
|
+
git init
|
|
22
|
+
npm init -y
|
|
23
|
+
|
|
24
|
+
# ๊ทธ๋ค์ ์ค์น:
|
|
25
|
+
npx commitgate
|
|
26
|
+
npm install
|
|
27
|
+
codex --version
|
|
28
|
+
codex login status
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
๊ทธ๋ค์ AI ์ฝ๋ฉ ์์ด์ ํธ์๊ฒ ์๋ ํ๋กฌํํธ๋ฅผ ๋ถ์ฌ๋ฃ์ต๋๋ค.
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
์ด ์์ฒญ์ ์ผ๋ฐ ๊ตฌํ์ผ๋ก ์ฒ๋ฆฌํ์ง ๋ง๊ณ , ์ด ํ๋ก์ ํธ์ ์ค์น๋ CommitGate๋ฅผ ์ฌ์ฉํด๋ผ.
|
|
35
|
+
|
|
36
|
+
์ REQ ํฐ์ผ์ ๋ง๋ค๊ณ ๋ค์ ํ๋ฆ์ ๋๊น์ง ์งํํด๋ผ:
|
|
37
|
+
req:new โ ์ค๊ณ๋ฌธ์ ์์ฑ โ Codex design ๋ฆฌ๋ทฐ โ ๊ตฌํยทํ
์คํธ โ req:doctor โ Codex phase ๋ฆฌ๋ทฐ โ req:commit
|
|
38
|
+
|
|
39
|
+
์๋์ผ๋ก ์งํํ ๊ฒ:
|
|
40
|
+
- `req:review-codex`๊ฐ NEEDS_FIX/exit 3์ ๋ฐํํ๋ฉด findings๋ฅผ ์์ ํ๊ณ ์ฌ๋ฆฌ๋ทฐํ๋ค.
|
|
41
|
+
- BLOCKED/exit 2๋ฅผ ๋ฐํํ๋ฉด ๊ฐ์ ๋ฆฌ๋ทฐ๋ฅผ ์ฌ์๋ํ์ง ๋ง๊ณ ์ฌ๋์๊ฒ ๋ณด๊ณ ํ๊ฑฐ๋ ๋ฆฌ๋ทฐ ๋์์ ๋ฐ๊พผ๋ค. ์ค๋ ๋ ๊ณ ์ฐฉ์ด ์์ฌ๋๋ฉด `--fresh-thread`๋ก ํ ๋ฒ๋ง ํ๋ณต์ ์๋ํ ์ ์๋ค.
|
|
42
|
+
- ๋ฆฌ๋ทฐ ๋์์ git add ํ ํ์ผ๋ง์ด๋ค.
|
|
43
|
+
- `state.json`๊ณผ `responses/`๋ ์ง์ `git add`ํ์ง ์๋๋ค.
|
|
44
|
+
|
|
45
|
+
๋ฉ์ถฐ์ ํ์ธ๋ฐ์ ๋(๊ฐ ํญ๋ชฉ์ ๊ทธ ๋ฌธ์ฅ ๊ทธ๋๋ก ์น์ธ๋ฐ์์ผ ํ๋ฉฐ, ํ ์น์ธ์ ๋ค์ ๋จ๊ณ๋ก ์ด์๋์ง ์๋๋ค):
|
|
46
|
+
- req:commit --run ์ง์
|
|
47
|
+
- [๊ฒฝ๋ก A ยท ์ ํ] [I1] feature branch push + PR ์์ฑ ์ง์ / [I2] required checks green ํ์ธ ํ PR merge ์ง์
|
|
48
|
+
- [๊ฒฝ๋ก B] [B1] protected branch์ direct push ์ง์ โ "branch protection bypass๋ฅผ ์ฌ์ฉํ direct push ์น์ธ"์ ๋ฐ๋ก ๋ฐ๋๋ค. ์ด push๋ required checks๋ฅผ ์ฐํํ๊ณ , CI๋ ์ฌํ์ ๋๋ค
|
|
49
|
+
- [R1/R2/R3] tag ์์ฑยทpush / npm publish / GitHub release โ CI green ํ์ธ ํ ๊ฐ๊ฐ ๋ณ๋ ์น์ธ
|
|
50
|
+
- reset, clean, force push ๊ฐ์ destructive ์์
์
|
|
51
|
+
- ์๊ตฌ์ฌํญ ๋ฒ์๋ฅผ ๋ฐ๊ฟ์ผ ํ ๋
|
|
52
|
+
- Codex ๋ฆฌ๋ทฐ๊ฐ BLOCKED๋ฅผ ๋ฐํํ๊ฑฐ๋ ์ ํ๋ ์ฌ์๋ ํ์๋ ํ๋จ์ด ๋ถ๋ช
ํํ ๋
|
|
53
|
+
|
|
54
|
+
์๊ตฌ์ฌํญ:
|
|
55
|
+
- ๋ฌด์์:
|
|
56
|
+
- ์:
|
|
57
|
+
- ์ ์ฝ:
|
|
58
|
+
- ์๋ฃ ๊ธฐ์ค:
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
์ฒซ ์๋ต์ ๋ณดํต ์ด๋ ๊ฒ ๋์์ผ ํฉ๋๋ค.
|
|
62
|
+
|
|
63
|
+
```text
|
|
64
|
+
REQ-2026-002 ๋ฐํ
|
|
65
|
+
๋ธ๋์น: feat/req-2026-002-profile-edit-api
|
|
66
|
+
phase:
|
|
67
|
+
- phase-1: PATCH /profile ๊ตฌํ
|
|
68
|
+
- phase-2: ํ
์คํธ์ ํ๊ท ํ์ธ
|
|
69
|
+
ํต์ ์ : req:commit --run ์ง์ / [B1] main direct push ์ง์ (๋๋ [I1] PR ์์ฑ โ [I2] merge)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
์ดํ์๋ ์์ด์ ํธ๊ฐ ์ค๊ณ, ๊ตฌํ, ํ
์คํธ, Codex ๋ฆฌ๋ทฐ๋ฅผ ์งํํฉ๋๋ค. ์ฌ์ฉ์๋ ํต์ ์ ์์๋ง ํ์ธํ๋ฉด ๋ฉ๋๋ค.
|
|
73
|
+
|
|
74
|
+
main์ ๋ฐ์ํ๋ ๊ฒฝ๋ก๋ **PR ๊ฒฝ์ (์ ํ)**์ **direct push** ๋ ๋ค ์ ํจํฉ๋๋ค. PR์ ์๋ฌด๊ฐ ์๋๋๋ค. ๋ค๋ง protected branch๋ก ์ง์ pushํ๋ฉด required checks๋ฅผ **์ฐํ**ํ๋ฏ๋ก "branch protection bypass๋ฅผ ์ฌ์ฉํ direct push ์น์ธ"์ ๋ฐ๋ก ๋ฐ์์ผ ํฉ๋๋ค โ bypass ๊ถํ์ด ์๋ค๋ ์ฌ์ค์ ์น์ธ์ด ์๋๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ CI๋ push **์ดํ์** ๋๋ **์ฌํ ๊ฒ์ฆ**์ด๋ผ, ๊ทธ ์ฌ์ค์ ๋ณด๊ณ ์์ ์๋ตํ์ง ์์ต๋๋ค. tag, npm publish, GitHub release๋ ๋ฐ์๊ณผ ๋ฌถ์ด์ง ์๋ ๋ณ๋ ํต์ ์ ์ด๊ณ CI green ์ดํ์ ์์ฒญํฉ๋๋ค. ์์ธํ ๊ณ์ฝ์ [AGENTS.template.md](AGENTS.template.md)์ [docs/RELEASING.md](docs/RELEASING.md)๋ฅผ ์ฐธ๊ณ ํ์ธ์.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## ๋ฌด์์ ๋ณด์ฅํ๋์?
|
|
79
|
+
|
|
80
|
+
CommitGate๊ฐ ๋ง๋ ๊ฒ์ ๋จ์ํ ๋ช
๋ น ์ค์๊ฐ ์๋๋ผ **๋ฆฌ๋ทฐ๋ฐ์ง ์์ ๋ณ๊ฒฝ์ด ์ปค๋ฐ๋๋ ์ํฉ**์
๋๋ค.
|
|
81
|
+
|
|
82
|
+
- Codex ๋ฆฌ๋ทฐ๊ฐ ์คํจํ๊ฑฐ๋ ์์ผ๋ฉด ์ปค๋ฐํ ์ ์์ต๋๋ค.
|
|
83
|
+
- ์น์ธ๋ staged tree์ ์ง๊ธ ์ปค๋ฐํ๋ ค๋ staged tree๊ฐ ๋ค๋ฅด๋ฉด ๋ง์ต๋๋ค.
|
|
84
|
+
- `state.json`, `responses/` ๊ฐ์ ์ํฌํ๋ก ๋ด๋ถ ํ์ผ์ source ์ปค๋ฐ์ ์์ผ๋ฉด ๋ง์ต๋๋ค.
|
|
85
|
+
- Codex CLI๊ฐ ์๊ฑฐ๋ ์คํ์ ์คํจํ๋ฉด ์กฐ์ฉํ ํต๊ณผํ์ง ์๊ณ ์คํจํฉ๋๋ค.
|
|
86
|
+
- ๋ฆฌ๋ทฐ ์ข
๋ฃ์ฝ๋๋ outcome ๊ธฐ์ค์
๋๋ค: `0` ์น์ธ, `1` ๋ฌดํจ/fail-closed, `2` blocked(์ง์ ์์+๋ฏธ์น์ธ), `3` needs-fix.
|
|
87
|
+
- ์ง์ ์ ์์ง๋ง ์น์ธ๋ ์๋ ์๋ต์ NEEDS_FIX๊ฐ ์๋๋ผ BLOCKED์ด๋ฉฐ, ์์ด์ ํธ๋ ๊ฐ์ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ๋ณตํ์ง ์์ต๋๋ค.
|
|
88
|
+
- ์ค์น ์ ๊ธฐ์กด `cross-spawn`์ด ๊ฒ์ฆ ํํ๋ณด๋ค ๋ฎ์ผ๋ฉด ๊ฒฝ๊ณ ํ๊ณ , `--strict`์์๋ ์ค๋จํฉ๋๋ค.
|
|
89
|
+
- ์น์ธ ์๋ต๊ณผ ์ฆ๊ฑฐ ํ์ผ์ `workflow/REQ-.../responses/`์ ๋จ์ต๋๋ค.
|
|
90
|
+
|
|
91
|
+
ํ ์ค๋ก ๋งํ๋ฉด, **ํ์คํ ์น์ธ๋ ๋ณ๊ฒฝ๋ง ํต๊ณผํ๊ณ ์ ๋งคํ๋ฉด ๋ฉ์ถ๋ ๋ฐฉ์**์
๋๋ค.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## ์ค์น๊ฐ ํ๋ ์ผ
|
|
96
|
+
|
|
97
|
+
`npx commitgate`๋ ๋์ ํ๋ก์ ํธ์ ์๋ ํ์ผ๊ณผ ์ค์ ์ ์ถ๊ฐํฉ๋๋ค. ๊ธฐ์กด ํ์ผ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฎ์ด์ฐ์ง ์์ต๋๋ค.
|
|
98
|
+
|
|
99
|
+
| ์ถ๊ฐ ํญ๋ชฉ | ์ค๋ช
|
|
|
100
|
+
|---|---|
|
|
101
|
+
| `scripts/req/` | `req:new`, `req:review-codex`, `req:doctor`, `req:commit` ์คํฌ๋ฆฝํธ |
|
|
102
|
+
| `workflow/*.schema.json` | Codex ์๋ต๊ณผ ์ค์ ๊ฒ์ฆ ์คํค๋ง |
|
|
103
|
+
| `req.config.json` | ํ๋ก์ ํธ๋ณ ์ค์ |
|
|
104
|
+
| `AGENTS.md` | ์์ด์ ํธ์ Reviewer๊ฐ ์ฝ๋ ๊ท์น ํ
ํ๋ฆฟ |
|
|
105
|
+
| `package.json` ์คํฌ๋ฆฝํธ | `req:*` ๋ช
๋ น๊ณผ ํ์ํ devDependencies |
|
|
106
|
+
|
|
107
|
+
๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ง ํ๋ ค๋ฉด:
|
|
108
|
+
|
|
109
|
+
```sh
|
|
110
|
+
npx commitgate --dry-run
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
๋ณด์ ํํ ๊ฒฝ๊ณ ๋ฅผ ์ค์น ์คํจ๋ก ์ทจ๊ธํ๋ ค๋ฉด:
|
|
114
|
+
|
|
115
|
+
```sh
|
|
116
|
+
npx commitgate --strict
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
๊ธฐ์กด `cross-spawn`์ด ๊ฒ์ฆ ํํ๋ณด๋ค ๋ฎ์ผ๋ฉด ํ์ผ์ ๋ณต์ฌํ๊ธฐ ์ ์ ์ค๋จํฉ๋๋ค.
|
|
120
|
+
|
|
121
|
+
> `workflow/machine.schema.json`๊ณผ `workflow/req.config.schema.json`์ `req.config.json`์ `ticketRoot` ์ค์ ๊ณผ ๋ฌด๊ดํ๊ฒ **ํญ์ `workflow/` ์๋**์ ๋ณต์ฌ๋ฉ๋๋ค.
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## ์ ๊ฑฐํ๋ ค๋ฉด
|
|
126
|
+
|
|
127
|
+
๋จผ์ ์์๋ ๊ฒ: **`npx commitgate`๋ ์ ์ญ ์ค์น๊ฐ ์๋๋๋ค.** npx๋ ํจํค์ง๋ฅผ npm ์บ์(`_npx/<hash>/`)์ ๋ฐ์ ํ ๋ฒ ์คํํ ๋ฟ์ด๊ณ , ์ ์ญ `node_modules`์๋ PATH์๋ ์๋ฌด๊ฒ๋ ๋จ๊ธฐ์ง ์์ต๋๋ค. ์ค์ "์ค์น๋ฌผ"์ ์ ํ๋๋ก **๋์ repo์ ์ถ๊ฐ๋ ํ์ผ๊ณผ `package.json` ๋ณ๊ฒฝ**์
๋๋ค.
|
|
128
|
+
|
|
129
|
+
์ ๊ฑฐ ๊ณํ์ ๋จผ์ ํ์ธํ์ธ์. ์ด ๋ช
๋ น์ **์๋ฌด๊ฒ๋ ์ง์ฐ์ง ์๊ณ ** ๊ณํ๋ง ์ถ๋ ฅํฉ๋๋ค:
|
|
130
|
+
|
|
131
|
+
```sh
|
|
132
|
+
npx commitgate uninstall
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
repo๋ฅผ ์ฝ์ด (1) CommitGate๊ฐ ์ค์นํ ํ์ผ ์ค ํจํค์ง ์๋ณธ๊ณผ ๋ฐ์ดํธ๊ฐ ๋์ผํ ๊ฒ, (2) ํธ์ง๋ผ์ ์ง์ ํ์ธ์ด ํ์ํ ๊ฒ, (3) ์๋ ์ ๊ฑฐํ๋ฉด ์ ๋๋ ๊ฒ, (4) ๊ฐ์ฌ ์ฆ๊ฑฐ๋ฅผ ๋ถ๋ฅํด ๋ณด์ฌ์ฃผ๊ณ , ์ปค๋ฐ ์ฌ๋ถ์ ๋ง๋ ๋๋๋ฆฌ๊ธฐ ๋ช
๋ น์ ์ถ๋ ฅํฉ๋๋ค. ์ญ์ ๋ ์ฌ์ฉ์๊ฐ ๊ฒํ ํ ๋ค ์ง์ ์คํํฉ๋๋ค.
|
|
136
|
+
|
|
137
|
+
### ์ ์๋์ผ๋ก ์ง์์ฃผ์ง ์๋์?
|
|
138
|
+
|
|
139
|
+
`init`์ **๋ฌด์์ ์๋ก ๋ง๋ค์๋์ง ๋์คํฌ์ ๊ธฐ๋กํ์ง ์์ต๋๋ค.** ๊ทธ๋์ ์ ๊ฑฐ ์์ ์๋ ์๋๋ฅผ ๊ตฌ๋ถํ ์ ์์ต๋๋ค.
|
|
140
|
+
|
|
141
|
+
- `AGENTS.md`๋ **์์ ๋๋ง** ์์ฑ๋ฉ๋๋ค. ์ด๋ฏธ ์์๋ค๋ฉด ๊ทธ๋๋ก ๋๋ฏ๋ก, init์ด ๋ง๋ ํ์ผ๊ณผ ์ฌ์ฉ์๊ฐ ์ด ํ์ผ์ด ๋์คํฌ์ ๊ฐ์ ๋ณด์
๋๋ค.
|
|
142
|
+
- `req.config.json`์ ์ด๋ฏธ ์์ผ๋ฉด **๋๋ฝ๋ ํค๋ง ๋ณํฉ**ํฉ๋๋ค. ์๋ณธ์ ๋ณด๊ดํ์ง ์์ ๋ณํฉ์ ๋๋๋ฆด ์ ์์ต๋๋ค.
|
|
143
|
+
- `package.json`์ **์๋ ํค๋ง** ์ฃผ์
ํฉ๋๋ค. ์๋ ์๋ `req:doctor`๋ `cross-spawn`์ CommitGate ์์ ๊ฐ ์๋๋๋ค. `ajv`ยท`cross-spawn`ยท`tsx`๋ ๋ค๋ฅธ ํจํค์ง๋ ํํ ์ฐ๋ devDependency์
๋๋ค.
|
|
144
|
+
- `ticketRoot`(๊ธฐ๋ณธ `workflow/`)์๋ REQ ํฐ์ผ์ `state.json`๊ณผ `approvals.jsonl` โ ์ด ๋๊ตฌ์ **๊ฐ์ฌ ์ฆ๊ฑฐ** โ ๊ฐ ์์
๋๋ค.
|
|
145
|
+
|
|
146
|
+
์์ฅ์ด ์๋ ์ํ์์ ์ผ๊ด ์ญ์ ํ๋ฉด ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ํ๊ดดํฉ๋๋ค. CommitGate๋ git hook์ ์ค์นํ์ง ์๊ณ git config๋ ๊ฑด๋๋ฆฌ์ง ์๋ ์์ in-tree ์ค์บํด๋์ด๋ฏ๋ก, ๋๋๋ฆฌ๊ธฐ์ ์ ๋ณธ์ git์
๋๋ค.
|
|
147
|
+
|
|
148
|
+
### ์์ง ์ปค๋ฐํ์ง ์์๋ค๋ฉด
|
|
149
|
+
|
|
150
|
+
```sh
|
|
151
|
+
git status --porcelain -uall # ๋ฌด์์ด ์ถ๊ฐ๋๋์ง ํ์ธ
|
|
152
|
+
git diff -- package.json # ์ฃผ์
๋ req:* ์คํฌ๋ฆฝํธ์ devDependencies ํ์ธ
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
ํ์ธํ ๋ค ์ง์ ๋๋๋ฆฝ๋๋ค. `package.json`์ ๋ฐ๋์ `HEAD` ๊ธฐ์ค์ผ๋ก ๋ณต์ํ์ธ์.
|
|
156
|
+
|
|
157
|
+
```sh
|
|
158
|
+
git checkout HEAD -- package.json
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
> โ ๏ธ `HEAD`๋ฅผ ๋นผ๋ฉด **์ธ๋ฑ์ค**์์ ๋ณต์๋์ด, `git add` ์ดํ์๋ ์ฃผ์
๋ `req:*` ์คํฌ๋ฆฝํธ๊ฐ ๊ทธ๋๋ก ๋จ์ต๋๋ค.
|
|
162
|
+
> โ ๏ธ ์ด ๋ช
๋ น์ `package.json`์ **๋ค๋ฅธ ๋ฏธ์ปค๋ฐ ํธ์ง๋ ํจ๊ป ๋ฒ๋ฆฝ๋๋ค.** ๋จผ์ ์ diff๋ฅผ ํ์ธํ์ธ์.
|
|
163
|
+
|
|
164
|
+
ํ์ผ ์ญ์ ๋ `npx commitgate uninstall`์ด ๋์ดํด ์ค ๊ฒฝ๋ก๋ง ์ง์ฐ์ธ์. `scripts/req/`๋ `workflow/`๋ฅผ ๋๋ ํฐ๋ฆฌ์งธ ์ง์ฐ๋ฉด ๊ทธ ์์ ์ฌ์ฉ์ ํ์ผ์ด๋ ํฐ์ผ ์ฆ๊ฑฐ๊ฐ ํจ๊ป ์ฌ๋ผ์ง๋๋ค.
|
|
165
|
+
|
|
166
|
+
> git์ ๋น ๋๋ ํฐ๋ฆฌ๋ฅผ ์ถ์ ํ์ง ์์ต๋๋ค. ํ์ผ์ ๋ค ์ง์ด ๋ค `git status`๊ฐ clean์ด์ด๋ ๋น `scripts/`ยท`workflow/`๊ฐ ํ์ผ์์คํ
์ ๋จ์ ์ ์์ต๋๋ค.
|
|
167
|
+
|
|
168
|
+
### ์ด๋ฏธ ์ปค๋ฐํ๋ค๋ฉด
|
|
169
|
+
|
|
170
|
+
์ค์บํด๋ฉ์ ์ถ๊ฐํ ์ปค๋ฐ์ ๋๋๋ฆฝ๋๋ค.
|
|
171
|
+
|
|
172
|
+
```sh
|
|
173
|
+
git log --diff-filter=A --format='%H %s' -- scripts/req/req-new.ts
|
|
174
|
+
git revert <sha>
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
`npx commitgate uninstall`์ด ๋์
์ปค๋ฐ ํ๋ณด๋ฅผ ์ฐพ์ ์ค๋๋ค. ๊ทธ ์ปค๋ฐ์ ๋ค๋ฅธ ๋ณ๊ฒฝ์ด ์์ฌ ์์ผ๋ฉด revert๊ฐ ๋ฌด๊ดํ ์์
๊น์ง ๋๋๋ฆฌ๋ฏ๋ก, ๋จผ์ `git show <sha>`๋ก ํ์ธํ์ธ์. ๋์
์ปค๋ฐ์ด ์ฌ๋ฌ ๊ฐ๋ก ํฉ์ด์ ธ ์์ผ๋ฉด ๋จ์ผ revert๋ก๋ ๋๋๋ฆด ์ ์์ต๋๋ค.
|
|
178
|
+
|
|
179
|
+
### npx ์บ์ ์ ๋ฆฌ (repo์ ๋ฌด๊ด)
|
|
180
|
+
|
|
181
|
+
์ ์ญ ์ค์น ์ฌ๋ถ๋ถํฐ ํ์ธํฉ๋๋ค.
|
|
182
|
+
|
|
183
|
+
```sh
|
|
184
|
+
npm ls -g commitgate # ๋น์ด ์์ผ๋ฉด ์ ์ญ ์ค์น๊ฐ ์๋
|
|
185
|
+
npm uninstall -g commitgate # ์ ์ญ์ผ๋ก ์ค์นํ๋ ๊ฒฝ์ฐ์๋ง
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
npx๊ฐ ๋ฐ์ ๋ ํจํค์ง๋ npm ์บ์์ `_npx/` ์๋์ ๋จ์ต๋๋ค.
|
|
189
|
+
|
|
190
|
+
```powershell
|
|
191
|
+
# Windows (PowerShell)
|
|
192
|
+
Remove-Item -Recurse -Force "$(npm config get cache)\_npx"
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
```sh
|
|
196
|
+
# macOS / Linux
|
|
197
|
+
rm -rf "$(npm config get cache)/_npx"
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
> โ ๏ธ **`npm cache clean --force`๋ CommitGate ์ ๊ฑฐ ๋ช
๋ น์ด ์๋๋๋ค.** ์ด ๋ช
๋ น์ `_cacache`๋ง ๋น์ฐ๊ณ `_npx`๋ ๊ทธ๋๋ก ๋ก๋๋ค. repo์ ์ค์บํด๋ฉ๊ณผ๋ ์๋ฌด ๊ด๋ จ์ด ์์ต๋๋ค.
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## ์ค๋น๋ฌผ
|
|
205
|
+
|
|
206
|
+
| ํ์ | ํ์ธ ๋ช
๋ น | ๋น๊ณ |
|
|
207
|
+
|---|---|---|
|
|
208
|
+
| Git | `git --version` | ํ์ |
|
|
209
|
+
| Node.js 18.17+ | `node --version` | ํ์ |
|
|
210
|
+
| npm, pnpm, yarn ์ค ํ๋ | `npm --version` | npm ๊ธฐ์ค์ผ๋ก ์๋ด |
|
|
211
|
+
| Codex CLI | `codex --version` | ๋ฆฌ๋ทฐ ์คํ์ ํ์ |
|
|
212
|
+
|
|
213
|
+
Codex CLI๊ฐ ์๋ค๋ฉด:
|
|
214
|
+
|
|
215
|
+
```sh
|
|
216
|
+
npm install -g @openai/codex
|
|
217
|
+
codex login
|
|
218
|
+
codex login status
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Windows์์ ์ค์น ์งํ `codex` ๋ช
๋ น์ ๋ชป ์ฐพ์ผ๋ฉด ์ ํฐ๋ฏธ๋์ ์ด์ด PATH๋ฅผ ๋ค์ ์ฝ๊ฒ ํ์ธ์.
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## ์๋ ๋ช
๋ น
|
|
226
|
+
|
|
227
|
+
๋๋ถ๋ถ์ ์ฌ์ฉ์๋ ์ ํ๋กฌํํธ ๋ฐฉ์์ผ๋ก ์ถฉ๋ถํฉ๋๋ค. ์๋๋ ๋ด๋ถ์์ ์ด๋ค ๋ช
๋ น์ด ์คํ๋๋์ง ์ดํดํ๊ฑฐ๋ ์ง์ ๋๋ฒ๊น
ํ ๋๋ง ๋ณด๋ฉด ๋ฉ๋๋ค.
|
|
228
|
+
|
|
229
|
+
```sh
|
|
230
|
+
# 1. ํฐ์ผ๊ณผ ๋ธ๋์น ์์ฑ
|
|
231
|
+
npm run req:new -- my-feature --run
|
|
232
|
+
|
|
233
|
+
# 2. ์ค๊ณ ๋ฌธ์ ์์ฑ ํ stage
|
|
234
|
+
git add workflow/REQ-2026-001/00-requirement.md workflow/REQ-2026-001/01-design.md workflow/REQ-2026-001/02-plan.md
|
|
235
|
+
|
|
236
|
+
# 3. ์ค๊ณ ๋ฆฌ๋ทฐ
|
|
237
|
+
npm run req:review-codex -- 2026-001 --kind design --run
|
|
238
|
+
|
|
239
|
+
# 4. ์ฝ๋ ๊ตฌํ ํ stage
|
|
240
|
+
git add <changed-source-files>
|
|
241
|
+
|
|
242
|
+
# 5. ๊ฒ์ดํธ ์ ๊ฒ
|
|
243
|
+
npm run req:doctor -- 2026-001
|
|
244
|
+
|
|
245
|
+
# 6. ๊ตฌํ ๋ฆฌ๋ทฐ
|
|
246
|
+
npm run req:review-codex -- 2026-001 --kind phase --run
|
|
247
|
+
|
|
248
|
+
# 7. ์น์ธ๋ ์ฝ๋ ์ปค๋ฐ
|
|
249
|
+
npm run req:commit -- 2026-001 --run -m "feat: my feature"
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
์ค์: source ์ปค๋ฐ์๋ ๋ด๊ฐ ๋ง๋ ์ฝ๋์ ๋ฌธ์๋ง stageํ์ธ์. `state.json`๊ณผ `responses/`๋ ๋๊ตฌ๊ฐ ๊ด๋ฆฌํฉ๋๋ค.
|
|
253
|
+
|
|
254
|
+
์ฌ๋ฌ ์ค ์ปค๋ฐ ๋ฉ์์ง๋ `-m` ๋์ ํ์ผ์ ์ฌ์ฉํ์ธ์.
|
|
255
|
+
|
|
256
|
+
```sh
|
|
257
|
+
npm run req:commit -- 2026-001 --run --message-file commit-message.txt
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## ๋ช
๋ น์ด ์์ฝ
|
|
263
|
+
|
|
264
|
+
| ๋ช
๋ น | ์ฉ๋ |
|
|
265
|
+
|---|---|
|
|
266
|
+
| `npx commitgate` | ํ๋ก์ ํธ์ CommitGate ์ค์น |
|
|
267
|
+
| `npx commitgate --dry-run` | ํ์ผ์ ์ฐ์ง ์๊ณ ์ค์น ๊ณํ ํ์ธ |
|
|
268
|
+
| `npx commitgate --strict` | ๋ฎ์ `cross-spawn` ๋ฒ์ ๊ฒฝ๊ณ ๋ฅผ ์ค์น ์คํจ๋ก ์ฒ๋ฆฌ |
|
|
269
|
+
| `npx commitgate uninstall` | ์ ๊ฑฐ ๊ณํ ํ์ธ (์ฝ๊ธฐ ์ ์ฉ โ ์๋ฌด๊ฒ๋ ์ง์ฐ์ง ์์) |
|
|
270
|
+
| `req:new <slug> --run` | REQ ํฐ์ผ, ๋ธ๋์น, ์ค๊ณ๋ฌธ์ ์์ฑ |
|
|
271
|
+
| `req:review-codex <id> --kind design --run` | ์ค๊ณ ๋ฆฌ๋ทฐ |
|
|
272
|
+
| `req:review-codex <id> --kind phase --run` | ๊ตฌํ ๋ฆฌ๋ทฐ |
|
|
273
|
+
| `req:doctor <id>` | ๊ฒ์ดํธ ์ํ ํ์ธ |
|
|
274
|
+
| `req:commit <id> --run -m "message"` | ์น์ธ๋ ๋ณ๊ฒฝ ์ปค๋ฐ |
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## ์ค์
|
|
279
|
+
|
|
280
|
+
๋๋ถ๋ถ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค. ํ์ํ๋ฉด ํ๋ก์ ํธ ๋ฃจํธ์ `req.config.json`์ ์์ ํ์ธ์.
|
|
281
|
+
|
|
282
|
+
| ํญ๋ชฉ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช
|
|
|
283
|
+
|---|---|---|
|
|
284
|
+
| `branchPrefix` | `"feat/req-"` | ์ ๋ธ๋์น prefix |
|
|
285
|
+
| `ticketRoot` | `"workflow"` | REQ ํฐ์ผ ํด๋ |
|
|
286
|
+
| `packageManager` | ์๋ ๊ฐ์ง | `npm`, `pnpm`, `yarn` |
|
|
287
|
+
| `designDocs` | `00/01/02` ๋ฌธ์ | ์ค๊ณ ๋ฌธ์ ํ์ผ๋ช
|
|
|
288
|
+
|
|
289
|
+
๋น `branchPrefix`๋ ํ๋ก์ ํธ ๋ฐ์ผ๋ก ๋๊ฐ๋ ๊ฒฝ๋ก๋ ๊ฑฐ๋ถ๋ฉ๋๋ค.
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
## FAQ
|
|
294
|
+
|
|
295
|
+
**Codex CLI๊ฐ ์์ผ๋ฉด ์ด๋ป๊ฒ ๋๋์?**
|
|
296
|
+
๋ฆฌ๋ทฐ ๋ช
๋ น์ด ์คํจํฉ๋๋ค. ์กฐ์ฉํ ์น์ธ ์ฒ๋ฆฌํ์ง ์์ต๋๋ค.
|
|
297
|
+
|
|
298
|
+
**์น์ธ ํ ์ฝ๋๋ฅผ ์กฐ๊ธ ๊ณ ์น๋ฉด ์ปค๋ฐ๋๋์?**
|
|
299
|
+
์ ๋ฉ๋๋ค. ์น์ธ๋ staged tree์ ๋ฌ๋ผ์ง๋ฉด stale ์น์ธ์ผ๋ก ๋ณด๊ณ ๋ค์ ๋ฆฌ๋ทฐ๋ฅผ ์๊ตฌํฉ๋๋ค.
|
|
300
|
+
|
|
301
|
+
**`state.json`์ด๋ `responses/`๋ ์ stageํ๋ฉด ์ ๋๋์?**
|
|
302
|
+
์ํฌํ๋ก ์ฆ๊ฑฐ์ ์ํ ํ์ผ์
๋๋ค. source ์ปค๋ฐ์ ์์ด๋ฉด ์น์ธ ๋ฐ์ธ๋ฉ์ด ํ๋ ค์ง๋ฏ๋ก `req:commit`์ด ๋ง์ต๋๋ค.
|
|
303
|
+
|
|
304
|
+
**cross-spawn ๋ฒ์ ๊ฒฝ๊ณ ๊ฐ ๋์ค๋ฉด ์ด๋ป๊ฒ ํ๋์?**
|
|
305
|
+
๋์ ํ๋ก์ ํธ์ ๊ธฐ์กด `cross-spawn`์ด CommitGate๊ฐ ๊ฒ์ฆํ ํํ๋ณด๋ค ๋ฎ์ ์ ์๋ค๋ ๋ป์
๋๋ค. `npm i -D cross-spawn@^7.0.6`์ผ๋ก ์ฌ๋ฆฌ์ธ์. CI๋ ๋ณด์ ๋ฏผ๊ฐ ํ๊ฒฝ์์๋ `npx commitgate --strict`๋ฅผ ์ฌ์ฉํด ๊ฒฝ๊ณ ๋ฅผ ์คํจ๋ก ๋ค๋ฃจ์ธ์.
|
|
306
|
+
|
|
307
|
+
**๋ ๋ฒ ์ค์นํ๋ฉด ๋ฎ์ด์ฐ๋์?**
|
|
308
|
+
์๋์. ๊ธฐ์กด ํ์ผ์ ๊ฑด๋๋๋๋ค. ๊ฐ์ ๋ก ๊ฐฑ์ ํ๋ ค๋ฉด `--force`๋ฅผ ์ฌ์ฉํ์ธ์.
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## ํ์ฌ ๋ฒ์
|
|
313
|
+
|
|
314
|
+
ํ์ฌ ๋ฒ์ ์ **Stage A: vendored scaffold ๋ชจ๋ธ**์
๋๋ค. ์ฆ `npx commitgate`๊ฐ ๋์ ํ๋ก์ ํธ์ ์ํฌํ๋ก ํ์ผ์ ๋ณต์ฌํฉ๋๋ค.
|
|
315
|
+
|
|
316
|
+
ํ์ฌ ์ด์ ์ค์ธ ๊ฒ์ฆ์
๋๋ค.
|
|
317
|
+
|
|
318
|
+
- GitHub Actions์์ `ubuntu-latest`, `macos-latest`, `windows-latest` ร Node 18/20/22 ๋งคํธ๋ฆญ์ค๋ฅผ ์คํํฉ๋๋ค.
|
|
319
|
+
- `npm run smoke`๋ pack tarball ์ค์น๋ณธ์ `commitgate` bin์ ์คํํฉ๋๋ค.
|
|
320
|
+
- Windows `.cmd` ๋ํผ ์ฃผ์
ํ๊ท ํ
์คํธ๊ฐ ํจํค์ง ๋งค๋์ ์ Codex wrapper ๊ฒฝ๋ก๋ฅผ ๋ณดํธํฉ๋๋ค.
|
|
321
|
+
|
|
322
|
+
์๋๋ ํ์ ๋ฒ์์
๋๋ค.
|
|
323
|
+
|
|
324
|
+
- `node_modules`์์ ์ง์ ์คํํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋ธ
|
|
325
|
+
- ๋น-git VCS ์ง์
|
|
326
|
+
- ๋ ๋ค์ํ ์ค๊ณ๋ฌธ์ ํ
ํ๋ฆฟ
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
330
|
+
## License
|
|
331
|
+
|
|
332
|
+
[MIT](./LICENSE) ยฉ 2026 sol5288
|
package/bin/commitgate.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
3
|
* commitgate bin ๋ฐ์ฒ(Stage A).
|
|
4
|
-
* npm bin์ TS๋ฅผ ์ง์ ์คํ ๋ชป ํ๋ฏ๋ก tsx ESM ๋ก๋๋ฅผ ์น์ด init.ts๋ฅผ ์คํํ๋ค.
|
|
4
|
+
* npm bin์ TS๋ฅผ ์ง์ ์คํ ๋ชป ํ๋ฏ๋ก tsx ESM ๋ก๋๋ฅผ ์น์ด init.ts/uninstall.ts๋ฅผ ์คํํ๋ค.
|
|
5
5
|
*
|
|
6
6
|
* โ ๏ธ tsx๋ ๋ฐ๋์ **์ด ๋ฐ์ฒ(=ํจํค์ง) ๊ธฐ์ค**์ผ๋ก ํด์ํด์ผ ํ๋ค(ํธ์ถ cwd ์๋).
|
|
7
7
|
* npx๋ก ์คํํ๋ฉด cwd=๋์ repo์ธ๋ฐ ๊ทธ๊ณณ์ ์์ง tsx๊ฐ ์์ ์ ์์ด,
|
|
@@ -9,6 +9,9 @@
|
|
|
9
9
|
* `import ... from 'tsx/esm/api'`๋ ์ด .mjs(ํจํค์ง node_modules) ๊ธฐ์ค์ผ๋ก ์ ์ ํด์๋๋ฏ๋ก cwd ๋ฌด๊ด.
|
|
10
10
|
* (node:module์ register('tsx/esm')๋ tsx v4๊ฐ deprecated --loader๋ก ๊ฐ์ฃผํด ๊ฑฐ๋ถ โ tsx ์์ฒด API ์ฌ์ฉ.)
|
|
11
11
|
* (Stage B์์ init.ts๋ฅผ JS๋ก ๋น๋ํ๋ฉด ์ด ๋ฐ์ฒ๋ ์ ๊ฑฐ ๊ฐ๋ฅ.)
|
|
12
|
+
*
|
|
13
|
+
* verb dispatch(REQ-2026-007): `uninstall`๋ง ๋ณ๋ ๋ชจ๋๋ก ๋ณด๋ธ๋ค. verb ์๋ ํธ์ถ์ **ํํ ๊ทธ๋๋ก init**(ํ์ํธํ).
|
|
14
|
+
* dispatch๋ฅผ ์ฌ๊ธฐ(๋จ์ผ bin ์ง์
์ )์ ๋๋ฉด uninstall.ts โ init.ts ๋จ๋ฐฉํฅ import๊ฐ ๋์ด ์ํ์ด ์๊ธฐ์ง ์๋๋ค.
|
|
12
15
|
*/
|
|
13
16
|
import { register } from 'tsx/esm/api'
|
|
14
17
|
import { fileURLToPath, pathToFileURL } from 'node:url'
|
|
@@ -16,6 +19,11 @@ import { dirname, join } from 'node:path'
|
|
|
16
19
|
|
|
17
20
|
register()
|
|
18
21
|
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
+
const binDir = dirname(fileURLToPath(import.meta.url))
|
|
23
|
+
const argv = process.argv.slice(2)
|
|
24
|
+
const entry = argv[0] === 'uninstall' ? 'uninstall.ts' : 'init.ts'
|
|
25
|
+
const rest = argv[0] === 'uninstall' ? argv.slice(1) : argv
|
|
26
|
+
|
|
27
|
+
const mod = await import(pathToFileURL(join(binDir, entry)).href)
|
|
28
|
+
// runCli = ์์ธ๋ฅผ ์น์ ํ ํ ์ค ๋ฉ์์ง + exit 1๋ก ๋ณํํ๋ CLI ๊ฒฝ๊ณ(์คํํธ๋ ์ด์ค ๋
ธ์ถ ๋ฐฉ์ง).
|
|
29
|
+
mod.runCli(rest)
|