@proletariat/cli 0.3.21 → 0.3.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +190 -21
- package/README.md +7 -7
- package/dist/commands/action/create.d.ts +0 -1
- package/dist/commands/action/delete.d.ts +0 -1
- package/dist/commands/action/index.d.ts +0 -1
- package/dist/commands/action/list.d.ts +0 -1
- package/dist/commands/action/list.js +2 -0
- package/dist/commands/action/run.d.ts +0 -1
- package/dist/commands/action/show.d.ts +0 -1
- package/dist/commands/action/update.d.ts +0 -1
- package/dist/commands/agent/auth.d.ts +0 -1
- package/dist/commands/agent/auth.js +3 -7
- package/dist/commands/agent/discover.d.ts +0 -1
- package/dist/commands/agent/discover.js +3 -7
- package/dist/commands/agent/index.d.ts +0 -1
- package/dist/commands/agent/index.js +2 -0
- package/dist/commands/agent/list.d.ts +0 -1
- package/dist/commands/agent/list.js +30 -1
- package/dist/commands/agent/login.d.ts +0 -1
- package/dist/commands/agent/login.js +2 -0
- package/dist/commands/agent/rebuild.d.ts +0 -1
- package/dist/commands/agent/rebuild.js +2 -0
- package/dist/commands/agent/remove.d.ts +0 -1
- package/dist/commands/agent/remove.js +2 -0
- package/dist/commands/agent/restart.d.ts +0 -1
- package/dist/commands/agent/restart.js +2 -0
- package/dist/commands/agent/shell.d.ts +0 -1
- package/dist/commands/agent/shell.js +2 -0
- package/dist/commands/agent/staff/add.d.ts +0 -1
- package/dist/commands/agent/staff/add.js +3 -7
- package/dist/commands/agent/staff/index.d.ts +0 -1
- package/dist/commands/agent/staff/index.js +2 -0
- package/dist/commands/agent/staff/remove.d.ts +0 -1
- package/dist/commands/agent/staff/remove.js +2 -0
- package/dist/commands/agent/status.d.ts +0 -1
- package/dist/commands/agent/status.js +2 -0
- package/dist/commands/agent/temp/cleanup.d.ts +0 -1
- package/dist/commands/agent/temp/cleanup.js +2 -0
- package/dist/commands/agent/temp/index.d.ts +0 -1
- package/dist/commands/agent/temp/index.js +2 -0
- package/dist/commands/agent/themes/index.d.ts +0 -1
- package/dist/commands/agent/themes/index.js +3 -7
- package/dist/commands/agent/themes/set.d.ts +0 -1
- package/dist/commands/agent/themes/set.js +3 -7
- package/dist/commands/agent/visit.d.ts +0 -1
- package/dist/commands/agent/visit.js +2 -0
- package/dist/commands/autocomplete/setup.d.ts +0 -1
- package/dist/commands/board/index.d.ts +0 -1
- package/dist/commands/board/view.d.ts +0 -1
- package/dist/commands/board/watch.d.ts +0 -1
- package/dist/commands/branch/create.d.ts +0 -1
- package/dist/commands/branch/create.js +2 -0
- package/dist/commands/branch/index.d.ts +0 -1
- package/dist/commands/branch/index.js +2 -0
- package/dist/commands/branch/list.d.ts +0 -1
- package/dist/commands/branch/validate.d.ts +0 -1
- package/dist/commands/branch/where.d.ts +0 -1
- package/dist/commands/branch/where.js +2 -0
- package/dist/commands/category/create.d.ts +18 -0
- package/dist/commands/category/create.js +108 -0
- package/dist/commands/category/delete.d.ts +17 -0
- package/dist/commands/category/delete.js +103 -0
- package/dist/commands/category/index.d.ts +15 -0
- package/dist/commands/category/index.js +87 -0
- package/dist/commands/category/list.d.ts +17 -0
- package/dist/commands/category/list.js +85 -0
- package/dist/commands/category/rename.d.ts +18 -0
- package/dist/commands/category/rename.js +127 -0
- package/dist/commands/claude.js +2 -0
- package/dist/commands/commit.js +2 -0
- package/dist/commands/config/index.js +2 -0
- package/dist/commands/docker/clean.d.ts +0 -1
- package/dist/commands/docker/index.d.ts +0 -1
- package/dist/commands/docker/prune.d.ts +0 -1
- package/dist/commands/docker/restart.d.ts +0 -1
- package/dist/commands/docker/stop.d.ts +0 -1
- package/dist/commands/epic/activate.d.ts +0 -1
- package/dist/commands/epic/activate.js +2 -0
- package/dist/commands/epic/archive.d.ts +0 -1
- package/dist/commands/epic/archive.js +2 -0
- package/dist/commands/epic/create.d.ts +0 -1
- package/dist/commands/epic/create.js +3 -1
- package/dist/commands/epic/delete.d.ts +14 -0
- package/dist/commands/epic/delete.js +129 -0
- package/dist/commands/epic/index.d.ts +0 -1
- package/dist/commands/epic/index.js +6 -0
- package/dist/commands/epic/link/block.d.ts +0 -1
- package/dist/commands/epic/link/block.js +2 -0
- package/dist/commands/epic/link/duplicates.d.ts +0 -1
- package/dist/commands/epic/link/duplicates.js +2 -0
- package/dist/commands/epic/link/index.d.ts +0 -1
- package/dist/commands/epic/link/index.js +2 -0
- package/dist/commands/epic/link/relates.d.ts +0 -1
- package/dist/commands/epic/link/relates.js +2 -0
- package/dist/commands/epic/link/remove.d.ts +0 -1
- package/dist/commands/epic/link/remove.js +2 -0
- package/dist/commands/epic/list.d.ts +0 -1
- package/dist/commands/epic/move.d.ts +0 -1
- package/dist/commands/epic/move.js +2 -0
- package/dist/commands/epic/progress.d.ts +0 -1
- package/dist/commands/epic/progress.js +2 -0
- package/dist/commands/epic/project.d.ts +0 -1
- package/dist/commands/epic/project.js +2 -0
- package/dist/commands/epic/reorder.d.ts +0 -1
- package/dist/commands/epic/reorder.js +2 -0
- package/dist/commands/epic/spec.d.ts +0 -1
- package/dist/commands/epic/spec.js +2 -0
- package/dist/commands/epic/ticket.d.ts +0 -1
- package/dist/commands/epic/ticket.js +2 -0
- package/dist/commands/epic/view.d.ts +0 -1
- package/dist/commands/epic/view.js +2 -0
- package/dist/commands/execution/config.d.ts +0 -1
- package/dist/commands/execution/config.js +2 -0
- package/dist/commands/execution/index.d.ts +0 -1
- package/dist/commands/execution/index.js +3 -1
- package/dist/commands/execution/list.d.ts +0 -1
- package/dist/commands/execution/logs.d.ts +0 -1
- package/dist/commands/execution/logs.js +3 -1
- package/dist/commands/execution/stop.d.ts +0 -1
- package/dist/commands/execution/stop.js +3 -1
- package/dist/commands/execution/view.d.ts +0 -1
- package/dist/commands/execution/view.js +3 -1
- package/dist/commands/gh/index.d.ts +0 -1
- package/dist/commands/gh/login.d.ts +0 -1
- package/dist/commands/gh/status.d.ts +0 -1
- package/dist/commands/gh/token.d.ts +0 -1
- package/dist/commands/init.js +2 -0
- package/dist/commands/phase/create.d.ts +0 -1
- package/dist/commands/phase/create.js +1 -2
- package/dist/commands/phase/delete.d.ts +0 -1
- package/dist/commands/phase/delete.js +1 -1
- package/dist/commands/phase/list.d.ts +0 -1
- package/dist/commands/phase/move.d.ts +0 -1
- package/dist/commands/phase/move.js +2 -2
- package/dist/commands/phase/template/apply.d.ts +0 -1
- package/dist/commands/phase/template/apply.js +2 -0
- package/dist/commands/phase/template/create.d.ts +0 -1
- package/dist/commands/phase/template/create.js +0 -1
- package/dist/commands/phase/template/delete.d.ts +0 -1
- package/dist/commands/phase/template/delete.js +2 -0
- package/dist/commands/phase/template/index.d.ts +0 -1
- package/dist/commands/phase/template/index.js +2 -0
- package/dist/commands/phase/template/list.d.ts +0 -1
- package/dist/commands/phase/template/list.js +2 -0
- package/dist/commands/phase/template/update.d.ts +0 -1
- package/dist/commands/phase/update.d.ts +0 -1
- package/dist/commands/phase/update.js +2 -2
- package/dist/commands/pmo/init.js +2 -0
- package/dist/commands/pr/create.d.ts +0 -1
- package/dist/commands/pr/index.d.ts +0 -1
- package/dist/commands/pr/link.d.ts +0 -1
- package/dist/commands/pr/list.d.ts +0 -1
- package/dist/commands/pr/status.d.ts +0 -1
- package/dist/commands/project/archive.d.ts +0 -1
- package/dist/commands/project/create.d.ts +0 -1
- package/dist/commands/project/delete.d.ts +0 -1
- package/dist/commands/project/index.d.ts +0 -1
- package/dist/commands/project/list.d.ts +0 -1
- package/dist/commands/project/spec.d.ts +0 -1
- package/dist/commands/project/unarchive.d.ts +0 -1
- package/dist/commands/project/update.d.ts +0 -1
- package/dist/commands/project/view.d.ts +0 -1
- package/dist/commands/repo/add.d.ts +0 -1
- package/dist/commands/repo/add.js +2 -0
- package/dist/commands/repo/index.d.ts +0 -1
- package/dist/commands/repo/list.d.ts +0 -1
- package/dist/commands/repo/remove.d.ts +0 -1
- package/dist/commands/repo/view.d.ts +0 -1
- package/dist/commands/roadmap/add-project.d.ts +0 -1
- package/dist/commands/roadmap/add-project.js +2 -0
- package/dist/commands/roadmap/create.d.ts +0 -1
- package/dist/commands/roadmap/create.js +2 -0
- package/dist/commands/roadmap/delete.d.ts +0 -1
- package/dist/commands/roadmap/delete.js +12 -1
- package/dist/commands/roadmap/generate.d.ts +0 -1
- package/dist/commands/roadmap/generate.js +2 -0
- package/dist/commands/roadmap/index.d.ts +0 -1
- package/dist/commands/roadmap/index.js +2 -0
- package/dist/commands/roadmap/list.d.ts +0 -1
- package/dist/commands/roadmap/remove-project.d.ts +0 -1
- package/dist/commands/roadmap/remove-project.js +2 -0
- package/dist/commands/roadmap/reorder.d.ts +0 -1
- package/dist/commands/roadmap/reorder.js +2 -0
- package/dist/commands/roadmap/update.d.ts +0 -1
- package/dist/commands/roadmap/update.js +2 -0
- package/dist/commands/roadmap/view.d.ts +0 -1
- package/dist/commands/roadmap/view.js +2 -0
- package/dist/commands/session/attach.d.ts +0 -1
- package/dist/commands/session/attach.js +9 -0
- package/dist/commands/session/index.d.ts +0 -1
- package/dist/commands/session/index.js +2 -0
- package/dist/commands/session/list.d.ts +0 -1
- package/dist/commands/spec/create.d.ts +0 -1
- package/dist/commands/spec/create.js +1 -1
- package/dist/commands/spec/delete.d.ts +0 -1
- package/dist/commands/spec/edit.d.ts +0 -1
- package/dist/commands/spec/index.d.ts +0 -1
- package/dist/commands/spec/link/depends.d.ts +0 -1
- package/dist/commands/spec/link/duplicates.d.ts +0 -1
- package/dist/commands/spec/link/index.d.ts +0 -1
- package/dist/commands/spec/link/relates.d.ts +0 -1
- package/dist/commands/spec/link/remove.d.ts +0 -1
- package/dist/commands/spec/list.d.ts +0 -1
- package/dist/commands/spec/plan.d.ts +0 -1
- package/dist/commands/spec/ticket.d.ts +0 -3
- package/dist/commands/spec/ticket.js +7 -38
- package/dist/commands/spec/view.d.ts +0 -1
- package/dist/commands/status/category.d.ts +14 -0
- package/dist/commands/status/category.js +63 -0
- package/dist/commands/status/create.d.ts +0 -1
- package/dist/commands/status/create.js +1 -1
- package/dist/commands/status/delete.d.ts +0 -1
- package/dist/commands/status/index.d.ts +0 -1
- package/dist/commands/status/list.d.ts +0 -1
- package/dist/commands/status/move.d.ts +0 -1
- package/dist/commands/status/update.d.ts +0 -1
- package/dist/commands/template/delete.d.ts +0 -1
- package/dist/commands/template/delete.js +2 -0
- package/dist/commands/template/index.d.ts +0 -1
- package/dist/commands/template/list.d.ts +0 -1
- package/dist/commands/template/list.js +2 -0
- package/dist/commands/template/phase/apply.js +2 -0
- package/dist/commands/template/phase/create.d.ts +0 -1
- package/dist/commands/template/phase/create.js +3 -9
- package/dist/commands/template/phase/delete.js +2 -0
- package/dist/commands/template/phase/index.d.ts +0 -1
- package/dist/commands/template/phase/list.js +2 -0
- package/dist/commands/template/phase/update.js +2 -0
- package/dist/commands/template/ticket/apply.js +2 -0
- package/dist/commands/template/ticket/create.js +2 -0
- package/dist/commands/template/ticket/delete.js +2 -0
- package/dist/commands/template/ticket/index.d.ts +0 -1
- package/dist/commands/template/ticket/list.js +2 -0
- package/dist/commands/template/ticket/save.d.ts +0 -1
- package/dist/commands/template/ticket/save.js +0 -6
- package/dist/commands/terminal/title.d.ts +0 -1
- package/dist/commands/ticket/bulk.d.ts +0 -1
- package/dist/commands/ticket/bulk.js +2 -0
- package/dist/commands/ticket/category.d.ts +14 -0
- package/dist/commands/ticket/category.js +63 -0
- package/dist/commands/ticket/complete.d.ts +0 -1
- package/dist/commands/ticket/complete.js +2 -0
- package/dist/commands/ticket/create.d.ts +0 -1
- package/dist/commands/ticket/create.js +6 -4
- package/dist/commands/ticket/delete.d.ts +0 -1
- package/dist/commands/ticket/delete.js +2 -0
- package/dist/commands/ticket/edit.d.ts +0 -1
- package/dist/commands/ticket/edit.js +4 -2
- package/dist/commands/ticket/epic.d.ts +0 -1
- package/dist/commands/ticket/epic.js +2 -0
- package/dist/commands/ticket/index.d.ts +0 -1
- package/dist/commands/ticket/index.js +2 -0
- package/dist/commands/ticket/link/block.d.ts +0 -1
- package/dist/commands/ticket/link/block.js +2 -0
- package/dist/commands/ticket/link/duplicates.d.ts +0 -1
- package/dist/commands/ticket/link/duplicates.js +2 -0
- package/dist/commands/ticket/link/index.d.ts +0 -1
- package/dist/commands/ticket/link/index.js +2 -0
- package/dist/commands/ticket/link/relates.d.ts +0 -1
- package/dist/commands/ticket/link/relates.js +2 -0
- package/dist/commands/ticket/link/remove.d.ts +0 -1
- package/dist/commands/ticket/link/remove.js +2 -0
- package/dist/commands/ticket/list.d.ts +0 -1
- package/dist/commands/ticket/move.d.ts +0 -1
- package/dist/commands/ticket/move.js +2 -0
- package/dist/commands/ticket/project.d.ts +0 -1
- package/dist/commands/ticket/project.js +2 -0
- package/dist/commands/ticket/reassign.d.ts +0 -1
- package/dist/commands/ticket/reassign.js +29 -0
- package/dist/commands/ticket/spec.d.ts +0 -1
- package/dist/commands/ticket/spec.js +2 -0
- package/dist/commands/ticket/status.d.ts +0 -1
- package/dist/commands/ticket/status.js +2 -0
- package/dist/commands/ticket/template/apply.d.ts +0 -1
- package/dist/commands/ticket/template/apply.js +2 -0
- package/dist/commands/ticket/template/create.d.ts +0 -1
- package/dist/commands/ticket/template/create.js +4 -2
- package/dist/commands/ticket/template/delete.d.ts +0 -1
- package/dist/commands/ticket/template/delete.js +2 -0
- package/dist/commands/ticket/template/index.d.ts +0 -1
- package/dist/commands/ticket/template/index.js +2 -0
- package/dist/commands/ticket/template/list.d.ts +0 -1
- package/dist/commands/ticket/template/list.js +2 -0
- package/dist/commands/ticket/template/save.d.ts +0 -1
- package/dist/commands/ticket/template/save.js +2 -0
- package/dist/commands/ticket/update.d.ts +0 -1
- package/dist/commands/ticket/update.js +2 -0
- package/dist/commands/ticket/view.d.ts +0 -1
- package/dist/commands/ticket/view.js +2 -0
- package/dist/commands/work/complete.d.ts +0 -1
- package/dist/commands/work/complete.js +2 -0
- package/dist/commands/work/index.d.ts +0 -1
- package/dist/commands/work/index.js +2 -0
- package/dist/commands/work/ready.d.ts +1 -2
- package/dist/commands/work/ready.js +11 -5
- package/dist/commands/work/revise.d.ts +0 -1
- package/dist/commands/work/revise.js +3 -1
- package/dist/commands/work/spawn-all.d.ts +0 -1
- package/dist/commands/work/spawn-all.js +2 -0
- package/dist/commands/work/spawn.d.ts +0 -1
- package/dist/commands/work/spawn.js +2 -0
- package/dist/commands/work/start.d.ts +0 -1
- package/dist/commands/work/start.js +6 -0
- package/dist/commands/work/watch.d.ts +0 -1
- package/dist/commands/work/watch.js +3 -1
- package/dist/commands/workflow/create.d.ts +0 -1
- package/dist/commands/workflow/delete.d.ts +0 -1
- package/dist/commands/workflow/index.d.ts +0 -1
- package/dist/commands/workflow/index.js +2 -0
- package/dist/commands/workflow/list.d.ts +0 -1
- package/dist/commands/workflow/switch.d.ts +0 -1
- package/dist/commands/workflow/view.d.ts +0 -1
- package/dist/commands/workspace/list.js +2 -0
- package/dist/commands/workspace/prune.d.ts +13 -0
- package/dist/commands/workspace/prune.js +186 -0
- package/dist/commands/workspace/remove.js +2 -0
- package/dist/commands/workspace/use.js +2 -0
- package/dist/lib/pmo/base-command.d.ts +2 -4
- package/dist/lib/pmo/base-command.js +8 -10
- package/dist/lib/pmo/schema.d.ts +2 -0
- package/dist/lib/pmo/schema.js +17 -0
- package/dist/lib/pmo/storage/base.d.ts +4 -0
- package/dist/lib/pmo/storage/base.js +31 -0
- package/dist/lib/pmo/storage/categories.d.ts +50 -0
- package/dist/lib/pmo/storage/categories.js +205 -0
- package/dist/lib/pmo/storage/index.d.ts +14 -1
- package/dist/lib/pmo/storage/index.js +35 -1
- package/dist/lib/pmo/storage/tickets.d.ts +5 -0
- package/dist/lib/pmo/storage/tickets.js +31 -3
- package/dist/lib/pmo/storage/types.d.ts +10 -0
- package/dist/lib/pmo/types.d.ts +25 -0
- package/dist/lib/prompt-json.d.ts +10 -16
- package/dist/lib/prompt-json.js +8 -16
- package/oclif.manifest.json +4037 -4099
- package/package.json +5 -4
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { Flags, Args } from '@oclif/core';
|
|
2
|
-
import * as fs from 'node:fs';
|
|
3
|
-
import * as path from 'node:path';
|
|
4
2
|
import { PMOCommand, pmoBaseFlags, autoExportToBoard } from '../../lib/pmo/index.js';
|
|
5
3
|
import { styles } from '../../lib/styles.js';
|
|
6
4
|
import { shouldOutputJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
|
|
@@ -91,7 +89,8 @@ export default class SpecTicket extends PMOCommand {
|
|
|
91
89
|
// Get spec ID
|
|
92
90
|
let specId = args.specId || flags.spec;
|
|
93
91
|
if (!specId) {
|
|
94
|
-
|
|
92
|
+
// List all specs globally (specs are not project-scoped)
|
|
93
|
+
const specs = await this.storage.listSpecs();
|
|
95
94
|
if (specs.length === 0) {
|
|
96
95
|
return handleError('NO_SPECS', 'No specs found. Create one first with: prlt spec create');
|
|
97
96
|
}
|
|
@@ -108,7 +107,7 @@ export default class SpecTicket extends PMOCommand {
|
|
|
108
107
|
type: 'list',
|
|
109
108
|
message: 'Select spec to link:',
|
|
110
109
|
choices: () => specs.map(s => ({
|
|
111
|
-
name: `${s.
|
|
110
|
+
name: `${s.title} (${s.status})`,
|
|
112
111
|
value: s.id,
|
|
113
112
|
})),
|
|
114
113
|
});
|
|
@@ -118,11 +117,10 @@ export default class SpecTicket extends PMOCommand {
|
|
|
118
117
|
if (!specId) {
|
|
119
118
|
this.error('No spec selected');
|
|
120
119
|
}
|
|
121
|
-
// Verify spec exists
|
|
122
|
-
const
|
|
123
|
-
if (!
|
|
124
|
-
|
|
125
|
-
this.error(`Spec "${specId}" not found in project "${projectName}"`);
|
|
120
|
+
// Verify spec exists globally (specs are not project-scoped)
|
|
121
|
+
const spec = await this.storage.getSpec(specId);
|
|
122
|
+
if (!spec) {
|
|
123
|
+
return handleError('SPEC_NOT_FOUND', `Spec "${specId}" not found`);
|
|
126
124
|
}
|
|
127
125
|
// Check if already linked
|
|
128
126
|
if (ticket.specId === specId) {
|
|
@@ -142,33 +140,4 @@ export default class SpecTicket extends PMOCommand {
|
|
|
142
140
|
this.log(styles.muted(`\nView ticket:`));
|
|
143
141
|
this.log(styles.muted(` prlt ticket view ${ticketId}`));
|
|
144
142
|
}
|
|
145
|
-
async listAvailableSpecs(pmoPath, projectId) {
|
|
146
|
-
const specsBasePath = path.join(pmoPath, 'projects', projectId, 'specs');
|
|
147
|
-
const specs = [];
|
|
148
|
-
if (!fs.existsSync(specsBasePath)) {
|
|
149
|
-
return specs;
|
|
150
|
-
}
|
|
151
|
-
for (const status of ['active', 'draft', 'archived']) {
|
|
152
|
-
const statusPath = path.join(specsBasePath, status);
|
|
153
|
-
if (!fs.existsSync(statusPath)) {
|
|
154
|
-
continue;
|
|
155
|
-
}
|
|
156
|
-
const files = fs.readdirSync(statusPath).filter(f => f.endsWith('.md'));
|
|
157
|
-
for (const file of files) {
|
|
158
|
-
const id = path.basename(file, '.md');
|
|
159
|
-
specs.push({ id, name: id, status });
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
return specs;
|
|
163
|
-
}
|
|
164
|
-
findSpecFile(pmoPath, projectId, specId) {
|
|
165
|
-
const specsBasePath = path.join(pmoPath, 'projects', projectId, 'specs');
|
|
166
|
-
for (const status of ['active', 'draft', 'archived']) {
|
|
167
|
-
const specPath = path.join(specsBasePath, status, `${specId}.md`);
|
|
168
|
-
if (fs.existsSync(specPath)) {
|
|
169
|
-
return specPath;
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
return null;
|
|
173
|
-
}
|
|
174
143
|
}
|
|
@@ -8,7 +8,6 @@ export default class SpecView extends PMOCommand {
|
|
|
8
8
|
static flags: {
|
|
9
9
|
spec: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
10
|
full: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
11
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
12
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
13
|
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { PMOCommand } from '../../lib/pmo/index.js';
|
|
2
|
+
export default class StatusCategory extends PMOCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static aliases: string[];
|
|
5
|
+
static examples: string[];
|
|
6
|
+
static flags: {
|
|
7
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
};
|
|
10
|
+
protected getPMOOptions(): {
|
|
11
|
+
promptIfMultiple: boolean;
|
|
12
|
+
};
|
|
13
|
+
execute(): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Flags } from '@oclif/core';
|
|
2
|
+
import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
|
|
3
|
+
import { shouldOutputJson } from '../../lib/prompt-json.js';
|
|
4
|
+
export default class StatusCategory extends PMOCommand {
|
|
5
|
+
static description = 'Manage status categories (backlog, started, completed, etc.)';
|
|
6
|
+
static aliases = ['status:categories'];
|
|
7
|
+
static examples = [
|
|
8
|
+
'<%= config.bin %> <%= command.id %>',
|
|
9
|
+
'<%= config.bin %> <%= command.id %> list',
|
|
10
|
+
'<%= config.bin %> <%= command.id %> create reviewing',
|
|
11
|
+
'<%= config.bin %> <%= command.id %> rename reviewing in-review',
|
|
12
|
+
'<%= config.bin %> <%= command.id %> delete reviewing',
|
|
13
|
+
];
|
|
14
|
+
static flags = {
|
|
15
|
+
...pmoBaseFlags,
|
|
16
|
+
json: Flags.boolean({
|
|
17
|
+
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
18
|
+
default: false,
|
|
19
|
+
}),
|
|
20
|
+
};
|
|
21
|
+
getPMOOptions() {
|
|
22
|
+
return { promptIfMultiple: false };
|
|
23
|
+
}
|
|
24
|
+
async execute() {
|
|
25
|
+
const { flags } = await this.parse(StatusCategory);
|
|
26
|
+
// Check if JSON output mode is active
|
|
27
|
+
const jsonMode = shouldOutputJson(flags);
|
|
28
|
+
// Show the action menu for status categories
|
|
29
|
+
const menuChoices = [
|
|
30
|
+
{ id: 'list', name: 'List all status categories', command: 'prlt category list --type status' },
|
|
31
|
+
{ id: 'create', name: 'Create new status category', command: 'prlt category create --type status --json' },
|
|
32
|
+
{ id: 'rename', name: 'Rename status category', command: 'prlt category rename --type status --json' },
|
|
33
|
+
{ id: 'delete', name: 'Delete status category', command: 'prlt category delete --type status --json' },
|
|
34
|
+
{ id: 'cancel', name: 'Cancel', command: '' },
|
|
35
|
+
];
|
|
36
|
+
const action = await this.selectFromList({
|
|
37
|
+
message: '📊 Status Categories - What would you like to do?',
|
|
38
|
+
items: menuChoices,
|
|
39
|
+
getName: (c) => c.name,
|
|
40
|
+
getValue: (c) => c.id,
|
|
41
|
+
getCommand: (c) => c.command,
|
|
42
|
+
jsonMode: jsonMode ? { flags, commandName: 'status category' } : null,
|
|
43
|
+
});
|
|
44
|
+
if (action === 'cancel' || !action) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// Run the selected subcommand
|
|
48
|
+
switch (action) {
|
|
49
|
+
case 'list':
|
|
50
|
+
await this.config.runCommand('category:list', ['--type', 'status']);
|
|
51
|
+
break;
|
|
52
|
+
case 'create':
|
|
53
|
+
await this.config.runCommand('category:create', ['--type', 'status']);
|
|
54
|
+
break;
|
|
55
|
+
case 'rename':
|
|
56
|
+
await this.config.runCommand('category:rename', ['--type', 'status']);
|
|
57
|
+
break;
|
|
58
|
+
case 'delete':
|
|
59
|
+
await this.config.runCommand('category:delete', ['--type', 'status']);
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -12,7 +12,6 @@ export default class StatusCreate extends PMOCommand {
|
|
|
12
12
|
description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
13
|
default: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
14
14
|
interactive: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
15
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
15
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
17
16
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
17
|
};
|
|
@@ -72,7 +72,7 @@ export default class StatusCreate extends PMOCommand {
|
|
|
72
72
|
type: 'input',
|
|
73
73
|
message: 'Status name:',
|
|
74
74
|
default: initialName,
|
|
75
|
-
validate: (value) => value.
|
|
75
|
+
validate: (value) => value.trim() ? true : 'Name cannot be empty',
|
|
76
76
|
when: (ctx) => !ctx.flags.name || flags.interactive,
|
|
77
77
|
});
|
|
78
78
|
// Add category prompt
|
|
@@ -7,7 +7,6 @@ export default class StatusDelete extends PMOCommand {
|
|
|
7
7
|
};
|
|
8
8
|
static flags: {
|
|
9
9
|
force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
10
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
11
|
};
|
|
13
12
|
execute(): Promise<void>;
|
|
@@ -4,7 +4,6 @@ export default class Status extends PMOCommand {
|
|
|
4
4
|
static aliases: string[];
|
|
5
5
|
static examples: string[];
|
|
6
6
|
static flags: {
|
|
7
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
7
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
8
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
9
|
};
|
|
@@ -4,7 +4,6 @@ export default class StatusList extends PMOCommand {
|
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
6
6
|
category: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
7
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
8
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
9
|
};
|
|
@@ -7,7 +7,6 @@ export default class StatusMove extends PMOCommand {
|
|
|
7
7
|
};
|
|
8
8
|
static flags: {
|
|
9
9
|
position: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
10
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
11
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
12
|
};
|
|
@@ -12,7 +12,6 @@ export default class StatusUpdate extends PMOCommand {
|
|
|
12
12
|
description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
13
|
default: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
14
14
|
interactive: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
15
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
15
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
17
16
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
17
|
};
|
|
@@ -6,7 +6,6 @@ export default class TemplateDelete extends PMOCommand {
|
|
|
6
6
|
type: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
7
|
force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
8
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
9
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
10
|
};
|
|
12
11
|
protected getPMOOptions(): {
|
|
@@ -4,7 +4,6 @@ export default class Template extends Command {
|
|
|
4
4
|
static aliases: string[];
|
|
5
5
|
static examples: string[];
|
|
6
6
|
static flags: {
|
|
7
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
7
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
8
|
};
|
|
10
9
|
run(): Promise<void>;
|
|
@@ -7,7 +7,6 @@ export default class TemplateList extends PMOCommand {
|
|
|
7
7
|
builtin: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
8
|
custom: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
9
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
10
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
11
|
};
|
|
13
12
|
protected getPMOOptions(): {
|
|
@@ -7,7 +7,6 @@ export default class TemplatePhaseCreate extends Command {
|
|
|
7
7
|
};
|
|
8
8
|
static flags: {
|
|
9
9
|
description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
10
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
11
|
};
|
|
13
12
|
run(): Promise<void>;
|
|
@@ -17,15 +17,11 @@ export default class TemplatePhaseCreate extends Command {
|
|
|
17
17
|
char: 'd',
|
|
18
18
|
description: 'Template description',
|
|
19
19
|
}),
|
|
20
|
-
machine: Flags.boolean({
|
|
21
|
-
char: 'm',
|
|
22
|
-
description: 'Output as JSON for AI agents/scripts (machine-readable mode)',
|
|
23
|
-
default: false,
|
|
24
|
-
}),
|
|
25
20
|
json: Flags.boolean({
|
|
26
|
-
|
|
21
|
+
char: 'm',
|
|
22
|
+
aliases: ['machine'],
|
|
23
|
+
description: 'Output as JSON for AI agents/scripts',
|
|
27
24
|
default: false,
|
|
28
|
-
hidden: true,
|
|
29
25
|
}),
|
|
30
26
|
};
|
|
31
27
|
async run() {
|
|
@@ -35,8 +31,6 @@ export default class TemplatePhaseCreate extends Command {
|
|
|
35
31
|
cmdArgs.push(args.name);
|
|
36
32
|
if (flags.description)
|
|
37
33
|
cmdArgs.push('--description', flags.description);
|
|
38
|
-
if (flags.machine)
|
|
39
|
-
cmdArgs.push('--machine');
|
|
40
34
|
if (flags.json)
|
|
41
35
|
cmdArgs.push('--json');
|
|
42
36
|
await this.config.runCommand('phase:template:create', cmdArgs);
|
|
@@ -4,7 +4,6 @@ export default class TemplatePhase extends Command {
|
|
|
4
4
|
static aliases: string[];
|
|
5
5
|
static examples: string[];
|
|
6
6
|
static flags: {
|
|
7
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
7
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
8
|
};
|
|
10
9
|
run(): Promise<void>;
|
|
@@ -21,6 +21,8 @@ export default class TemplatePhaseUpdate extends Command {
|
|
|
21
21
|
description: 'New template description',
|
|
22
22
|
}),
|
|
23
23
|
json: Flags.boolean({
|
|
24
|
+
char: 'm',
|
|
25
|
+
aliases: ['machine'],
|
|
24
26
|
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
25
27
|
default: false,
|
|
26
28
|
}),
|
|
@@ -4,7 +4,6 @@ export default class TemplateTicket extends Command {
|
|
|
4
4
|
static aliases: string[];
|
|
5
5
|
static examples: string[];
|
|
6
6
|
static flags: {
|
|
7
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
7
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
8
|
};
|
|
10
9
|
run(): Promise<void>;
|
|
@@ -10,7 +10,6 @@ export default class TemplateTicketSave extends Command {
|
|
|
10
10
|
'template-name': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
11
|
description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
12
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
14
13
|
};
|
|
15
14
|
run(): Promise<void>;
|
|
16
15
|
}
|
|
@@ -27,10 +27,6 @@ export default class TemplateTicketSave extends Command {
|
|
|
27
27
|
char: 'd',
|
|
28
28
|
description: 'Template description',
|
|
29
29
|
}),
|
|
30
|
-
json: Flags.boolean({
|
|
31
|
-
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
32
|
-
default: false,
|
|
33
|
-
}),
|
|
34
30
|
};
|
|
35
31
|
async run() {
|
|
36
32
|
const { args, flags } = await this.parse(TemplateTicketSave);
|
|
@@ -45,8 +41,6 @@ export default class TemplateTicketSave extends Command {
|
|
|
45
41
|
cmdArgs.push('--description', flags.description);
|
|
46
42
|
if (flags.json)
|
|
47
43
|
cmdArgs.push('--json');
|
|
48
|
-
if (flags.machine)
|
|
49
|
-
cmdArgs.push('--machine');
|
|
50
44
|
await this.config.runCommand('ticket:template:save', cmdArgs);
|
|
51
45
|
}
|
|
52
46
|
}
|
|
@@ -7,7 +7,6 @@ export default class TerminalTitle extends Command {
|
|
|
7
7
|
title: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
8
8
|
};
|
|
9
9
|
static flags: {
|
|
10
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
10
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
11
|
reset: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
12
|
};
|
|
@@ -4,7 +4,6 @@ export default class TicketBulk extends PMOCommand {
|
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
6
6
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
7
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
8
|
};
|
|
10
9
|
protected getPMOOptions(): {
|
|
@@ -11,6 +11,8 @@ export default class TicketBulk extends PMOCommand {
|
|
|
11
11
|
static flags = {
|
|
12
12
|
...pmoBaseFlags,
|
|
13
13
|
json: Flags.boolean({
|
|
14
|
+
char: 'm',
|
|
15
|
+
aliases: ['machine'],
|
|
14
16
|
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
15
17
|
default: false,
|
|
16
18
|
}),
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { PMOCommand } from '../../lib/pmo/index.js';
|
|
2
|
+
export default class TicketCategory extends PMOCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static aliases: string[];
|
|
5
|
+
static examples: string[];
|
|
6
|
+
static flags: {
|
|
7
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
};
|
|
10
|
+
protected getPMOOptions(): {
|
|
11
|
+
promptIfMultiple: boolean;
|
|
12
|
+
};
|
|
13
|
+
execute(): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Flags } from '@oclif/core';
|
|
2
|
+
import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
|
|
3
|
+
import { shouldOutputJson } from '../../lib/prompt-json.js';
|
|
4
|
+
export default class TicketCategory extends PMOCommand {
|
|
5
|
+
static description = 'Manage ticket categories (feature, bug, refactor, etc.)';
|
|
6
|
+
static aliases = ['ticket:categories'];
|
|
7
|
+
static examples = [
|
|
8
|
+
'<%= config.bin %> <%= command.id %>',
|
|
9
|
+
'<%= config.bin %> <%= command.id %> list',
|
|
10
|
+
'<%= config.bin %> <%= command.id %> create spike',
|
|
11
|
+
'<%= config.bin %> <%= command.id %> rename spike investigation',
|
|
12
|
+
'<%= config.bin %> <%= command.id %> delete spike',
|
|
13
|
+
];
|
|
14
|
+
static flags = {
|
|
15
|
+
...pmoBaseFlags,
|
|
16
|
+
json: Flags.boolean({
|
|
17
|
+
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
18
|
+
default: false,
|
|
19
|
+
}),
|
|
20
|
+
};
|
|
21
|
+
getPMOOptions() {
|
|
22
|
+
return { promptIfMultiple: false };
|
|
23
|
+
}
|
|
24
|
+
async execute() {
|
|
25
|
+
const { flags } = await this.parse(TicketCategory);
|
|
26
|
+
// Check if JSON output mode is active
|
|
27
|
+
const jsonMode = shouldOutputJson(flags);
|
|
28
|
+
// Show the action menu for ticket categories
|
|
29
|
+
const menuChoices = [
|
|
30
|
+
{ id: 'list', name: 'List all ticket categories', command: 'prlt category list --type ticket' },
|
|
31
|
+
{ id: 'create', name: 'Create new ticket category', command: 'prlt category create --type ticket --json' },
|
|
32
|
+
{ id: 'rename', name: 'Rename ticket category', command: 'prlt category rename --type ticket --json' },
|
|
33
|
+
{ id: 'delete', name: 'Delete ticket category', command: 'prlt category delete --type ticket --json' },
|
|
34
|
+
{ id: 'cancel', name: 'Cancel', command: '' },
|
|
35
|
+
];
|
|
36
|
+
const action = await this.selectFromList({
|
|
37
|
+
message: '🏷️ Ticket Categories - What would you like to do?',
|
|
38
|
+
items: menuChoices,
|
|
39
|
+
getName: (c) => c.name,
|
|
40
|
+
getValue: (c) => c.id,
|
|
41
|
+
getCommand: (c) => c.command,
|
|
42
|
+
jsonMode: jsonMode ? { flags, commandName: 'ticket category' } : null,
|
|
43
|
+
});
|
|
44
|
+
if (action === 'cancel' || !action) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// Run the selected subcommand
|
|
48
|
+
switch (action) {
|
|
49
|
+
case 'list':
|
|
50
|
+
await this.config.runCommand('category:list', ['--type', 'ticket']);
|
|
51
|
+
break;
|
|
52
|
+
case 'create':
|
|
53
|
+
await this.config.runCommand('category:create', ['--type', 'ticket']);
|
|
54
|
+
break;
|
|
55
|
+
case 'rename':
|
|
56
|
+
await this.config.runCommand('category:rename', ['--type', 'ticket']);
|
|
57
|
+
break;
|
|
58
|
+
case 'delete':
|
|
59
|
+
await this.config.runCommand('category:delete', ['--type', 'ticket']);
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -9,7 +9,6 @@ export default class TicketComplete extends PMOCommand {
|
|
|
9
9
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
10
|
bulk: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
11
|
force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
12
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
13
|
};
|
|
15
14
|
execute(): Promise<void>;
|
|
@@ -18,6 +18,8 @@ export default class TicketComplete extends PMOCommand {
|
|
|
18
18
|
static flags = {
|
|
19
19
|
...pmoBaseFlags,
|
|
20
20
|
json: Flags.boolean({
|
|
21
|
+
char: 'm',
|
|
22
|
+
aliases: ['machine'],
|
|
21
23
|
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
22
24
|
default: false,
|
|
23
25
|
}),
|
|
@@ -14,7 +14,6 @@ export default class TicketCreate extends PMOCommand {
|
|
|
14
14
|
epic: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
15
|
template: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
16
|
labels: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
18
17
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
18
|
};
|
|
20
19
|
execute(): Promise<void>;
|
|
@@ -19,6 +19,8 @@ export default class TicketCreate extends PMOCommand {
|
|
|
19
19
|
static flags = {
|
|
20
20
|
...pmoBaseFlags,
|
|
21
21
|
json: Flags.boolean({
|
|
22
|
+
char: 'm',
|
|
23
|
+
aliases: ['machine'],
|
|
22
24
|
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
23
25
|
default: false,
|
|
24
26
|
}),
|
|
@@ -138,7 +140,7 @@ export default class TicketCreate extends PMOCommand {
|
|
|
138
140
|
type: 'input',
|
|
139
141
|
message: 'Enter ticket title:',
|
|
140
142
|
when: (ctx) => !ctx.flags.title && ctx.flags.column !== undefined,
|
|
141
|
-
validate: (value) => value.
|
|
143
|
+
validate: (value) => value.trim() ? true : 'Title cannot be empty',
|
|
142
144
|
context: (ctx) => ({
|
|
143
145
|
hint: `Provide title with: ${ctx.baseCommand}${ctx.projectId ? ` -P ${ctx.projectId}` : ''} --column "${ctx.flags.column}" --title "Your title here"`,
|
|
144
146
|
requiredFields: ['--title'],
|
|
@@ -261,7 +263,7 @@ export default class TicketCreate extends PMOCommand {
|
|
|
261
263
|
name: 'title',
|
|
262
264
|
message: 'Ticket title:',
|
|
263
265
|
default: flags.title || template?.titlePattern,
|
|
264
|
-
validate: (input) => input.
|
|
266
|
+
validate: (input) => input.trim() ? true : 'Title cannot be empty',
|
|
265
267
|
},
|
|
266
268
|
{
|
|
267
269
|
type: 'list',
|
|
@@ -316,7 +318,7 @@ export default class TicketCreate extends PMOCommand {
|
|
|
316
318
|
name: 'customCategory',
|
|
317
319
|
message: 'Enter custom category:',
|
|
318
320
|
when: (answers) => answers.categoryChoice === '__custom__',
|
|
319
|
-
validate: (input) => input.
|
|
321
|
+
validate: (input) => input.trim() ? true : 'Category cannot be empty',
|
|
320
322
|
},
|
|
321
323
|
]);
|
|
322
324
|
// Resolve category from choice or custom input
|
|
@@ -351,7 +353,7 @@ export default class TicketCreate extends PMOCommand {
|
|
|
351
353
|
type: 'input',
|
|
352
354
|
name: 'what',
|
|
353
355
|
message: 'What is the concrete outcome? (one sentence):',
|
|
354
|
-
validate: (input) => input.
|
|
356
|
+
validate: (input) => input.trim() ? true : 'Outcome cannot be empty - what does success look like?',
|
|
355
357
|
},
|
|
356
358
|
{
|
|
357
359
|
type: 'input',
|