@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.
Files changed (82) hide show
  1. package/README.md +200 -157
  2. package/bin/git-ai.cjs +57 -0
  3. package/install.cjs +50 -0
  4. package/package.json +27 -28
  5. package/.claude/settings.local.json +0 -17
  6. package/CHANGELOG.md +0 -46
  7. package/README_EN.md +0 -264
  8. package/dist/cli.d.ts +0 -3
  9. package/dist/cli.d.ts.map +0 -1
  10. package/dist/cli.js +0 -17
  11. package/dist/cli.js.map +0 -1
  12. package/dist/cli_main.d.ts +0 -2
  13. package/dist/cli_main.d.ts.map +0 -1
  14. package/dist/cli_main.js +0 -255
  15. package/dist/cli_main.js.map +0 -1
  16. package/dist/commands/branch.d.ts +0 -11
  17. package/dist/commands/branch.d.ts.map +0 -1
  18. package/dist/commands/branch.js +0 -279
  19. package/dist/commands/branch.js.map +0 -1
  20. package/dist/commands/commit.d.ts +0 -9
  21. package/dist/commands/commit.d.ts.map +0 -1
  22. package/dist/commands/commit.js +0 -326
  23. package/dist/commands/commit.js.map +0 -1
  24. package/dist/commands/config.d.ts +0 -2
  25. package/dist/commands/config.d.ts.map +0 -1
  26. package/dist/commands/config.js +0 -164
  27. package/dist/commands/config.js.map +0 -1
  28. package/dist/commands/config_manage.d.ts +0 -14
  29. package/dist/commands/config_manage.d.ts.map +0 -1
  30. package/dist/commands/config_manage.js +0 -394
  31. package/dist/commands/config_manage.js.map +0 -1
  32. package/dist/commands/hook.d.ts +0 -5
  33. package/dist/commands/hook.d.ts.map +0 -1
  34. package/dist/commands/hook.js +0 -528
  35. package/dist/commands/hook.js.map +0 -1
  36. package/dist/commands/msg.d.ts +0 -20
  37. package/dist/commands/msg.d.ts.map +0 -1
  38. package/dist/commands/msg.js +0 -148
  39. package/dist/commands/msg.js.map +0 -1
  40. package/dist/commands/pr.d.ts +0 -8
  41. package/dist/commands/pr.d.ts.map +0 -1
  42. package/dist/commands/pr.js +0 -96
  43. package/dist/commands/pr.js.map +0 -1
  44. package/dist/commands/release.d.ts +0 -8
  45. package/dist/commands/release.d.ts.map +0 -1
  46. package/dist/commands/release.js +0 -95
  47. package/dist/commands/release.js.map +0 -1
  48. package/dist/commands/report.d.ts +0 -9
  49. package/dist/commands/report.d.ts.map +0 -1
  50. package/dist/commands/report.js +0 -162
  51. package/dist/commands/report.js.map +0 -1
  52. package/dist/types.d.ts +0 -46
  53. package/dist/types.d.ts.map +0 -1
  54. package/dist/types.js +0 -86
  55. package/dist/types.js.map +0 -1
  56. package/dist/utils/agent.d.ts +0 -5
  57. package/dist/utils/agent.d.ts.map +0 -1
  58. package/dist/utils/agent.js +0 -308
  59. package/dist/utils/agent.js.map +0 -1
  60. package/dist/utils/agent_lite.d.ts +0 -5
  61. package/dist/utils/agent_lite.d.ts.map +0 -1
  62. package/dist/utils/agent_lite.js +0 -263
  63. package/dist/utils/agent_lite.js.map +0 -1
  64. package/dist/utils/ai.d.ts +0 -43
  65. package/dist/utils/ai.d.ts.map +0 -1
  66. package/dist/utils/ai.js +0 -1103
  67. package/dist/utils/ai.js.map +0 -1
  68. package/dist/utils/config.d.ts +0 -11
  69. package/dist/utils/config.d.ts.map +0 -1
  70. package/dist/utils/config.js +0 -239
  71. package/dist/utils/config.js.map +0 -1
  72. package/dist/utils/git.d.ts +0 -42
  73. package/dist/utils/git.d.ts.map +0 -1
  74. package/dist/utils/git.js +0 -456
  75. package/dist/utils/git.js.map +0 -1
  76. package/dist/utils/update.d.ts +0 -4
  77. package/dist/utils/update.d.ts.map +0 -1
  78. package/dist/utils/update.js +0 -122
  79. package/dist/utils/update.js.map +0 -1
  80. package/release_notes.md +0 -9
  81. package/scripts/release.sh +0 -34
  82. package/test_agent_feature.ts +0 -1
@@ -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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"}
@@ -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"}