@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.
Files changed (48) hide show
  1. package/dist/commands/orchestrate/index.js +30 -3
  2. package/dist/commands/orchestrate/index.js.map +1 -1
  3. package/dist/commands/qa/index.js +1 -1
  4. package/dist/commands/ticket/create.d.ts +44 -0
  5. package/dist/commands/ticket/create.js +754 -0
  6. package/dist/commands/ticket/create.js.map +1 -0
  7. package/dist/commands/ticket/delete.d.ts +17 -0
  8. package/dist/commands/ticket/delete.js +204 -0
  9. package/dist/commands/ticket/delete.js.map +1 -0
  10. package/dist/commands/ticket/edit.d.ts +28 -0
  11. package/dist/commands/ticket/edit.js +402 -0
  12. package/dist/commands/ticket/edit.js.map +1 -0
  13. package/dist/commands/ticket/index.d.ts +13 -0
  14. package/dist/commands/ticket/index.js +74 -0
  15. package/dist/commands/ticket/index.js.map +1 -0
  16. package/dist/commands/ticket/list.d.ts +33 -0
  17. package/dist/commands/ticket/list.js +519 -0
  18. package/dist/commands/ticket/list.js.map +1 -0
  19. package/dist/commands/ticket/move.d.ts +27 -0
  20. package/dist/commands/ticket/move.js +413 -0
  21. package/dist/commands/ticket/move.js.map +1 -0
  22. package/dist/commands/ticket/show.d.ts +14 -0
  23. package/dist/commands/ticket/show.js +110 -0
  24. package/dist/commands/ticket/show.js.map +1 -0
  25. package/dist/commands/ticket/update.d.ts +28 -0
  26. package/dist/commands/ticket/update.js +458 -0
  27. package/dist/commands/ticket/update.js.map +1 -0
  28. package/dist/lib/execution/preflight.js +1 -1
  29. package/dist/lib/execution/preflight.js.map +1 -1
  30. package/dist/lib/mcp/tools/action.d.ts +6 -0
  31. package/dist/lib/mcp/tools/action.js +123 -0
  32. package/dist/lib/mcp/tools/action.js.map +1 -0
  33. package/dist/lib/mcp/tools/index.d.ts +2 -0
  34. package/dist/lib/mcp/tools/index.js +2 -0
  35. package/dist/lib/mcp/tools/index.js.map +1 -1
  36. package/dist/lib/mcp/tools/ticket.d.ts +6 -0
  37. package/dist/lib/mcp/tools/ticket.js +464 -0
  38. package/dist/lib/mcp/tools/ticket.js.map +1 -0
  39. package/dist/lib/orchestrate/poller.d.ts +22 -0
  40. package/dist/lib/orchestrate/poller.js +109 -0
  41. package/dist/lib/orchestrate/poller.js.map +1 -1
  42. package/dist/lib/sync/engine.js +47 -5
  43. package/dist/lib/sync/engine.js.map +1 -1
  44. package/dist/lib/sync/reconciler.d.ts +27 -1
  45. package/dist/lib/sync/reconciler.js +109 -1
  46. package/dist/lib/sync/reconciler.js.map +1 -1
  47. package/oclif.manifest.json +2021 -1153
  48. 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":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,YAAY,GACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAU,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,UAAU;IAChD,MAAM,CAAC,WAAW,GAAG,sCAAsC,CAAC;IAE5D,MAAM,CAAC,QAAQ,GAAG;QAChB,6DAA6D;QAC7D,yDAAyD;QACzD,kEAAkE;QAClE,sEAAsE;QACtE,mEAAmE;QACnE,4CAA4C;KAC7C,CAAC;IAEF,MAAM,CAAC,IAAI,GAAG;QACZ,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,mDAAmD;YAChE,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;YAClB,WAAW,EAAE,uDAAuD;YACpE,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,YAAY;QACf,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,kEAAkE;SAChF,CAAC;QACF,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC;YACtB,WAAW,EAAE,sCAAsC;SACpD,CAAC;QACF,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC;YACzB,WAAW,EAAE,kEAAkE;SAChF,CAAC;QACF,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;YAClB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,2CAA2C;YACxD,OAAO,EAAE,KAAK;SACf,CAAC;QACF,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,2CAA2C;YACxD,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,OAAO;QACX,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAErD,sCAAsC;QACtC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAEzC,uCAAuC;QACvC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,OAAe,EAAQ,EAAE;YAC1D,IAAI,QAAQ,EAAE,CAAC;gBACb,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;gBACvE,OAAM;YACR,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC,CAAC;QAEF,4DAA4D;QAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;QAE9C,sFAAsF;QACtF,0DAA0D;QAC1D,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3D,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,WAAW,CAAC,kBAAkB,EAAE,WAAW,IAAI,CAAC,QAAQ,cAAc,CAAC,CAAC;YACjF,CAAC;YACD,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC5F,OAAO;QACT,CAAC;QAED,iFAAiF;QACjF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC;YAC1C,QAAQ,EAAE;gBACR,KAAK;gBACL,WAAW,EAAE,aAAa;gBAC1B,WAAW,EAAE,kBAAkB;aAChC;SACF,CAAC,CAAC;QAEH,kBAAkB;QAClB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAE7D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,WAAW,CAAC,YAAY,EAAE,oEAAoE,CAAC,CAAC;QACzG,CAAC;QAED,YAAY;QACZ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QAED,qBAAqB;QACrB,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE7B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,oEAAoE;YACpE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC;gBACzC,OAAO,EAAE,wBAAwB;gBACjC,KAAK,EAAE,UAAU;gBACjB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,UAAU,GAAG;gBACxD,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;gBACrB,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,EAAE,OAAO,SAAS,SAAS;gBACpE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI;aAClE,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,CAAC,0CAA0C;YACpD,CAAC;YACD,QAAQ,GAAG,QAAQ,CAAC;QACtB,CAAC;QAED,aAAa;QACb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAS,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,WAAW,CAAC,kBAAkB,EAAE,WAAW,QAAQ,cAAc,CAAC,CAAC;QAC5E,CAAC;QACD,0GAA0G;QAC1G,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;QAErB,0DAA0D;QAC1D,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC5F,OAAO;QACT,CAAC;QAED,6CAA6C;QAC7C,IAAI,YAAY,GAAG,SAAS,CAAC;QAE7B,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,+CAA+C;YAC/C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YACtD,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;YAElE,oEAAoE;YACpE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,eAAe,GAAG;oBACtB,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,iCAAiC,EAAE;oBACzD,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,EAAE;iBAC7C,CAAC;gBAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC;oBACzC,OAAO,EAAE,UAAU;oBACnB,KAAK,EAAE,eAAe;oBACtB,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI;oBAChC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE;oBAC/B,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,QAAQ;wBAC5C,CAAC,CAAC,oBAAoB,QAAQ,OAAO,SAAS,SAAS;wBACvD,CAAC,CAAC,uBAAuB,QAAQ,OAAO,SAAS,SAAS;oBAC5D,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI;iBAClE,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,OAAO,CAAC,yBAAyB;gBACnC,CAAC;gBAED,6DAA6D;gBAC7D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAC3B,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC;wBAChD,OAAO,EAAE,wBAAwB;wBACjC,KAAK,EAAE,aAAa;wBACpB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG;wBACrC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;wBACrB,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,QAAQ,iBAAiB,CAAC,CAAC,EAAE,SAAS;wBAC7E,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI;qBAClE,CAAC,CAAC;oBAEH,IAAI,CAAC,eAAe,EAAE,CAAC;wBACrB,OAAO,CAAC,yBAAyB;oBACnC,CAAC;oBAED,kEAAkE;oBAClE,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;oBAC/E,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBACxB,OAAO,WAAW,CAAC,mBAAmB,EAAE,2BAA2B,CAAC,CAAC;oBACvE,CAAC;oBAED,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC;wBACjD,OAAO,EAAE,iBAAiB;wBAC1B,KAAK,EAAE,kBAAkB,CAAC,OAA6B;wBACvD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI;wBAC1B,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI;wBAC3B,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,oBAAoB,QAAQ,KAAK,GAAG,CAAC,IAAI,kBAAkB,eAAe,SAAS;wBACxG,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI;qBAClE,CAAC,CAAC;oBAEH,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACtB,OAAO,CAAC,yBAAyB;oBACnC,CAAC;oBAED,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;oBAC/F,OAAO;gBACT,CAAC;YACH,CAAC;YAED,qEAAqE;YACrE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAC9D,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,WAAW,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,CAAC;YAChE,CAAC;YAED,oEAAoE;YACpE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC;gBACzC,OAAO,EAAE,iBAAiB;gBAC1B,KAAK,EAAE,OAAO,CAAC,OAA6B;gBAC5C,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI;gBACrF,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI;gBAC3B,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,oBAAoB,QAAQ,KAAK,GAAG,CAAC,IAAI,QAAQ,SAAS,SAAS;gBACxF,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI;aAClE,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,CAAC,0CAA0C;YACpD,CAAC;YACD,YAAY,GAAG,QAAQ,CAAC;QAC1B,CAAC;QAED,oDAAoD;QAEpD,2BAA2B;QAC3B,IAAI,YAAY,KAAK,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACvE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,QAAQ,oBAAoB,YAAY,IAAI,CAAC,CAAC,CAAC;YAClF,OAAO;QACT,CAAC;QAED,8EAA8E;QAC9E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAS,EAAE,SAAS,CAAC,CAAC;QACxE,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,QAAS,EAAE,YAAa,CAAC,CAAC;QAEvE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,WAAW,CAAC,aAAa,EAAE,0BAA0B,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;QAClF,CAAC;QAED,iFAAiF;QACjF,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,QAAS,EAAE,YAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YACrF,CAAC;YAAC,MAAM,CAAC;gBACP,yDAAyD;YAC3D,CAAC;QACH,CAAC;QAED,uCAAuC;QACvC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAS,CAAC,IAAI,MAAM,CAAC;QAEhE,sCAAsC;QACtC,MAAM,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE1F,mDAAmD;QACnD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACtB,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC;gBAC3B,QAAQ,EAAE,UAAU,CAAC,QAAQ;aAC9B,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACb,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,IAAI,YAAY,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,UAAU,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,UAAgE,EAChE,KAA8G,EAC9G,SAAiB;QAEjB,uCAAuC;QACvC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,cAAc;QACd,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,KAAK,CAAC,YAAY,SAAS,4DAA4D,CAAC,CAAC;QAChG,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEnD,gCAAgC;QAChC,MAAM,cAAc,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAErG,iDAAiD;QACjD,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAgC,CAAC;gBAC5E,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,yBAAyB;gBAClC,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC5B,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,UAAU,GAAG;oBAC9C,KAAK,EAAE,CAAC,CAAC,EAAE;oBACX,OAAO,EAAE,oBAAoB,CAAC,CAAC,EAAE,OAAO,SAAS,SAAS,EAAG,kCAAkC;iBAChG,CAAC,CAAC;aACJ,CAAC,EAAE,cAAc,CAAC,CAAC;QAEpB,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,+CAA+C;QAC/C,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAA2B,CAAC;gBACpE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,2BAA2B;gBACpC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACzB,IAAI,EAAE,CAAC;oBACP,KAAK,EAAE,CAAC;oBACR,OAAO,EAAE,oBAAoB,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,SAAS,SAAS;iBACvF,CAAC,CAAC;aACJ,CAAC,EAAE,cAAc,CAAC,CAAC;QAEpB,eAAe;QACf,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAC9C,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;gBACvD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,QAAQ,KAAK,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,YAAY,IAAI,CAAC,CAAC,CAAC;YAE7D,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAuB,CAAC;oBAC3D,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,WAAW;oBACpB,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;wBACnD,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,YAAY,QAAQ,SAAS,iBAAiB,EAAE;qBACxJ;iBACF,CAAC,EAAE,cAAc,CAAC,CAAC;YAEpB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBAC1C,OAAO;YACT,CAAC;QACH,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEb,mBAAmB;QACnB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,yDAAyD;QACzD,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,4CAA4C;gBAC5C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBACvE,4CAA4C;gBAC5C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;gBACjE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,QAAQ,OAAO,YAAY,EAAE,CAAC,CAAC,CAAC;oBACjE,YAAY,EAAE,CAAC;gBACjB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,QAAQ,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oBACtE,SAAS,EAAE,CAAC;gBACd,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,QAAQ,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChH,SAAS,EAAE,CAAC;YACd,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,MAAM,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE1F,UAAU;QACV,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,YAAY,YAAY,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,SAAS,YAAY,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,uBAAuB,CACnC,MAAc,EACd,eAAuB,EACvB,YAAgC,EAChC,QAAiB,EACjB,KAA8B;QAE9B,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC;QAEzC,iCAAiC;QACjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QACnD,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACtC,CAAC,CAAC,EAAE,KAAK,eAAe;YACxB,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,eAAe,CAAC,WAAW,EAAE;YACpD,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,eAAe,CAAC,WAAW,EAAE,CACvD,CAAC;QAEF,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,IAAI,QAAQ,EAAE,CAAC;gBACb,iBAAiB,CAAC,mBAAmB,EAAE,sBAAsB,eAAe,EAAE,EAAE,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;gBACtH,OAAM;YACR,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,sBAAsB,eAAe,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,sCAAsC;QACtC,IAAI,aAAa,CAAC,EAAE,KAAK,eAAe,EAAE,CAAC;YACzC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,QAAQ,4BAA4B,aAAa,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9F,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,wDAAwD,QAAQ,WAAW,CAAC,CAAC,CAAC;YACpG,OAAO;QACT,CAAC;QAED,iCAAiC;QACjC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;QAEvF,kFAAkF;QAClF,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;gBACxE,uCAAuC;gBACvC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAE7D,MAAM,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAE1F,IAAI,QAAQ,IAAI,aAAa,EAAE,CAAC;oBAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;wBACtB,OAAO,EAAE,IAAI;wBACb,MAAM,EAAE,YAAY,CAAC,aAAa,CAAC;qBACpC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;oBACb,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC1H,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,eAAe,EAAE,CAAC,CAAC,CAAC;gBAC9D,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC7D,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,aAAa,EAAE,UAAU,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC;gBAClF,OAAO;YACT,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,oEAAoE;gBACpE,IAAI,KAAK,YAAY,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBAC5D,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,YAAY,sDAAsD,CAAC,CAAC,CAAC;gBAC9G,CAAC;qBAAM,CAAC;oBACN,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE1F,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACtB,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC;aAClC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACb,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1H,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,eAAe,EAAE,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,WAAW,CAAC,UAAU,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC"}
@@ -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
+ }