@proletariat/cli 0.1.4 → 0.3.0
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/README.md +510 -255
- package/bin/dev.cmd +3 -0
- package/bin/dev.js +5 -0
- package/bin/run.cmd +3 -0
- package/bin/run.js +23 -0
- package/dist/commands/action/create.d.ts +21 -0
- package/dist/commands/action/create.js +126 -0
- package/dist/commands/action/delete.d.ts +17 -0
- package/dist/commands/action/delete.js +78 -0
- package/dist/commands/action/index.d.ts +15 -0
- package/dist/commands/action/index.js +107 -0
- package/dist/commands/action/list.d.ts +14 -0
- package/dist/commands/action/list.js +89 -0
- package/dist/commands/action/run.d.ts +19 -0
- package/dist/commands/action/run.js +179 -0
- package/dist/commands/action/show.d.ts +15 -0
- package/dist/commands/action/show.js +47 -0
- package/dist/commands/action/update.d.ts +22 -0
- package/dist/commands/action/update.js +168 -0
- package/dist/commands/agent/index.d.ts +13 -0
- package/dist/commands/agent/index.js +131 -0
- package/dist/commands/agent/list.d.ts +7 -0
- package/dist/commands/agent/list.js +126 -0
- package/dist/commands/agent/login.d.ts +16 -0
- package/dist/commands/agent/login.js +146 -0
- package/dist/commands/agent/rebuild.d.ts +18 -0
- package/dist/commands/agent/rebuild.js +133 -0
- package/dist/commands/agent/restart.d.ts +17 -0
- package/dist/commands/agent/restart.js +116 -0
- package/dist/commands/agent/shell.d.ts +23 -0
- package/dist/commands/agent/shell.js +378 -0
- package/dist/commands/agent/staff/add.d.ts +15 -0
- package/dist/commands/agent/staff/add.js +281 -0
- package/dist/commands/agent/staff/index.d.ts +14 -0
- package/dist/commands/agent/staff/index.js +90 -0
- package/dist/commands/agent/staff/list.d.ts +7 -0
- package/dist/commands/agent/staff/list.js +90 -0
- package/dist/commands/agent/staff/remove.d.ts +16 -0
- package/dist/commands/agent/staff/remove.js +137 -0
- package/dist/commands/agent/status.d.ts +17 -0
- package/dist/commands/agent/status.js +139 -0
- package/dist/commands/agent/temp/cleanup.d.ts +23 -0
- package/dist/commands/agent/temp/cleanup.js +388 -0
- package/dist/commands/agent/temp/index.d.ts +14 -0
- package/dist/commands/agent/temp/index.js +82 -0
- package/dist/commands/agent/temp/list.d.ts +7 -0
- package/dist/commands/agent/temp/list.js +108 -0
- package/dist/commands/agent/themes/add-names.d.ts +10 -0
- package/dist/commands/agent/themes/add-names.js +67 -0
- package/dist/commands/agent/themes/create.d.ts +13 -0
- package/dist/commands/agent/themes/create.js +66 -0
- package/dist/commands/agent/themes/index.d.ts +9 -0
- package/dist/commands/agent/themes/index.js +194 -0
- package/dist/commands/agent/themes/list.d.ts +6 -0
- package/dist/commands/agent/themes/list.js +41 -0
- package/dist/commands/agent/themes/set.d.ts +12 -0
- package/dist/commands/agent/themes/set.js +77 -0
- package/dist/commands/agent/visit.d.ts +16 -0
- package/dist/commands/agent/visit.js +88 -0
- package/dist/commands/autocomplete/setup.d.ts +14 -0
- package/dist/commands/autocomplete/setup.js +154 -0
- package/dist/commands/board/index.d.ts +17 -0
- package/dist/commands/board/index.js +255 -0
- package/dist/commands/board/watch.d.ts +13 -0
- package/dist/commands/board/watch.js +52 -0
- package/dist/commands/branch/create.d.ts +50 -0
- package/dist/commands/branch/create.js +624 -0
- package/dist/commands/branch/index.d.ts +13 -0
- package/dist/commands/branch/index.js +50 -0
- package/dist/commands/branch/list.d.ts +17 -0
- package/dist/commands/branch/list.js +120 -0
- package/dist/commands/branch/validate.d.ts +15 -0
- package/dist/commands/branch/validate.js +73 -0
- package/dist/commands/commit.d.ts +71 -0
- package/dist/commands/commit.js +499 -0
- package/dist/commands/docker/clean.d.ts +13 -0
- package/dist/commands/docker/clean.js +224 -0
- package/dist/commands/docker/index.d.ts +19 -0
- package/dist/commands/docker/index.js +274 -0
- package/dist/commands/docker/list.d.ts +16 -0
- package/dist/commands/docker/list.js +200 -0
- package/dist/commands/docker/logs.d.ts +14 -0
- package/dist/commands/docker/logs.js +118 -0
- package/dist/commands/docker/prune.d.ts +14 -0
- package/dist/commands/docker/prune.js +211 -0
- package/dist/commands/docker/restart.d.ts +14 -0
- package/dist/commands/docker/restart.js +129 -0
- package/dist/commands/docker/shell.d.ts +14 -0
- package/dist/commands/docker/shell.js +103 -0
- package/dist/commands/docker/start.d.ts +12 -0
- package/dist/commands/docker/start.js +92 -0
- package/dist/commands/docker/status.d.ts +7 -0
- package/dist/commands/docker/status.js +40 -0
- package/dist/commands/docker/stop.d.ts +14 -0
- package/dist/commands/docker/stop.js +134 -0
- package/dist/commands/docker/sync.d.ts +15 -0
- package/dist/commands/docker/sync.js +112 -0
- package/dist/commands/epic/activate.d.ts +13 -0
- package/dist/commands/epic/activate.js +118 -0
- package/dist/commands/epic/archive.d.ts +14 -0
- package/dist/commands/epic/archive.js +132 -0
- package/dist/commands/epic/create.d.ts +15 -0
- package/dist/commands/epic/create.js +137 -0
- package/dist/commands/epic/index.d.ts +13 -0
- package/dist/commands/epic/index.js +88 -0
- package/dist/commands/epic/link/block.d.ts +14 -0
- package/dist/commands/epic/link/block.js +79 -0
- package/dist/commands/epic/link/duplicates.d.ts +14 -0
- package/dist/commands/epic/link/duplicates.js +66 -0
- package/dist/commands/epic/link/index.d.ts +19 -0
- package/dist/commands/epic/link/index.js +242 -0
- package/dist/commands/epic/link/relates.d.ts +14 -0
- package/dist/commands/epic/link/relates.js +66 -0
- package/dist/commands/epic/link/remove.d.ts +16 -0
- package/dist/commands/epic/link/remove.js +89 -0
- package/dist/commands/epic/list.d.ts +11 -0
- package/dist/commands/epic/list.js +87 -0
- package/dist/commands/epic/move.d.ts +15 -0
- package/dist/commands/epic/move.js +184 -0
- package/dist/commands/epic/progress.d.ts +16 -0
- package/dist/commands/epic/progress.js +166 -0
- package/dist/commands/epic/project.d.ts +15 -0
- package/dist/commands/epic/project.js +219 -0
- package/dist/commands/epic/reorder.d.ts +21 -0
- package/dist/commands/epic/reorder.js +160 -0
- package/dist/commands/epic/spec.d.ts +15 -0
- package/dist/commands/epic/spec.js +191 -0
- package/dist/commands/epic/ticket.d.ts +18 -0
- package/dist/commands/epic/ticket.js +291 -0
- package/dist/commands/epic/view.d.ts +13 -0
- package/dist/commands/epic/view.js +117 -0
- package/dist/commands/execution/index.d.ts +13 -0
- package/dist/commands/execution/index.js +70 -0
- package/dist/commands/execution/list.d.ts +15 -0
- package/dist/commands/execution/list.js +144 -0
- package/dist/commands/execution/logs.d.ts +18 -0
- package/dist/commands/execution/logs.js +161 -0
- package/dist/commands/execution/stop.d.ts +22 -0
- package/dist/commands/execution/stop.js +248 -0
- package/dist/commands/gh/index.d.ts +9 -0
- package/dist/commands/gh/index.js +53 -0
- package/dist/commands/gh/login.d.ts +6 -0
- package/dist/commands/gh/login.js +57 -0
- package/dist/commands/gh/status.d.ts +6 -0
- package/dist/commands/gh/status.js +48 -0
- package/dist/commands/gh/token.d.ts +6 -0
- package/dist/commands/gh/token.js +59 -0
- package/dist/commands/init.d.ts +26 -0
- package/dist/commands/init.js +200 -0
- package/dist/commands/phase/create.d.ts +22 -0
- package/dist/commands/phase/create.js +123 -0
- package/dist/commands/phase/delete.d.ts +17 -0
- package/dist/commands/phase/delete.js +73 -0
- package/dist/commands/phase/list.d.ts +12 -0
- package/dist/commands/phase/list.js +76 -0
- package/dist/commands/phase/move.d.ts +17 -0
- package/dist/commands/phase/move.js +115 -0
- package/dist/commands/phase/template/apply.d.ts +17 -0
- package/dist/commands/phase/template/apply.js +106 -0
- package/dist/commands/phase/template/create.d.ts +16 -0
- package/dist/commands/phase/template/create.js +58 -0
- package/dist/commands/phase/template/delete.d.ts +17 -0
- package/dist/commands/phase/template/delete.js +98 -0
- package/dist/commands/phase/template/index.d.ts +15 -0
- package/dist/commands/phase/template/index.js +128 -0
- package/dist/commands/phase/template/list.d.ts +16 -0
- package/dist/commands/phase/template/list.js +95 -0
- package/dist/commands/phase/template/update.d.ts +17 -0
- package/dist/commands/phase/template/update.js +89 -0
- package/dist/commands/phase/update.d.ts +23 -0
- package/dist/commands/phase/update.js +174 -0
- package/dist/commands/pmo/init.d.ts +25 -0
- package/dist/commands/pmo/init.js +341 -0
- package/dist/commands/pr/create.d.ts +17 -0
- package/dist/commands/pr/create.js +242 -0
- package/dist/commands/pr/index.d.ts +9 -0
- package/dist/commands/pr/index.js +68 -0
- package/dist/commands/pr/link.d.ts +14 -0
- package/dist/commands/pr/link.js +212 -0
- package/dist/commands/pr/status.d.ts +12 -0
- package/dist/commands/pr/status.js +161 -0
- package/dist/commands/project/archive.d.ts +17 -0
- package/dist/commands/project/archive.js +83 -0
- package/dist/commands/project/create.d.ts +22 -0
- package/dist/commands/project/create.js +143 -0
- package/dist/commands/project/delete.d.ts +17 -0
- package/dist/commands/project/delete.js +128 -0
- package/dist/commands/project/index.d.ts +13 -0
- package/dist/commands/project/index.js +64 -0
- package/dist/commands/project/list.d.ts +14 -0
- package/dist/commands/project/list.js +96 -0
- package/dist/commands/project/spec.d.ts +18 -0
- package/dist/commands/project/spec.js +216 -0
- package/dist/commands/project/unarchive.d.ts +15 -0
- package/dist/commands/project/unarchive.js +35 -0
- package/dist/commands/project/view.d.ts +16 -0
- package/dist/commands/project/view.js +94 -0
- package/dist/commands/repo/add.d.ts +21 -0
- package/dist/commands/repo/add.js +118 -0
- package/dist/commands/repo/index.d.ts +13 -0
- package/dist/commands/repo/index.js +114 -0
- package/dist/commands/repo/list.d.ts +13 -0
- package/dist/commands/repo/list.js +96 -0
- package/dist/commands/repo/remove.d.ts +23 -0
- package/dist/commands/repo/remove.js +217 -0
- package/dist/commands/repo/view.d.ts +15 -0
- package/dist/commands/repo/view.js +99 -0
- package/dist/commands/session/attach.d.ts +40 -0
- package/dist/commands/session/attach.js +307 -0
- package/dist/commands/session/index.d.ts +13 -0
- package/dist/commands/session/index.js +64 -0
- package/dist/commands/session/list.d.ts +21 -0
- package/dist/commands/session/list.js +181 -0
- package/dist/commands/spec/create.d.ts +19 -0
- package/dist/commands/spec/create.js +130 -0
- package/dist/commands/spec/index.d.ts +13 -0
- package/dist/commands/spec/index.js +68 -0
- package/dist/commands/spec/link/depends.d.ts +14 -0
- package/dist/commands/spec/link/depends.js +64 -0
- package/dist/commands/spec/link/duplicates.d.ts +14 -0
- package/dist/commands/spec/link/duplicates.js +63 -0
- package/dist/commands/spec/link/index.d.ts +19 -0
- package/dist/commands/spec/link/index.js +200 -0
- package/dist/commands/spec/link/relates.d.ts +14 -0
- package/dist/commands/spec/link/relates.js +63 -0
- package/dist/commands/spec/link/remove.d.ts +16 -0
- package/dist/commands/spec/link/remove.js +94 -0
- package/dist/commands/spec/list.d.ts +12 -0
- package/dist/commands/spec/list.js +75 -0
- package/dist/commands/spec/plan.d.ts +15 -0
- package/dist/commands/spec/plan.js +108 -0
- package/dist/commands/spec/ticket.d.ts +18 -0
- package/dist/commands/spec/ticket.js +160 -0
- package/dist/commands/spec/view.d.ts +15 -0
- package/dist/commands/spec/view.js +163 -0
- package/dist/commands/status/create.d.ts +21 -0
- package/dist/commands/status/create.js +140 -0
- package/dist/commands/status/delete.d.ts +13 -0
- package/dist/commands/status/delete.js +77 -0
- package/dist/commands/status/index.d.ts +14 -0
- package/dist/commands/status/index.js +91 -0
- package/dist/commands/status/list.d.ts +12 -0
- package/dist/commands/status/list.js +93 -0
- package/dist/commands/status/move.d.ts +14 -0
- package/dist/commands/status/move.js +120 -0
- package/dist/commands/status/update.d.ts +20 -0
- package/dist/commands/status/update.js +180 -0
- package/dist/commands/template/delete.d.ts +15 -0
- package/dist/commands/template/delete.js +142 -0
- package/dist/commands/template/index.d.ts +10 -0
- package/dist/commands/template/index.js +64 -0
- package/dist/commands/template/list.d.ts +18 -0
- package/dist/commands/template/list.js +157 -0
- package/dist/commands/template/phase/apply.d.ts +14 -0
- package/dist/commands/template/phase/apply.js +41 -0
- package/dist/commands/template/phase/create.d.ts +12 -0
- package/dist/commands/template/phase/create.js +29 -0
- package/dist/commands/template/phase/delete.d.ts +13 -0
- package/dist/commands/template/phase/delete.js +34 -0
- package/dist/commands/template/phase/index.d.ts +10 -0
- package/dist/commands/template/phase/index.js +62 -0
- package/dist/commands/template/phase/list.d.ts +11 -0
- package/dist/commands/template/phase/list.js +34 -0
- package/dist/commands/template/phase/update.d.ts +13 -0
- package/dist/commands/template/phase/update.js +35 -0
- package/dist/commands/template/ticket/apply.d.ts +17 -0
- package/dist/commands/template/ticket/apply.js +58 -0
- package/dist/commands/template/ticket/delete.d.ts +13 -0
- package/dist/commands/template/ticket/delete.js +34 -0
- package/dist/commands/template/ticket/index.d.ts +10 -0
- package/dist/commands/template/ticket/index.js +62 -0
- package/dist/commands/template/ticket/list.d.ts +11 -0
- package/dist/commands/template/ticket/list.js +34 -0
- package/dist/commands/template/ticket/save.d.ts +13 -0
- package/dist/commands/template/ticket/save.js +35 -0
- package/dist/commands/ticket/bulk.d.ts +13 -0
- package/dist/commands/ticket/bulk.js +145 -0
- package/dist/commands/ticket/complete.d.ts +16 -0
- package/dist/commands/ticket/complete.js +170 -0
- package/dist/commands/ticket/create.d.ts +22 -0
- package/dist/commands/ticket/create.js +390 -0
- package/dist/commands/ticket/delete.d.ts +16 -0
- package/dist/commands/ticket/delete.js +178 -0
- package/dist/commands/ticket/edit.d.ts +27 -0
- package/dist/commands/ticket/edit.js +322 -0
- package/dist/commands/ticket/epic.d.ts +20 -0
- package/dist/commands/ticket/epic.js +333 -0
- package/dist/commands/ticket/index.d.ts +13 -0
- package/dist/commands/ticket/index.js +103 -0
- package/dist/commands/ticket/link/block.d.ts +14 -0
- package/dist/commands/ticket/link/block.js +94 -0
- package/dist/commands/ticket/link/duplicates.d.ts +14 -0
- package/dist/commands/ticket/link/duplicates.js +93 -0
- package/dist/commands/ticket/link/index.d.ts +19 -0
- package/dist/commands/ticket/link/index.js +239 -0
- package/dist/commands/ticket/link/relates.d.ts +14 -0
- package/dist/commands/ticket/link/relates.js +93 -0
- package/dist/commands/ticket/link/remove.d.ts +16 -0
- package/dist/commands/ticket/link/remove.js +128 -0
- package/dist/commands/ticket/list.d.ts +24 -0
- package/dist/commands/ticket/list.js +431 -0
- package/dist/commands/ticket/move.d.ts +18 -0
- package/dist/commands/ticket/move.js +212 -0
- package/dist/commands/ticket/project.d.ts +18 -0
- package/dist/commands/ticket/project.js +254 -0
- package/dist/commands/ticket/reassign.d.ts +19 -0
- package/dist/commands/ticket/reassign.js +279 -0
- package/dist/commands/ticket/spec.d.ts +18 -0
- package/dist/commands/ticket/spec.js +259 -0
- package/dist/commands/ticket/status.d.ts +13 -0
- package/dist/commands/ticket/status.js +87 -0
- package/dist/commands/ticket/template/apply.d.ts +25 -0
- package/dist/commands/ticket/template/apply.js +249 -0
- package/dist/commands/ticket/template/create.d.ts +19 -0
- package/dist/commands/ticket/template/create.js +210 -0
- package/dist/commands/ticket/template/delete.d.ts +17 -0
- package/dist/commands/ticket/template/delete.js +92 -0
- package/dist/commands/ticket/template/index.d.ts +15 -0
- package/dist/commands/ticket/template/index.js +118 -0
- package/dist/commands/ticket/template/list.d.ts +16 -0
- package/dist/commands/ticket/template/list.js +110 -0
- package/dist/commands/ticket/template/save.d.ts +14 -0
- package/dist/commands/ticket/template/save.js +110 -0
- package/dist/commands/ticket/update.d.ts +18 -0
- package/dist/commands/ticket/update.js +325 -0
- package/dist/commands/ticket/view.d.ts +13 -0
- package/dist/commands/ticket/view.js +80 -0
- package/dist/commands/whoami.d.ts +9 -0
- package/dist/commands/whoami.js +103 -0
- package/dist/commands/work/complete.d.ts +13 -0
- package/dist/commands/work/complete.js +121 -0
- package/dist/commands/work/index.d.ts +13 -0
- package/dist/commands/work/index.js +70 -0
- package/dist/commands/work/ready.d.ts +24 -0
- package/dist/commands/work/ready.js +290 -0
- package/dist/commands/work/revise.d.ts +19 -0
- package/dist/commands/work/revise.js +377 -0
- package/dist/commands/work/spawn-all.d.ts +17 -0
- package/dist/commands/work/spawn-all.js +58 -0
- package/dist/commands/work/spawn.d.ts +29 -0
- package/dist/commands/work/spawn.js +728 -0
- package/dist/commands/work/start.d.ts +39 -0
- package/dist/commands/work/start.js +1393 -0
- package/dist/commands/work/watch.d.ts +31 -0
- package/dist/commands/work/watch.js +359 -0
- package/dist/commands/workflow/create.d.ts +18 -0
- package/dist/commands/workflow/create.js +119 -0
- package/dist/commands/workflow/delete.d.ts +17 -0
- package/dist/commands/workflow/delete.js +119 -0
- package/dist/commands/workflow/index.d.ts +15 -0
- package/dist/commands/workflow/index.js +75 -0
- package/dist/commands/workflow/list.d.ts +15 -0
- package/dist/commands/workflow/list.js +75 -0
- package/dist/commands/workflow/switch.d.ts +13 -0
- package/dist/commands/workflow/switch.js +117 -0
- package/dist/commands/workflow/view.d.ts +16 -0
- package/dist/commands/workflow/view.js +114 -0
- package/dist/commands/workspace/add.d.ts +12 -0
- package/dist/commands/workspace/add.js +74 -0
- package/dist/commands/workspace/list.d.ts +9 -0
- package/dist/commands/workspace/list.js +153 -0
- package/dist/commands/workspace/remove.d.ts +13 -0
- package/dist/commands/workspace/remove.js +98 -0
- package/dist/commands/workspace/use.d.ts +12 -0
- package/dist/commands/workspace/use.js +111 -0
- package/dist/hooks/init.d.ts +11 -0
- package/dist/hooks/init.js +57 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/lib/agents/commands.d.ts +189 -0
- package/dist/lib/agents/commands.js +893 -0
- package/dist/lib/agents/index.d.ts +54 -0
- package/dist/lib/agents/index.js +382 -0
- package/dist/lib/branch/index.d.ts +120 -0
- package/dist/lib/branch/index.js +334 -0
- package/dist/lib/colors.d.ts +94 -0
- package/dist/lib/colors.js +68 -0
- package/dist/lib/commands/docker-command.d.ts +21 -0
- package/dist/lib/commands/docker-command.js +27 -0
- package/dist/lib/database/index.d.ts +176 -0
- package/dist/lib/database/index.js +581 -0
- package/dist/lib/docker/resolve.d.ts +38 -0
- package/dist/lib/docker/resolve.js +175 -0
- package/dist/lib/execution/config.d.ts +150 -0
- package/dist/lib/execution/config.js +541 -0
- package/dist/lib/execution/devcontainer.d.ts +85 -0
- package/dist/lib/execution/devcontainer.js +594 -0
- package/dist/lib/execution/index.d.ts +10 -0
- package/dist/lib/execution/index.js +10 -0
- package/dist/lib/execution/runners.d.ts +53 -0
- package/dist/lib/execution/runners.js +1182 -0
- package/dist/lib/execution/spawner.d.ts +85 -0
- package/dist/lib/execution/spawner.js +548 -0
- package/dist/lib/execution/storage.d.ts +159 -0
- package/dist/lib/execution/storage.js +425 -0
- package/dist/lib/execution/types.d.ts +145 -0
- package/dist/lib/execution/types.js +157 -0
- package/dist/lib/init/index.d.ts +75 -0
- package/dist/lib/init/index.js +355 -0
- package/dist/lib/machine-config.d.ts +170 -0
- package/dist/lib/machine-config.js +386 -0
- package/dist/lib/pmo/base-command.d.ts +195 -0
- package/dist/lib/pmo/base-command.js +319 -0
- package/dist/lib/pmo/create-spec-folders.d.ts +43 -0
- package/dist/lib/pmo/create-spec-folders.js +64 -0
- package/dist/lib/pmo/epic-files.d.ts +56 -0
- package/dist/lib/pmo/epic-files.js +195 -0
- package/dist/lib/pmo/find-pmo.d.ts +14 -0
- package/dist/lib/pmo/find-pmo.js +172 -0
- package/dist/lib/pmo/index.d.ts +109 -0
- package/dist/lib/pmo/index.js +501 -0
- package/dist/lib/pmo/markdown.d.ts +31 -0
- package/dist/lib/pmo/markdown.js +245 -0
- package/dist/lib/pmo/pmo-context.d.ts +27 -0
- package/dist/lib/pmo/pmo-context.js +44 -0
- package/dist/lib/pmo/schema.d.ts +82 -0
- package/dist/lib/pmo/schema.js +531 -0
- package/dist/lib/pmo/spec-parser.d.ts +25 -0
- package/dist/lib/pmo/spec-parser.js +205 -0
- package/dist/lib/pmo/spec-types.d.ts +43 -0
- package/dist/lib/pmo/spec-types.js +7 -0
- package/dist/lib/pmo/storage/actions.d.ts +34 -0
- package/dist/lib/pmo/storage/actions.js +177 -0
- package/dist/lib/pmo/storage/base.d.ts +47 -0
- package/dist/lib/pmo/storage/base.js +858 -0
- package/dist/lib/pmo/storage/dependencies.d.ts +61 -0
- package/dist/lib/pmo/storage/dependencies.js +267 -0
- package/dist/lib/pmo/storage/epics.d.ts +46 -0
- package/dist/lib/pmo/storage/epics.js +243 -0
- package/dist/lib/pmo/storage/helpers.d.ts +33 -0
- package/dist/lib/pmo/storage/helpers.js +148 -0
- package/dist/lib/pmo/storage/index.d.ts +186 -0
- package/dist/lib/pmo/storage/index.js +689 -0
- package/dist/lib/pmo/storage/phases.d.ts +65 -0
- package/dist/lib/pmo/storage/phases.js +392 -0
- package/dist/lib/pmo/storage/projects.d.ts +79 -0
- package/dist/lib/pmo/storage/projects.js +303 -0
- package/dist/lib/pmo/storage/specs.d.ts +77 -0
- package/dist/lib/pmo/storage/specs.js +389 -0
- package/dist/lib/pmo/storage/statuses.d.ts +63 -0
- package/dist/lib/pmo/storage/statuses.js +404 -0
- package/dist/lib/pmo/storage/subtasks.d.ts +37 -0
- package/dist/lib/pmo/storage/subtasks.js +184 -0
- package/dist/lib/pmo/storage/templates.d.ts +40 -0
- package/dist/lib/pmo/storage/templates.js +210 -0
- package/dist/lib/pmo/storage/tickets.d.ts +57 -0
- package/dist/lib/pmo/storage/tickets.js +453 -0
- package/dist/lib/pmo/storage/types.d.ts +200 -0
- package/dist/lib/pmo/storage/types.js +5 -0
- package/dist/lib/pmo/storage/views.d.ts +44 -0
- package/dist/lib/pmo/storage/views.js +355 -0
- package/dist/lib/pmo/storage-sqlite.d.ts +7 -0
- package/dist/lib/pmo/storage-sqlite.js +7 -0
- package/dist/lib/pmo/sync-manager.d.ts +92 -0
- package/dist/lib/pmo/sync-manager.js +229 -0
- package/dist/lib/pmo/types.d.ts +710 -0
- package/dist/lib/pmo/types.js +108 -0
- package/dist/lib/pmo/utils.d.ts +122 -0
- package/dist/lib/pmo/utils.js +174 -0
- package/dist/lib/pmo/watcher.d.ts +43 -0
- package/dist/lib/pmo/watcher.js +208 -0
- package/dist/lib/pr/index.d.ts +150 -0
- package/dist/lib/pr/index.js +483 -0
- package/dist/lib/prompt-json.d.ts +231 -0
- package/dist/lib/prompt-json.js +213 -0
- package/dist/lib/repos/index.d.ts +81 -0
- package/dist/lib/repos/index.js +679 -0
- package/dist/lib/styles.d.ts +98 -0
- package/dist/lib/styles.js +195 -0
- package/dist/lib/themes.d.ts +128 -0
- package/dist/lib/themes.js +301 -0
- package/dist/lib/ui/BoardUI.d.ts +21 -0
- package/dist/lib/ui/BoardUI.js +85 -0
- package/dist/lib/ui/ClaimTicketUI.d.ts +17 -0
- package/dist/lib/ui/ClaimTicketUI.js +64 -0
- package/dist/lib/ui/CreateTicketUI.d.ts +13 -0
- package/dist/lib/ui/CreateTicketUI.js +101 -0
- package/dist/lib/workspace.d.ts +66 -0
- package/dist/lib/workspace.js +204 -0
- package/oclif.manifest.json +10593 -0
- package/package.json +104 -52
- package/LICENSE +0 -21
- package/dist/bin/prlt.d.ts +0 -11
- package/dist/bin/prlt.d.ts.map +0 -1
- package/dist/bin/prlt.js +0 -144
- package/dist/bin/prlt.js.map +0 -1
- package/dist/lib/config/index.d.ts +0 -14
- package/dist/lib/config/index.d.ts.map +0 -1
- package/dist/lib/config/index.js +0 -139
- package/dist/lib/config/index.js.map +0 -1
- package/dist/lib/config/upgrade.d.ts +0 -2
- package/dist/lib/config/upgrade.d.ts.map +0 -1
- package/dist/lib/config/upgrade.js +0 -173
- package/dist/lib/config/upgrade.js.map +0 -1
- package/dist/lib/themes/index.d.ts +0 -8
- package/dist/lib/themes/index.d.ts.map +0 -1
- package/dist/lib/themes/index.js +0 -80
- package/dist/lib/themes/index.js.map +0 -1
- package/dist/lib/utils/helpers.d.ts +0 -4
- package/dist/lib/utils/helpers.d.ts.map +0 -1
- package/dist/lib/utils/helpers.js +0 -39
- package/dist/lib/utils/helpers.js.map +0 -1
- package/dist/lib/utils/logger.d.ts +0 -4
- package/dist/lib/utils/logger.d.ts.map +0 -1
- package/dist/lib/utils/logger.js +0 -28
- package/dist/lib/utils/logger.js.map +0 -1
- package/dist/lib/workspace/index.d.ts +0 -13
- package/dist/lib/workspace/index.d.ts.map +0 -1
- package/dist/lib/workspace/index.js +0 -116
- package/dist/lib/workspace/index.js.map +0 -1
- package/dist/lib/worktree/index.d.ts +0 -7
- package/dist/lib/worktree/index.d.ts.map +0 -1
- package/dist/lib/worktree/index.js +0 -362
- package/dist/lib/worktree/index.js.map +0 -1
- package/dist/lib/worktree/migrate.d.ts +0 -2
- package/dist/lib/worktree/migrate.d.ts.map +0 -1
- package/dist/lib/worktree/migrate.js +0 -212
- package/dist/lib/worktree/migrate.js.map +0 -1
- package/dist/lib/worktree/repair.d.ts +0 -3
- package/dist/lib/worktree/repair.d.ts.map +0 -1
- package/dist/lib/worktree/repair.js +0 -140
- package/dist/lib/worktree/repair.js.map +0 -1
- package/dist/types/index.d.ts +0 -57
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -3
- package/dist/types/index.js.map +0 -1
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PMOCommand } from '../../lib/pmo/index.js';
|
|
2
|
+
export default class Workflow extends PMOCommand {
|
|
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
|
+
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
};
|
|
11
|
+
protected getPMOOptions(): {
|
|
12
|
+
promptIfMultiple: boolean;
|
|
13
|
+
};
|
|
14
|
+
execute(): Promise<void>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { Flags } from '@oclif/core';
|
|
2
|
+
import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
|
|
3
|
+
import { styles } from '../../lib/styles.js';
|
|
4
|
+
export default class Workflow extends PMOCommand {
|
|
5
|
+
static description = 'List all available workflows (alias for workflow list)';
|
|
6
|
+
static examples = [
|
|
7
|
+
'<%= config.bin %> <%= command.id %>',
|
|
8
|
+
'<%= config.bin %> <%= command.id %> --builtin',
|
|
9
|
+
'<%= config.bin %> <%= command.id %> --json',
|
|
10
|
+
];
|
|
11
|
+
static flags = {
|
|
12
|
+
...pmoBaseFlags,
|
|
13
|
+
builtin: Flags.boolean({
|
|
14
|
+
description: 'Show only built-in workflows',
|
|
15
|
+
default: false,
|
|
16
|
+
}),
|
|
17
|
+
custom: Flags.boolean({
|
|
18
|
+
description: 'Show only custom workflows',
|
|
19
|
+
default: false,
|
|
20
|
+
}),
|
|
21
|
+
json: Flags.boolean({
|
|
22
|
+
description: 'Output as JSON',
|
|
23
|
+
default: false,
|
|
24
|
+
}),
|
|
25
|
+
};
|
|
26
|
+
getPMOOptions() {
|
|
27
|
+
return { promptIfMultiple: false };
|
|
28
|
+
}
|
|
29
|
+
async execute() {
|
|
30
|
+
const { flags } = await this.parse(Workflow);
|
|
31
|
+
// Build filter
|
|
32
|
+
const filter = {};
|
|
33
|
+
if (flags.builtin)
|
|
34
|
+
filter.isBuiltin = true;
|
|
35
|
+
if (flags.custom)
|
|
36
|
+
filter.isBuiltin = false;
|
|
37
|
+
const workflows = await this.storage.listWorkflows(Object.keys(filter).length > 0 ? filter : undefined);
|
|
38
|
+
if (flags.json) {
|
|
39
|
+
this.log(JSON.stringify(workflows, null, 2));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (workflows.length === 0) {
|
|
43
|
+
this.log(styles.muted('\nNo workflows found.'));
|
|
44
|
+
this.log(styles.muted('Create one: prlt workflow create "My Workflow"'));
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
this.log(`\n${styles.emphasis('Workflows')}`);
|
|
48
|
+
this.log('═'.repeat(60));
|
|
49
|
+
// Group by builtin vs custom
|
|
50
|
+
const builtinWorkflows = workflows.filter(w => w.isBuiltin);
|
|
51
|
+
const customWorkflows = workflows.filter(w => !w.isBuiltin);
|
|
52
|
+
if (builtinWorkflows.length > 0 && !flags.custom) {
|
|
53
|
+
this.log(`\n${styles.emphasis('Built-in')}`);
|
|
54
|
+
this.log('─'.repeat(40));
|
|
55
|
+
for (const workflow of builtinWorkflows) {
|
|
56
|
+
this.log(` ${styles.emphasis(workflow.name)} ${styles.muted(`(${workflow.id})`)}`);
|
|
57
|
+
if (workflow.description) {
|
|
58
|
+
this.log(` ${styles.muted(workflow.description)}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (customWorkflows.length > 0 && !flags.builtin) {
|
|
63
|
+
this.log(`\n${styles.emphasis('Custom')}`);
|
|
64
|
+
this.log('─'.repeat(40));
|
|
65
|
+
for (const workflow of customWorkflows) {
|
|
66
|
+
this.log(` ${styles.emphasis(workflow.name)} ${styles.muted(`(${workflow.id})`)}`);
|
|
67
|
+
if (workflow.description) {
|
|
68
|
+
this.log(` ${styles.muted(workflow.description)}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
this.log('');
|
|
73
|
+
this.log(styles.muted('View details: prlt workflow view <id>'));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PMOCommand } from '../../lib/pmo/index.js';
|
|
2
|
+
export default class WorkflowList extends PMOCommand {
|
|
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
|
+
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
};
|
|
11
|
+
protected getPMOOptions(): {
|
|
12
|
+
promptIfMultiple: boolean;
|
|
13
|
+
};
|
|
14
|
+
execute(): Promise<void>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { Flags } from '@oclif/core';
|
|
2
|
+
import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
|
|
3
|
+
import { styles } from '../../lib/styles.js';
|
|
4
|
+
export default class WorkflowList extends PMOCommand {
|
|
5
|
+
static description = 'List all available workflows';
|
|
6
|
+
static examples = [
|
|
7
|
+
'<%= config.bin %> <%= command.id %>',
|
|
8
|
+
'<%= config.bin %> <%= command.id %> --builtin',
|
|
9
|
+
'<%= config.bin %> <%= command.id %> --json',
|
|
10
|
+
];
|
|
11
|
+
static flags = {
|
|
12
|
+
...pmoBaseFlags,
|
|
13
|
+
builtin: Flags.boolean({
|
|
14
|
+
description: 'Show only built-in workflows',
|
|
15
|
+
default: false,
|
|
16
|
+
}),
|
|
17
|
+
custom: Flags.boolean({
|
|
18
|
+
description: 'Show only custom workflows',
|
|
19
|
+
default: false,
|
|
20
|
+
}),
|
|
21
|
+
json: Flags.boolean({
|
|
22
|
+
description: 'Output as JSON',
|
|
23
|
+
default: false,
|
|
24
|
+
}),
|
|
25
|
+
};
|
|
26
|
+
getPMOOptions() {
|
|
27
|
+
return { promptIfMultiple: false };
|
|
28
|
+
}
|
|
29
|
+
async execute() {
|
|
30
|
+
const { flags } = await this.parse(WorkflowList);
|
|
31
|
+
// Build filter
|
|
32
|
+
const filter = {};
|
|
33
|
+
if (flags.builtin)
|
|
34
|
+
filter.isBuiltin = true;
|
|
35
|
+
if (flags.custom)
|
|
36
|
+
filter.isBuiltin = false;
|
|
37
|
+
const workflows = await this.storage.listWorkflows(Object.keys(filter).length > 0 ? filter : undefined);
|
|
38
|
+
if (flags.json) {
|
|
39
|
+
this.log(JSON.stringify(workflows, null, 2));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (workflows.length === 0) {
|
|
43
|
+
this.log(styles.muted('\nNo workflows found.'));
|
|
44
|
+
this.log(styles.muted('Create one: prlt workflow create "My Workflow"'));
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
this.log(`\n${styles.emphasis('Workflows')}`);
|
|
48
|
+
this.log('═'.repeat(60));
|
|
49
|
+
// Group by builtin vs custom
|
|
50
|
+
const builtinWorkflows = workflows.filter(w => w.isBuiltin);
|
|
51
|
+
const customWorkflows = workflows.filter(w => !w.isBuiltin);
|
|
52
|
+
if (builtinWorkflows.length > 0 && !flags.custom) {
|
|
53
|
+
this.log(`\n${styles.emphasis('Built-in')}`);
|
|
54
|
+
this.log('─'.repeat(40));
|
|
55
|
+
for (const workflow of builtinWorkflows) {
|
|
56
|
+
this.log(` ${styles.emphasis(workflow.name)} ${styles.muted(`(${workflow.id})`)}`);
|
|
57
|
+
if (workflow.description) {
|
|
58
|
+
this.log(` ${styles.muted(workflow.description)}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (customWorkflows.length > 0 && !flags.builtin) {
|
|
63
|
+
this.log(`\n${styles.emphasis('Custom')}`);
|
|
64
|
+
this.log('─'.repeat(40));
|
|
65
|
+
for (const workflow of customWorkflows) {
|
|
66
|
+
this.log(` ${styles.emphasis(workflow.name)} ${styles.muted(`(${workflow.id})`)}`);
|
|
67
|
+
if (workflow.description) {
|
|
68
|
+
this.log(` ${styles.muted(workflow.description)}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
this.log('');
|
|
73
|
+
this.log(styles.muted('View details: prlt workflow view <id>'));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { PMOCommand } from '../../lib/pmo/index.js';
|
|
2
|
+
export default class WorkflowSwitch extends PMOCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
workflow: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
};
|
|
12
|
+
execute(): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { Flags, Args } from '@oclif/core';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
|
|
4
|
+
import { styles } from '../../lib/styles.js';
|
|
5
|
+
export default class WorkflowSwitch extends PMOCommand {
|
|
6
|
+
static description = 'Switch a project to use a different workflow';
|
|
7
|
+
static examples = [
|
|
8
|
+
'<%= config.bin %> <%= command.id %> kanban',
|
|
9
|
+
'<%= config.bin %> <%= command.id %> linear --project my-project',
|
|
10
|
+
'<%= config.bin %> <%= command.id %> --force # Skip confirmation',
|
|
11
|
+
];
|
|
12
|
+
static args = {
|
|
13
|
+
workflow: Args.string({
|
|
14
|
+
description: 'Workflow ID to switch to',
|
|
15
|
+
required: false,
|
|
16
|
+
}),
|
|
17
|
+
};
|
|
18
|
+
static flags = {
|
|
19
|
+
...pmoBaseFlags,
|
|
20
|
+
force: Flags.boolean({
|
|
21
|
+
char: 'f',
|
|
22
|
+
description: 'Skip confirmation prompt',
|
|
23
|
+
default: false,
|
|
24
|
+
}),
|
|
25
|
+
};
|
|
26
|
+
async execute() {
|
|
27
|
+
const { args, flags } = await this.parse(WorkflowSwitch);
|
|
28
|
+
const projectId = await this.requireProject();
|
|
29
|
+
// Get workflow - prompt for selection if not provided
|
|
30
|
+
let workflowId = args.workflow;
|
|
31
|
+
if (!workflowId) {
|
|
32
|
+
const workflows = await this.storage.listWorkflows();
|
|
33
|
+
if (workflows.length === 0) {
|
|
34
|
+
this.error('No workflows found.\nCreate one with: prlt workflow create "Workflow Name"');
|
|
35
|
+
}
|
|
36
|
+
const { selectedWorkflow } = await inquirer.prompt([{
|
|
37
|
+
type: 'list',
|
|
38
|
+
name: 'selectedWorkflow',
|
|
39
|
+
message: 'Select a workflow:',
|
|
40
|
+
choices: workflows.map(w => ({
|
|
41
|
+
name: `${w.name}${w.description ? ` - ${w.description}` : ''}`,
|
|
42
|
+
value: w.id,
|
|
43
|
+
})),
|
|
44
|
+
}]);
|
|
45
|
+
workflowId = selectedWorkflow;
|
|
46
|
+
}
|
|
47
|
+
// Verify workflow exists
|
|
48
|
+
const workflow = await this.storage.getWorkflow(workflowId);
|
|
49
|
+
if (!workflow) {
|
|
50
|
+
this.error(`Workflow not found: ${workflowId}\nRun 'prlt workflow list' to see available workflows.`);
|
|
51
|
+
}
|
|
52
|
+
// Get current project info
|
|
53
|
+
const project = await this.storage.getProject(projectId);
|
|
54
|
+
const currentWorkflowId = project?.workflowId;
|
|
55
|
+
// Check if already using this workflow
|
|
56
|
+
if (currentWorkflowId === workflowId) {
|
|
57
|
+
this.log(styles.muted(`Project is already using workflow "${workflow.name}".`));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// Get tickets that will be affected
|
|
61
|
+
const tickets = await this.storage.listTickets(projectId);
|
|
62
|
+
if (tickets.length > 0 && !flags.force) {
|
|
63
|
+
const projectName = await this.getProjectName(projectId);
|
|
64
|
+
this.log(styles.warning(`\nProject "${projectName}" has ${tickets.length} ticket(s).`));
|
|
65
|
+
this.log(styles.warning('Tickets will be mapped to matching status categories in the new workflow.'));
|
|
66
|
+
this.log('');
|
|
67
|
+
const { confirm } = await inquirer.prompt([
|
|
68
|
+
{
|
|
69
|
+
type: 'list',
|
|
70
|
+
name: 'confirm',
|
|
71
|
+
message: `Switch to workflow "${workflow.name}"?`,
|
|
72
|
+
choices: [
|
|
73
|
+
{ name: 'No', value: false },
|
|
74
|
+
{ name: 'Yes, switch workflow', value: true },
|
|
75
|
+
],
|
|
76
|
+
},
|
|
77
|
+
]);
|
|
78
|
+
if (!confirm) {
|
|
79
|
+
this.log(styles.muted('Cancelled'));
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Get new workflow statuses
|
|
84
|
+
const newStatuses = await this.storage.listStatuses(workflowId);
|
|
85
|
+
// Build category -> status mapping for the new workflow
|
|
86
|
+
const categoryToStatus = {};
|
|
87
|
+
for (const status of newStatuses) {
|
|
88
|
+
if (!categoryToStatus[status.category]) {
|
|
89
|
+
categoryToStatus[status.category] = { id: status.id, name: status.name };
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Find default status
|
|
93
|
+
const defaultStatus = newStatuses.find(s => s.isDefault) || newStatuses[0];
|
|
94
|
+
// Update project workflow_id
|
|
95
|
+
await this.storage.updateProject(projectId, { workflowId: workflowId });
|
|
96
|
+
// Migrate tickets to new statuses
|
|
97
|
+
let migratedCount = 0;
|
|
98
|
+
for (const ticket of tickets) {
|
|
99
|
+
// Get old status category
|
|
100
|
+
const oldCategory = ticket.statusCategory || 'backlog';
|
|
101
|
+
// Find matching status in new workflow, or use default
|
|
102
|
+
const newStatus = categoryToStatus[oldCategory] ||
|
|
103
|
+
(defaultStatus ? { id: defaultStatus.id, name: defaultStatus.name } : null);
|
|
104
|
+
if (newStatus) {
|
|
105
|
+
await this.storage.moveTicket(projectId, ticket.id, newStatus.name);
|
|
106
|
+
migratedCount++;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const projectName = await this.getProjectName(projectId);
|
|
110
|
+
this.log(styles.success(`\nSwitched project "${projectName}" to workflow "${styles.emphasis(workflow.name)}"`));
|
|
111
|
+
if (migratedCount > 0) {
|
|
112
|
+
this.log(styles.muted(`Migrated ${migratedCount} ticket(s) to matching statuses.`));
|
|
113
|
+
}
|
|
114
|
+
this.log('');
|
|
115
|
+
this.log(styles.muted(`View statuses: prlt status list`));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PMOCommand } from '../../lib/pmo/index.js';
|
|
2
|
+
export default class WorkflowView extends PMOCommand {
|
|
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
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
};
|
|
12
|
+
protected getPMOOptions(): {
|
|
13
|
+
promptIfMultiple: boolean;
|
|
14
|
+
};
|
|
15
|
+
execute(): Promise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { Args, Flags } from '@oclif/core';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
|
|
4
|
+
import { styles } from '../../lib/styles.js';
|
|
5
|
+
import { shouldOutputJson, outputPromptAsJson, outputErrorAsJson, createMetadata, buildPromptConfig, } from '../../lib/prompt-json.js';
|
|
6
|
+
export default class WorkflowView extends PMOCommand {
|
|
7
|
+
static description = 'View details of a workflow';
|
|
8
|
+
static examples = [
|
|
9
|
+
'<%= config.bin %> <%= command.id %> default',
|
|
10
|
+
'<%= config.bin %> <%= command.id %> # Interactive selection',
|
|
11
|
+
'<%= config.bin %> <%= command.id %> --json',
|
|
12
|
+
];
|
|
13
|
+
static args = {
|
|
14
|
+
id: Args.string({
|
|
15
|
+
description: 'Workflow ID - prompts with dropdown if not provided',
|
|
16
|
+
required: false,
|
|
17
|
+
}),
|
|
18
|
+
};
|
|
19
|
+
static flags = {
|
|
20
|
+
...pmoBaseFlags,
|
|
21
|
+
json: Flags.boolean({
|
|
22
|
+
description: 'Output as JSON',
|
|
23
|
+
default: false,
|
|
24
|
+
}),
|
|
25
|
+
};
|
|
26
|
+
getPMOOptions() {
|
|
27
|
+
return { promptIfMultiple: false };
|
|
28
|
+
}
|
|
29
|
+
async execute() {
|
|
30
|
+
const { args, flags } = await this.parse(WorkflowView);
|
|
31
|
+
// Check if JSON output mode is active
|
|
32
|
+
const jsonMode = shouldOutputJson(flags);
|
|
33
|
+
// Helper to handle errors in JSON mode
|
|
34
|
+
const handleError = (code, message) => {
|
|
35
|
+
if (jsonMode) {
|
|
36
|
+
outputErrorAsJson(code, message, createMetadata('workflow view', flags));
|
|
37
|
+
this.exit(1);
|
|
38
|
+
}
|
|
39
|
+
this.error(message);
|
|
40
|
+
};
|
|
41
|
+
// Get workflow ID - prompt if not provided
|
|
42
|
+
let workflowId = args.id;
|
|
43
|
+
if (!workflowId) {
|
|
44
|
+
const workflows = await this.storage.listWorkflows();
|
|
45
|
+
if (workflows.length === 0) {
|
|
46
|
+
return handleError('NO_WORKFLOWS', 'No workflows found.');
|
|
47
|
+
}
|
|
48
|
+
// In JSON mode, output workflow selection prompt
|
|
49
|
+
if (jsonMode) {
|
|
50
|
+
const workflowChoices = workflows.map(w => ({
|
|
51
|
+
name: `${w.name}${w.isBuiltin ? ' (built-in)' : ''}`,
|
|
52
|
+
value: w.id,
|
|
53
|
+
}));
|
|
54
|
+
outputPromptAsJson(buildPromptConfig('list', 'id', 'Select workflow to view:', workflowChoices), createMetadata('workflow view', flags));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const { selectedId } = await inquirer.prompt([{
|
|
58
|
+
type: 'list',
|
|
59
|
+
name: 'selectedId',
|
|
60
|
+
message: 'Select workflow to view:',
|
|
61
|
+
choices: workflows.map(w => ({
|
|
62
|
+
name: `${w.name}${w.isBuiltin ? ' (built-in)' : ''}`,
|
|
63
|
+
value: w.id,
|
|
64
|
+
})),
|
|
65
|
+
}]);
|
|
66
|
+
workflowId = selectedId;
|
|
67
|
+
}
|
|
68
|
+
// Get workflow details
|
|
69
|
+
const workflow = await this.storage.getWorkflow(workflowId);
|
|
70
|
+
if (!workflow) {
|
|
71
|
+
return handleError('WORKFLOW_NOT_FOUND', `Workflow not found: ${workflowId}`);
|
|
72
|
+
}
|
|
73
|
+
// Get workflow statuses
|
|
74
|
+
const statuses = await this.storage.listStatuses(workflowId);
|
|
75
|
+
if (flags.json) {
|
|
76
|
+
this.log(JSON.stringify({ workflow, statuses }, null, 2));
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
this.log(`\n${styles.emphasis('Workflow:')} ${workflow.name}`);
|
|
80
|
+
this.log('═'.repeat(60));
|
|
81
|
+
this.log(styles.muted(` ID: ${workflow.id}`));
|
|
82
|
+
if (workflow.description) {
|
|
83
|
+
this.log(styles.muted(` Description: ${workflow.description}`));
|
|
84
|
+
}
|
|
85
|
+
this.log(styles.muted(` Type: ${workflow.isBuiltin ? 'Built-in' : 'Custom'}`));
|
|
86
|
+
this.log(styles.muted(` Created: ${workflow.createdAt.toLocaleDateString()}`));
|
|
87
|
+
if (statuses.length > 0) {
|
|
88
|
+
this.log(`\n${styles.emphasis('Statuses:')}`);
|
|
89
|
+
this.log('─'.repeat(40));
|
|
90
|
+
// Group by category
|
|
91
|
+
const byCategory = new Map();
|
|
92
|
+
for (const status of statuses) {
|
|
93
|
+
const existing = byCategory.get(status.category) || [];
|
|
94
|
+
existing.push(status);
|
|
95
|
+
byCategory.set(status.category, existing);
|
|
96
|
+
}
|
|
97
|
+
const categoryOrder = ['backlog', 'unstarted', 'started', 'completed', 'canceled'];
|
|
98
|
+
for (const category of categoryOrder) {
|
|
99
|
+
const categoryStatuses = byCategory.get(category);
|
|
100
|
+
if (categoryStatuses && categoryStatuses.length > 0) {
|
|
101
|
+
this.log(`\n ${styles.emphasis(category.toUpperCase())}`);
|
|
102
|
+
for (const status of categoryStatuses.sort((a, b) => a.position - b.position)) {
|
|
103
|
+
const defaultBadge = status.isDefault ? styles.muted(' (default)') : '';
|
|
104
|
+
this.log(` • ${status.name}${defaultBadge}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
this.log(styles.muted('\nNo statuses defined.'));
|
|
111
|
+
}
|
|
112
|
+
this.log('');
|
|
113
|
+
}
|
|
114
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class WorkspaceAdd extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
path: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
};
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Command, Args, Flags } from '@oclif/core';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import * as fs from 'node:fs';
|
|
4
|
+
import * as path from 'node:path';
|
|
5
|
+
import { registerWorkspace, normalizePath, isWorkspaceRegistered, getWorkspaceNameFromPath, } from '../../lib/machine-config.js';
|
|
6
|
+
export default class WorkspaceAdd extends Command {
|
|
7
|
+
static description = 'Register an existing workspace in the machine config';
|
|
8
|
+
static examples = [
|
|
9
|
+
'<%= config.bin %> <%= command.id %> /path/to/workspace',
|
|
10
|
+
'<%= config.bin %> <%= command.id %> . --name my-workspace',
|
|
11
|
+
'<%= config.bin %> <%= command.id %> ~/projects/my-hq',
|
|
12
|
+
];
|
|
13
|
+
static args = {
|
|
14
|
+
path: Args.string({
|
|
15
|
+
description: 'Path to the workspace to register',
|
|
16
|
+
required: true,
|
|
17
|
+
}),
|
|
18
|
+
};
|
|
19
|
+
static flags = {
|
|
20
|
+
name: Flags.string({
|
|
21
|
+
char: 'n',
|
|
22
|
+
description: 'Custom name for the workspace (defaults to directory basename or workspace config name)',
|
|
23
|
+
}),
|
|
24
|
+
};
|
|
25
|
+
async run() {
|
|
26
|
+
const { args, flags } = await this.parse(WorkspaceAdd);
|
|
27
|
+
// Normalize the path
|
|
28
|
+
const workspacePath = normalizePath(args.path);
|
|
29
|
+
// Check if path exists
|
|
30
|
+
if (!fs.existsSync(workspacePath)) {
|
|
31
|
+
this.error(`Path does not exist: ${workspacePath}`);
|
|
32
|
+
}
|
|
33
|
+
// Check if it's a directory
|
|
34
|
+
const stats = fs.statSync(workspacePath);
|
|
35
|
+
if (!stats.isDirectory()) {
|
|
36
|
+
this.error(`Path is not a directory: ${workspacePath}`);
|
|
37
|
+
}
|
|
38
|
+
// Validate it's a valid HQ workspace
|
|
39
|
+
const configPath = path.join(workspacePath, '.proletariat', 'config.json');
|
|
40
|
+
if (!fs.existsSync(configPath)) {
|
|
41
|
+
this.error(`Not a valid workspace: missing .proletariat/config.json\n` +
|
|
42
|
+
`Run "prlt init" to create a new workspace.`);
|
|
43
|
+
}
|
|
44
|
+
// Read config to validate type
|
|
45
|
+
try {
|
|
46
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
47
|
+
if (config.type !== 'hq') {
|
|
48
|
+
this.error(`Invalid workspace type: ${config.type}\n` +
|
|
49
|
+
`Only HQ workspaces can be registered.`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
this.error(`Failed to read workspace config: ${error.message}`);
|
|
54
|
+
}
|
|
55
|
+
// Check if already registered
|
|
56
|
+
if (isWorkspaceRegistered(workspacePath)) {
|
|
57
|
+
this.log(chalk.yellow(`Workspace is already registered: ${workspacePath}`));
|
|
58
|
+
this.log(chalk.gray('Use "prlt workspace use" to set it as active.'));
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
// Determine workspace name
|
|
62
|
+
const workspaceName = flags.name || getWorkspaceNameFromPath(workspacePath);
|
|
63
|
+
// Register the workspace
|
|
64
|
+
try {
|
|
65
|
+
const entry = registerWorkspace(workspacePath, workspaceName, true);
|
|
66
|
+
this.log(chalk.green(`Registered workspace: ${entry.name}`));
|
|
67
|
+
this.log(chalk.gray(` Path: ${entry.path}`));
|
|
68
|
+
this.log(chalk.gray(` Registered at: ${entry.registeredAt}`));
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
this.error(`Failed to register workspace: ${error.message}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class WorkspaceList extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
};
|
|
8
|
+
run(): Promise<void>;
|
|
9
|
+
}
|