@braingrid/cli 0.2.0 → 0.2.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 (219) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/README.md +55 -39
  3. package/dist/chunk-KNVWIF3L.js +401 -0
  4. package/dist/chunk-KNVWIF3L.js.map +1 -0
  5. package/dist/cli.js +6236 -245
  6. package/dist/cli.js.map +1 -1
  7. package/dist/gh-installer-B65ZOOC4.js +13 -0
  8. package/dist/gh-installer-B65ZOOC4.js.map +1 -0
  9. package/package.json +19 -11
  10. package/dist/build-config.d.ts +0 -26
  11. package/dist/build-config.d.ts.map +0 -1
  12. package/dist/build-config.js +0 -45
  13. package/dist/build-config.js.map +0 -1
  14. package/dist/cli.d.ts +0 -3
  15. package/dist/cli.d.ts.map +0 -1
  16. package/dist/handlers/auth.handlers.d.ts +0 -13
  17. package/dist/handlers/auth.handlers.d.ts.map +0 -1
  18. package/dist/handlers/auth.handlers.js +0 -111
  19. package/dist/handlers/auth.handlers.js.map +0 -1
  20. package/dist/handlers/index.d.ts +0 -13
  21. package/dist/handlers/index.d.ts.map +0 -1
  22. package/dist/handlers/index.js +0 -13
  23. package/dist/handlers/index.js.map +0 -1
  24. package/dist/handlers/init.handlers.d.ts +0 -10
  25. package/dist/handlers/init.handlers.d.ts.map +0 -1
  26. package/dist/handlers/init.handlers.js +0 -638
  27. package/dist/handlers/init.handlers.js.map +0 -1
  28. package/dist/handlers/project.handlers.d.ts +0 -36
  29. package/dist/handlers/project.handlers.d.ts.map +0 -1
  30. package/dist/handlers/project.handlers.js +0 -309
  31. package/dist/handlers/project.handlers.js.map +0 -1
  32. package/dist/handlers/requirement.handlers.d.ts +0 -32
  33. package/dist/handlers/requirement.handlers.d.ts.map +0 -1
  34. package/dist/handlers/requirement.handlers.js +0 -264
  35. package/dist/handlers/requirement.handlers.js.map +0 -1
  36. package/dist/handlers/status.handlers.d.ts +0 -12
  37. package/dist/handlers/status.handlers.d.ts.map +0 -1
  38. package/dist/handlers/status.handlers.js +0 -212
  39. package/dist/handlers/status.handlers.js.map +0 -1
  40. package/dist/handlers/task.handlers.d.ts +0 -29
  41. package/dist/handlers/task.handlers.d.ts.map +0 -1
  42. package/dist/handlers/task.handlers.js +0 -326
  43. package/dist/handlers/task.handlers.js.map +0 -1
  44. package/dist/handlers/types.d.ts +0 -10
  45. package/dist/handlers/types.d.ts.map +0 -1
  46. package/dist/handlers/types.js +0 -5
  47. package/dist/handlers/types.js.map +0 -1
  48. package/dist/handlers/update.handlers.d.ts +0 -16
  49. package/dist/handlers/update.handlers.d.ts.map +0 -1
  50. package/dist/handlers/update.handlers.js +0 -119
  51. package/dist/handlers/update.handlers.js.map +0 -1
  52. package/dist/services/auth.d.ts +0 -59
  53. package/dist/services/auth.d.ts.map +0 -1
  54. package/dist/services/auth.js +0 -549
  55. package/dist/services/auth.js.map +0 -1
  56. package/dist/services/claude.d.ts +0 -18
  57. package/dist/services/claude.d.ts.map +0 -1
  58. package/dist/services/claude.js +0 -164
  59. package/dist/services/claude.js.map +0 -1
  60. package/dist/services/credential-store.d.ts +0 -47
  61. package/dist/services/credential-store.d.ts.map +0 -1
  62. package/dist/services/credential-store.js +0 -89
  63. package/dist/services/credential-store.js.map +0 -1
  64. package/dist/services/internal/github-service.d.ts +0 -67
  65. package/dist/services/internal/github-service.d.ts.map +0 -1
  66. package/dist/services/internal/github-service.js +0 -81
  67. package/dist/services/internal/github-service.js.map +0 -1
  68. package/dist/services/internal/repository-service.d.ts +0 -79
  69. package/dist/services/internal/repository-service.d.ts.map +0 -1
  70. package/dist/services/internal/repository-service.js +0 -88
  71. package/dist/services/internal/repository-service.js.map +0 -1
  72. package/dist/services/oauth2-auth.d.ts +0 -76
  73. package/dist/services/oauth2-auth.d.ts.map +0 -1
  74. package/dist/services/oauth2-auth.js +0 -451
  75. package/dist/services/oauth2-auth.js.map +0 -1
  76. package/dist/services/project-service.d.ts +0 -24
  77. package/dist/services/project-service.d.ts.map +0 -1
  78. package/dist/services/project-service.js +0 -60
  79. package/dist/services/project-service.js.map +0 -1
  80. package/dist/services/requirement-service.d.ts +0 -32
  81. package/dist/services/requirement-service.d.ts.map +0 -1
  82. package/dist/services/requirement-service.js +0 -91
  83. package/dist/services/requirement-service.js.map +0 -1
  84. package/dist/services/task-service.d.ts +0 -22
  85. package/dist/services/task-service.d.ts.map +0 -1
  86. package/dist/services/task-service.js +0 -52
  87. package/dist/services/task-service.js.map +0 -1
  88. package/dist/types/api.d.ts +0 -16
  89. package/dist/types/api.d.ts.map +0 -1
  90. package/dist/types/api.js +0 -5
  91. package/dist/types/api.js.map +0 -1
  92. package/dist/types/auth.d.ts +0 -73
  93. package/dist/types/auth.d.ts.map +0 -1
  94. package/dist/types/auth.js +0 -2
  95. package/dist/types/auth.js.map +0 -1
  96. package/dist/types/claude.d.ts +0 -22
  97. package/dist/types/claude.d.ts.map +0 -1
  98. package/dist/types/claude.js +0 -2
  99. package/dist/types/claude.js.map +0 -1
  100. package/dist/types/github.d.ts +0 -105
  101. package/dist/types/github.d.ts.map +0 -1
  102. package/dist/types/github.js +0 -6
  103. package/dist/types/github.js.map +0 -1
  104. package/dist/types/local-project.d.ts +0 -30
  105. package/dist/types/local-project.d.ts.map +0 -1
  106. package/dist/types/local-project.js +0 -24
  107. package/dist/types/local-project.js.map +0 -1
  108. package/dist/types/project.d.ts +0 -56
  109. package/dist/types/project.d.ts.map +0 -1
  110. package/dist/types/project.js +0 -5
  111. package/dist/types/project.js.map +0 -1
  112. package/dist/types/requirement.d.ts +0 -69
  113. package/dist/types/requirement.d.ts.map +0 -1
  114. package/dist/types/requirement.js +0 -5
  115. package/dist/types/requirement.js.map +0 -1
  116. package/dist/types/task.d.ts +0 -44
  117. package/dist/types/task.d.ts.map +0 -1
  118. package/dist/types/task.js +0 -5
  119. package/dist/types/task.js.map +0 -1
  120. package/dist/utils/axios-retry.d.ts +0 -25
  121. package/dist/utils/axios-retry.d.ts.map +0 -1
  122. package/dist/utils/axios-retry.js +0 -174
  123. package/dist/utils/axios-retry.js.map +0 -1
  124. package/dist/utils/axios-with-auth.d.ts +0 -10
  125. package/dist/utils/axios-with-auth.d.ts.map +0 -1
  126. package/dist/utils/axios-with-auth.js +0 -118
  127. package/dist/utils/axios-with-auth.js.map +0 -1
  128. package/dist/utils/cli-tools.d.ts +0 -30
  129. package/dist/utils/cli-tools.d.ts.map +0 -1
  130. package/dist/utils/cli-tools.js +0 -199
  131. package/dist/utils/cli-tools.js.map +0 -1
  132. package/dist/utils/command-execution.d.ts +0 -30
  133. package/dist/utils/command-execution.d.ts.map +0 -1
  134. package/dist/utils/command-execution.js +0 -264
  135. package/dist/utils/command-execution.js.map +0 -1
  136. package/dist/utils/command-parser.d.ts +0 -85
  137. package/dist/utils/command-parser.d.ts.map +0 -1
  138. package/dist/utils/command-parser.js +0 -287
  139. package/dist/utils/command-parser.js.map +0 -1
  140. package/dist/utils/config.d.ts +0 -10
  141. package/dist/utils/config.d.ts.map +0 -1
  142. package/dist/utils/config.js +0 -77
  143. package/dist/utils/config.js.map +0 -1
  144. package/dist/utils/error-formatter.d.ts +0 -17
  145. package/dist/utils/error-formatter.d.ts.map +0 -1
  146. package/dist/utils/error-formatter.js +0 -115
  147. package/dist/utils/error-formatter.js.map +0 -1
  148. package/dist/utils/formatting.d.ts +0 -10
  149. package/dist/utils/formatting.d.ts.map +0 -1
  150. package/dist/utils/formatting.js +0 -122
  151. package/dist/utils/formatting.js.map +0 -1
  152. package/dist/utils/gh-installer.d.ts +0 -31
  153. package/dist/utils/gh-installer.d.ts.map +0 -1
  154. package/dist/utils/gh-installer.js +0 -296
  155. package/dist/utils/gh-installer.js.map +0 -1
  156. package/dist/utils/git-installer.d.ts +0 -31
  157. package/dist/utils/git-installer.d.ts.map +0 -1
  158. package/dist/utils/git-installer.js +0 -290
  159. package/dist/utils/git-installer.js.map +0 -1
  160. package/dist/utils/git.d.ts +0 -60
  161. package/dist/utils/git.d.ts.map +0 -1
  162. package/dist/utils/git.js +0 -144
  163. package/dist/utils/git.js.map +0 -1
  164. package/dist/utils/github-repo.d.ts +0 -43
  165. package/dist/utils/github-repo.d.ts.map +0 -1
  166. package/dist/utils/github-repo.js +0 -113
  167. package/dist/utils/github-repo.js.map +0 -1
  168. package/dist/utils/id-normalization.d.ts +0 -26
  169. package/dist/utils/id-normalization.d.ts.map +0 -1
  170. package/dist/utils/id-normalization.js +0 -45
  171. package/dist/utils/id-normalization.js.map +0 -1
  172. package/dist/utils/jwt.d.ts +0 -45
  173. package/dist/utils/jwt.d.ts.map +0 -1
  174. package/dist/utils/jwt.js +0 -64
  175. package/dist/utils/jwt.js.map +0 -1
  176. package/dist/utils/local-store.d.ts +0 -36
  177. package/dist/utils/local-store.d.ts.map +0 -1
  178. package/dist/utils/local-store.js +0 -94
  179. package/dist/utils/local-store.js.map +0 -1
  180. package/dist/utils/logger.d.ts +0 -36
  181. package/dist/utils/logger.d.ts.map +0 -1
  182. package/dist/utils/logger.js +0 -176
  183. package/dist/utils/logger.js.map +0 -1
  184. package/dist/utils/package-manager-installer.d.ts +0 -36
  185. package/dist/utils/package-manager-installer.d.ts.map +0 -1
  186. package/dist/utils/package-manager-installer.js +0 -106
  187. package/dist/utils/package-manager-installer.js.map +0 -1
  188. package/dist/utils/package-manager.d.ts +0 -31
  189. package/dist/utils/package-manager.d.ts.map +0 -1
  190. package/dist/utils/package-manager.js +0 -133
  191. package/dist/utils/package-manager.js.map +0 -1
  192. package/dist/utils/projects.d.ts +0 -23
  193. package/dist/utils/projects.d.ts.map +0 -1
  194. package/dist/utils/projects.js +0 -36
  195. package/dist/utils/projects.js.map +0 -1
  196. package/dist/utils/repository-access.d.ts +0 -89
  197. package/dist/utils/repository-access.d.ts.map +0 -1
  198. package/dist/utils/repository-access.js +0 -132
  199. package/dist/utils/repository-access.js.map +0 -1
  200. package/dist/utils/requirements.d.ts +0 -43
  201. package/dist/utils/requirements.d.ts.map +0 -1
  202. package/dist/utils/requirements.js +0 -79
  203. package/dist/utils/requirements.js.map +0 -1
  204. package/dist/utils/spinner.d.ts +0 -47
  205. package/dist/utils/spinner.d.ts.map +0 -1
  206. package/dist/utils/spinner.js +0 -101
  207. package/dist/utils/spinner.js.map +0 -1
  208. package/dist/utils/status-parser.d.ts +0 -95
  209. package/dist/utils/status-parser.d.ts.map +0 -1
  210. package/dist/utils/status-parser.js +0 -205
  211. package/dist/utils/status-parser.js.map +0 -1
  212. package/dist/utils/tasks.d.ts +0 -21
  213. package/dist/utils/tasks.d.ts.map +0 -1
  214. package/dist/utils/tasks.js +0 -63
  215. package/dist/utils/tasks.js.map +0 -1
  216. package/dist/utils/workspace-manager.d.ts +0 -65
  217. package/dist/utils/workspace-manager.d.ts.map +0 -1
  218. package/dist/utils/workspace-manager.js +0 -98
  219. package/dist/utils/workspace-manager.js.map +0 -1
@@ -1,638 +0,0 @@
1
- /**
2
- * Init Handler
3
- * Handles the `braingrid init` command for initializing a repository with a BrainGrid project
4
- */
5
- import chalk from 'chalk';
6
- import { confirm, select, input } from '@inquirer/prompts';
7
- import { BraingridAuth } from '../services/auth.js';
8
- import { ProjectService } from '../services/project-service.js';
9
- import { GitHubService } from '../services/internal/github-service.js';
10
- import { getConfig } from '../utils/config.js';
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';
14
- import { formatError } from '../utils/error-formatter.js';
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';
21
- function getServices() {
22
- const config = getConfig();
23
- const auth = new BraingridAuth(config.apiUrl);
24
- const projectService = new ProjectService(config.apiUrl, 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
- };
341
- }
342
- export async function handleInit(opts) {
343
- try {
344
- const config = getConfig();
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
- }
405
- // Check if already initialized (unless --force)
406
- if ((await projectConfigExists()) && !opts.force) {
407
- try {
408
- const existing = await loadProjectConfig();
409
- return {
410
- success: false,
411
- message: chalk.yellow('āš ļø Already initialized.\n\n') +
412
- chalk.dim(`Project: ${existing.project_name} (${existing.project_short_id})\n`) +
413
- chalk.dim(`Repository: ${existing.repository?.full_name || 'N/A'}\n\n`) +
414
- chalk.dim('Use --force to reinitialize'),
415
- };
416
- }
417
- catch {
418
- // If config exists but is invalid, continue with init
419
- return {
420
- success: false,
421
- message: chalk.yellow('āš ļø Invalid project configuration found.\n') +
422
- chalk.dim('Use --force to reinitialize'),
423
- };
424
- }
425
- }
426
- // Check authentication
427
- const isAuthenticated = await auth.isAuthenticated();
428
- if (!isAuthenticated) {
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
467
- }
468
- // Get session to retrieve organization_id
469
- const session = await auth.getStoredSession();
470
- if (!session) {
471
- return {
472
- success: false,
473
- message: chalk.red('āŒ No session found. Please run `braingrid login` first.'),
474
- };
475
- }
476
- // Get git repository info (always needed for URL, even when using --project)
477
- let gitInfo = await getGitRepositoryInfo();
478
- // Fetch project from API
479
- let project;
480
- if (opts.project) {
481
- // Manual mode: fetch project by ID
482
- try {
483
- project = await projectService.getProject(opts.project);
484
- }
485
- catch {
486
- return {
487
- success: false,
488
- message: chalk.red(`āŒ Project not found: ${opts.project}\n\n`) +
489
- chalk.dim('Make sure the project ID is correct and you have access to it.'),
490
- };
491
- }
492
- }
493
- else {
494
- // Auto-detect mode: fetch project by git repository
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) {
539
- return {
540
- success: false,
541
- message: chalk.red('āŒ Repository information is incomplete'),
542
- };
543
- }
544
- let response;
545
- try {
546
- response = (await projectService.listProjects({
547
- repository_owner: owner,
548
- repository_name: name,
549
- }));
550
- }
551
- catch (error) {
552
- // Check if it's a 404 error
553
- if (error && typeof error === 'object' && 'response' in error) {
554
- const axiosError = error;
555
- if (axiosError.response?.status === 404) {
556
- // No project found - handle the scenario
557
- return await handleNoProjectForRepository(owner, name, gitInfo, githubService, repositoryService, projectService, config);
558
- }
559
- }
560
- throw error;
561
- }
562
- if (response.projects.length === 0) {
563
- // No project found - handle the scenario
564
- return await handleNoProjectForRepository(owner, name, gitInfo, githubService, repositoryService, projectService, config);
565
- }
566
- // Use the first project (could add selection logic if multiple projects)
567
- project = response.projects[0];
568
- }
569
- // Display project information
570
- const projectInfo = chalk.bold('\nšŸ“¦ BrainGrid Project Found\n\n') +
571
- chalk.dim('Project: ') +
572
- chalk.cyan(project.name) +
573
- '\n' +
574
- chalk.dim('ID: ') +
575
- chalk.gray(project.short_id) +
576
- '\n' +
577
- (project.description
578
- ? chalk.dim('Description: ') + chalk.gray(project.description) + '\n'
579
- : '') +
580
- chalk.dim('Repository: ') +
581
- chalk.gray(project.repository?.full_name || 'N/A') +
582
- '\n\n';
583
- console.log(projectInfo);
584
- // Always ask for confirmation (unless --force)
585
- if (!opts.force) {
586
- const shouldInit = await confirm({
587
- message: 'Initialize this repository with the above project?',
588
- default: true,
589
- });
590
- if (!shouldInit) {
591
- return {
592
- success: false,
593
- message: chalk.yellow('Initialization cancelled.'),
594
- };
595
- }
596
- }
597
- // Create local project config
598
- const localConfig = {
599
- organization_id: session.organization_id,
600
- project_id: project.id,
601
- project_short_id: project.short_id,
602
- project_name: project.name,
603
- project_description: project.description || null,
604
- repository: project.repository
605
- ? {
606
- id: project.repository.id,
607
- owner: project.repository.full_name.split('/')[0], // Parse owner from API full_name
608
- name: project.repository.name, // Use API name, not git name
609
- full_name: project.repository.full_name,
610
- url: gitInfo?.remoteUrl || undefined,
611
- }
612
- : null,
613
- created_at: project.created_at,
614
- };
615
- // Save to .braingrid/project.json (at git repository root)
616
- await saveProjectConfig(localConfig);
617
- return {
618
- success: true,
619
- message: chalk.green('āœ… Repository initialized successfully!\n\n') +
620
- chalk.dim('Project: ') +
621
- chalk.cyan(project.name) +
622
- chalk.dim(` (${project.short_id})`) +
623
- '\n' +
624
- chalk.dim('Config: ') +
625
- chalk.gray('.braingrid/project.json') +
626
- '\n\n' +
627
- chalk.dim('You can now use project-scoped commands without specifying a project ID.'),
628
- data: localConfig,
629
- };
630
- }
631
- catch (error) {
632
- return {
633
- success: false,
634
- message: chalk.red(`āŒ ${formatError(error, 'initializing repository')}`),
635
- };
636
- }
637
- }
638
- //# sourceMappingURL=init.handlers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.handlers.js","sourceRoot":"","sources":["../../src/handlers/init.handlers.ts"],"names":[],"mappings":"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"}