ai-git-tools 2.0.35 → 2.0.37

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-git-tools",
3
- "version": "2.0.35",
3
+ "version": "2.0.37",
4
4
  "description": "AI-powered Git automation tools for commit messages and PR generation",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
@@ -13,14 +13,14 @@ import { Logger } from '../pr-modules/ui/logger.js';
13
13
  import { colors } from '../pr-modules/utils/constants.js';
14
14
 
15
15
  /**
16
- * 檢查 gh CLI 是否已登入,未登入則印出提示並回傳 false
16
+ * 檢查 gh CLI 是否已登入且 token 有效,未登入則印出提示並回傳 false
17
17
  */
18
18
  function checkGHAuth(logger) {
19
19
  try {
20
- execSync('gh auth token', { stdio: 'pipe' });
20
+ execSync('gh api user --jq .login', { stdio: 'pipe' });
21
21
  return true;
22
22
  } catch (_) {
23
- logger.error('GitHub CLI 未登入,無法執行 PR 相關操作');
23
+ logger.error('GitHub CLI 未登入或 token 已失效,無法執行 PR 相關操作');
24
24
  console.log('');
25
25
  console.log('請先執行認證:');
26
26
  console.log(` ${colors.green}gh auth login${colors.reset}`);
@@ -11,9 +11,13 @@ export class GitOperations {
11
11
  */
12
12
  detectReleaseBranches() {
13
13
  try {
14
- execSync('git fetch origin', { stdio: 'ignore' });
15
- const branches = execSync('git branch -r')
16
- .toString()
14
+ // 嘗試同步遠端,失敗就用本機已知的遠端資訊
15
+ try {
16
+ execSync('git fetch origin', { stdio: 'ignore', timeout: 15000 });
17
+ } catch (_) {
18
+ // fetch 失敗,繼續使用已經 cache 的遠端分支
19
+ }
20
+ const branches = execSync('git branch -r', { encoding: 'utf-8' })
17
21
  .split('\n')
18
22
  .map((b) => b.trim())
19
23
  .filter((b) => b.startsWith('origin/release-'))
@@ -31,12 +35,18 @@ export class GitOperations {
31
35
  const branches = this.detectReleaseBranches();
32
36
  if (branches.length === 0) return null;
33
37
 
38
+ // 優先選月分支(-m),其次週分支(-w),最後 fallback 到全部 release 分支
34
39
  const monthlyBranches = branches.filter((b) => b.includes('-m'));
35
40
  const weeklyBranches = branches.filter((b) => b.includes('-w'));
36
- const priorityBranches = monthlyBranches.length > 0 ? monthlyBranches : weeklyBranches;
41
+ const priorityBranches =
42
+ monthlyBranches.length > 0
43
+ ? monthlyBranches
44
+ : weeklyBranches.length > 0
45
+ ? weeklyBranches
46
+ : branches;
37
47
 
38
48
  priorityBranches.sort().reverse();
39
- return priorityBranches[0];
49
+ return priorityBranches[0] || null;
40
50
  }
41
51
 
42
52
  /**
@@ -63,7 +63,7 @@ export class GitHubAPI {
63
63
  */
64
64
  checkAuth() {
65
65
  try {
66
- execSync('gh auth token', { stdio: 'pipe' });
66
+ execSync('gh api user --jq .login', { stdio: 'pipe' });
67
67
  return { authenticated: true };
68
68
  } catch (error) {
69
69
  return { authenticated: false };