@sleighmaster/bmad 1.4.0 → 1.5.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.
@@ -175,33 +175,7 @@
175
175
  </check>
176
176
  </step>
177
177
 
178
- <step n="6" goal=".gitignore 설정">
179
- <critical>📝 GITIGNORE - Claude 로컬 설정 제외</critical>
180
-
181
- <output>📋 **.gitignore 설정**
182
-
183
- 다음 항목을 .gitignore에 추가합니다:
184
- - .claude/settings.local.json (로컬 설정)
185
- - .claude/plans/ (계획 파일)
186
- </output>
187
-
188
- <action>.gitignore 파일 확인</action>
189
-
190
- <check if=".gitignore에 .claude/settings.local.json 없음">
191
- <action>.gitignore에 추가:
192
- # Claude Code (로컬 설정)
193
- .claude/settings.local.json
194
- .claude/plans/
195
- </action>
196
- <output>✅ .gitignore에 Claude 로컬 설정 제외 추가</output>
197
- </check>
198
-
199
- <check if=".gitignore에 이미 설정됨">
200
- <output>ℹ️ .gitignore 이미 설정됨</output>
201
- </check>
202
- </step>
203
-
204
- <step n="7" goal="설정 완료 및 안내">
178
+ <step n="6" goal="설정 완료 및 안내">
205
179
  <output>🎉 **GitHub 설정 완료!**
206
180
 
207
181
  **적용된 설정:**
@@ -210,7 +184,7 @@
210
184
  ✅ .github/ISSUE_TEMPLATE/bug.md - 버그 리포트 템플릿
211
185
  ✅ .github/PULL_REQUEST_TEMPLATE.md - PR 템플릿
212
186
  ✅ 저장소 머지 규칙 - Merge Commit만 허용, 브랜치 자동 삭제
213
- .gitignore - Claude 로컬 설정 제외
187
+ ℹ️ .gitignore - BMAD 설치 자동 적용됨
214
188
 
215
189
  **다음 단계:**
216
190
  1. 변경사항 커밋: `git add .github && git commit -m "chore: add GitHub templates"`
@@ -32,7 +32,7 @@ if (-not $gitDir) {
32
32
  $hooksDir = Join-Path $gitDir "hooks"
33
33
  $sourceDir = Split-Path -Parent $MyInvocation.MyCommand.Path
34
34
 
35
- $hooks = @("pre-commit", "commit-msg")
35
+ $hooks = @("pre-commit", "commit-msg", "pre-push")
36
36
 
37
37
  if ($Uninstall) {
38
38
  Write-Info "Git Hooks 제거 중..."
@@ -81,5 +81,6 @@ Write-Host ""
81
81
  Write-Info "설치된 Hook:"
82
82
  Write-Host " - pre-commit: master 브랜치 직접 커밋 차단" -ForegroundColor White
83
83
  Write-Host " - commit-msg: Conventional Commits 형식 검증" -ForegroundColor White
84
+ Write-Host " - pre-push: master 브랜치 직접 푸시 차단" -ForegroundColor White
84
85
  Write-Host ""
85
86
  Write-Info "Hook 제거: .\install-hooks.ps1 -Uninstall"
@@ -0,0 +1,23 @@
1
+ #!/bin/bash
2
+ # BMad6GitHub - Pre-push Hook
3
+ # master/main 브랜치로 직접 푸시 방지
4
+
5
+ # 푸시 대상 분석
6
+ while read local_ref local_sha remote_ref remote_sha; do
7
+ if echo "$remote_ref" | grep -qE "refs/heads/(master|main)$"; then
8
+ echo ""
9
+ echo "=========================================="
10
+ echo " ERROR: master/main 브랜치로 직접 푸시 불가!"
11
+ echo "=========================================="
12
+ echo ""
13
+ echo "BMad6GitHub 워크플로우를 따라주세요:"
14
+ echo ""
15
+ echo " 1. Feature 브랜치에서 작업"
16
+ echo " 2. PR 생성: gh pr create"
17
+ echo " 3. 리뷰 후 머지"
18
+ echo ""
19
+ exit 1
20
+ fi
21
+ done
22
+
23
+ exit 0
package/dist/cli.js CHANGED
@@ -37,6 +37,8 @@ program
37
37
  .option('-f, --force', 'Overwrite existing _bmad folder')
38
38
  .option('--skip-github', 'Skip .github templates installation')
39
39
  .option('--skip-hooks', 'Skip Git hooks installation')
40
+ .option('--skip-repo-setup', 'Skip GitHub repository settings')
41
+ .option('-y, --yes', 'Accept all defaults (non-interactive mode)')
40
42
  .action(async (options) => {
41
43
  await install(options);
42
44
  });
@@ -45,6 +47,10 @@ program
45
47
  .description('Update BMad6GitHub to the latest version')
46
48
  .option('-v, --version <version>', 'Update to specific version')
47
49
  .option('--dry-run', 'Show what would be updated without making changes')
50
+ .option('--skip-github', 'Skip .github templates update')
51
+ .option('--skip-hooks', 'Skip Git hooks update')
52
+ .option('--skip-repo-setup', 'Skip GitHub repository settings')
53
+ .option('-y, --yes', 'Accept all defaults (non-interactive mode)')
48
54
  .action(async (options) => {
49
55
  await update(options);
50
56
  });
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAkB,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAiB,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAgB,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,uBAAuB;AACvB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AAC1D,IAAI,OAAO,GAAG,OAAO,CAAC;AACtB,IAAI,CAAC;IACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AACxB,CAAC;AAAC,MAAM,CAAC;IACP,0BAA0B;IAC1B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,uDAAuD,CAAC;KACpE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,yBAAyB,EAAE,yCAAyC,CAAC;KAC5E,MAAM,CAAC,aAAa,EAAE,iCAAiC,CAAC;KACxD,MAAM,CAAC,eAAe,EAAE,qCAAqC,CAAC;KAC9D,MAAM,CAAC,cAAc,EAAE,6BAA6B,CAAC;KACrD,MAAM,CAAC,KAAK,EAAE,OAAuB,EAAE,EAAE;IACxC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,yBAAyB,EAAE,4BAA4B,CAAC;KAC/D,MAAM,CAAC,WAAW,EAAE,mDAAmD,CAAC;KACxE,MAAM,CAAC,KAAK,EAAE,OAAsB,EAAE,EAAE;IACvC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,OAAqB,EAAE,EAAE;IACtC,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,8 @@ export interface InstallOptions {
3
3
  force?: boolean;
4
4
  skipGithub?: boolean;
5
5
  skipHooks?: boolean;
6
+ skipRepoSetup?: boolean;
7
+ yes?: boolean;
6
8
  }
7
9
  export declare function install(options: InstallOptions): Promise<void>;
8
10
  //# sourceMappingURL=install.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDpE"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAkLpE"}
@@ -1,10 +1,12 @@
1
1
  import ora from 'ora';
2
2
  import { readFileSync } from 'fs';
3
+ import { execSync } from 'child_process';
3
4
  import { fileURLToPath } from 'url';
4
- import { dirname, join } from 'path';
5
- import { isBmadInstalled } from '../utils/fs-utils.js';
5
+ import { dirname, join, basename } from 'path';
6
+ import { isBmadInstalled, isGitRepository } from '../utils/fs-utils.js';
6
7
  import { logger } from '../utils/logger.js';
7
- import { performInstall } from '../services/installer.js';
8
+ import { performInstall, setupGitHubRepo, createGitHubRepo } from '../services/installer.js';
9
+ import { askYesNo, isGhCliAvailable, hasRemoteRepository, askText, askChoice } from '../utils/prompt-utils.js';
8
10
  const __filename = fileURLToPath(import.meta.url);
9
11
  const __dirname = dirname(__filename);
10
12
  // 패키지 버전 읽기
@@ -22,41 +24,162 @@ export async function install(options) {
22
24
  const projectRoot = process.cwd();
23
25
  const version = `v${getPackageVersion()}`;
24
26
  logger.title('BMad6GitHub Install');
27
+ logger.highlight('Version', version);
28
+ logger.newline();
25
29
  // 기존 설치 확인
26
- if (await isBmadInstalled(projectRoot)) {
27
- if (!options.force) {
28
- logger.error('BMad6GitHub is already installed in this project.');
29
- logger.plain('Use --force to overwrite, or use "npx @sleighmaster/bmad update" to update.');
30
- process.exit(1);
30
+ const alreadyInstalled = await isBmadInstalled(projectRoot);
31
+ if (alreadyInstalled) {
32
+ if (options.force) {
33
+ logger.warning('기존 설치가 발견되었습니다. 백업 덮어씁니다.');
34
+ }
35
+ else {
36
+ const overwrite = await askYesNo('기존 설치가 발견되었습니다. 백업 후 덮어쓰시겠습니까?', false);
37
+ if (!overwrite) {
38
+ logger.plain('설치를 취소합니다. 업데이트하려면 "npx @sleighmaster/bmad update"를 사용하세요.');
39
+ process.exit(0);
40
+ }
41
+ options.force = true;
42
+ }
43
+ }
44
+ // 인터랙티브 설정 수집
45
+ logger.plain('설치 옵션을 선택해주세요:');
46
+ logger.newline();
47
+ // GitHub 템플릿 설치 여부
48
+ let installGithub = !options.skipGithub;
49
+ if (options.skipGithub === undefined && !options.yes) {
50
+ installGithub = await askYesNo('GitHub 템플릿을 설치하시겠습니까? (Actions, Issue/PR 템플릿)', true);
51
+ }
52
+ // Git 저장소 확인 및 초기화
53
+ let isGitRepo = await isGitRepository(projectRoot);
54
+ let gitInitialized = false;
55
+ if (!isGitRepo && !options.yes) {
56
+ const initGit = await askYesNo('Git 저장소가 아닙니다. git init을 실행하시겠습니까?', true);
57
+ if (initGit) {
58
+ try {
59
+ execSync('git init', { cwd: projectRoot, stdio: 'pipe' });
60
+ isGitRepo = true;
61
+ gitInitialized = true;
62
+ logger.success('Git 저장소가 초기화되었습니다.');
63
+ }
64
+ catch {
65
+ logger.warning('git init 실패. Git hooks와 저장소 설정을 건너뜁니다.');
66
+ }
67
+ }
68
+ }
69
+ // Git hooks 설치 여부
70
+ let installHooks = !options.skipHooks;
71
+ if (isGitRepo && options.skipHooks === undefined && !options.yes) {
72
+ installHooks = await askYesNo('Git hooks를 설치하시겠습니까? (커밋/푸시 규칙 적용)', true);
73
+ }
74
+ else if (!isGitRepo) {
75
+ installHooks = false;
76
+ logger.dim('Git 저장소가 아니므로 Git hooks 설치를 건너뜁니다.');
77
+ }
78
+ // GitHub 저장소 설정 여부
79
+ let setupRepo = !options.skipRepoSetup;
80
+ const ghAvailable = await isGhCliAvailable();
81
+ let hasRemote = await hasRemoteRepository();
82
+ let repoCreated = false;
83
+ if (ghAvailable && !hasRemote && isGitRepo && options.skipRepoSetup === undefined && !options.yes) {
84
+ // origin이 없을 때: 저장소 생성 제안
85
+ const createRepo = await askYesNo('원격 저장소(origin)가 없습니다. GitHub 저장소를 생성하시겠습니까?', true);
86
+ if (createRepo) {
87
+ const defaultName = basename(process.cwd());
88
+ const repoName = await askText('저장소 이름', defaultName);
89
+ const description = await askText('저장소 설명 (선택, Enter로 건너뛰기)');
90
+ const visibility = await askChoice('저장소 가시성:', [
91
+ { label: 'Private (비공개)', value: 'private' },
92
+ { label: 'Public (공개)', value: 'public' },
93
+ ], 0);
94
+ logger.newline();
95
+ logger.plain('GitHub 저장소 생성 중...');
96
+ const createResult = await createGitHubRepo({
97
+ name: repoName,
98
+ description: description || undefined,
99
+ visibility: visibility,
100
+ });
101
+ if (createResult.success) {
102
+ logger.success(createResult.message);
103
+ hasRemote = true;
104
+ repoCreated = true;
105
+ setupRepo = true;
106
+ }
107
+ else {
108
+ logger.error(createResult.message);
109
+ setupRepo = false;
110
+ }
31
111
  }
32
- logger.warning('Existing installation found. Will backup and overwrite.');
112
+ else {
113
+ setupRepo = false;
114
+ }
115
+ }
116
+ else if (ghAvailable && hasRemote && options.skipRepoSetup === undefined && !options.yes) {
117
+ setupRepo = await askYesNo('GitHub 저장소 설정을 적용하시겠습니까? (머지 규칙, 브랜치 자동 삭제)', true);
118
+ }
119
+ else if (!ghAvailable || !hasRemote) {
120
+ setupRepo = false;
33
121
  }
34
- const spinner = ora('Preparing installation...').start();
35
- spinner.succeed(`Installing version: ${version}`);
36
122
  logger.newline();
123
+ // 설치 실행
124
+ const spinner = ora('설치 중...').start();
37
125
  const result = await performInstall(projectRoot, version, {
38
126
  force: options.force,
39
- skipGithub: options.skipGithub,
40
- skipHooks: options.skipHooks,
127
+ skipGithub: !installGithub,
128
+ skipHooks: !installHooks,
41
129
  });
42
130
  if (!result.success) {
43
- logger.error(`Installation failed: ${result.error}`);
131
+ spinner.fail('설치 실패');
132
+ logger.error(result.error || 'Unknown error');
44
133
  if (result.backupPath) {
45
- logger.plain(`Backup available at: ${result.backupPath}`);
134
+ logger.plain(`백업 위치: ${result.backupPath}`);
46
135
  }
47
136
  process.exit(1);
48
137
  }
138
+ spinner.succeed('설치 완료');
49
139
  // 완료 메시지
50
140
  logger.newline();
51
- logger.success('BMad6GitHub installed successfully!');
52
- logger.highlight('Version', result.version);
141
+ logger.success('BMad6GitHub 성공적으로 설치되었습니다!');
53
142
  if (result.backupPath) {
54
- logger.dim(`Previous installation backed up to: ${result.backupPath}`);
143
+ logger.dim(`이전 버전 백업: ${result.backupPath}`);
144
+ }
145
+ // GitHub 저장소 설정 적용
146
+ if (setupRepo) {
147
+ logger.newline();
148
+ logger.plain('GitHub 저장소 설정 적용 중...');
149
+ const setupResult = await setupGitHubRepo();
150
+ if (setupResult.success) {
151
+ logger.success(setupResult.message);
152
+ }
153
+ else if (setupResult.skipped) {
154
+ logger.warning(setupResult.message);
155
+ }
156
+ else {
157
+ logger.error(setupResult.message);
158
+ }
159
+ }
160
+ else if (!ghAvailable) {
161
+ logger.newline();
162
+ logger.dim('GitHub CLI(gh)가 설치되지 않았거나 인증되지 않았습니다.');
163
+ logger.dim('저장소 설정을 위해 SM 에이전트에서 [GS] GitHub Setup을 실행해주세요.');
55
164
  }
165
+ else if (!hasRemote) {
166
+ logger.newline();
167
+ logger.dim('원격 저장소가 설정되지 않았습니다.');
168
+ logger.dim('저장소 설정을 위해 원격 저장소 추가 후 SM 에이전트에서 [GS] GitHub Setup을 실행해주세요.');
169
+ }
170
+ // 설치 요약
171
+ logger.newline();
172
+ logger.plain('설치 요약:');
173
+ logger.plain(` - _bmad 폴더: ${logger.formatCheck(true)}`);
174
+ logger.plain(` - Claude commands: ${logger.formatCheck(true)}`);
175
+ logger.plain(` - Git 초기화: ${logger.formatCheck(gitInitialized)}`);
176
+ logger.plain(` - GitHub 템플릿: ${logger.formatCheck(installGithub)}`);
177
+ logger.plain(` - Git hooks: ${logger.formatCheck(installHooks)}`);
178
+ logger.plain(` - 저장소 생성: ${logger.formatCheck(repoCreated)}`);
179
+ logger.plain(` - 저장소 설정: ${logger.formatCheck(setupRepo && ghAvailable && hasRemote)}`);
56
180
  logger.newline();
57
- logger.plain('Next steps:');
58
- logger.plain(' 1. Review config: _bmad/bmm/config.yaml');
59
- logger.plain(' 2. Start SM agent: /bmad-agent-bmm-sm');
60
- logger.plain(' 3. Run GitHub setup: [GS] in SM menu');
181
+ logger.plain('다음 단계:');
182
+ logger.plain(' 1. 설정 확인: _bmad/bmm/config.yaml');
183
+ logger.plain(' 2. SM 에이전트 시작: /bmad-agent-bmm-sm');
61
184
  }
62
185
  //# sourceMappingURL=install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,10 @@
1
1
  export interface UpdateOptions {
2
2
  version?: string;
3
3
  dryRun?: boolean;
4
+ skipGithub?: boolean;
5
+ skipHooks?: boolean;
6
+ skipRepoSetup?: boolean;
7
+ yes?: boolean;
4
8
  }
5
9
  export declare function update(options: UpdateOptions): Promise<void>;
6
10
  //# sourceMappingURL=update.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DlE"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA2PlE"}
@@ -1,9 +1,12 @@
1
1
  import { readFileSync } from 'fs';
2
+ import { execSync } from 'child_process';
2
3
  import { fileURLToPath } from 'url';
3
- import { dirname, join } from 'path';
4
- import { isBmadInstalled, getCurrentVersion } from '../utils/fs-utils.js';
4
+ import { dirname, join, basename } from 'path';
5
+ import ora from 'ora';
6
+ import { isBmadInstalled, getCurrentVersion, isGitRepository } from '../utils/fs-utils.js';
5
7
  import { logger } from '../utils/logger.js';
6
- import { performInstall } from '../services/installer.js';
8
+ import { performInstall, setupGitHubRepo, createGitHubRepo } from '../services/installer.js';
9
+ import { askYesNo, isGhCliAvailable, hasRemoteRepository, askText, askChoice } from '../utils/prompt-utils.js';
7
10
  const __filename = fileURLToPath(import.meta.url);
8
11
  const __dirname = dirname(__filename);
9
12
  // 패키지 버전 읽기
@@ -23,49 +26,219 @@ export async function update(options) {
23
26
  logger.title('BMad6GitHub Update');
24
27
  // 설치 확인
25
28
  if (!(await isBmadInstalled(projectRoot))) {
26
- logger.error('BMad6GitHub is not installed in this project.');
27
- logger.plain('Run "npx @sleighmaster/bmad install" first.');
29
+ logger.error('BMad6GitHub 설치되지 않았습니다.');
30
+ logger.plain('"npx @sleighmaster/bmad install" 명령어로 먼저 설치해주세요.');
28
31
  process.exit(1);
29
32
  }
30
33
  // 현재 버전 확인
31
34
  const currentVersion = await getCurrentVersion(projectRoot);
32
- logger.highlight('Current version', currentVersion || 'unknown');
33
- logger.highlight('Package version', packageVersion);
35
+ logger.highlight('현재 버전', currentVersion || 'unknown');
36
+ logger.highlight('최신 버전', packageVersion);
34
37
  // 버전 비교
35
38
  if (currentVersion === packageVersion) {
36
39
  logger.newline();
37
- logger.success('You are already on the latest version!');
38
- logger.newline();
39
- logger.dim('To check for newer versions, run:');
40
- logger.plain(' npm info @sleighmaster/bmad version');
40
+ logger.success('이미 최신 버전입니다!');
41
+ // 최신 버전이어도 설정 재적용 옵션 제공
42
+ const ghAvailable = await isGhCliAvailable();
43
+ let hasRemote = await hasRemoteRepository();
44
+ let isGitRepo = await isGitRepository(projectRoot);
45
+ if (!isGitRepo && !options.yes) {
46
+ logger.newline();
47
+ const initGit = await askYesNo('Git 저장소가 아닙니다. git init을 실행하시겠습니까?', false);
48
+ if (initGit) {
49
+ try {
50
+ execSync('git init', { cwd: projectRoot, stdio: 'pipe' });
51
+ isGitRepo = true;
52
+ logger.success('Git 저장소가 초기화되었습니다.');
53
+ }
54
+ catch {
55
+ logger.warning('git init 실패.');
56
+ }
57
+ }
58
+ }
59
+ if (ghAvailable && !hasRemote && isGitRepo && !options.yes) {
60
+ logger.newline();
61
+ const createRepo = await askYesNo('원격 저장소(origin)가 없습니다. GitHub 저장소를 생성하시겠습니까?', false);
62
+ if (createRepo) {
63
+ const defaultName = basename(process.cwd());
64
+ const repoName = await askText('저장소 이름', defaultName);
65
+ const description = await askText('저장소 설명 (선택, Enter로 건너뛰기)');
66
+ const visibility = await askChoice('저장소 가시성:', [
67
+ { label: 'Private (비공개)', value: 'private' },
68
+ { label: 'Public (공개)', value: 'public' },
69
+ ], 0);
70
+ logger.newline();
71
+ logger.plain('GitHub 저장소 생성 중...');
72
+ const createResult = await createGitHubRepo({
73
+ name: repoName,
74
+ description: description || undefined,
75
+ visibility: visibility,
76
+ });
77
+ if (createResult.success) {
78
+ logger.success(createResult.message);
79
+ hasRemote = true;
80
+ // 생성 후 바로 설정 적용
81
+ logger.newline();
82
+ logger.plain('GitHub 저장소 설정 적용 중...');
83
+ const setupResult = await setupGitHubRepo();
84
+ if (setupResult.success) {
85
+ logger.success(setupResult.message);
86
+ }
87
+ else {
88
+ logger.warning(setupResult.message);
89
+ }
90
+ }
91
+ else {
92
+ logger.error(createResult.message);
93
+ }
94
+ }
95
+ }
96
+ else if (ghAvailable && hasRemote && !options.yes) {
97
+ logger.newline();
98
+ const reapplySettings = await askYesNo('GitHub 저장소 설정을 다시 적용하시겠습니까?', false);
99
+ if (reapplySettings) {
100
+ const setupResult = await setupGitHubRepo();
101
+ if (setupResult.success) {
102
+ logger.success(setupResult.message);
103
+ }
104
+ else {
105
+ logger.warning(setupResult.message);
106
+ }
107
+ }
108
+ }
41
109
  return;
42
110
  }
43
111
  if (options.dryRun) {
44
112
  logger.newline();
45
- logger.plain('Dry run mode - would update:');
113
+ logger.plain('Dry run 모드 - 실제 업데이트하지 않음:');
46
114
  logger.highlight('From', currentVersion || 'unknown');
47
115
  logger.highlight('To', packageVersion);
48
116
  return;
49
117
  }
50
118
  logger.newline();
51
- // 업데이트 실행 (force 모드로 설치)
119
+ // 인터랙티브 설정 수집
120
+ logger.plain('업데이트 옵션을 선택해주세요:');
121
+ logger.newline();
122
+ // GitHub 템플릿 업데이트 여부
123
+ let updateGithub = !options.skipGithub;
124
+ if (options.skipGithub === undefined && !options.yes) {
125
+ updateGithub = await askYesNo('GitHub 템플릿을 업데이트하시겠습니까?', true);
126
+ }
127
+ // Git 저장소 확인 및 초기화
128
+ let isGitRepo = await isGitRepository(projectRoot);
129
+ let gitInitialized = false;
130
+ if (!isGitRepo && !options.yes) {
131
+ const initGit = await askYesNo('Git 저장소가 아닙니다. git init을 실행하시겠습니까?', true);
132
+ if (initGit) {
133
+ try {
134
+ execSync('git init', { cwd: projectRoot, stdio: 'pipe' });
135
+ isGitRepo = true;
136
+ gitInitialized = true;
137
+ logger.success('Git 저장소가 초기화되었습니다.');
138
+ }
139
+ catch {
140
+ logger.warning('git init 실패. Git hooks와 저장소 설정을 건너뜁니다.');
141
+ }
142
+ }
143
+ }
144
+ // Git hooks 업데이트 여부
145
+ let updateHooks = !options.skipHooks;
146
+ if (isGitRepo && options.skipHooks === undefined && !options.yes) {
147
+ updateHooks = await askYesNo('Git hooks를 업데이트하시겠습니까?', true);
148
+ }
149
+ else if (!isGitRepo) {
150
+ updateHooks = false;
151
+ }
152
+ // GitHub 저장소 설정 여부
153
+ let setupRepo = !options.skipRepoSetup;
154
+ const ghAvailable = await isGhCliAvailable();
155
+ let hasRemote = await hasRemoteRepository();
156
+ let repoCreated = false;
157
+ if (ghAvailable && !hasRemote && isGitRepo && options.skipRepoSetup === undefined && !options.yes) {
158
+ const createRepo = await askYesNo('원격 저장소(origin)가 없습니다. GitHub 저장소를 생성하시겠습니까?', false);
159
+ if (createRepo) {
160
+ const defaultName = basename(process.cwd());
161
+ const repoName = await askText('저장소 이름', defaultName);
162
+ const description = await askText('저장소 설명 (선택, Enter로 건너뛰기)');
163
+ const visibility = await askChoice('저장소 가시성:', [
164
+ { label: 'Private (비공개)', value: 'private' },
165
+ { label: 'Public (공개)', value: 'public' },
166
+ ], 0);
167
+ logger.newline();
168
+ logger.plain('GitHub 저장소 생성 중...');
169
+ const createResult = await createGitHubRepo({
170
+ name: repoName,
171
+ description: description || undefined,
172
+ visibility: visibility,
173
+ });
174
+ if (createResult.success) {
175
+ logger.success(createResult.message);
176
+ hasRemote = true;
177
+ repoCreated = true;
178
+ setupRepo = true;
179
+ }
180
+ else {
181
+ logger.error(createResult.message);
182
+ setupRepo = false;
183
+ }
184
+ }
185
+ else {
186
+ setupRepo = false;
187
+ }
188
+ }
189
+ else if (ghAvailable && hasRemote && options.skipRepoSetup === undefined && !options.yes) {
190
+ setupRepo = await askYesNo('GitHub 저장소 설정을 확인/업데이트하시겠습니까?', false);
191
+ }
192
+ else if (!ghAvailable || !hasRemote) {
193
+ setupRepo = false;
194
+ }
195
+ logger.newline();
196
+ // 업데이트 실행
197
+ const spinner = ora('업데이트 중...').start();
52
198
  const result = await performInstall(projectRoot, packageVersion, {
53
199
  force: true,
54
- skipGithub: false,
55
- skipHooks: false,
200
+ skipGithub: !updateGithub,
201
+ skipHooks: !updateHooks,
56
202
  });
57
203
  if (!result.success) {
58
- logger.error(`Update failed: ${result.error}`);
204
+ spinner.fail('업데이트 실패');
205
+ logger.error(result.error || 'Unknown error');
59
206
  if (result.backupPath) {
60
- logger.plain(`Backup available at: ${result.backupPath}`);
207
+ logger.plain(`백업 위치: ${result.backupPath}`);
61
208
  }
62
209
  process.exit(1);
63
210
  }
211
+ spinner.succeed('업데이트 완료');
64
212
  logger.newline();
65
- logger.success('BMad6GitHub updated successfully!');
66
- logger.highlight('Version', result.version);
213
+ logger.success('BMad6GitHub 성공적으로 업데이트되었습니다!');
214
+ logger.highlight('버전', result.version);
67
215
  if (result.backupPath) {
68
- logger.dim(`Previous version backed up to: ${result.backupPath}`);
216
+ logger.dim(`이전 버전 백업: ${result.backupPath}`);
69
217
  }
218
+ // GitHub 저장소 설정 적용
219
+ if (setupRepo) {
220
+ logger.newline();
221
+ logger.plain('GitHub 저장소 설정 적용 중...');
222
+ const setupResult = await setupGitHubRepo();
223
+ if (setupResult.success) {
224
+ logger.success(setupResult.message);
225
+ }
226
+ else if (setupResult.skipped) {
227
+ logger.warning(setupResult.message);
228
+ }
229
+ else {
230
+ logger.error(setupResult.message);
231
+ }
232
+ }
233
+ // 업데이트 요약
234
+ logger.newline();
235
+ logger.plain('업데이트 요약:');
236
+ logger.plain(` - _bmad 폴더: ${logger.formatCheck(true)}`);
237
+ logger.plain(` - Claude commands: ${logger.formatCheck(true)}`);
238
+ logger.plain(` - Git 초기화: ${logger.formatCheck(gitInitialized)}`);
239
+ logger.plain(` - GitHub 템플릿: ${logger.formatCheck(updateGithub)}`);
240
+ logger.plain(` - Git hooks: ${logger.formatCheck(updateHooks)}`);
241
+ logger.plain(` - 저장소 생성: ${logger.formatCheck(repoCreated)}`);
242
+ logger.plain(` - 저장소 설정: ${logger.formatCheck(setupRepo && ghAvailable && hasRemote)}`);
70
243
  }
71
244
  //# sourceMappingURL=update.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -12,4 +12,27 @@ export declare function performInstall(projectRoot: string, version: string, opt
12
12
  skipGithub?: boolean;
13
13
  skipHooks?: boolean;
14
14
  }): Promise<InstallResult>;
15
+ export interface GitHubSetupResult {
16
+ success: boolean;
17
+ message: string;
18
+ skipped?: boolean;
19
+ }
20
+ export interface CreateRepoOptions {
21
+ name: string;
22
+ description?: string;
23
+ visibility: 'public' | 'private';
24
+ }
25
+ export interface CreateRepoResult {
26
+ success: boolean;
27
+ message: string;
28
+ repoUrl?: string;
29
+ }
30
+ /**
31
+ * GitHub 저장소 생성 (gh repo create 사용)
32
+ */
33
+ export declare function createGitHubRepo(options: CreateRepoOptions): Promise<CreateRepoResult>;
34
+ /**
35
+ * GitHub 저장소 설정 (머지 규칙, 브랜치 자동 삭제 등)
36
+ */
37
+ export declare function setupGitHubRepo(): Promise<GitHubSetupResult>;
15
38
  //# sourceMappingURL=installer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/services/installer.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CAChB,GACL,OAAO,CAAC,aAAa,CAAC,CAqFxB"}
1
+ {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/services/installer.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CAChB,GACL,OAAO,CAAC,aAAa,CAAC,CAqFxB;AA8GD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,QAAQ,GAAG,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiD5F;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,iBAAiB,CAAC,CA0DlE"}
@@ -96,7 +96,7 @@ export async function performInstall(projectRoot, version, options = {}) {
96
96
  }
97
97
  }
98
98
  /**
99
- * Git hooks 설치
99
+ * Git hooks 설치 (동적으로 _bmad/hooks/ 폴더의 모든 hook 설치)
100
100
  */
101
101
  async function installGitHooks(projectRoot, dataDir) {
102
102
  const gitDir = path.join(projectRoot, '.git');
@@ -106,54 +106,68 @@ async function installGitHooks(projectRoot, dataDir) {
106
106
  }
107
107
  const hooksDir = path.join(gitDir, 'hooks');
108
108
  await fs.ensureDir(hooksDir);
109
- // pre-commit hook
110
- const srcPreCommit = path.join(dataDir, '_bmad', 'bmm', 'data', 'git-hooks', 'pre-commit');
111
- if (await fs.pathExists(srcPreCommit)) {
112
- const destPreCommit = path.join(hooksDir, 'pre-commit');
113
- await fs.copy(srcPreCommit, destPreCommit);
114
- // 실행 권한 부여 (Unix)
115
- if (process.platform !== 'win32') {
116
- try {
117
- execSync(`chmod +x "${destPreCommit}"`);
118
- }
119
- catch {
120
- // 권한 설정 실패 무시
109
+ // _bmad/hooks/ 폴더에서 모든 hook 파일을 동적으로 설치
110
+ const hooksSourceDir = path.join(dataDir, '_bmad', 'hooks');
111
+ if (!(await fs.pathExists(hooksSourceDir))) {
112
+ logger.warning('No hooks source directory found.');
113
+ return;
114
+ }
115
+ const hookFiles = await fs.readdir(hooksSourceDir);
116
+ let installedCount = 0;
117
+ for (const hookFile of hookFiles) {
118
+ // 스크립트 파일(.ps1, .sh) 및 sample 파일 제외
119
+ if (hookFile.endsWith('.ps1') || hookFile.endsWith('.sh') || hookFile.endsWith('.sample')) {
120
+ continue;
121
+ }
122
+ const srcHook = path.join(hooksSourceDir, hookFile);
123
+ // 파일인지 확인 (디렉토리 제외)
124
+ const stat = await fs.stat(srcHook);
125
+ if (!stat.isFile()) {
126
+ continue;
127
+ }
128
+ const destHook = path.join(hooksDir, hookFile);
129
+ // 기존 hook 백업 (BMAD hook이 아닌 경우)
130
+ if (await fs.pathExists(destHook)) {
131
+ const content = await fs.readFile(destHook, 'utf-8');
132
+ if (!content.includes('BMad6GitHub')) {
133
+ const backup = `${destHook}.backup`;
134
+ await fs.copy(destHook, backup);
135
+ logger.dim(` Backed up existing ${hookFile} to ${hookFile}.backup`);
121
136
  }
122
137
  }
123
- }
124
- // commit-msg hook
125
- const srcCommitMsg = path.join(dataDir, '_bmad', 'bmm', 'data', 'git-hooks', 'commit-msg');
126
- if (await fs.pathExists(srcCommitMsg)) {
127
- const destCommitMsg = path.join(hooksDir, 'commit-msg');
128
- await fs.copy(srcCommitMsg, destCommitMsg);
138
+ await fs.copy(srcHook, destHook);
139
+ installedCount++;
140
+ // Unix 실행 권한 부여
129
141
  if (process.platform !== 'win32') {
130
142
  try {
131
- execSync(`chmod +x "${destCommitMsg}"`);
143
+ execSync(`chmod +x "${destHook}"`);
132
144
  }
133
145
  catch {
134
146
  // 권한 설정 실패 무시
135
147
  }
136
148
  }
137
149
  }
150
+ if (installedCount > 0) {
151
+ logger.dim(` Installed ${installedCount} Git hook(s)`);
152
+ }
138
153
  }
139
154
  /**
140
155
  * .gitignore 업데이트
141
156
  */
142
157
  async function updateGitignore(projectRoot) {
143
158
  const gitignorePath = path.join(projectRoot, '.gitignore');
144
- const entriesToAdd = [
145
- '# Claude Code local settings',
159
+ const requiredEntries = [
146
160
  '.claude/settings.local.json',
147
161
  '.claude/todos.local.json',
148
162
  '.claude/plans/',
149
- '',
150
163
  ];
151
164
  let content = '';
152
165
  if (await fs.pathExists(gitignorePath)) {
153
166
  content = await fs.readFile(gitignorePath, 'utf-8');
154
167
  }
155
- // 이미 추가되어 있는지 확인
156
- if (content.includes('.claude/settings.local.json')) {
168
+ // 누락된 항목만 추가
169
+ const missingEntries = requiredEntries.filter((entry) => !content.includes(entry));
170
+ if (missingEntries.length === 0) {
157
171
  return;
158
172
  }
159
173
  // 줄바꿈 추가
@@ -163,7 +177,116 @@ async function updateGitignore(projectRoot) {
163
177
  if (content && !content.endsWith('\n\n')) {
164
178
  content += '\n';
165
179
  }
166
- content += entriesToAdd.join('\n');
180
+ // 헤더가 없으면 추가
181
+ if (!content.includes('# Claude Code')) {
182
+ content += '# Claude Code local settings\n';
183
+ }
184
+ content += missingEntries.join('\n') + '\n';
167
185
  await fs.writeFile(gitignorePath, content, 'utf-8');
168
186
  }
187
+ /**
188
+ * GitHub 저장소 생성 (gh repo create 사용)
189
+ */
190
+ export async function createGitHubRepo(options) {
191
+ try {
192
+ // gh CLI 인증 확인
193
+ try {
194
+ execSync('gh auth status', { stdio: 'ignore' });
195
+ }
196
+ catch {
197
+ return {
198
+ success: false,
199
+ message: 'GitHub CLI(gh)가 인증되지 않았습니다. `gh auth login`을 실행해주세요.',
200
+ };
201
+ }
202
+ // gh repo create 명령어 구성
203
+ const args = [
204
+ 'gh', 'repo', 'create', options.name,
205
+ `--${options.visibility}`,
206
+ '--source=.',
207
+ '--remote=origin',
208
+ ];
209
+ if (options.description) {
210
+ args.push('--description', JSON.stringify(options.description));
211
+ }
212
+ const command = args.join(' ');
213
+ const output = execSync(command, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
214
+ const repoUrl = output.trim();
215
+ return {
216
+ success: true,
217
+ message: `GitHub 저장소가 생성되었습니다: ${repoUrl || options.name}`,
218
+ repoUrl: repoUrl || undefined,
219
+ };
220
+ }
221
+ catch (error) {
222
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
223
+ if (errorMessage.includes('already exists')) {
224
+ return {
225
+ success: false,
226
+ message: `저장소 '${options.name}'이(가) 이미 존재합니다. 다른 이름을 사용해주세요.`,
227
+ };
228
+ }
229
+ return {
230
+ success: false,
231
+ message: `저장소 생성 실패: ${errorMessage}`,
232
+ };
233
+ }
234
+ }
235
+ /**
236
+ * GitHub 저장소 설정 (머지 규칙, 브랜치 자동 삭제 등)
237
+ */
238
+ export async function setupGitHubRepo() {
239
+ try {
240
+ // gh CLI 인증 확인
241
+ try {
242
+ execSync('gh auth status', { stdio: 'ignore' });
243
+ }
244
+ catch {
245
+ return {
246
+ success: false,
247
+ message: 'GitHub CLI(gh)가 인증되지 않았습니다. `gh auth login`을 실행해주세요.',
248
+ skipped: true,
249
+ };
250
+ }
251
+ // 원격 저장소 확인
252
+ try {
253
+ const remote = execSync('git remote -v', { encoding: 'utf-8' });
254
+ if (!remote.includes('origin')) {
255
+ return {
256
+ success: false,
257
+ message: '원격 저장소(origin)가 설정되지 않았습니다.',
258
+ skipped: true,
259
+ };
260
+ }
261
+ }
262
+ catch {
263
+ return {
264
+ success: false,
265
+ message: 'Git 저장소가 아니거나 원격 저장소가 없습니다.',
266
+ skipped: true,
267
+ };
268
+ }
269
+ // GitHub 저장소 설정 적용
270
+ execSync('gh repo edit --enable-merge-commit --enable-squash-merge=false --enable-rebase-merge=false --delete-branch-on-merge', { stdio: 'inherit' });
271
+ return {
272
+ success: true,
273
+ message: '저장소 설정 완료: Merge Commit만 허용, 브랜치 자동 삭제 활성화',
274
+ };
275
+ }
276
+ catch (error) {
277
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
278
+ // GitHub Free + Private 저장소 제한 체크
279
+ if (errorMessage.includes('403') || errorMessage.includes('Upgrade')) {
280
+ return {
281
+ success: false,
282
+ message: 'GitHub Free 플랜의 Private 저장소에서는 일부 설정이 제한됩니다. GitHub 웹에서 수동으로 설정해주세요.',
283
+ skipped: true,
284
+ };
285
+ }
286
+ return {
287
+ success: false,
288
+ message: `저장소 설정 실패: ${errorMessage}`,
289
+ };
290
+ }
291
+ }
169
292
  //# sourceMappingURL=installer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/services/installer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/services/installer.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,10 @@ export declare function isProjectRoot(dir: string): Promise<boolean>;
6
6
  * _bmad 폴더가 설치되어 있는지 확인
7
7
  */
8
8
  export declare function isBmadInstalled(dir: string): Promise<boolean>;
9
+ /**
10
+ * Git 저장소인지 확인
11
+ */
12
+ export declare function isGitRepository(dir: string): Promise<boolean>;
9
13
  /**
10
14
  * 현재 설치된 버전 읽기
11
15
  */
@@ -1 +1 @@
1
- {"version":3,"file":"fs-utils.d.ts","sourceRoot":"","sources":["../../src/utils/fs-utils.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAIjE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEnE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQ3E;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,GAAE,MAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAK7E;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKhF;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GACpC,OAAO,CAAC,IAAI,CAAC,CAKf;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEnE;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAMrE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9E;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMvE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhF"}
1
+ {"version":3,"file":"fs-utils.d.ts","sourceRoot":"","sources":["../../src/utils/fs-utils.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAIjE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEnE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEnE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQ3E;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,GAAE,MAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAK7E;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKhF;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GACpC,OAAO,CAAC,IAAI,CAAC,CAKf;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEnE;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAMrE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9E;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMvE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhF"}
@@ -15,6 +15,12 @@ export async function isProjectRoot(dir) {
15
15
  export async function isBmadInstalled(dir) {
16
16
  return fs.pathExists(path.join(dir, '_bmad'));
17
17
  }
18
+ /**
19
+ * Git 저장소인지 확인
20
+ */
21
+ export async function isGitRepository(dir) {
22
+ return fs.pathExists(path.join(dir, '.git'));
23
+ }
18
24
  /**
19
25
  * 현재 설치된 버전 읽기
20
26
  */
@@ -1 +1 @@
1
- {"version":3,"file":"fs-utils.js","sourceRoot":"","sources":["../../src/utils/fs-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fs-utils.js","sourceRoot":"","sources":["../../src/utils/fs-utils.ts"],"names":[],"mappings":"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"}
@@ -9,5 +9,6 @@ export declare const logger: {
9
9
  plain: (message: string) => void;
10
10
  dim: (message: string) => void;
11
11
  highlight: (label: string, value: string) => void;
12
+ formatCheck: (value: boolean) => string;
12
13
  };
13
14
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;oBACD,MAAM;uBAIH,MAAM;uBAIN,MAAM;qBAIR,MAAM;iBAIV,MAAM,SAAS,MAAM,WAAW,MAAM;qBAIlC,MAAM;;qBAYN,MAAM;mBAIR,MAAM;uBAIF,MAAM,SAAS,MAAM;CAGzC,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;oBACD,MAAM;uBAIH,MAAM;uBAIN,MAAM;qBAIR,MAAM;iBAIV,MAAM,SAAS,MAAM,WAAW,MAAM;qBAIlC,MAAM;;qBAYN,MAAM;mBAIR,MAAM;uBAIF,MAAM,SAAS,MAAM;yBAInB,OAAO,KAAG,MAAM;CAGtC,CAAC"}
@@ -34,5 +34,8 @@ export const logger = {
34
34
  highlight: (label, value) => {
35
35
  console.log(chalk.gray(label + ':'), chalk.cyan(value));
36
36
  },
37
+ formatCheck: (value) => {
38
+ return value ? chalk.green('✔') : chalk.dim('✗');
39
+ },
37
40
  };
38
41
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,CAAC,OAAe,EAAE,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,EAAE,CAAC,OAAe,EAAE,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,EAAE,CAAC,OAAe,EAAE,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,EAAE,CAAC,IAAY,EAAE,KAAa,EAAE,OAAe,EAAE,EAAE;QACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE;QACzB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACvF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,OAAO,EAAE,GAAG,EAAE;QACZ,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE;QACzB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,GAAG,EAAE,CAAC,OAAe,EAAE,EAAE;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,SAAS,EAAE,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE;QAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,CAAC,OAAe,EAAE,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,EAAE,CAAC,OAAe,EAAE,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,EAAE,CAAC,OAAe,EAAE,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,EAAE,CAAC,IAAY,EAAE,KAAa,EAAE,OAAe,EAAE,EAAE;QACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE;QACzB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACvF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,OAAO,EAAE,GAAG,EAAE;QACZ,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE;QACzB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,GAAG,EAAE,CAAC,OAAe,EAAE,EAAE;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,SAAS,EAAE,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE;QAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,WAAW,EAAE,CAAC,KAAc,EAAU,EAAE;QACtC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;CACF,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * 사용자에게 y/n 질문을 하고 응답을 받음
3
+ */
4
+ export declare function askYesNo(question: string, defaultValue?: boolean): Promise<boolean>;
5
+ /**
6
+ * gh CLI가 설치되어 있고 인증되어 있는지 확인
7
+ */
8
+ export declare function isGhCliAvailable(): Promise<boolean>;
9
+ /**
10
+ * 원격 저장소가 설정되어 있는지 확인
11
+ */
12
+ export declare function hasRemoteRepository(): Promise<boolean>;
13
+ /**
14
+ * 사용자에게 텍스트 입력을 받음
15
+ */
16
+ export declare function askText(question: string, defaultValue?: string): Promise<string>;
17
+ /**
18
+ * 사용자에게 선택지를 제시하고 번호로 선택을 받음
19
+ */
20
+ export declare function askChoice(question: string, choices: {
21
+ label: string;
22
+ value: string;
23
+ }[], defaultIndex?: number): Promise<string>;
24
+ //# sourceMappingURL=prompt-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-utils.d.ts","sourceRoot":"","sources":["../../src/utils/prompt-utils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBhG;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CASzD;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAS5D;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAe1F;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,EAC3C,YAAY,GAAE,MAAU,GACvB,OAAO,CAAC,MAAM,CAAC,CA4BjB"}
@@ -0,0 +1,101 @@
1
+ import readline from 'readline';
2
+ /**
3
+ * 사용자에게 y/n 질문을 하고 응답을 받음
4
+ */
5
+ export async function askYesNo(question, defaultValue = false) {
6
+ const rl = readline.createInterface({
7
+ input: process.stdin,
8
+ output: process.stdout,
9
+ });
10
+ const hint = defaultValue ? '[Y/n]' : '[y/N]';
11
+ return new Promise((resolve) => {
12
+ rl.question(`${question} ${hint} `, (answer) => {
13
+ rl.close();
14
+ const normalizedAnswer = answer.trim().toLowerCase();
15
+ if (normalizedAnswer === '') {
16
+ resolve(defaultValue);
17
+ }
18
+ else if (normalizedAnswer === 'y' || normalizedAnswer === 'yes') {
19
+ resolve(true);
20
+ }
21
+ else {
22
+ resolve(false);
23
+ }
24
+ });
25
+ });
26
+ }
27
+ /**
28
+ * gh CLI가 설치되어 있고 인증되어 있는지 확인
29
+ */
30
+ export async function isGhCliAvailable() {
31
+ const { execSync } = await import('child_process');
32
+ try {
33
+ execSync('gh auth status', { stdio: 'ignore' });
34
+ return true;
35
+ }
36
+ catch {
37
+ return false;
38
+ }
39
+ }
40
+ /**
41
+ * 원격 저장소가 설정되어 있는지 확인
42
+ */
43
+ export async function hasRemoteRepository() {
44
+ const { execSync } = await import('child_process');
45
+ try {
46
+ const result = execSync('git remote -v', { encoding: 'utf-8' });
47
+ return result.includes('origin');
48
+ }
49
+ catch {
50
+ return false;
51
+ }
52
+ }
53
+ /**
54
+ * 사용자에게 텍스트 입력을 받음
55
+ */
56
+ export async function askText(question, defaultValue = '') {
57
+ const rl = readline.createInterface({
58
+ input: process.stdin,
59
+ output: process.stdout,
60
+ });
61
+ const hint = defaultValue ? ` [${defaultValue}]` : '';
62
+ return new Promise((resolve) => {
63
+ rl.question(`${question}${hint}: `, (answer) => {
64
+ rl.close();
65
+ const trimmed = answer.trim();
66
+ resolve(trimmed || defaultValue);
67
+ });
68
+ });
69
+ }
70
+ /**
71
+ * 사용자에게 선택지를 제시하고 번호로 선택을 받음
72
+ */
73
+ export async function askChoice(question, choices, defaultIndex = 0) {
74
+ const rl = readline.createInterface({
75
+ input: process.stdin,
76
+ output: process.stdout,
77
+ });
78
+ console.log(question);
79
+ choices.forEach((choice, index) => {
80
+ const marker = index === defaultIndex ? '>' : ' ';
81
+ console.log(` ${marker} ${index + 1}. ${choice.label}`);
82
+ });
83
+ return new Promise((resolve) => {
84
+ rl.question(`선택 [${defaultIndex + 1}]: `, (answer) => {
85
+ rl.close();
86
+ const trimmed = answer.trim();
87
+ if (trimmed === '') {
88
+ resolve(choices[defaultIndex].value);
89
+ return;
90
+ }
91
+ const num = parseInt(trimmed, 10);
92
+ if (num >= 1 && num <= choices.length) {
93
+ resolve(choices[num - 1].value);
94
+ }
95
+ else {
96
+ resolve(choices[defaultIndex].value);
97
+ }
98
+ });
99
+ });
100
+ }
101
+ //# sourceMappingURL=prompt-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-utils.js","sourceRoot":"","sources":["../../src/utils/prompt-utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleighmaster/bmad",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "description": "BMad6GitHub CLI - BMAD + GitHub Integration installer",
5
5
  "type": "module",
6
6
  "bin": {