@dongowu/git-ai-cli 1.0.21 → 2.0.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/README.md +200 -157
- package/bin/git-ai.cjs +57 -0
- package/install.cjs +50 -0
- package/package.json +27 -28
- package/.claude/settings.local.json +0 -17
- package/CHANGELOG.md +0 -46
- package/README_EN.md +0 -264
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -17
- package/dist/cli.js.map +0 -1
- package/dist/cli_main.d.ts +0 -2
- package/dist/cli_main.d.ts.map +0 -1
- package/dist/cli_main.js +0 -255
- package/dist/cli_main.js.map +0 -1
- package/dist/commands/branch.d.ts +0 -11
- package/dist/commands/branch.d.ts.map +0 -1
- package/dist/commands/branch.js +0 -279
- package/dist/commands/branch.js.map +0 -1
- package/dist/commands/commit.d.ts +0 -9
- package/dist/commands/commit.d.ts.map +0 -1
- package/dist/commands/commit.js +0 -326
- package/dist/commands/commit.js.map +0 -1
- package/dist/commands/config.d.ts +0 -2
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js +0 -164
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/config_manage.d.ts +0 -14
- package/dist/commands/config_manage.d.ts.map +0 -1
- package/dist/commands/config_manage.js +0 -394
- package/dist/commands/config_manage.js.map +0 -1
- package/dist/commands/hook.d.ts +0 -5
- package/dist/commands/hook.d.ts.map +0 -1
- package/dist/commands/hook.js +0 -528
- package/dist/commands/hook.js.map +0 -1
- package/dist/commands/msg.d.ts +0 -20
- package/dist/commands/msg.d.ts.map +0 -1
- package/dist/commands/msg.js +0 -148
- package/dist/commands/msg.js.map +0 -1
- package/dist/commands/pr.d.ts +0 -8
- package/dist/commands/pr.d.ts.map +0 -1
- package/dist/commands/pr.js +0 -96
- package/dist/commands/pr.js.map +0 -1
- package/dist/commands/release.d.ts +0 -8
- package/dist/commands/release.d.ts.map +0 -1
- package/dist/commands/release.js +0 -95
- package/dist/commands/release.js.map +0 -1
- package/dist/commands/report.d.ts +0 -9
- package/dist/commands/report.d.ts.map +0 -1
- package/dist/commands/report.js +0 -162
- package/dist/commands/report.js.map +0 -1
- package/dist/types.d.ts +0 -46
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -86
- package/dist/types.js.map +0 -1
- package/dist/utils/agent.d.ts +0 -5
- package/dist/utils/agent.d.ts.map +0 -1
- package/dist/utils/agent.js +0 -308
- package/dist/utils/agent.js.map +0 -1
- package/dist/utils/agent_lite.d.ts +0 -5
- package/dist/utils/agent_lite.d.ts.map +0 -1
- package/dist/utils/agent_lite.js +0 -263
- package/dist/utils/agent_lite.js.map +0 -1
- package/dist/utils/ai.d.ts +0 -43
- package/dist/utils/ai.d.ts.map +0 -1
- package/dist/utils/ai.js +0 -1103
- package/dist/utils/ai.js.map +0 -1
- package/dist/utils/config.d.ts +0 -11
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js +0 -239
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/git.d.ts +0 -42
- package/dist/utils/git.d.ts.map +0 -1
- package/dist/utils/git.js +0 -456
- package/dist/utils/git.js.map +0 -1
- package/dist/utils/update.d.ts +0 -4
- package/dist/utils/update.d.ts.map +0 -1
- package/dist/utils/update.js +0 -122
- package/dist/utils/update.js.map +0 -1
- package/release_notes.md +0 -9
- package/scripts/release.sh +0 -34
- package/test_agent_feature.ts +0 -1
package/dist/commands/hook.js
DELETED
|
@@ -1,528 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { execa } from 'execa';
|
|
3
|
-
import { existsSync, readFileSync, writeFileSync, unlinkSync, chmodSync, mkdirSync } from 'node:fs';
|
|
4
|
-
import { join } from 'node:path';
|
|
5
|
-
import { homedir } from 'node:os';
|
|
6
|
-
const HOOK_NAME = 'prepare-commit-msg';
|
|
7
|
-
const GLOBAL_HOOKS_DIR = '.git-ai-hooks';
|
|
8
|
-
const HOOK_MARKER = '# git-ai-hook-start';
|
|
9
|
-
const HOOK_END_MARKER = '# git-ai-hook-end';
|
|
10
|
-
// Hook script with all protections
|
|
11
|
-
const HOOK_SCRIPT = `#!/bin/sh
|
|
12
|
-
${HOOK_MARKER}
|
|
13
|
-
# git-ai hook - auto-generate commit message
|
|
14
|
-
# To disable: GIT_AI_DISABLED=1 git commit
|
|
15
|
-
|
|
16
|
-
COMMIT_MSG_FILE="$1"
|
|
17
|
-
COMMIT_SOURCE="$2"
|
|
18
|
-
|
|
19
|
-
# Skip if disabled
|
|
20
|
-
if [ "$GIT_AI_DISABLED" = "1" ]; then
|
|
21
|
-
exit 0
|
|
22
|
-
fi
|
|
23
|
-
|
|
24
|
-
# Recursion guard - skip if git-ai is already running
|
|
25
|
-
# (e.g., when git-ai commit calls git commit internally)
|
|
26
|
-
if [ "$GIT_AI_RUNNING" = "1" ]; then
|
|
27
|
-
exit 0
|
|
28
|
-
fi
|
|
29
|
-
|
|
30
|
-
# Only run for regular commits (not merge, squash, amend, etc.)
|
|
31
|
-
if [ -n "$COMMIT_SOURCE" ]; then
|
|
32
|
-
exit 0
|
|
33
|
-
fi
|
|
34
|
-
|
|
35
|
-
# Check if there's already a non-comment message
|
|
36
|
-
if [ -s "$COMMIT_MSG_FILE" ]; then
|
|
37
|
-
EXISTING_MSG=$(grep -v "^#" "$COMMIT_MSG_FILE" | grep -v "^$" | head -1)
|
|
38
|
-
if [ -n "$EXISTING_MSG" ]; then
|
|
39
|
-
exit 0
|
|
40
|
-
fi
|
|
41
|
-
fi
|
|
42
|
-
|
|
43
|
-
# Generate commit message using git-ai msg (JSON to avoid spinner)
|
|
44
|
-
if command -v git-ai >/dev/null 2>&1; then
|
|
45
|
-
OUTPUT=$(GIT_AI_ENABLE_FOOTER="\${GIT_AI_ENABLE_FOOTER:-0}" git-ai msg --json 2>/dev/null)
|
|
46
|
-
EXIT_CODE=$?
|
|
47
|
-
|
|
48
|
-
MSG=""
|
|
49
|
-
ERR=""
|
|
50
|
-
|
|
51
|
-
if command -v node >/dev/null 2>&1; then
|
|
52
|
-
if [ $EXIT_CODE -eq 0 ]; then
|
|
53
|
-
MSG=$(printf '%s' "$OUTPUT" | node -e "const fs=require('fs');let input='';try{input=fs.readFileSync(0,'utf8');const data=JSON.parse(input||'{}');const msg=data.message||(Array.isArray(data.messages)?data.messages[0]:null);if(msg)process.stdout.write(msg);}catch{}")
|
|
54
|
-
else
|
|
55
|
-
ERR=$(printf '%s' "$OUTPUT" | node -e "const fs=require('fs');let input='';try{input=fs.readFileSync(0,'utf8');const data=JSON.parse(input||'{}');if(data&&data.error)process.stdout.write(String(data.error));}catch{}")
|
|
56
|
-
fi
|
|
57
|
-
fi
|
|
58
|
-
|
|
59
|
-
if [ -z "$MSG" ] && [ -z "$ERR" ]; then
|
|
60
|
-
MSG=$(printf '%s' "$OUTPUT" | sed -n 's/.*\"message\"[ ]*:[ ]*\"\\(.*\\)\".*/\\1/p' | head -1)
|
|
61
|
-
if [ -z "$MSG" ]; then
|
|
62
|
-
ERR=$(printf '%s' "$OUTPUT" | sed -n 's/.*\"error\"[ ]*:[ ]*\"\\(.*\\)\".*/\\1/p' | head -1)
|
|
63
|
-
fi
|
|
64
|
-
fi
|
|
65
|
-
|
|
66
|
-
if [ -n "$MSG" ]; then
|
|
67
|
-
# Preserve existing comments, prepend AI message
|
|
68
|
-
if [ -f "$COMMIT_MSG_FILE" ]; then
|
|
69
|
-
COMMENTS=$(grep "^#" "$COMMIT_MSG_FILE" || true)
|
|
70
|
-
printf '%s\\n\\n%s\\n' "$MSG" "$COMMENTS" > "$COMMIT_MSG_FILE"
|
|
71
|
-
else
|
|
72
|
-
printf '%s\\n' "$MSG" > "$COMMIT_MSG_FILE"
|
|
73
|
-
fi
|
|
74
|
-
elif [ -n "$ERR" ]; then
|
|
75
|
-
ERR=$(printf '%s' "$ERR" | tr '\\n' ' ' | sed -e 's/[[:space:]]\\+/ /g' -e 's/^ *//' -e 's/ *$//' | cut -c1-180)
|
|
76
|
-
if [ "$GIT_AI_HOOK_STRICT" = "1" ]; then
|
|
77
|
-
if [ -f "$COMMIT_MSG_FILE" ]; then
|
|
78
|
-
COMMENTS=$(grep "^#" "$COMMIT_MSG_FILE" || true)
|
|
79
|
-
printf '# git-ai: failed to generate commit message\\n# %s\\n\\n%s\\n' "$ERR" "$COMMENTS" > "$COMMIT_MSG_FILE"
|
|
80
|
-
else
|
|
81
|
-
printf '# git-ai: failed to generate commit message\\n# %s\\n' "$ERR" > "$COMMIT_MSG_FILE"
|
|
82
|
-
fi
|
|
83
|
-
exit 1
|
|
84
|
-
fi
|
|
85
|
-
|
|
86
|
-
FALLBACK=""
|
|
87
|
-
if [ "\${GIT_AI_HOOK_FALLBACK:-1}" = "1" ]; then
|
|
88
|
-
FILES=$(git diff --cached --name-only 2>/dev/null)
|
|
89
|
-
COUNT=$(printf '%s\\n' "$FILES" | grep -c .)
|
|
90
|
-
if [ "$COUNT" -gt 0 ]; then
|
|
91
|
-
if [ "$COUNT" -le 3 ]; then
|
|
92
|
-
SHORT=$(printf '%s\\n' "$FILES" | head -n 3 | awk 'BEGIN{ORS="";} {printf "%s%s", (NR==1?"":", "), $0} END{print ""}')
|
|
93
|
-
FALLBACK="chore: update \${SHORT}"
|
|
94
|
-
else
|
|
95
|
-
FALLBACK="chore: update \${COUNT} files"
|
|
96
|
-
fi
|
|
97
|
-
fi
|
|
98
|
-
fi
|
|
99
|
-
|
|
100
|
-
if [ -n "$FALLBACK" ]; then
|
|
101
|
-
if [ -f "$COMMIT_MSG_FILE" ]; then
|
|
102
|
-
COMMENTS=$(grep "^#" "$COMMIT_MSG_FILE" || true)
|
|
103
|
-
printf '%s\\n\\n%s\\n' "$FALLBACK" "$COMMENTS" > "$COMMIT_MSG_FILE"
|
|
104
|
-
else
|
|
105
|
-
printf '%s\\n' "$FALLBACK" > "$COMMIT_MSG_FILE"
|
|
106
|
-
fi
|
|
107
|
-
else
|
|
108
|
-
if [ -f "$COMMIT_MSG_FILE" ]; then
|
|
109
|
-
COMMENTS=$(grep "^#" "$COMMIT_MSG_FILE" || true)
|
|
110
|
-
printf '# git-ai: failed to generate commit message\\n# %s\\n\\n%s\\n' "$ERR" "$COMMENTS" > "$COMMIT_MSG_FILE"
|
|
111
|
-
else
|
|
112
|
-
printf '# git-ai: failed to generate commit message\\n# %s\\n' "$ERR" > "$COMMIT_MSG_FILE"
|
|
113
|
-
fi
|
|
114
|
-
fi
|
|
115
|
-
fi
|
|
116
|
-
fi
|
|
117
|
-
${HOOK_END_MARKER}
|
|
118
|
-
|
|
119
|
-
`;
|
|
120
|
-
// Wrapper template for chaining with existing hook
|
|
121
|
-
const WRAPPER_TEMPLATE = `#!/bin/sh
|
|
122
|
-
${HOOK_MARKER}
|
|
123
|
-
# git-ai hook wrapper - chains with existing hook
|
|
124
|
-
# To disable: GIT_AI_DISABLED=1 git commit
|
|
125
|
-
|
|
126
|
-
COMMIT_MSG_FILE="$1"
|
|
127
|
-
COMMIT_SOURCE="$2"
|
|
128
|
-
SHA1="$3"
|
|
129
|
-
|
|
130
|
-
# Skip if disabled
|
|
131
|
-
if [ "$GIT_AI_DISABLED" = "1" ]; then
|
|
132
|
-
if [ -x "__ORIGINAL_HOOK__" ]; then
|
|
133
|
-
"__ORIGINAL_HOOK__" "$COMMIT_MSG_FILE" "$COMMIT_SOURCE" "$SHA1"
|
|
134
|
-
fi
|
|
135
|
-
exit $?
|
|
136
|
-
fi
|
|
137
|
-
|
|
138
|
-
# Recursion guard - skip if git-ai is already running
|
|
139
|
-
if [ "$GIT_AI_RUNNING" = "1" ]; then
|
|
140
|
-
if [ -x "__ORIGINAL_HOOK__" ]; then
|
|
141
|
-
"__ORIGINAL_HOOK__" "$COMMIT_MSG_FILE" "$COMMIT_SOURCE" "$SHA1"
|
|
142
|
-
fi
|
|
143
|
-
exit $?
|
|
144
|
-
fi
|
|
145
|
-
|
|
146
|
-
# Only run for regular commits
|
|
147
|
-
if [ -n "$COMMIT_SOURCE" ]; then
|
|
148
|
-
if [ -x "__ORIGINAL_HOOK__" ]; then
|
|
149
|
-
"__ORIGINAL_HOOK__" "$COMMIT_MSG_FILE" "$COMMIT_SOURCE" "$SHA1"
|
|
150
|
-
fi
|
|
151
|
-
exit $?
|
|
152
|
-
fi
|
|
153
|
-
|
|
154
|
-
# Check if there's already a non-comment message
|
|
155
|
-
if [ -s "$COMMIT_MSG_FILE" ]; then
|
|
156
|
-
EXISTING_MSG=$(grep -v "^#" "$COMMIT_MSG_FILE" | grep -v "^$" | head -1)
|
|
157
|
-
if [ -n "$EXISTING_MSG" ]; then
|
|
158
|
-
if [ -x "__ORIGINAL_HOOK__" ]; then
|
|
159
|
-
"__ORIGINAL_HOOK__" "$COMMIT_MSG_FILE" "$COMMIT_SOURCE" "$SHA1"
|
|
160
|
-
fi
|
|
161
|
-
exit $?
|
|
162
|
-
fi
|
|
163
|
-
fi
|
|
164
|
-
|
|
165
|
-
# Generate commit message using git-ai msg (JSON to avoid spinner)
|
|
166
|
-
if command -v git-ai >/dev/null 2>&1; then
|
|
167
|
-
OUTPUT=$(GIT_AI_ENABLE_FOOTER="\${GIT_AI_ENABLE_FOOTER:-0}" git-ai msg --json 2>/dev/null)
|
|
168
|
-
EXIT_CODE=$?
|
|
169
|
-
|
|
170
|
-
MSG=""
|
|
171
|
-
ERR=""
|
|
172
|
-
|
|
173
|
-
if command -v node >/dev/null 2>&1; then
|
|
174
|
-
if [ $EXIT_CODE -eq 0 ]; then
|
|
175
|
-
MSG=$(printf '%s' "$OUTPUT" | node -e "const fs=require('fs');let input='';try{input=fs.readFileSync(0,'utf8');const data=JSON.parse(input||'{}');const msg=data.message||(Array.isArray(data.messages)?data.messages[0]:null);if(msg)process.stdout.write(msg);}catch{}")
|
|
176
|
-
else
|
|
177
|
-
ERR=$(printf '%s' "$OUTPUT" | node -e "const fs=require('fs');let input='';try{input=fs.readFileSync(0,'utf8');const data=JSON.parse(input||'{}');if(data&&data.error)process.stdout.write(String(data.error));}catch{}")
|
|
178
|
-
fi
|
|
179
|
-
fi
|
|
180
|
-
|
|
181
|
-
if [ -z "$MSG" ] && [ -z "$ERR" ]; then
|
|
182
|
-
MSG=$(printf '%s' "$OUTPUT" | sed -n 's/.*\"message\"[ ]*:[ ]*\"\\(.*\\)\".*/\\1/p' | head -1)
|
|
183
|
-
if [ -z "$MSG" ]; then
|
|
184
|
-
ERR=$(printf '%s' "$OUTPUT" | sed -n 's/.*\"error\"[ ]*:[ ]*\"\\(.*\\)\".*/\\1/p' | head -1)
|
|
185
|
-
fi
|
|
186
|
-
fi
|
|
187
|
-
|
|
188
|
-
if [ -n "$MSG" ]; then
|
|
189
|
-
if [ -f "$COMMIT_MSG_FILE" ]; then
|
|
190
|
-
COMMENTS=$(grep "^#" "$COMMIT_MSG_FILE" || true)
|
|
191
|
-
printf '%s\\n\\n%s\\n' "$MSG" "$COMMENTS" > "$COMMIT_MSG_FILE"
|
|
192
|
-
else
|
|
193
|
-
printf '%s\\n' "$MSG" > "$COMMIT_MSG_FILE"
|
|
194
|
-
fi
|
|
195
|
-
elif [ -n "$ERR" ]; then
|
|
196
|
-
ERR=$(printf '%s' "$ERR" | tr '\\n' ' ' | sed -e 's/[[:space:]]\\+/ /g' -e 's/^ *//' -e 's/ *$//' | cut -c1-180)
|
|
197
|
-
if [ "$GIT_AI_HOOK_STRICT" = "1" ]; then
|
|
198
|
-
if [ -f "$COMMIT_MSG_FILE" ]; then
|
|
199
|
-
COMMENTS=$(grep "^#" "$COMMIT_MSG_FILE" || true)
|
|
200
|
-
printf '# git-ai: failed to generate commit message\\n# %s\\n\\n%s\\n' "$ERR" "$COMMENTS" > "$COMMIT_MSG_FILE"
|
|
201
|
-
else
|
|
202
|
-
printf '# git-ai: failed to generate commit message\\n# %s\\n' "$ERR" > "$COMMIT_MSG_FILE"
|
|
203
|
-
fi
|
|
204
|
-
exit 1
|
|
205
|
-
fi
|
|
206
|
-
|
|
207
|
-
FALLBACK=""
|
|
208
|
-
if [ "\${GIT_AI_HOOK_FALLBACK:-1}" = "1" ]; then
|
|
209
|
-
FILES=$(git diff --cached --name-only 2>/dev/null)
|
|
210
|
-
COUNT=$(printf '%s\\n' "$FILES" | grep -c .)
|
|
211
|
-
if [ "$COUNT" -gt 0 ]; then
|
|
212
|
-
if [ "$COUNT" -le 3 ]; then
|
|
213
|
-
SHORT=$(printf '%s\\n' "$FILES" | head -n 3 | awk 'BEGIN{ORS="";} {printf "%s%s", (NR==1?"":", "), $0} END{print ""}')
|
|
214
|
-
FALLBACK="chore: update \${SHORT}"
|
|
215
|
-
else
|
|
216
|
-
FALLBACK="chore: update \${COUNT} files"
|
|
217
|
-
fi
|
|
218
|
-
fi
|
|
219
|
-
fi
|
|
220
|
-
|
|
221
|
-
if [ -n "$FALLBACK" ]; then
|
|
222
|
-
if [ -f "$COMMIT_MSG_FILE" ]; then
|
|
223
|
-
COMMENTS=$(grep "^#" "$COMMIT_MSG_FILE" || true)
|
|
224
|
-
printf '%s\\n\\n%s\\n' "$FALLBACK" "$COMMENTS" > "$COMMIT_MSG_FILE"
|
|
225
|
-
else
|
|
226
|
-
printf '%s\\n' "$FALLBACK" > "$COMMIT_MSG_FILE"
|
|
227
|
-
fi
|
|
228
|
-
else
|
|
229
|
-
if [ -f "$COMMIT_MSG_FILE" ]; then
|
|
230
|
-
COMMENTS=$(grep "^#" "$COMMIT_MSG_FILE" || true)
|
|
231
|
-
printf '# git-ai: failed to generate commit message\\n# %s\\n\\n%s\\n' "$ERR" "$COMMENTS" > "$COMMIT_MSG_FILE"
|
|
232
|
-
else
|
|
233
|
-
printf '# git-ai: failed to generate commit message\\n# %s\\n' "$ERR" > "$COMMIT_MSG_FILE"
|
|
234
|
-
fi
|
|
235
|
-
fi
|
|
236
|
-
fi
|
|
237
|
-
fi
|
|
238
|
-
|
|
239
|
-
# Call original hook
|
|
240
|
-
if [ -x "__ORIGINAL_HOOK__" ]; then
|
|
241
|
-
"__ORIGINAL_HOOK__" "$COMMIT_MSG_FILE" "$COMMIT_SOURCE" "$SHA1"
|
|
242
|
-
exit $?
|
|
243
|
-
fi
|
|
244
|
-
${HOOK_END_MARKER}
|
|
245
|
-
|
|
246
|
-
exit 0
|
|
247
|
-
`;
|
|
248
|
-
function getGlobalHooksPath() {
|
|
249
|
-
return join(homedir(), GLOBAL_HOOKS_DIR);
|
|
250
|
-
}
|
|
251
|
-
async function getGitHooksPath() {
|
|
252
|
-
try {
|
|
253
|
-
// Check if custom hooks path is configured
|
|
254
|
-
const { stdout } = await execa('git', ['config', '--get', 'core.hooksPath']);
|
|
255
|
-
return stdout.trim();
|
|
256
|
-
}
|
|
257
|
-
catch {
|
|
258
|
-
// Default to .git/hooks
|
|
259
|
-
const { stdout } = await execa('git', ['rev-parse', '--git-dir']);
|
|
260
|
-
return join(stdout.trim(), 'hooks');
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
async function getGlobalCoreHooksPath() {
|
|
264
|
-
try {
|
|
265
|
-
const { stdout } = await execa('git', ['config', '--global', '--get', 'core.hooksPath']);
|
|
266
|
-
return stdout.trim();
|
|
267
|
-
}
|
|
268
|
-
catch {
|
|
269
|
-
return null;
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
async function isInGitRepo() {
|
|
273
|
-
try {
|
|
274
|
-
await execa('git', ['rev-parse', '--is-inside-work-tree']);
|
|
275
|
-
return true;
|
|
276
|
-
}
|
|
277
|
-
catch {
|
|
278
|
-
return false;
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
function isGitAiHook(content) {
|
|
282
|
-
// Only match our specific marker to avoid false positives
|
|
283
|
-
return content.includes(HOOK_MARKER);
|
|
284
|
-
}
|
|
285
|
-
export async function runHook(action, options = {}) {
|
|
286
|
-
if (!['install', 'remove', 'status'].includes(action)) {
|
|
287
|
-
console.error(chalk.red(`❌ Unknown action: ${action}`));
|
|
288
|
-
console.log(chalk.gray(' Available actions: install, remove, status'));
|
|
289
|
-
process.exit(1);
|
|
290
|
-
}
|
|
291
|
-
const isGlobal = options.global ?? false;
|
|
292
|
-
if (isGlobal) {
|
|
293
|
-
// Global hook management
|
|
294
|
-
const globalHooksPath = getGlobalHooksPath();
|
|
295
|
-
const hookFile = join(globalHooksPath, HOOK_NAME);
|
|
296
|
-
if (action === 'status') {
|
|
297
|
-
await showGlobalStatus(hookFile, globalHooksPath);
|
|
298
|
-
}
|
|
299
|
-
else if (action === 'install') {
|
|
300
|
-
await installGlobalHook(hookFile, globalHooksPath);
|
|
301
|
-
}
|
|
302
|
-
else if (action === 'remove') {
|
|
303
|
-
await removeGlobalHook(hookFile, globalHooksPath);
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
else {
|
|
307
|
-
// Local hook management (existing behavior)
|
|
308
|
-
if (!(await isInGitRepo())) {
|
|
309
|
-
console.error(chalk.red('❌ Not in a git repository.'));
|
|
310
|
-
console.log(chalk.gray(' Use --global to install hook for all repositories.'));
|
|
311
|
-
process.exit(1);
|
|
312
|
-
}
|
|
313
|
-
const hooksPath = await getGitHooksPath();
|
|
314
|
-
const hookFile = join(hooksPath, HOOK_NAME);
|
|
315
|
-
if (action === 'status') {
|
|
316
|
-
await showStatus(hookFile);
|
|
317
|
-
}
|
|
318
|
-
else if (action === 'install') {
|
|
319
|
-
await installHook(hookFile, hooksPath);
|
|
320
|
-
}
|
|
321
|
-
else if (action === 'remove') {
|
|
322
|
-
await removeHook(hookFile);
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
async function showStatus(hookFile) {
|
|
327
|
-
if (existsSync(hookFile)) {
|
|
328
|
-
const content = readFileSync(hookFile, 'utf-8');
|
|
329
|
-
if (isGitAiHook(content)) {
|
|
330
|
-
console.log(chalk.green('✅ git-ai hook is installed'));
|
|
331
|
-
console.log(chalk.gray(` Location: ${hookFile}`));
|
|
332
|
-
// Check if it's a wrapper
|
|
333
|
-
const originalHook = `${hookFile}.original`;
|
|
334
|
-
if (existsSync(originalHook)) {
|
|
335
|
-
console.log(chalk.cyan(' Mode: Wrapper (chained with original hook)'));
|
|
336
|
-
}
|
|
337
|
-
else {
|
|
338
|
-
console.log(chalk.cyan(' Mode: Standalone'));
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
else {
|
|
342
|
-
console.log(chalk.yellow('⚠️ A prepare-commit-msg hook exists but is not from git-ai'));
|
|
343
|
-
console.log(chalk.gray(` Location: ${hookFile}`));
|
|
344
|
-
console.log(chalk.gray(' Run `git-ai hook install` to add git-ai (will chain with existing hook)'));
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
else {
|
|
348
|
-
console.log(chalk.gray('❌ git-ai hook is not installed'));
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
async function installHook(hookFile, hooksPath) {
|
|
352
|
-
// Ensure hooks directory exists
|
|
353
|
-
if (!existsSync(hooksPath)) {
|
|
354
|
-
await execa('mkdir', ['-p', hooksPath]);
|
|
355
|
-
}
|
|
356
|
-
// Check if hook already exists
|
|
357
|
-
if (existsSync(hookFile)) {
|
|
358
|
-
const content = readFileSync(hookFile, 'utf-8');
|
|
359
|
-
if (isGitAiHook(content)) {
|
|
360
|
-
// Already has git-ai, update it
|
|
361
|
-
console.log(chalk.yellow('⚠️ git-ai hook already installed, updating...'));
|
|
362
|
-
// Check if there's an original hook
|
|
363
|
-
const originalHook = `${hookFile}.original`;
|
|
364
|
-
if (existsSync(originalHook)) {
|
|
365
|
-
// Re-create wrapper with updated script
|
|
366
|
-
const wrapper = WRAPPER_TEMPLATE.replace(/__ORIGINAL_HOOK__/g, originalHook);
|
|
367
|
-
writeFileSync(hookFile, wrapper);
|
|
368
|
-
chmodSync(hookFile, 0o755);
|
|
369
|
-
console.log(chalk.green('✅ git-ai hook updated (wrapper mode)'));
|
|
370
|
-
}
|
|
371
|
-
else {
|
|
372
|
-
writeFileSync(hookFile, HOOK_SCRIPT);
|
|
373
|
-
chmodSync(hookFile, 0o755);
|
|
374
|
-
console.log(chalk.green('✅ git-ai hook updated'));
|
|
375
|
-
}
|
|
376
|
-
return;
|
|
377
|
-
}
|
|
378
|
-
// Existing non-git-ai hook - use wrapper mode
|
|
379
|
-
const originalHook = `${hookFile}.original`;
|
|
380
|
-
// Backup original
|
|
381
|
-
writeFileSync(originalHook, content);
|
|
382
|
-
chmodSync(originalHook, 0o755);
|
|
383
|
-
console.log(chalk.gray(` Original hook saved to: ${originalHook}`));
|
|
384
|
-
// Install wrapper
|
|
385
|
-
const wrapper = WRAPPER_TEMPLATE.replace(/__ORIGINAL_HOOK__/g, originalHook);
|
|
386
|
-
writeFileSync(hookFile, wrapper);
|
|
387
|
-
chmodSync(hookFile, 0o755);
|
|
388
|
-
console.log(chalk.green('✅ git-ai hook installed (wrapper mode)'));
|
|
389
|
-
console.log(chalk.cyan(' Your original hook will still be executed after git-ai'));
|
|
390
|
-
}
|
|
391
|
-
else {
|
|
392
|
-
// No existing hook - install standalone
|
|
393
|
-
writeFileSync(hookFile, HOOK_SCRIPT);
|
|
394
|
-
chmodSync(hookFile, 0o755);
|
|
395
|
-
console.log(chalk.green('✅ git-ai hook installed'));
|
|
396
|
-
}
|
|
397
|
-
console.log(chalk.gray(` Location: ${hookFile}`));
|
|
398
|
-
console.log('');
|
|
399
|
-
console.log(chalk.cyan('📝 How it works:'));
|
|
400
|
-
console.log(chalk.gray(' When you run `git commit` without -m flag,'));
|
|
401
|
-
console.log(chalk.gray(' git-ai will auto-generate a commit message.'));
|
|
402
|
-
console.log('');
|
|
403
|
-
console.log(chalk.cyan('💡 Tips:'));
|
|
404
|
-
console.log(chalk.gray(' • Skip hook: git commit --no-verify'));
|
|
405
|
-
console.log(chalk.gray(' • Remove hook: git-ai hook remove'));
|
|
406
|
-
}
|
|
407
|
-
async function removeHook(hookFile) {
|
|
408
|
-
if (!existsSync(hookFile)) {
|
|
409
|
-
console.log(chalk.gray('❌ No hook to remove'));
|
|
410
|
-
return;
|
|
411
|
-
}
|
|
412
|
-
const content = readFileSync(hookFile, 'utf-8');
|
|
413
|
-
if (!isGitAiHook(content)) {
|
|
414
|
-
console.log(chalk.yellow('⚠️ The existing hook is not from git-ai, skipping removal'));
|
|
415
|
-
return;
|
|
416
|
-
}
|
|
417
|
-
// Check for original hook
|
|
418
|
-
const originalHook = `${hookFile}.original`;
|
|
419
|
-
if (existsSync(originalHook)) {
|
|
420
|
-
// Restore original hook
|
|
421
|
-
const originalContent = readFileSync(originalHook, 'utf-8');
|
|
422
|
-
writeFileSync(hookFile, originalContent);
|
|
423
|
-
chmodSync(hookFile, 0o755);
|
|
424
|
-
unlinkSync(originalHook);
|
|
425
|
-
console.log(chalk.green('✅ git-ai hook removed'));
|
|
426
|
-
console.log(chalk.gray(' Original hook restored'));
|
|
427
|
-
}
|
|
428
|
-
else {
|
|
429
|
-
// Just remove the hook
|
|
430
|
-
unlinkSync(hookFile);
|
|
431
|
-
console.log(chalk.green('✅ git-ai hook removed'));
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
// ==================== Global Hook Functions ====================
|
|
435
|
-
async function showGlobalStatus(hookFile, globalHooksPath) {
|
|
436
|
-
const currentGlobalPath = await getGlobalCoreHooksPath();
|
|
437
|
-
if (existsSync(hookFile) && currentGlobalPath === globalHooksPath) {
|
|
438
|
-
const content = readFileSync(hookFile, 'utf-8');
|
|
439
|
-
if (isGitAiHook(content)) {
|
|
440
|
-
console.log(chalk.green('✅ git-ai global hook is installed'));
|
|
441
|
-
console.log(chalk.gray(` Location: ${hookFile}`));
|
|
442
|
-
console.log(chalk.gray(` core.hooksPath: ${globalHooksPath}`));
|
|
443
|
-
}
|
|
444
|
-
else {
|
|
445
|
-
console.log(chalk.yellow('⚠️ Global hook exists but is not from git-ai'));
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
else if (currentGlobalPath) {
|
|
449
|
-
console.log(chalk.yellow('⚠️ Global core.hooksPath is set to a different location'));
|
|
450
|
-
console.log(chalk.gray(` Current: ${currentGlobalPath}`));
|
|
451
|
-
console.log(chalk.gray(` Expected: ${globalHooksPath}`));
|
|
452
|
-
}
|
|
453
|
-
else {
|
|
454
|
-
console.log(chalk.gray('❌ git-ai global hook is not installed'));
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
async function installGlobalHook(hookFile, globalHooksPath) {
|
|
458
|
-
// Create global hooks directory if not exists
|
|
459
|
-
if (!existsSync(globalHooksPath)) {
|
|
460
|
-
mkdirSync(globalHooksPath, { recursive: true });
|
|
461
|
-
}
|
|
462
|
-
// Check if there's already a global hooks path configured
|
|
463
|
-
const currentGlobalPath = await getGlobalCoreHooksPath();
|
|
464
|
-
if (currentGlobalPath && currentGlobalPath !== globalHooksPath) {
|
|
465
|
-
console.log(chalk.yellow('⚠️ Global core.hooksPath is already set to:'));
|
|
466
|
-
console.log(chalk.gray(` ${currentGlobalPath}`));
|
|
467
|
-
console.log(chalk.yellow(' This will override it. Existing hooks may stop working.'));
|
|
468
|
-
console.log('');
|
|
469
|
-
}
|
|
470
|
-
// Check if hook file already exists
|
|
471
|
-
if (existsSync(hookFile)) {
|
|
472
|
-
const content = readFileSync(hookFile, 'utf-8');
|
|
473
|
-
if (isGitAiHook(content)) {
|
|
474
|
-
console.log(chalk.yellow('⚠️ Global hook already installed, updating...'));
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
// Write hook script
|
|
478
|
-
writeFileSync(hookFile, HOOK_SCRIPT);
|
|
479
|
-
chmodSync(hookFile, 0o755);
|
|
480
|
-
// Set global core.hooksPath
|
|
481
|
-
await execa('git', ['config', '--global', 'core.hooksPath', globalHooksPath]);
|
|
482
|
-
console.log(chalk.green('✅ git-ai global hook installed'));
|
|
483
|
-
console.log(chalk.gray(` Location: ${hookFile}`));
|
|
484
|
-
console.log(chalk.gray(` core.hooksPath: ${globalHooksPath}`));
|
|
485
|
-
console.log('');
|
|
486
|
-
console.log(chalk.cyan('📝 How it works:'));
|
|
487
|
-
console.log(chalk.gray(' All git repositories will now use git-ai to'));
|
|
488
|
-
console.log(chalk.gray(' auto-generate commit messages when you run `git commit`.'));
|
|
489
|
-
console.log('');
|
|
490
|
-
console.log(chalk.cyan('💡 Tips:'));
|
|
491
|
-
console.log(chalk.gray(' • Skip hook: git commit --no-verify'));
|
|
492
|
-
console.log(chalk.gray(' • Disable temporarily: GIT_AI_DISABLED=1 git commit'));
|
|
493
|
-
console.log(chalk.gray(' • Remove global hook: git-ai hook remove --global'));
|
|
494
|
-
console.log('');
|
|
495
|
-
console.log(chalk.yellow('⚠️ Note: Local repository hooks (.git/hooks) will be ignored'));
|
|
496
|
-
console.log(chalk.gray(' when global core.hooksPath is set.'));
|
|
497
|
-
}
|
|
498
|
-
async function removeGlobalHook(hookFile, globalHooksPath) {
|
|
499
|
-
const currentGlobalPath = await getGlobalCoreHooksPath();
|
|
500
|
-
if (!currentGlobalPath) {
|
|
501
|
-
console.log(chalk.gray('❌ No global hook configured'));
|
|
502
|
-
return;
|
|
503
|
-
}
|
|
504
|
-
if (currentGlobalPath !== globalHooksPath) {
|
|
505
|
-
console.log(chalk.yellow('⚠️ Global core.hooksPath points to a different location:'));
|
|
506
|
-
console.log(chalk.gray(` ${currentGlobalPath}`));
|
|
507
|
-
console.log(chalk.gray(' Not removing to avoid breaking other hooks.'));
|
|
508
|
-
return;
|
|
509
|
-
}
|
|
510
|
-
if (!existsSync(hookFile)) {
|
|
511
|
-
// Just unset the config
|
|
512
|
-
await execa('git', ['config', '--global', '--unset', 'core.hooksPath']);
|
|
513
|
-
console.log(chalk.green('✅ Global core.hooksPath removed'));
|
|
514
|
-
return;
|
|
515
|
-
}
|
|
516
|
-
const content = readFileSync(hookFile, 'utf-8');
|
|
517
|
-
if (!isGitAiHook(content)) {
|
|
518
|
-
console.log(chalk.yellow('⚠️ The global hook is not from git-ai, skipping removal'));
|
|
519
|
-
return;
|
|
520
|
-
}
|
|
521
|
-
// Remove hook file
|
|
522
|
-
unlinkSync(hookFile);
|
|
523
|
-
// Unset global core.hooksPath
|
|
524
|
-
await execa('git', ['config', '--global', '--unset', 'core.hooksPath']);
|
|
525
|
-
console.log(chalk.green('✅ git-ai global hook removed'));
|
|
526
|
-
console.log(chalk.gray(' Local repository hooks will now work again.'));
|
|
527
|
-
}
|
|
528
|
-
//# sourceMappingURL=hook.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/msg.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export interface MsgOptions {
|
|
2
|
-
json?: boolean;
|
|
3
|
-
quiet?: boolean;
|
|
4
|
-
num?: number;
|
|
5
|
-
locale?: string;
|
|
6
|
-
}
|
|
7
|
-
export interface MsgResult {
|
|
8
|
-
success: boolean;
|
|
9
|
-
message?: string;
|
|
10
|
-
messages?: string[];
|
|
11
|
-
error?: string;
|
|
12
|
-
warnings?: string[];
|
|
13
|
-
metadata?: {
|
|
14
|
-
stagedFiles: string[];
|
|
15
|
-
truncated: boolean;
|
|
16
|
-
ignoredFiles: string[];
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
export declare function runMsg(options?: MsgOptions): Promise<void>;
|
|
20
|
-
//# sourceMappingURL=msg.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"msg.d.ts","sourceRoot":"","sources":["../../src/commands/msg.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE;QACT,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,SAAS,EAAE,OAAO,CAAC;QACnB,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;CACH;AAiBD,wBAAsB,MAAM,CAAC,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA+IpE"}
|