@braingrid/cli 0.1.1 → 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 (43) hide show
  1. package/README.md +13 -15
  2. package/dist/cli.js +1 -2
  3. package/dist/cli.js.map +1 -1
  4. package/dist/handlers/init.handlers.d.ts +0 -1
  5. package/dist/handlers/init.handlers.d.ts.map +1 -1
  6. package/dist/handlers/init.handlers.js +477 -39
  7. package/dist/handlers/init.handlers.js.map +1 -1
  8. package/dist/handlers/status.handlers.js +6 -6
  9. package/dist/handlers/status.handlers.js.map +1 -1
  10. package/dist/types/project.d.ts +1 -0
  11. package/dist/types/project.d.ts.map +1 -1
  12. package/dist/utils/cli-tools.d.ts.map +1 -1
  13. package/dist/utils/cli-tools.js +9 -0
  14. package/dist/utils/cli-tools.js.map +1 -1
  15. package/dist/utils/config.d.ts +1 -0
  16. package/dist/utils/config.d.ts.map +1 -1
  17. package/dist/utils/config.js +18 -0
  18. package/dist/utils/config.js.map +1 -1
  19. package/dist/utils/gh-installer.d.ts +31 -0
  20. package/dist/utils/gh-installer.d.ts.map +1 -0
  21. package/dist/utils/gh-installer.js +296 -0
  22. package/dist/utils/gh-installer.js.map +1 -0
  23. package/dist/utils/git-installer.d.ts +31 -0
  24. package/dist/utils/git-installer.d.ts.map +1 -0
  25. package/dist/utils/git-installer.js +290 -0
  26. package/dist/utils/git-installer.js.map +1 -0
  27. package/dist/utils/github-repo.d.ts +43 -0
  28. package/dist/utils/github-repo.d.ts.map +1 -0
  29. package/dist/utils/github-repo.js +113 -0
  30. package/dist/utils/github-repo.js.map +1 -0
  31. package/dist/utils/package-manager-installer.d.ts +36 -0
  32. package/dist/utils/package-manager-installer.d.ts.map +1 -0
  33. package/dist/utils/package-manager-installer.js +106 -0
  34. package/dist/utils/package-manager-installer.js.map +1 -0
  35. package/dist/utils/repository-access.d.ts +89 -0
  36. package/dist/utils/repository-access.d.ts.map +1 -0
  37. package/dist/utils/repository-access.js +132 -0
  38. package/dist/utils/repository-access.js.map +1 -0
  39. package/dist/utils/spinner.d.ts +47 -0
  40. package/dist/utils/spinner.d.ts.map +1 -0
  41. package/dist/utils/spinner.js +101 -0
  42. package/dist/utils/spinner.js.map +1 -0
  43. package/package.json +1 -1
@@ -3,23 +3,405 @@
3
3
  * Handles the `braingrid init` command for initializing a repository with a BrainGrid project
4
4
  */
5
5
  import chalk from 'chalk';
6
- import { confirm } from '@inquirer/prompts';
6
+ import { confirm, select, input } from '@inquirer/prompts';
7
7
  import { BraingridAuth } from '../services/auth.js';
8
8
  import { ProjectService } from '../services/project-service.js';
9
+ import { GitHubService } from '../services/internal/github-service.js';
9
10
  import { getConfig } from '../utils/config.js';
10
11
  import { getGitRepositoryInfo } from '../utils/git.js';
12
+ import { isGitInstalled, installGit, getManualInstallInstructions, } from '../utils/git-installer.js';
13
+ import { isGhInstalled, installGh } from '../utils/gh-installer.js';
11
14
  import { formatError } from '../utils/error-formatter.js';
12
15
  import { projectConfigExists, saveProjectConfig, loadProjectConfig } from '../utils/local-store.js';
16
+ import { handleLogin } from './auth.handlers.js';
17
+ import { RepositoryService } from '../services/internal/repository-service.js';
18
+ import { findInstallationForOwner, checkRepositoryAccess, getRepositoryId, } from '../utils/repository-access.js';
19
+ import { waitWithSpinner } from '../utils/spinner.js';
20
+ import { canUseGhAutomation, initGitRepo, createGitHubRepoWithGh, getCurrentDirectoryName, } from '../utils/github-repo.js';
13
21
  function getServices() {
14
22
  const config = getConfig();
15
23
  const auth = new BraingridAuth(config.apiUrl);
16
24
  const projectService = new ProjectService(config.apiUrl, auth);
17
- return { projectService, auth };
25
+ const githubService = new GitHubService(config.apiUrl, auth);
26
+ const repositoryService = new RepositoryService(config.apiUrl, auth);
27
+ return { projectService, githubService, repositoryService, auth };
28
+ }
29
+ /**
30
+ * Prompt user to add a GitHub organization installation
31
+ */
32
+ function promptToAddOrganization(owner, webUrl) {
33
+ return {
34
+ success: false,
35
+ message: chalk.yellow('⚠️ No projects found for this repository.\n\n') +
36
+ chalk.dim(`Repository: ${owner}/*\n\n`) +
37
+ chalk.dim(`You have GitHub connected, but not for the "${owner}" organization.\n\n`) +
38
+ chalk.dim('To connect ') +
39
+ chalk.cyan(owner) +
40
+ chalk.dim(':\n') +
41
+ chalk.dim(' 1. Visit: ') +
42
+ chalk.cyan(`${webUrl}/integrations`) +
43
+ chalk.dim('\n') +
44
+ chalk.dim(' 2. Click "Add GitHub Organization"\n') +
45
+ chalk.dim(` 3. Select "${owner}"\n`) +
46
+ chalk.dim(' 4. Run ') +
47
+ chalk.cyan('braingrid init') +
48
+ chalk.dim(' again'),
49
+ };
50
+ }
51
+ /**
52
+ * Prompt user to create a project with repository linking
53
+ */
54
+ async function promptToCreateProject(gitInfo, projectService, repositoryService) {
55
+ const webUrl = getConfig().getWebAppUrl();
56
+ if (!gitInfo.owner || !gitInfo.name) {
57
+ return {
58
+ success: false,
59
+ message: chalk.red('❌ Repository information is incomplete'),
60
+ };
61
+ }
62
+ // Get repository ID for linking
63
+ const repositoryId = await getRepositoryId(repositoryService, gitInfo.owner, gitInfo.name);
64
+ if (!repositoryId) {
65
+ // This shouldn't happen since we checked access, but handle gracefully
66
+ return {
67
+ success: false,
68
+ message: chalk.yellow('⚠️ Repository accessible but could not retrieve details.\n\n') +
69
+ chalk.dim(`Repository: ${gitInfo.owner}/${gitInfo.name}\n\n`) +
70
+ chalk.dim('Please try again or create a project manually at: ') +
71
+ chalk.cyan(webUrl),
72
+ };
73
+ }
74
+ // Prompt user to create project
75
+ console.log(chalk.yellow('⚠️ Repository accessible but no project exists.\n\n') +
76
+ chalk.dim(`Repository: ${gitInfo.owner}/${gitInfo.name}\n`));
77
+ const shouldCreate = await confirm({
78
+ message: `Would you like to create a project for ${gitInfo.name} now?`,
79
+ default: true,
80
+ });
81
+ if (!shouldCreate) {
82
+ return {
83
+ success: false,
84
+ message: chalk.dim('\nProject creation cancelled.\n\n') +
85
+ chalk.dim('Create a project at ') +
86
+ chalk.cyan(webUrl) +
87
+ chalk.dim(' and link it to this repository, or use:\n') +
88
+ chalk.cyan(`braingrid project create --name "${gitInfo.name}" --repositories "${gitInfo.owner}/${gitInfo.name}"`),
89
+ };
90
+ }
91
+ // Create project with repository linked
92
+ try {
93
+ const project = await projectService.createProject({
94
+ name: gitInfo.name,
95
+ description: `Project for ${gitInfo.owner}/${gitInfo.name}`,
96
+ repository_id: repositoryId,
97
+ });
98
+ console.log(chalk.green(`\n✅ Created project ${project.short_id}: ${project.name}`));
99
+ console.log(chalk.green(`✅ Linked repository ${gitInfo.owner}/${gitInfo.name}\n`));
100
+ return { success: true, message: '', data: project };
101
+ }
102
+ catch (error) {
103
+ return {
104
+ success: false,
105
+ message: chalk.red(`❌ Failed to create project: ${formatError(error, 'creating project')}`),
106
+ };
107
+ }
108
+ }
109
+ /**
110
+ * Prompt user to grant repository access and poll until granted
111
+ */
112
+ async function promptToGrantRepositoryAccess(gitInfo, webUrl, repositoryService, projectService) {
113
+ if (!gitInfo.owner || !gitInfo.name) {
114
+ return {
115
+ success: false,
116
+ message: chalk.red('❌ Repository information is incomplete'),
117
+ };
118
+ }
119
+ const owner = gitInfo.owner;
120
+ const name = gitInfo.name;
121
+ console.log(chalk.yellow('⚠️ Repository found but BrainGrid needs access.\n\n') +
122
+ chalk.dim(`Repository: ${owner}/${name}\n\n`) +
123
+ chalk.dim('Please grant BrainGrid access to this repository:\n') +
124
+ chalk.dim(' 1. Visit: ') +
125
+ chalk.cyan(`${webUrl}/integrations`) +
126
+ chalk.dim('\n') +
127
+ chalk.dim(` 2. Click on your "${owner}" installation "Add/Remove" to grant BrainGrid access to your repository\n`) +
128
+ chalk.dim(` 3. Select "${name}" and save\n\n`));
129
+ // Poll for repository access (3 minutes max)
130
+ const accessGranted = await waitWithSpinner('Waiting for repository access (up to 3 minutes)', async () => await checkRepositoryAccess(repositoryService, owner, name), 3000, 60);
131
+ if (!accessGranted) {
132
+ return {
133
+ success: false,
134
+ message: chalk.yellow('\n⚠️ Repository access not detected within 3 minutes.\n\n') +
135
+ chalk.dim('Please grant access at: ') +
136
+ chalk.cyan(`${webUrl}/integrations`) +
137
+ chalk.dim(' and run ') +
138
+ chalk.cyan('braingrid init') +
139
+ chalk.dim(' again.'),
140
+ };
141
+ }
142
+ console.log(chalk.green('✅ Repository access granted!\n'));
143
+ // Now create project with the repository
144
+ return promptToCreateProject(gitInfo, projectService, repositoryService);
145
+ }
146
+ /**
147
+ * Handle the case when no project is found for a repository
148
+ * Checks GitHub installations, validates owner, checks repository access, and prompts for project creation
149
+ */
150
+ async function handleNoProjectForRepository(owner, name, gitInfo, githubService, repositoryService, projectService, config) {
151
+ // Check if user has any GitHub installations
152
+ let allInstallations;
153
+ try {
154
+ const installationsResponse = await githubService.listInstallations({ limit: 100 });
155
+ allInstallations = installationsResponse.installations;
156
+ }
157
+ catch {
158
+ // If we can't check installations, proceed with default message
159
+ allInstallations = [];
160
+ }
161
+ const webUrl = config.getWebAppUrl();
162
+ if (allInstallations.length === 0) {
163
+ // No GitHub installations - prompt to connect GitHub
164
+ return {
165
+ success: false,
166
+ message: chalk.yellow('⚠️ No projects found for this repository.\n\n') +
167
+ chalk.dim(`Repository: ${owner}/${name}\n\n`) +
168
+ chalk.dim("It looks like you haven't connected your GitHub account yet.\n") +
169
+ chalk.dim('Please connect GitHub at: ') +
170
+ chalk.cyan(`${webUrl}/integrations`) +
171
+ chalk.dim('\n\nOnce connected, create a project and link it to this repository.'),
172
+ };
173
+ }
174
+ // Has installations - check if we have the right owner
175
+ const ownerInstallation = findInstallationForOwner(owner, allInstallations);
176
+ if (!ownerInstallation) {
177
+ // User has GitHub connected but not for this owner
178
+ return promptToAddOrganization(owner, webUrl);
179
+ }
180
+ // Check if repository is accessible
181
+ const hasRepoAccess = await checkRepositoryAccess(repositoryService, owner, name);
182
+ if (!hasRepoAccess) {
183
+ // Installation exists but repo not accessible - need to grant access
184
+ return promptToGrantRepositoryAccess(gitInfo, webUrl, repositoryService, projectService);
185
+ }
186
+ // Repo accessible but no project - create one
187
+ return promptToCreateProject(gitInfo, projectService, repositoryService);
188
+ }
189
+ /**
190
+ * Show setup instructions for users without automation
191
+ */
192
+ function showSetupInstructions(scenario) {
193
+ let message = '';
194
+ if (scenario === 'no-git') {
195
+ message += chalk.dim('To initialize BrainGrid locally:\n\n');
196
+ message += chalk.dim(' 1. Initialize git:\n');
197
+ message += chalk.cyan(' git init\n\n');
198
+ }
199
+ else {
200
+ message += chalk.dim('To connect to GitHub:\n\n');
201
+ }
202
+ message += chalk.dim(' 2. Create GitHub repository:\n');
203
+ message += chalk.dim(' • Install GitHub CLI: ') + chalk.cyan('https://cli.github.com\n');
204
+ message += chalk.dim(' Then: ') + chalk.cyan('gh repo create --private --source=.\n');
205
+ message += chalk.dim(' • Or manually: ') + chalk.cyan('https://github.com/new\n\n');
206
+ if (scenario === 'no-git') {
207
+ message += chalk.dim(' 3. Run: ') + chalk.cyan('braingrid init\n\n');
208
+ }
209
+ else {
210
+ message += chalk.dim(' 3. Add remote and run init:\n');
211
+ message += chalk.cyan(' git remote add origin <url>\n');
212
+ message += chalk.cyan(' braingrid init\n\n');
213
+ }
214
+ message += chalk.bold('Or use BrainGrid without local initialization:\n\n');
215
+ message += chalk.dim(' All commands support the --project flag:\n');
216
+ message += chalk.cyan(' braingrid requirement list --project PROJ-123\n');
217
+ message += chalk.cyan(' braingrid task create --project PROJ-123 --title "Task"\n\n');
218
+ message +=
219
+ chalk.dim(' Note: Without local init, you must specify --project for each command.') + '\n';
220
+ return message;
221
+ }
222
+ /**
223
+ * Handle initialization when directory is not a git repository
224
+ */
225
+ async function handleNoGitRepository() {
226
+ const canAutomate = await canUseGhAutomation();
227
+ if (canAutomate) {
228
+ // Offer one-click setup
229
+ const shouldSetup = await confirm({
230
+ message: 'Would you like to initialize git and create a GitHub repository?',
231
+ default: true,
232
+ });
233
+ if (shouldSetup) {
234
+ // Initialize git
235
+ console.log();
236
+ const gitInitSuccess = await initGitRepo();
237
+ if (!gitInitSuccess) {
238
+ return {
239
+ success: false,
240
+ message: chalk.red('❌ Failed to initialize git repository'),
241
+ };
242
+ }
243
+ console.log(chalk.green('✅ Initialized git repository'));
244
+ // Get repository name suggestion
245
+ const dirName = getCurrentDirectoryName();
246
+ // Prompt for visibility
247
+ const isPrivate = await select({
248
+ message: 'Repository visibility:',
249
+ choices: [
250
+ { value: true, name: 'Private' },
251
+ { value: false, name: 'Public' },
252
+ ],
253
+ default: true,
254
+ });
255
+ // Prompt for repository name
256
+ const repoName = await input({
257
+ message: 'Repository name:',
258
+ default: dirName,
259
+ });
260
+ // Create GitHub repository
261
+ console.log(chalk.dim('\nCreating repository...\n'));
262
+ const repo = await createGitHubRepoWithGh(repoName, isPrivate);
263
+ if (!repo) {
264
+ return {
265
+ success: false,
266
+ message: chalk.red('❌ Failed to create GitHub repository\n\n') +
267
+ showSetupInstructions('no-git'),
268
+ };
269
+ }
270
+ console.log(chalk.green(`✅ Created repository: ${repo.url}`));
271
+ console.log(chalk.green('✅ Added remote origin\n'));
272
+ // Return success with a special flag to continue init
273
+ return {
274
+ success: true,
275
+ message: 'continue-init', // Special marker to retry init
276
+ data: { repo },
277
+ };
278
+ }
279
+ }
280
+ // Fallback to instructions
281
+ return {
282
+ success: false,
283
+ message: chalk.yellow('⚠️ This directory is not a git repository.\n\n') +
284
+ showSetupInstructions('no-git'),
285
+ };
286
+ }
287
+ /**
288
+ * Handle initialization when git repository has no remote
289
+ */
290
+ async function handleNoGitRemote() {
291
+ const canAutomate = await canUseGhAutomation();
292
+ if (canAutomate) {
293
+ // Offer to create GitHub repo
294
+ const shouldCreate = await confirm({
295
+ message: 'Would you like to create a GitHub repository now?',
296
+ default: true,
297
+ });
298
+ if (shouldCreate) {
299
+ // Get repository name suggestion
300
+ const dirName = getCurrentDirectoryName();
301
+ // Prompt for visibility
302
+ const isPrivate = await select({
303
+ message: 'Repository visibility:',
304
+ choices: [
305
+ { value: true, name: 'Private' },
306
+ { value: false, name: 'Public' },
307
+ ],
308
+ default: true,
309
+ });
310
+ // Prompt for repository name
311
+ const repoName = await input({
312
+ message: 'Repository name:',
313
+ default: dirName,
314
+ });
315
+ // Create GitHub repository
316
+ console.log(chalk.dim('\nCreating repository...\n'));
317
+ const repo = await createGitHubRepoWithGh(repoName, isPrivate);
318
+ if (!repo) {
319
+ return {
320
+ success: false,
321
+ message: chalk.red('❌ Failed to create GitHub repository\n\n') +
322
+ showSetupInstructions('no-remote'),
323
+ };
324
+ }
325
+ console.log(chalk.green(`✅ Created repository: ${repo.url}`));
326
+ console.log(chalk.green('✅ Added remote origin\n'));
327
+ // Return success with a special flag to continue init
328
+ return {
329
+ success: true,
330
+ message: 'continue-init', // Special marker to retry init
331
+ data: { repo },
332
+ };
333
+ }
334
+ }
335
+ // Fallback to instructions
336
+ return {
337
+ success: false,
338
+ message: chalk.yellow('⚠️ Git repository detected but no GitHub remote configured.\n\n') +
339
+ showSetupInstructions('no-remote'),
340
+ };
18
341
  }
19
342
  export async function handleInit(opts) {
20
343
  try {
21
344
  const config = getConfig();
22
- const { projectService, auth } = getServices();
345
+ const { projectService, githubService, repositoryService, auth } = getServices();
346
+ // Check if Git is installed (required for BrainGrid CLI)
347
+ if (!(await isGitInstalled())) {
348
+ const shouldInstall = await confirm({
349
+ message: 'Git is required but not installed. Would you like to install it now?',
350
+ default: true,
351
+ });
352
+ if (!shouldInstall) {
353
+ return {
354
+ success: false,
355
+ message: chalk.yellow('⚠️ Git installation cancelled.\n\n') + getManualInstallInstructions(),
356
+ };
357
+ }
358
+ // Install Git
359
+ console.log(); // Add spacing
360
+ const installResult = await installGit();
361
+ if (!installResult.success) {
362
+ return {
363
+ success: false,
364
+ message: installResult.message,
365
+ };
366
+ }
367
+ // Display success message
368
+ console.log(installResult.message);
369
+ console.log(); // Add spacing
370
+ // Verify Git is now available
371
+ if (!(await isGitInstalled())) {
372
+ return {
373
+ success: false,
374
+ message: chalk.red('❌ Git installation completed but git command not found\n\n') +
375
+ chalk.dim('You may need to restart your terminal or add Git to your PATH.\n') +
376
+ getManualInstallInstructions(),
377
+ };
378
+ }
379
+ }
380
+ // Check if GitHub CLI is installed (recommended but optional)
381
+ if (!(await isGhInstalled())) {
382
+ console.log(chalk.blue('\n💡 GitHub CLI is highly recommended for working with BrainGrid.'));
383
+ console.log(chalk.dim(' It enables seamless GitHub integration and repository management.\n'));
384
+ const shouldInstallGh = await confirm({
385
+ message: 'Would you like to install GitHub CLI now?',
386
+ default: true,
387
+ });
388
+ if (shouldInstallGh) {
389
+ console.log(); // Add spacing
390
+ const ghInstallResult = await installGh();
391
+ if (ghInstallResult.success) {
392
+ console.log(ghInstallResult.message);
393
+ console.log(); // Add spacing
394
+ }
395
+ else {
396
+ // Show error but don't fail - it's optional
397
+ console.log(ghInstallResult.message);
398
+ console.log(chalk.dim('You can install it manually later.\n'));
399
+ }
400
+ }
401
+ else {
402
+ console.log(chalk.dim('Skipping GitHub CLI installation.\n'));
403
+ }
404
+ }
23
405
  // Check if already initialized (unless --force)
24
406
  if ((await projectConfigExists()) && !opts.force) {
25
407
  try {
@@ -44,13 +426,44 @@ export async function handleInit(opts) {
44
426
  // Check authentication
45
427
  const isAuthenticated = await auth.isAuthenticated();
46
428
  if (!isAuthenticated) {
47
- return {
48
- success: false,
49
- message: chalk.red(' Not authenticated.\n') +
50
- chalk.dim('Please run ') +
51
- chalk.cyan('braingrid login') +
52
- chalk.dim(' first.'),
53
- };
429
+ // Prompt user to log in / sign up
430
+ const shouldLogin = await confirm({
431
+ message: 'You need to be authenticated. Would you like to log in / sign up now?',
432
+ default: true,
433
+ });
434
+ if (!shouldLogin) {
435
+ return {
436
+ success: false,
437
+ message: chalk.yellow('⚠️ Authentication required.\n') +
438
+ chalk.dim('Run ') +
439
+ chalk.cyan('braingrid login') +
440
+ chalk.dim(" when you're ready to authenticate."),
441
+ };
442
+ }
443
+ // Call login handler
444
+ console.log(); // Add spacing before login output
445
+ const loginResult = await handleLogin();
446
+ if (!loginResult.success) {
447
+ return {
448
+ success: false,
449
+ message: chalk.red('❌ Login failed.\n') +
450
+ chalk.dim('Please try running ') +
451
+ chalk.cyan('braingrid login') +
452
+ chalk.dim(' again.'),
453
+ };
454
+ }
455
+ // Verify authentication succeeded
456
+ if (!(await auth.isAuthenticated())) {
457
+ return {
458
+ success: false,
459
+ message: chalk.red('❌ Login was not completed.\n') +
460
+ chalk.dim('Please try running ') +
461
+ chalk.cyan('braingrid login') +
462
+ chalk.dim(' again.'),
463
+ };
464
+ }
465
+ // Login successful, continue with init
466
+ console.log(); // Add spacing before continuing with init
54
467
  }
55
468
  // Get session to retrieve organization_id
56
469
  const session = await auth.getStoredSession();
@@ -61,7 +474,7 @@ export async function handleInit(opts) {
61
474
  };
62
475
  }
63
476
  // Get git repository info (always needed for URL, even when using --project)
64
- const gitInfo = await getGitRepositoryInfo();
477
+ let gitInfo = await getGitRepositoryInfo();
65
478
  // Fetch project from API
66
479
  let project;
67
480
  if (opts.project) {
@@ -79,19 +492,60 @@ export async function handleInit(opts) {
79
492
  }
80
493
  else {
81
494
  // Auto-detect mode: fetch project by git repository
82
- if (!gitInfo || !gitInfo.isRepo || !gitInfo.owner || !gitInfo.name) {
495
+ if (!gitInfo || !gitInfo.isRepo) {
496
+ // Not a git repository - offer to initialize
497
+ const result = await handleNoGitRepository();
498
+ if (result.success && result.message === 'continue-init') {
499
+ // Repository was created - re-fetch git info and continue
500
+ gitInfo = await getGitRepositoryInfo();
501
+ if (!gitInfo || !gitInfo.owner || !gitInfo.name) {
502
+ return {
503
+ success: false,
504
+ message: chalk.red('❌ Failed to get repository information after setup'),
505
+ };
506
+ }
507
+ }
508
+ else {
509
+ return result;
510
+ }
511
+ }
512
+ if (!gitInfo || !gitInfo.owner || !gitInfo.name) {
513
+ // Git repo but no remote - offer to create GitHub repo
514
+ const result = await handleNoGitRemote();
515
+ if (result.success && result.message === 'continue-init') {
516
+ // Repository was created - re-fetch git info and continue
517
+ gitInfo = await getGitRepositoryInfo();
518
+ if (!gitInfo || !gitInfo.owner || !gitInfo.name) {
519
+ return {
520
+ success: false,
521
+ message: chalk.red('❌ Failed to get repository information after setup'),
522
+ };
523
+ }
524
+ }
525
+ else {
526
+ return result;
527
+ }
528
+ }
529
+ // At this point, gitInfo, owner and name are guaranteed to exist
530
+ if (!gitInfo) {
531
+ return {
532
+ success: false,
533
+ message: chalk.red('❌ Repository information is missing'),
534
+ };
535
+ }
536
+ const owner = gitInfo.owner;
537
+ const name = gitInfo.name;
538
+ if (!owner || !name) {
83
539
  return {
84
540
  success: false,
85
- message: chalk.red('❌ Not in a git repository or repository has no remote.\n') +
86
- chalk.dim('Make sure you are in a git repository with a configured remote, or use:\n') +
87
- chalk.cyan('braingrid init --project <project-id>'),
541
+ message: chalk.red('❌ Repository information is incomplete'),
88
542
  };
89
543
  }
90
544
  let response;
91
545
  try {
92
546
  response = (await projectService.listProjects({
93
- repository_owner: gitInfo.owner,
94
- repository_name: gitInfo.name,
547
+ repository_owner: owner,
548
+ repository_name: name,
95
549
  }));
96
550
  }
97
551
  catch (error) {
@@ -99,31 +553,15 @@ export async function handleInit(opts) {
99
553
  if (error && typeof error === 'object' && 'response' in error) {
100
554
  const axiosError = error;
101
555
  if (axiosError.response?.status === 404) {
102
- const webUrl = config.apiUrl.replace('/api', '');
103
- return {
104
- success: false,
105
- message: chalk.yellow('⚠️ We did not find a Project in BrainGrid for this repo.\n\n') +
106
- chalk.dim(`Repository: ${gitInfo.owner}/${gitInfo.name}\n\n`) +
107
- chalk.dim('Create a project at ') +
108
- chalk.cyan(webUrl) +
109
- chalk.dim(' and link it to this repository, or use:\n') +
110
- chalk.cyan(`braingrid project create --name "My Project" --repositories "${gitInfo.owner}/${gitInfo.name}"`),
111
- };
556
+ // No project found - handle the scenario
557
+ return await handleNoProjectForRepository(owner, name, gitInfo, githubService, repositoryService, projectService, config);
112
558
  }
113
559
  }
114
560
  throw error;
115
561
  }
116
562
  if (response.projects.length === 0) {
117
- const webUrl = config.apiUrl.replace('/api', '');
118
- return {
119
- success: false,
120
- message: chalk.yellow('⚠️ No projects found for this repository.\n\n') +
121
- chalk.dim(`Repository: ${gitInfo.owner}/${gitInfo.name}\n\n`) +
122
- chalk.dim('Create a project at ') +
123
- chalk.cyan(webUrl) +
124
- chalk.dim(' and link it to this repository, or use:\n') +
125
- chalk.cyan(`braingrid project create --name "My Project" --repositories "${gitInfo.owner}/${gitInfo.name}"`),
126
- };
563
+ // No project found - handle the scenario
564
+ return await handleNoProjectForRepository(owner, name, gitInfo, githubService, repositoryService, projectService, config);
127
565
  }
128
566
  // Use the first project (could add selection logic if multiple projects)
129
567
  project = response.projects[0];
@@ -143,8 +581,8 @@ export async function handleInit(opts) {
143
581
  chalk.gray(project.repository?.full_name || 'N/A') +
144
582
  '\n\n';
145
583
  console.log(projectInfo);
146
- // In wizard mode, ask for confirmation
147
- if (opts.wizard) {
584
+ // Always ask for confirmation (unless --force)
585
+ if (!opts.force) {
148
586
  const shouldInit = await confirm({
149
587
  message: 'Initialize this repository with the above project?',
150
588
  default: true,
@@ -1 +1 @@
1
- {"version":3,"file":"init.handlers.js","sourceRoot":"","sources":["../../src/handlers/init.handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.handlers.js","sourceRoot":"","sources":["../../src/handlers/init.handlers.ts"],"names":[],"mappings":"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"}