@markus-global/cli 0.7.3-rc.3 → 0.7.3

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 (106) hide show
  1. package/dist/commands/agent.d.ts.map +1 -1
  2. package/dist/commands/agent.js +2 -149
  3. package/dist/commands/agent.js.map +1 -1
  4. package/dist/commands/doctor.js +1 -1
  5. package/dist/commands/doctor.js.map +1 -1
  6. package/dist/commands/init.js +2 -2
  7. package/dist/commands/init.js.map +1 -1
  8. package/dist/commands/install-agent.d.ts.map +1 -1
  9. package/dist/commands/install-agent.js +4 -5
  10. package/dist/commands/install-agent.js.map +1 -1
  11. package/dist/commands/system.d.ts.map +1 -1
  12. package/dist/commands/system.js +3 -124
  13. package/dist/commands/system.js.map +1 -1
  14. package/dist/index.js +4 -57
  15. package/dist/index.js.map +1 -1
  16. package/dist/markus.mjs +580 -3213
  17. package/dist/utils/logger.d.ts +1 -1
  18. package/dist/utils/logger.js +1 -1
  19. package/dist/web-ui/assets/{browser-T5EbsEhu.js → browser-hOSqGAXu.js} +1 -1
  20. package/dist/web-ui/assets/index-ThJZw2FP.js +706 -0
  21. package/dist/web-ui/assets/index-r_zg4Nsa.css +1 -0
  22. package/dist/web-ui/index.html +2 -2
  23. package/package.json +1 -1
  24. package/templates/skills/markus-admin-cli/SKILL.md +23 -96
  25. package/dist/commands/approval.d.ts +0 -3
  26. package/dist/commands/approval.d.ts.map +0 -1
  27. package/dist/commands/approval.js +0 -59
  28. package/dist/commands/approval.js.map +0 -1
  29. package/dist/commands/audit.d.ts +0 -3
  30. package/dist/commands/audit.d.ts.map +0 -1
  31. package/dist/commands/audit.js +0 -92
  32. package/dist/commands/audit.js.map +0 -1
  33. package/dist/commands/builder.d.ts +0 -3
  34. package/dist/commands/builder.d.ts.map +0 -1
  35. package/dist/commands/builder.js +0 -85
  36. package/dist/commands/builder.js.map +0 -1
  37. package/dist/commands/channel.d.ts +0 -3
  38. package/dist/commands/channel.d.ts.map +0 -1
  39. package/dist/commands/channel.js +0 -259
  40. package/dist/commands/channel.js.map +0 -1
  41. package/dist/commands/connect.d.ts +0 -3
  42. package/dist/commands/connect.d.ts.map +0 -1
  43. package/dist/commands/connect.js +0 -267
  44. package/dist/commands/connect.js.map +0 -1
  45. package/dist/commands/deliverable.d.ts +0 -3
  46. package/dist/commands/deliverable.d.ts.map +0 -1
  47. package/dist/commands/deliverable.js +0 -127
  48. package/dist/commands/deliverable.js.map +0 -1
  49. package/dist/commands/external-agent.d.ts +0 -3
  50. package/dist/commands/external-agent.d.ts.map +0 -1
  51. package/dist/commands/external-agent.js +0 -79
  52. package/dist/commands/external-agent.js.map +0 -1
  53. package/dist/commands/gateway.d.ts +0 -3
  54. package/dist/commands/gateway.d.ts.map +0 -1
  55. package/dist/commands/gateway.js +0 -91
  56. package/dist/commands/gateway.js.map +0 -1
  57. package/dist/commands/key.d.ts +0 -3
  58. package/dist/commands/key.d.ts.map +0 -1
  59. package/dist/commands/key.js +0 -68
  60. package/dist/commands/key.js.map +0 -1
  61. package/dist/commands/project.d.ts +0 -3
  62. package/dist/commands/project.d.ts.map +0 -1
  63. package/dist/commands/project.js +0 -164
  64. package/dist/commands/project.js.map +0 -1
  65. package/dist/commands/report.d.ts +0 -3
  66. package/dist/commands/report.d.ts.map +0 -1
  67. package/dist/commands/report.js +0 -99
  68. package/dist/commands/report.js.map +0 -1
  69. package/dist/commands/requirement.d.ts +0 -3
  70. package/dist/commands/requirement.d.ts.map +0 -1
  71. package/dist/commands/requirement.js +0 -197
  72. package/dist/commands/requirement.js.map +0 -1
  73. package/dist/commands/review.d.ts +0 -3
  74. package/dist/commands/review.d.ts.map +0 -1
  75. package/dist/commands/review.js +0 -71
  76. package/dist/commands/review.js.map +0 -1
  77. package/dist/commands/role.d.ts +0 -3
  78. package/dist/commands/role.d.ts.map +0 -1
  79. package/dist/commands/role.js +0 -39
  80. package/dist/commands/role.js.map +0 -1
  81. package/dist/commands/settings.d.ts +0 -3
  82. package/dist/commands/settings.d.ts.map +0 -1
  83. package/dist/commands/settings.js +0 -53
  84. package/dist/commands/settings.js.map +0 -1
  85. package/dist/commands/skill.d.ts +0 -3
  86. package/dist/commands/skill.d.ts.map +0 -1
  87. package/dist/commands/skill.js +0 -136
  88. package/dist/commands/skill.js.map +0 -1
  89. package/dist/commands/task.d.ts +0 -3
  90. package/dist/commands/task.d.ts.map +0 -1
  91. package/dist/commands/task.js +0 -510
  92. package/dist/commands/task.js.map +0 -1
  93. package/dist/commands/team.d.ts +0 -3
  94. package/dist/commands/team.d.ts.map +0 -1
  95. package/dist/commands/team.js +0 -312
  96. package/dist/commands/team.js.map +0 -1
  97. package/dist/commands/template.d.ts +0 -3
  98. package/dist/commands/template.d.ts.map +0 -1
  99. package/dist/commands/template.js +0 -77
  100. package/dist/commands/template.js.map +0 -1
  101. package/dist/commands/user.d.ts +0 -3
  102. package/dist/commands/user.d.ts.map +0 -1
  103. package/dist/commands/user.js +0 -68
  104. package/dist/commands/user.js.map +0 -1
  105. package/dist/web-ui/assets/index-DUI-mDEt.js +0 -706
  106. package/dist/web-ui/assets/index-DxTg9YFr.css +0 -1
@@ -1,136 +0,0 @@
1
- import { writeFileSync, mkdirSync } from 'node:fs';
2
- import { resolve } from 'node:path';
3
- import { createClient, ApiError } from '../api-client.js';
4
- import { table, success, fail, extractRows } from '../output.js';
5
- export function registerSkillCommands(program) {
6
- const root = program.command('skill').description('Skills registry and local scaffold');
7
- root.command('list').action(async (_opts, cmd) => {
8
- const g = cmd.optsWithGlobals();
9
- const client = createClient(g);
10
- const out = { json: !!g.json };
11
- try {
12
- const data = await client.get('/skills');
13
- const rows = extractRows(data);
14
- table(rows, [
15
- { key: 'name', header: 'Name', width: 24 },
16
- { key: 'version', header: 'Ver', width: 8 },
17
- { key: 'category', header: 'Category', width: 12 },
18
- { key: 'type', header: 'Type', width: 12 },
19
- { key: 'description', header: 'Description', width: 40 },
20
- ], { ...out, title: 'Skills' });
21
- }
22
- catch (e) {
23
- if (e instanceof ApiError)
24
- fail(e.message);
25
- throw e;
26
- }
27
- });
28
- root.command('builtin').action(async (_opts, cmd) => {
29
- const g = cmd.optsWithGlobals();
30
- const client = createClient(g);
31
- const out = { json: !!g.json };
32
- try {
33
- const data = await client.get('/skills/builtin');
34
- const rows = extractRows(data);
35
- table(rows, [
36
- { key: 'name', header: 'Name', width: 24 },
37
- { key: 'category', header: 'Category', width: 14 },
38
- { key: 'description', header: 'Description', width: 50 },
39
- ], { ...out, title: 'Builtin skills' });
40
- }
41
- catch (e) {
42
- if (e instanceof ApiError)
43
- fail(e.message);
44
- throw e;
45
- }
46
- });
47
- root
48
- .command('install')
49
- .requiredOption('--name <n>')
50
- .option('--source <s>')
51
- .action(async (opts, cmd) => {
52
- const g = cmd.optsWithGlobals();
53
- const client = createClient(g);
54
- const out = { json: !!g.json };
55
- try {
56
- const data = await client.post('/skills/install', {
57
- name: opts.name,
58
- ...(opts.source && { source: opts.source }),
59
- });
60
- success('Skill installed', data, out);
61
- }
62
- catch (e) {
63
- if (e instanceof ApiError)
64
- fail(e.message);
65
- throw e;
66
- }
67
- });
68
- root.command('uninstall <name>').action(async (name, _opts, cmd) => {
69
- const g = cmd.optsWithGlobals();
70
- const client = createClient(g);
71
- const out = { json: !!g.json };
72
- try {
73
- const data = await client.delete(`/skills/installed/${encodeURIComponent(name)}`);
74
- success('Skill uninstalled', data, out);
75
- }
76
- catch (e) {
77
- if (e instanceof ApiError)
78
- fail(e.message);
79
- throw e;
80
- }
81
- });
82
- root
83
- .command('search')
84
- .option('--query <q>')
85
- .action(async (opts, cmd) => {
86
- const g = cmd.optsWithGlobals();
87
- const client = createClient(g);
88
- const out = { json: !!g.json };
89
- try {
90
- const data = await client.get('/skills/registry/skillhub', { query: opts.query });
91
- const rows = extractRows(data);
92
- table(rows, [
93
- { key: 'name', header: 'Name', width: 24 },
94
- { key: 'version', header: 'Ver', width: 8 },
95
- { key: 'category', header: 'Category', width: 12 },
96
- { key: 'description', header: 'Description', width: 40 },
97
- ], { ...out, title: 'Registry search' });
98
- }
99
- catch (e) {
100
- if (e instanceof ApiError)
101
- fail(e.message);
102
- throw e;
103
- }
104
- });
105
- root
106
- .command('init')
107
- .option('--dir <d>')
108
- .option('--name <n>')
109
- .action(async (opts, cmd) => {
110
- const g = cmd.optsWithGlobals();
111
- const out = { json: !!g.json };
112
- if (!opts.dir && !opts.name)
113
- fail('Specify --dir or --name');
114
- const dir = resolve(process.cwd(), (opts.dir ?? opts.name));
115
- mkdirSync(dir, { recursive: true });
116
- const skillName = opts.name ?? (opts.dir ? opts.dir.replace(/.*[/\\]/, '') : 'my-skill');
117
- const skillJson = {
118
- name: skillName,
119
- version: '0.1.0',
120
- description: `${skillName} skill for Markus agents`,
121
- category: 'custom',
122
- tags: [],
123
- };
124
- const skillMd = `# ${skillName}\n\nDescribe what this skill does for agents.\n\n## When to use\n\n## Tools / behavior\n\n`;
125
- writeFileSync(resolve(dir, 'skill.json'), JSON.stringify(skillJson, null, 2) + '\n');
126
- writeFileSync(resolve(dir, 'SKILL.md'), skillMd);
127
- if (out.json) {
128
- console.log(JSON.stringify({ dir, files: ['skill.json', 'SKILL.md'] }, null, 2));
129
- }
130
- else {
131
- success(`Scaffolded skill in ${dir}`, undefined, out);
132
- }
133
- });
134
- return root;
135
- }
136
- //# sourceMappingURL=skill.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { Command } from 'commander';
2
- export declare function registerTaskCommands(program: Command): Command;
3
- //# sourceMappingURL=task.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/commands/task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CA0b9D"}
@@ -1,510 +0,0 @@
1
- import { createClient, ApiError } from '../api-client.js';
2
- import { detail, fail, success, table } from '../output.js';
3
- function asObjectRecord(data) {
4
- if (data && typeof data === 'object' && !Array.isArray(data))
5
- return data;
6
- return {};
7
- }
8
- function asRowArray(data) {
9
- if (Array.isArray(data))
10
- return data;
11
- if (data && typeof data === 'object') {
12
- const o = data;
13
- for (const k of ['tasks', 'items', 'data', 'results']) {
14
- const v = o[k];
15
- if (Array.isArray(v))
16
- return v;
17
- }
18
- }
19
- return [];
20
- }
21
- function parseBlockedBy(s) {
22
- if (s === undefined || s === '')
23
- return undefined;
24
- return s.split(',').map(x => x.trim()).filter(Boolean);
25
- }
26
- function truncateTitle(t, max) {
27
- const s = String(t ?? '');
28
- return s.length > max ? s.slice(0, max - 1) + '…' : s;
29
- }
30
- export function registerTaskCommands(program) {
31
- const task = program.command('task').description('Task management');
32
- task
33
- .command('list')
34
- .description('GET /api/tasks')
35
- .option('--status <status>')
36
- .option('--agent-id <id>')
37
- .option('--project-id <id>')
38
- .option('--requirement-id <id>')
39
- .option('--org-id <id>')
40
- .option('--limit <n>', 'Max results')
41
- .action(async (opts, cmd) => {
42
- const g = cmd.optsWithGlobals();
43
- const client = createClient(g);
44
- const out = { json: !!g.json };
45
- try {
46
- const data = await client.get('/tasks', {
47
- status: opts.status,
48
- agentId: opts.agentId,
49
- projectId: opts.projectId,
50
- requirementId: opts.requirementId,
51
- orgId: opts.orgId,
52
- limit: opts.limit,
53
- });
54
- const rows = asRowArray(data);
55
- if (out.json) {
56
- console.log(JSON.stringify(rows, null, 2));
57
- return;
58
- }
59
- const mapped = rows.map(r => {
60
- const assigned = r.assignedAgentId ?? r.assigneeAgentId ?? r.assignee ?? r.assignedTo ?? r.agentId;
61
- return {
62
- id: r.id,
63
- title: r.title,
64
- status: r.status,
65
- priority: r.priority,
66
- assignedAgentId: assigned,
67
- };
68
- });
69
- table(mapped, [
70
- { key: 'id', header: 'id', width: 28 },
71
- { key: 'title', header: 'title', width: 30 },
72
- { key: 'status', header: 'status', width: 9 },
73
- { key: 'priority', header: 'priority', width: 8 },
74
- { key: 'assignedAgentId', header: 'assignedAgentId', width: 28 },
75
- ]);
76
- }
77
- catch (e) {
78
- if (e instanceof ApiError)
79
- fail(e.message);
80
- throw e;
81
- }
82
- });
83
- task
84
- .command('get <id>')
85
- .description('GET /api/tasks/:id')
86
- .action(async (id, _opts, cmd) => {
87
- const g = cmd.optsWithGlobals();
88
- const client = createClient(g);
89
- const out = { json: !!g.json };
90
- try {
91
- const data = await client.get(`/tasks/${encodeURIComponent(id)}`);
92
- detail(asObjectRecord(data), out);
93
- }
94
- catch (e) {
95
- if (e instanceof ApiError)
96
- fail(e.message);
97
- throw e;
98
- }
99
- });
100
- task
101
- .command('create')
102
- .description('POST /api/tasks')
103
- .requiredOption('--title <title>')
104
- .option('--description <text>')
105
- .option('--priority <p>')
106
- .option('--assignee <id>')
107
- .option('--reviewer <id>')
108
- .option('--project-id <id>')
109
- .option('--type <type>')
110
- .option('--blocked-by <ids>', 'Comma-separated task ids')
111
- .action(async (opts, cmd) => {
112
- const g = cmd.optsWithGlobals();
113
- const client = createClient(g);
114
- const out = { json: !!g.json };
115
- try {
116
- const blockedBy = parseBlockedBy(opts.blockedBy);
117
- const body = { title: opts.title };
118
- if (opts.description !== undefined)
119
- body.description = opts.description;
120
- if (opts.priority !== undefined)
121
- body.priority = opts.priority;
122
- if (opts.assignee !== undefined)
123
- body.assignedAgentId = opts.assignee;
124
- if (opts.reviewer !== undefined)
125
- body.reviewerId = opts.reviewer;
126
- if (opts.projectId !== undefined)
127
- body.projectId = opts.projectId;
128
- if (opts.type !== undefined)
129
- body.type = opts.type;
130
- if (blockedBy?.length)
131
- body.blockedBy = blockedBy;
132
- const data = await client.post('/tasks', body);
133
- success('Task created', data, out);
134
- }
135
- catch (e) {
136
- if (e instanceof ApiError)
137
- fail(e.message);
138
- throw e;
139
- }
140
- });
141
- task
142
- .command('update <id>')
143
- .description('PUT /api/tasks/:id')
144
- .option('--title <title>')
145
- .option('--description <text>')
146
- .option('--priority <p>')
147
- .option('--status <status>')
148
- .option('--assignee <id>')
149
- .option('--project-id <id>')
150
- .option('--reviewer <id>')
151
- .option('--blocked-by <ids>', 'Comma-separated task ids')
152
- .action(async (id, opts, cmd) => {
153
- const g = cmd.optsWithGlobals();
154
- const client = createClient(g);
155
- const out = { json: !!g.json };
156
- try {
157
- const body = {};
158
- if (opts.title !== undefined)
159
- body.title = opts.title;
160
- if (opts.description !== undefined)
161
- body.description = opts.description;
162
- if (opts.priority !== undefined)
163
- body.priority = opts.priority;
164
- if (opts.status !== undefined)
165
- body.status = opts.status;
166
- if (opts.assignee !== undefined)
167
- body.assignedAgentId = opts.assignee;
168
- if (opts.projectId !== undefined)
169
- body.projectId = opts.projectId;
170
- if (opts.reviewer !== undefined)
171
- body.reviewerId = opts.reviewer;
172
- const blockedBy = parseBlockedBy(opts.blockedBy);
173
- if (blockedBy !== undefined)
174
- body.blockedBy = blockedBy;
175
- const data = await client.put(`/tasks/${encodeURIComponent(id)}`, body);
176
- success('Task updated', data, out);
177
- }
178
- catch (e) {
179
- if (e instanceof ApiError)
180
- fail(e.message);
181
- throw e;
182
- }
183
- });
184
- task
185
- .command('approve <id>')
186
- .description('POST /api/tasks/:id/approve')
187
- .action(async (id, _opts, cmd) => {
188
- const g = cmd.optsWithGlobals();
189
- const client = createClient(g);
190
- const out = { json: !!g.json };
191
- try {
192
- const data = await client.post(`/tasks/${encodeURIComponent(id)}/approve`);
193
- success('Task approved', data, out);
194
- }
195
- catch (e) {
196
- if (e instanceof ApiError)
197
- fail(e.message);
198
- throw e;
199
- }
200
- });
201
- task
202
- .command('reject <id>')
203
- .description('POST /api/tasks/:id/reject')
204
- .action(async (id, _opts, cmd) => {
205
- const g = cmd.optsWithGlobals();
206
- const client = createClient(g);
207
- const out = { json: !!g.json };
208
- try {
209
- const data = await client.post(`/tasks/${encodeURIComponent(id)}/reject`);
210
- success('Task rejected', data, out);
211
- }
212
- catch (e) {
213
- if (e instanceof ApiError)
214
- fail(e.message);
215
- throw e;
216
- }
217
- });
218
- task
219
- .command('cancel <id>')
220
- .description('POST /api/tasks/:id/cancel')
221
- .option('--cascade', 'Cancel dependents', false)
222
- .action(async (id, opts, cmd) => {
223
- const g = cmd.optsWithGlobals();
224
- const client = createClient(g);
225
- const out = { json: !!g.json };
226
- try {
227
- const body = opts.cascade ? { cascade: true } : undefined;
228
- const data = await client.post(`/tasks/${encodeURIComponent(id)}/cancel`, body);
229
- success('Task cancelled', data, out);
230
- }
231
- catch (e) {
232
- if (e instanceof ApiError)
233
- fail(e.message);
234
- throw e;
235
- }
236
- });
237
- task
238
- .command('run <id>')
239
- .description('POST /api/tasks/:id/run')
240
- .action(async (id, _opts, cmd) => {
241
- const g = cmd.optsWithGlobals();
242
- const client = createClient(g);
243
- const out = { json: !!g.json };
244
- try {
245
- const data = await client.post(`/tasks/${encodeURIComponent(id)}/run`);
246
- success('Task run started', data, out);
247
- }
248
- catch (e) {
249
- if (e instanceof ApiError)
250
- fail(e.message);
251
- throw e;
252
- }
253
- });
254
- task
255
- .command('pause <id>')
256
- .description('POST /api/tasks/:id/pause')
257
- .action(async (id, _opts, cmd) => {
258
- const g = cmd.optsWithGlobals();
259
- const client = createClient(g);
260
- const out = { json: !!g.json };
261
- try {
262
- const data = await client.post(`/tasks/${encodeURIComponent(id)}/pause`);
263
- success('Task paused', data, out);
264
- }
265
- catch (e) {
266
- if (e instanceof ApiError)
267
- fail(e.message);
268
- throw e;
269
- }
270
- });
271
- task
272
- .command('resume <id>')
273
- .description('POST /api/tasks/:id/resume')
274
- .action(async (id, _opts, cmd) => {
275
- const g = cmd.optsWithGlobals();
276
- const client = createClient(g);
277
- const out = { json: !!g.json };
278
- try {
279
- const data = await client.post(`/tasks/${encodeURIComponent(id)}/resume`);
280
- success('Task resumed', data, out);
281
- }
282
- catch (e) {
283
- if (e instanceof ApiError)
284
- fail(e.message);
285
- throw e;
286
- }
287
- });
288
- task
289
- .command('retry <id>')
290
- .description('POST /api/tasks/:id/retry')
291
- .action(async (id, _opts, cmd) => {
292
- const g = cmd.optsWithGlobals();
293
- const client = createClient(g);
294
- const out = { json: !!g.json };
295
- try {
296
- const data = await client.post(`/tasks/${encodeURIComponent(id)}/retry`);
297
- success('Task retry requested', data, out);
298
- }
299
- catch (e) {
300
- if (e instanceof ApiError)
301
- fail(e.message);
302
- throw e;
303
- }
304
- });
305
- task
306
- .command('accept <id>')
307
- .description('POST /api/tasks/:id/accept')
308
- .action(async (id, _opts, cmd) => {
309
- const g = cmd.optsWithGlobals();
310
- const client = createClient(g);
311
- const out = { json: !!g.json };
312
- try {
313
- const data = await client.post(`/tasks/${encodeURIComponent(id)}/accept`);
314
- success('Task accepted', data, out);
315
- }
316
- catch (e) {
317
- if (e instanceof ApiError)
318
- fail(e.message);
319
- throw e;
320
- }
321
- });
322
- task
323
- .command('revision <id>')
324
- .description('POST /api/tasks/:id/revision')
325
- .option('--reason <text>')
326
- .action(async (id, opts, cmd) => {
327
- const g = cmd.optsWithGlobals();
328
- const client = createClient(g);
329
- const out = { json: !!g.json };
330
- try {
331
- const body = opts.reason !== undefined ? { reason: opts.reason } : undefined;
332
- const data = await client.post(`/tasks/${encodeURIComponent(id)}/revision`, body);
333
- success('Revision requested', data, out);
334
- }
335
- catch (e) {
336
- if (e instanceof ApiError)
337
- fail(e.message);
338
- throw e;
339
- }
340
- });
341
- task
342
- .command('archive <id>')
343
- .description('POST /api/tasks/:id/archive')
344
- .action(async (id, _opts, cmd) => {
345
- const g = cmd.optsWithGlobals();
346
- const client = createClient(g);
347
- const out = { json: !!g.json };
348
- try {
349
- const data = await client.post(`/tasks/${encodeURIComponent(id)}/archive`);
350
- success('Task archived', data, out);
351
- }
352
- catch (e) {
353
- if (e instanceof ApiError)
354
- fail(e.message);
355
- throw e;
356
- }
357
- });
358
- task
359
- .command('logs <id>')
360
- .description('GET /api/tasks/:id/logs')
361
- .action(async (id, _opts, cmd) => {
362
- const g = cmd.optsWithGlobals();
363
- const client = createClient(g);
364
- const out = { json: !!g.json };
365
- try {
366
- const data = await client.get(`/tasks/${encodeURIComponent(id)}/logs`);
367
- const rec = asObjectRecord(data);
368
- if (Object.keys(rec).length)
369
- detail(rec, out);
370
- else
371
- console.log(JSON.stringify(data, null, 2));
372
- }
373
- catch (e) {
374
- if (e instanceof ApiError)
375
- fail(e.message);
376
- throw e;
377
- }
378
- });
379
- task
380
- .command('comment <id>')
381
- .description('POST /api/tasks/:id/comments')
382
- .requiredOption('--content <text>')
383
- .option('--author-id <id>')
384
- .option('--author-name <name>')
385
- .action(async (id, opts, cmd) => {
386
- const g = cmd.optsWithGlobals();
387
- const client = createClient(g);
388
- const out = { json: !!g.json };
389
- try {
390
- const body = { content: opts.content };
391
- if (opts.authorId !== undefined)
392
- body.authorId = opts.authorId;
393
- if (opts.authorName !== undefined)
394
- body.authorName = opts.authorName;
395
- const data = await client.post(`/tasks/${encodeURIComponent(id)}/comments`, body);
396
- success('Comment added', data, out);
397
- }
398
- catch (e) {
399
- if (e instanceof ApiError)
400
- fail(e.message);
401
- throw e;
402
- }
403
- });
404
- task
405
- .command('comments <id>')
406
- .description('GET /api/tasks/:id/comments')
407
- .action(async (id, _opts, cmd) => {
408
- const g = cmd.optsWithGlobals();
409
- const client = createClient(g);
410
- const out = { json: !!g.json };
411
- try {
412
- const data = await client.get(`/tasks/${encodeURIComponent(id)}/comments`);
413
- const rows = asRowArray(data);
414
- if (rows.length > 0) {
415
- const keys = Object.keys(rows[0]);
416
- table(rows, keys.map(k => ({ key: k, header: k })), out);
417
- }
418
- else {
419
- console.log(JSON.stringify(data, null, 2));
420
- }
421
- }
422
- catch (e) {
423
- if (e instanceof ApiError)
424
- fail(e.message);
425
- throw e;
426
- }
427
- });
428
- task
429
- .command('subtasks <id>')
430
- .description('GET /api/tasks/:id/subtasks')
431
- .action(async (id, _opts, cmd) => {
432
- const g = cmd.optsWithGlobals();
433
- const client = createClient(g);
434
- const out = { json: !!g.json };
435
- try {
436
- const data = await client.get(`/tasks/${encodeURIComponent(id)}/subtasks`);
437
- const rows = asRowArray(data);
438
- if (rows.length > 0) {
439
- const keys = Object.keys(rows[0]);
440
- table(rows, keys.map(k => ({ key: k, header: k })), out);
441
- }
442
- else {
443
- console.log(JSON.stringify(data, null, 2));
444
- }
445
- }
446
- catch (e) {
447
- if (e instanceof ApiError)
448
- fail(e.message);
449
- throw e;
450
- }
451
- });
452
- task
453
- .command('subtask-add <id>')
454
- .description('POST /api/tasks/:id/subtasks')
455
- .requiredOption('--title <title>')
456
- .action(async (id, opts, cmd) => {
457
- const g = cmd.optsWithGlobals();
458
- const client = createClient(g);
459
- const out = { json: !!g.json };
460
- try {
461
- const data = await client.post(`/tasks/${encodeURIComponent(id)}/subtasks`, { title: opts.title });
462
- success('Subtask added', data, out);
463
- }
464
- catch (e) {
465
- if (e instanceof ApiError)
466
- fail(e.message);
467
- throw e;
468
- }
469
- });
470
- task
471
- .command('dashboard')
472
- .description('GET /api/tasks/dashboard')
473
- .option('--org-id <id>')
474
- .action(async (opts, cmd) => {
475
- const g = cmd.optsWithGlobals();
476
- const client = createClient(g);
477
- try {
478
- const data = await client.get('/tasks/dashboard', { orgId: opts.orgId });
479
- console.log(JSON.stringify(data, null, 2));
480
- }
481
- catch (e) {
482
- if (e instanceof ApiError)
483
- fail(e.message);
484
- throw e;
485
- }
486
- });
487
- task
488
- .command('board')
489
- .description('GET /api/taskboard')
490
- .option('--org-id <id>')
491
- .option('--project-id <id>')
492
- .action(async (opts, cmd) => {
493
- const g = cmd.optsWithGlobals();
494
- const client = createClient(g);
495
- try {
496
- const data = await client.get('/taskboard', {
497
- orgId: opts.orgId,
498
- projectId: opts.projectId,
499
- });
500
- console.log(JSON.stringify(data, null, 2));
501
- }
502
- catch (e) {
503
- if (e instanceof ApiError)
504
- fail(e.message);
505
- throw e;
506
- }
507
- });
508
- return task;
509
- }
510
- //# sourceMappingURL=task.js.map