@proletariat/cli 0.3.23 → 0.3.25

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 (235) hide show
  1. package/dist/commands/action/create.js +4 -4
  2. package/dist/commands/action/update.js +3 -3
  3. package/dist/commands/agent/{temp/cleanup.d.ts → cleanup.d.ts} +1 -1
  4. package/dist/commands/agent/{temp/cleanup.js → cleanup.js} +4 -4
  5. package/dist/commands/agent/index.js +8 -8
  6. package/dist/commands/branch/create.js +2 -2
  7. package/dist/commands/epic/activate.js +9 -17
  8. package/dist/commands/epic/archive.js +13 -24
  9. package/dist/commands/epic/create.d.ts +1 -0
  10. package/dist/commands/epic/create.js +46 -8
  11. package/dist/commands/epic/index.js +2 -2
  12. package/dist/commands/epic/move.js +28 -47
  13. package/dist/commands/epic/progress.js +10 -14
  14. package/dist/commands/epic/project.js +42 -59
  15. package/dist/commands/epic/reorder.js +25 -30
  16. package/dist/commands/epic/spec.d.ts +1 -0
  17. package/dist/commands/epic/spec.js +39 -40
  18. package/dist/commands/epic/ticket.d.ts +2 -0
  19. package/dist/commands/epic/ticket.js +63 -37
  20. package/dist/commands/feedback/index.d.ts +10 -0
  21. package/dist/commands/feedback/index.js +60 -0
  22. package/dist/commands/feedback/list.d.ts +12 -0
  23. package/dist/commands/feedback/list.js +126 -0
  24. package/dist/commands/feedback/submit.d.ts +16 -0
  25. package/dist/commands/feedback/submit.js +220 -0
  26. package/dist/commands/{template/phase/delete.d.ts → feedback/view.d.ts} +7 -5
  27. package/dist/commands/feedback/view.js +109 -0
  28. package/dist/commands/gh/index.js +4 -0
  29. package/dist/commands/{epic/link/remove.d.ts → link/create.d.ts} +6 -7
  30. package/dist/commands/link/create.js +141 -0
  31. package/dist/commands/{epic/link/relates.d.ts → link/index.d.ts} +4 -5
  32. package/dist/commands/link/index.js +87 -0
  33. package/dist/commands/{epic/link/duplicates.d.ts → link/list.d.ts} +7 -4
  34. package/dist/commands/link/list.js +182 -0
  35. package/dist/commands/{spec/link → link}/remove.d.ts +4 -5
  36. package/dist/commands/link/remove.js +120 -0
  37. package/dist/commands/mcp-server.d.ts +22 -0
  38. package/dist/commands/mcp-server.js +98 -0
  39. package/dist/commands/phase/create.js +1 -1
  40. package/dist/commands/project/create.d.ts +1 -0
  41. package/dist/commands/project/create.js +38 -4
  42. package/dist/commands/repo/create.d.ts +38 -0
  43. package/dist/commands/repo/create.js +283 -0
  44. package/dist/commands/repo/index.js +7 -0
  45. package/dist/commands/roadmap/add-project.js +9 -22
  46. package/dist/commands/roadmap/create.d.ts +0 -1
  47. package/dist/commands/roadmap/create.js +46 -40
  48. package/dist/commands/roadmap/delete.js +10 -24
  49. package/dist/commands/roadmap/generate.d.ts +1 -0
  50. package/dist/commands/roadmap/generate.js +21 -22
  51. package/dist/commands/roadmap/remove-project.js +14 -34
  52. package/dist/commands/roadmap/reorder.js +19 -26
  53. package/dist/commands/roadmap/update.js +27 -26
  54. package/dist/commands/roadmap/view.js +5 -12
  55. package/dist/commands/session/attach.d.ts +1 -8
  56. package/dist/commands/session/attach.js +93 -59
  57. package/dist/commands/session/list.d.ts +0 -8
  58. package/dist/commands/session/list.js +130 -81
  59. package/dist/commands/spec/create.d.ts +1 -0
  60. package/dist/commands/spec/create.js +44 -3
  61. package/dist/commands/spec/edit.js +63 -33
  62. package/dist/commands/spec/index.js +2 -2
  63. package/dist/commands/{agent/staff → staff}/add.js +10 -10
  64. package/dist/commands/{agent/staff → staff}/index.d.ts +1 -1
  65. package/dist/commands/{agent/staff → staff}/index.js +7 -7
  66. package/dist/commands/{agent/staff → staff}/list.js +3 -3
  67. package/dist/commands/{agent/staff → staff}/remove.d.ts +1 -1
  68. package/dist/commands/{agent/staff → staff}/remove.js +8 -8
  69. package/dist/commands/{template/phase/index.d.ts → support/book.d.ts} +2 -2
  70. package/dist/commands/support/book.js +54 -0
  71. package/dist/commands/{template/ticket/index.d.ts → support/discord.d.ts} +2 -2
  72. package/dist/commands/support/discord.js +54 -0
  73. package/dist/commands/support/docs.d.ts +10 -0
  74. package/dist/commands/support/docs.js +54 -0
  75. package/dist/commands/support/index.d.ts +19 -0
  76. package/dist/commands/support/index.js +81 -0
  77. package/dist/commands/support/issues.d.ts +11 -0
  78. package/dist/commands/support/issues.js +77 -0
  79. package/dist/commands/support/logs.d.ts +18 -0
  80. package/dist/commands/support/logs.js +247 -0
  81. package/dist/commands/{ticket/template → template}/apply.d.ts +8 -6
  82. package/dist/commands/template/apply.js +262 -0
  83. package/dist/commands/{ticket/template → template}/create.d.ts +5 -6
  84. package/dist/commands/template/create.js +238 -0
  85. package/dist/commands/template/index.js +48 -36
  86. package/dist/commands/{ticket/template → template}/save.d.ts +2 -2
  87. package/dist/commands/template/save.js +104 -0
  88. package/dist/commands/{phase/template → template}/update.d.ts +2 -2
  89. package/dist/commands/template/update.js +99 -0
  90. package/dist/commands/{agent/themes → theme}/add-names.d.ts +1 -1
  91. package/dist/commands/{agent/themes → theme}/add-names.js +6 -6
  92. package/dist/commands/{agent/themes → theme}/create.d.ts +1 -1
  93. package/dist/commands/{agent/themes → theme}/create.js +5 -5
  94. package/dist/commands/{agent/themes → theme}/index.d.ts +1 -1
  95. package/dist/commands/{agent/themes → theme}/index.js +10 -10
  96. package/dist/commands/{agent/themes → theme}/list.d.ts +1 -1
  97. package/dist/commands/{agent/themes → theme}/list.js +5 -5
  98. package/dist/commands/{agent/themes → theme}/set.d.ts +1 -1
  99. package/dist/commands/{agent/themes → theme}/set.js +7 -7
  100. package/dist/commands/ticket/create.d.ts +1 -0
  101. package/dist/commands/ticket/create.js +75 -15
  102. package/dist/commands/ticket/edit.js +44 -13
  103. package/dist/commands/ticket/index.js +6 -6
  104. package/dist/commands/ticket/move.d.ts +7 -0
  105. package/dist/commands/ticket/move.js +132 -0
  106. package/dist/commands/work/spawn.d.ts +1 -0
  107. package/dist/commands/work/spawn.js +72 -8
  108. package/dist/commands/work/start.js +6 -0
  109. package/dist/lib/execution/runners.js +21 -17
  110. package/dist/lib/execution/session-utils.d.ts +60 -0
  111. package/dist/lib/execution/session-utils.js +162 -0
  112. package/dist/lib/execution/spawner.d.ts +2 -0
  113. package/dist/lib/execution/spawner.js +42 -0
  114. package/dist/lib/flags/resolver.d.ts +2 -2
  115. package/dist/lib/flags/resolver.js +15 -0
  116. package/dist/lib/init/index.js +18 -0
  117. package/dist/lib/mcp/helpers.d.ts +43 -0
  118. package/dist/lib/mcp/helpers.js +57 -0
  119. package/dist/lib/mcp/index.d.ts +6 -0
  120. package/dist/lib/mcp/index.js +6 -0
  121. package/dist/lib/mcp/tools/action.d.ts +6 -0
  122. package/dist/lib/mcp/tools/action.js +88 -0
  123. package/dist/lib/mcp/tools/board.d.ts +6 -0
  124. package/dist/lib/mcp/tools/board.js +139 -0
  125. package/dist/lib/mcp/tools/category.d.ts +6 -0
  126. package/dist/lib/mcp/tools/category.js +84 -0
  127. package/dist/lib/mcp/tools/cli-passthrough.d.ts +15 -0
  128. package/dist/lib/mcp/tools/cli-passthrough.js +333 -0
  129. package/dist/lib/mcp/tools/epic.d.ts +6 -0
  130. package/dist/lib/mcp/tools/epic.js +178 -0
  131. package/dist/lib/mcp/tools/index.d.ts +18 -0
  132. package/dist/lib/mcp/tools/index.js +19 -0
  133. package/dist/lib/mcp/tools/phase.d.ts +6 -0
  134. package/dist/lib/mcp/tools/phase.js +131 -0
  135. package/dist/lib/mcp/tools/project.d.ts +6 -0
  136. package/dist/lib/mcp/tools/project.js +196 -0
  137. package/dist/lib/mcp/tools/roadmap.d.ts +6 -0
  138. package/dist/lib/mcp/tools/roadmap.js +123 -0
  139. package/dist/lib/mcp/tools/spec.d.ts +6 -0
  140. package/dist/lib/mcp/tools/spec.js +196 -0
  141. package/dist/lib/mcp/tools/status.d.ts +6 -0
  142. package/dist/lib/mcp/tools/status.js +109 -0
  143. package/dist/lib/mcp/tools/template.d.ts +6 -0
  144. package/dist/lib/mcp/tools/template.js +107 -0
  145. package/dist/lib/mcp/tools/ticket.d.ts +6 -0
  146. package/dist/lib/mcp/tools/ticket.js +393 -0
  147. package/dist/lib/mcp/tools/view.d.ts +6 -0
  148. package/dist/lib/mcp/tools/view.js +76 -0
  149. package/dist/lib/mcp/tools/work.d.ts +6 -0
  150. package/dist/lib/mcp/tools/work.js +132 -0
  151. package/dist/lib/mcp/tools/workflow.d.ts +6 -0
  152. package/dist/lib/mcp/tools/workflow.js +95 -0
  153. package/dist/lib/mcp/types.d.ts +17 -0
  154. package/dist/lib/mcp/types.js +4 -0
  155. package/dist/lib/multiline-input.d.ts +63 -0
  156. package/dist/lib/multiline-input.js +360 -0
  157. package/dist/lib/prompt-json.d.ts +57 -6
  158. package/dist/lib/prompt-json.js +45 -0
  159. package/dist/lib/repos/git.d.ts +7 -0
  160. package/dist/lib/repos/git.js +20 -0
  161. package/oclif.manifest.json +3690 -4995
  162. package/package.json +6 -4
  163. package/dist/commands/agent/temp/index.d.ts +0 -14
  164. package/dist/commands/agent/temp/index.js +0 -85
  165. package/dist/commands/agent/temp/list.d.ts +0 -7
  166. package/dist/commands/agent/temp/list.js +0 -108
  167. package/dist/commands/epic/link/block.d.ts +0 -14
  168. package/dist/commands/epic/link/block.js +0 -81
  169. package/dist/commands/epic/link/duplicates.js +0 -68
  170. package/dist/commands/epic/link/index.d.ts +0 -19
  171. package/dist/commands/epic/link/index.js +0 -272
  172. package/dist/commands/epic/link/relates.js +0 -68
  173. package/dist/commands/epic/link/remove.js +0 -93
  174. package/dist/commands/phase/template/apply.d.ts +0 -17
  175. package/dist/commands/phase/template/apply.js +0 -108
  176. package/dist/commands/phase/template/create.d.ts +0 -17
  177. package/dist/commands/phase/template/create.js +0 -104
  178. package/dist/commands/phase/template/delete.d.ts +0 -17
  179. package/dist/commands/phase/template/delete.js +0 -100
  180. package/dist/commands/phase/template/index.d.ts +0 -15
  181. package/dist/commands/phase/template/index.js +0 -130
  182. package/dist/commands/phase/template/list.d.ts +0 -16
  183. package/dist/commands/phase/template/list.js +0 -97
  184. package/dist/commands/phase/template/update.js +0 -89
  185. package/dist/commands/spec/link/depends.d.ts +0 -14
  186. package/dist/commands/spec/link/depends.js +0 -64
  187. package/dist/commands/spec/link/duplicates.d.ts +0 -14
  188. package/dist/commands/spec/link/duplicates.js +0 -63
  189. package/dist/commands/spec/link/index.d.ts +0 -19
  190. package/dist/commands/spec/link/index.js +0 -207
  191. package/dist/commands/spec/link/relates.d.ts +0 -14
  192. package/dist/commands/spec/link/relates.js +0 -63
  193. package/dist/commands/spec/link/remove.js +0 -96
  194. package/dist/commands/template/phase/apply.d.ts +0 -14
  195. package/dist/commands/template/phase/apply.js +0 -43
  196. package/dist/commands/template/phase/create.d.ts +0 -13
  197. package/dist/commands/template/phase/create.js +0 -38
  198. package/dist/commands/template/phase/delete.js +0 -36
  199. package/dist/commands/template/phase/index.js +0 -63
  200. package/dist/commands/template/phase/list.d.ts +0 -11
  201. package/dist/commands/template/phase/list.js +0 -36
  202. package/dist/commands/template/phase/update.d.ts +0 -14
  203. package/dist/commands/template/phase/update.js +0 -43
  204. package/dist/commands/template/ticket/apply.d.ts +0 -17
  205. package/dist/commands/template/ticket/apply.js +0 -60
  206. package/dist/commands/template/ticket/create.d.ts +0 -20
  207. package/dist/commands/template/ticket/create.js +0 -89
  208. package/dist/commands/template/ticket/delete.d.ts +0 -13
  209. package/dist/commands/template/ticket/delete.js +0 -38
  210. package/dist/commands/template/ticket/index.js +0 -63
  211. package/dist/commands/template/ticket/list.d.ts +0 -11
  212. package/dist/commands/template/ticket/list.js +0 -36
  213. package/dist/commands/template/ticket/save.d.ts +0 -15
  214. package/dist/commands/template/ticket/save.js +0 -46
  215. package/dist/commands/ticket/link/block.d.ts +0 -14
  216. package/dist/commands/ticket/link/block.js +0 -96
  217. package/dist/commands/ticket/link/duplicates.d.ts +0 -14
  218. package/dist/commands/ticket/link/duplicates.js +0 -95
  219. package/dist/commands/ticket/link/index.d.ts +0 -19
  220. package/dist/commands/ticket/link/index.js +0 -256
  221. package/dist/commands/ticket/link/relates.d.ts +0 -14
  222. package/dist/commands/ticket/link/relates.js +0 -95
  223. package/dist/commands/ticket/link/remove.d.ts +0 -16
  224. package/dist/commands/ticket/link/remove.js +0 -132
  225. package/dist/commands/ticket/template/apply.js +0 -252
  226. package/dist/commands/ticket/template/create.js +0 -386
  227. package/dist/commands/ticket/template/delete.d.ts +0 -17
  228. package/dist/commands/ticket/template/delete.js +0 -94
  229. package/dist/commands/ticket/template/index.d.ts +0 -15
  230. package/dist/commands/ticket/template/index.js +0 -120
  231. package/dist/commands/ticket/template/list.d.ts +0 -16
  232. package/dist/commands/ticket/template/list.js +0 -112
  233. package/dist/commands/ticket/template/save.js +0 -163
  234. /package/dist/commands/{agent/staff → staff}/add.d.ts +0 -0
  235. /package/dist/commands/{agent/staff → staff}/list.d.ts +0 -0
@@ -1,112 +0,0 @@
1
- import { Flags } from '@oclif/core';
2
- import { PMOCommand, pmoBaseFlags } from '../../../lib/pmo/index.js';
3
- import { styles } from '../../../lib/styles.js';
4
- export default class TicketTemplateList extends PMOCommand {
5
- static description = 'List available ticket templates';
6
- static examples = [
7
- '<%= config.bin %> <%= command.id %>',
8
- '<%= config.bin %> <%= command.id %> --builtin # Only built-in templates',
9
- '<%= config.bin %> <%= command.id %> --custom # Only custom templates',
10
- '<%= config.bin %> <%= command.id %> --json # Output as JSON',
11
- ];
12
- static flags = {
13
- ...pmoBaseFlags,
14
- builtin: Flags.boolean({
15
- description: 'Show only built-in templates',
16
- exclusive: ['custom'],
17
- }),
18
- custom: Flags.boolean({
19
- description: 'Show only custom templates',
20
- exclusive: ['builtin'],
21
- }),
22
- json: Flags.boolean({
23
- char: 'm',
24
- aliases: ['machine'],
25
- description: 'Output as JSON',
26
- default: false,
27
- }),
28
- };
29
- getPMOOptions() {
30
- return { promptIfMultiple: false };
31
- }
32
- async execute() {
33
- const { flags } = await this.parse(TicketTemplateList);
34
- let filter;
35
- if (flags.builtin)
36
- filter = { isBuiltin: true };
37
- if (flags.custom)
38
- filter = { isBuiltin: false };
39
- const templates = await this.storage.listTicketTemplates(filter);
40
- if (flags.json) {
41
- this.log(JSON.stringify(templates, null, 2));
42
- return;
43
- }
44
- if (templates.length === 0) {
45
- this.log(styles.muted('\nNo ticket templates found.'));
46
- this.log(styles.muted('Create one: prlt ticket template save <ticket-id> "Template Name"'));
47
- return;
48
- }
49
- this.log(`\n📋 ${styles.emphasis('Ticket Templates')}`);
50
- this.log('═'.repeat(60));
51
- // Group by builtin vs custom
52
- const builtinTemplates = templates.filter(t => t.isBuiltin);
53
- const customTemplates = templates.filter(t => !t.isBuiltin);
54
- if (builtinTemplates.length > 0 && !flags.custom) {
55
- this.log(`\n${styles.emphasis('Built-in Templates')}`);
56
- this.log('─'.repeat(40));
57
- for (const template of builtinTemplates) {
58
- this.printTemplate(template);
59
- }
60
- }
61
- if (customTemplates.length > 0 && !flags.builtin) {
62
- this.log(`\n${styles.emphasis('Custom Templates')}`);
63
- this.log('─'.repeat(40));
64
- for (const template of customTemplates) {
65
- this.printTemplate(template);
66
- }
67
- }
68
- this.log('');
69
- this.log(styles.muted('Create ticket from template: prlt ticket template apply <template-id>'));
70
- this.log('');
71
- }
72
- printTemplate(template) {
73
- this.log(`\n ${styles.emphasis(template.name)} ${styles.muted(`(${template.id})`)}`);
74
- if (template.description) {
75
- this.log(` ${styles.muted(template.description)}`);
76
- }
77
- // Show template details - first line
78
- const details = [];
79
- if (template.defaultPriority) {
80
- details.push(`Priority: ${template.defaultPriority}`);
81
- }
82
- if (template.defaultCategory) {
83
- details.push(`Category: ${template.defaultCategory}`);
84
- }
85
- if (template.suggestedSubtasks.length > 0) {
86
- details.push(`Subtasks: ${template.suggestedSubtasks.length}`);
87
- }
88
- if (details.length > 0) {
89
- this.log(` ${styles.muted(details.join(' | '))}`);
90
- }
91
- // Show additional details - second line
92
- const details2 = [];
93
- if (template.defaultStatusId) {
94
- details2.push(`Status: ${template.defaultStatusId}`);
95
- }
96
- if (template.defaultAssignee) {
97
- details2.push(`Assignee: ${template.defaultAssignee}`);
98
- }
99
- if (template.defaultOwner) {
100
- details2.push(`Owner: ${template.defaultOwner}`);
101
- }
102
- if (template.defaultLabels && template.defaultLabels.length > 0) {
103
- details2.push(`Labels: ${template.defaultLabels.join(', ')}`);
104
- }
105
- if (details2.length > 0) {
106
- this.log(` ${styles.muted(details2.join(' | '))}`);
107
- }
108
- if (template.titlePattern) {
109
- this.log(` ${styles.muted(`Title: "${template.titlePattern}"`)}`);
110
- }
111
- }
112
- }
@@ -1,163 +0,0 @@
1
- import { Flags, Args } from '@oclif/core';
2
- import inquirer from 'inquirer';
3
- import { PMOCommand, pmoBaseFlags } from '../../../lib/pmo/index.js';
4
- import { styles } from '../../../lib/styles.js';
5
- import { shouldOutputJson, outputPromptAsJson, outputSuccessAsJson, outputErrorAsJson, createMetadata, buildPromptConfig, } from '../../../lib/prompt-json.js';
6
- export default class TicketTemplateSave extends PMOCommand {
7
- static description = 'Create a template from an existing ticket';
8
- static examples = [
9
- '<%= config.bin %> <%= command.id %> TKT-001 "Bug Report Template"',
10
- '<%= config.bin %> <%= command.id %> TKT-042 "Feature Request" --description "Standard feature request template"',
11
- ];
12
- static args = {
13
- ticket: Args.string({
14
- description: 'Ticket ID to create template from',
15
- required: false,
16
- }),
17
- name: Args.string({
18
- description: 'Template name',
19
- required: false,
20
- }),
21
- };
22
- static flags = {
23
- ...pmoBaseFlags,
24
- 'template-name': Flags.string({
25
- char: 'n',
26
- description: 'Template name (alternative to positional arg, required in non-TTY/JSON mode)',
27
- }),
28
- description: Flags.string({
29
- char: 'd',
30
- description: 'Template description',
31
- }),
32
- json: Flags.boolean({
33
- char: 'm',
34
- aliases: ['machine'],
35
- description: 'Output prompt configuration as JSON (for AI agents/scripts)',
36
- default: false,
37
- }),
38
- };
39
- async execute() {
40
- const { args, flags } = await this.parse(TicketTemplateSave);
41
- // Check if JSON output mode is active
42
- const jsonMode = shouldOutputJson(flags);
43
- // Helper to handle errors in JSON mode
44
- const handleError = (code, message) => {
45
- if (jsonMode) {
46
- outputErrorAsJson(code, message, createMetadata('ticket template save', flags));
47
- }
48
- this.error(message);
49
- };
50
- // Get ticket ID - prompt with picker if not provided
51
- let ticketId = args.ticket;
52
- if (!ticketId) {
53
- const projectId = await this.requireProject();
54
- const tickets = await this.storage.listTickets(projectId);
55
- if (tickets.length === 0) {
56
- return handleError('NO_TICKETS', 'No tickets found in this project.\nCreate a ticket first: prlt ticket create');
57
- }
58
- // In JSON mode, output prompt config for ticket selection
59
- if (jsonMode) {
60
- const choices = tickets.slice(0, 20).map(t => ({
61
- name: `${t.id} - ${t.title}`,
62
- value: t.id,
63
- }));
64
- outputPromptAsJson(buildPromptConfig('list', 'ticket', 'Select a ticket to save as template:', choices), createMetadata('ticket template save', flags));
65
- }
66
- const { selectedTicket } = await inquirer.prompt([{
67
- type: 'list',
68
- name: 'selectedTicket',
69
- message: 'Select a ticket to save as template:',
70
- choices: tickets.slice(0, 20).map(t => ({
71
- name: `${t.id} - ${t.title}`,
72
- value: t.id,
73
- })),
74
- }]);
75
- ticketId = selectedTicket;
76
- }
77
- // Verify ticket exists
78
- const ticket = await this.storage.getTicket(ticketId);
79
- if (!ticket) {
80
- return handleError('TICKET_NOT_FOUND', `Ticket not found: ${ticketId}\nRun 'prlt ticket list' to see available tickets.`);
81
- }
82
- // Get template name - prefer flag over positional arg
83
- let templateName = flags['template-name'] || args.name;
84
- if (!templateName) {
85
- const defaultName = ticket.category || ticket.title.split(' ')[0];
86
- // In JSON mode, output prompt config for template name
87
- if (jsonMode) {
88
- outputPromptAsJson(buildPromptConfig('input', 'name', 'Template name:', undefined, defaultName), createMetadata('ticket template save', flags));
89
- }
90
- const { name } = await inquirer.prompt([{
91
- type: 'input',
92
- name: 'name',
93
- message: 'Template name:',
94
- default: defaultName,
95
- validate: (input) => input.length > 0 || 'Name is required',
96
- }]);
97
- templateName = name;
98
- }
99
- // Get description if not provided - only prompt interactively (not in JSON mode)
100
- let description = flags.description;
101
- if (description === undefined && !jsonMode) {
102
- const { desc } = await inquirer.prompt([{
103
- type: 'input',
104
- name: 'desc',
105
- message: 'Description (optional):',
106
- }]);
107
- description = desc || undefined;
108
- }
109
- // Create template from ticket
110
- const template = await this.storage.createTicketTemplateFromTicket(ticketId, templateName, description);
111
- // In JSON mode, output success as JSON
112
- if (jsonMode) {
113
- outputSuccessAsJson({
114
- template: {
115
- id: template.id,
116
- name: template.name,
117
- description: template.description,
118
- titlePattern: template.titlePattern,
119
- defaultPriority: template.defaultPriority,
120
- defaultCategory: template.defaultCategory,
121
- defaultStatusId: template.defaultStatusId,
122
- defaultAssignee: template.defaultAssignee,
123
- defaultOwner: template.defaultOwner,
124
- defaultLabels: template.defaultLabels,
125
- suggestedSubtasks: template.suggestedSubtasks,
126
- },
127
- sourceTicketId: ticketId,
128
- }, createMetadata('ticket template save', flags));
129
- return;
130
- }
131
- this.log(styles.success(`\nCreated template "${styles.emphasis(template.name)}" from ticket ${ticketId}`));
132
- this.log(styles.muted(` ID: ${template.id}`));
133
- if (template.description) {
134
- this.log(styles.muted(` Description: ${template.description}`));
135
- }
136
- if (template.titlePattern) {
137
- this.log(styles.muted(` Title pattern: ${template.titlePattern}`));
138
- }
139
- if (template.defaultPriority) {
140
- this.log(styles.muted(` Default priority: ${template.defaultPriority}`));
141
- }
142
- if (template.defaultCategory) {
143
- this.log(styles.muted(` Default category: ${template.defaultCategory}`));
144
- }
145
- if (template.defaultStatusId) {
146
- this.log(styles.muted(` Default status: ${template.defaultStatusId}`));
147
- }
148
- if (template.defaultAssignee) {
149
- this.log(styles.muted(` Default assignee: ${template.defaultAssignee}`));
150
- }
151
- if (template.defaultOwner) {
152
- this.log(styles.muted(` Default owner: ${template.defaultOwner}`));
153
- }
154
- if (template.defaultLabels && template.defaultLabels.length > 0) {
155
- this.log(styles.muted(` Default labels: ${template.defaultLabels.join(', ')}`));
156
- }
157
- if (template.suggestedSubtasks.length > 0) {
158
- this.log(styles.muted(` Subtasks: ${template.suggestedSubtasks.length}`));
159
- }
160
- this.log('');
161
- this.log(styles.muted(`Create ticket from template: prlt ticket template apply ${template.id}`));
162
- }
163
- }
File without changes
File without changes