@braingrid/cli 0.1.3 → 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.
Files changed (243) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +54 -39
  3. package/dist/chunk-KNVWIF3L.js +401 -0
  4. package/dist/chunk-KNVWIF3L.js.map +1 -0
  5. package/dist/cli.js +6229 -290
  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 +40 -13
  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/agent.handlers.d.ts +0 -12
  17. package/dist/handlers/agent.handlers.d.ts.map +0 -1
  18. package/dist/handlers/agent.handlers.js +0 -130
  19. package/dist/handlers/agent.handlers.js.map +0 -1
  20. package/dist/handlers/auth.handlers.d.ts +0 -19
  21. package/dist/handlers/auth.handlers.d.ts.map +0 -1
  22. package/dist/handlers/auth.handlers.js +0 -177
  23. package/dist/handlers/auth.handlers.js.map +0 -1
  24. package/dist/handlers/index.d.ts +0 -14
  25. package/dist/handlers/index.d.ts.map +0 -1
  26. package/dist/handlers/index.js +0 -14
  27. package/dist/handlers/index.js.map +0 -1
  28. package/dist/handlers/init.handlers.d.ts +0 -10
  29. package/dist/handlers/init.handlers.d.ts.map +0 -1
  30. package/dist/handlers/init.handlers.js +0 -638
  31. package/dist/handlers/init.handlers.js.map +0 -1
  32. package/dist/handlers/project.handlers.d.ts +0 -36
  33. package/dist/handlers/project.handlers.d.ts.map +0 -1
  34. package/dist/handlers/project.handlers.js +0 -309
  35. package/dist/handlers/project.handlers.js.map +0 -1
  36. package/dist/handlers/requirement.handlers.d.ts +0 -32
  37. package/dist/handlers/requirement.handlers.d.ts.map +0 -1
  38. package/dist/handlers/requirement.handlers.js +0 -264
  39. package/dist/handlers/requirement.handlers.js.map +0 -1
  40. package/dist/handlers/status.handlers.d.ts +0 -12
  41. package/dist/handlers/status.handlers.d.ts.map +0 -1
  42. package/dist/handlers/status.handlers.js +0 -212
  43. package/dist/handlers/status.handlers.js.map +0 -1
  44. package/dist/handlers/task.handlers.d.ts +0 -29
  45. package/dist/handlers/task.handlers.d.ts.map +0 -1
  46. package/dist/handlers/task.handlers.js +0 -326
  47. package/dist/handlers/task.handlers.js.map +0 -1
  48. package/dist/handlers/types.d.ts +0 -10
  49. package/dist/handlers/types.d.ts.map +0 -1
  50. package/dist/handlers/types.js +0 -5
  51. package/dist/handlers/types.js.map +0 -1
  52. package/dist/handlers/update.handlers.d.ts +0 -16
  53. package/dist/handlers/update.handlers.d.ts.map +0 -1
  54. package/dist/handlers/update.handlers.js +0 -119
  55. package/dist/handlers/update.handlers.js.map +0 -1
  56. package/dist/rpc/registry.d.ts +0 -97
  57. package/dist/rpc/registry.d.ts.map +0 -1
  58. package/dist/rpc/registry.js +0 -119
  59. package/dist/rpc/registry.js.map +0 -1
  60. package/dist/rpc/server.d.ts +0 -78
  61. package/dist/rpc/server.d.ts.map +0 -1
  62. package/dist/rpc/server.js +0 -437
  63. package/dist/rpc/server.js.map +0 -1
  64. package/dist/rpc/transport.d.ts +0 -84
  65. package/dist/rpc/transport.d.ts.map +0 -1
  66. package/dist/rpc/transport.js +0 -296
  67. package/dist/rpc/transport.js.map +0 -1
  68. package/dist/services/__mocks__/utils.d.ts +0 -16
  69. package/dist/services/__mocks__/utils.d.ts.map +0 -1
  70. package/dist/services/__mocks__/utils.js +0 -21
  71. package/dist/services/__mocks__/utils.js.map +0 -1
  72. package/dist/services/agent-service.d.ts +0 -29
  73. package/dist/services/agent-service.d.ts.map +0 -1
  74. package/dist/services/agent-service.js +0 -273
  75. package/dist/services/agent-service.js.map +0 -1
  76. package/dist/services/auth.d.ts +0 -59
  77. package/dist/services/auth.d.ts.map +0 -1
  78. package/dist/services/auth.js +0 -549
  79. package/dist/services/auth.js.map +0 -1
  80. package/dist/services/claude.d.ts +0 -18
  81. package/dist/services/claude.d.ts.map +0 -1
  82. package/dist/services/claude.js +0 -164
  83. package/dist/services/claude.js.map +0 -1
  84. package/dist/services/credential-store.d.ts +0 -47
  85. package/dist/services/credential-store.d.ts.map +0 -1
  86. package/dist/services/credential-store.js +0 -89
  87. package/dist/services/credential-store.js.map +0 -1
  88. package/dist/services/internal/github-service.d.ts +0 -67
  89. package/dist/services/internal/github-service.d.ts.map +0 -1
  90. package/dist/services/internal/github-service.js +0 -81
  91. package/dist/services/internal/github-service.js.map +0 -1
  92. package/dist/services/internal/repository-service.d.ts +0 -79
  93. package/dist/services/internal/repository-service.d.ts.map +0 -1
  94. package/dist/services/internal/repository-service.js +0 -88
  95. package/dist/services/internal/repository-service.js.map +0 -1
  96. package/dist/services/oauth2-auth.d.ts +0 -76
  97. package/dist/services/oauth2-auth.d.ts.map +0 -1
  98. package/dist/services/oauth2-auth.js +0 -451
  99. package/dist/services/oauth2-auth.js.map +0 -1
  100. package/dist/services/project-service.d.ts +0 -24
  101. package/dist/services/project-service.d.ts.map +0 -1
  102. package/dist/services/project-service.js +0 -60
  103. package/dist/services/project-service.js.map +0 -1
  104. package/dist/services/requirement-service.d.ts +0 -32
  105. package/dist/services/requirement-service.d.ts.map +0 -1
  106. package/dist/services/requirement-service.js +0 -91
  107. package/dist/services/requirement-service.js.map +0 -1
  108. package/dist/services/task-service.d.ts +0 -22
  109. package/dist/services/task-service.d.ts.map +0 -1
  110. package/dist/services/task-service.js +0 -52
  111. package/dist/services/task-service.js.map +0 -1
  112. package/dist/types/api.d.ts +0 -16
  113. package/dist/types/api.d.ts.map +0 -1
  114. package/dist/types/api.js +0 -5
  115. package/dist/types/api.js.map +0 -1
  116. package/dist/types/auth.d.ts +0 -73
  117. package/dist/types/auth.d.ts.map +0 -1
  118. package/dist/types/auth.js +0 -2
  119. package/dist/types/auth.js.map +0 -1
  120. package/dist/types/claude.d.ts +0 -22
  121. package/dist/types/claude.d.ts.map +0 -1
  122. package/dist/types/claude.js +0 -2
  123. package/dist/types/claude.js.map +0 -1
  124. package/dist/types/github.d.ts +0 -105
  125. package/dist/types/github.d.ts.map +0 -1
  126. package/dist/types/github.js +0 -6
  127. package/dist/types/github.js.map +0 -1
  128. package/dist/types/local-project.d.ts +0 -30
  129. package/dist/types/local-project.d.ts.map +0 -1
  130. package/dist/types/local-project.js +0 -24
  131. package/dist/types/local-project.js.map +0 -1
  132. package/dist/types/project.d.ts +0 -56
  133. package/dist/types/project.d.ts.map +0 -1
  134. package/dist/types/project.js +0 -5
  135. package/dist/types/project.js.map +0 -1
  136. package/dist/types/requirement.d.ts +0 -69
  137. package/dist/types/requirement.d.ts.map +0 -1
  138. package/dist/types/requirement.js +0 -5
  139. package/dist/types/requirement.js.map +0 -1
  140. package/dist/types/task.d.ts +0 -44
  141. package/dist/types/task.d.ts.map +0 -1
  142. package/dist/types/task.js +0 -5
  143. package/dist/types/task.js.map +0 -1
  144. package/dist/utils/axios-retry.d.ts +0 -25
  145. package/dist/utils/axios-retry.d.ts.map +0 -1
  146. package/dist/utils/axios-retry.js +0 -174
  147. package/dist/utils/axios-retry.js.map +0 -1
  148. package/dist/utils/axios-with-auth.d.ts +0 -10
  149. package/dist/utils/axios-with-auth.d.ts.map +0 -1
  150. package/dist/utils/axios-with-auth.js +0 -118
  151. package/dist/utils/axios-with-auth.js.map +0 -1
  152. package/dist/utils/cli-tools.d.ts +0 -30
  153. package/dist/utils/cli-tools.d.ts.map +0 -1
  154. package/dist/utils/cli-tools.js +0 -199
  155. package/dist/utils/cli-tools.js.map +0 -1
  156. package/dist/utils/command-execution.d.ts +0 -30
  157. package/dist/utils/command-execution.d.ts.map +0 -1
  158. package/dist/utils/command-execution.js +0 -264
  159. package/dist/utils/command-execution.js.map +0 -1
  160. package/dist/utils/command-parser.d.ts +0 -85
  161. package/dist/utils/command-parser.d.ts.map +0 -1
  162. package/dist/utils/command-parser.js +0 -287
  163. package/dist/utils/command-parser.js.map +0 -1
  164. package/dist/utils/config.d.ts +0 -10
  165. package/dist/utils/config.d.ts.map +0 -1
  166. package/dist/utils/config.js +0 -77
  167. package/dist/utils/config.js.map +0 -1
  168. package/dist/utils/error-formatter.d.ts +0 -17
  169. package/dist/utils/error-formatter.d.ts.map +0 -1
  170. package/dist/utils/error-formatter.js +0 -115
  171. package/dist/utils/error-formatter.js.map +0 -1
  172. package/dist/utils/formatting.d.ts +0 -10
  173. package/dist/utils/formatting.d.ts.map +0 -1
  174. package/dist/utils/formatting.js +0 -122
  175. package/dist/utils/formatting.js.map +0 -1
  176. package/dist/utils/gh-installer.d.ts +0 -31
  177. package/dist/utils/gh-installer.d.ts.map +0 -1
  178. package/dist/utils/gh-installer.js +0 -296
  179. package/dist/utils/gh-installer.js.map +0 -1
  180. package/dist/utils/git-installer.d.ts +0 -31
  181. package/dist/utils/git-installer.d.ts.map +0 -1
  182. package/dist/utils/git-installer.js +0 -290
  183. package/dist/utils/git-installer.js.map +0 -1
  184. package/dist/utils/git.d.ts +0 -60
  185. package/dist/utils/git.d.ts.map +0 -1
  186. package/dist/utils/git.js +0 -144
  187. package/dist/utils/git.js.map +0 -1
  188. package/dist/utils/github-repo.d.ts +0 -43
  189. package/dist/utils/github-repo.d.ts.map +0 -1
  190. package/dist/utils/github-repo.js +0 -113
  191. package/dist/utils/github-repo.js.map +0 -1
  192. package/dist/utils/id-normalization.d.ts +0 -26
  193. package/dist/utils/id-normalization.d.ts.map +0 -1
  194. package/dist/utils/id-normalization.js +0 -45
  195. package/dist/utils/id-normalization.js.map +0 -1
  196. package/dist/utils/jwt.d.ts +0 -45
  197. package/dist/utils/jwt.d.ts.map +0 -1
  198. package/dist/utils/jwt.js +0 -64
  199. package/dist/utils/jwt.js.map +0 -1
  200. package/dist/utils/local-store.d.ts +0 -36
  201. package/dist/utils/local-store.d.ts.map +0 -1
  202. package/dist/utils/local-store.js +0 -94
  203. package/dist/utils/local-store.js.map +0 -1
  204. package/dist/utils/logger.d.ts +0 -36
  205. package/dist/utils/logger.d.ts.map +0 -1
  206. package/dist/utils/logger.js +0 -176
  207. package/dist/utils/logger.js.map +0 -1
  208. package/dist/utils/package-manager-installer.d.ts +0 -36
  209. package/dist/utils/package-manager-installer.d.ts.map +0 -1
  210. package/dist/utils/package-manager-installer.js +0 -106
  211. package/dist/utils/package-manager-installer.js.map +0 -1
  212. package/dist/utils/package-manager.d.ts +0 -31
  213. package/dist/utils/package-manager.d.ts.map +0 -1
  214. package/dist/utils/package-manager.js +0 -133
  215. package/dist/utils/package-manager.js.map +0 -1
  216. package/dist/utils/projects.d.ts +0 -23
  217. package/dist/utils/projects.d.ts.map +0 -1
  218. package/dist/utils/projects.js +0 -36
  219. package/dist/utils/projects.js.map +0 -1
  220. package/dist/utils/repository-access.d.ts +0 -89
  221. package/dist/utils/repository-access.d.ts.map +0 -1
  222. package/dist/utils/repository-access.js +0 -132
  223. package/dist/utils/repository-access.js.map +0 -1
  224. package/dist/utils/requirements.d.ts +0 -43
  225. package/dist/utils/requirements.d.ts.map +0 -1
  226. package/dist/utils/requirements.js +0 -79
  227. package/dist/utils/requirements.js.map +0 -1
  228. package/dist/utils/spinner.d.ts +0 -47
  229. package/dist/utils/spinner.d.ts.map +0 -1
  230. package/dist/utils/spinner.js +0 -101
  231. package/dist/utils/spinner.js.map +0 -1
  232. package/dist/utils/status-parser.d.ts +0 -95
  233. package/dist/utils/status-parser.d.ts.map +0 -1
  234. package/dist/utils/status-parser.js +0 -205
  235. package/dist/utils/status-parser.js.map +0 -1
  236. package/dist/utils/tasks.d.ts +0 -21
  237. package/dist/utils/tasks.d.ts.map +0 -1
  238. package/dist/utils/tasks.js +0 -63
  239. package/dist/utils/tasks.js.map +0 -1
  240. package/dist/utils/workspace-manager.d.ts +0 -65
  241. package/dist/utils/workspace-manager.d.ts.map +0 -1
  242. package/dist/utils/workspace-manager.js +0 -98
  243. 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