@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,63 +0,0 @@
1
- import { Command } from '@oclif/core';
2
- import { styles } from '../../../lib/styles.js';
3
- import { FlagResolver, shouldOutputJson } from '../../../lib/flags/index.js';
4
- import { machineOutputFlags } from '../../../lib/pmo/index.js';
5
- export default class TemplatePhase extends Command {
6
- static description = 'Manage phase templates (project lifecycle phases)';
7
- static aliases = ['template:phases'];
8
- static examples = [
9
- '<%= config.bin %> <%= command.id %>',
10
- '<%= config.bin %> <%= command.id %> list',
11
- '<%= config.bin %> <%= command.id %> apply agile',
12
- '<%= config.bin %> <%= command.id %> create "My Phases"',
13
- ];
14
- static flags = {
15
- ...machineOutputFlags,
16
- };
17
- async run() {
18
- const { flags } = await this.parse(TemplatePhase);
19
- const jsonMode = shouldOutputJson(flags);
20
- // Create resolver for action selection
21
- const resolver = new FlagResolver({
22
- commandName: 'template phase',
23
- baseCommand: 'prlt template phase',
24
- jsonMode,
25
- flags: {},
26
- });
27
- resolver.addPrompt({
28
- flagName: 'action',
29
- type: 'list',
30
- message: 'What would you like to do?',
31
- choices: () => [
32
- { name: 'List phase templates', value: 'list', command: 'prlt template phase list --json' },
33
- { name: 'Apply a phase template to project', value: 'apply', command: 'prlt template phase apply --json' },
34
- { name: 'Create a new phase template', value: 'create', command: 'prlt template phase create --json' },
35
- { name: 'Update a phase template', value: 'update', command: 'prlt template phase update --json' },
36
- { name: 'Delete a phase template', value: 'delete', command: 'prlt template phase delete --json' },
37
- ],
38
- });
39
- // In JSON mode, this outputs the prompt and exits
40
- const resolved = await resolver.resolve();
41
- // Only reached in interactive mode
42
- this.log('');
43
- this.log(styles.header('Phase Templates'));
44
- this.log('');
45
- switch (resolved.action) {
46
- case 'list':
47
- await this.config.runCommand('template:phase:list', []);
48
- break;
49
- case 'apply':
50
- await this.config.runCommand('phase:template:apply', []);
51
- break;
52
- case 'create':
53
- await this.config.runCommand('phase:template:create', []);
54
- break;
55
- case 'update':
56
- await this.config.runCommand('phase:template:update', []);
57
- break;
58
- case 'delete':
59
- await this.config.runCommand('phase:template:delete', []);
60
- break;
61
- }
62
- }
63
- }
@@ -1,11 +0,0 @@
1
- import { Command } from '@oclif/core';
2
- export default class TemplatePhaseList extends Command {
3
- static description: string;
4
- static examples: string[];
5
- static flags: {
6
- builtin: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
- custom: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
- };
10
- run(): Promise<void>;
11
- }
@@ -1,36 +0,0 @@
1
- import { Command, Flags } from '@oclif/core';
2
- export default class TemplatePhaseList extends Command {
3
- static description = 'List phase templates';
4
- static examples = [
5
- '<%= config.bin %> <%= command.id %>',
6
- '<%= config.bin %> <%= command.id %> --builtin',
7
- '<%= config.bin %> <%= command.id %> --json',
8
- ];
9
- static flags = {
10
- builtin: Flags.boolean({
11
- description: 'Show only built-in templates',
12
- exclusive: ['custom'],
13
- }),
14
- custom: Flags.boolean({
15
- description: 'Show only custom templates',
16
- exclusive: ['builtin'],
17
- }),
18
- json: Flags.boolean({
19
- char: 'm',
20
- aliases: ['machine'],
21
- description: 'Output as JSON',
22
- default: false,
23
- }),
24
- };
25
- async run() {
26
- const { flags } = await this.parse(TemplatePhaseList);
27
- const args = [];
28
- if (flags.builtin)
29
- args.push('--builtin');
30
- if (flags.custom)
31
- args.push('--custom');
32
- if (flags.json)
33
- args.push('--json');
34
- await this.config.runCommand('phase:template:list', args);
35
- }
36
- }
@@ -1,14 +0,0 @@
1
- import { Command } from '@oclif/core';
2
- export default class TemplatePhaseUpdate extends Command {
3
- static description: string;
4
- static examples: string[];
5
- static args: {
6
- id: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
- };
8
- static flags: {
9
- name: 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
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
- };
13
- run(): Promise<void>;
14
- }
@@ -1,43 +0,0 @@
1
- import { Args, Command, Flags } from '@oclif/core';
2
- export default class TemplatePhaseUpdate extends Command {
3
- static description = 'Update an existing phase template';
4
- static examples = [
5
- '<%= config.bin %> <%= command.id %> my-template --name "New Name"',
6
- '<%= config.bin %> <%= command.id %> my-template --description "Updated description"',
7
- ];
8
- static args = {
9
- id: Args.string({
10
- description: 'Template ID to update',
11
- required: false,
12
- }),
13
- };
14
- static flags = {
15
- name: Flags.string({
16
- char: 'n',
17
- description: 'New template name',
18
- }),
19
- description: Flags.string({
20
- char: 'd',
21
- description: 'New template description',
22
- }),
23
- json: Flags.boolean({
24
- char: 'm',
25
- aliases: ['machine'],
26
- description: 'Output prompt configuration as JSON (for AI agents/scripts)',
27
- default: false,
28
- }),
29
- };
30
- async run() {
31
- const { args, flags } = await this.parse(TemplatePhaseUpdate);
32
- const cmdArgs = [];
33
- if (args.id)
34
- cmdArgs.push(args.id);
35
- if (flags.name)
36
- cmdArgs.push('--name', flags.name);
37
- if (flags.description)
38
- cmdArgs.push('--description', flags.description);
39
- if (flags.json)
40
- cmdArgs.push('--json');
41
- await this.config.runCommand('phase:template:update', cmdArgs);
42
- }
43
- }
@@ -1,17 +0,0 @@
1
- import { Command } from '@oclif/core';
2
- export default class TemplateTicketApply extends Command {
3
- static description: string;
4
- static examples: string[];
5
- static args: {
6
- template: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
- };
8
- static flags: {
9
- project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
- title: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
- column: 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
- interactive: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
- };
16
- run(): Promise<void>;
17
- }
@@ -1,60 +0,0 @@
1
- import { Args, Command, Flags } from '@oclif/core';
2
- export default class TemplateTicketApply extends Command {
3
- static description = 'Create a new ticket from a template';
4
- static examples = [
5
- '<%= config.bin %> <%= command.id %> bug-report',
6
- '<%= config.bin %> <%= command.id %> feature-request --title "Add dark mode"',
7
- '<%= config.bin %> <%= command.id %> bug-report --project my-project',
8
- ];
9
- static args = {
10
- template: Args.string({
11
- description: 'Template ID to use',
12
- required: true,
13
- }),
14
- };
15
- static flags = {
16
- project: Flags.string({
17
- char: 'p',
18
- description: 'Project ID or name',
19
- }),
20
- title: Flags.string({
21
- char: 't',
22
- description: 'Ticket title (overrides template pattern)',
23
- }),
24
- column: Flags.string({
25
- char: 'c',
26
- description: 'Column to place the ticket in',
27
- }),
28
- priority: Flags.string({
29
- description: 'Priority (overrides template default)',
30
- }),
31
- interactive: Flags.boolean({
32
- char: 'i',
33
- description: 'Interactive mode - prompt for values',
34
- default: false,
35
- }),
36
- json: Flags.boolean({
37
- char: 'm',
38
- aliases: ['machine'],
39
- description: 'Output prompt configuration as JSON (for AI agents/scripts)',
40
- default: false,
41
- }),
42
- };
43
- async run() {
44
- const { args, flags } = await this.parse(TemplateTicketApply);
45
- const cmdArgs = [args.template];
46
- if (flags.project)
47
- cmdArgs.push('--project', flags.project);
48
- if (flags.title)
49
- cmdArgs.push('--title', flags.title);
50
- if (flags.column)
51
- cmdArgs.push('--column', flags.column);
52
- if (flags.priority)
53
- cmdArgs.push('--priority', flags.priority);
54
- if (flags.interactive)
55
- cmdArgs.push('--interactive');
56
- if (flags.json)
57
- cmdArgs.push('--json');
58
- await this.config.runCommand('ticket:template:apply', cmdArgs);
59
- }
60
- }
@@ -1,20 +0,0 @@
1
- import { Command } from '@oclif/core';
2
- export default class TemplateTicketCreate extends Command {
3
- static description: string;
4
- static examples: string[];
5
- static args: {
6
- name: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
- };
8
- static flags: {
9
- description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
- 'title-pattern': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
- 'description-template': 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
- subtask: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
- ac: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
- label: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
18
- };
19
- run(): Promise<void>;
20
- }
@@ -1,89 +0,0 @@
1
- import { Args, Command, Flags } from '@oclif/core';
2
- export default class TemplateTicketCreate extends Command {
3
- static description = 'Create a new ticket template from scratch';
4
- static examples = [
5
- '<%= config.bin %> <%= command.id %> "Bug Report"',
6
- '<%= config.bin %> <%= command.id %> "Feature Request" -d "Template for new features"',
7
- '<%= config.bin %> <%= command.id %> "Task" --title-pattern "[TASK] " --priority P2',
8
- '<%= config.bin %> <%= command.id %> "Onboarding" --subtask "Setup environment" --subtask "Read docs" --ac "Complete all subtasks"',
9
- ];
10
- static args = {
11
- name: Args.string({
12
- description: 'Template name',
13
- required: false,
14
- }),
15
- };
16
- static flags = {
17
- description: Flags.string({
18
- char: 'd',
19
- description: 'Template description',
20
- }),
21
- 'title-pattern': Flags.string({
22
- description: 'Default title prefix/pattern (e.g., "[BUG] ")',
23
- }),
24
- 'description-template': Flags.string({
25
- description: 'Default description template (markdown)',
26
- }),
27
- priority: Flags.string({
28
- char: 'p',
29
- description: 'Default priority (P0, P1, P2, P3)',
30
- }),
31
- category: Flags.string({
32
- char: 'c',
33
- description: 'Default category (bug, feature, etc.)',
34
- }),
35
- subtask: Flags.string({
36
- description: 'Add a suggested subtask (can be used multiple times)',
37
- multiple: true,
38
- }),
39
- ac: Flags.string({
40
- description: 'Add an acceptance criterion pattern (can be used multiple times)',
41
- multiple: true,
42
- }),
43
- label: Flags.string({
44
- char: 'l',
45
- description: 'Add a default label (can be used multiple times)',
46
- multiple: true,
47
- }),
48
- json: Flags.boolean({
49
- char: 'm',
50
- aliases: ['machine'],
51
- description: 'Output prompt configuration as JSON (for AI agents/scripts)',
52
- default: false,
53
- }),
54
- };
55
- async run() {
56
- const { args, flags } = await this.parse(TemplateTicketCreate);
57
- const cmdArgs = [];
58
- if (args.name)
59
- cmdArgs.push(args.name);
60
- if (flags.description)
61
- cmdArgs.push('--description', flags.description);
62
- if (flags['title-pattern'])
63
- cmdArgs.push('--title-pattern', flags['title-pattern']);
64
- if (flags['description-template'])
65
- cmdArgs.push('--description-template', flags['description-template']);
66
- if (flags.priority)
67
- cmdArgs.push('--priority', flags.priority);
68
- if (flags.category)
69
- cmdArgs.push('--category', flags.category);
70
- if (flags.subtask) {
71
- for (const subtask of flags.subtask) {
72
- cmdArgs.push('--subtask', subtask);
73
- }
74
- }
75
- if (flags.ac) {
76
- for (const ac of flags.ac) {
77
- cmdArgs.push('--ac', ac);
78
- }
79
- }
80
- if (flags.label) {
81
- for (const label of flags.label) {
82
- cmdArgs.push('--label', label);
83
- }
84
- }
85
- if (flags.json)
86
- cmdArgs.push('--json');
87
- await this.config.runCommand('ticket:template:create', cmdArgs);
88
- }
89
- }
@@ -1,13 +0,0 @@
1
- import { Command } from '@oclif/core';
2
- export default class TemplateTicketDelete extends Command {
3
- static description: string;
4
- static examples: string[];
5
- static args: {
6
- id: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
- };
8
- static flags: {
9
- force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
- };
12
- run(): Promise<void>;
13
- }
@@ -1,38 +0,0 @@
1
- import { Args, Command, Flags } from '@oclif/core';
2
- export default class TemplateTicketDelete extends Command {
3
- static description = 'Delete a ticket template';
4
- static examples = [
5
- '<%= config.bin %> <%= command.id %> my-template',
6
- '<%= config.bin %> <%= command.id %> my-template --force',
7
- ];
8
- static args = {
9
- id: Args.string({
10
- description: 'Template ID to delete',
11
- required: false,
12
- }),
13
- };
14
- static flags = {
15
- force: Flags.boolean({
16
- char: 'f',
17
- description: 'Skip confirmation',
18
- default: false,
19
- }),
20
- json: Flags.boolean({
21
- char: 'm',
22
- aliases: ['machine'],
23
- description: 'Output prompt configuration as JSON (for AI agents/scripts)',
24
- default: false,
25
- }),
26
- };
27
- async run() {
28
- const { args, flags } = await this.parse(TemplateTicketDelete);
29
- const cmdArgs = [];
30
- if (args.id)
31
- cmdArgs.push(args.id);
32
- if (flags.force)
33
- cmdArgs.push('--force');
34
- if (flags.json)
35
- cmdArgs.push('--json');
36
- await this.config.runCommand('ticket:template:delete', cmdArgs);
37
- }
38
- }
@@ -1,63 +0,0 @@
1
- import { Command } from '@oclif/core';
2
- import { styles } from '../../../lib/styles.js';
3
- import { FlagResolver, shouldOutputJson } from '../../../lib/flags/index.js';
4
- import { machineOutputFlags } from '../../../lib/pmo/index.js';
5
- export default class TemplateTicket extends Command {
6
- static description = 'Manage ticket templates (for creating tickets from templates)';
7
- static aliases = ['template:tickets'];
8
- static examples = [
9
- '<%= config.bin %> <%= command.id %>',
10
- '<%= config.bin %> <%= command.id %> list',
11
- '<%= config.bin %> <%= command.id %> apply bug-report',
12
- '<%= config.bin %> <%= command.id %> save TKT-001 "My Template"',
13
- ];
14
- static flags = {
15
- ...machineOutputFlags,
16
- };
17
- async run() {
18
- const { flags } = await this.parse(TemplateTicket);
19
- const jsonMode = shouldOutputJson(flags);
20
- // Create resolver for action selection
21
- const resolver = new FlagResolver({
22
- commandName: 'template ticket',
23
- baseCommand: 'prlt template ticket',
24
- jsonMode,
25
- flags: {},
26
- });
27
- resolver.addPrompt({
28
- flagName: 'action',
29
- type: 'list',
30
- message: 'What would you like to do?',
31
- choices: () => [
32
- { name: 'List ticket templates', value: 'list', command: 'prlt template ticket list --json' },
33
- { name: 'Create new template', value: 'create', command: 'prlt ticket template create --json' },
34
- { name: 'Create ticket from template', value: 'apply', command: 'prlt ticket template apply --json' },
35
- { name: 'Save ticket as template', value: 'save', command: 'prlt ticket template save --json' },
36
- { name: 'Delete ticket template', value: 'delete', command: 'prlt ticket template delete --json' },
37
- ],
38
- });
39
- // In JSON mode, this outputs the prompt and exits
40
- const resolved = await resolver.resolve();
41
- // Only reached in interactive mode
42
- this.log('');
43
- this.log(styles.header('Ticket Templates'));
44
- this.log('');
45
- switch (resolved.action) {
46
- case 'list':
47
- await this.config.runCommand('template:ticket:list', []);
48
- break;
49
- case 'create':
50
- await this.config.runCommand('ticket:template:create', []);
51
- break;
52
- case 'apply':
53
- await this.config.runCommand('ticket:template:apply', []);
54
- break;
55
- case 'save':
56
- await this.config.runCommand('ticket:template:save', []);
57
- break;
58
- case 'delete':
59
- await this.config.runCommand('ticket:template:delete', []);
60
- break;
61
- }
62
- }
63
- }
@@ -1,11 +0,0 @@
1
- import { Command } from '@oclif/core';
2
- export default class TemplateTicketList extends Command {
3
- static description: string;
4
- static examples: string[];
5
- static flags: {
6
- builtin: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
- custom: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
- };
10
- run(): Promise<void>;
11
- }
@@ -1,36 +0,0 @@
1
- import { Command, Flags } from '@oclif/core';
2
- export default class TemplateTicketList extends Command {
3
- static description = 'List ticket templates';
4
- static examples = [
5
- '<%= config.bin %> <%= command.id %>',
6
- '<%= config.bin %> <%= command.id %> --builtin',
7
- '<%= config.bin %> <%= command.id %> --json',
8
- ];
9
- static flags = {
10
- builtin: Flags.boolean({
11
- description: 'Show only built-in templates',
12
- exclusive: ['custom'],
13
- }),
14
- custom: Flags.boolean({
15
- description: 'Show only custom templates',
16
- exclusive: ['builtin'],
17
- }),
18
- json: Flags.boolean({
19
- char: 'm',
20
- aliases: ['machine'],
21
- description: 'Output as JSON',
22
- default: false,
23
- }),
24
- };
25
- async run() {
26
- const { flags } = await this.parse(TemplateTicketList);
27
- const args = [];
28
- if (flags.builtin)
29
- args.push('--builtin');
30
- if (flags.custom)
31
- args.push('--custom');
32
- if (flags.json)
33
- args.push('--json');
34
- await this.config.runCommand('ticket:template:list', args);
35
- }
36
- }
@@ -1,15 +0,0 @@
1
- import { Command } from '@oclif/core';
2
- export default class TemplateTicketSave extends Command {
3
- static description: string;
4
- static examples: string[];
5
- static args: {
6
- ticket: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
- name: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
8
- };
9
- static flags: {
10
- 'template-name': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
- description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
- };
14
- run(): Promise<void>;
15
- }
@@ -1,46 +0,0 @@
1
- import { Args, Command, Flags } from '@oclif/core';
2
- import { machineOutputFlags } from '../../../lib/pmo/base-command.js';
3
- export default class TemplateTicketSave extends Command {
4
- static description = 'Create a template from an existing ticket';
5
- static examples = [
6
- '<%= config.bin %> <%= command.id %> TKT-001 "Bug Report Template"',
7
- '<%= config.bin %> <%= command.id %> TKT-042 "Feature Request" --description "Standard feature request template"',
8
- '<%= config.bin %> <%= command.id %> TKT-001 --template-name "My Template" --json',
9
- ];
10
- static args = {
11
- ticket: Args.string({
12
- description: 'Ticket ID to create template from',
13
- required: false,
14
- }),
15
- name: Args.string({
16
- description: 'Template name',
17
- required: false,
18
- }),
19
- };
20
- static flags = {
21
- ...machineOutputFlags,
22
- 'template-name': Flags.string({
23
- char: 'n',
24
- description: 'Template name (alternative to positional arg, required in non-TTY/JSON mode)',
25
- }),
26
- description: Flags.string({
27
- char: 'd',
28
- description: 'Template description',
29
- }),
30
- };
31
- async run() {
32
- const { args, flags } = await this.parse(TemplateTicketSave);
33
- const cmdArgs = [];
34
- if (args.ticket)
35
- cmdArgs.push(args.ticket);
36
- if (args.name)
37
- cmdArgs.push(args.name);
38
- if (flags['template-name'])
39
- cmdArgs.push('--template-name', flags['template-name']);
40
- if (flags.description)
41
- cmdArgs.push('--description', flags.description);
42
- if (flags.json)
43
- cmdArgs.push('--json');
44
- await this.config.runCommand('ticket:template:save', cmdArgs);
45
- }
46
- }
@@ -1,14 +0,0 @@
1
- import { PMOCommand } from '../../../lib/pmo/index.js';
2
- export default class TicketLinkBlock extends PMOCommand {
3
- static description: string;
4
- static examples: string[];
5
- static args: {
6
- id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
- blocker: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
8
- };
9
- static flags: {
10
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
- project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
- };
13
- execute(): Promise<void>;
14
- }