@braingrid/cli 0.1.0 → 0.1.2

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 (118) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +26 -24
  3. package/dist/cli.js +37 -17
  4. package/dist/cli.js.map +1 -1
  5. package/dist/handlers/agent.handlers.d.ts +12 -0
  6. package/dist/handlers/agent.handlers.d.ts.map +1 -0
  7. package/dist/handlers/agent.handlers.js +130 -0
  8. package/dist/handlers/agent.handlers.js.map +1 -0
  9. package/dist/handlers/index.d.ts +1 -0
  10. package/dist/handlers/index.d.ts.map +1 -1
  11. package/dist/handlers/index.js +1 -0
  12. package/dist/handlers/index.js.map +1 -1
  13. package/dist/handlers/init.handlers.d.ts +0 -1
  14. package/dist/handlers/init.handlers.d.ts.map +1 -1
  15. package/dist/handlers/init.handlers.js +481 -43
  16. package/dist/handlers/init.handlers.js.map +1 -1
  17. package/dist/handlers/project.handlers.d.ts +2 -3
  18. package/dist/handlers/project.handlers.d.ts.map +1 -1
  19. package/dist/handlers/project.handlers.js +80 -71
  20. package/dist/handlers/project.handlers.js.map +1 -1
  21. package/dist/handlers/requirement.handlers.d.ts.map +1 -1
  22. package/dist/handlers/requirement.handlers.js +21 -20
  23. package/dist/handlers/requirement.handlers.js.map +1 -1
  24. package/dist/handlers/status.handlers.d.ts.map +1 -1
  25. package/dist/handlers/status.handlers.js +11 -8
  26. package/dist/handlers/status.handlers.js.map +1 -1
  27. package/dist/handlers/task.handlers.d.ts.map +1 -1
  28. package/dist/handlers/task.handlers.js +45 -26
  29. package/dist/handlers/task.handlers.js.map +1 -1
  30. package/dist/rpc/server.d.ts +2 -0
  31. package/dist/rpc/server.d.ts.map +1 -1
  32. package/dist/rpc/server.js +28 -11
  33. package/dist/rpc/server.js.map +1 -1
  34. package/dist/services/agent-service.d.ts +29 -0
  35. package/dist/services/agent-service.d.ts.map +1 -0
  36. package/dist/services/agent-service.js +273 -0
  37. package/dist/services/agent-service.js.map +1 -0
  38. package/dist/services/credential-store.d.ts.map +1 -1
  39. package/dist/services/credential-store.js +1 -0
  40. package/dist/services/credential-store.js.map +1 -1
  41. package/dist/services/internal/github-service.d.ts +67 -0
  42. package/dist/services/internal/github-service.d.ts.map +1 -0
  43. package/dist/services/internal/github-service.js +81 -0
  44. package/dist/services/internal/github-service.js.map +1 -0
  45. package/dist/services/internal/repository-service.d.ts +79 -0
  46. package/dist/services/internal/repository-service.d.ts.map +1 -0
  47. package/dist/services/internal/repository-service.js +88 -0
  48. package/dist/services/internal/repository-service.js.map +1 -0
  49. package/dist/types/github.d.ts +105 -0
  50. package/dist/types/github.d.ts.map +1 -0
  51. package/dist/types/github.js +6 -0
  52. package/dist/types/github.js.map +1 -0
  53. package/dist/types/project.d.ts +1 -0
  54. package/dist/types/project.d.ts.map +1 -1
  55. package/dist/utils/cli-tools.d.ts.map +1 -1
  56. package/dist/utils/cli-tools.js +9 -1
  57. package/dist/utils/cli-tools.js.map +1 -1
  58. package/dist/utils/config.d.ts +1 -0
  59. package/dist/utils/config.d.ts.map +1 -1
  60. package/dist/utils/config.js +18 -0
  61. package/dist/utils/config.js.map +1 -1
  62. package/dist/utils/gh-installer.d.ts +31 -0
  63. package/dist/utils/gh-installer.d.ts.map +1 -0
  64. package/dist/utils/gh-installer.js +296 -0
  65. package/dist/utils/gh-installer.js.map +1 -0
  66. package/dist/utils/git-installer.d.ts +31 -0
  67. package/dist/utils/git-installer.d.ts.map +1 -0
  68. package/dist/utils/git-installer.js +290 -0
  69. package/dist/utils/git-installer.js.map +1 -0
  70. package/dist/utils/git.d.ts +5 -0
  71. package/dist/utils/git.d.ts.map +1 -1
  72. package/dist/utils/git.js +13 -0
  73. package/dist/utils/git.js.map +1 -1
  74. package/dist/utils/github-repo.d.ts +43 -0
  75. package/dist/utils/github-repo.d.ts.map +1 -0
  76. package/dist/utils/github-repo.js +113 -0
  77. package/dist/utils/github-repo.js.map +1 -0
  78. package/dist/utils/id-normalization.d.ts +26 -0
  79. package/dist/utils/id-normalization.d.ts.map +1 -0
  80. package/dist/utils/id-normalization.js +45 -0
  81. package/dist/utils/id-normalization.js.map +1 -0
  82. package/dist/utils/local-store.d.ts +7 -7
  83. package/dist/utils/local-store.d.ts.map +1 -1
  84. package/dist/utils/local-store.js +29 -17
  85. package/dist/utils/local-store.js.map +1 -1
  86. package/dist/utils/package-manager-installer.d.ts +36 -0
  87. package/dist/utils/package-manager-installer.d.ts.map +1 -0
  88. package/dist/utils/package-manager-installer.js +106 -0
  89. package/dist/utils/package-manager-installer.js.map +1 -0
  90. package/dist/utils/projects.d.ts +23 -0
  91. package/dist/utils/projects.d.ts.map +1 -0
  92. package/dist/utils/projects.js +36 -0
  93. package/dist/utils/projects.js.map +1 -0
  94. package/dist/utils/repository-access.d.ts +89 -0
  95. package/dist/utils/repository-access.d.ts.map +1 -0
  96. package/dist/utils/repository-access.js +132 -0
  97. package/dist/utils/repository-access.js.map +1 -0
  98. package/dist/utils/requirements.d.ts +15 -0
  99. package/dist/utils/requirements.d.ts.map +1 -1
  100. package/dist/utils/requirements.js +32 -7
  101. package/dist/utils/requirements.js.map +1 -1
  102. package/dist/utils/spinner.d.ts +47 -0
  103. package/dist/utils/spinner.d.ts.map +1 -0
  104. package/dist/utils/spinner.js +101 -0
  105. package/dist/utils/spinner.js.map +1 -0
  106. package/dist/utils/tasks.d.ts +12 -0
  107. package/dist/utils/tasks.d.ts.map +1 -1
  108. package/dist/utils/tasks.js +31 -6
  109. package/dist/utils/tasks.js.map +1 -1
  110. package/dist/utils/workspace-manager.d.ts +65 -0
  111. package/dist/utils/workspace-manager.d.ts.map +1 -0
  112. package/dist/utils/workspace-manager.js +98 -0
  113. package/dist/utils/workspace-manager.js.map +1 -0
  114. package/package.json +4 -1
  115. package/dist/services/context-manager.d.ts +0 -170
  116. package/dist/services/context-manager.d.ts.map +0 -1
  117. package/dist/services/context-manager.js +0 -261
  118. package/dist/services/context-manager.js.map +0 -1
@@ -0,0 +1,31 @@
1
+ /**
2
+ * GitHub CLI Installer Utility
3
+ *
4
+ * Automatically installs GitHub CLI on the user's system using platform-specific methods:
5
+ * - macOS: Homebrew (if installed) or Webi (automated installer)
6
+ * - Windows: winget
7
+ * - Linux: apt/dnf/pacman (auto-detected)
8
+ */
9
+ export interface GhInstallResult {
10
+ success: boolean;
11
+ message: string;
12
+ version?: string;
13
+ }
14
+ /**
15
+ * Check if GitHub CLI is installed
16
+ */
17
+ export declare function isGhInstalled(): Promise<boolean>;
18
+ /**
19
+ * Get GitHub CLI version if installed
20
+ */
21
+ export declare function getGhVersion(): Promise<string | null>;
22
+ /**
23
+ * Install GitHub CLI on the current platform
24
+ * Auto-detects platform and uses appropriate installation method
25
+ */
26
+ export declare function installGh(): Promise<GhInstallResult>;
27
+ /**
28
+ * Get manual installation instructions for the current platform
29
+ */
30
+ export declare function getGhManualInstallInstructions(): string;
31
+ //# sourceMappingURL=gh-installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gh-installer.d.ts","sourceRoot":"","sources":["../../src/utils/gh-installer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAEtD;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAK3D;AAgPD;;;GAGG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC,CAsB1D;AAED;;GAEG;AACH,wBAAgB,8BAA8B,IAAI,MAAM,CA8CvD"}
@@ -0,0 +1,296 @@
1
+ /**
2
+ * GitHub CLI Installer Utility
3
+ *
4
+ * Automatically installs GitHub CLI on the user's system using platform-specific methods:
5
+ * - macOS: Homebrew (if installed) or Webi (automated installer)
6
+ * - Windows: winget
7
+ * - Linux: apt/dnf/pacman (auto-detected)
8
+ */
9
+ import { exec } from 'child_process';
10
+ import { promisify } from 'util';
11
+ import chalk from 'chalk';
12
+ import { isCliInstalled, getCliVersion } from './cli-tools.js';
13
+ import { isHomebrewInstalled, isWingetAvailable, detectLinuxPackageManager, } from './package-manager-installer.js';
14
+ const execAsync = promisify(exec);
15
+ /**
16
+ * Check if GitHub CLI is installed
17
+ */
18
+ export async function isGhInstalled() {
19
+ return isCliInstalled('gh');
20
+ }
21
+ /**
22
+ * Get GitHub CLI version if installed
23
+ */
24
+ export async function getGhVersion() {
25
+ return getCliVersion('gh', '--version', output => {
26
+ const match = output.match(/gh version ([\d.]+)/);
27
+ return match ? match[1] : null;
28
+ });
29
+ }
30
+ /**
31
+ * Install GitHub CLI on macOS via Homebrew (when Homebrew is already installed)
32
+ */
33
+ async function installViaHomebrew() {
34
+ console.log(chalk.blue('📦 Installing GitHub CLI via Homebrew...'));
35
+ try {
36
+ await execAsync('brew install gh', {
37
+ timeout: 300000, // 5 minutes
38
+ });
39
+ // Verify installation
40
+ const version = await getGhVersion();
41
+ if (!version) {
42
+ return {
43
+ success: false,
44
+ message: chalk.red('❌ GitHub CLI installation completed but gh command not found'),
45
+ };
46
+ }
47
+ return {
48
+ success: true,
49
+ message: chalk.green(`✅ GitHub CLI installed successfully (version ${version})!`),
50
+ version,
51
+ };
52
+ }
53
+ catch (error) {
54
+ const errorMsg = error instanceof Error ? error.message : String(error);
55
+ return {
56
+ success: false,
57
+ message: chalk.red('❌ Failed to install GitHub CLI via Homebrew\n\n') +
58
+ chalk.dim('Error: ') +
59
+ errorMsg +
60
+ '\n\n' +
61
+ chalk.dim('Please install GitHub CLI manually from: ') +
62
+ chalk.cyan('https://cli.github.com/'),
63
+ };
64
+ }
65
+ }
66
+ /**
67
+ * Install GitHub CLI on macOS via Webi (automated installer, no Homebrew needed)
68
+ */
69
+ async function installViaWebi() {
70
+ console.log(chalk.blue('📦 Installing GitHub CLI via Webi...'));
71
+ console.log(chalk.dim('This will install gh to ~/.local/bin/\n'));
72
+ try {
73
+ await execAsync('curl -sS https://webi.sh/gh | sh', {
74
+ timeout: 300000, // 5 minutes
75
+ });
76
+ // Verify installation
77
+ const version = await getGhVersion();
78
+ if (!version) {
79
+ // Installation succeeded but PATH not updated yet
80
+ return {
81
+ success: true,
82
+ message: chalk.green('✅ GitHub CLI installed successfully!\n') +
83
+ chalk.dim('Note: You may need to restart your terminal for the gh command to be available.'),
84
+ };
85
+ }
86
+ return {
87
+ success: true,
88
+ message: chalk.green(`✅ GitHub CLI installed successfully (version ${version})!`),
89
+ version,
90
+ };
91
+ }
92
+ catch (error) {
93
+ const errorMsg = error instanceof Error ? error.message : String(error);
94
+ return {
95
+ success: false,
96
+ message: chalk.red('❌ Failed to install GitHub CLI via Webi\n\n') +
97
+ chalk.dim('Error: ') +
98
+ errorMsg +
99
+ '\n\n' +
100
+ chalk.dim('Please install GitHub CLI manually from: ') +
101
+ chalk.cyan('https://cli.github.com/'),
102
+ };
103
+ }
104
+ }
105
+ /**
106
+ * Install GitHub CLI on macOS using best available method
107
+ * Strategy: Use Homebrew if installed, otherwise use Webi
108
+ */
109
+ async function installGhMacOS() {
110
+ // Check if Homebrew is already installed
111
+ const hasHomebrew = await isHomebrewInstalled();
112
+ if (hasHomebrew) {
113
+ // User already has Homebrew - use it (fast and familiar)
114
+ return installViaHomebrew();
115
+ }
116
+ // No Homebrew - use Webi (automated installer, no package manager needed)
117
+ return installViaWebi();
118
+ }
119
+ /**
120
+ * Install GitHub CLI on Windows using winget
121
+ */
122
+ async function installGhWindows() {
123
+ // Check if winget is available
124
+ const hasWinget = await isWingetAvailable();
125
+ if (!hasWinget) {
126
+ return {
127
+ success: false,
128
+ message: chalk.red('❌ winget is not available on this system\n\n') +
129
+ chalk.dim('winget is included in Windows 10 (version 1809+) and Windows 11.\n') +
130
+ chalk.dim('Please install GitHub CLI manually from: ') +
131
+ chalk.cyan('https://cli.github.com/'),
132
+ };
133
+ }
134
+ console.log(chalk.blue('📦 Installing GitHub CLI via winget...'));
135
+ try {
136
+ await execAsync('winget install --id GitHub.cli --silent', {
137
+ timeout: 300000, // 5 minutes
138
+ });
139
+ // Verify installation
140
+ const version = await getGhVersion();
141
+ if (!version) {
142
+ return {
143
+ success: false,
144
+ message: chalk.red('❌ GitHub CLI installation completed but gh command not found'),
145
+ };
146
+ }
147
+ return {
148
+ success: true,
149
+ message: chalk.green(`✅ GitHub CLI installed successfully (version ${version})!`),
150
+ version,
151
+ };
152
+ }
153
+ catch (error) {
154
+ const errorMsg = error instanceof Error ? error.message : String(error);
155
+ return {
156
+ success: false,
157
+ message: chalk.red('❌ Failed to install GitHub CLI via winget\n\n') +
158
+ chalk.dim('Error: ') +
159
+ errorMsg +
160
+ '\n\n' +
161
+ chalk.dim('Please install GitHub CLI manually from: ') +
162
+ chalk.cyan('https://cli.github.com/'),
163
+ };
164
+ }
165
+ }
166
+ /**
167
+ * Install GitHub CLI on Linux using detected package manager
168
+ */
169
+ async function installGhLinux() {
170
+ const packageManager = await detectLinuxPackageManager();
171
+ if (!packageManager) {
172
+ return {
173
+ success: false,
174
+ message: chalk.red('❌ Could not detect a supported package manager\n\n') +
175
+ chalk.dim('Supported package managers: apt, dnf, yum, pacman\n') +
176
+ chalk.dim('Please install GitHub CLI manually from: ') +
177
+ chalk.cyan('https://cli.github.com/'),
178
+ };
179
+ }
180
+ console.log(chalk.blue(`📦 Installing GitHub CLI via ${packageManager.name}...`));
181
+ console.log(chalk.dim('This may prompt for your sudo password.\n'));
182
+ try {
183
+ let installCommand;
184
+ switch (packageManager.name) {
185
+ case 'apt':
186
+ // Add GitHub CLI repository and install
187
+ installCommand =
188
+ 'curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg && ' +
189
+ 'sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg && ' +
190
+ 'echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null && ' +
191
+ 'sudo apt update && sudo apt install gh -y';
192
+ break;
193
+ case 'dnf':
194
+ installCommand = 'sudo dnf install gh -y';
195
+ break;
196
+ case 'yum':
197
+ installCommand = 'sudo yum install gh -y';
198
+ break;
199
+ case 'pacman':
200
+ installCommand = 'sudo pacman -S --noconfirm github-cli';
201
+ break;
202
+ default:
203
+ return {
204
+ success: false,
205
+ message: chalk.red(`❌ Unsupported package manager: ${packageManager.name}`),
206
+ };
207
+ }
208
+ await execAsync(installCommand, {
209
+ timeout: 300000, // 5 minutes
210
+ });
211
+ // Verify installation
212
+ const version = await getGhVersion();
213
+ if (!version) {
214
+ return {
215
+ success: false,
216
+ message: chalk.red('❌ GitHub CLI installation completed but gh command not found'),
217
+ };
218
+ }
219
+ return {
220
+ success: true,
221
+ message: chalk.green(`✅ GitHub CLI installed successfully (version ${version})!`),
222
+ version,
223
+ };
224
+ }
225
+ catch (error) {
226
+ const errorMsg = error instanceof Error ? error.message : String(error);
227
+ return {
228
+ success: false,
229
+ message: chalk.red('❌ Failed to install GitHub CLI\n\n') +
230
+ chalk.dim('Error: ') +
231
+ errorMsg +
232
+ '\n\n' +
233
+ chalk.dim('Please install GitHub CLI manually from: ') +
234
+ chalk.cyan('https://cli.github.com/'),
235
+ };
236
+ }
237
+ }
238
+ /**
239
+ * Install GitHub CLI on the current platform
240
+ * Auto-detects platform and uses appropriate installation method
241
+ */
242
+ export async function installGh() {
243
+ const platform = process.platform;
244
+ switch (platform) {
245
+ case 'darwin':
246
+ return installGhMacOS();
247
+ case 'win32':
248
+ return installGhWindows();
249
+ case 'linux':
250
+ return installGhLinux();
251
+ default:
252
+ return {
253
+ success: false,
254
+ message: chalk.red(`❌ Unsupported platform: ${platform}\n\n`) +
255
+ chalk.dim('Please install GitHub CLI manually from: ') +
256
+ chalk.cyan('https://cli.github.com/'),
257
+ };
258
+ }
259
+ }
260
+ /**
261
+ * Get manual installation instructions for the current platform
262
+ */
263
+ export function getGhManualInstallInstructions() {
264
+ const platform = process.platform;
265
+ switch (platform) {
266
+ case 'darwin':
267
+ return (chalk.yellow('📖 Manual GitHub CLI Installation (macOS)\n\n') +
268
+ chalk.dim('Option 1 - Webi (recommended, no Homebrew needed):\n') +
269
+ chalk.cyan(' curl -sS https://webi.sh/gh | sh\n\n') +
270
+ chalk.dim('Option 2 - Homebrew:\n') +
271
+ chalk.cyan(' brew install gh\n\n') +
272
+ chalk.dim('Option 3 - Direct download:\n') +
273
+ chalk.cyan(' Download from: https://cli.github.com/'));
274
+ case 'win32':
275
+ return (chalk.yellow('📖 Manual GitHub CLI Installation (Windows)\n\n') +
276
+ chalk.dim('Option 1 - winget (Windows 10+):\n') +
277
+ chalk.cyan(' winget install --id GitHub.cli\n\n') +
278
+ chalk.dim('Option 2 - Direct download:\n') +
279
+ chalk.cyan(' Download from: https://cli.github.com/'));
280
+ case 'linux':
281
+ return (chalk.yellow('📖 Manual GitHub CLI Installation (Linux)\n\n') +
282
+ chalk.dim('Debian/Ubuntu:\n') +
283
+ chalk.cyan(' See instructions at: https://github.com/cli/cli/blob/trunk/docs/install_linux.md#debian-ubuntu-linux-raspberry-pi-os-apt\n\n') +
284
+ chalk.dim('Fedora/RHEL:\n') +
285
+ chalk.cyan(' sudo dnf install gh\n\n') +
286
+ chalk.dim('Arch Linux:\n') +
287
+ chalk.cyan(' sudo pacman -S github-cli\n\n') +
288
+ chalk.dim('Or download from: ') +
289
+ chalk.cyan('https://cli.github.com/'));
290
+ default:
291
+ return (chalk.yellow('📖 Manual GitHub CLI Installation\n\n') +
292
+ chalk.dim('Download from: ') +
293
+ chalk.cyan('https://cli.github.com/'));
294
+ }
295
+ }
296
+ //# sourceMappingURL=gh-installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gh-installer.js","sourceRoot":"","sources":["../../src/utils/gh-installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Git Installer Utility
3
+ *
4
+ * Automatically installs Git on the user's system using platform-specific package managers:
5
+ * - macOS: Homebrew (if installed) or Xcode Command Line Tools
6
+ * - Windows: winget
7
+ * - Linux: apt/dnf/pacman (auto-detected)
8
+ */
9
+ export interface GitInstallResult {
10
+ success: boolean;
11
+ message: string;
12
+ version?: string;
13
+ }
14
+ /**
15
+ * Check if Git is installed
16
+ */
17
+ export declare function isGitInstalled(): Promise<boolean>;
18
+ /**
19
+ * Get Git version if installed
20
+ */
21
+ export declare function getGitVersion(): Promise<string | null>;
22
+ /**
23
+ * Install Git on the current platform
24
+ * Auto-detects platform and uses appropriate package manager
25
+ */
26
+ export declare function installGit(): Promise<GitInstallResult>;
27
+ /**
28
+ * Get manual installation instructions for the current platform
29
+ */
30
+ export declare function getManualInstallInstructions(): string;
31
+ //# sourceMappingURL=git-installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-installer.d.ts","sourceRoot":"","sources":["../../src/utils/git-installer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAEvD;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAK5D;AAsOD;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAsB5D;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,CA+CrD"}
@@ -0,0 +1,290 @@
1
+ /**
2
+ * Git Installer Utility
3
+ *
4
+ * Automatically installs Git on the user's system using platform-specific package managers:
5
+ * - macOS: Homebrew (if installed) or Xcode Command Line Tools
6
+ * - Windows: winget
7
+ * - Linux: apt/dnf/pacman (auto-detected)
8
+ */
9
+ import { exec } from 'child_process';
10
+ import { promisify } from 'util';
11
+ import chalk from 'chalk';
12
+ import { isCliInstalled, getCliVersion } from './cli-tools.js';
13
+ import { isHomebrewInstalled, isWingetAvailable, detectLinuxPackageManager, } from './package-manager-installer.js';
14
+ const execAsync = promisify(exec);
15
+ /**
16
+ * Check if Git is installed
17
+ */
18
+ export async function isGitInstalled() {
19
+ return isCliInstalled('git');
20
+ }
21
+ /**
22
+ * Get Git version if installed
23
+ */
24
+ export async function getGitVersion() {
25
+ return getCliVersion('git', '--version', output => {
26
+ const match = output.match(/git version ([\d.]+)/);
27
+ return match ? match[1] : null;
28
+ });
29
+ }
30
+ /**
31
+ * Install Git on macOS via Homebrew (when Homebrew is already installed)
32
+ */
33
+ async function installViaHomebrew() {
34
+ console.log(chalk.blue('📦 Installing Git via Homebrew...'));
35
+ try {
36
+ await execAsync('brew install git', {
37
+ timeout: 300000, // 5 minutes
38
+ });
39
+ // Verify installation
40
+ const version = await getGitVersion();
41
+ if (!version) {
42
+ return {
43
+ success: false,
44
+ message: chalk.red('❌ Git installation completed but git command not found'),
45
+ };
46
+ }
47
+ return {
48
+ success: true,
49
+ message: chalk.green(`✅ Git installed successfully (version ${version})!`),
50
+ version,
51
+ };
52
+ }
53
+ catch (error) {
54
+ const errorMsg = error instanceof Error ? error.message : String(error);
55
+ return {
56
+ success: false,
57
+ message: chalk.red('❌ Failed to install Git via Homebrew\n\n') +
58
+ chalk.dim('Error: ') +
59
+ errorMsg +
60
+ '\n\n' +
61
+ chalk.dim('Please install Git manually from: ') +
62
+ chalk.cyan('https://git-scm.com/download/mac'),
63
+ };
64
+ }
65
+ }
66
+ /**
67
+ * Install Git on macOS via Xcode Command Line Tools
68
+ */
69
+ async function installViaXcodeSelect() {
70
+ console.log(chalk.blue('📦 Installing Git via Xcode Command Line Tools...'));
71
+ console.log(chalk.dim('A system dialog will appear - click "Install" to continue.\n'));
72
+ try {
73
+ await execAsync('xcode-select --install', {
74
+ timeout: 600000, // 10 minutes (user interaction required)
75
+ });
76
+ // Verify installation
77
+ const version = await getGitVersion();
78
+ if (!version) {
79
+ return {
80
+ success: false,
81
+ message: chalk.red('❌ Git installation completed but git command not found'),
82
+ };
83
+ }
84
+ return {
85
+ success: true,
86
+ message: chalk.green(`✅ Git installed successfully (version ${version})!`),
87
+ version,
88
+ };
89
+ }
90
+ catch (error) {
91
+ const errorMsg = error instanceof Error ? error.message : String(error);
92
+ return {
93
+ success: false,
94
+ message: chalk.red('❌ Failed to install Git via Xcode Command Line Tools\n\n') +
95
+ chalk.dim('Error: ') +
96
+ errorMsg +
97
+ '\n\n' +
98
+ chalk.dim('Please install Git manually from: ') +
99
+ chalk.cyan('https://git-scm.com/download/mac'),
100
+ };
101
+ }
102
+ }
103
+ /**
104
+ * Install Git on macOS using best available method
105
+ * Strategy: Use Homebrew if installed, otherwise use xcode-select
106
+ */
107
+ async function installGitMacOS() {
108
+ // Check if Homebrew is already installed
109
+ const hasHomebrew = await isHomebrewInstalled();
110
+ if (hasHomebrew) {
111
+ // User already has Homebrew - use it (fast and familiar)
112
+ return installViaHomebrew();
113
+ }
114
+ // No Homebrew - use Xcode Command Line Tools (no need to install Homebrew)
115
+ return installViaXcodeSelect();
116
+ }
117
+ /**
118
+ * Install Git on Windows using winget
119
+ */
120
+ async function installGitWindows() {
121
+ // Check if winget is available
122
+ const hasWinget = await isWingetAvailable();
123
+ if (!hasWinget) {
124
+ return {
125
+ success: false,
126
+ message: chalk.red('❌ winget is not available on this system\n\n') +
127
+ chalk.dim('winget is included in Windows 10 (version 1809+) and Windows 11.\n') +
128
+ chalk.dim('Please install Git manually from: ') +
129
+ chalk.cyan('https://git-scm.com/download/win'),
130
+ };
131
+ }
132
+ console.log(chalk.blue('📦 Installing Git via winget...'));
133
+ try {
134
+ await execAsync('winget install --id Git.Git -e --source winget --silent', {
135
+ timeout: 300000, // 5 minutes
136
+ });
137
+ // Verify installation
138
+ const version = await getGitVersion();
139
+ if (!version) {
140
+ return {
141
+ success: false,
142
+ message: chalk.red('❌ Git installation completed but git command not found'),
143
+ };
144
+ }
145
+ return {
146
+ success: true,
147
+ message: chalk.green(`✅ Git installed successfully (version ${version})!`),
148
+ version,
149
+ };
150
+ }
151
+ catch (error) {
152
+ const errorMsg = error instanceof Error ? error.message : String(error);
153
+ return {
154
+ success: false,
155
+ message: chalk.red('❌ Failed to install Git via winget\n\n') +
156
+ chalk.dim('Error: ') +
157
+ errorMsg +
158
+ '\n\n' +
159
+ chalk.dim('Please install Git manually from: ') +
160
+ chalk.cyan('https://git-scm.com/download/win'),
161
+ };
162
+ }
163
+ }
164
+ /**
165
+ * Install Git on Linux using detected package manager
166
+ */
167
+ async function installGitLinux() {
168
+ const packageManager = await detectLinuxPackageManager();
169
+ if (!packageManager) {
170
+ return {
171
+ success: false,
172
+ message: chalk.red('❌ Could not detect a supported package manager\n\n') +
173
+ chalk.dim('Supported package managers: apt, dnf, yum, pacman\n') +
174
+ chalk.dim('Please install Git manually from: ') +
175
+ chalk.cyan('https://git-scm.com/download/linux'),
176
+ };
177
+ }
178
+ console.log(chalk.blue(`📦 Installing Git via ${packageManager.name}...`));
179
+ console.log(chalk.dim('This may prompt for your sudo password.\n'));
180
+ try {
181
+ let installCommand;
182
+ switch (packageManager.name) {
183
+ case 'apt':
184
+ installCommand = 'sudo apt-get update && sudo apt-get install -y git';
185
+ break;
186
+ case 'dnf':
187
+ installCommand = 'sudo dnf install -y git';
188
+ break;
189
+ case 'yum':
190
+ installCommand = 'sudo yum install -y git';
191
+ break;
192
+ case 'pacman':
193
+ installCommand = 'sudo pacman -S --noconfirm git';
194
+ break;
195
+ default:
196
+ return {
197
+ success: false,
198
+ message: chalk.red(`❌ Unsupported package manager: ${packageManager.name}`),
199
+ };
200
+ }
201
+ await execAsync(installCommand, {
202
+ timeout: 300000, // 5 minutes
203
+ });
204
+ // Verify installation
205
+ const version = await getGitVersion();
206
+ if (!version) {
207
+ return {
208
+ success: false,
209
+ message: chalk.red('❌ Git installation completed but git command not found'),
210
+ };
211
+ }
212
+ return {
213
+ success: true,
214
+ message: chalk.green(`✅ Git installed successfully (version ${version})!`),
215
+ version,
216
+ };
217
+ }
218
+ catch (error) {
219
+ const errorMsg = error instanceof Error ? error.message : String(error);
220
+ return {
221
+ success: false,
222
+ message: chalk.red('❌ Failed to install Git\n\n') +
223
+ chalk.dim('Error: ') +
224
+ errorMsg +
225
+ '\n\n' +
226
+ chalk.dim('Please install Git manually from: ') +
227
+ chalk.cyan('https://git-scm.com/download/linux'),
228
+ };
229
+ }
230
+ }
231
+ /**
232
+ * Install Git on the current platform
233
+ * Auto-detects platform and uses appropriate package manager
234
+ */
235
+ export async function installGit() {
236
+ const platform = process.platform;
237
+ switch (platform) {
238
+ case 'darwin':
239
+ return installGitMacOS();
240
+ case 'win32':
241
+ return installGitWindows();
242
+ case 'linux':
243
+ return installGitLinux();
244
+ default:
245
+ return {
246
+ success: false,
247
+ message: chalk.red(`❌ Unsupported platform: ${platform}\n\n`) +
248
+ chalk.dim('Please install Git manually from: ') +
249
+ chalk.cyan('https://git-scm.com/downloads'),
250
+ };
251
+ }
252
+ }
253
+ /**
254
+ * Get manual installation instructions for the current platform
255
+ */
256
+ export function getManualInstallInstructions() {
257
+ const platform = process.platform;
258
+ switch (platform) {
259
+ case 'darwin':
260
+ return (chalk.yellow('📖 Manual Git Installation (macOS)\n\n') +
261
+ chalk.dim('Option 1 - Xcode Command Line Tools (recommended):\n') +
262
+ chalk.cyan(' xcode-select --install\n\n') +
263
+ chalk.dim('Option 2 - Homebrew (if you use package managers):\n') +
264
+ chalk.cyan(' /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"\n') +
265
+ chalk.cyan(' brew install git\n\n') +
266
+ chalk.dim('Option 3 - Official installer:\n') +
267
+ chalk.cyan(' Download from: https://git-scm.com/download/mac'));
268
+ case 'win32':
269
+ return (chalk.yellow('📖 Manual Git Installation (Windows)\n\n') +
270
+ chalk.dim('Option 1 - winget (Windows 10+):\n') +
271
+ chalk.cyan(' winget install --id Git.Git -e --source winget\n\n') +
272
+ chalk.dim('Option 2 - Official installer:\n') +
273
+ chalk.cyan(' Download from: https://git-scm.com/download/win'));
274
+ case 'linux':
275
+ return (chalk.yellow('📖 Manual Git Installation (Linux)\n\n') +
276
+ chalk.dim('Debian/Ubuntu:\n') +
277
+ chalk.cyan(' sudo apt-get update && sudo apt-get install -y git\n\n') +
278
+ chalk.dim('Fedora/RHEL:\n') +
279
+ chalk.cyan(' sudo dnf install -y git\n\n') +
280
+ chalk.dim('Arch Linux:\n') +
281
+ chalk.cyan(' sudo pacman -S git\n\n') +
282
+ chalk.dim('Or download from: ') +
283
+ chalk.cyan('https://git-scm.com/download/linux'));
284
+ default:
285
+ return (chalk.yellow('📖 Manual Git Installation\n\n') +
286
+ chalk.dim('Download from: ') +
287
+ chalk.cyan('https://git-scm.com/downloads'));
288
+ }
289
+ }
290
+ //# sourceMappingURL=git-installer.js.map