@braingrid/cli 0.0.8 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -0
- package/README.md +7 -3
- package/dist/build-config.d.ts +4 -8
- package/dist/build-config.d.ts.map +1 -1
- package/dist/build-config.js +21 -8
- package/dist/build-config.js.map +1 -1
- package/dist/cli.js +297 -276
- package/dist/cli.js.map +1 -1
- package/dist/handlers/auth.handlers.d.ts +7 -1
- package/dist/handlers/auth.handlers.d.ts.map +1 -1
- package/dist/handlers/auth.handlers.js +80 -21
- package/dist/handlers/auth.handlers.js.map +1 -1
- package/dist/handlers/project.handlers.d.ts.map +1 -1
- package/dist/handlers/project.handlers.js +13 -4
- package/dist/handlers/project.handlers.js.map +1 -1
- package/dist/rpc/registry.d.ts +97 -0
- package/dist/rpc/registry.d.ts.map +1 -0
- package/dist/rpc/registry.js +119 -0
- package/dist/rpc/registry.js.map +1 -0
- package/dist/rpc/server.d.ts +76 -0
- package/dist/rpc/server.d.ts.map +1 -0
- package/dist/rpc/server.js +420 -0
- package/dist/rpc/server.js.map +1 -0
- package/dist/rpc/transport.d.ts +84 -0
- package/dist/rpc/transport.d.ts.map +1 -0
- package/dist/rpc/transport.js +296 -0
- package/dist/rpc/transport.js.map +1 -0
- package/dist/services/__mocks__/utils.d.ts +16 -0
- package/dist/services/__mocks__/utils.d.ts.map +1 -0
- package/dist/services/__mocks__/utils.js +21 -0
- package/dist/services/__mocks__/utils.js.map +1 -0
- package/dist/services/auth.d.ts +18 -0
- package/dist/services/auth.d.ts.map +1 -1
- package/dist/services/auth.js +92 -42
- package/dist/services/auth.js.map +1 -1
- package/dist/services/oauth2-auth.d.ts +16 -0
- package/dist/services/oauth2-auth.d.ts.map +1 -1
- package/dist/services/oauth2-auth.js +74 -0
- package/dist/services/oauth2-auth.js.map +1 -1
- package/dist/services/project-service.d.ts +2 -2
- package/dist/services/project-service.d.ts.map +1 -1
- package/dist/services/project-service.js +4 -0
- package/dist/services/project-service.js.map +1 -1
- package/package.json +11 -29
- package/dist/.build-info.json +0 -9
- package/dist/test/setup.d.ts +0 -2
- package/dist/test/setup.d.ts.map +0 -1
- package/dist/test/setup.js +0 -40
- package/dist/test/setup.js.map +0 -1
package/dist/cli.js
CHANGED
|
@@ -2,283 +2,304 @@
|
|
|
2
2
|
import { Command } from 'commander';
|
|
3
3
|
import { createRequire } from 'module';
|
|
4
4
|
import * as handlers from './handlers/index.js';
|
|
5
|
+
import { JsonRpcServer } from './rpc/server.js';
|
|
5
6
|
const require = createRequire(import.meta.url);
|
|
6
7
|
const packageJson = require('../package.json');
|
|
7
8
|
const program = new Command();
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
//
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
program
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
.
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
.
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
9
|
+
// Check for --rpc flag early
|
|
10
|
+
const isRpcMode = process.argv.includes('--rpc');
|
|
11
|
+
// If in RPC mode, start the JSON-RPC server
|
|
12
|
+
if (isRpcMode) {
|
|
13
|
+
const server = new JsonRpcServer();
|
|
14
|
+
server.start();
|
|
15
|
+
// Keep the process running
|
|
16
|
+
process.on('SIGINT', async () => {
|
|
17
|
+
await server.stop();
|
|
18
|
+
process.exit(0);
|
|
19
|
+
});
|
|
20
|
+
process.on('SIGTERM', async () => {
|
|
21
|
+
await server.stop();
|
|
22
|
+
process.exit(0);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
// Traditional CLI mode
|
|
27
|
+
program
|
|
28
|
+
.name('braingrid')
|
|
29
|
+
.description('BrainGrid CLI - Manage projects, requirements, and tasks')
|
|
30
|
+
.version(packageJson.version, '-v, --version', 'output the current version')
|
|
31
|
+
.option('--rpc', 'Start in JSON-RPC server mode')
|
|
32
|
+
.showHelpAfterError('(use --help for usage)');
|
|
33
|
+
// ============================================
|
|
34
|
+
// AUTH COMMANDS
|
|
35
|
+
// ============================================
|
|
36
|
+
program
|
|
37
|
+
.command('login')
|
|
38
|
+
.description('Authenticate with BrainGrid')
|
|
39
|
+
.action(async () => {
|
|
40
|
+
const result = await handlers.handleLogin();
|
|
41
|
+
console.log(result.message);
|
|
42
|
+
if (!result.success) {
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
program
|
|
47
|
+
.command('logout')
|
|
48
|
+
.description('Sign out from BrainGrid')
|
|
49
|
+
.action(async () => {
|
|
50
|
+
const result = await handlers.handleLogout();
|
|
51
|
+
console.log(result.message);
|
|
52
|
+
if (!result.success) {
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
program
|
|
57
|
+
.command('whoami')
|
|
58
|
+
.description('Show current user information')
|
|
59
|
+
.action(async () => {
|
|
60
|
+
const result = await handlers.handleWhoami();
|
|
61
|
+
console.log(result.message);
|
|
62
|
+
if (!result.success) {
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
program
|
|
67
|
+
.command('status')
|
|
68
|
+
.description('Show CLI status (authentication, git, config)')
|
|
69
|
+
.action(async () => {
|
|
70
|
+
const result = await handlers.handleStatus();
|
|
71
|
+
console.log(result.message);
|
|
72
|
+
if (!result.success) {
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
program
|
|
77
|
+
.command('init')
|
|
78
|
+
.description('Initialize BrainGrid project in current repository')
|
|
79
|
+
.option('--project <id>', 'project ID to initialize with (auto-detects if not provided)')
|
|
80
|
+
.option('--wizard', 'run interactive wizard')
|
|
81
|
+
.option('--force', 'force reinitialization if already initialized')
|
|
82
|
+
.action(async (opts) => {
|
|
83
|
+
const result = await handlers.handleInit(opts);
|
|
84
|
+
console.log(result.message);
|
|
85
|
+
if (!result.success) {
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
program
|
|
90
|
+
.command('update')
|
|
91
|
+
.description('Update BrainGrid CLI to the latest version')
|
|
92
|
+
.option('--check', 'check for updates without installing')
|
|
93
|
+
.action(async (opts) => {
|
|
94
|
+
const result = await handlers.handleUpdate(opts);
|
|
95
|
+
console.log(result.message);
|
|
96
|
+
if (!result.success) {
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
// ============================================
|
|
101
|
+
// PROJECT RESOURCE COMMANDS
|
|
102
|
+
// ============================================
|
|
103
|
+
const project = program.command('project').description('Manage projects');
|
|
104
|
+
project
|
|
105
|
+
.command('list')
|
|
106
|
+
.description('List all projects')
|
|
107
|
+
.option('--format <format>', 'output format (table or json)', 'table')
|
|
108
|
+
.option('--page <page>', 'page number for pagination', '1')
|
|
109
|
+
.option('--limit <limit>', 'number of projects per page', '20')
|
|
110
|
+
.action(async (opts) => {
|
|
111
|
+
const result = await handlers.handleProjectList(opts);
|
|
112
|
+
console.log(result.message);
|
|
113
|
+
if (!result.success) {
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
project
|
|
118
|
+
.command('show')
|
|
119
|
+
.description('Show projects for a repository (defaults to current git repo)')
|
|
120
|
+
.option('--repository, --repo <owner/name>', 'specify repository (e.g., microsoft/vscode)')
|
|
121
|
+
.option('--format <format>', 'output format (table or json)', 'table')
|
|
122
|
+
.option('--page <page>', 'page number for pagination', '1')
|
|
123
|
+
.option('--limit <limit>', 'number of projects per page', '20')
|
|
124
|
+
.action(async (opts) => {
|
|
125
|
+
const result = await handlers.handleProjectShow(opts);
|
|
126
|
+
console.log(result.message);
|
|
127
|
+
if (!result.success) {
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
project
|
|
132
|
+
.command('get <id>')
|
|
133
|
+
.description('Get a specific project by ID')
|
|
134
|
+
.action(async (id) => {
|
|
135
|
+
const result = await handlers.handleProjectGet(id);
|
|
136
|
+
console.log(result.message);
|
|
137
|
+
if (!result.success) {
|
|
138
|
+
process.exit(1);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
project
|
|
142
|
+
.command('create')
|
|
143
|
+
.description('Create a new project')
|
|
144
|
+
.requiredOption('--name <name>', 'project name')
|
|
145
|
+
.option('--description <description>', 'project description')
|
|
146
|
+
.action(async (opts) => {
|
|
147
|
+
const result = await handlers.handleProjectCreate(opts);
|
|
148
|
+
console.log(result.message);
|
|
149
|
+
if (!result.success) {
|
|
150
|
+
process.exit(1);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
project
|
|
154
|
+
.command('update <id>')
|
|
155
|
+
.description('Update project information')
|
|
156
|
+
.option('--name <name>', 'new project name')
|
|
157
|
+
.option('--description <description>', 'new project description')
|
|
158
|
+
.action(async (id, opts) => {
|
|
159
|
+
const result = await handlers.handleProjectUpdate(id, opts);
|
|
160
|
+
console.log(result.message);
|
|
161
|
+
if (!result.success) {
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
project
|
|
166
|
+
.command('delete <id>')
|
|
167
|
+
.description('Delete a project')
|
|
168
|
+
.option('--force', 'force deletion without confirmation')
|
|
169
|
+
.action(async (id, opts) => {
|
|
170
|
+
const result = await handlers.handleProjectDelete(id, opts);
|
|
171
|
+
console.log(result.message);
|
|
172
|
+
if (!result.success) {
|
|
173
|
+
process.exit(1);
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
// ============================================
|
|
177
|
+
// REQUIREMENT RESOURCE COMMANDS
|
|
178
|
+
// ============================================
|
|
179
|
+
const requirement = program.command('requirement').description('Manage requirements');
|
|
180
|
+
requirement
|
|
181
|
+
.command('list')
|
|
182
|
+
.description('List requirements for a project')
|
|
183
|
+
.option('-p, --project <id>', 'project ID (auto-detects from .braingrid/project.json if not provided)')
|
|
184
|
+
.option('--status <status>', 'filter by status (IDEA, PLANNED, IN_PROGRESS, REVIEW, COMPLETED, CANCELLED)')
|
|
185
|
+
.option('--format <format>', 'output format (table or json)', 'table')
|
|
186
|
+
.option('--page <page>', 'page number for pagination', '1')
|
|
187
|
+
.option('--limit <limit>', 'number of requirements per page', '20')
|
|
188
|
+
.action(async (opts) => {
|
|
189
|
+
const result = await handlers.handleRequirementList(opts);
|
|
190
|
+
console.log(result.message);
|
|
191
|
+
if (!result.success) {
|
|
192
|
+
process.exit(1);
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
requirement
|
|
196
|
+
.command('show <id>')
|
|
197
|
+
.description('Show requirement details')
|
|
198
|
+
.action(async (id) => {
|
|
199
|
+
const result = await handlers.handleRequirementShow(id);
|
|
200
|
+
console.log(result.message);
|
|
201
|
+
if (!result.success) {
|
|
202
|
+
process.exit(1);
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
requirement
|
|
206
|
+
.command('create')
|
|
207
|
+
.description('Create a new requirement')
|
|
208
|
+
.option('-p, --project <id>', 'project ID (auto-detects from .braingrid/project.json if not provided)')
|
|
209
|
+
.requiredOption('--prompt <prompt>', 'requirement prompt/description')
|
|
210
|
+
.option('--repositories <repos>', 'comma-separated list of repositories (owner/repo)')
|
|
211
|
+
.action(async (opts) => {
|
|
212
|
+
const result = await handlers.handleRequirementCreate(opts);
|
|
213
|
+
console.log(result.message);
|
|
214
|
+
if (!result.success) {
|
|
215
|
+
process.exit(1);
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
requirement
|
|
219
|
+
.command('update <id>')
|
|
220
|
+
.description('Update requirement information')
|
|
221
|
+
.option('--status <status>', 'new status (IDEA, PLANNED, IN_PROGRESS, REVIEW, COMPLETED, CANCELLED)')
|
|
222
|
+
.option('--name <name>', 'new requirement name')
|
|
223
|
+
.action(async (id, opts) => {
|
|
224
|
+
const result = await handlers.handleRequirementUpdate(id, opts);
|
|
225
|
+
console.log(result.message);
|
|
226
|
+
if (!result.success) {
|
|
227
|
+
process.exit(1);
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
requirement
|
|
231
|
+
.command('delete <id>')
|
|
232
|
+
.description('Delete a requirement')
|
|
233
|
+
.option('--force', 'force deletion without confirmation')
|
|
234
|
+
.action(async (id, opts) => {
|
|
235
|
+
const result = await handlers.handleRequirementDelete(id, opts);
|
|
236
|
+
console.log(result.message);
|
|
237
|
+
if (!result.success) {
|
|
238
|
+
process.exit(1);
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
// ============================================
|
|
242
|
+
// TASK RESOURCE COMMANDS
|
|
243
|
+
// ============================================
|
|
244
|
+
const task = program.command('task').description('Manage tasks');
|
|
245
|
+
task
|
|
246
|
+
.command('list')
|
|
247
|
+
.description('List tasks for a requirement')
|
|
248
|
+
.option('-r, --requirement <id>', 'requirement ID (REQ-456 or PROJ-123/REQ-456, auto-detects project if initialized)')
|
|
249
|
+
.option('--format <format>', 'output format (table or json)', 'table')
|
|
250
|
+
.action(async (opts) => {
|
|
251
|
+
const result = await handlers.handleTaskList(opts);
|
|
252
|
+
console.log(result.message);
|
|
253
|
+
if (!result.success) {
|
|
254
|
+
process.exit(1);
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
task
|
|
258
|
+
.command('show <id>')
|
|
259
|
+
.description('Show task details')
|
|
260
|
+
.action(async (id) => {
|
|
261
|
+
const result = await handlers.handleTaskShow(id);
|
|
262
|
+
console.log(result.message);
|
|
263
|
+
if (!result.success) {
|
|
264
|
+
process.exit(1);
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
task
|
|
268
|
+
.command('create')
|
|
269
|
+
.description('Create a new task')
|
|
270
|
+
.option('-r, --requirement <id>', 'requirement ID (REQ-456 or PROJ-123/REQ-456, auto-detects project if initialized)')
|
|
271
|
+
.requiredOption('--title <title>', 'task title')
|
|
272
|
+
.option('--content <content>', 'task content/description')
|
|
273
|
+
.action(async (opts) => {
|
|
274
|
+
const result = await handlers.handleTaskCreate(opts);
|
|
275
|
+
console.log(result.message);
|
|
276
|
+
if (!result.success) {
|
|
277
|
+
process.exit(1);
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
task
|
|
281
|
+
.command('update <id>')
|
|
282
|
+
.description('Update task information')
|
|
283
|
+
.option('--status <status>', 'new status (PLANNED, IN_PROGRESS, COMPLETED, CANCELLED)')
|
|
284
|
+
.option('--title <title>', 'new task title')
|
|
285
|
+
.action(async (id, opts) => {
|
|
286
|
+
const result = await handlers.handleTaskUpdate(id, opts);
|
|
287
|
+
console.log(result.message);
|
|
288
|
+
if (!result.success) {
|
|
289
|
+
process.exit(1);
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
task
|
|
293
|
+
.command('delete <id>')
|
|
294
|
+
.description('Delete a task')
|
|
295
|
+
.option('--force', 'force deletion without confirmation')
|
|
296
|
+
.action(async (id, opts) => {
|
|
297
|
+
const result = await handlers.handleTaskDelete(id, opts);
|
|
298
|
+
console.log(result.message);
|
|
299
|
+
if (!result.success) {
|
|
300
|
+
process.exit(1);
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
program.parse();
|
|
304
|
+
}
|
|
284
305
|
//# sourceMappingURL=cli.js.map
|