@proletariat/cli 0.3.98 → 0.3.100
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/dist/commands/orchestrate/index.js +30 -3
- package/dist/commands/orchestrate/index.js.map +1 -1
- package/dist/commands/qa/index.js +1 -1
- package/dist/commands/ticket/create.d.ts +44 -0
- package/dist/commands/ticket/create.js +754 -0
- package/dist/commands/ticket/create.js.map +1 -0
- package/dist/commands/ticket/delete.d.ts +17 -0
- package/dist/commands/ticket/delete.js +204 -0
- package/dist/commands/ticket/delete.js.map +1 -0
- package/dist/commands/ticket/edit.d.ts +28 -0
- package/dist/commands/ticket/edit.js +402 -0
- package/dist/commands/ticket/edit.js.map +1 -0
- package/dist/commands/ticket/index.d.ts +13 -0
- package/dist/commands/ticket/index.js +74 -0
- package/dist/commands/ticket/index.js.map +1 -0
- package/dist/commands/ticket/list.d.ts +33 -0
- package/dist/commands/ticket/list.js +519 -0
- package/dist/commands/ticket/list.js.map +1 -0
- package/dist/commands/ticket/move.d.ts +27 -0
- package/dist/commands/ticket/move.js +413 -0
- package/dist/commands/ticket/move.js.map +1 -0
- package/dist/commands/ticket/show.d.ts +14 -0
- package/dist/commands/ticket/show.js +110 -0
- package/dist/commands/ticket/show.js.map +1 -0
- package/dist/commands/ticket/update.d.ts +28 -0
- package/dist/commands/ticket/update.js +458 -0
- package/dist/commands/ticket/update.js.map +1 -0
- package/dist/lib/execution/preflight.js +1 -1
- package/dist/lib/execution/preflight.js.map +1 -1
- package/dist/lib/mcp/tools/action.d.ts +6 -0
- package/dist/lib/mcp/tools/action.js +123 -0
- package/dist/lib/mcp/tools/action.js.map +1 -0
- package/dist/lib/mcp/tools/index.d.ts +2 -0
- package/dist/lib/mcp/tools/index.js +2 -0
- package/dist/lib/mcp/tools/index.js.map +1 -1
- package/dist/lib/mcp/tools/ticket.d.ts +6 -0
- package/dist/lib/mcp/tools/ticket.js +464 -0
- package/dist/lib/mcp/tools/ticket.js.map +1 -0
- package/dist/lib/orchestrate/poller.d.ts +22 -0
- package/dist/lib/orchestrate/poller.js +109 -0
- package/dist/lib/orchestrate/poller.js.map +1 -1
- package/dist/lib/sync/engine.js +47 -5
- package/dist/lib/sync/engine.js.map +1 -1
- package/dist/lib/sync/reconciler.d.ts +27 -1
- package/dist/lib/sync/reconciler.js +109 -1
- package/dist/lib/sync/reconciler.js.map +1 -1
- package/oclif.manifest.json +2021 -1153
- package/package.json +1 -1
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
import { Args, Flags } from '@oclif/core';
|
|
2
|
+
import { autoExportToBoard, PMOCommand, pmoBaseFlags, } from '../../lib/pmo/index.js';
|
|
3
|
+
import { PMOError } from '../../lib/pmo/types.js';
|
|
4
|
+
import { styles } from '../../lib/styles.js';
|
|
5
|
+
import { shouldOutputJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
|
|
6
|
+
import { formatTicket } from '../../lib/mcp/helpers.js';
|
|
7
|
+
export default class TicketMove extends PMOCommand {
|
|
8
|
+
static description = 'Move ticket(s) to a different column';
|
|
9
|
+
static examples = [
|
|
10
|
+
'<%= config.bin %> <%= command.id %> my-ticket "In Progress"',
|
|
11
|
+
'<%= config.bin %> <%= command.id %> implement-auth Done',
|
|
12
|
+
'<%= config.bin %> <%= command.id %> TKT-123 --status "In Review"',
|
|
13
|
+
'<%= config.bin %> <%= command.id %> fix-bug "In Review" --position 0',
|
|
14
|
+
'<%= config.bin %> <%= command.id %> TKT-123 --to-project PROJ-002',
|
|
15
|
+
'<%= config.bin %> <%= command.id %> --bulk',
|
|
16
|
+
];
|
|
17
|
+
static args = {
|
|
18
|
+
ticketId: Args.string({
|
|
19
|
+
description: 'Ticket ID - prompts with dropdown if not provided',
|
|
20
|
+
required: false,
|
|
21
|
+
}),
|
|
22
|
+
column: Args.string({
|
|
23
|
+
description: 'Target column - prompts with dropdown if not provided',
|
|
24
|
+
required: false,
|
|
25
|
+
}),
|
|
26
|
+
};
|
|
27
|
+
static flags = {
|
|
28
|
+
...pmoBaseFlags,
|
|
29
|
+
status: Flags.string({
|
|
30
|
+
char: 's',
|
|
31
|
+
description: 'Target status/column (alternative to positional column argument)',
|
|
32
|
+
}),
|
|
33
|
+
position: Flags.integer({
|
|
34
|
+
description: 'Position within the column (0 = top)',
|
|
35
|
+
}),
|
|
36
|
+
'to-project': Flags.string({
|
|
37
|
+
description: 'Move ticket to a different project (uses Backlog/default column)',
|
|
38
|
+
}),
|
|
39
|
+
bulk: Flags.boolean({
|
|
40
|
+
char: 'b',
|
|
41
|
+
description: 'Enable bulk mode to move multiple tickets',
|
|
42
|
+
default: false,
|
|
43
|
+
}),
|
|
44
|
+
force: Flags.boolean({
|
|
45
|
+
char: 'f',
|
|
46
|
+
description: 'Skip confirmation prompt (bulk mode only)',
|
|
47
|
+
default: false,
|
|
48
|
+
}),
|
|
49
|
+
};
|
|
50
|
+
async execute() {
|
|
51
|
+
const { args, flags } = await this.parse(TicketMove);
|
|
52
|
+
// Check if JSON output mode is active
|
|
53
|
+
const jsonMode = shouldOutputJson(flags);
|
|
54
|
+
// Helper to handle errors in JSON mode
|
|
55
|
+
const handleError = (code, message) => {
|
|
56
|
+
if (jsonMode) {
|
|
57
|
+
outputErrorAsJson(code, message, createMetadata('ticket move', flags));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
this.error(message);
|
|
61
|
+
};
|
|
62
|
+
// --status flag takes precedence over positional column arg
|
|
63
|
+
const columnArg = flags.status || args.column;
|
|
64
|
+
// Cross-project move: if ticketId and --to-project are provided, skip project context
|
|
65
|
+
// The source project is determined from the ticket itself
|
|
66
|
+
if (args.ticketId && flags['to-project']) {
|
|
67
|
+
const ticket = await this.storage.getTicket(args.ticketId);
|
|
68
|
+
if (!ticket) {
|
|
69
|
+
return handleError('TICKET_NOT_FOUND', `Ticket "${args.ticketId}" not found.`);
|
|
70
|
+
}
|
|
71
|
+
await this.executeCrossProjectMove(ticket, flags['to-project'], columnArg, jsonMode, flags);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
// This command requires project context - get projectId (with JSON mode support)
|
|
75
|
+
const projectId = await this.requireProject({
|
|
76
|
+
jsonMode: {
|
|
77
|
+
flags,
|
|
78
|
+
commandName: 'ticket move',
|
|
79
|
+
baseCommand: 'prlt ticket move',
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
// Get all tickets
|
|
83
|
+
const allTickets = await this.storage.listTickets(projectId);
|
|
84
|
+
if (allTickets.length === 0) {
|
|
85
|
+
return handleError('NO_TICKETS', 'No tickets found. Create a ticket first with "prlt ticket create".');
|
|
86
|
+
}
|
|
87
|
+
// Bulk mode
|
|
88
|
+
if (flags.bulk) {
|
|
89
|
+
await this.executeBulk(allTickets, flags, projectId);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
// Single ticket mode
|
|
93
|
+
let ticketId = args.ticketId;
|
|
94
|
+
if (!ticketId) {
|
|
95
|
+
// Use helper for ticket selection (handles JSON mode automatically)
|
|
96
|
+
const selected = await this.selectFromList({
|
|
97
|
+
message: 'Select ticket to move:',
|
|
98
|
+
items: allTickets,
|
|
99
|
+
getName: (t) => `${t.id} - ${t.title} (${t.statusName})`,
|
|
100
|
+
getValue: (t) => t.id,
|
|
101
|
+
getCommand: (t) => `prlt ticket move ${t.id} -P ${projectId} --json`,
|
|
102
|
+
jsonMode: jsonMode ? { flags, commandName: 'ticket move' } : null,
|
|
103
|
+
});
|
|
104
|
+
if (!selected) {
|
|
105
|
+
return; // Cancelled or JSON mode (already exited)
|
|
106
|
+
}
|
|
107
|
+
ticketId = selected;
|
|
108
|
+
}
|
|
109
|
+
// Get ticket
|
|
110
|
+
const ticket = await this.storage.getTicket(ticketId);
|
|
111
|
+
if (!ticket) {
|
|
112
|
+
return handleError('TICKET_NOT_FOUND', `Ticket "${ticketId}" not found.`);
|
|
113
|
+
}
|
|
114
|
+
// Use resolved internal ID for all subsequent operations (external keys like PRLT-xxx resolve to TKT-xxx)
|
|
115
|
+
ticketId = ticket.id;
|
|
116
|
+
// Cross-project move (when --to-project flag is provided)
|
|
117
|
+
if (flags['to-project']) {
|
|
118
|
+
await this.executeCrossProjectMove(ticket, flags['to-project'], columnArg, jsonMode, flags);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
// Get target column - prompt if not provided
|
|
122
|
+
let targetColumn = columnArg;
|
|
123
|
+
if (!targetColumn) {
|
|
124
|
+
// Check if there are other projects to move to
|
|
125
|
+
const allProjects = await this.storage.listProjects();
|
|
126
|
+
const otherProjects = allProjects.filter(p => p.id !== projectId);
|
|
127
|
+
// If there are other projects, ask user what type of move they want
|
|
128
|
+
if (otherProjects.length > 0) {
|
|
129
|
+
const moveTypeChoices = [
|
|
130
|
+
{ id: 'column', name: 'Different column (same project)' },
|
|
131
|
+
{ id: 'project', name: 'Different project' },
|
|
132
|
+
];
|
|
133
|
+
const moveType = await this.selectFromList({
|
|
134
|
+
message: 'Move to:',
|
|
135
|
+
items: moveTypeChoices,
|
|
136
|
+
getName: (choice) => choice.name,
|
|
137
|
+
getValue: (choice) => choice.id,
|
|
138
|
+
getCommand: (choice) => choice.id === 'column'
|
|
139
|
+
? `prlt ticket move ${ticketId} -P ${projectId} --json`
|
|
140
|
+
: `prlt ticket project ${ticketId} -P ${projectId} --json`,
|
|
141
|
+
jsonMode: jsonMode ? { flags, commandName: 'ticket move' } : null,
|
|
142
|
+
});
|
|
143
|
+
if (!moveType) {
|
|
144
|
+
return; // Cancelled or JSON mode
|
|
145
|
+
}
|
|
146
|
+
// If user chose different project, handle cross-project move
|
|
147
|
+
if (moveType === 'project') {
|
|
148
|
+
const targetProjectId = await this.selectFromList({
|
|
149
|
+
message: 'Select target project:',
|
|
150
|
+
items: otherProjects,
|
|
151
|
+
getName: (p) => `${p.name} (${p.id})`,
|
|
152
|
+
getValue: (p) => p.id,
|
|
153
|
+
getCommand: (p) => `prlt ticket move ${ticketId} --to-project ${p.id} --json`,
|
|
154
|
+
jsonMode: jsonMode ? { flags, commandName: 'ticket move' } : null,
|
|
155
|
+
});
|
|
156
|
+
if (!targetProjectId) {
|
|
157
|
+
return; // Cancelled or JSON mode
|
|
158
|
+
}
|
|
159
|
+
// Get columns from target project and ask which column to move to
|
|
160
|
+
const targetProjectBoard = await this.storage.getProjectBoard(targetProjectId);
|
|
161
|
+
if (!targetProjectBoard) {
|
|
162
|
+
return handleError('PROJECT_NOT_FOUND', 'Target project not found.');
|
|
163
|
+
}
|
|
164
|
+
const targetColumnName = await this.selectFromList({
|
|
165
|
+
message: 'Move to column:',
|
|
166
|
+
items: targetProjectBoard.columns,
|
|
167
|
+
getName: (col) => col.name,
|
|
168
|
+
getValue: (col) => col.name,
|
|
169
|
+
getCommand: (col) => `prlt ticket move ${ticketId} "${col.name}" --to-project ${targetProjectId} --json`,
|
|
170
|
+
jsonMode: jsonMode ? { flags, commandName: 'ticket move' } : null,
|
|
171
|
+
});
|
|
172
|
+
if (!targetColumnName) {
|
|
173
|
+
return; // Cancelled or JSON mode
|
|
174
|
+
}
|
|
175
|
+
await this.executeCrossProjectMove(ticket, targetProjectId, targetColumnName, jsonMode, flags);
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// Get columns from the database (not config.json) to ensure accuracy
|
|
180
|
+
const project = await this.storage.getProjectBoard(projectId);
|
|
181
|
+
if (!project) {
|
|
182
|
+
return handleError('PROJECT_NOT_FOUND', 'Project not found.');
|
|
183
|
+
}
|
|
184
|
+
// Use helper for column selection (handles JSON mode automatically)
|
|
185
|
+
const selected = await this.selectFromList({
|
|
186
|
+
message: 'Move to column:',
|
|
187
|
+
items: project.columns,
|
|
188
|
+
getName: (col) => col.name === ticket.statusName ? `${col.name} (current)` : col.name,
|
|
189
|
+
getValue: (col) => col.name,
|
|
190
|
+
getCommand: (col) => `prlt ticket move ${ticketId} "${col.name}" -P ${projectId} --json`,
|
|
191
|
+
jsonMode: jsonMode ? { flags, commandName: 'ticket move' } : null,
|
|
192
|
+
});
|
|
193
|
+
if (!selected) {
|
|
194
|
+
return; // Cancelled or JSON mode (already exited)
|
|
195
|
+
}
|
|
196
|
+
targetColumn = selected;
|
|
197
|
+
}
|
|
198
|
+
// Column validation happens in storage.moveTicket()
|
|
199
|
+
// Check if actually moving
|
|
200
|
+
if (targetColumn === ticket.statusName && flags.position === undefined) {
|
|
201
|
+
this.log(styles.warning(`Ticket "${ticketId}" is already in "${targetColumn}".`));
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
// Move ticket through the provider (routes to Linear/Jira/PMO as appropriate)
|
|
205
|
+
const provider = await this.resolveTicketProvider(ticketId, projectId);
|
|
206
|
+
const moveResult = await provider.moveTicket(ticketId, targetColumn);
|
|
207
|
+
if (!moveResult.success) {
|
|
208
|
+
return handleError('MOVE_FAILED', `Failed to move ticket: ${moveResult.error}`);
|
|
209
|
+
}
|
|
210
|
+
// If position was specified, apply it via local storage (positions are PMO-only)
|
|
211
|
+
if (flags.position !== undefined) {
|
|
212
|
+
try {
|
|
213
|
+
await this.storage.moveTicket(projectId, ticketId, targetColumn, flags.position);
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
// Non-fatal: the move succeeded, position is best-effort
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// Refresh ticket to get updated status
|
|
220
|
+
const moved = await this.storage.getTicket(ticketId) || ticket;
|
|
221
|
+
// Auto-export to board.md after write
|
|
222
|
+
await autoExportToBoard(this.pmoPath, this.storage, (msg) => this.log(styles.muted(msg)));
|
|
223
|
+
// JSON output mode - match MCP tool response shape
|
|
224
|
+
if (jsonMode) {
|
|
225
|
+
this.log(JSON.stringify({
|
|
226
|
+
success: true,
|
|
227
|
+
ticket: formatTicket(moved),
|
|
228
|
+
provider: moveResult.provider,
|
|
229
|
+
}, null, 2));
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
this.log(styles.success(`\n✅ Moved ticket ${styles.emphasis(moved.id)}`));
|
|
233
|
+
if (targetColumn !== ticket.statusName) {
|
|
234
|
+
this.log(styles.muted(` From: ${ticket.statusName}`));
|
|
235
|
+
this.log(styles.muted(` To: ${moved.statusName}`));
|
|
236
|
+
}
|
|
237
|
+
if (flags.position !== undefined) {
|
|
238
|
+
this.log(styles.muted(` Position: ${flags.position}`));
|
|
239
|
+
}
|
|
240
|
+
if (moveResult.provider !== 'pmo') {
|
|
241
|
+
this.log(styles.muted(` Provider: ${moveResult.provider}`));
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
async executeBulk(allTickets, flags, projectId) {
|
|
245
|
+
// Only show header in interactive mode
|
|
246
|
+
if (!shouldOutputJson(flags)) {
|
|
247
|
+
this.log(styles.emphasis('📦 Move Multiple Tickets\n'));
|
|
248
|
+
}
|
|
249
|
+
// Get columns
|
|
250
|
+
const board = await this.storage.getProjectBoard(projectId);
|
|
251
|
+
if (!board) {
|
|
252
|
+
this.error(`Project "${projectId}" not found. The ticket may belong to an orphaned project.`);
|
|
253
|
+
}
|
|
254
|
+
const columns = board.columns.map(col => col.name);
|
|
255
|
+
// Agent mode config for prompts
|
|
256
|
+
const jsonModeConfig = shouldOutputJson(flags) ? { flags, commandName: 'ticket move --bulk' } : null;
|
|
257
|
+
// Select tickets to move (now agent-compatible!)
|
|
258
|
+
const { selectedTickets } = await this.prompt([{
|
|
259
|
+
type: 'checkbox',
|
|
260
|
+
name: 'selectedTickets',
|
|
261
|
+
message: 'Select tickets to move:',
|
|
262
|
+
choices: allTickets.map(t => ({
|
|
263
|
+
name: `${t.id} - ${t.title} (${t.statusName})`,
|
|
264
|
+
value: t.id,
|
|
265
|
+
command: `prlt ticket move ${t.id} -P ${projectId} --json`, // For agent: select single ticket
|
|
266
|
+
})),
|
|
267
|
+
}], jsonModeConfig);
|
|
268
|
+
if (selectedTickets.length === 0) {
|
|
269
|
+
this.log(styles.muted('No tickets selected.'));
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
// Select target column (now agent-compatible!)
|
|
273
|
+
const { targetColumn } = await this.prompt([{
|
|
274
|
+
type: 'list',
|
|
275
|
+
name: 'targetColumn',
|
|
276
|
+
message: 'Move selected tickets to:',
|
|
277
|
+
choices: columns.map(c => ({
|
|
278
|
+
name: c,
|
|
279
|
+
value: c,
|
|
280
|
+
command: `prlt ticket move ${selectedTickets.join(' ')} "${c}" -P ${projectId} --json`,
|
|
281
|
+
})),
|
|
282
|
+
}], jsonModeConfig);
|
|
283
|
+
// Confirmation
|
|
284
|
+
if (!flags.force) {
|
|
285
|
+
this.log(styles.warning('\nThis will move:'));
|
|
286
|
+
for (const ticketId of selectedTickets) {
|
|
287
|
+
const ticket = allTickets.find(t => t.id === ticketId);
|
|
288
|
+
this.log(styles.primary(` • ${ticketId}: ${ticket?.title}`));
|
|
289
|
+
}
|
|
290
|
+
this.log(styles.primary(` → to column: ${targetColumn}\n`));
|
|
291
|
+
const { confirm } = await this.prompt([{
|
|
292
|
+
type: 'list',
|
|
293
|
+
name: 'confirm',
|
|
294
|
+
message: 'Continue?',
|
|
295
|
+
choices: [
|
|
296
|
+
{ name: 'No, cancel', value: 'false', command: '' },
|
|
297
|
+
{ name: 'Yes, move tickets', value: 'true', command: `prlt ticket move ${selectedTickets.join(' ')} "${targetColumn}" -P ${projectId} --force --json` }
|
|
298
|
+
],
|
|
299
|
+
}], jsonModeConfig);
|
|
300
|
+
if (!confirm) {
|
|
301
|
+
this.log(styles.muted('Move cancelled.'));
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
this.log('');
|
|
306
|
+
// Move each ticket
|
|
307
|
+
let successCount = 0;
|
|
308
|
+
let failCount = 0;
|
|
309
|
+
// Process sequentially for clear success/failure logging
|
|
310
|
+
for (const ticketId of selectedTickets) {
|
|
311
|
+
try {
|
|
312
|
+
// eslint-disable-next-line no-await-in-loop
|
|
313
|
+
const provider = await this.resolveTicketProvider(ticketId, projectId);
|
|
314
|
+
// eslint-disable-next-line no-await-in-loop
|
|
315
|
+
const result = await provider.moveTicket(ticketId, targetColumn);
|
|
316
|
+
if (result.success) {
|
|
317
|
+
this.log(styles.success(`Moved ${ticketId} to ${targetColumn}`));
|
|
318
|
+
successCount++;
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
this.log(styles.error(`Failed to move ${ticketId}: ${result.error}`));
|
|
322
|
+
failCount++;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
catch (error) {
|
|
326
|
+
this.log(styles.error(`Failed to move ${ticketId}: ${error instanceof Error ? error.message : String(error)}`));
|
|
327
|
+
failCount++;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
// Auto-export to kanban.md
|
|
331
|
+
await autoExportToBoard(this.pmoPath, this.storage, (msg) => this.log(styles.muted(msg)));
|
|
332
|
+
// Summary
|
|
333
|
+
this.log('');
|
|
334
|
+
if (successCount > 0) {
|
|
335
|
+
this.log(styles.success(`Moved ${successCount} ticket(s)`));
|
|
336
|
+
}
|
|
337
|
+
if (failCount > 0) {
|
|
338
|
+
this.log(styles.error(`Failed to move ${failCount} ticket(s)`));
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Move a ticket to a different project.
|
|
343
|
+
* If a target column is specified and exists in the target project, move to that column.
|
|
344
|
+
* Otherwise, use the default/backlog column.
|
|
345
|
+
*/
|
|
346
|
+
async executeCrossProjectMove(ticket, targetProjectId, targetColumn, jsonMode, flags) {
|
|
347
|
+
const ticketId = ticket.id;
|
|
348
|
+
const sourceProjectId = ticket.projectId;
|
|
349
|
+
// Check if target project exists
|
|
350
|
+
const projects = await this.storage.listProjects();
|
|
351
|
+
const targetProject = projects.find(p => p.id === targetProjectId ||
|
|
352
|
+
p.id.toLowerCase() === targetProjectId.toLowerCase() ||
|
|
353
|
+
p.name.toLowerCase() === targetProjectId.toLowerCase());
|
|
354
|
+
if (!targetProject) {
|
|
355
|
+
if (jsonMode) {
|
|
356
|
+
outputErrorAsJson('PROJECT_NOT_FOUND', `Project not found: ${targetProjectId}`, createMetadata('ticket move', flags));
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
this.error(`Project not found: ${targetProjectId}`);
|
|
360
|
+
}
|
|
361
|
+
// Check if moving to the same project
|
|
362
|
+
if (targetProject.id === sourceProjectId) {
|
|
363
|
+
this.log(styles.warning(`Ticket "${ticketId}" is already in project "${targetProject.id}".`));
|
|
364
|
+
this.log(styles.muted(`To move to a different column, use: prlt ticket move ${ticketId} <column>`));
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
// Move ticket to the new project
|
|
368
|
+
const movedTicket = await this.storage.moveTicketToProject(ticketId, targetProject.id);
|
|
369
|
+
// If a target column was specified, try to move to that column in the new project
|
|
370
|
+
if (targetColumn) {
|
|
371
|
+
try {
|
|
372
|
+
await this.storage.moveTicket(targetProject.id, ticketId, targetColumn);
|
|
373
|
+
// Refresh ticket to get updated status
|
|
374
|
+
const updatedTicket = await this.storage.getTicket(ticketId);
|
|
375
|
+
await autoExportToBoard(this.pmoPath, this.storage, (msg) => this.log(styles.muted(msg)));
|
|
376
|
+
if (jsonMode && updatedTicket) {
|
|
377
|
+
this.log(JSON.stringify({
|
|
378
|
+
success: true,
|
|
379
|
+
ticket: formatTicket(updatedTicket),
|
|
380
|
+
}, null, 2));
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
this.log(styles.success(`\n✅ Moved ticket ${styles.emphasis(ticketId)} to project ${styles.emphasis(targetProject.id)}`));
|
|
384
|
+
this.log(styles.muted(` From project: ${sourceProjectId}`));
|
|
385
|
+
this.log(styles.muted(` To project: ${targetProject.id}`));
|
|
386
|
+
this.log(styles.muted(` Column: ${updatedTicket?.statusName || targetColumn}`));
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
catch (error) {
|
|
390
|
+
// Only catch "status not found" errors - re-throw unexpected errors
|
|
391
|
+
if (error instanceof PMOError && error.code === 'NOT_FOUND') {
|
|
392
|
+
this.log(styles.muted(`Note: Column "${targetColumn}" not found in target project, using default column.`));
|
|
393
|
+
}
|
|
394
|
+
else {
|
|
395
|
+
throw error;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
await autoExportToBoard(this.pmoPath, this.storage, (msg) => this.log(styles.muted(msg)));
|
|
400
|
+
if (jsonMode) {
|
|
401
|
+
this.log(JSON.stringify({
|
|
402
|
+
success: true,
|
|
403
|
+
ticket: formatTicket(movedTicket),
|
|
404
|
+
}, null, 2));
|
|
405
|
+
return;
|
|
406
|
+
}
|
|
407
|
+
this.log(styles.success(`\n✅ Moved ticket ${styles.emphasis(ticketId)} to project ${styles.emphasis(targetProject.id)}`));
|
|
408
|
+
this.log(styles.muted(` From project: ${sourceProjectId}`));
|
|
409
|
+
this.log(styles.muted(` To project: ${targetProject.id}`));
|
|
410
|
+
this.log(styles.muted(` Column: ${movedTicket.statusName || 'default'}`));
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
//# sourceMappingURL=move.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"move.js","sourceRoot":"","sources":["../../../src/commands/ticket/move.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { PMOCommand } from '../../lib/pmo/index.js';
|
|
2
|
+
export default class TicketShow extends PMOCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
};
|
|
10
|
+
static args: {
|
|
11
|
+
ticketId: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
12
|
+
};
|
|
13
|
+
execute(): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { Args } from '@oclif/core';
|
|
2
|
+
import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
|
|
3
|
+
import { styles } from '../../lib/styles.js';
|
|
4
|
+
import { shouldOutputJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
|
|
5
|
+
export default class TicketShow extends PMOCommand {
|
|
6
|
+
static description = 'View detailed ticket information';
|
|
7
|
+
static examples = [
|
|
8
|
+
'<%= config.bin %> <%= command.id %> TICK-001',
|
|
9
|
+
'<%= config.bin %> <%= command.id %> # Interactive mode',
|
|
10
|
+
];
|
|
11
|
+
static flags = {
|
|
12
|
+
...pmoBaseFlags,
|
|
13
|
+
};
|
|
14
|
+
static args = {
|
|
15
|
+
ticketId: Args.string({
|
|
16
|
+
description: 'Ticket ID to view - prompts with dropdown if not provided',
|
|
17
|
+
required: false,
|
|
18
|
+
}),
|
|
19
|
+
};
|
|
20
|
+
async execute() {
|
|
21
|
+
const { args, flags } = await this.parse(TicketShow);
|
|
22
|
+
const projectId = flags.project;
|
|
23
|
+
// Check if JSON output mode is active
|
|
24
|
+
const jsonMode = shouldOutputJson(flags);
|
|
25
|
+
// Helper to handle errors in JSON mode
|
|
26
|
+
const handleError = (code, message) => {
|
|
27
|
+
if (jsonMode) {
|
|
28
|
+
outputErrorAsJson(code, message, createMetadata('ticket show', flags));
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
this.error(message);
|
|
32
|
+
};
|
|
33
|
+
// Get ticketId - prompt if not provided
|
|
34
|
+
let ticketId = args.ticketId;
|
|
35
|
+
if (!ticketId) {
|
|
36
|
+
// Get all tickets for selection via provider
|
|
37
|
+
const provider = this.resolveProjectProvider(projectId || '');
|
|
38
|
+
const listResult = await provider.listTickets(projectId);
|
|
39
|
+
const allTickets = listResult.success ? listResult.tickets : [];
|
|
40
|
+
if (allTickets.length === 0) {
|
|
41
|
+
return handleError('NO_TICKETS', 'No tickets found. Create a ticket first with "prlt ticket create".');
|
|
42
|
+
}
|
|
43
|
+
// Use helper for ticket selection (handles JSON mode automatically)
|
|
44
|
+
const selected = await this.selectFromList({
|
|
45
|
+
message: 'Select ticket to view:',
|
|
46
|
+
items: allTickets,
|
|
47
|
+
getName: (t) => `${t.id} - ${t.title} (${t.statusName})`,
|
|
48
|
+
getValue: (t) => t.id,
|
|
49
|
+
getCommand: (t) => `prlt ticket show ${t.id}${projectId ? ` -P ${projectId}` : ''} --json`,
|
|
50
|
+
jsonMode: jsonMode ? { flags, commandName: 'ticket show' } : null,
|
|
51
|
+
});
|
|
52
|
+
if (!selected) {
|
|
53
|
+
return; // Cancelled or JSON mode (already exited)
|
|
54
|
+
}
|
|
55
|
+
ticketId = selected;
|
|
56
|
+
}
|
|
57
|
+
// Get ticket through provider
|
|
58
|
+
const provider = await this.resolveTicketProvider(ticketId, projectId || '');
|
|
59
|
+
const getResult = await provider.getTicket(ticketId);
|
|
60
|
+
if (!getResult.success || !getResult.ticket) {
|
|
61
|
+
return handleError('TICKET_NOT_FOUND', `Ticket "${ticketId}" not found.`);
|
|
62
|
+
}
|
|
63
|
+
const ticket = getResult.ticket;
|
|
64
|
+
// JSON output mode
|
|
65
|
+
if (jsonMode) {
|
|
66
|
+
this.log(JSON.stringify({
|
|
67
|
+
success: true,
|
|
68
|
+
ticket: {
|
|
69
|
+
id: ticket.id,
|
|
70
|
+
title: ticket.title,
|
|
71
|
+
description: ticket.description,
|
|
72
|
+
priority: ticket.priority,
|
|
73
|
+
category: ticket.category,
|
|
74
|
+
statusName: ticket.statusName,
|
|
75
|
+
statusCategory: ticket.statusCategory,
|
|
76
|
+
projectId: ticket.projectId,
|
|
77
|
+
assignee: ticket.assignee,
|
|
78
|
+
owner: ticket.owner,
|
|
79
|
+
branch: ticket.branch,
|
|
80
|
+
epicId: ticket.epicId,
|
|
81
|
+
position: ticket.position,
|
|
82
|
+
subtasks: ticket.subtasks,
|
|
83
|
+
labels: ticket.labels,
|
|
84
|
+
metadata: ticket.metadata,
|
|
85
|
+
blockedBy: ticket.blockedBy,
|
|
86
|
+
acceptanceCriteria: ticket.acceptanceCriteria,
|
|
87
|
+
specId: ticket.specId,
|
|
88
|
+
createdAt: ticket.createdAt?.toISOString(),
|
|
89
|
+
updatedAt: ticket.updatedAt?.toISOString(),
|
|
90
|
+
},
|
|
91
|
+
}, null, 2));
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
// Display ticket details
|
|
95
|
+
this.log(`\n${styles.header('Ticket')} ${styles.emphasis(ticket.id)}\n`);
|
|
96
|
+
this.log(`${styles.header('Title:')} ${ticket.title}`);
|
|
97
|
+
this.log(`${styles.header('Project:')} ${ticket.projectId || 'Unknown'}`);
|
|
98
|
+
this.log(`${styles.header('Status:')} ${ticket.statusName}`);
|
|
99
|
+
this.log(`${styles.header('Priority:')} ${ticket.priority || 'none'}`);
|
|
100
|
+
this.log(`${styles.header('Category:')} ${ticket.category || 'none'}`);
|
|
101
|
+
this.log(`${styles.header('Created:')} ${ticket.createdAt ? new Date(ticket.createdAt).toLocaleString() : 'unknown'}`);
|
|
102
|
+
this.log(`${styles.header('Updated:')} ${ticket.updatedAt ? new Date(ticket.updatedAt).toLocaleString() : 'unknown'}`);
|
|
103
|
+
if (ticket.description) {
|
|
104
|
+
this.log(`\n${styles.header('Description:')}`);
|
|
105
|
+
this.log(` ${ticket.description.split('\n').join('\n ')}`);
|
|
106
|
+
}
|
|
107
|
+
this.log('');
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=show.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show.js","sourceRoot":"","sources":["../../../src/commands/ticket/show.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { PMOCommand } from '../../lib/pmo/index.js';
|
|
2
|
+
export default class TicketUpdate extends PMOCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
ticketId: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
title: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
'description-file': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
priority: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
category: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
labels: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
status: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
+
bulk: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
17
|
+
force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
18
|
+
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
20
|
+
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
21
|
+
};
|
|
22
|
+
execute(): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Interactive mode when no flags are provided - original priority/category selection flow
|
|
25
|
+
*/
|
|
26
|
+
private executeInteractive;
|
|
27
|
+
private executeBulk;
|
|
28
|
+
}
|