@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
|
@@ -16,7 +16,7 @@ export default class WorkReady extends PMOCommand {
|
|
|
16
16
|
'<%= config.bin %> <%= command.id %>',
|
|
17
17
|
'<%= config.bin %> <%= command.id %> TKT-001',
|
|
18
18
|
'<%= config.bin %> <%= command.id %> --pr',
|
|
19
|
-
'<%= config.bin %> <%= command.id %> TKT-001 --pr
|
|
19
|
+
'<%= config.bin %> <%= command.id %> TKT-001 --draft-pr',
|
|
20
20
|
'<%= config.bin %> <%= command.id %> --json # Output choices as JSON',
|
|
21
21
|
];
|
|
22
22
|
static args = {
|
|
@@ -28,6 +28,8 @@ export default class WorkReady extends PMOCommand {
|
|
|
28
28
|
static flags = {
|
|
29
29
|
...pmoBaseFlags,
|
|
30
30
|
json: Flags.boolean({
|
|
31
|
+
char: 'm',
|
|
32
|
+
aliases: ['machine'],
|
|
31
33
|
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
32
34
|
default: false,
|
|
33
35
|
}),
|
|
@@ -35,8 +37,8 @@ export default class WorkReady extends PMOCommand {
|
|
|
35
37
|
description: 'Create a pull request for this work',
|
|
36
38
|
default: false,
|
|
37
39
|
}),
|
|
38
|
-
draft: Flags.boolean({
|
|
39
|
-
description: 'Create
|
|
40
|
+
'draft-pr': Flags.boolean({
|
|
41
|
+
description: 'Create a draft pull request (implies --pr)',
|
|
40
42
|
default: false,
|
|
41
43
|
}),
|
|
42
44
|
'no-pr': Flags.boolean({
|
|
@@ -47,6 +49,10 @@ export default class WorkReady extends PMOCommand {
|
|
|
47
49
|
async execute() {
|
|
48
50
|
const { args, flags } = await this.parse(WorkReady);
|
|
49
51
|
const projectId = flags.project;
|
|
52
|
+
// Check for conflicting PR flags
|
|
53
|
+
if (flags.pr && flags['no-pr']) {
|
|
54
|
+
this.error('--pr and --no-pr are mutually exclusive');
|
|
55
|
+
}
|
|
50
56
|
// Check if JSON output mode is active
|
|
51
57
|
const jsonMode = shouldOutputJson(flags);
|
|
52
58
|
// Helper to handle errors in JSON mode
|
|
@@ -128,7 +134,7 @@ export default class WorkReady extends PMOCommand {
|
|
|
128
134
|
}
|
|
129
135
|
// Handle PR creation
|
|
130
136
|
let prUrl;
|
|
131
|
-
const shouldCreatePR = flags.pr || (!flags['no-pr'] && await this.shouldOfferPRCreation());
|
|
137
|
+
const shouldCreatePR = flags.pr || flags['draft-pr'] || (!flags['no-pr'] && await this.shouldOfferPRCreation());
|
|
132
138
|
if (shouldCreatePR) {
|
|
133
139
|
// Get branch and worktree path from the execution record
|
|
134
140
|
const branch = runningExecution?.branch;
|
|
@@ -157,7 +163,7 @@ export default class WorkReady extends PMOCommand {
|
|
|
157
163
|
}
|
|
158
164
|
}
|
|
159
165
|
}
|
|
160
|
-
prUrl = await this.handlePRCreation(ticket, flags
|
|
166
|
+
prUrl = await this.handlePRCreation(ticket, flags['draft-pr'], branch, worktreePath);
|
|
161
167
|
if (prUrl) {
|
|
162
168
|
// Store PR URL in ticket metadata
|
|
163
169
|
await this.storage.updateTicket(ticketId, {
|
|
@@ -12,7 +12,6 @@ export default class WorkRevise extends PMOCommand {
|
|
|
12
12
|
force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
13
|
'run-on-host': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
14
14
|
session: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
15
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
16
|
};
|
|
18
17
|
execute(): Promise<void>;
|
|
@@ -32,11 +32,13 @@ export default class WorkRevise extends PMOCommand {
|
|
|
32
32
|
static flags = {
|
|
33
33
|
...pmoBaseFlags,
|
|
34
34
|
json: Flags.boolean({
|
|
35
|
+
char: 'm',
|
|
36
|
+
aliases: ['machine'],
|
|
35
37
|
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
36
38
|
default: false,
|
|
37
39
|
}),
|
|
38
40
|
mode: Flags.string({
|
|
39
|
-
char: '
|
|
41
|
+
char: 'd',
|
|
40
42
|
description: 'Runtime mode',
|
|
41
43
|
options: ['foreground', 'background', 'tmux', 'terminal', 'devcontainer'],
|
|
42
44
|
}),
|
|
@@ -9,7 +9,6 @@ export default class WorkSpawnAll extends PMOCommand {
|
|
|
9
9
|
'skip-permissions': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
10
|
'create-pr': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
11
|
executor: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
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
|
protected getPMOOptions(): {
|
|
@@ -11,6 +11,8 @@ export default class WorkSpawnAll 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
|
}),
|
|
@@ -25,7 +25,6 @@ export default class WorkSpawn extends PMOCommand {
|
|
|
25
25
|
session: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
26
26
|
focus: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
27
27
|
clone: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
28
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
29
28
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
30
29
|
};
|
|
31
30
|
execute(): Promise<void>;
|
|
@@ -23,6 +23,8 @@ export default class WorkSpawn extends PMOCommand {
|
|
|
23
23
|
static flags = {
|
|
24
24
|
...pmoBaseFlags,
|
|
25
25
|
json: Flags.boolean({
|
|
26
|
+
char: 'm',
|
|
27
|
+
aliases: ['machine'],
|
|
26
28
|
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
27
29
|
default: false,
|
|
28
30
|
}),
|
|
@@ -27,7 +27,6 @@ export default class WorkStart extends PMOCommand {
|
|
|
27
27
|
ephemeral: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
28
28
|
focus: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
29
29
|
clone: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
30
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
31
30
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
32
31
|
};
|
|
33
32
|
execute(): Promise<void>;
|
|
@@ -86,6 +86,8 @@ export default class WorkStart extends PMOCommand {
|
|
|
86
86
|
static flags = {
|
|
87
87
|
...pmoBaseFlags,
|
|
88
88
|
json: Flags.boolean({
|
|
89
|
+
char: 'm',
|
|
90
|
+
aliases: ['machine'],
|
|
89
91
|
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
90
92
|
default: false,
|
|
91
93
|
}),
|
|
@@ -179,6 +181,10 @@ export default class WorkStart extends PMOCommand {
|
|
|
179
181
|
async execute() {
|
|
180
182
|
const { args, flags } = await this.parse(WorkStart);
|
|
181
183
|
const projectId = flags.project;
|
|
184
|
+
// Check for conflicting PR flags
|
|
185
|
+
if (flags['create-pr'] && flags['no-pr']) {
|
|
186
|
+
this.error('--create-pr and --no-pr are mutually exclusive');
|
|
187
|
+
}
|
|
182
188
|
// Handle --skip-permissions flag (alias for --permission-mode danger)
|
|
183
189
|
// Check for conflicting flags first
|
|
184
190
|
if (flags['skip-permissions'] && flags['permission-mode']) {
|
|
@@ -13,7 +13,6 @@ export default class WorkWatch extends PMOCommand {
|
|
|
13
13
|
mode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
14
|
'skip-permissions': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
15
15
|
'create-pr': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
17
16
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
17
|
};
|
|
19
18
|
private isRunning;
|
|
@@ -22,6 +22,8 @@ export default class WorkWatch extends PMOCommand {
|
|
|
22
22
|
static flags = {
|
|
23
23
|
...pmoBaseFlags,
|
|
24
24
|
json: Flags.boolean({
|
|
25
|
+
char: 'm',
|
|
26
|
+
aliases: ['machine'],
|
|
25
27
|
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
26
28
|
default: false,
|
|
27
29
|
}),
|
|
@@ -55,7 +57,7 @@ export default class WorkWatch extends PMOCommand {
|
|
|
55
57
|
default: false,
|
|
56
58
|
}),
|
|
57
59
|
mode: Flags.string({
|
|
58
|
-
char: '
|
|
60
|
+
char: 'd',
|
|
59
61
|
description: 'Display mode for agent output',
|
|
60
62
|
options: ['terminal', 'background'],
|
|
61
63
|
}),
|
|
@@ -8,7 +8,6 @@ export default class WorkflowCreate extends PMOCommand {
|
|
|
8
8
|
static flags: {
|
|
9
9
|
description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
10
|
statuses: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
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
|
};
|
|
@@ -7,7 +7,6 @@ export default class WorkflowDelete 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
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
12
|
};
|
|
@@ -6,7 +6,6 @@ export default class Workflow extends PMOCommand {
|
|
|
6
6
|
builtin: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
7
|
custom: 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(): {
|
|
@@ -5,7 +5,6 @@ export default class WorkflowList extends PMOCommand {
|
|
|
5
5
|
static flags: {
|
|
6
6
|
builtin: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
7
|
custom: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
8
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
9
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
10
|
};
|
|
@@ -7,7 +7,6 @@ export default class WorkflowSwitch 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
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
12
|
};
|
|
@@ -6,7 +6,6 @@ export default class WorkflowView extends PMOCommand {
|
|
|
6
6
|
id: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
7
7
|
};
|
|
8
8
|
static flags: {
|
|
9
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
9
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
10
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
11
|
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class WorkspacePrune extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
};
|
|
9
|
+
run(): Promise<void>;
|
|
10
|
+
private findStaleWorkspaces;
|
|
11
|
+
private findStaleAgents;
|
|
12
|
+
private performPrune;
|
|
13
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { Command, Flags } from '@oclif/core';
|
|
2
|
+
import * as fs from 'node:fs';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import { styles } from '../../lib/styles.js';
|
|
5
|
+
import { getRegisteredHeadquarters, unregisterHeadquarters, } from '../../lib/machine-config.js';
|
|
6
|
+
import { getWorkspaceAgents, removeAgentsFromDatabase, getDatabasePath, } from '../../lib/database/index.js';
|
|
7
|
+
export default class WorkspacePrune extends Command {
|
|
8
|
+
static description = 'Remove stale workspace entries and agents with deleted worktrees';
|
|
9
|
+
static examples = [
|
|
10
|
+
'<%= config.bin %> <%= command.id %> --dry-run',
|
|
11
|
+
'<%= config.bin %> <%= command.id %>',
|
|
12
|
+
];
|
|
13
|
+
static flags = {
|
|
14
|
+
'dry-run': Flags.boolean({
|
|
15
|
+
char: 'd',
|
|
16
|
+
description: 'Show what would be removed without removing',
|
|
17
|
+
default: false,
|
|
18
|
+
}),
|
|
19
|
+
json: Flags.boolean({
|
|
20
|
+
description: 'Output as JSON',
|
|
21
|
+
default: false,
|
|
22
|
+
}),
|
|
23
|
+
};
|
|
24
|
+
async run() {
|
|
25
|
+
const { flags } = await this.parse(WorkspacePrune);
|
|
26
|
+
// Find stale entries
|
|
27
|
+
const staleWorkspaces = this.findStaleWorkspaces();
|
|
28
|
+
const staleAgents = this.findStaleAgents();
|
|
29
|
+
const totalStale = staleWorkspaces.length + staleAgents.length;
|
|
30
|
+
// JSON output
|
|
31
|
+
if (flags.json) {
|
|
32
|
+
const output = {
|
|
33
|
+
dryRun: flags['dry-run'],
|
|
34
|
+
staleWorkspaces: staleWorkspaces.map(w => ({
|
|
35
|
+
name: w.name,
|
|
36
|
+
path: w.path,
|
|
37
|
+
})),
|
|
38
|
+
staleAgents: staleAgents.map(a => ({
|
|
39
|
+
workspaceName: a.workspaceName,
|
|
40
|
+
agentName: a.agentName,
|
|
41
|
+
expectedPath: a.expectedPath,
|
|
42
|
+
})),
|
|
43
|
+
totalRemoved: flags['dry-run'] ? 0 : totalStale,
|
|
44
|
+
totalFound: totalStale,
|
|
45
|
+
};
|
|
46
|
+
this.log(JSON.stringify(output, null, 2));
|
|
47
|
+
if (!flags['dry-run'] && totalStale > 0) {
|
|
48
|
+
this.performPrune(staleWorkspaces, staleAgents);
|
|
49
|
+
}
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
// Human-readable output
|
|
53
|
+
this.log(`\n${styles.header('Workspace Prune')}`);
|
|
54
|
+
this.log('─'.repeat(50));
|
|
55
|
+
if (totalStale === 0) {
|
|
56
|
+
this.log(styles.success('\nNo stale entries found.'));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// Show stale workspaces
|
|
60
|
+
if (staleWorkspaces.length > 0) {
|
|
61
|
+
this.log(styles.subheader('\nStale workspace registrations:'));
|
|
62
|
+
for (const workspace of staleWorkspaces) {
|
|
63
|
+
this.log(` ${styles.removed('×')} ${styles.emphasis(workspace.name)}`);
|
|
64
|
+
this.log(styles.muted(` Path no longer exists: ${workspace.path}`));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Show stale agents
|
|
68
|
+
if (staleAgents.length > 0) {
|
|
69
|
+
this.log(styles.subheader('\nAgents with deleted worktrees:'));
|
|
70
|
+
// Group by workspace for cleaner output
|
|
71
|
+
const agentsByWorkspace = new Map();
|
|
72
|
+
for (const agent of staleAgents) {
|
|
73
|
+
const list = agentsByWorkspace.get(agent.workspaceName) || [];
|
|
74
|
+
list.push(agent);
|
|
75
|
+
agentsByWorkspace.set(agent.workspaceName, list);
|
|
76
|
+
}
|
|
77
|
+
for (const [workspaceName, agents] of agentsByWorkspace) {
|
|
78
|
+
this.log(` ${styles.muted(`In ${workspaceName}:`)}`);
|
|
79
|
+
for (const agent of agents) {
|
|
80
|
+
this.log(` ${styles.removed('×')} ${agent.agentName}`);
|
|
81
|
+
this.log(styles.muted(` Expected: ${agent.expectedPath}`));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Summary
|
|
86
|
+
this.log('');
|
|
87
|
+
if (flags['dry-run']) {
|
|
88
|
+
this.log(styles.warning(`[DRY RUN] Would remove:`));
|
|
89
|
+
if (staleWorkspaces.length > 0) {
|
|
90
|
+
this.log(styles.muted(` • ${staleWorkspaces.length} workspace registration(s)`));
|
|
91
|
+
}
|
|
92
|
+
if (staleAgents.length > 0) {
|
|
93
|
+
this.log(styles.muted(` • ${staleAgents.length} agent record(s)`));
|
|
94
|
+
}
|
|
95
|
+
this.log('');
|
|
96
|
+
this.log(styles.muted('Run without --dry-run to remove these entries.'));
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
// Perform the actual prune
|
|
100
|
+
this.performPrune(staleWorkspaces, staleAgents);
|
|
101
|
+
this.log(styles.success('Pruned:'));
|
|
102
|
+
if (staleWorkspaces.length > 0) {
|
|
103
|
+
this.log(styles.muted(` • ${staleWorkspaces.length} workspace registration(s)`));
|
|
104
|
+
}
|
|
105
|
+
if (staleAgents.length > 0) {
|
|
106
|
+
this.log(styles.muted(` • ${staleAgents.length} agent record(s)`));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
this.log('');
|
|
110
|
+
}
|
|
111
|
+
findStaleWorkspaces() {
|
|
112
|
+
const workspaces = getRegisteredHeadquarters();
|
|
113
|
+
const stale = [];
|
|
114
|
+
for (const workspace of workspaces) {
|
|
115
|
+
if (!fs.existsSync(workspace.path)) {
|
|
116
|
+
stale.push({
|
|
117
|
+
name: workspace.name,
|
|
118
|
+
path: workspace.path,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return stale;
|
|
123
|
+
}
|
|
124
|
+
findStaleAgents() {
|
|
125
|
+
const workspaces = getRegisteredHeadquarters();
|
|
126
|
+
const stale = [];
|
|
127
|
+
for (const workspace of workspaces) {
|
|
128
|
+
// Skip workspaces that don't exist (handled separately)
|
|
129
|
+
if (!fs.existsSync(workspace.path)) {
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
// Skip workspaces without a database
|
|
133
|
+
const dbPath = getDatabasePath(workspace.path);
|
|
134
|
+
if (!fs.existsSync(dbPath)) {
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
try {
|
|
138
|
+
// Get active agents in this workspace
|
|
139
|
+
const agents = getWorkspaceAgents(workspace.path, false);
|
|
140
|
+
for (const agent of agents) {
|
|
141
|
+
// Determine expected directory path
|
|
142
|
+
let agentDir;
|
|
143
|
+
if (agent.worktree_path) {
|
|
144
|
+
agentDir = path.join(workspace.path, agent.worktree_path);
|
|
145
|
+
}
|
|
146
|
+
else if (agent.type === 'ephemeral') {
|
|
147
|
+
agentDir = path.join(workspace.path, 'agents', 'temp', agent.name);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
agentDir = path.join(workspace.path, 'agents', 'staff', agent.name);
|
|
151
|
+
}
|
|
152
|
+
// If directory doesn't exist, mark as stale
|
|
153
|
+
if (!fs.existsSync(agentDir)) {
|
|
154
|
+
stale.push({
|
|
155
|
+
workspacePath: workspace.path,
|
|
156
|
+
workspaceName: workspace.name,
|
|
157
|
+
agentName: agent.name,
|
|
158
|
+
expectedPath: agentDir,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// Skip workspaces where we can't read agents (e.g., database issues)
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return stale;
|
|
169
|
+
}
|
|
170
|
+
performPrune(staleWorkspaces, staleAgents) {
|
|
171
|
+
// Remove stale workspace registrations
|
|
172
|
+
for (const workspace of staleWorkspaces) {
|
|
173
|
+
unregisterHeadquarters(workspace.path);
|
|
174
|
+
}
|
|
175
|
+
// Remove stale agents, grouped by workspace
|
|
176
|
+
const agentsByWorkspace = new Map();
|
|
177
|
+
for (const agent of staleAgents) {
|
|
178
|
+
const list = agentsByWorkspace.get(agent.workspacePath) || [];
|
|
179
|
+
list.push(agent.agentName);
|
|
180
|
+
agentsByWorkspace.set(agent.workspacePath, list);
|
|
181
|
+
}
|
|
182
|
+
for (const [workspacePath, agentNames] of agentsByWorkspace) {
|
|
183
|
+
removeAgentsFromDatabase(workspacePath, agentNames);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
@@ -2,7 +2,7 @@ import { type PMOContext } from './pmo-context.js';
|
|
|
2
2
|
import { PromptCommand } from '../prompt-command.js';
|
|
3
3
|
import { type JsonFlags } from '../prompt-json.js';
|
|
4
4
|
/**
|
|
5
|
-
* Base flags for JSON/agent mode support
|
|
5
|
+
* Base flags for JSON/agent mode support
|
|
6
6
|
* Include these in your command's flags by spreading: ...jsonModeFlags
|
|
7
7
|
* @deprecated Use machineOutputFlags instead
|
|
8
8
|
*/
|
|
@@ -12,10 +12,9 @@ export declare const jsonModeFlags: {
|
|
|
12
12
|
/**
|
|
13
13
|
* Base flags for machine-readable output mode
|
|
14
14
|
* Include these in your command's flags by spreading: ...machineOutputFlags
|
|
15
|
-
*
|
|
15
|
+
* --json is the primary flag, -m/--machine are aliases
|
|
16
16
|
*/
|
|
17
17
|
export declare const machineOutputFlags: {
|
|
18
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
19
18
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
20
19
|
};
|
|
21
20
|
/**
|
|
@@ -23,7 +22,6 @@ export declare const machineOutputFlags: {
|
|
|
23
22
|
* Include these in your command's flags by spreading: ...pmoBaseFlags
|
|
24
23
|
*/
|
|
25
24
|
export declare const pmoBaseFlags: {
|
|
26
|
-
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
27
25
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
28
26
|
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
29
27
|
};
|
|
@@ -5,31 +5,29 @@ import { styles } from '../styles.js';
|
|
|
5
5
|
import { PromptCommand } from '../prompt-command.js';
|
|
6
6
|
import { shouldOutputJson, outputPromptAsJson, outputErrorAsJson, createMetadata, } from '../prompt-json.js';
|
|
7
7
|
/**
|
|
8
|
-
* Base flags for JSON/agent mode support
|
|
8
|
+
* Base flags for JSON/agent mode support
|
|
9
9
|
* Include these in your command's flags by spreading: ...jsonModeFlags
|
|
10
10
|
* @deprecated Use machineOutputFlags instead
|
|
11
11
|
*/
|
|
12
12
|
export const jsonModeFlags = {
|
|
13
13
|
json: Flags.boolean({
|
|
14
|
-
|
|
14
|
+
char: 'm',
|
|
15
|
+
aliases: ['machine'],
|
|
16
|
+
description: 'Output as JSON for AI agents/scripts',
|
|
15
17
|
default: false,
|
|
16
18
|
}),
|
|
17
19
|
};
|
|
18
20
|
/**
|
|
19
21
|
* Base flags for machine-readable output mode
|
|
20
22
|
* Include these in your command's flags by spreading: ...machineOutputFlags
|
|
21
|
-
*
|
|
23
|
+
* --json is the primary flag, -m/--machine are aliases
|
|
22
24
|
*/
|
|
23
25
|
export const machineOutputFlags = {
|
|
24
|
-
machine: Flags.boolean({
|
|
25
|
-
char: 'm',
|
|
26
|
-
description: 'Output as JSON for AI agents/scripts (machine-readable mode)',
|
|
27
|
-
default: false,
|
|
28
|
-
}),
|
|
29
26
|
json: Flags.boolean({
|
|
30
|
-
|
|
27
|
+
char: 'm',
|
|
28
|
+
aliases: ['machine'],
|
|
29
|
+
description: 'Output as JSON for AI agents/scripts',
|
|
31
30
|
default: false,
|
|
32
|
-
hidden: true, // Hide from help since it's deprecated
|
|
33
31
|
}),
|
|
34
32
|
};
|
|
35
33
|
/**
|
package/dist/lib/pmo/schema.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export declare const PMO_TABLES: {
|
|
|
8
8
|
readonly projects: "pmo_projects";
|
|
9
9
|
readonly initiatives: "pmo_initiatives";
|
|
10
10
|
readonly tickets: "pmo_tickets";
|
|
11
|
+
readonly categories: "pmo_categories";
|
|
11
12
|
readonly board_views: "pmo_board_views";
|
|
12
13
|
readonly subtasks: "pmo_subtasks";
|
|
13
14
|
readonly ticket_metadata: "pmo_ticket_metadata";
|
|
@@ -41,6 +42,7 @@ export declare const PMO_TABLES: {
|
|
|
41
42
|
export declare const PMO_TABLE_SCHEMAS: {
|
|
42
43
|
readonly projects: "\n CREATE TABLE IF NOT EXISTS pmo_projects (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n template TEXT,\n description TEXT,\n status TEXT NOT NULL DEFAULT 'active',\n phase_id TEXT,\n workflow_id TEXT,\n is_archived INTEGER NOT NULL DEFAULT 0,\n target_date TIMESTAMP,\n initiative_id TEXT,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (phase_id) REFERENCES pmo_phases(id) ON DELETE SET NULL,\n FOREIGN KEY (workflow_id) REFERENCES pmo_workflows(id) ON DELETE SET NULL\n )";
|
|
43
44
|
readonly initiatives: "\n CREATE TABLE IF NOT EXISTS pmo_initiatives (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n objective TEXT,\n key_results TEXT,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n )";
|
|
45
|
+
readonly categories: "\n CREATE TABLE IF NOT EXISTS pmo_categories (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n type TEXT NOT NULL CHECK (type IN ('ticket', 'status')),\n description TEXT,\n color TEXT,\n position INTEGER NOT NULL DEFAULT 0,\n is_builtin INTEGER NOT NULL DEFAULT 0,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n UNIQUE(name, type)\n )";
|
|
44
46
|
readonly workflows: "\n CREATE TABLE IF NOT EXISTS pmo_workflows (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL UNIQUE,\n description TEXT,\n is_builtin INTEGER NOT NULL DEFAULT 0,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n )";
|
|
45
47
|
readonly workflow_statuses: "\n CREATE TABLE IF NOT EXISTS pmo_workflow_statuses (\n id TEXT PRIMARY KEY,\n workflow_id TEXT NOT NULL,\n name TEXT NOT NULL,\n category TEXT NOT NULL,\n position INTEGER NOT NULL DEFAULT 0,\n color TEXT,\n description TEXT,\n is_default INTEGER NOT NULL DEFAULT 0,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (workflow_id) REFERENCES pmo_workflows(id) ON DELETE CASCADE,\n UNIQUE(workflow_id, name)\n )";
|
|
46
48
|
readonly columns: "\n CREATE TABLE IF NOT EXISTS pmo_columns (\n id TEXT NOT NULL,\n project_id TEXT NOT NULL DEFAULT 'default',\n name TEXT NOT NULL,\n position INTEGER NOT NULL,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n PRIMARY KEY (project_id, id)\n )";
|
package/dist/lib/pmo/schema.js
CHANGED
|
@@ -11,6 +11,7 @@ export const PMO_TABLES = {
|
|
|
11
11
|
projects: 'pmo_projects',
|
|
12
12
|
initiatives: 'pmo_initiatives',
|
|
13
13
|
tickets: 'pmo_tickets',
|
|
14
|
+
categories: 'pmo_categories',
|
|
14
15
|
board_views: 'pmo_board_views', // Saved board view configurations
|
|
15
16
|
subtasks: 'pmo_subtasks',
|
|
16
17
|
ticket_metadata: 'pmo_ticket_metadata',
|
|
@@ -75,6 +76,19 @@ export const PMO_TABLE_SCHEMAS = {
|
|
|
75
76
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
76
77
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
77
78
|
)`,
|
|
79
|
+
// Categories for tickets and status types
|
|
80
|
+
categories: `
|
|
81
|
+
CREATE TABLE IF NOT EXISTS ${PMO_TABLES.categories} (
|
|
82
|
+
id TEXT PRIMARY KEY,
|
|
83
|
+
name TEXT NOT NULL,
|
|
84
|
+
type TEXT NOT NULL CHECK (type IN ('ticket', 'status')),
|
|
85
|
+
description TEXT,
|
|
86
|
+
color TEXT,
|
|
87
|
+
position INTEGER NOT NULL DEFAULT 0,
|
|
88
|
+
is_builtin INTEGER NOT NULL DEFAULT 0,
|
|
89
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
90
|
+
UNIQUE(name, type)
|
|
91
|
+
)`,
|
|
78
92
|
// Shared workflow definitions - projects reference these via workflow_id
|
|
79
93
|
workflows: `
|
|
80
94
|
CREATE TABLE IF NOT EXISTS ${PMO_TABLES.workflows} (
|
|
@@ -484,6 +498,8 @@ export const PMO_INDEXES = `
|
|
|
484
498
|
CREATE INDEX IF NOT EXISTS idx_pmo_roadmap_projects_roadmap ON ${PMO_TABLES.roadmap_projects}(roadmap_id);
|
|
485
499
|
CREATE INDEX IF NOT EXISTS idx_pmo_roadmap_projects_project ON ${PMO_TABLES.roadmap_projects}(project_id);
|
|
486
500
|
CREATE INDEX IF NOT EXISTS idx_pmo_roadmap_projects_position ON ${PMO_TABLES.roadmap_projects}(roadmap_id, position);
|
|
501
|
+
CREATE INDEX IF NOT EXISTS idx_pmo_categories_type ON ${PMO_TABLES.categories}(type);
|
|
502
|
+
CREATE INDEX IF NOT EXISTS idx_pmo_categories_position ON ${PMO_TABLES.categories}(type, position);
|
|
487
503
|
`;
|
|
488
504
|
// =============================================================================
|
|
489
505
|
// Combined Schema
|
|
@@ -499,6 +515,7 @@ export const PMO_SCHEMA_SQL = [
|
|
|
499
515
|
PMO_TABLE_SCHEMAS.workflow_statuses, // Workflow statuses (= board columns)
|
|
500
516
|
PMO_TABLE_SCHEMAS.projects,
|
|
501
517
|
PMO_TABLE_SCHEMAS.initiatives,
|
|
518
|
+
PMO_TABLE_SCHEMAS.categories, // Ticket and status categories
|
|
502
519
|
// PMO_TABLE_SCHEMAS.templates, // REMOVED: workflows are now used directly
|
|
503
520
|
PMO_TABLE_SCHEMAS.specs, // Must be before tickets (FK reference)
|
|
504
521
|
PMO_TABLE_SCHEMAS.spec_dependencies, // Spec-to-spec dependencies
|
|
@@ -33,6 +33,10 @@ export declare function seedBuiltinActions(db: Database.Database): void;
|
|
|
33
33
|
* Seed built-in ticket templates.
|
|
34
34
|
*/
|
|
35
35
|
export declare function seedBuiltinTicketTemplates(db: Database.Database): void;
|
|
36
|
+
/**
|
|
37
|
+
* Seed built-in categories from TICKET_CATEGORIES and STATE_CATEGORY_ORDER.
|
|
38
|
+
*/
|
|
39
|
+
export declare function seedBuiltinCategories(db: Database.Database): void;
|
|
36
40
|
/**
|
|
37
41
|
* Update board timestamp for a project.
|
|
38
42
|
*/
|