@braingrid/cli 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/README.md +164 -0
  2. package/dist/.build-info.json +9 -0
  3. package/dist/build-config.d.ts +25 -0
  4. package/dist/build-config.d.ts.map +1 -0
  5. package/dist/build-config.js +27 -0
  6. package/dist/build-config.js.map +1 -0
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +246 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/handlers/auth.handlers.d.ts +13 -0
  12. package/dist/handlers/auth.handlers.d.ts.map +1 -0
  13. package/dist/handlers/auth.handlers.js +99 -0
  14. package/dist/handlers/auth.handlers.js.map +1 -0
  15. package/dist/handlers/index.d.ts +11 -0
  16. package/dist/handlers/index.d.ts.map +1 -0
  17. package/dist/handlers/index.js +11 -0
  18. package/dist/handlers/index.js.map +1 -0
  19. package/dist/handlers/project.handlers.d.ts +29 -0
  20. package/dist/handlers/project.handlers.d.ts.map +1 -0
  21. package/dist/handlers/project.handlers.js +200 -0
  22. package/dist/handlers/project.handlers.js.map +1 -0
  23. package/dist/handlers/requirement.handlers.d.ts +32 -0
  24. package/dist/handlers/requirement.handlers.d.ts.map +1 -0
  25. package/dist/handlers/requirement.handlers.js +234 -0
  26. package/dist/handlers/requirement.handlers.js.map +1 -0
  27. package/dist/handlers/status.handlers.d.ts +12 -0
  28. package/dist/handlers/status.handlers.d.ts.map +1 -0
  29. package/dist/handlers/status.handlers.js +209 -0
  30. package/dist/handlers/status.handlers.js.map +1 -0
  31. package/dist/handlers/task.handlers.d.ts +29 -0
  32. package/dist/handlers/task.handlers.d.ts.map +1 -0
  33. package/dist/handlers/task.handlers.js +272 -0
  34. package/dist/handlers/task.handlers.js.map +1 -0
  35. package/dist/handlers/types.d.ts +10 -0
  36. package/dist/handlers/types.d.ts.map +1 -0
  37. package/dist/handlers/types.js +5 -0
  38. package/dist/handlers/types.js.map +1 -0
  39. package/dist/services/auth.d.ts +41 -0
  40. package/dist/services/auth.d.ts.map +1 -0
  41. package/dist/services/auth.js +498 -0
  42. package/dist/services/auth.js.map +1 -0
  43. package/dist/services/claude.d.ts +18 -0
  44. package/dist/services/claude.d.ts.map +1 -0
  45. package/dist/services/claude.js +164 -0
  46. package/dist/services/claude.js.map +1 -0
  47. package/dist/services/context-manager.d.ts +170 -0
  48. package/dist/services/context-manager.d.ts.map +1 -0
  49. package/dist/services/context-manager.js +261 -0
  50. package/dist/services/context-manager.js.map +1 -0
  51. package/dist/services/credential-store.d.ts +47 -0
  52. package/dist/services/credential-store.d.ts.map +1 -0
  53. package/dist/services/credential-store.js +88 -0
  54. package/dist/services/credential-store.js.map +1 -0
  55. package/dist/services/oauth2-auth.d.ts +60 -0
  56. package/dist/services/oauth2-auth.d.ts.map +1 -0
  57. package/dist/services/oauth2-auth.js +377 -0
  58. package/dist/services/oauth2-auth.js.map +1 -0
  59. package/dist/services/project-service.d.ts +22 -0
  60. package/dist/services/project-service.d.ts.map +1 -0
  61. package/dist/services/project-service.js +52 -0
  62. package/dist/services/project-service.js.map +1 -0
  63. package/dist/services/requirement-service.d.ts +32 -0
  64. package/dist/services/requirement-service.d.ts.map +1 -0
  65. package/dist/services/requirement-service.js +91 -0
  66. package/dist/services/requirement-service.js.map +1 -0
  67. package/dist/services/task-service.d.ts +22 -0
  68. package/dist/services/task-service.d.ts.map +1 -0
  69. package/dist/services/task-service.js +52 -0
  70. package/dist/services/task-service.js.map +1 -0
  71. package/dist/test/setup.d.ts +2 -0
  72. package/dist/test/setup.d.ts.map +1 -0
  73. package/dist/test/setup.js +40 -0
  74. package/dist/test/setup.js.map +1 -0
  75. package/dist/types/api.d.ts +16 -0
  76. package/dist/types/api.d.ts.map +1 -0
  77. package/dist/types/api.js +5 -0
  78. package/dist/types/api.js.map +1 -0
  79. package/dist/types/auth.d.ts +68 -0
  80. package/dist/types/auth.d.ts.map +1 -0
  81. package/dist/types/auth.js +2 -0
  82. package/dist/types/auth.js.map +1 -0
  83. package/dist/types/claude.d.ts +22 -0
  84. package/dist/types/claude.d.ts.map +1 -0
  85. package/dist/types/claude.js +2 -0
  86. package/dist/types/claude.js.map +1 -0
  87. package/dist/types/project.d.ts +32 -0
  88. package/dist/types/project.d.ts.map +1 -0
  89. package/dist/types/project.js +5 -0
  90. package/dist/types/project.js.map +1 -0
  91. package/dist/types/requirement.d.ts +69 -0
  92. package/dist/types/requirement.d.ts.map +1 -0
  93. package/dist/types/requirement.js +5 -0
  94. package/dist/types/requirement.js.map +1 -0
  95. package/dist/types/task.d.ts +44 -0
  96. package/dist/types/task.d.ts.map +1 -0
  97. package/dist/types/task.js +5 -0
  98. package/dist/types/task.js.map +1 -0
  99. package/dist/utils/axios-retry.d.ts +25 -0
  100. package/dist/utils/axios-retry.d.ts.map +1 -0
  101. package/dist/utils/axios-retry.js +174 -0
  102. package/dist/utils/axios-retry.js.map +1 -0
  103. package/dist/utils/axios-with-auth.d.ts +10 -0
  104. package/dist/utils/axios-with-auth.d.ts.map +1 -0
  105. package/dist/utils/axios-with-auth.js +118 -0
  106. package/dist/utils/axios-with-auth.js.map +1 -0
  107. package/dist/utils/cli-tools.d.ts +30 -0
  108. package/dist/utils/cli-tools.d.ts.map +1 -0
  109. package/dist/utils/cli-tools.js +131 -0
  110. package/dist/utils/cli-tools.js.map +1 -0
  111. package/dist/utils/command-execution.d.ts +30 -0
  112. package/dist/utils/command-execution.d.ts.map +1 -0
  113. package/dist/utils/command-execution.js +264 -0
  114. package/dist/utils/command-execution.js.map +1 -0
  115. package/dist/utils/command-parser.d.ts +85 -0
  116. package/dist/utils/command-parser.d.ts.map +1 -0
  117. package/dist/utils/command-parser.js +287 -0
  118. package/dist/utils/command-parser.js.map +1 -0
  119. package/dist/utils/config.d.ts +9 -0
  120. package/dist/utils/config.d.ts.map +1 -0
  121. package/dist/utils/config.js +59 -0
  122. package/dist/utils/config.js.map +1 -0
  123. package/dist/utils/error-formatter.d.ts +17 -0
  124. package/dist/utils/error-formatter.d.ts.map +1 -0
  125. package/dist/utils/error-formatter.js +115 -0
  126. package/dist/utils/error-formatter.js.map +1 -0
  127. package/dist/utils/formatting.d.ts +10 -0
  128. package/dist/utils/formatting.d.ts.map +1 -0
  129. package/dist/utils/formatting.js +122 -0
  130. package/dist/utils/formatting.js.map +1 -0
  131. package/dist/utils/git.d.ts +55 -0
  132. package/dist/utils/git.d.ts.map +1 -0
  133. package/dist/utils/git.js +131 -0
  134. package/dist/utils/git.js.map +1 -0
  135. package/dist/utils/jwt.d.ts +45 -0
  136. package/dist/utils/jwt.d.ts.map +1 -0
  137. package/dist/utils/jwt.js +64 -0
  138. package/dist/utils/jwt.js.map +1 -0
  139. package/dist/utils/logger.d.ts +36 -0
  140. package/dist/utils/logger.d.ts.map +1 -0
  141. package/dist/utils/logger.js +176 -0
  142. package/dist/utils/logger.js.map +1 -0
  143. package/dist/utils/requirements.d.ts +28 -0
  144. package/dist/utils/requirements.d.ts.map +1 -0
  145. package/dist/utils/requirements.js +54 -0
  146. package/dist/utils/requirements.js.map +1 -0
  147. package/dist/utils/status-parser.d.ts +95 -0
  148. package/dist/utils/status-parser.d.ts.map +1 -0
  149. package/dist/utils/status-parser.js +189 -0
  150. package/dist/utils/status-parser.js.map +1 -0
  151. package/dist/utils/tasks.d.ts +9 -0
  152. package/dist/utils/tasks.d.ts.map +1 -0
  153. package/dist/utils/tasks.js +38 -0
  154. package/dist/utils/tasks.js.map +1 -0
  155. package/package.json +101 -0
package/README.md ADDED
@@ -0,0 +1,164 @@
1
+ <div align="center">
2
+ <img src="https://www.braingrid.ai/logos/braingrid-symbol-800.png" width="100"/>
3
+ <h1>BrainGrid</h1>
4
+
5
+ <p>Turn thoughts into AI-ready specs and ship 100 faster.</p>
6
+ <h3>A CLI for spec-driven development.</h3>
7
+
8
+ [![npm version](https://img.shields.io/npm/v/@braingridai/cli.svg?color=blue&logo=npm)](https://www.npmjs.com/package/@braingridai/cli)
9
+ [![CI/CD](https://github.com/BrainGridAI/braingrid-cli/actions/workflows/main.yml/badge.svg?branch=main)](https://github.com/BrainGridAI/braingrid-cli/actions/workflows/main.yml)
10
+ </div>
11
+
12
+ ---
13
+
14
+ ## Overview
15
+
16
+ **BrainGrid** helps you turn half-baked thoughts into build-ready specs and perfectly-prompted tasks that AI coding agents like Cursor, or Claude Code, can build fast without breaking things.
17
+
18
+ ## Features
19
+
20
+ **BrainGrid CLI** is the command-line interface for managing your requirements, and tasks on the BrainGrid platform.
21
+
22
+ - šŸ“‹ **Add Requirements to Your Backlog** - Create requirements from prompts and link to repositories
23
+ - ✨ **Refine Requirements** - Update and manage requirements to get them build-ready
24
+ - šŸŽÆ **Break Down into Tasks** - Create perfectly-prompted tasks from requirements
25
+ - šŸ¤– **Fetch Tasks for AI Agents** - Get task prompts to feed to Cursor, Claude Code, and other AI coding tools
26
+ - šŸ“Š **Track Progress** - Manage and update task statuses
27
+ - šŸ’¾ **Multiple Output Formats** - View data as formatted tables or JSON for scripting
28
+ - šŸ” **Environment Detection** - Automatically detect git repository info and installed AI coding tools
29
+
30
+ ---
31
+
32
+ ## Installation
33
+
34
+ ```bash
35
+ # npm
36
+ npm install -g @braingridai/cli
37
+
38
+ # yarn
39
+ yarn global add @braingridai/cli
40
+
41
+ # pnpm
42
+ pnpm add -g @braingridai/cli
43
+ ```
44
+
45
+ > Requires Node.js 18+
46
+
47
+ ---
48
+
49
+ ## QuickStart
50
+
51
+ ### One-Minute Flow
52
+
53
+ ```bash
54
+ # 1. Install globally
55
+ npm install -g @braingridai/cli
56
+
57
+ # 2. Authenticate
58
+ braingrid login
59
+
60
+ # 3. Create a project
61
+ braingrid project create --name "My Awesome Project"
62
+ # Returns: PROJ-1
63
+
64
+ # 4. Create a requirement for your project
65
+ braingrid requirement create -p PROJ-1 --prompt "Add user authentication"
66
+
67
+ # 5. List requirements for the project
68
+ braingrid requirement list -p PROJ-1
69
+
70
+ # 6. Create tasks for a requirement
71
+ braingrid task create -r PROJ-1/REQ-1 --title "Implement login endpoint"
72
+
73
+ # 7. View tasks for a requirement
74
+ braingrid task list -r PROJ-1/REQ-1
75
+ ```
76
+ ---
77
+
78
+ ## Usage
79
+
80
+ BrainGrid CLI uses a resource-oriented command structure: `braingrid <resource> <action> [options]`
81
+
82
+ ### Authentication Commands
83
+
84
+ ```bash
85
+ braingrid login # Authenticate with BrainGrid (OAuth2 PKCE flow)
86
+ braingrid logout # Sign out and clear credentials
87
+ braingrid whoami # Show current user information
88
+ ```
89
+
90
+ ### Project Commands
91
+
92
+ ```bash
93
+ braingrid project list [--format json] [--page 1] [--limit 20]
94
+ braingrid project show <id>
95
+ braingrid project create --name "Project Name" [--description "Description"]
96
+ braingrid project update <id> [--name "New Name"] [--description "New Description"]
97
+ braingrid project delete <id> [--force]
98
+ ```
99
+
100
+ ### Requirement Commands
101
+
102
+ ```bash
103
+ braingrid requirement list -p <project-id> [--status PLANNED|IN_PROGRESS|COMPLETED|CANCELLED] [--format json]
104
+ braingrid requirement show <id>
105
+ braingrid requirement create -p <project-id> --prompt "Requirement description" [--repositories "owner/repo,owner/repo2"]
106
+ braingrid requirement update <id> [--status STATUS] [--name "New Name"]
107
+ braingrid requirement delete <id> [--force]
108
+ ```
109
+
110
+ > **Note:** Use `-p` (short) or `--project` (long) for the project parameter.
111
+
112
+ ### Task Commands
113
+
114
+ ```bash
115
+ braingrid task list -r <req-id> [--format json]
116
+ braingrid task show <id>
117
+ braingrid task create -r <req-id> --title "Task Title" [--content "Description"]
118
+ braingrid task update <id> [--status STATUS] [--title "New Title"]
119
+ braingrid task delete <id> [--force]
120
+ ```
121
+
122
+ > **Note:** Use `-r` (short) or `--requirement` (long) for the requirement parameter.
123
+
124
+ ### Informational Commands
125
+
126
+ ```bash
127
+ braingrid status # Show CLI status (authentication, git repo, configuration)
128
+ braingrid --version # Show CLI version
129
+ braingrid --help # Show help information
130
+ ```
131
+
132
+ ---
133
+
134
+ ## Updating
135
+
136
+ Update to the latest version:
137
+
138
+ ```bash
139
+ # npm
140
+ npm install -g @braingridai/cli@latest
141
+
142
+ # yarn
143
+ yarn global add @braingridai/cli@latest
144
+
145
+ # pnpm
146
+ pnpm add -g @braingridai/cli@latest
147
+ ```
148
+
149
+ ---
150
+
151
+ ## Community
152
+
153
+ Join the BrainGrid community to connect with other AI builders, share workflows, and get help:
154
+
155
+ - [BrainGrid Community](https://www.braingrid.ai/community)
156
+
157
+ ---
158
+
159
+ ## Links
160
+
161
+ - [BrainGrid](https://www.braingrid.ai)
162
+ - [Documentation](https://docs.braingrid.ai)
163
+ - [BrainGrid MCP](https://docs.braingrid.ai/mcp-server/overview)
164
+ - [npm package](https://www.npmjs.com/package/@braingridai/cli)
@@ -0,0 +1,9 @@
1
+ {
2
+ "environment": "production",
3
+ "buildEnv": "production",
4
+ "buildTime": "2025-10-02T22:48:19.468Z",
5
+ "config": {
6
+ "NODE_ENV": "production",
7
+ "BRAINGRID_API_URL": "https://app.braingrid.ai"
8
+ }
9
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * BUILD_ENV is set at build time and determines which configuration to use.
3
+ * - 'production': Uses production URLs, ignores NODE_ENV (for npm published package)
4
+ * - 'development': Allows NODE_ENV to override URLs (for local development)
5
+ */
6
+ export declare const BUILD_ENV: 'production' | 'development';
7
+ /**
8
+ * Production configuration
9
+ * Used when BUILD_ENV === 'production' (npm published package)
10
+ */
11
+ export declare const PRODUCTION_CONFIG: {
12
+ readonly apiUrl: "https://app.braingrid.ai";
13
+ readonly workosAuthUrl: "https://sensitive-harvest-60.authkit.app";
14
+ readonly workosClientId: "client_01K6H010C9K69HSDPM9CQM85S7";
15
+ };
16
+ /**
17
+ * Development configuration
18
+ * Used when BUILD_ENV === 'development' (local development)
19
+ */
20
+ export declare const DEVELOPMENT_CONFIG: {
21
+ readonly apiUrl: "https://app.dev.braingrid.ai";
22
+ readonly workosAuthUrl: "https://balanced-celebration-78-staging.authkit.app";
23
+ readonly workosClientId: "client_01K6H04GF21T4JXNS3JDQM3YNE";
24
+ };
25
+ //# sourceMappingURL=build-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-config.d.ts","sourceRoot":"","sources":["../src/build-config.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,YAAY,GAAG,aAA6B,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;CAIpB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;CAIrB,CAAC"}
@@ -0,0 +1,27 @@
1
+ // Build-time configuration constants
2
+ // These values are replaced during production builds
3
+ /**
4
+ * BUILD_ENV is set at build time and determines which configuration to use.
5
+ * - 'production': Uses production URLs, ignores NODE_ENV (for npm published package)
6
+ * - 'development': Allows NODE_ENV to override URLs (for local development)
7
+ */
8
+ export const BUILD_ENV = 'production';
9
+ /**
10
+ * Production configuration
11
+ * Used when BUILD_ENV === 'production' (npm published package)
12
+ */
13
+ export const PRODUCTION_CONFIG = {
14
+ apiUrl: 'https://app.braingrid.ai',
15
+ workosAuthUrl: 'https://sensitive-harvest-60.authkit.app',
16
+ workosClientId: 'client_01K6H010C9K69HSDPM9CQM85S7',
17
+ };
18
+ /**
19
+ * Development configuration
20
+ * Used when BUILD_ENV === 'development' (local development)
21
+ */
22
+ export const DEVELOPMENT_CONFIG = {
23
+ apiUrl: 'https://app.dev.braingrid.ai',
24
+ workosAuthUrl: 'https://balanced-celebration-78-staging.authkit.app',
25
+ workosClientId: 'client_01K6H04GF21T4JXNS3JDQM3YNE',
26
+ };
27
+ //# sourceMappingURL=build-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-config.js","sourceRoot":"","sources":["../src/build-config.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,qDAAqD;AAErD;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAiC,aAAa,CAAC;AAErE;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAChC,MAAM,EAAE,0BAA0B;IAClC,aAAa,EAAE,0CAA0C;IACzD,cAAc,EAAE,mCAAmC;CAC1C,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IACjC,MAAM,EAAE,8BAA8B;IACtC,aAAa,EAAE,qDAAqD;IACpE,cAAc,EAAE,mCAAmC;CAC1C,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,246 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { createRequire } from 'module';
4
+ import * as handlers from './handlers/index.js';
5
+ const require = createRequire(import.meta.url);
6
+ const packageJson = require('../package.json');
7
+ const program = new Command();
8
+ program
9
+ .name('braingrid')
10
+ .description('BrainGrid CLI - Manage projects, requirements, and tasks')
11
+ .version(packageJson.version)
12
+ .showHelpAfterError('(use --help for usage)');
13
+ // ============================================
14
+ // AUTH COMMANDS
15
+ // ============================================
16
+ program
17
+ .command('login')
18
+ .description('Authenticate with BrainGrid')
19
+ .action(async () => {
20
+ const result = await handlers.handleLogin();
21
+ console.log(result.message);
22
+ if (!result.success) {
23
+ process.exit(1);
24
+ }
25
+ });
26
+ program
27
+ .command('logout')
28
+ .description('Sign out from BrainGrid')
29
+ .action(async () => {
30
+ const result = await handlers.handleLogout();
31
+ console.log(result.message);
32
+ if (!result.success) {
33
+ process.exit(1);
34
+ }
35
+ });
36
+ program
37
+ .command('whoami')
38
+ .description('Show current user information')
39
+ .action(async () => {
40
+ const result = await handlers.handleWhoami();
41
+ console.log(result.message);
42
+ if (!result.success) {
43
+ process.exit(1);
44
+ }
45
+ });
46
+ program
47
+ .command('status')
48
+ .description('Show CLI status (authentication, git, config)')
49
+ .action(async () => {
50
+ const result = await handlers.handleStatus();
51
+ console.log(result.message);
52
+ if (!result.success) {
53
+ process.exit(1);
54
+ }
55
+ });
56
+ // ============================================
57
+ // PROJECT RESOURCE COMMANDS
58
+ // ============================================
59
+ const project = program.command('project').description('Manage projects');
60
+ project
61
+ .command('list')
62
+ .description('List all projects')
63
+ .option('--format <format>', 'output format (table or json)', 'table')
64
+ .option('--page <page>', 'page number for pagination', '1')
65
+ .option('--limit <limit>', 'number of projects per page', '20')
66
+ .action(async (opts) => {
67
+ const result = await handlers.handleProjectList(opts);
68
+ console.log(result.message);
69
+ if (!result.success) {
70
+ process.exit(1);
71
+ }
72
+ });
73
+ project
74
+ .command('show <id>')
75
+ .description('Show project details')
76
+ .action(async (id) => {
77
+ const result = await handlers.handleProjectShow(id);
78
+ console.log(result.message);
79
+ if (!result.success) {
80
+ process.exit(1);
81
+ }
82
+ });
83
+ project
84
+ .command('create')
85
+ .description('Create a new project')
86
+ .requiredOption('--name <name>', 'project name')
87
+ .option('--description <description>', 'project description')
88
+ .action(async (opts) => {
89
+ const result = await handlers.handleProjectCreate(opts);
90
+ console.log(result.message);
91
+ if (!result.success) {
92
+ process.exit(1);
93
+ }
94
+ });
95
+ project
96
+ .command('update <id>')
97
+ .description('Update project information')
98
+ .option('--name <name>', 'new project name')
99
+ .option('--description <description>', 'new project description')
100
+ .action(async (id, opts) => {
101
+ const result = await handlers.handleProjectUpdate(id, opts);
102
+ console.log(result.message);
103
+ if (!result.success) {
104
+ process.exit(1);
105
+ }
106
+ });
107
+ project
108
+ .command('delete <id>')
109
+ .description('Delete a project')
110
+ .option('--force', 'force deletion without confirmation')
111
+ .action(async (id, opts) => {
112
+ const result = await handlers.handleProjectDelete(id, opts);
113
+ console.log(result.message);
114
+ if (!result.success) {
115
+ process.exit(1);
116
+ }
117
+ });
118
+ // ============================================
119
+ // REQUIREMENT RESOURCE COMMANDS
120
+ // ============================================
121
+ const requirement = program.command('requirement').description('Manage requirements');
122
+ requirement
123
+ .command('list')
124
+ .description('List requirements for a project')
125
+ .requiredOption('-p, --project <id>', 'project ID (short ID like PROJ-123 or full UUID)')
126
+ .option('--status <status>', 'filter by status (PLANNED, IN_PROGRESS, COMPLETED, CANCELLED)')
127
+ .option('--format <format>', 'output format (table or json)', 'table')
128
+ .option('--page <page>', 'page number for pagination', '1')
129
+ .option('--limit <limit>', 'number of requirements per page', '20')
130
+ .action(async (opts) => {
131
+ const result = await handlers.handleRequirementList(opts);
132
+ console.log(result.message);
133
+ if (!result.success) {
134
+ process.exit(1);
135
+ }
136
+ });
137
+ requirement
138
+ .command('show <id>')
139
+ .description('Show requirement details')
140
+ .action(async (id) => {
141
+ const result = await handlers.handleRequirementShow(id);
142
+ console.log(result.message);
143
+ if (!result.success) {
144
+ process.exit(1);
145
+ }
146
+ });
147
+ requirement
148
+ .command('create')
149
+ .description('Create a new requirement')
150
+ .requiredOption('-p, --project <id>', 'project ID (short ID like PROJ-123 or full UUID)')
151
+ .requiredOption('--prompt <prompt>', 'requirement prompt/description')
152
+ .option('--repositories <repos>', 'comma-separated list of repositories (owner/repo)')
153
+ .action(async (opts) => {
154
+ const result = await handlers.handleRequirementCreate(opts);
155
+ console.log(result.message);
156
+ if (!result.success) {
157
+ process.exit(1);
158
+ }
159
+ });
160
+ requirement
161
+ .command('update <id>')
162
+ .description('Update requirement information')
163
+ .option('--status <status>', 'new status (PLANNED, IN_PROGRESS, COMPLETED, CANCELLED)')
164
+ .option('--name <name>', 'new requirement name')
165
+ .action(async (id, opts) => {
166
+ const result = await handlers.handleRequirementUpdate(id, opts);
167
+ console.log(result.message);
168
+ if (!result.success) {
169
+ process.exit(1);
170
+ }
171
+ });
172
+ requirement
173
+ .command('delete <id>')
174
+ .description('Delete a requirement')
175
+ .option('--force', 'force deletion without confirmation')
176
+ .action(async (id, opts) => {
177
+ const result = await handlers.handleRequirementDelete(id, opts);
178
+ console.log(result.message);
179
+ if (!result.success) {
180
+ process.exit(1);
181
+ }
182
+ });
183
+ // ============================================
184
+ // TASK RESOURCE COMMANDS
185
+ // ============================================
186
+ const task = program.command('task').description('Manage tasks');
187
+ task
188
+ .command('list')
189
+ .description('List tasks for a requirement')
190
+ .requiredOption('-r, --requirement <id>', 'requirement ID (format: PROJ-123/REQ-456)')
191
+ .option('--format <format>', 'output format (table or json)', 'table')
192
+ .action(async (opts) => {
193
+ const result = await handlers.handleTaskList(opts);
194
+ console.log(result.message);
195
+ if (!result.success) {
196
+ process.exit(1);
197
+ }
198
+ });
199
+ task
200
+ .command('show <id>')
201
+ .description('Show task details')
202
+ .action(async (id) => {
203
+ const result = await handlers.handleTaskShow(id);
204
+ console.log(result.message);
205
+ if (!result.success) {
206
+ process.exit(1);
207
+ }
208
+ });
209
+ task
210
+ .command('create')
211
+ .description('Create a new task')
212
+ .requiredOption('-r, --requirement <id>', 'requirement ID (format: PROJ-123/REQ-456)')
213
+ .requiredOption('--title <title>', 'task title')
214
+ .option('--content <content>', 'task content/description')
215
+ .action(async (opts) => {
216
+ const result = await handlers.handleTaskCreate(opts);
217
+ console.log(result.message);
218
+ if (!result.success) {
219
+ process.exit(1);
220
+ }
221
+ });
222
+ task
223
+ .command('update <id>')
224
+ .description('Update task information')
225
+ .option('--status <status>', 'new status (PLANNED, IN_PROGRESS, COMPLETED, CANCELLED)')
226
+ .option('--title <title>', 'new task title')
227
+ .action(async (id, opts) => {
228
+ const result = await handlers.handleTaskUpdate(id, opts);
229
+ console.log(result.message);
230
+ if (!result.success) {
231
+ process.exit(1);
232
+ }
233
+ });
234
+ task
235
+ .command('delete <id>')
236
+ .description('Delete a task')
237
+ .option('--force', 'force deletion without confirmation')
238
+ .action(async (id, opts) => {
239
+ const result = await handlers.handleTaskDelete(id, opts);
240
+ console.log(result.message);
241
+ if (!result.success) {
242
+ process.exit(1);
243
+ }
244
+ });
245
+ program.parse();
246
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Auth Handlers
3
+ *
4
+ * Handles authentication-related commands:
5
+ * - login: Authenticate with BrainGrid
6
+ * - logout: Sign out from BrainGrid
7
+ * - whoami: Show current user information
8
+ */
9
+ import type { HandlerResult } from './types.js';
10
+ export declare function handleLogin(): Promise<HandlerResult>;
11
+ export declare function handleLogout(): Promise<HandlerResult>;
12
+ export declare function handleWhoami(): Promise<HandlerResult>;
13
+ //# sourceMappingURL=auth.handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/auth.handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAOhD,wBAAsB,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC,CAgC1D;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,aAAa,CAAC,CAgB3D;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,aAAa,CAAC,CAsC3D"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Auth Handlers
3
+ *
4
+ * Handles authentication-related commands:
5
+ * - login: Authenticate with BrainGrid
6
+ * - logout: Sign out from BrainGrid
7
+ * - whoami: Show current user information
8
+ */
9
+ import chalk from 'chalk';
10
+ import { BraingridAuth } from '../services/auth.js';
11
+ import { getConfig } from '../utils/config.js';
12
+ import { formatError } from '../utils/error-formatter.js';
13
+ function getAuth() {
14
+ const config = getConfig();
15
+ return new BraingridAuth(config.apiUrl);
16
+ }
17
+ export async function handleLogin() {
18
+ try {
19
+ const auth = getAuth();
20
+ console.log(chalk.blue('šŸ” Starting OAuth2 authentication flow...'));
21
+ console.log(chalk.dim('Your browser will open to complete authentication.\n'));
22
+ // Set up callback to display auth URL if browser fails to open
23
+ const session = await auth.login((authUrl) => {
24
+ console.log(chalk.dim("If your browser didn't open automatically, visit:"));
25
+ console.log(chalk.bold.cyan(authUrl));
26
+ console.log(chalk.dim('\nWaiting for authentication...\n'));
27
+ });
28
+ if (!session) {
29
+ return {
30
+ success: false,
31
+ message: chalk.red('āŒ Login failed. Please try again.'),
32
+ };
33
+ }
34
+ return {
35
+ success: true,
36
+ message: chalk.green('āœ… Successfully logged in to BrainGrid!'),
37
+ data: session,
38
+ };
39
+ }
40
+ catch (error) {
41
+ return {
42
+ success: false,
43
+ message: chalk.red(`āŒ Login failed: ${formatError(error)}`),
44
+ };
45
+ }
46
+ }
47
+ export async function handleLogout() {
48
+ try {
49
+ const auth = getAuth();
50
+ await auth.clearSession();
51
+ return {
52
+ success: true,
53
+ message: chalk.green('āœ… Successfully logged out.'),
54
+ };
55
+ }
56
+ catch (error) {
57
+ return {
58
+ success: false,
59
+ message: chalk.red(`āŒ Logout failed: ${formatError(error)}`),
60
+ };
61
+ }
62
+ }
63
+ export async function handleWhoami() {
64
+ try {
65
+ const auth = getAuth();
66
+ const isAuthenticated = await auth.isAuthenticated();
67
+ if (!isAuthenticated) {
68
+ return {
69
+ success: false,
70
+ message: chalk.yellow('āš ļø Not logged in. Run `braingrid login` to authenticate.'),
71
+ };
72
+ }
73
+ const session = await auth.getStoredSession();
74
+ if (!session) {
75
+ return {
76
+ success: false,
77
+ message: chalk.red('āŒ No session found.'),
78
+ };
79
+ }
80
+ let output = chalk.bold('\nšŸ‘¤ Current User\n\n');
81
+ output += `${chalk.bold('User ID:')} ${session.user.id}\n`;
82
+ output += `${chalk.bold('Email:')} ${session.user.email}\n`;
83
+ output += `${chalk.bold('Name:')} ${session.user.firstName} ${session.user.lastName}\n`;
84
+ output += `${chalk.bold('Org ID:')} ${session.organization_id}\n`;
85
+ output += `${chalk.bold('Session:')} ${new Date(session.created_at).toLocaleString()}\n`;
86
+ return {
87
+ success: true,
88
+ message: output,
89
+ data: session,
90
+ };
91
+ }
92
+ catch (error) {
93
+ return {
94
+ success: false,
95
+ message: chalk.red(`āŒ ${formatError(error)}`),
96
+ };
97
+ }
98
+ }
99
+ //# sourceMappingURL=auth.handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.handlers.js","sourceRoot":"","sources":["../../src/handlers/auth.handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Handlers Index
3
+ * Exports all handler functions
4
+ */
5
+ export * from './types.js';
6
+ export * from './project.handlers.js';
7
+ export * from './requirement.handlers.js';
8
+ export * from './task.handlers.js';
9
+ export * from './auth.handlers.js';
10
+ export * from './status.handlers.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Handlers Index
3
+ * Exports all handler functions
4
+ */
5
+ export * from './types.js';
6
+ export * from './project.handlers.js';
7
+ export * from './requirement.handlers.js';
8
+ export * from './task.handlers.js';
9
+ export * from './auth.handlers.js';
10
+ export * from './status.handlers.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}