@braingrid/cli 0.2.0 → 0.2.1
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 +32 -0
- package/README.md +54 -38
- package/dist/chunk-KNVWIF3L.js +401 -0
- package/dist/chunk-KNVWIF3L.js.map +1 -0
- package/dist/cli.js +6236 -245
- package/dist/cli.js.map +1 -1
- package/dist/gh-installer-B65ZOOC4.js +13 -0
- package/dist/gh-installer-B65ZOOC4.js.map +1 -0
- package/package.json +19 -11
- package/dist/build-config.d.ts +0 -26
- package/dist/build-config.d.ts.map +0 -1
- package/dist/build-config.js +0 -45
- package/dist/build-config.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/handlers/auth.handlers.d.ts +0 -13
- package/dist/handlers/auth.handlers.d.ts.map +0 -1
- package/dist/handlers/auth.handlers.js +0 -111
- package/dist/handlers/auth.handlers.js.map +0 -1
- package/dist/handlers/index.d.ts +0 -13
- package/dist/handlers/index.d.ts.map +0 -1
- package/dist/handlers/index.js +0 -13
- package/dist/handlers/index.js.map +0 -1
- package/dist/handlers/init.handlers.d.ts +0 -10
- package/dist/handlers/init.handlers.d.ts.map +0 -1
- package/dist/handlers/init.handlers.js +0 -638
- package/dist/handlers/init.handlers.js.map +0 -1
- package/dist/handlers/project.handlers.d.ts +0 -36
- package/dist/handlers/project.handlers.d.ts.map +0 -1
- package/dist/handlers/project.handlers.js +0 -309
- package/dist/handlers/project.handlers.js.map +0 -1
- package/dist/handlers/requirement.handlers.d.ts +0 -32
- package/dist/handlers/requirement.handlers.d.ts.map +0 -1
- package/dist/handlers/requirement.handlers.js +0 -264
- package/dist/handlers/requirement.handlers.js.map +0 -1
- package/dist/handlers/status.handlers.d.ts +0 -12
- package/dist/handlers/status.handlers.d.ts.map +0 -1
- package/dist/handlers/status.handlers.js +0 -212
- package/dist/handlers/status.handlers.js.map +0 -1
- package/dist/handlers/task.handlers.d.ts +0 -29
- package/dist/handlers/task.handlers.d.ts.map +0 -1
- package/dist/handlers/task.handlers.js +0 -326
- package/dist/handlers/task.handlers.js.map +0 -1
- package/dist/handlers/types.d.ts +0 -10
- package/dist/handlers/types.d.ts.map +0 -1
- package/dist/handlers/types.js +0 -5
- package/dist/handlers/types.js.map +0 -1
- package/dist/handlers/update.handlers.d.ts +0 -16
- package/dist/handlers/update.handlers.d.ts.map +0 -1
- package/dist/handlers/update.handlers.js +0 -119
- package/dist/handlers/update.handlers.js.map +0 -1
- package/dist/services/auth.d.ts +0 -59
- package/dist/services/auth.d.ts.map +0 -1
- package/dist/services/auth.js +0 -549
- package/dist/services/auth.js.map +0 -1
- package/dist/services/claude.d.ts +0 -18
- package/dist/services/claude.d.ts.map +0 -1
- package/dist/services/claude.js +0 -164
- package/dist/services/claude.js.map +0 -1
- package/dist/services/credential-store.d.ts +0 -47
- package/dist/services/credential-store.d.ts.map +0 -1
- package/dist/services/credential-store.js +0 -89
- package/dist/services/credential-store.js.map +0 -1
- package/dist/services/internal/github-service.d.ts +0 -67
- package/dist/services/internal/github-service.d.ts.map +0 -1
- package/dist/services/internal/github-service.js +0 -81
- package/dist/services/internal/github-service.js.map +0 -1
- package/dist/services/internal/repository-service.d.ts +0 -79
- package/dist/services/internal/repository-service.d.ts.map +0 -1
- package/dist/services/internal/repository-service.js +0 -88
- package/dist/services/internal/repository-service.js.map +0 -1
- package/dist/services/oauth2-auth.d.ts +0 -76
- package/dist/services/oauth2-auth.d.ts.map +0 -1
- package/dist/services/oauth2-auth.js +0 -451
- package/dist/services/oauth2-auth.js.map +0 -1
- package/dist/services/project-service.d.ts +0 -24
- package/dist/services/project-service.d.ts.map +0 -1
- package/dist/services/project-service.js +0 -60
- package/dist/services/project-service.js.map +0 -1
- package/dist/services/requirement-service.d.ts +0 -32
- package/dist/services/requirement-service.d.ts.map +0 -1
- package/dist/services/requirement-service.js +0 -91
- package/dist/services/requirement-service.js.map +0 -1
- package/dist/services/task-service.d.ts +0 -22
- package/dist/services/task-service.d.ts.map +0 -1
- package/dist/services/task-service.js +0 -52
- package/dist/services/task-service.js.map +0 -1
- package/dist/types/api.d.ts +0 -16
- package/dist/types/api.d.ts.map +0 -1
- package/dist/types/api.js +0 -5
- package/dist/types/api.js.map +0 -1
- package/dist/types/auth.d.ts +0 -73
- package/dist/types/auth.d.ts.map +0 -1
- package/dist/types/auth.js +0 -2
- package/dist/types/auth.js.map +0 -1
- package/dist/types/claude.d.ts +0 -22
- package/dist/types/claude.d.ts.map +0 -1
- package/dist/types/claude.js +0 -2
- package/dist/types/claude.js.map +0 -1
- package/dist/types/github.d.ts +0 -105
- package/dist/types/github.d.ts.map +0 -1
- package/dist/types/github.js +0 -6
- package/dist/types/github.js.map +0 -1
- package/dist/types/local-project.d.ts +0 -30
- package/dist/types/local-project.d.ts.map +0 -1
- package/dist/types/local-project.js +0 -24
- package/dist/types/local-project.js.map +0 -1
- package/dist/types/project.d.ts +0 -56
- package/dist/types/project.d.ts.map +0 -1
- package/dist/types/project.js +0 -5
- package/dist/types/project.js.map +0 -1
- package/dist/types/requirement.d.ts +0 -69
- package/dist/types/requirement.d.ts.map +0 -1
- package/dist/types/requirement.js +0 -5
- package/dist/types/requirement.js.map +0 -1
- package/dist/types/task.d.ts +0 -44
- package/dist/types/task.d.ts.map +0 -1
- package/dist/types/task.js +0 -5
- package/dist/types/task.js.map +0 -1
- package/dist/utils/axios-retry.d.ts +0 -25
- package/dist/utils/axios-retry.d.ts.map +0 -1
- package/dist/utils/axios-retry.js +0 -174
- package/dist/utils/axios-retry.js.map +0 -1
- package/dist/utils/axios-with-auth.d.ts +0 -10
- package/dist/utils/axios-with-auth.d.ts.map +0 -1
- package/dist/utils/axios-with-auth.js +0 -118
- package/dist/utils/axios-with-auth.js.map +0 -1
- package/dist/utils/cli-tools.d.ts +0 -30
- package/dist/utils/cli-tools.d.ts.map +0 -1
- package/dist/utils/cli-tools.js +0 -199
- package/dist/utils/cli-tools.js.map +0 -1
- package/dist/utils/command-execution.d.ts +0 -30
- package/dist/utils/command-execution.d.ts.map +0 -1
- package/dist/utils/command-execution.js +0 -264
- package/dist/utils/command-execution.js.map +0 -1
- package/dist/utils/command-parser.d.ts +0 -85
- package/dist/utils/command-parser.d.ts.map +0 -1
- package/dist/utils/command-parser.js +0 -287
- package/dist/utils/command-parser.js.map +0 -1
- package/dist/utils/config.d.ts +0 -10
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js +0 -77
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/error-formatter.d.ts +0 -17
- package/dist/utils/error-formatter.d.ts.map +0 -1
- package/dist/utils/error-formatter.js +0 -115
- package/dist/utils/error-formatter.js.map +0 -1
- package/dist/utils/formatting.d.ts +0 -10
- package/dist/utils/formatting.d.ts.map +0 -1
- package/dist/utils/formatting.js +0 -122
- package/dist/utils/formatting.js.map +0 -1
- package/dist/utils/gh-installer.d.ts +0 -31
- package/dist/utils/gh-installer.d.ts.map +0 -1
- package/dist/utils/gh-installer.js +0 -296
- package/dist/utils/gh-installer.js.map +0 -1
- package/dist/utils/git-installer.d.ts +0 -31
- package/dist/utils/git-installer.d.ts.map +0 -1
- package/dist/utils/git-installer.js +0 -290
- package/dist/utils/git-installer.js.map +0 -1
- package/dist/utils/git.d.ts +0 -60
- package/dist/utils/git.d.ts.map +0 -1
- package/dist/utils/git.js +0 -144
- package/dist/utils/git.js.map +0 -1
- package/dist/utils/github-repo.d.ts +0 -43
- package/dist/utils/github-repo.d.ts.map +0 -1
- package/dist/utils/github-repo.js +0 -113
- package/dist/utils/github-repo.js.map +0 -1
- package/dist/utils/id-normalization.d.ts +0 -26
- package/dist/utils/id-normalization.d.ts.map +0 -1
- package/dist/utils/id-normalization.js +0 -45
- package/dist/utils/id-normalization.js.map +0 -1
- package/dist/utils/jwt.d.ts +0 -45
- package/dist/utils/jwt.d.ts.map +0 -1
- package/dist/utils/jwt.js +0 -64
- package/dist/utils/jwt.js.map +0 -1
- package/dist/utils/local-store.d.ts +0 -36
- package/dist/utils/local-store.d.ts.map +0 -1
- package/dist/utils/local-store.js +0 -94
- package/dist/utils/local-store.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -36
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -176
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/package-manager-installer.d.ts +0 -36
- package/dist/utils/package-manager-installer.d.ts.map +0 -1
- package/dist/utils/package-manager-installer.js +0 -106
- package/dist/utils/package-manager-installer.js.map +0 -1
- package/dist/utils/package-manager.d.ts +0 -31
- package/dist/utils/package-manager.d.ts.map +0 -1
- package/dist/utils/package-manager.js +0 -133
- package/dist/utils/package-manager.js.map +0 -1
- package/dist/utils/projects.d.ts +0 -23
- package/dist/utils/projects.d.ts.map +0 -1
- package/dist/utils/projects.js +0 -36
- package/dist/utils/projects.js.map +0 -1
- package/dist/utils/repository-access.d.ts +0 -89
- package/dist/utils/repository-access.d.ts.map +0 -1
- package/dist/utils/repository-access.js +0 -132
- package/dist/utils/repository-access.js.map +0 -1
- package/dist/utils/requirements.d.ts +0 -43
- package/dist/utils/requirements.d.ts.map +0 -1
- package/dist/utils/requirements.js +0 -79
- package/dist/utils/requirements.js.map +0 -1
- package/dist/utils/spinner.d.ts +0 -47
- package/dist/utils/spinner.d.ts.map +0 -1
- package/dist/utils/spinner.js +0 -101
- package/dist/utils/spinner.js.map +0 -1
- package/dist/utils/status-parser.d.ts +0 -95
- package/dist/utils/status-parser.d.ts.map +0 -1
- package/dist/utils/status-parser.js +0 -205
- package/dist/utils/status-parser.js.map +0 -1
- package/dist/utils/tasks.d.ts +0 -21
- package/dist/utils/tasks.d.ts.map +0 -1
- package/dist/utils/tasks.js +0 -63
- package/dist/utils/tasks.js.map +0 -1
- package/dist/utils/workspace-manager.d.ts +0 -65
- package/dist/utils/workspace-manager.d.ts.map +0 -1
- package/dist/utils/workspace-manager.js +0 -98
- package/dist/utils/workspace-manager.js.map +0 -1
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Project Resource Handlers
|
|
3
|
-
*
|
|
4
|
-
* Handles all project-related commands:
|
|
5
|
-
* - list: List all projects
|
|
6
|
-
* - show: Show current project, specific project by ID, or projects for a repository
|
|
7
|
-
* - create: Create a new project
|
|
8
|
-
* - update: Update project information
|
|
9
|
-
* - delete: Delete a project
|
|
10
|
-
*/
|
|
11
|
-
import type { HandlerResult } from './types.js';
|
|
12
|
-
export declare function handleProjectList(opts: {
|
|
13
|
-
format?: string;
|
|
14
|
-
page?: string;
|
|
15
|
-
limit?: string;
|
|
16
|
-
}): Promise<HandlerResult>;
|
|
17
|
-
export declare function handleProjectShow(opts: {
|
|
18
|
-
id?: string;
|
|
19
|
-
repo?: string;
|
|
20
|
-
repository?: string;
|
|
21
|
-
format?: string;
|
|
22
|
-
page?: string;
|
|
23
|
-
limit?: string;
|
|
24
|
-
}): Promise<HandlerResult>;
|
|
25
|
-
export declare function handleProjectCreate(opts: {
|
|
26
|
-
name: string;
|
|
27
|
-
description?: string;
|
|
28
|
-
}): Promise<HandlerResult>;
|
|
29
|
-
export declare function handleProjectUpdate(id: string, opts: {
|
|
30
|
-
name?: string;
|
|
31
|
-
description?: string;
|
|
32
|
-
}): Promise<HandlerResult>;
|
|
33
|
-
export declare function handleProjectDelete(id: string, opts: {
|
|
34
|
-
force?: boolean;
|
|
35
|
-
}): Promise<HandlerResult>;
|
|
36
|
-
//# sourceMappingURL=project.handlers.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project.handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/project.handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAuBhD,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,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,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,CAiJzB;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,CAuCxB;AAED,wBAAsB,mBAAmB,CACxC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GACvB,OAAO,CAAC,aAAa,CAAC,CAmCxB"}
|
|
@@ -1,309 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Project Resource Handlers
|
|
3
|
-
*
|
|
4
|
-
* Handles all project-related commands:
|
|
5
|
-
* - list: List all projects
|
|
6
|
-
* - show: Show current project, specific project by ID, or projects for a repository
|
|
7
|
-
* - create: Create a new project
|
|
8
|
-
* - update: Update project information
|
|
9
|
-
* - delete: Delete a project
|
|
10
|
-
*/
|
|
11
|
-
import chalk from 'chalk';
|
|
12
|
-
import { ProjectService } from '../services/project-service.js';
|
|
13
|
-
import { BraingridAuth } from '../services/auth.js';
|
|
14
|
-
import { getConfig } from '../utils/config.js';
|
|
15
|
-
import { formatError, getResourceContext } from '../utils/error-formatter.js';
|
|
16
|
-
import { parseProjectId } from '../utils/projects.js';
|
|
17
|
-
import { workspaceManager } from '../utils/workspace-manager.js';
|
|
18
|
-
/**
|
|
19
|
-
* Format pagination or total count display for project list responses
|
|
20
|
-
*/
|
|
21
|
-
function formatProjectListPagination(response) {
|
|
22
|
-
if ('pagination' in response) {
|
|
23
|
-
const totalPages = Math.ceil(response.pagination.total / response.pagination.limit);
|
|
24
|
-
return `Page ${response.pagination.page} of ${totalPages} (${response.pagination.total} total)`;
|
|
25
|
-
}
|
|
26
|
-
return `Total: ${response.total_count || response.projects.length}`;
|
|
27
|
-
}
|
|
28
|
-
function getServices() {
|
|
29
|
-
const config = getConfig();
|
|
30
|
-
const auth = new BraingridAuth(config.apiUrl);
|
|
31
|
-
const projectService = new ProjectService(config.apiUrl, auth);
|
|
32
|
-
return { projectService, auth };
|
|
33
|
-
}
|
|
34
|
-
export async function handleProjectList(opts) {
|
|
35
|
-
try {
|
|
36
|
-
const { projectService, auth } = getServices();
|
|
37
|
-
// Check authentication
|
|
38
|
-
const isAuthenticated = await auth.isAuthenticated();
|
|
39
|
-
if (!isAuthenticated) {
|
|
40
|
-
return {
|
|
41
|
-
success: false,
|
|
42
|
-
message: chalk.red('❌ Not authenticated. Please run `braingrid login` first.'),
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
const response = await projectService.listProjects({
|
|
46
|
-
page: opts.page ? parseInt(opts.page, 10) : 1,
|
|
47
|
-
limit: opts.limit ? parseInt(opts.limit, 10) : 20,
|
|
48
|
-
});
|
|
49
|
-
if (opts.format === 'json') {
|
|
50
|
-
return {
|
|
51
|
-
success: true,
|
|
52
|
-
message: JSON.stringify(response, null, 2),
|
|
53
|
-
data: response,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
// Table format
|
|
57
|
-
if (response.projects.length === 0) {
|
|
58
|
-
return {
|
|
59
|
-
success: true,
|
|
60
|
-
message: chalk.yellow('No projects found.'),
|
|
61
|
-
data: response,
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
let output = chalk.bold('📋 Projects\n\n');
|
|
65
|
-
output +=
|
|
66
|
-
'ID Short ID Name Created\n';
|
|
67
|
-
output += '─'.repeat(100) + '\n';
|
|
68
|
-
for (const project of response.projects) {
|
|
69
|
-
const id = project.id.padEnd(36);
|
|
70
|
-
const shortId = project.short_id.padEnd(11);
|
|
71
|
-
const name = project.name.substring(0, 28).padEnd(28);
|
|
72
|
-
const created = new Date(project.created_at).toLocaleDateString();
|
|
73
|
-
output += `${id} ${shortId} ${name} ${created}\n`;
|
|
74
|
-
}
|
|
75
|
-
output += '\n';
|
|
76
|
-
output += formatProjectListPagination(response);
|
|
77
|
-
return {
|
|
78
|
-
success: true,
|
|
79
|
-
message: output,
|
|
80
|
-
data: response,
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
catch (error) {
|
|
84
|
-
return {
|
|
85
|
-
success: false,
|
|
86
|
-
message: chalk.red(`❌ ${formatError(error, 'listing projects')}`),
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
export async function handleProjectShow(opts) {
|
|
91
|
-
try {
|
|
92
|
-
const { projectService, auth } = getServices();
|
|
93
|
-
// Check authentication
|
|
94
|
-
const isAuthenticated = await auth.isAuthenticated();
|
|
95
|
-
if (!isAuthenticated) {
|
|
96
|
-
return {
|
|
97
|
-
success: false,
|
|
98
|
-
message: chalk.red('❌ Not authenticated. Please run `braingrid login` first.'),
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
// Case 1: Specific project ID provided - show that project
|
|
102
|
-
if (opts.id) {
|
|
103
|
-
const normalizedId = parseProjectId(opts.id);
|
|
104
|
-
const project = await projectService.getProject(normalizedId);
|
|
105
|
-
if (opts.format === 'json') {
|
|
106
|
-
return {
|
|
107
|
-
success: true,
|
|
108
|
-
message: JSON.stringify(project, null, 2),
|
|
109
|
-
data: project,
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
let output = chalk.bold(`\n📁 Project: ${project.name}\n\n`);
|
|
113
|
-
output += `${chalk.bold('ID:')} ${project.id}\n`;
|
|
114
|
-
output += `${chalk.bold('Short ID:')} ${project.short_id}\n`;
|
|
115
|
-
output += `${chalk.bold('Name:')} ${project.name}\n`;
|
|
116
|
-
if (project.description) {
|
|
117
|
-
output += `${chalk.bold('Description:')} ${project.description}\n`;
|
|
118
|
-
}
|
|
119
|
-
output += `${chalk.bold('Created:')} ${new Date(project.created_at).toLocaleString()}\n`;
|
|
120
|
-
output += `${chalk.bold('Updated:')} ${new Date(project.updated_at).toLocaleString()}\n`;
|
|
121
|
-
return {
|
|
122
|
-
success: true,
|
|
123
|
-
message: output,
|
|
124
|
-
data: project,
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
// Case 2: Repository flag provided - list all projects for that repository
|
|
128
|
-
const repoInput = opts.repository || opts.repo;
|
|
129
|
-
if (repoInput) {
|
|
130
|
-
const parts = repoInput.split('/');
|
|
131
|
-
if (parts.length !== 2) {
|
|
132
|
-
return {
|
|
133
|
-
success: false,
|
|
134
|
-
message: chalk.red('❌ Invalid repository format. Use: --repository owner/name (e.g., --repository microsoft/vscode)'),
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
const [repositoryOwner, repositoryName] = parts;
|
|
138
|
-
const response = await projectService.listProjects({
|
|
139
|
-
repository_owner: repositoryOwner,
|
|
140
|
-
repository_name: repositoryName,
|
|
141
|
-
page: opts.page ? parseInt(opts.page, 10) : 1,
|
|
142
|
-
limit: opts.limit ? parseInt(opts.limit, 10) : 20,
|
|
143
|
-
});
|
|
144
|
-
if (opts.format === 'json') {
|
|
145
|
-
return {
|
|
146
|
-
success: true,
|
|
147
|
-
message: JSON.stringify(response, null, 2),
|
|
148
|
-
data: response,
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
// Table format
|
|
152
|
-
const repoDisplay = chalk.cyan(`${repositoryOwner}/${repositoryName}`);
|
|
153
|
-
if (response.projects.length === 0) {
|
|
154
|
-
return {
|
|
155
|
-
success: true,
|
|
156
|
-
message: chalk.yellow(`No projects found for repository ${repoDisplay}`),
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
let output = chalk.bold(`📋 Projects for ${repoDisplay}\n\n`);
|
|
160
|
-
output +=
|
|
161
|
-
'ID Short ID Name Created\n';
|
|
162
|
-
output += '─'.repeat(100) + '\n';
|
|
163
|
-
for (const project of response.projects) {
|
|
164
|
-
const id = project.id.padEnd(36);
|
|
165
|
-
const shortId = project.short_id.padEnd(11);
|
|
166
|
-
const name = project.name.substring(0, 28).padEnd(28);
|
|
167
|
-
const created = new Date(project.created_at).toLocaleDateString();
|
|
168
|
-
output += `${id} ${shortId} ${name} ${created}\n`;
|
|
169
|
-
}
|
|
170
|
-
output += '\n';
|
|
171
|
-
output += formatProjectListPagination(response);
|
|
172
|
-
return {
|
|
173
|
-
success: true,
|
|
174
|
-
message: output,
|
|
175
|
-
data: response,
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
// Case 3: No arguments - show initialized project from workspace
|
|
179
|
-
const workspace = await workspaceManager.getProject();
|
|
180
|
-
if (!workspace.success) {
|
|
181
|
-
return {
|
|
182
|
-
success: false,
|
|
183
|
-
message: workspace.error,
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
const project = await projectService.getProject(workspace.projectId);
|
|
187
|
-
if (opts.format === 'json') {
|
|
188
|
-
return {
|
|
189
|
-
success: true,
|
|
190
|
-
message: JSON.stringify(project, null, 2),
|
|
191
|
-
data: project,
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
let output = chalk.bold(`\n📁 Project: ${project.name}\n\n`);
|
|
195
|
-
output += `${chalk.bold('ID:')} ${project.id}\n`;
|
|
196
|
-
output += `${chalk.bold('Short ID:')} ${project.short_id}\n`;
|
|
197
|
-
output += `${chalk.bold('Name:')} ${project.name}\n`;
|
|
198
|
-
if (project.description) {
|
|
199
|
-
output += `${chalk.bold('Description:')} ${project.description}\n`;
|
|
200
|
-
}
|
|
201
|
-
output += `${chalk.bold('Created:')} ${new Date(project.created_at).toLocaleString()}\n`;
|
|
202
|
-
output += `${chalk.bold('Updated:')} ${new Date(project.updated_at).toLocaleString()}\n`;
|
|
203
|
-
return {
|
|
204
|
-
success: true,
|
|
205
|
-
message: output,
|
|
206
|
-
data: project,
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
catch (error) {
|
|
210
|
-
return {
|
|
211
|
-
success: false,
|
|
212
|
-
message: chalk.red(`❌ ${formatError(error, 'showing project')}`),
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
export async function handleProjectCreate(opts) {
|
|
217
|
-
try {
|
|
218
|
-
const { projectService, auth } = getServices();
|
|
219
|
-
const isAuthenticated = await auth.isAuthenticated();
|
|
220
|
-
if (!isAuthenticated) {
|
|
221
|
-
return {
|
|
222
|
-
success: false,
|
|
223
|
-
message: chalk.red('❌ Not authenticated. Please run `braingrid login` first.'),
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
const project = await projectService.createProject({
|
|
227
|
-
name: opts.name,
|
|
228
|
-
description: opts.description,
|
|
229
|
-
});
|
|
230
|
-
return {
|
|
231
|
-
success: true,
|
|
232
|
-
message: chalk.green(`✅ Created project ${project.short_id}: ${project.name}`),
|
|
233
|
-
data: project,
|
|
234
|
-
};
|
|
235
|
-
}
|
|
236
|
-
catch (error) {
|
|
237
|
-
return {
|
|
238
|
-
success: false,
|
|
239
|
-
message: chalk.red(`❌ ${formatError(error, 'creating project')}`),
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
export async function handleProjectUpdate(id, opts) {
|
|
244
|
-
try {
|
|
245
|
-
const { projectService, auth } = getServices();
|
|
246
|
-
const isAuthenticated = await auth.isAuthenticated();
|
|
247
|
-
if (!isAuthenticated) {
|
|
248
|
-
return {
|
|
249
|
-
success: false,
|
|
250
|
-
message: chalk.red('❌ Not authenticated. Please run `braingrid login` first.'),
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
if (!opts.name && !opts.description) {
|
|
254
|
-
return {
|
|
255
|
-
success: false,
|
|
256
|
-
message: chalk.red('❌ Please provide at least one field to update (--name or --description)'),
|
|
257
|
-
};
|
|
258
|
-
}
|
|
259
|
-
// Normalize the project ID
|
|
260
|
-
const normalizedId = parseProjectId(id);
|
|
261
|
-
const project = await projectService.updateProject(normalizedId, {
|
|
262
|
-
name: opts.name,
|
|
263
|
-
description: opts.description,
|
|
264
|
-
});
|
|
265
|
-
return {
|
|
266
|
-
success: true,
|
|
267
|
-
message: chalk.green(`✅ Updated project ${project.short_id}: ${project.name}`),
|
|
268
|
-
data: project,
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
catch (error) {
|
|
272
|
-
return {
|
|
273
|
-
success: false,
|
|
274
|
-
message: chalk.red(`❌ ${formatError(error, getResourceContext('project', id))}`),
|
|
275
|
-
};
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
export async function handleProjectDelete(id, opts) {
|
|
279
|
-
try {
|
|
280
|
-
const { projectService, auth } = getServices();
|
|
281
|
-
const isAuthenticated = await auth.isAuthenticated();
|
|
282
|
-
if (!isAuthenticated) {
|
|
283
|
-
return {
|
|
284
|
-
success: false,
|
|
285
|
-
message: chalk.red('❌ Not authenticated. Please run `braingrid login` first.'),
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
if (!opts.force) {
|
|
289
|
-
return {
|
|
290
|
-
success: false,
|
|
291
|
-
message: chalk.yellow('⚠️ Deleting a project is permanent. Use --force to confirm deletion.'),
|
|
292
|
-
};
|
|
293
|
-
}
|
|
294
|
-
// Normalize the project ID
|
|
295
|
-
const normalizedId = parseProjectId(id);
|
|
296
|
-
await projectService.deleteProject(normalizedId);
|
|
297
|
-
return {
|
|
298
|
-
success: true,
|
|
299
|
-
message: chalk.green(`✅ Deleted project ${id}`),
|
|
300
|
-
};
|
|
301
|
-
}
|
|
302
|
-
catch (error) {
|
|
303
|
-
return {
|
|
304
|
-
success: false,
|
|
305
|
-
message: chalk.red(`❌ ${formatError(error, getResourceContext('project', id))}`),
|
|
306
|
-
};
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
//# sourceMappingURL=project.handlers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project.handlers.js","sourceRoot":"","sources":["../../src/handlers/project.handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Requirement Resource Handlers
|
|
3
|
-
*
|
|
4
|
-
* Handles all requirement-related commands:
|
|
5
|
-
* - list: List all requirements
|
|
6
|
-
* - show: Show requirement details
|
|
7
|
-
* - create: Create a new requirement
|
|
8
|
-
* - update: Update requirement information
|
|
9
|
-
* - delete: Delete a requirement
|
|
10
|
-
*/
|
|
11
|
-
import type { HandlerResult } from './types.js';
|
|
12
|
-
export declare function handleRequirementList(opts: {
|
|
13
|
-
project?: string;
|
|
14
|
-
status?: string;
|
|
15
|
-
format?: string;
|
|
16
|
-
page?: string;
|
|
17
|
-
limit?: string;
|
|
18
|
-
}): Promise<HandlerResult>;
|
|
19
|
-
export declare function handleRequirementShow(id: string): Promise<HandlerResult>;
|
|
20
|
-
export declare function handleRequirementCreate(opts: {
|
|
21
|
-
project?: string;
|
|
22
|
-
prompt: string;
|
|
23
|
-
repositories?: string;
|
|
24
|
-
}): Promise<HandlerResult>;
|
|
25
|
-
export declare function handleRequirementUpdate(id: string, opts: {
|
|
26
|
-
status?: string;
|
|
27
|
-
name?: string;
|
|
28
|
-
}): Promise<HandlerResult>;
|
|
29
|
-
export declare function handleRequirementDelete(id: string, opts: {
|
|
30
|
-
force?: boolean;
|
|
31
|
-
}): Promise<HandlerResult>;
|
|
32
|
-
//# sourceMappingURL=requirement.handlers.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"requirement.handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/requirement.handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,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,CAyEzB;AAED,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAuD9E;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,CAyCzB;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,CAqCxB;AAED,wBAAsB,uBAAuB,CAC5C,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GACvB,OAAO,CAAC,aAAa,CAAC,CAmCxB"}
|
|
@@ -1,264 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Requirement Resource Handlers
|
|
3
|
-
*
|
|
4
|
-
* Handles all requirement-related commands:
|
|
5
|
-
* - list: List all requirements
|
|
6
|
-
* - show: Show requirement details
|
|
7
|
-
* - create: Create a new requirement
|
|
8
|
-
* - update: Update requirement information
|
|
9
|
-
* - delete: Delete a requirement
|
|
10
|
-
*/
|
|
11
|
-
import chalk from 'chalk';
|
|
12
|
-
import { RequirementService } from '../services/requirement-service.js';
|
|
13
|
-
import { BraingridAuth } from '../services/auth.js';
|
|
14
|
-
import { getConfig } from '../utils/config.js';
|
|
15
|
-
import { formatError, getResourceContext } from '../utils/error-formatter.js';
|
|
16
|
-
import { workspaceManager } from '../utils/workspace-manager.js';
|
|
17
|
-
import { normalizeRequirementId } from '../utils/requirements.js';
|
|
18
|
-
function getServices() {
|
|
19
|
-
const config = getConfig();
|
|
20
|
-
const auth = new BraingridAuth(config.apiUrl);
|
|
21
|
-
const requirementService = new RequirementService(config.apiUrl, auth);
|
|
22
|
-
return { requirementService, auth };
|
|
23
|
-
}
|
|
24
|
-
function getStatusEmoji(status) {
|
|
25
|
-
switch (status) {
|
|
26
|
-
case 'IDEA':
|
|
27
|
-
return '💡';
|
|
28
|
-
case 'PLANNED':
|
|
29
|
-
return '📝';
|
|
30
|
-
case 'IN_PROGRESS':
|
|
31
|
-
return '🚧';
|
|
32
|
-
case 'REVIEW':
|
|
33
|
-
return '👀';
|
|
34
|
-
case 'COMPLETED':
|
|
35
|
-
return '✅';
|
|
36
|
-
case 'CANCELLED':
|
|
37
|
-
return '❌';
|
|
38
|
-
default:
|
|
39
|
-
return '📋';
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
export async function handleRequirementList(opts) {
|
|
43
|
-
try {
|
|
44
|
-
const { requirementService, auth } = getServices();
|
|
45
|
-
const isAuthenticated = await auth.isAuthenticated();
|
|
46
|
-
if (!isAuthenticated) {
|
|
47
|
-
return {
|
|
48
|
-
success: false,
|
|
49
|
-
message: chalk.red('❌ Not authenticated. Please run `braingrid login` first.'),
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
// Get project ID from workspace
|
|
53
|
-
const workspace = await workspaceManager.getProject(opts.project);
|
|
54
|
-
if (!workspace.success) {
|
|
55
|
-
return {
|
|
56
|
-
success: false,
|
|
57
|
-
message: workspace.error,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
const projectId = workspace.projectId;
|
|
61
|
-
const response = await requirementService.listProjectRequirements(projectId, {
|
|
62
|
-
status: opts.status,
|
|
63
|
-
page: opts.page ? parseInt(opts.page, 10) : 1,
|
|
64
|
-
limit: opts.limit ? parseInt(opts.limit, 10) : 20,
|
|
65
|
-
});
|
|
66
|
-
if (opts.format === 'json') {
|
|
67
|
-
return {
|
|
68
|
-
success: true,
|
|
69
|
-
message: JSON.stringify(response, null, 2),
|
|
70
|
-
data: response,
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
// Table format
|
|
74
|
-
if (response.requirements.length === 0) {
|
|
75
|
-
return {
|
|
76
|
-
success: true,
|
|
77
|
-
message: chalk.yellow('No requirements found.'),
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
let output = chalk.bold('📋 Requirements\n\n');
|
|
81
|
-
output += 'Short ID Status Name Complexity Progress\n';
|
|
82
|
-
output += '─'.repeat(90) + '\n';
|
|
83
|
-
for (const req of response.requirements) {
|
|
84
|
-
const shortId = (req.short_id || req.id.slice(0, 11)).padEnd(11);
|
|
85
|
-
const statusEmoji = getStatusEmoji(req.status);
|
|
86
|
-
const statusText = req.status.padEnd(12);
|
|
87
|
-
const name = req.name.substring(0, 28).padEnd(28);
|
|
88
|
-
const complexity = `${req.complexity}/5`.padEnd(10);
|
|
89
|
-
const progress = req.task_progress ? `${req.task_progress.progress_percentage}%` : 'N/A';
|
|
90
|
-
output += `${shortId} ${statusEmoji} ${statusText} ${name} ${complexity} ${progress}\n`;
|
|
91
|
-
}
|
|
92
|
-
output += '\n';
|
|
93
|
-
output += `Page ${response.pagination.page} of ${Math.ceil(response.pagination.total / response.pagination.limit)}`;
|
|
94
|
-
output += ` (${response.pagination.total} total)`;
|
|
95
|
-
return {
|
|
96
|
-
success: true,
|
|
97
|
-
message: output,
|
|
98
|
-
data: response,
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
catch (error) {
|
|
102
|
-
return {
|
|
103
|
-
success: false,
|
|
104
|
-
message: chalk.red(`❌ ${formatError(error, 'listing requirements')}`),
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
export async function handleRequirementShow(id) {
|
|
109
|
-
try {
|
|
110
|
-
const { requirementService, auth } = getServices();
|
|
111
|
-
const isAuthenticated = await auth.isAuthenticated();
|
|
112
|
-
if (!isAuthenticated) {
|
|
113
|
-
return {
|
|
114
|
-
success: false,
|
|
115
|
-
message: chalk.red('❌ Not authenticated. Please run `braingrid login` first.'),
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
// Normalize the requirement ID
|
|
119
|
-
const normalizedId = normalizeRequirementId(id);
|
|
120
|
-
const requirement = await requirementService.getRequirement(normalizedId);
|
|
121
|
-
const statusEmoji = getStatusEmoji(requirement.status);
|
|
122
|
-
let output = chalk.bold(`\n${statusEmoji} Requirement: ${requirement.name}\n\n`);
|
|
123
|
-
output += `${chalk.bold('ID:')} ${requirement.id}\n`;
|
|
124
|
-
output += `${chalk.bold('Short ID:')} ${requirement.short_id}\n`;
|
|
125
|
-
output += `${chalk.bold('Name:')} ${requirement.name}\n`;
|
|
126
|
-
output += `${chalk.bold('Status:')} ${requirement.status}\n`;
|
|
127
|
-
output += `${chalk.bold('Complexity:')} ${requirement.complexity}/5\n`;
|
|
128
|
-
output += `${chalk.bold('Readiness:')} ${requirement.readiness}/5\n`;
|
|
129
|
-
if (requirement.description) {
|
|
130
|
-
output += `${chalk.bold('Description:')}\n${requirement.description}\n\n`;
|
|
131
|
-
}
|
|
132
|
-
if (requirement.task_progress) {
|
|
133
|
-
output += `${chalk.bold('Progress:')} ${requirement.task_progress.completed}/${requirement.task_progress.total} tasks (${requirement.task_progress.progress_percentage}%)\n`;
|
|
134
|
-
}
|
|
135
|
-
if (requirement.assignee) {
|
|
136
|
-
output += `${chalk.bold('Assigned to:')} ${requirement.assignee.first_name} ${requirement.assignee.last_name} (${requirement.assignee.email})\n`;
|
|
137
|
-
}
|
|
138
|
-
output += `${chalk.bold('Created:')} ${new Date(requirement.created_at).toLocaleString()}\n`;
|
|
139
|
-
output += `${chalk.bold('Updated:')} ${new Date(requirement.updated_at).toLocaleString()}\n`;
|
|
140
|
-
if (requirement.tasks && requirement.tasks.length > 0) {
|
|
141
|
-
output += `\n${chalk.bold('Tasks:')}\n`;
|
|
142
|
-
for (const task of requirement.tasks) {
|
|
143
|
-
const taskEmoji = getStatusEmoji(task.status);
|
|
144
|
-
output += ` ${taskEmoji} ${task.number}. ${task.title} (${task.status})\n`;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
return {
|
|
148
|
-
success: true,
|
|
149
|
-
message: output,
|
|
150
|
-
data: requirement,
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
catch (error) {
|
|
154
|
-
return {
|
|
155
|
-
success: false,
|
|
156
|
-
message: chalk.red(`❌ ${formatError(error, getResourceContext('requirement', id))}`),
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
export async function handleRequirementCreate(opts) {
|
|
161
|
-
try {
|
|
162
|
-
const { requirementService, auth } = getServices();
|
|
163
|
-
const isAuthenticated = await auth.isAuthenticated();
|
|
164
|
-
if (!isAuthenticated) {
|
|
165
|
-
return {
|
|
166
|
-
success: false,
|
|
167
|
-
message: chalk.red('❌ Not authenticated. Please run `braingrid login` first.'),
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
// Get project ID from workspace
|
|
171
|
-
const workspace = await workspaceManager.getProject(opts.project);
|
|
172
|
-
if (!workspace.success) {
|
|
173
|
-
return {
|
|
174
|
-
success: false,
|
|
175
|
-
message: workspace.error,
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
const projectId = workspace.projectId;
|
|
179
|
-
const repositories = opts.repositories ? opts.repositories.split(',').map(r => r.trim()) : [];
|
|
180
|
-
const requirement = await requirementService.createProjectRequirement(projectId, {
|
|
181
|
-
prompt: opts.prompt,
|
|
182
|
-
repositories,
|
|
183
|
-
return_content: 0,
|
|
184
|
-
});
|
|
185
|
-
return {
|
|
186
|
-
success: true,
|
|
187
|
-
message: chalk.green(`✅ Created requirement ${requirement.short_id}: ${requirement.name}`),
|
|
188
|
-
data: requirement,
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
catch (error) {
|
|
192
|
-
return {
|
|
193
|
-
success: false,
|
|
194
|
-
message: chalk.red(`❌ ${formatError(error, 'creating requirement')}`),
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
export async function handleRequirementUpdate(id, opts) {
|
|
199
|
-
try {
|
|
200
|
-
const { requirementService, auth } = getServices();
|
|
201
|
-
const isAuthenticated = await auth.isAuthenticated();
|
|
202
|
-
if (!isAuthenticated) {
|
|
203
|
-
return {
|
|
204
|
-
success: false,
|
|
205
|
-
message: chalk.red('❌ Not authenticated. Please run `braingrid login` first.'),
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
if (!opts.status && !opts.name) {
|
|
209
|
-
return {
|
|
210
|
-
success: false,
|
|
211
|
-
message: chalk.red('❌ Please provide at least one field to update (--status or --name)'),
|
|
212
|
-
};
|
|
213
|
-
}
|
|
214
|
-
// Normalize the requirement ID
|
|
215
|
-
const normalizedId = normalizeRequirementId(id);
|
|
216
|
-
const requirement = await requirementService.updateRequirement(normalizedId, {
|
|
217
|
-
status: opts.status,
|
|
218
|
-
name: opts.name,
|
|
219
|
-
});
|
|
220
|
-
return {
|
|
221
|
-
success: true,
|
|
222
|
-
message: chalk.green(`✅ Updated requirement ${requirement.short_id}: ${requirement.name}`),
|
|
223
|
-
data: requirement,
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
catch (error) {
|
|
227
|
-
return {
|
|
228
|
-
success: false,
|
|
229
|
-
message: chalk.red(`❌ ${formatError(error, getResourceContext('requirement', id))}`),
|
|
230
|
-
};
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
export async function handleRequirementDelete(id, opts) {
|
|
234
|
-
try {
|
|
235
|
-
const { requirementService, auth } = getServices();
|
|
236
|
-
const isAuthenticated = await auth.isAuthenticated();
|
|
237
|
-
if (!isAuthenticated) {
|
|
238
|
-
return {
|
|
239
|
-
success: false,
|
|
240
|
-
message: chalk.red('❌ Not authenticated. Please run `braingrid login` first.'),
|
|
241
|
-
};
|
|
242
|
-
}
|
|
243
|
-
if (!opts.force) {
|
|
244
|
-
return {
|
|
245
|
-
success: false,
|
|
246
|
-
message: chalk.yellow('⚠️ Deleting a requirement is permanent. Use --force to confirm deletion.'),
|
|
247
|
-
};
|
|
248
|
-
}
|
|
249
|
-
// Normalize the requirement ID
|
|
250
|
-
const normalizedId = normalizeRequirementId(id);
|
|
251
|
-
await requirementService.deleteRequirement(normalizedId);
|
|
252
|
-
return {
|
|
253
|
-
success: true,
|
|
254
|
-
message: chalk.green(`✅ Deleted requirement ${id}`),
|
|
255
|
-
};
|
|
256
|
-
}
|
|
257
|
-
catch (error) {
|
|
258
|
-
return {
|
|
259
|
-
success: false,
|
|
260
|
-
message: chalk.red(`❌ ${formatError(error, getResourceContext('requirement', id))}`),
|
|
261
|
-
};
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
//# sourceMappingURL=requirement.handlers.js.map
|