@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.
- package/README.md +164 -0
- package/dist/.build-info.json +9 -0
- package/dist/build-config.d.ts +25 -0
- package/dist/build-config.d.ts.map +1 -0
- package/dist/build-config.js +27 -0
- package/dist/build-config.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +246 -0
- package/dist/cli.js.map +1 -0
- package/dist/handlers/auth.handlers.d.ts +13 -0
- package/dist/handlers/auth.handlers.d.ts.map +1 -0
- package/dist/handlers/auth.handlers.js +99 -0
- package/dist/handlers/auth.handlers.js.map +1 -0
- package/dist/handlers/index.d.ts +11 -0
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/handlers/index.js +11 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/handlers/project.handlers.d.ts +29 -0
- package/dist/handlers/project.handlers.d.ts.map +1 -0
- package/dist/handlers/project.handlers.js +200 -0
- package/dist/handlers/project.handlers.js.map +1 -0
- package/dist/handlers/requirement.handlers.d.ts +32 -0
- package/dist/handlers/requirement.handlers.d.ts.map +1 -0
- package/dist/handlers/requirement.handlers.js +234 -0
- package/dist/handlers/requirement.handlers.js.map +1 -0
- package/dist/handlers/status.handlers.d.ts +12 -0
- package/dist/handlers/status.handlers.d.ts.map +1 -0
- package/dist/handlers/status.handlers.js +209 -0
- package/dist/handlers/status.handlers.js.map +1 -0
- package/dist/handlers/task.handlers.d.ts +29 -0
- package/dist/handlers/task.handlers.d.ts.map +1 -0
- package/dist/handlers/task.handlers.js +272 -0
- package/dist/handlers/task.handlers.js.map +1 -0
- package/dist/handlers/types.d.ts +10 -0
- package/dist/handlers/types.d.ts.map +1 -0
- package/dist/handlers/types.js +5 -0
- package/dist/handlers/types.js.map +1 -0
- package/dist/services/auth.d.ts +41 -0
- package/dist/services/auth.d.ts.map +1 -0
- package/dist/services/auth.js +498 -0
- package/dist/services/auth.js.map +1 -0
- package/dist/services/claude.d.ts +18 -0
- package/dist/services/claude.d.ts.map +1 -0
- package/dist/services/claude.js +164 -0
- package/dist/services/claude.js.map +1 -0
- package/dist/services/context-manager.d.ts +170 -0
- package/dist/services/context-manager.d.ts.map +1 -0
- package/dist/services/context-manager.js +261 -0
- package/dist/services/context-manager.js.map +1 -0
- package/dist/services/credential-store.d.ts +47 -0
- package/dist/services/credential-store.d.ts.map +1 -0
- package/dist/services/credential-store.js +88 -0
- package/dist/services/credential-store.js.map +1 -0
- package/dist/services/oauth2-auth.d.ts +60 -0
- package/dist/services/oauth2-auth.d.ts.map +1 -0
- package/dist/services/oauth2-auth.js +377 -0
- package/dist/services/oauth2-auth.js.map +1 -0
- package/dist/services/project-service.d.ts +22 -0
- package/dist/services/project-service.d.ts.map +1 -0
- package/dist/services/project-service.js +52 -0
- package/dist/services/project-service.js.map +1 -0
- package/dist/services/requirement-service.d.ts +32 -0
- package/dist/services/requirement-service.d.ts.map +1 -0
- package/dist/services/requirement-service.js +91 -0
- package/dist/services/requirement-service.js.map +1 -0
- package/dist/services/task-service.d.ts +22 -0
- package/dist/services/task-service.d.ts.map +1 -0
- package/dist/services/task-service.js +52 -0
- package/dist/services/task-service.js.map +1 -0
- package/dist/test/setup.d.ts +2 -0
- package/dist/test/setup.d.ts.map +1 -0
- package/dist/test/setup.js +40 -0
- package/dist/test/setup.js.map +1 -0
- package/dist/types/api.d.ts +16 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +5 -0
- package/dist/types/api.js.map +1 -0
- package/dist/types/auth.d.ts +68 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +2 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/types/claude.d.ts +22 -0
- package/dist/types/claude.d.ts.map +1 -0
- package/dist/types/claude.js +2 -0
- package/dist/types/claude.js.map +1 -0
- package/dist/types/project.d.ts +32 -0
- package/dist/types/project.d.ts.map +1 -0
- package/dist/types/project.js +5 -0
- package/dist/types/project.js.map +1 -0
- package/dist/types/requirement.d.ts +69 -0
- package/dist/types/requirement.d.ts.map +1 -0
- package/dist/types/requirement.js +5 -0
- package/dist/types/requirement.js.map +1 -0
- package/dist/types/task.d.ts +44 -0
- package/dist/types/task.d.ts.map +1 -0
- package/dist/types/task.js +5 -0
- package/dist/types/task.js.map +1 -0
- package/dist/utils/axios-retry.d.ts +25 -0
- package/dist/utils/axios-retry.d.ts.map +1 -0
- package/dist/utils/axios-retry.js +174 -0
- package/dist/utils/axios-retry.js.map +1 -0
- package/dist/utils/axios-with-auth.d.ts +10 -0
- package/dist/utils/axios-with-auth.d.ts.map +1 -0
- package/dist/utils/axios-with-auth.js +118 -0
- package/dist/utils/axios-with-auth.js.map +1 -0
- package/dist/utils/cli-tools.d.ts +30 -0
- package/dist/utils/cli-tools.d.ts.map +1 -0
- package/dist/utils/cli-tools.js +131 -0
- package/dist/utils/cli-tools.js.map +1 -0
- package/dist/utils/command-execution.d.ts +30 -0
- package/dist/utils/command-execution.d.ts.map +1 -0
- package/dist/utils/command-execution.js +264 -0
- package/dist/utils/command-execution.js.map +1 -0
- package/dist/utils/command-parser.d.ts +85 -0
- package/dist/utils/command-parser.d.ts.map +1 -0
- package/dist/utils/command-parser.js +287 -0
- package/dist/utils/command-parser.js.map +1 -0
- package/dist/utils/config.d.ts +9 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +59 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/error-formatter.d.ts +17 -0
- package/dist/utils/error-formatter.d.ts.map +1 -0
- package/dist/utils/error-formatter.js +115 -0
- package/dist/utils/error-formatter.js.map +1 -0
- package/dist/utils/formatting.d.ts +10 -0
- package/dist/utils/formatting.d.ts.map +1 -0
- package/dist/utils/formatting.js +122 -0
- package/dist/utils/formatting.js.map +1 -0
- package/dist/utils/git.d.ts +55 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +131 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/jwt.d.ts +45 -0
- package/dist/utils/jwt.d.ts.map +1 -0
- package/dist/utils/jwt.js +64 -0
- package/dist/utils/jwt.js.map +1 -0
- package/dist/utils/logger.d.ts +36 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +176 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/requirements.d.ts +28 -0
- package/dist/utils/requirements.d.ts.map +1 -0
- package/dist/utils/requirements.js +54 -0
- package/dist/utils/requirements.js.map +1 -0
- package/dist/utils/status-parser.d.ts +95 -0
- package/dist/utils/status-parser.d.ts.map +1 -0
- package/dist/utils/status-parser.js +189 -0
- package/dist/utils/status-parser.js.map +1 -0
- package/dist/utils/tasks.d.ts +9 -0
- package/dist/utils/tasks.d.ts.map +1 -0
- package/dist/utils/tasks.js +38 -0
- package/dist/utils/tasks.js.map +1 -0
- 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
|
+
[](https://www.npmjs.com/package/@braingridai/cli)
|
|
9
|
+
[](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,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 @@
|
|
|
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
|
package/dist/cli.js.map
ADDED
|
@@ -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":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG1D,SAAS,OAAO;IACf,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAChC,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QAEvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC,CAAC;QAE/E,+DAA+D;QAC/D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,OAAe,EAAE,EAAE;YACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;YAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC;aACvD,CAAC;QACH,CAAC;QAED,OAAO;YACN,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,wCAAwC,CAAC;YAC9D,IAAI,EAAE,OAAO;SACb,CAAC;IACH,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACzB,OAAO;YACN,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,mBAAmB,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;SAC3D,CAAC;IACH,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IACjC,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QAEvB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAE1B,OAAO;YACN,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC;SAClD,CAAC;IACH,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACzB,OAAO;YACN,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,oBAAoB,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;SAC5D,CAAC;IACH,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IACjC,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QAEvB,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QACrD,IAAI,CAAC,eAAe,EAAE,CAAC;YACtB,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,2DAA2D,CAAC;aAClF,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC;aACzC,CAAC;QACH,CAAC;QAED,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;QAChE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;QACnE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC;QAChG,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,OAAO,CAAC,eAAe,IAAI,CAAC;QACxE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC;QAE9F,OAAO;YACN,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,MAAM;YACf,IAAI,EAAE,OAAO;SACb,CAAC;IACH,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACzB,OAAO;YACN,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;SAC7C,CAAC;IACH,CAAC;AACF,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.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"}
|