@proletariat/cli 0.2.0 ā 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 +512 -253
- 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 +103 -56
- 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 -142
- 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 -248
- 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 -214
- 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 -320
- 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,210 @@
|
|
|
1
|
+
import { Args, Flags } from '@oclif/core';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import { PMOCommand, pmoBaseFlags } from '../../../lib/pmo/index.js';
|
|
4
|
+
import { PRIORITIES, PRIORITY_LABELS, TICKET_CATEGORIES } from '../../../lib/pmo/types.js';
|
|
5
|
+
import { styles } from '../../../lib/styles.js';
|
|
6
|
+
export default class TicketTemplateCreate extends PMOCommand {
|
|
7
|
+
static description = 'Create a new ticket template from scratch';
|
|
8
|
+
static examples = [
|
|
9
|
+
'<%= config.bin %> <%= command.id %> "Bug Report"',
|
|
10
|
+
'<%= config.bin %> <%= command.id %> "Feature Request" -d "Template for new features"',
|
|
11
|
+
'<%= config.bin %> <%= command.id %> "Task" --title-pattern "[TASK] " --priority P2',
|
|
12
|
+
];
|
|
13
|
+
static args = {
|
|
14
|
+
name: Args.string({
|
|
15
|
+
description: 'Template name',
|
|
16
|
+
required: false,
|
|
17
|
+
}),
|
|
18
|
+
};
|
|
19
|
+
static flags = {
|
|
20
|
+
...pmoBaseFlags,
|
|
21
|
+
description: Flags.string({
|
|
22
|
+
char: 'd',
|
|
23
|
+
description: 'Template description',
|
|
24
|
+
}),
|
|
25
|
+
'title-pattern': Flags.string({
|
|
26
|
+
description: 'Default title prefix/pattern (e.g., "[BUG] ")',
|
|
27
|
+
}),
|
|
28
|
+
priority: Flags.string({
|
|
29
|
+
char: 'p',
|
|
30
|
+
description: 'Default priority',
|
|
31
|
+
options: [...PRIORITIES],
|
|
32
|
+
}),
|
|
33
|
+
category: Flags.string({
|
|
34
|
+
char: 'c',
|
|
35
|
+
description: 'Default category',
|
|
36
|
+
options: [...TICKET_CATEGORIES],
|
|
37
|
+
}),
|
|
38
|
+
};
|
|
39
|
+
getPMOOptions() {
|
|
40
|
+
return { promptIfMultiple: false };
|
|
41
|
+
}
|
|
42
|
+
async execute() {
|
|
43
|
+
const { args, flags } = await this.parse(TicketTemplateCreate);
|
|
44
|
+
// Get template name
|
|
45
|
+
let name = args.name;
|
|
46
|
+
if (!name) {
|
|
47
|
+
const { templateName } = await inquirer.prompt([{
|
|
48
|
+
type: 'input',
|
|
49
|
+
name: 'templateName',
|
|
50
|
+
message: 'Template name:',
|
|
51
|
+
validate: (input) => input.length > 0 || 'Name is required',
|
|
52
|
+
}]);
|
|
53
|
+
name = templateName;
|
|
54
|
+
}
|
|
55
|
+
// Get description if not provided
|
|
56
|
+
let description = flags.description;
|
|
57
|
+
if (description === undefined) {
|
|
58
|
+
const { templateDescription } = await inquirer.prompt([{
|
|
59
|
+
type: 'input',
|
|
60
|
+
name: 'templateDescription',
|
|
61
|
+
message: 'Description (optional):',
|
|
62
|
+
}]);
|
|
63
|
+
description = templateDescription || undefined;
|
|
64
|
+
}
|
|
65
|
+
// Get title pattern
|
|
66
|
+
let titlePattern = flags['title-pattern'];
|
|
67
|
+
if (titlePattern === undefined) {
|
|
68
|
+
const { pattern } = await inquirer.prompt([{
|
|
69
|
+
type: 'input',
|
|
70
|
+
name: 'pattern',
|
|
71
|
+
message: 'Title prefix/pattern (optional, e.g., "[BUG] "):',
|
|
72
|
+
}]);
|
|
73
|
+
titlePattern = pattern || undefined;
|
|
74
|
+
}
|
|
75
|
+
// Get default priority
|
|
76
|
+
let priority = flags.priority;
|
|
77
|
+
if (priority === undefined) {
|
|
78
|
+
const { selectedPriority } = await inquirer.prompt([{
|
|
79
|
+
type: 'list',
|
|
80
|
+
name: 'selectedPriority',
|
|
81
|
+
message: 'Default priority:',
|
|
82
|
+
choices: [
|
|
83
|
+
{ name: 'None', value: '' },
|
|
84
|
+
...PRIORITIES.map(p => ({ name: PRIORITY_LABELS[p], value: p })),
|
|
85
|
+
],
|
|
86
|
+
}]);
|
|
87
|
+
priority = selectedPriority || undefined;
|
|
88
|
+
}
|
|
89
|
+
// Get default category
|
|
90
|
+
let category = flags.category;
|
|
91
|
+
if (category === undefined) {
|
|
92
|
+
const { selectedCategory } = await inquirer.prompt([{
|
|
93
|
+
type: 'list',
|
|
94
|
+
name: 'selectedCategory',
|
|
95
|
+
message: 'Default category:',
|
|
96
|
+
choices: [
|
|
97
|
+
{ name: 'None', value: '' },
|
|
98
|
+
...TICKET_CATEGORIES.map(c => ({ name: c, value: c })),
|
|
99
|
+
],
|
|
100
|
+
}]);
|
|
101
|
+
category = selectedCategory || undefined;
|
|
102
|
+
}
|
|
103
|
+
// Ask about description template
|
|
104
|
+
const { wantDescriptionTemplate } = await inquirer.prompt([{
|
|
105
|
+
type: 'list',
|
|
106
|
+
name: 'wantDescriptionTemplate',
|
|
107
|
+
message: 'Add a description template?',
|
|
108
|
+
choices: [
|
|
109
|
+
{ name: 'No', value: false },
|
|
110
|
+
{ name: 'Yes', value: true },
|
|
111
|
+
],
|
|
112
|
+
}]);
|
|
113
|
+
let descriptionTemplate;
|
|
114
|
+
if (wantDescriptionTemplate) {
|
|
115
|
+
const { template } = await inquirer.prompt([{
|
|
116
|
+
type: 'editor',
|
|
117
|
+
name: 'template',
|
|
118
|
+
message: 'Description template (opens editor):',
|
|
119
|
+
default: `## Summary\n\n## Details\n\n## Acceptance Criteria\n- [ ] \n`,
|
|
120
|
+
}]);
|
|
121
|
+
descriptionTemplate = template || undefined;
|
|
122
|
+
}
|
|
123
|
+
// Ask about default subtasks
|
|
124
|
+
const subtasks = [];
|
|
125
|
+
const { wantSubtasks } = await inquirer.prompt([{
|
|
126
|
+
type: 'list',
|
|
127
|
+
name: 'wantSubtasks',
|
|
128
|
+
message: 'Add default subtasks?',
|
|
129
|
+
choices: [
|
|
130
|
+
{ name: 'No', value: false },
|
|
131
|
+
{ name: 'Yes', value: true },
|
|
132
|
+
],
|
|
133
|
+
}]);
|
|
134
|
+
if (wantSubtasks) {
|
|
135
|
+
let addMore = true;
|
|
136
|
+
while (addMore) {
|
|
137
|
+
const { subtaskTitle } = await inquirer.prompt([{
|
|
138
|
+
type: 'input',
|
|
139
|
+
name: 'subtaskTitle',
|
|
140
|
+
message: 'Subtask title:',
|
|
141
|
+
validate: (input) => input.length > 0 || 'Title is required',
|
|
142
|
+
}]);
|
|
143
|
+
subtasks.push(subtaskTitle);
|
|
144
|
+
const { another } = await inquirer.prompt([{
|
|
145
|
+
type: 'list',
|
|
146
|
+
name: 'another',
|
|
147
|
+
message: 'Add another subtask?',
|
|
148
|
+
choices: [
|
|
149
|
+
{ name: 'No', value: false },
|
|
150
|
+
{ name: 'Yes', value: true },
|
|
151
|
+
],
|
|
152
|
+
}]);
|
|
153
|
+
addMore = another;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Show preview
|
|
157
|
+
this.log(`\n${styles.emphasis('Template Preview:')}`);
|
|
158
|
+
this.log(styles.muted(` Name: ${name}`));
|
|
159
|
+
if (description) {
|
|
160
|
+
this.log(styles.muted(` Description: ${description}`));
|
|
161
|
+
}
|
|
162
|
+
if (titlePattern) {
|
|
163
|
+
this.log(styles.muted(` Title pattern: ${titlePattern}`));
|
|
164
|
+
}
|
|
165
|
+
if (priority) {
|
|
166
|
+
this.log(styles.muted(` Default priority: ${PRIORITY_LABELS[priority] || priority}`));
|
|
167
|
+
}
|
|
168
|
+
if (category) {
|
|
169
|
+
this.log(styles.muted(` Default category: ${category}`));
|
|
170
|
+
}
|
|
171
|
+
if (descriptionTemplate) {
|
|
172
|
+
this.log(styles.muted(` Description template: (custom)`));
|
|
173
|
+
}
|
|
174
|
+
if (subtasks.length > 0) {
|
|
175
|
+
this.log(styles.muted(` Default subtasks:`));
|
|
176
|
+
for (const subtask of subtasks) {
|
|
177
|
+
this.log(styles.muted(` - ${subtask}`));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// Confirm creation
|
|
181
|
+
const { confirm } = await inquirer.prompt([{
|
|
182
|
+
type: 'list',
|
|
183
|
+
name: 'confirm',
|
|
184
|
+
message: 'Create this template?',
|
|
185
|
+
choices: [
|
|
186
|
+
{ name: 'Yes', value: true },
|
|
187
|
+
{ name: 'No', value: false },
|
|
188
|
+
],
|
|
189
|
+
}]);
|
|
190
|
+
if (!confirm) {
|
|
191
|
+
this.log(styles.muted('Cancelled.'));
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
// Create the template
|
|
195
|
+
const template = await this.storage.createTicketTemplate({
|
|
196
|
+
name: name,
|
|
197
|
+
description,
|
|
198
|
+
titlePattern,
|
|
199
|
+
defaultPriority: priority,
|
|
200
|
+
defaultCategory: category,
|
|
201
|
+
descriptionTemplate,
|
|
202
|
+
suggestedSubtasks: subtasks.map(title => ({ title })),
|
|
203
|
+
defaultLabels: [],
|
|
204
|
+
});
|
|
205
|
+
this.log(styles.success(`\nCreated template "${styles.emphasis(template.name)}"`));
|
|
206
|
+
this.log(styles.muted(` ID: ${template.id}`));
|
|
207
|
+
this.log('');
|
|
208
|
+
this.log(styles.muted(`Create ticket from template: prlt ticket template apply ${template.id}`));
|
|
209
|
+
}
|
|
210
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { PMOCommand } from '../../../lib/pmo/index.js';
|
|
2
|
+
export default class TicketTemplateDelete 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
|
+
force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
};
|
|
13
|
+
protected getPMOOptions(): {
|
|
14
|
+
promptIfMultiple: boolean;
|
|
15
|
+
};
|
|
16
|
+
execute(): Promise<void>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { Flags, Args } from '@oclif/core';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import { PMOCommand, pmoBaseFlags } from '../../../lib/pmo/index.js';
|
|
4
|
+
import { styles } from '../../../lib/styles.js';
|
|
5
|
+
import { shouldOutputJson, outputErrorAsJson, createMetadata, } from '../../../lib/prompt-json.js';
|
|
6
|
+
export default class TicketTemplateDelete extends PMOCommand {
|
|
7
|
+
static description = 'Delete a ticket template';
|
|
8
|
+
static examples = [
|
|
9
|
+
'<%= config.bin %> <%= command.id %> my-template',
|
|
10
|
+
'<%= config.bin %> <%= command.id %> my-template --force',
|
|
11
|
+
];
|
|
12
|
+
static args = {
|
|
13
|
+
id: Args.string({
|
|
14
|
+
description: 'Template ID to delete',
|
|
15
|
+
required: false,
|
|
16
|
+
}),
|
|
17
|
+
};
|
|
18
|
+
static flags = {
|
|
19
|
+
...pmoBaseFlags,
|
|
20
|
+
json: Flags.boolean({
|
|
21
|
+
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
22
|
+
default: false,
|
|
23
|
+
}),
|
|
24
|
+
force: Flags.boolean({
|
|
25
|
+
char: 'f',
|
|
26
|
+
description: 'Skip confirmation',
|
|
27
|
+
default: false,
|
|
28
|
+
}),
|
|
29
|
+
};
|
|
30
|
+
getPMOOptions() {
|
|
31
|
+
return { promptIfMultiple: false };
|
|
32
|
+
}
|
|
33
|
+
async execute() {
|
|
34
|
+
const { args, flags } = await this.parse(TicketTemplateDelete);
|
|
35
|
+
// Check if JSON output mode is active
|
|
36
|
+
const jsonMode = shouldOutputJson(flags);
|
|
37
|
+
// Helper to handle errors in JSON mode
|
|
38
|
+
const handleError = (code, message) => {
|
|
39
|
+
if (jsonMode) {
|
|
40
|
+
outputErrorAsJson(code, message, createMetadata('ticket template delete', flags));
|
|
41
|
+
this.exit(1);
|
|
42
|
+
}
|
|
43
|
+
this.error(message);
|
|
44
|
+
};
|
|
45
|
+
// Get template - prompt for selection if not provided
|
|
46
|
+
let templateId = args.id;
|
|
47
|
+
if (!templateId) {
|
|
48
|
+
const templates = await this.storage.listTicketTemplates();
|
|
49
|
+
const deletableTemplates = templates.filter(t => !t.isBuiltin);
|
|
50
|
+
if (deletableTemplates.length === 0) {
|
|
51
|
+
return handleError('NO_TEMPLATES', `No deletable ticket templates found (built-in templates cannot be deleted).`);
|
|
52
|
+
}
|
|
53
|
+
const { selectedTemplate } = await inquirer.prompt([{
|
|
54
|
+
type: 'list',
|
|
55
|
+
name: 'selectedTemplate',
|
|
56
|
+
message: 'Select a template to delete:',
|
|
57
|
+
choices: deletableTemplates.map(t => ({
|
|
58
|
+
name: `${t.name}${t.description ? ` - ${t.description}` : ''}`,
|
|
59
|
+
value: t.id,
|
|
60
|
+
})),
|
|
61
|
+
}]);
|
|
62
|
+
templateId = selectedTemplate;
|
|
63
|
+
}
|
|
64
|
+
const template = await this.storage.getTicketTemplate(templateId);
|
|
65
|
+
if (!template) {
|
|
66
|
+
return handleError('TEMPLATE_NOT_FOUND', `Template "${templateId}" not found.\nRun 'prlt ticket template list' to see available templates.`);
|
|
67
|
+
}
|
|
68
|
+
if (template.isBuiltin) {
|
|
69
|
+
return handleError('CANNOT_DELETE_BUILTIN', 'Cannot delete built-in templates.');
|
|
70
|
+
}
|
|
71
|
+
if (!flags.force) {
|
|
72
|
+
const confirmChoices = [
|
|
73
|
+
{ id: 'no', name: 'No, cancel' },
|
|
74
|
+
{ id: 'yes', name: `Yes, delete "${template.name}"` },
|
|
75
|
+
];
|
|
76
|
+
const confirm = await this.selectFromList({
|
|
77
|
+
message: `Delete template "${template.name}"?`,
|
|
78
|
+
items: confirmChoices,
|
|
79
|
+
getName: (c) => c.name,
|
|
80
|
+
getValue: (c) => c.id,
|
|
81
|
+
getCommand: (c) => c.id === 'yes' ? `prlt ticket template delete ${templateId} --force` : '',
|
|
82
|
+
jsonMode: jsonMode ? { flags, commandName: 'ticket template delete' } : null,
|
|
83
|
+
});
|
|
84
|
+
if (confirm !== 'yes') {
|
|
85
|
+
this.log(styles.muted('Cancelled.'));
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
await this.storage.deleteTicketTemplate(templateId);
|
|
90
|
+
this.log(styles.success(`\nDeleted template "${template.name}"`));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PMOCommand } from '../../../lib/pmo/index.js';
|
|
2
|
+
export default class TicketTemplateIndex extends PMOCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static aliases: string[];
|
|
5
|
+
static examples: string[];
|
|
6
|
+
static flags: {
|
|
7
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
};
|
|
10
|
+
protected getPMOOptions(): {
|
|
11
|
+
promptIfMultiple: boolean;
|
|
12
|
+
};
|
|
13
|
+
execute(): Promise<void>;
|
|
14
|
+
private selectTemplate;
|
|
15
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { 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, } from '../../../lib/prompt-json.js';
|
|
6
|
+
export default class TicketTemplateIndex extends PMOCommand {
|
|
7
|
+
static description = 'Interactive menu for ticket template operations';
|
|
8
|
+
static aliases = ['ticket:templates'];
|
|
9
|
+
static examples = [
|
|
10
|
+
'<%= config.bin %> <%= command.id %>',
|
|
11
|
+
];
|
|
12
|
+
static flags = {
|
|
13
|
+
...pmoBaseFlags,
|
|
14
|
+
json: Flags.boolean({
|
|
15
|
+
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
16
|
+
default: false,
|
|
17
|
+
}),
|
|
18
|
+
};
|
|
19
|
+
getPMOOptions() {
|
|
20
|
+
return { promptIfMultiple: false };
|
|
21
|
+
}
|
|
22
|
+
async execute() {
|
|
23
|
+
const { flags } = await this.parse(TicketTemplateIndex);
|
|
24
|
+
// Check if JSON output mode is active
|
|
25
|
+
const jsonMode = shouldOutputJson(flags);
|
|
26
|
+
// Define choices once, use for both JSON and interactive modes
|
|
27
|
+
const menuChoices = [
|
|
28
|
+
{ id: 'list', name: 'List available templates', command: 'prlt ticket template list --format json' },
|
|
29
|
+
{ id: 'create', name: 'Create new template', command: 'prlt ticket template create --json' },
|
|
30
|
+
{ id: 'apply', name: 'Create ticket from template', command: 'prlt ticket template apply --json' },
|
|
31
|
+
{ id: 'save', name: 'Save ticket as template', command: 'prlt ticket template save --json' },
|
|
32
|
+
{ id: 'delete', name: 'Delete template', command: 'prlt ticket template delete --json' },
|
|
33
|
+
{ id: 'cancel', name: 'Cancel', command: '' },
|
|
34
|
+
];
|
|
35
|
+
const message = 'Ticket Templates - What would you like to do?';
|
|
36
|
+
const action = await this.selectFromList({
|
|
37
|
+
message: 'š ' + message,
|
|
38
|
+
items: menuChoices,
|
|
39
|
+
getName: (c) => c.name,
|
|
40
|
+
getValue: (c) => c.id,
|
|
41
|
+
getCommand: (c) => c.command,
|
|
42
|
+
jsonMode: jsonMode ? { flags, commandName: 'ticket template' } : null,
|
|
43
|
+
});
|
|
44
|
+
if (action === 'cancel' || !action) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// Run the selected subcommand
|
|
48
|
+
switch (action) {
|
|
49
|
+
case 'list':
|
|
50
|
+
await this.config.runCommand('ticket:template:list', []);
|
|
51
|
+
break;
|
|
52
|
+
case 'create':
|
|
53
|
+
await this.config.runCommand('ticket:template:create', []);
|
|
54
|
+
break;
|
|
55
|
+
case 'apply': {
|
|
56
|
+
const templateId = await this.selectTemplate('Select template to use:');
|
|
57
|
+
if (templateId) {
|
|
58
|
+
await this.config.runCommand('ticket:template:apply', [templateId, '--interactive']);
|
|
59
|
+
}
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
case 'save': {
|
|
63
|
+
// Prompt for ticket ID and template name
|
|
64
|
+
const saveAnswers = await inquirer.prompt([
|
|
65
|
+
{
|
|
66
|
+
type: 'input',
|
|
67
|
+
name: 'ticketId',
|
|
68
|
+
message: 'Ticket ID to save as template:',
|
|
69
|
+
validate: (input) => input.length > 0 || 'Ticket ID is required',
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'input',
|
|
73
|
+
name: 'name',
|
|
74
|
+
message: 'Template name:',
|
|
75
|
+
validate: (input) => input.length > 0 || 'Name is required',
|
|
76
|
+
},
|
|
77
|
+
]);
|
|
78
|
+
await this.config.runCommand('ticket:template:save', [saveAnswers.ticketId, saveAnswers.name]);
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
case 'delete': {
|
|
82
|
+
const customTemplates = (await this.storage.listTicketTemplates()).filter(t => !t.isBuiltin);
|
|
83
|
+
if (customTemplates.length === 0) {
|
|
84
|
+
this.log(styles.muted('No custom templates to delete. Built-in templates cannot be deleted.'));
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const templateId = await this.selectTemplate('Select template to delete:', true);
|
|
88
|
+
if (templateId) {
|
|
89
|
+
await this.config.runCommand('ticket:template:delete', [templateId]);
|
|
90
|
+
}
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async selectTemplate(message, customOnly = false) {
|
|
96
|
+
let templates = await this.storage.listTicketTemplates();
|
|
97
|
+
if (customOnly) {
|
|
98
|
+
templates = templates.filter(t => !t.isBuiltin);
|
|
99
|
+
}
|
|
100
|
+
if (templates.length === 0) {
|
|
101
|
+
this.log(styles.muted('No templates found.'));
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
const templateChoices = templates.map(t => ({
|
|
105
|
+
id: t.id,
|
|
106
|
+
name: `${t.name} (${t.id})${t.isBuiltin ? '' : ' [custom]'}`,
|
|
107
|
+
}));
|
|
108
|
+
const selected = await this.selectFromList({
|
|
109
|
+
message,
|
|
110
|
+
items: templateChoices,
|
|
111
|
+
getName: (t) => t.name,
|
|
112
|
+
getValue: (t) => t.id,
|
|
113
|
+
getCommand: (t) => `prlt ticket template apply ${t.id} --json`,
|
|
114
|
+
allowCancel: true,
|
|
115
|
+
});
|
|
116
|
+
return selected;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PMOCommand } from '../../../lib/pmo/index.js';
|
|
2
|
+
export default class TicketTemplateList 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
|
+
private printTemplate;
|
|
16
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { Flags } from '@oclif/core';
|
|
2
|
+
import { PMOCommand, pmoBaseFlags } from '../../../lib/pmo/index.js';
|
|
3
|
+
import { styles } from '../../../lib/styles.js';
|
|
4
|
+
export default class TicketTemplateList extends PMOCommand {
|
|
5
|
+
static description = 'List available ticket templates';
|
|
6
|
+
static examples = [
|
|
7
|
+
'<%= config.bin %> <%= command.id %>',
|
|
8
|
+
'<%= config.bin %> <%= command.id %> --builtin # Only built-in templates',
|
|
9
|
+
'<%= config.bin %> <%= command.id %> --custom # Only custom templates',
|
|
10
|
+
'<%= config.bin %> <%= command.id %> --json # Output as JSON',
|
|
11
|
+
];
|
|
12
|
+
static flags = {
|
|
13
|
+
...pmoBaseFlags,
|
|
14
|
+
builtin: Flags.boolean({
|
|
15
|
+
description: 'Show only built-in templates',
|
|
16
|
+
exclusive: ['custom'],
|
|
17
|
+
}),
|
|
18
|
+
custom: Flags.boolean({
|
|
19
|
+
description: 'Show only custom templates',
|
|
20
|
+
exclusive: ['builtin'],
|
|
21
|
+
}),
|
|
22
|
+
json: Flags.boolean({
|
|
23
|
+
description: 'Output as JSON',
|
|
24
|
+
default: false,
|
|
25
|
+
}),
|
|
26
|
+
};
|
|
27
|
+
getPMOOptions() {
|
|
28
|
+
return { promptIfMultiple: false };
|
|
29
|
+
}
|
|
30
|
+
async execute() {
|
|
31
|
+
const { flags } = await this.parse(TicketTemplateList);
|
|
32
|
+
let filter;
|
|
33
|
+
if (flags.builtin)
|
|
34
|
+
filter = { isBuiltin: true };
|
|
35
|
+
if (flags.custom)
|
|
36
|
+
filter = { isBuiltin: false };
|
|
37
|
+
const templates = await this.storage.listTicketTemplates(filter);
|
|
38
|
+
if (flags.json) {
|
|
39
|
+
this.log(JSON.stringify(templates, null, 2));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (templates.length === 0) {
|
|
43
|
+
this.log(styles.muted('\nNo ticket templates found.'));
|
|
44
|
+
this.log(styles.muted('Create one: prlt ticket template save <ticket-id> "Template Name"'));
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
this.log(`\nš ${styles.emphasis('Ticket Templates')}`);
|
|
48
|
+
this.log('ā'.repeat(60));
|
|
49
|
+
// Group by builtin vs custom
|
|
50
|
+
const builtinTemplates = templates.filter(t => t.isBuiltin);
|
|
51
|
+
const customTemplates = templates.filter(t => !t.isBuiltin);
|
|
52
|
+
if (builtinTemplates.length > 0 && !flags.custom) {
|
|
53
|
+
this.log(`\n${styles.emphasis('Built-in Templates')}`);
|
|
54
|
+
this.log('ā'.repeat(40));
|
|
55
|
+
for (const template of builtinTemplates) {
|
|
56
|
+
this.printTemplate(template);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (customTemplates.length > 0 && !flags.builtin) {
|
|
60
|
+
this.log(`\n${styles.emphasis('Custom Templates')}`);
|
|
61
|
+
this.log('ā'.repeat(40));
|
|
62
|
+
for (const template of customTemplates) {
|
|
63
|
+
this.printTemplate(template);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
this.log('');
|
|
67
|
+
this.log(styles.muted('Create ticket from template: prlt ticket template apply <template-id>'));
|
|
68
|
+
this.log('');
|
|
69
|
+
}
|
|
70
|
+
printTemplate(template) {
|
|
71
|
+
this.log(`\n ${styles.emphasis(template.name)} ${styles.muted(`(${template.id})`)}`);
|
|
72
|
+
if (template.description) {
|
|
73
|
+
this.log(` ${styles.muted(template.description)}`);
|
|
74
|
+
}
|
|
75
|
+
// Show template details - first line
|
|
76
|
+
const details = [];
|
|
77
|
+
if (template.defaultPriority) {
|
|
78
|
+
details.push(`Priority: ${template.defaultPriority}`);
|
|
79
|
+
}
|
|
80
|
+
if (template.defaultCategory) {
|
|
81
|
+
details.push(`Category: ${template.defaultCategory}`);
|
|
82
|
+
}
|
|
83
|
+
if (template.suggestedSubtasks.length > 0) {
|
|
84
|
+
details.push(`Subtasks: ${template.suggestedSubtasks.length}`);
|
|
85
|
+
}
|
|
86
|
+
if (details.length > 0) {
|
|
87
|
+
this.log(` ${styles.muted(details.join(' | '))}`);
|
|
88
|
+
}
|
|
89
|
+
// Show additional details - second line
|
|
90
|
+
const details2 = [];
|
|
91
|
+
if (template.defaultStatusId) {
|
|
92
|
+
details2.push(`Status: ${template.defaultStatusId}`);
|
|
93
|
+
}
|
|
94
|
+
if (template.defaultAssignee) {
|
|
95
|
+
details2.push(`Assignee: ${template.defaultAssignee}`);
|
|
96
|
+
}
|
|
97
|
+
if (template.defaultOwner) {
|
|
98
|
+
details2.push(`Owner: ${template.defaultOwner}`);
|
|
99
|
+
}
|
|
100
|
+
if (template.defaultLabels && template.defaultLabels.length > 0) {
|
|
101
|
+
details2.push(`Labels: ${template.defaultLabels.join(', ')}`);
|
|
102
|
+
}
|
|
103
|
+
if (details2.length > 0) {
|
|
104
|
+
this.log(` ${styles.muted(details2.join(' | '))}`);
|
|
105
|
+
}
|
|
106
|
+
if (template.titlePattern) {
|
|
107
|
+
this.log(` ${styles.muted(`Title: "${template.titlePattern}"`)}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { PMOCommand } from '../../../lib/pmo/index.js';
|
|
2
|
+
export default class TicketTemplateSave extends PMOCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
ticket: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
7
|
+
name: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
8
|
+
};
|
|
9
|
+
static flags: {
|
|
10
|
+
description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
};
|
|
13
|
+
execute(): Promise<void>;
|
|
14
|
+
}
|