@novateva/teurtask-cli 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.
Files changed (126) hide show
  1. package/README.md +263 -0
  2. package/dist/bin/teurtask-prod.d.ts +3 -0
  3. package/dist/bin/teurtask-prod.d.ts.map +1 -0
  4. package/dist/bin/teurtask-prod.js +6 -0
  5. package/dist/bin/teurtask-prod.js.map +1 -0
  6. package/dist/bin/teurtask.d.ts +3 -0
  7. package/dist/bin/teurtask.d.ts.map +1 -0
  8. package/dist/bin/teurtask.js +5 -0
  9. package/dist/bin/teurtask.js.map +1 -0
  10. package/dist/src/auth/index.d.ts +13 -0
  11. package/dist/src/auth/index.d.ts.map +1 -0
  12. package/dist/src/auth/index.js +44 -0
  13. package/dist/src/auth/index.js.map +1 -0
  14. package/dist/src/auth/login-server.d.ts +14 -0
  15. package/dist/src/auth/login-server.d.ts.map +1 -0
  16. package/dist/src/auth/login-server.js +84 -0
  17. package/dist/src/auth/login-server.js.map +1 -0
  18. package/dist/src/commands/auth.d.ts +3 -0
  19. package/dist/src/commands/auth.d.ts.map +1 -0
  20. package/dist/src/commands/auth.js +83 -0
  21. package/dist/src/commands/auth.js.map +1 -0
  22. package/dist/src/commands/comments.d.ts +3 -0
  23. package/dist/src/commands/comments.d.ts.map +1 -0
  24. package/dist/src/commands/comments.js +81 -0
  25. package/dist/src/commands/comments.js.map +1 -0
  26. package/dist/src/commands/documents.d.ts +3 -0
  27. package/dist/src/commands/documents.d.ts.map +1 -0
  28. package/dist/src/commands/documents.js +26 -0
  29. package/dist/src/commands/documents.js.map +1 -0
  30. package/dist/src/commands/env.d.ts +3 -0
  31. package/dist/src/commands/env.d.ts.map +1 -0
  32. package/dist/src/commands/env.js +71 -0
  33. package/dist/src/commands/env.js.map +1 -0
  34. package/dist/src/commands/goals.d.ts +3 -0
  35. package/dist/src/commands/goals.d.ts.map +1 -0
  36. package/dist/src/commands/goals.js +109 -0
  37. package/dist/src/commands/goals.js.map +1 -0
  38. package/dist/src/commands/notifications.d.ts +3 -0
  39. package/dist/src/commands/notifications.d.ts.map +1 -0
  40. package/dist/src/commands/notifications.js +77 -0
  41. package/dist/src/commands/notifications.js.map +1 -0
  42. package/dist/src/commands/phases.d.ts +3 -0
  43. package/dist/src/commands/phases.d.ts.map +1 -0
  44. package/dist/src/commands/phases.js +207 -0
  45. package/dist/src/commands/phases.js.map +1 -0
  46. package/dist/src/commands/projects.d.ts +3 -0
  47. package/dist/src/commands/projects.d.ts.map +1 -0
  48. package/dist/src/commands/projects.js +192 -0
  49. package/dist/src/commands/projects.js.map +1 -0
  50. package/dist/src/commands/schedules.d.ts +3 -0
  51. package/dist/src/commands/schedules.d.ts.map +1 -0
  52. package/dist/src/commands/schedules.js +155 -0
  53. package/dist/src/commands/schedules.js.map +1 -0
  54. package/dist/src/commands/scores.d.ts +3 -0
  55. package/dist/src/commands/scores.d.ts.map +1 -0
  56. package/dist/src/commands/scores.js +136 -0
  57. package/dist/src/commands/scores.js.map +1 -0
  58. package/dist/src/commands/sprints.d.ts +3 -0
  59. package/dist/src/commands/sprints.d.ts.map +1 -0
  60. package/dist/src/commands/sprints.js +218 -0
  61. package/dist/src/commands/sprints.js.map +1 -0
  62. package/dist/src/commands/tags.d.ts +3 -0
  63. package/dist/src/commands/tags.d.ts.map +1 -0
  64. package/dist/src/commands/tags.js +99 -0
  65. package/dist/src/commands/tags.js.map +1 -0
  66. package/dist/src/commands/tasks.d.ts +3 -0
  67. package/dist/src/commands/tasks.d.ts.map +1 -0
  68. package/dist/src/commands/tasks.js +355 -0
  69. package/dist/src/commands/tasks.js.map +1 -0
  70. package/dist/src/commands/users.d.ts +3 -0
  71. package/dist/src/commands/users.d.ts.map +1 -0
  72. package/dist/src/commands/users.js +172 -0
  73. package/dist/src/commands/users.js.map +1 -0
  74. package/dist/src/config/environments.d.ts +3 -0
  75. package/dist/src/config/environments.d.ts.map +1 -0
  76. package/dist/src/config/environments.js +18 -0
  77. package/dist/src/config/environments.js.map +1 -0
  78. package/dist/src/config/index.d.ts +7 -0
  79. package/dist/src/config/index.d.ts.map +1 -0
  80. package/dist/src/config/index.js +67 -0
  81. package/dist/src/config/index.js.map +1 -0
  82. package/dist/src/config/paths.d.ts +6 -0
  83. package/dist/src/config/paths.d.ts.map +1 -0
  84. package/dist/src/config/paths.js +9 -0
  85. package/dist/src/config/paths.js.map +1 -0
  86. package/dist/src/http/client.d.ts +8 -0
  87. package/dist/src/http/client.d.ts.map +1 -0
  88. package/dist/src/http/client.js +68 -0
  89. package/dist/src/http/client.js.map +1 -0
  90. package/dist/src/http/errors.d.ts +7 -0
  91. package/dist/src/http/errors.d.ts.map +1 -0
  92. package/dist/src/http/errors.js +34 -0
  93. package/dist/src/http/errors.js.map +1 -0
  94. package/dist/src/index.d.ts +3 -0
  95. package/dist/src/index.d.ts.map +1 -0
  96. package/dist/src/index.js +76 -0
  97. package/dist/src/index.js.map +1 -0
  98. package/dist/src/output/formatter.d.ts +10 -0
  99. package/dist/src/output/formatter.d.ts.map +1 -0
  100. package/dist/src/output/formatter.js +57 -0
  101. package/dist/src/output/formatter.js.map +1 -0
  102. package/dist/src/output/json.d.ts +6 -0
  103. package/dist/src/output/json.d.ts.map +1 -0
  104. package/dist/src/output/json.js +16 -0
  105. package/dist/src/output/json.js.map +1 -0
  106. package/dist/src/output/table.d.ts +9 -0
  107. package/dist/src/output/table.d.ts.map +1 -0
  108. package/dist/src/output/table.js +32 -0
  109. package/dist/src/output/table.js.map +1 -0
  110. package/dist/src/types/api.d.ts +172 -0
  111. package/dist/src/types/api.d.ts.map +1 -0
  112. package/dist/src/types/api.js +2 -0
  113. package/dist/src/types/api.js.map +1 -0
  114. package/dist/src/types/common.d.ts +18 -0
  115. package/dist/src/types/common.d.ts.map +1 -0
  116. package/dist/src/types/common.js +2 -0
  117. package/dist/src/types/common.js.map +1 -0
  118. package/dist/src/types/config.d.ts +22 -0
  119. package/dist/src/types/config.d.ts.map +1 -0
  120. package/dist/src/types/config.js +2 -0
  121. package/dist/src/types/config.js.map +1 -0
  122. package/dist/src/utils/spinner.d.ts +6 -0
  123. package/dist/src/utils/spinner.d.ts.map +1 -0
  124. package/dist/src/utils/spinner.js +35 -0
  125. package/dist/src/utils/spinner.js.map +1 -0
  126. package/package.json +32 -0
@@ -0,0 +1,136 @@
1
+ import { apiGet, apiPost, apiPut, apiDelete } from '../http/client.js';
2
+ import { getContext, outputList, outputDetail, outputSuccess, outputError } from '../output/formatter.js';
3
+ import { withSpinner } from '../utils/spinner.js';
4
+ export function registerScoreCommands(program) {
5
+ const score = program.command('score').description('Score management commands');
6
+ score
7
+ .command('list')
8
+ .description('List all scores')
9
+ .option('--task-id <id>', 'Filter by task ID')
10
+ .option('--with-user', 'Include user data in response')
11
+ .action(async (opts, cmd) => {
12
+ const ctx = getContext(cmd.optsWithGlobals());
13
+ try {
14
+ const params = {};
15
+ if (opts.taskId !== undefined)
16
+ params.task_id = Number(opts.taskId);
17
+ if (opts.withUser)
18
+ params.with_user = true;
19
+ const data = await withSpinner('Fetching scores...', () => apiGet('score', params));
20
+ outputList(ctx, data, [
21
+ { key: 'id', header: 'ID', width: 6 },
22
+ { key: 'score', header: 'Score', width: 10 },
23
+ { key: 'state', header: 'State', width: 15 },
24
+ { key: 'taskId', header: 'Task ID', width: 10 },
25
+ { key: 'dedicated_hours', header: 'Dedicated Hours', width: 16 },
26
+ { key: 'dificulty', header: 'Difficulty', width: 12 },
27
+ ]);
28
+ }
29
+ catch (err) {
30
+ outputError(ctx, err);
31
+ }
32
+ });
33
+ score
34
+ .command('get <id>')
35
+ .description('Get scores for a task by ID')
36
+ .action(async (id, _, cmd) => {
37
+ const ctx = getContext(cmd.optsWithGlobals());
38
+ try {
39
+ const data = await withSpinner('Fetching score...', () => apiGet(`score/${id}`));
40
+ outputDetail(ctx, data, {
41
+ id: 'ID',
42
+ score: 'Score',
43
+ state: 'State',
44
+ taskId: 'Task ID',
45
+ deadline_task: 'Deadline',
46
+ dedicated_hours: 'Dedicated Hours',
47
+ dificulty: 'Difficulty',
48
+ description: 'Description',
49
+ created_at: 'Created At',
50
+ updated_at: 'Updated At',
51
+ });
52
+ }
53
+ catch (err) {
54
+ outputError(ctx, err);
55
+ }
56
+ });
57
+ score
58
+ .command('create')
59
+ .description('Create a new score')
60
+ .requiredOption('--score <n>', 'Score value')
61
+ .requiredOption('--state <state>', 'Score state')
62
+ .requiredOption('--deadline-task <date>', 'Task deadline date')
63
+ .requiredOption('--task-id <n>', 'Task ID')
64
+ .requiredOption('--dedicated-hours <n>', 'Dedicated hours')
65
+ .requiredOption('--dificulty <dificulty>', 'Difficulty level')
66
+ .option('--description <text>', 'Score description')
67
+ .action(async (opts, cmd) => {
68
+ const ctx = getContext(cmd.optsWithGlobals());
69
+ try {
70
+ const body = {
71
+ score: Number(opts.score),
72
+ state: opts.state,
73
+ deadline_task: opts.deadlineTask,
74
+ task_id: Number(opts.taskId),
75
+ dedicated_hours: Number(opts.dedicatedHours),
76
+ dificulty: opts.dificulty,
77
+ };
78
+ if (opts.description !== undefined)
79
+ body.description = opts.description;
80
+ const data = await withSpinner('Creating score...', () => apiPost('score', body));
81
+ outputSuccess(ctx, 'Score created successfully', data);
82
+ }
83
+ catch (err) {
84
+ outputError(ctx, err);
85
+ }
86
+ });
87
+ score
88
+ .command('update <id>')
89
+ .description('Update an existing score')
90
+ .option('--score <n>', 'Score value')
91
+ .option('--state <state>', 'Score state')
92
+ .option('--deadline-task <date>', 'Task deadline date')
93
+ .option('--task-id <n>', 'Task ID')
94
+ .option('--dedicated-hours <n>', 'Dedicated hours')
95
+ .option('--dificulty <dificulty>', 'Difficulty level')
96
+ .option('--description <text>', 'Score description')
97
+ .action(async (id, opts, cmd) => {
98
+ const ctx = getContext(cmd.optsWithGlobals());
99
+ try {
100
+ const body = {};
101
+ if (opts.score !== undefined)
102
+ body.score = Number(opts.score);
103
+ if (opts.state !== undefined)
104
+ body.state = opts.state;
105
+ if (opts.deadlineTask !== undefined)
106
+ body.deadline_task = opts.deadlineTask;
107
+ if (opts.taskId !== undefined)
108
+ body.task_id = Number(opts.taskId);
109
+ if (opts.dedicatedHours !== undefined)
110
+ body.dedicated_hours = Number(opts.dedicatedHours);
111
+ if (opts.dificulty !== undefined)
112
+ body.dificulty = opts.dificulty;
113
+ if (opts.description !== undefined)
114
+ body.description = opts.description;
115
+ const data = await withSpinner('Updating score...', () => apiPut(`score/${id}`, body));
116
+ outputSuccess(ctx, `Score ${id} updated successfully`, data);
117
+ }
118
+ catch (err) {
119
+ outputError(ctx, err);
120
+ }
121
+ });
122
+ score
123
+ .command('delete <id>')
124
+ .description('Delete a score')
125
+ .action(async (id, _, cmd) => {
126
+ const ctx = getContext(cmd.optsWithGlobals());
127
+ try {
128
+ await withSpinner('Deleting score...', () => apiDelete(`score/${id}`));
129
+ outputSuccess(ctx, `Score ${id} deleted successfully`);
130
+ }
131
+ catch (err) {
132
+ outputError(ctx, err);
133
+ }
134
+ });
135
+ }
136
+ //# sourceMappingURL=scores.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scores.js","sourceRoot":"","sources":["../../../src/commands/scores.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerSprintCommands(program: Command): void;
3
+ //# sourceMappingURL=sprints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sprints.d.ts","sourceRoot":"","sources":["../../../src/commands/sprints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqM7D"}
@@ -0,0 +1,218 @@
1
+ import { apiGet, apiPost, apiPut, apiDelete } from '../http/client.js';
2
+ import { getContext, outputList, outputDetail, outputSuccess, outputError } from '../output/formatter.js';
3
+ import { withSpinner } from '../utils/spinner.js';
4
+ function parseIds(value) {
5
+ return value
6
+ .split(',')
7
+ .map((s) => s.trim())
8
+ .filter(Boolean)
9
+ .map(Number);
10
+ }
11
+ function truncate(value, length) {
12
+ const str = String(value ?? '');
13
+ return str.length > length ? str.slice(0, length - 1) + '…' : str;
14
+ }
15
+ export function registerSprintCommands(program) {
16
+ const sprint = program.command('sprint').description('Manage sprints');
17
+ // list
18
+ sprint
19
+ .command('list')
20
+ .description('List sprints')
21
+ .option('--project-id <id>', 'Filter by project ID')
22
+ .option('--phase-id <id>', 'Filter by phase ID')
23
+ .option('--archived', 'Filter to archived sprints (state filter)')
24
+ .option('--page <n>', 'Page number')
25
+ .option('--page-size <n>', 'Page size')
26
+ .option('--with-project', 'Include project relation')
27
+ .option('--with-phase', 'Include phase relation')
28
+ .option('--with-users', 'Include users relation')
29
+ .option('--with-tasks', 'Include tasks relation')
30
+ .option('--with-sprint-metrics', 'Include sprint metrics relation')
31
+ .action(async (opts, cmd) => {
32
+ const ctx = getContext(cmd.optsWithGlobals());
33
+ try {
34
+ const params = {};
35
+ if (opts.projectId !== undefined)
36
+ params['project_id'] = opts.projectId;
37
+ if (opts.phaseId !== undefined)
38
+ params['phase_id'] = opts.phaseId;
39
+ if (opts.archived)
40
+ params['state'] = 'archived';
41
+ if (opts.page !== undefined)
42
+ params['page'] = opts.page;
43
+ if (opts.pageSize !== undefined)
44
+ params['page_size'] = opts.pageSize;
45
+ if (opts.withProject)
46
+ params['with_project'] = true;
47
+ if (opts.withPhase)
48
+ params['with_phase'] = true;
49
+ if (opts.withUsers)
50
+ params['with_users'] = true;
51
+ if (opts.withTasks)
52
+ params['with_tasks'] = true;
53
+ if (opts.withSprintMetrics)
54
+ params['with_sprint_metrics'] = true;
55
+ const data = await withSpinner('Fetching sprints...', () => apiGet('/sprint', params));
56
+ const rows = (Array.isArray(data) ? data : data.data) ?? [];
57
+ const displayRows = rows.map((r) => ({
58
+ ...r,
59
+ description: truncate(r['description'], 30),
60
+ }));
61
+ outputList(ctx, displayRows, [
62
+ { key: 'id', header: 'ID', width: 10 },
63
+ { key: 'description', header: 'Description', width: 32 },
64
+ { key: 'start_date', header: 'Start Date', width: 14 },
65
+ { key: 'deadline', header: 'Deadline', width: 14 },
66
+ { key: 'state', header: 'State', width: 12 },
67
+ { key: 'project_id', header: 'Project ID', width: 12 },
68
+ ]);
69
+ }
70
+ catch (err) {
71
+ outputError(ctx, err);
72
+ }
73
+ });
74
+ // get
75
+ sprint
76
+ .command('get <id>')
77
+ .description('Get a sprint by ID')
78
+ .action(async (id, opts, cmd) => {
79
+ const ctx = getContext(cmd.optsWithGlobals());
80
+ try {
81
+ const data = await withSpinner(`Fetching sprint ${id}...`, () => apiGet(`/sprint/${id}`));
82
+ outputDetail(ctx, data);
83
+ }
84
+ catch (err) {
85
+ outputError(ctx, err);
86
+ }
87
+ });
88
+ // create
89
+ sprint
90
+ .command('create')
91
+ .description('Create a new sprint')
92
+ .requiredOption('--project-id <id>', 'Project ID')
93
+ .requiredOption('--start-date <date>', 'Start date (YYYY-MM-DD)')
94
+ .requiredOption('--deadline <date>', 'Deadline date (YYYY-MM-DD)')
95
+ .option('--phase-id <id>', 'Phase ID')
96
+ .option('--description <text>', 'Sprint description')
97
+ .option('--should-fill-daily', 'Enable daily fill (boolean flag)')
98
+ .option('--user-ids <ids>', 'Comma-separated user IDs')
99
+ .option('--task-ids <ids>', 'Comma-separated task IDs')
100
+ .option('--responsible-ids <ids>', 'Comma-separated responsible user IDs')
101
+ .action(async (opts, cmd) => {
102
+ const ctx = getContext(cmd.optsWithGlobals());
103
+ try {
104
+ const body = {
105
+ project_id: opts.projectId,
106
+ start_date: opts.startDate,
107
+ deadline: opts.deadline,
108
+ };
109
+ if (opts.phaseId !== undefined)
110
+ body['phase_id'] = opts.phaseId;
111
+ if (opts.description !== undefined)
112
+ body['description'] = opts.description;
113
+ if (opts.shouldFillDaily)
114
+ body['should_fill_daily'] = true;
115
+ if (opts.userIds !== undefined)
116
+ body['user_ids'] = parseIds(opts.userIds);
117
+ if (opts.taskIds !== undefined)
118
+ body['task_ids'] = parseIds(opts.taskIds);
119
+ if (opts.responsibleIds !== undefined)
120
+ body['responsible_ids'] = parseIds(opts.responsibleIds);
121
+ const data = await withSpinner('Creating sprint...', () => apiPost('/sprint', body));
122
+ outputSuccess(ctx, 'Sprint created successfully', data);
123
+ }
124
+ catch (err) {
125
+ outputError(ctx, err);
126
+ }
127
+ });
128
+ // update
129
+ sprint
130
+ .command('update <id>')
131
+ .description('Update a sprint')
132
+ .option('--description <text>', 'Sprint description')
133
+ .option('--start-date <date>', 'Start date (YYYY-MM-DD)')
134
+ .option('--deadline <date>', 'Deadline date (YYYY-MM-DD)')
135
+ .option('--user-ids <ids>', 'Comma-separated user IDs')
136
+ .option('--responsible-ids <ids>', 'Comma-separated responsible user IDs')
137
+ .action(async (id, opts, cmd) => {
138
+ const ctx = getContext(cmd.optsWithGlobals());
139
+ try {
140
+ const body = {};
141
+ if (opts.description !== undefined)
142
+ body['description'] = opts.description;
143
+ if (opts.startDate !== undefined)
144
+ body['start_date'] = opts.startDate;
145
+ if (opts.deadline !== undefined)
146
+ body['deadline'] = opts.deadline;
147
+ if (opts.userIds !== undefined)
148
+ body['user_ids'] = parseIds(opts.userIds);
149
+ if (opts.responsibleIds !== undefined)
150
+ body['responsible_ids'] = parseIds(opts.responsibleIds);
151
+ const data = await withSpinner(`Updating sprint ${id}...`, () => apiPut(`/sprint/${id}`, body));
152
+ outputSuccess(ctx, `Sprint ${id} updated successfully`, data);
153
+ }
154
+ catch (err) {
155
+ outputError(ctx, err);
156
+ }
157
+ });
158
+ // delete
159
+ sprint
160
+ .command('delete <id>')
161
+ .description('Delete a sprint')
162
+ .action(async (id, opts, cmd) => {
163
+ const ctx = getContext(cmd.optsWithGlobals());
164
+ try {
165
+ const data = await withSpinner(`Deleting sprint ${id}...`, () => apiDelete(`/sprint/${id}`));
166
+ outputSuccess(ctx, `Sprint ${id} deleted successfully`, data);
167
+ }
168
+ catch (err) {
169
+ outputError(ctx, err);
170
+ }
171
+ });
172
+ // close
173
+ sprint
174
+ .command('close')
175
+ .description('Close a sprint')
176
+ .requiredOption('--sprint-id <id>', 'Sprint ID to close')
177
+ .option('--score-client <n>', 'Client score')
178
+ .option('--comment-client <text>', 'Client comment')
179
+ .option('--open-new', 'Open a new sprint after closing')
180
+ .option('--task-ids <ids>', 'Comma-separated task IDs to carry over')
181
+ .action(async (opts, cmd) => {
182
+ const ctx = getContext(cmd.optsWithGlobals());
183
+ try {
184
+ const body = {
185
+ sprint_id: opts.sprintId,
186
+ review_users: [],
187
+ };
188
+ if (opts.scoreClient !== undefined)
189
+ body['score_client'] = Number(opts.scoreClient);
190
+ if (opts.commentClient !== undefined)
191
+ body['comment_client'] = opts.commentClient;
192
+ if (opts.openNew)
193
+ body['open_new'] = true;
194
+ if (opts.taskIds !== undefined)
195
+ body['task_ids'] = parseIds(opts.taskIds);
196
+ const data = await withSpinner(`Closing sprint ${opts.sprintId}...`, () => apiPost('/sprint/close', body));
197
+ outputSuccess(ctx, `Sprint ${opts.sprintId} closed successfully`, data);
198
+ }
199
+ catch (err) {
200
+ outputError(ctx, err);
201
+ }
202
+ });
203
+ // report
204
+ sprint
205
+ .command('report <id>')
206
+ .description('Get a sprint report')
207
+ .action(async (id, opts, cmd) => {
208
+ const ctx = getContext(cmd.optsWithGlobals());
209
+ try {
210
+ const data = await withSpinner(`Fetching report for sprint ${id}...`, () => apiGet(`/sprint/reports/${id}`));
211
+ outputDetail(ctx, data);
212
+ }
213
+ catch (err) {
214
+ outputError(ctx, err);
215
+ }
216
+ });
217
+ }
218
+ //# sourceMappingURL=sprints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sprints.js","sourceRoot":"","sources":["../../../src/commands/sprints.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerTagCommands(program: Command): void;
3
+ //# sourceMappingURL=tags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../../src/commands/tags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmG1D"}
@@ -0,0 +1,99 @@
1
+ import { apiGet, apiPost, apiPut, apiDelete } from '../http/client.js';
2
+ import { getContext, outputList, outputDetail, outputSuccess, outputError } from '../output/formatter.js';
3
+ import { withSpinner } from '../utils/spinner.js';
4
+ export function registerTagCommands(program) {
5
+ const tag = program.command('tag').description('Tag management commands');
6
+ tag
7
+ .command('list')
8
+ .description('List all tags')
9
+ .option('--project-id <id>', 'Filter by project ID')
10
+ .option('--name <name>', 'Filter by tag name')
11
+ .action(async (opts, cmd) => {
12
+ const ctx = getContext(cmd.optsWithGlobals());
13
+ try {
14
+ const params = {};
15
+ if (opts.projectId !== undefined)
16
+ params.project_id = Number(opts.projectId);
17
+ if (opts.name !== undefined)
18
+ params.name = opts.name;
19
+ const data = await withSpinner('Fetching tags...', () => apiGet('tags', params));
20
+ outputList(ctx, data, [
21
+ { key: 'id', header: 'ID', width: 6 },
22
+ { key: 'name', header: 'Name', width: 40 },
23
+ { key: 'project_id', header: 'Project ID', width: 12 },
24
+ ]);
25
+ }
26
+ catch (err) {
27
+ outputError(ctx, err);
28
+ }
29
+ });
30
+ tag
31
+ .command('get <id>')
32
+ .description('Get a tag by ID')
33
+ .action(async (id, _, cmd) => {
34
+ const ctx = getContext(cmd.optsWithGlobals());
35
+ try {
36
+ const data = await withSpinner('Fetching tag...', () => apiGet(`tags/${id}`));
37
+ outputDetail(ctx, data, {
38
+ id: 'ID',
39
+ name: 'Name',
40
+ project_id: 'Project ID',
41
+ created_at: 'Created At',
42
+ updated_at: 'Updated At',
43
+ });
44
+ }
45
+ catch (err) {
46
+ outputError(ctx, err);
47
+ }
48
+ });
49
+ tag
50
+ .command('create')
51
+ .description('Create a new tag')
52
+ .requiredOption('--name <name>', 'Tag name')
53
+ .requiredOption('--project-id <id>', 'Project ID')
54
+ .action(async (opts, cmd) => {
55
+ const ctx = getContext(cmd.optsWithGlobals());
56
+ try {
57
+ const body = {
58
+ name: opts.name,
59
+ project_id: Number(opts.projectId),
60
+ };
61
+ const data = await withSpinner('Creating tag...', () => apiPost('tags', body));
62
+ outputSuccess(ctx, `Tag "${opts.name}" created successfully`, data);
63
+ }
64
+ catch (err) {
65
+ outputError(ctx, err);
66
+ }
67
+ });
68
+ tag
69
+ .command('update <id>')
70
+ .description('Update an existing tag')
71
+ .option('--name <name>', 'Tag name')
72
+ .action(async (id, opts, cmd) => {
73
+ const ctx = getContext(cmd.optsWithGlobals());
74
+ try {
75
+ const body = {};
76
+ if (opts.name !== undefined)
77
+ body.name = opts.name;
78
+ const data = await withSpinner('Updating tag...', () => apiPut(`tags/${id}`, body));
79
+ outputSuccess(ctx, `Tag ${id} updated successfully`, data);
80
+ }
81
+ catch (err) {
82
+ outputError(ctx, err);
83
+ }
84
+ });
85
+ tag
86
+ .command('delete <id>')
87
+ .description('Delete a tag')
88
+ .action(async (id, _, cmd) => {
89
+ const ctx = getContext(cmd.optsWithGlobals());
90
+ try {
91
+ await withSpinner('Deleting tag...', () => apiDelete(`tags/${id}`));
92
+ outputSuccess(ctx, `Tag ${id} deleted successfully`);
93
+ }
94
+ catch (err) {
95
+ outputError(ctx, err);
96
+ }
97
+ });
98
+ }
99
+ //# sourceMappingURL=tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.js","sourceRoot":"","sources":["../../../src/commands/tags.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerTaskCommands(program: Command): void;
3
+ //# sourceMappingURL=tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwV3D"}