@braingrid/cli 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +45 -0
- package/README.md +55 -41
- package/dist/.build-info.json +1 -1
- package/dist/cli.js +45 -7
- package/dist/cli.js.map +1 -1
- package/dist/handlers/auth.handlers.d.ts.map +1 -1
- package/dist/handlers/auth.handlers.js +4 -1
- package/dist/handlers/auth.handlers.js.map +1 -1
- package/dist/handlers/index.d.ts +2 -0
- package/dist/handlers/index.d.ts.map +1 -1
- package/dist/handlers/index.js +2 -0
- package/dist/handlers/index.js.map +1 -1
- package/dist/handlers/init.handlers.d.ts +11 -0
- package/dist/handlers/init.handlers.d.ts.map +1 -0
- package/dist/handlers/init.handlers.js +200 -0
- package/dist/handlers/init.handlers.js.map +1 -0
- package/dist/handlers/project.handlers.d.ts +10 -2
- package/dist/handlers/project.handlers.d.ts.map +1 -1
- package/dist/handlers/project.handlers.js +93 -2
- package/dist/handlers/project.handlers.js.map +1 -1
- package/dist/handlers/requirement.handlers.d.ts +2 -2
- package/dist/handlers/requirement.handlers.d.ts.map +1 -1
- package/dist/handlers/requirement.handlers.js +27 -2
- package/dist/handlers/requirement.handlers.js.map +1 -1
- package/dist/handlers/task.handlers.d.ts +2 -2
- package/dist/handlers/task.handlers.d.ts.map +1 -1
- package/dist/handlers/task.handlers.js +38 -3
- package/dist/handlers/task.handlers.js.map +1 -1
- package/dist/handlers/update.handlers.d.ts +16 -0
- package/dist/handlers/update.handlers.d.ts.map +1 -0
- package/dist/handlers/update.handlers.js +126 -0
- package/dist/handlers/update.handlers.js.map +1 -0
- package/dist/services/auth.d.ts +2 -2
- package/dist/services/auth.d.ts.map +1 -1
- package/dist/services/auth.js +2 -1
- package/dist/services/auth.js.map +1 -1
- package/dist/services/project-service.d.ts +2 -0
- package/dist/services/project-service.d.ts.map +1 -1
- package/dist/services/project-service.js +4 -0
- package/dist/services/project-service.js.map +1 -1
- package/dist/types/auth.d.ts +5 -0
- package/dist/types/auth.d.ts.map +1 -1
- package/dist/types/local-project.d.ts +30 -0
- package/dist/types/local-project.d.ts.map +1 -0
- package/dist/types/local-project.js +24 -0
- package/dist/types/local-project.js.map +1 -0
- package/dist/types/project.d.ts +23 -0
- package/dist/types/project.d.ts.map +1 -1
- package/dist/utils/cli-tools.d.ts.map +1 -1
- package/dist/utils/cli-tools.js +6 -19
- package/dist/utils/cli-tools.js.map +1 -1
- package/dist/utils/local-store.d.ts +36 -0
- package/dist/utils/local-store.d.ts.map +1 -0
- package/dist/utils/local-store.js +82 -0
- package/dist/utils/local-store.js.map +1 -0
- package/dist/utils/package-manager.d.ts +31 -0
- package/dist/utils/package-manager.d.ts.map +1 -0
- package/dist/utils/package-manager.js +133 -0
- package/dist/utils/package-manager.js.map +1 -0
- package/package.json +5 -2
|
@@ -0,0 +1,200 @@
|
|
|
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 } from '@inquirer/prompts';
|
|
7
|
+
import { BraingridAuth } from '../services/auth.js';
|
|
8
|
+
import { ProjectService } from '../services/project-service.js';
|
|
9
|
+
import { getConfig } from '../utils/config.js';
|
|
10
|
+
import { getGitRepositoryInfo } from '../utils/git.js';
|
|
11
|
+
import { formatError } from '../utils/error-formatter.js';
|
|
12
|
+
import { projectConfigExists, saveProjectConfig, loadProjectConfig } from '../utils/local-store.js';
|
|
13
|
+
function getServices() {
|
|
14
|
+
const config = getConfig();
|
|
15
|
+
const auth = new BraingridAuth(config.apiUrl);
|
|
16
|
+
const projectService = new ProjectService(config.apiUrl, auth);
|
|
17
|
+
return { projectService, auth };
|
|
18
|
+
}
|
|
19
|
+
export async function handleInit(opts) {
|
|
20
|
+
try {
|
|
21
|
+
const config = getConfig();
|
|
22
|
+
const { projectService, auth } = getServices();
|
|
23
|
+
// Check if already initialized (unless --force)
|
|
24
|
+
if (projectConfigExists() && !opts.force) {
|
|
25
|
+
try {
|
|
26
|
+
const existing = loadProjectConfig();
|
|
27
|
+
return {
|
|
28
|
+
success: false,
|
|
29
|
+
message: chalk.yellow('⚠️ Already initialized.\n\n') +
|
|
30
|
+
chalk.dim(`Project: ${existing.project_name} (${existing.project_short_id})\n`) +
|
|
31
|
+
chalk.dim(`Repository: ${existing.repository?.full_name || 'N/A'}\n\n`) +
|
|
32
|
+
chalk.dim('Use --force to reinitialize'),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// If config exists but is invalid, continue with init
|
|
37
|
+
return {
|
|
38
|
+
success: false,
|
|
39
|
+
message: chalk.yellow('⚠️ Invalid project configuration found.\n') +
|
|
40
|
+
chalk.dim('Use --force to reinitialize'),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Check authentication
|
|
45
|
+
const isAuthenticated = await auth.isAuthenticated();
|
|
46
|
+
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
|
+
};
|
|
54
|
+
}
|
|
55
|
+
// Get session to retrieve organization_id
|
|
56
|
+
const session = await auth.getStoredSession();
|
|
57
|
+
if (!session) {
|
|
58
|
+
return {
|
|
59
|
+
success: false,
|
|
60
|
+
message: chalk.red('❌ No session found. Please run `braingrid login` first.'),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// Get git repository info (always needed for URL, even when using --project)
|
|
64
|
+
const gitInfo = await getGitRepositoryInfo();
|
|
65
|
+
// Fetch project from API
|
|
66
|
+
let project;
|
|
67
|
+
if (opts.project) {
|
|
68
|
+
// Manual mode: fetch project by ID
|
|
69
|
+
try {
|
|
70
|
+
project = await projectService.getProject(opts.project);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return {
|
|
74
|
+
success: false,
|
|
75
|
+
message: chalk.red(`❌ Project not found: ${opts.project}\n\n`) +
|
|
76
|
+
chalk.dim('Make sure the project ID is correct and you have access to it.'),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
// Auto-detect mode: fetch project by git repository
|
|
82
|
+
if (!gitInfo || !gitInfo.isRepo || !gitInfo.owner || !gitInfo.name) {
|
|
83
|
+
return {
|
|
84
|
+
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>'),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
let response;
|
|
91
|
+
try {
|
|
92
|
+
response = (await projectService.listProjects({
|
|
93
|
+
repository_owner: gitInfo.owner,
|
|
94
|
+
repository_name: gitInfo.name,
|
|
95
|
+
}));
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
// Check if it's a 404 error
|
|
99
|
+
if (error && typeof error === 'object' && 'response' in error) {
|
|
100
|
+
const axiosError = error;
|
|
101
|
+
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
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
throw error;
|
|
115
|
+
}
|
|
116
|
+
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
|
+
};
|
|
127
|
+
}
|
|
128
|
+
// Use the first project (could add selection logic if multiple projects)
|
|
129
|
+
project = response.projects[0];
|
|
130
|
+
}
|
|
131
|
+
// Display project information
|
|
132
|
+
const projectInfo = chalk.bold('\n📦 BrainGrid Project Found\n\n') +
|
|
133
|
+
chalk.dim('Project: ') +
|
|
134
|
+
chalk.cyan(project.name) +
|
|
135
|
+
'\n' +
|
|
136
|
+
chalk.dim('ID: ') +
|
|
137
|
+
chalk.gray(project.short_id) +
|
|
138
|
+
'\n' +
|
|
139
|
+
(project.description
|
|
140
|
+
? chalk.dim('Description: ') + chalk.gray(project.description) + '\n'
|
|
141
|
+
: '') +
|
|
142
|
+
chalk.dim('Repository: ') +
|
|
143
|
+
chalk.gray(project.repository?.full_name || 'N/A') +
|
|
144
|
+
'\n\n';
|
|
145
|
+
console.log(projectInfo);
|
|
146
|
+
// In wizard mode, ask for confirmation
|
|
147
|
+
if (opts.wizard) {
|
|
148
|
+
const shouldInit = await confirm({
|
|
149
|
+
message: 'Initialize this repository with the above project?',
|
|
150
|
+
default: true,
|
|
151
|
+
});
|
|
152
|
+
if (!shouldInit) {
|
|
153
|
+
return {
|
|
154
|
+
success: false,
|
|
155
|
+
message: chalk.yellow('Initialization cancelled.'),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Create local project config
|
|
160
|
+
const localConfig = {
|
|
161
|
+
organization_id: session.organization_id,
|
|
162
|
+
project_id: project.id,
|
|
163
|
+
project_short_id: project.short_id,
|
|
164
|
+
project_name: project.name,
|
|
165
|
+
project_description: project.description || null,
|
|
166
|
+
repository: project.repository
|
|
167
|
+
? {
|
|
168
|
+
id: project.repository.id,
|
|
169
|
+
owner: project.repository.full_name.split('/')[0], // Parse owner from API full_name
|
|
170
|
+
name: project.repository.name, // Use API name, not git name
|
|
171
|
+
full_name: project.repository.full_name,
|
|
172
|
+
url: gitInfo?.remoteUrl || undefined,
|
|
173
|
+
}
|
|
174
|
+
: null,
|
|
175
|
+
created_at: project.created_at,
|
|
176
|
+
};
|
|
177
|
+
// Save to .braingrid/project.json
|
|
178
|
+
saveProjectConfig(localConfig);
|
|
179
|
+
return {
|
|
180
|
+
success: true,
|
|
181
|
+
message: chalk.green('✅ Repository initialized successfully!\n\n') +
|
|
182
|
+
chalk.dim('Project: ') +
|
|
183
|
+
chalk.cyan(project.name) +
|
|
184
|
+
chalk.dim(` (${project.short_id})`) +
|
|
185
|
+
'\n' +
|
|
186
|
+
chalk.dim('Config: ') +
|
|
187
|
+
chalk.gray('.braingrid/project.json') +
|
|
188
|
+
'\n\n' +
|
|
189
|
+
chalk.dim('You can now use project-scoped commands without specifying a project ID.'),
|
|
190
|
+
data: localConfig,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
return {
|
|
195
|
+
success: false,
|
|
196
|
+
message: chalk.red(`❌ ${formatError(error, 'initializing repository')}`),
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=init.handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.handlers.js","sourceRoot":"","sources":["../../src/handlers/init.handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Handles all project-related commands:
|
|
5
5
|
* - list: List all projects
|
|
6
|
-
* - show: Show
|
|
6
|
+
* - show: Show projects for a repository (current repo or specified)
|
|
7
|
+
* - get: Get a specific project by ID
|
|
7
8
|
* - create: Create a new project
|
|
8
9
|
* - update: Update project information
|
|
9
10
|
* - delete: Delete a project
|
|
@@ -14,7 +15,14 @@ export declare function handleProjectList(opts: {
|
|
|
14
15
|
page?: string;
|
|
15
16
|
limit?: string;
|
|
16
17
|
}): Promise<HandlerResult>;
|
|
17
|
-
export declare function handleProjectShow(
|
|
18
|
+
export declare function handleProjectShow(opts: {
|
|
19
|
+
repo?: string;
|
|
20
|
+
repository?: string;
|
|
21
|
+
format?: string;
|
|
22
|
+
page?: string;
|
|
23
|
+
limit?: string;
|
|
24
|
+
}): Promise<HandlerResult>;
|
|
25
|
+
export declare function handleProjectGet(id: string): Promise<HandlerResult>;
|
|
18
26
|
export declare function handleProjectCreate(opts: {
|
|
19
27
|
name: string;
|
|
20
28
|
description?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/project.handlers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"project.handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/project.handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAShD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,aAAa,CAAC,CA8DzB;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,aAAa,CAAC,CAsGzB;AAED,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAmCzE;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,aAAa,CAAC,CA4BzB;AAED,wBAAsB,mBAAmB,CACxC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;IACL,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,GACC,OAAO,CAAC,aAAa,CAAC,CAqCxB;AAED,wBAAsB,mBAAmB,CACxC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GACvB,OAAO,CAAC,aAAa,CAAC,CAiCxB"}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Handles all project-related commands:
|
|
5
5
|
* - list: List all projects
|
|
6
|
-
* - show: Show
|
|
6
|
+
* - show: Show projects for a repository (current repo or specified)
|
|
7
|
+
* - get: Get a specific project by ID
|
|
7
8
|
* - create: Create a new project
|
|
8
9
|
* - update: Update project information
|
|
9
10
|
* - delete: Delete a project
|
|
@@ -13,6 +14,7 @@ import { ProjectService } from '../services/project-service.js';
|
|
|
13
14
|
import { BraingridAuth } from '../services/auth.js';
|
|
14
15
|
import { getConfig } from '../utils/config.js';
|
|
15
16
|
import { formatError, getResourceContext } from '../utils/error-formatter.js';
|
|
17
|
+
import { getGitRepositoryInfo } from '../utils/git.js';
|
|
16
18
|
function getServices() {
|
|
17
19
|
const config = getConfig();
|
|
18
20
|
const auth = new BraingridAuth(config.apiUrl);
|
|
@@ -75,7 +77,96 @@ export async function handleProjectList(opts) {
|
|
|
75
77
|
};
|
|
76
78
|
}
|
|
77
79
|
}
|
|
78
|
-
export async function handleProjectShow(
|
|
80
|
+
export async function handleProjectShow(opts) {
|
|
81
|
+
try {
|
|
82
|
+
const { projectService, auth } = getServices();
|
|
83
|
+
// Check authentication
|
|
84
|
+
const isAuthenticated = await auth.isAuthenticated();
|
|
85
|
+
if (!isAuthenticated) {
|
|
86
|
+
return {
|
|
87
|
+
success: false,
|
|
88
|
+
message: chalk.red('❌ Not authenticated. Please run `braingrid login` first.'),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
let repositoryOwner;
|
|
92
|
+
let repositoryName;
|
|
93
|
+
// Parse --repo or --repository flag if provided (format: owner/name)
|
|
94
|
+
const repoInput = opts.repository || opts.repo;
|
|
95
|
+
if (repoInput) {
|
|
96
|
+
const parts = repoInput.split('/');
|
|
97
|
+
if (parts.length !== 2) {
|
|
98
|
+
return {
|
|
99
|
+
success: false,
|
|
100
|
+
message: chalk.red('❌ Invalid repository format. Use: --repository owner/name (e.g., --repository microsoft/vscode)'),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
[repositoryOwner, repositoryName] = parts;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
// Try to detect from git context
|
|
107
|
+
const gitInfo = await getGitRepositoryInfo();
|
|
108
|
+
if (!gitInfo || !gitInfo.isRepo || !gitInfo.owner || !gitInfo.name) {
|
|
109
|
+
return {
|
|
110
|
+
success: false,
|
|
111
|
+
message: chalk.yellow('⚠️ Not in a git repository or repository has no remote.\n' +
|
|
112
|
+
' Use --repository owner/name to specify a repository (e.g., --repository microsoft/vscode)'),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
repositoryOwner = gitInfo.owner;
|
|
116
|
+
repositoryName = gitInfo.name;
|
|
117
|
+
}
|
|
118
|
+
const response = await projectService.listProjects({
|
|
119
|
+
repository_owner: repositoryOwner,
|
|
120
|
+
repository_name: repositoryName,
|
|
121
|
+
page: opts.page ? parseInt(opts.page, 10) : 1,
|
|
122
|
+
limit: opts.limit ? parseInt(opts.limit, 10) : 20,
|
|
123
|
+
});
|
|
124
|
+
if (opts.format === 'json') {
|
|
125
|
+
return {
|
|
126
|
+
success: true,
|
|
127
|
+
message: JSON.stringify(response, null, 2),
|
|
128
|
+
data: response,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
// Table format
|
|
132
|
+
const repoDisplay = chalk.cyan(`${repositoryOwner}/${repositoryName}`);
|
|
133
|
+
const source = opts.repo ? 'specified' : 'detected from git';
|
|
134
|
+
if (response.projects.length === 0) {
|
|
135
|
+
return {
|
|
136
|
+
success: true,
|
|
137
|
+
message: chalk.yellow(`No projects found for repository ${repoDisplay}\n`) +
|
|
138
|
+
chalk.dim(`(${source})`),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
let output = chalk.bold(`📋 Projects for ${repoDisplay}\n`);
|
|
142
|
+
output += chalk.dim(`(${source})\n\n`);
|
|
143
|
+
output +=
|
|
144
|
+
'ID Short ID Name Created\n';
|
|
145
|
+
output += '─'.repeat(100) + '\n';
|
|
146
|
+
for (const project of response.projects) {
|
|
147
|
+
const id = project.id.padEnd(36);
|
|
148
|
+
const shortId = project.short_id.padEnd(11);
|
|
149
|
+
const name = project.name.substring(0, 28).padEnd(28);
|
|
150
|
+
const created = new Date(project.created_at).toLocaleDateString();
|
|
151
|
+
output += `${id} ${shortId} ${name} ${created}\n`;
|
|
152
|
+
}
|
|
153
|
+
output += '\n';
|
|
154
|
+
output += `Page ${response.pagination.page} of ${Math.ceil(response.pagination.total / response.pagination.limit)}`;
|
|
155
|
+
output += ` (${response.pagination.total} total)`;
|
|
156
|
+
return {
|
|
157
|
+
success: true,
|
|
158
|
+
message: output,
|
|
159
|
+
data: response,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
return {
|
|
164
|
+
success: false,
|
|
165
|
+
message: chalk.red(`❌ ${formatError(error, 'showing projects for repository')}`),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
export async function handleProjectGet(id) {
|
|
79
170
|
try {
|
|
80
171
|
const { projectService, auth } = getServices();
|
|
81
172
|
const isAuthenticated = await auth.isAuthenticated();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.handlers.js","sourceRoot":"","sources":["../../src/handlers/project.handlers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"project.handlers.js","sourceRoot":"","sources":["../../src/handlers/project.handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import type { HandlerResult } from './types.js';
|
|
12
12
|
export declare function handleRequirementList(opts: {
|
|
13
|
-
project
|
|
13
|
+
project?: string;
|
|
14
14
|
status?: string;
|
|
15
15
|
format?: string;
|
|
16
16
|
page?: string;
|
|
@@ -18,7 +18,7 @@ export declare function handleRequirementList(opts: {
|
|
|
18
18
|
}): Promise<HandlerResult>;
|
|
19
19
|
export declare function handleRequirementShow(id: string): Promise<HandlerResult>;
|
|
20
20
|
export declare function handleRequirementCreate(opts: {
|
|
21
|
-
project
|
|
21
|
+
project?: string;
|
|
22
22
|
prompt: string;
|
|
23
23
|
repositories?: string;
|
|
24
24
|
}): Promise<HandlerResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirement.handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/requirement.handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"requirement.handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/requirement.handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAgChD,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,aAAa,CAAC,CA6EzB;AAED,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAqD9E;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,aAAa,CAAC,CA6CzB;AAED,wBAAsB,uBAAuB,CAC5C,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;IACL,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,GACC,OAAO,CAAC,aAAa,CAAC,CAmCxB;AAED,wBAAsB,uBAAuB,CAC5C,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GACvB,OAAO,CAAC,aAAa,CAAC,CAiCxB"}
|
|
@@ -13,6 +13,7 @@ import { RequirementService } from '../services/requirement-service.js';
|
|
|
13
13
|
import { BraingridAuth } from '../services/auth.js';
|
|
14
14
|
import { getConfig } from '../utils/config.js';
|
|
15
15
|
import { formatError, getResourceContext } from '../utils/error-formatter.js';
|
|
16
|
+
import { getLocalProjectId } from '../utils/local-store.js';
|
|
16
17
|
function getServices() {
|
|
17
18
|
const config = getConfig();
|
|
18
19
|
const auth = new BraingridAuth(config.apiUrl);
|
|
@@ -47,7 +48,19 @@ export async function handleRequirementList(opts) {
|
|
|
47
48
|
message: chalk.red('❌ Not authenticated. Please run `braingrid login` first.'),
|
|
48
49
|
};
|
|
49
50
|
}
|
|
50
|
-
|
|
51
|
+
// Get project ID from parameter or local config
|
|
52
|
+
const projectId = opts.project || getLocalProjectId();
|
|
53
|
+
if (!projectId) {
|
|
54
|
+
return {
|
|
55
|
+
success: false,
|
|
56
|
+
message: chalk.red('❌ No project specified and no local project found.\n\n') +
|
|
57
|
+
chalk.dim('Either run ') +
|
|
58
|
+
chalk.cyan('braingrid init') +
|
|
59
|
+
chalk.dim(' to initialize this repository, or use:\n') +
|
|
60
|
+
chalk.cyan('braingrid requirement list -p PROJ-123'),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const response = await requirementService.listProjectRequirements(projectId, {
|
|
51
64
|
status: opts.status,
|
|
52
65
|
page: opts.page ? parseInt(opts.page, 10) : 1,
|
|
53
66
|
limit: opts.limit ? parseInt(opts.limit, 10) : 20,
|
|
@@ -154,8 +167,20 @@ export async function handleRequirementCreate(opts) {
|
|
|
154
167
|
message: chalk.red('❌ Not authenticated. Please run `braingrid login` first.'),
|
|
155
168
|
};
|
|
156
169
|
}
|
|
170
|
+
// Get project ID from parameter or local config
|
|
171
|
+
const projectId = opts.project || getLocalProjectId();
|
|
172
|
+
if (!projectId) {
|
|
173
|
+
return {
|
|
174
|
+
success: false,
|
|
175
|
+
message: chalk.red('❌ No project specified and no local project found.\n\n') +
|
|
176
|
+
chalk.dim('Either run ') +
|
|
177
|
+
chalk.cyan('braingrid init') +
|
|
178
|
+
chalk.dim(' to initialize this repository, or use:\n') +
|
|
179
|
+
chalk.cyan('braingrid requirement create -p PROJ-123 --prompt "..."'),
|
|
180
|
+
};
|
|
181
|
+
}
|
|
157
182
|
const repositories = opts.repositories ? opts.repositories.split(',').map(r => r.trim()) : [];
|
|
158
|
-
const requirement = await requirementService.createProjectRequirement(
|
|
183
|
+
const requirement = await requirementService.createProjectRequirement(projectId, {
|
|
159
184
|
prompt: opts.prompt,
|
|
160
185
|
repositories,
|
|
161
186
|
return_content: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirement.handlers.js","sourceRoot":"","sources":["../../src/handlers/requirement.handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"requirement.handlers.js","sourceRoot":"","sources":["../../src/handlers/requirement.handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,12 +10,12 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import type { HandlerResult } from './types.js';
|
|
12
12
|
export declare function handleTaskList(opts: {
|
|
13
|
-
requirement
|
|
13
|
+
requirement?: string;
|
|
14
14
|
format?: string;
|
|
15
15
|
}): Promise<HandlerResult>;
|
|
16
16
|
export declare function handleTaskShow(id: string): Promise<HandlerResult>;
|
|
17
17
|
export declare function handleTaskCreate(opts: {
|
|
18
|
-
requirement
|
|
18
|
+
requirement?: string;
|
|
19
19
|
title: string;
|
|
20
20
|
content?: string;
|
|
21
21
|
}): Promise<HandlerResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/task.handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"task.handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/task.handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA4ChD,wBAAsB,cAAc,CAAC,IAAI,EAAE;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,aAAa,CAAC,CAgFzB;AAED,wBAAsB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA2DvE;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,aAAa,CAAC,CAqDzB;AAED,wBAAsB,gBAAgB,CACrC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;IACL,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,GACC,OAAO,CAAC,aAAa,CAAC,CA6CxB;AAED,wBAAsB,gBAAgB,CACrC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GACvB,OAAO,CAAC,aAAa,CAAC,CAyCxB"}
|
|
@@ -13,6 +13,7 @@ import { TaskService } from '../services/task-service.js';
|
|
|
13
13
|
import { BraingridAuth } from '../services/auth.js';
|
|
14
14
|
import { getConfig } from '../utils/config.js';
|
|
15
15
|
import { formatError, getResourceContext } from '../utils/error-formatter.js';
|
|
16
|
+
import { getLocalProjectId } from '../utils/local-store.js';
|
|
16
17
|
function getServices() {
|
|
17
18
|
const config = getConfig();
|
|
18
19
|
const auth = new BraingridAuth(config.apiUrl);
|
|
@@ -34,12 +35,18 @@ function getStatusEmoji(status) {
|
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
37
|
// Helper to parse project/requirement from task identifier
|
|
37
|
-
// Format: PROJ-123/REQ-456 or just
|
|
38
|
+
// Format: PROJ-123/REQ-456 or just REQ-456 (auto-detects project)
|
|
38
39
|
function parseTaskContext(requirementId) {
|
|
39
40
|
const parts = requirementId.split('/');
|
|
40
41
|
if (parts.length === 2) {
|
|
42
|
+
// Full format: PROJ-123/REQ-456
|
|
41
43
|
return { projectId: parts[0], requirementId: parts[1] };
|
|
42
44
|
}
|
|
45
|
+
// Short format: REQ-456 - try to get project from local config
|
|
46
|
+
const localProjectId = getLocalProjectId();
|
|
47
|
+
if (localProjectId) {
|
|
48
|
+
return { projectId: localProjectId, requirementId };
|
|
49
|
+
}
|
|
43
50
|
return { requirementId };
|
|
44
51
|
}
|
|
45
52
|
export async function handleTaskList(opts) {
|
|
@@ -52,11 +59,25 @@ export async function handleTaskList(opts) {
|
|
|
52
59
|
message: chalk.red('❌ Not authenticated. Please run `braingrid login` first.'),
|
|
53
60
|
};
|
|
54
61
|
}
|
|
62
|
+
if (!opts.requirement) {
|
|
63
|
+
return {
|
|
64
|
+
success: false,
|
|
65
|
+
message: chalk.red('❌ No requirement specified.\n\n') +
|
|
66
|
+
chalk.dim('Please provide a requirement ID:\n') +
|
|
67
|
+
chalk.cyan('braingrid task list -r REQ-456') +
|
|
68
|
+
chalk.dim(' (if initialized) or\n') +
|
|
69
|
+
chalk.cyan('braingrid task list -r PROJ-123/REQ-456'),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
55
72
|
const { projectId, requirementId } = parseTaskContext(opts.requirement);
|
|
56
73
|
if (!projectId) {
|
|
57
74
|
return {
|
|
58
75
|
success: false,
|
|
59
|
-
message: chalk.red('❌
|
|
76
|
+
message: chalk.red('❌ No project found.\n\n') +
|
|
77
|
+
chalk.dim('Either run ') +
|
|
78
|
+
chalk.cyan('braingrid init') +
|
|
79
|
+
chalk.dim(' to initialize this repository, or use full format:\n') +
|
|
80
|
+
chalk.cyan('braingrid task list -r PROJ-123/REQ-456'),
|
|
60
81
|
};
|
|
61
82
|
}
|
|
62
83
|
const response = await taskService.listTasks(projectId, requirementId);
|
|
@@ -165,11 +186,25 @@ export async function handleTaskCreate(opts) {
|
|
|
165
186
|
message: chalk.red('❌ Not authenticated. Please run `braingrid login` first.'),
|
|
166
187
|
};
|
|
167
188
|
}
|
|
189
|
+
if (!opts.requirement) {
|
|
190
|
+
return {
|
|
191
|
+
success: false,
|
|
192
|
+
message: chalk.red('❌ No requirement specified.\n\n') +
|
|
193
|
+
chalk.dim('Please provide a requirement ID:\n') +
|
|
194
|
+
chalk.cyan('braingrid task create -r REQ-456 --title "..."') +
|
|
195
|
+
chalk.dim(' (if initialized) or\n') +
|
|
196
|
+
chalk.cyan('braingrid task create -r PROJ-123/REQ-456 --title "..."'),
|
|
197
|
+
};
|
|
198
|
+
}
|
|
168
199
|
const { projectId, requirementId } = parseTaskContext(opts.requirement);
|
|
169
200
|
if (!projectId) {
|
|
170
201
|
return {
|
|
171
202
|
success: false,
|
|
172
|
-
message: chalk.red('❌
|
|
203
|
+
message: chalk.red('❌ No project found.\n\n') +
|
|
204
|
+
chalk.dim('Either run ') +
|
|
205
|
+
chalk.cyan('braingrid init') +
|
|
206
|
+
chalk.dim(' to initialize this repository, or use full format:\n') +
|
|
207
|
+
chalk.cyan('braingrid task create -r PROJ-123/REQ-456 --title "..."'),
|
|
173
208
|
};
|
|
174
209
|
}
|
|
175
210
|
const task = await taskService.createTask(projectId, requirementId, {
|