@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,14 @@
|
|
|
1
|
+
import { PMOCommand } from '../../../lib/pmo/index.js';
|
|
2
|
+
export default class Staff extends PMOCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
'no-interactive': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
};
|
|
10
|
+
protected getPMOOptions(): {
|
|
11
|
+
promptIfMultiple: boolean;
|
|
12
|
+
};
|
|
13
|
+
execute(): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { Flags } from '@oclif/core';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import { colors } from '../../../lib/colors.js';
|
|
4
|
+
import { PMOCommand, pmoBaseFlags } from '../../../lib/pmo/index.js';
|
|
5
|
+
import { shouldOutputJson, outputPromptAsJson, createMetadata, buildPromptConfig, } from '../../../lib/prompt-json.js';
|
|
6
|
+
export default class Staff extends PMOCommand {
|
|
7
|
+
static description = 'Manage staff (persistent) agents';
|
|
8
|
+
static examples = [
|
|
9
|
+
'<%= config.bin %> <%= command.id %> list',
|
|
10
|
+
'<%= config.bin %> <%= command.id %> add',
|
|
11
|
+
'<%= config.bin %> <%= command.id %> remove camry',
|
|
12
|
+
];
|
|
13
|
+
static flags = {
|
|
14
|
+
...pmoBaseFlags,
|
|
15
|
+
json: Flags.boolean({
|
|
16
|
+
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
17
|
+
default: false,
|
|
18
|
+
}),
|
|
19
|
+
'no-interactive': Flags.boolean({
|
|
20
|
+
description: 'Alias for --json flag',
|
|
21
|
+
default: false,
|
|
22
|
+
}),
|
|
23
|
+
};
|
|
24
|
+
getPMOOptions() {
|
|
25
|
+
return { promptIfMultiple: false };
|
|
26
|
+
}
|
|
27
|
+
async execute() {
|
|
28
|
+
const { flags } = await this.parse(Staff);
|
|
29
|
+
// Check if JSON output mode is active
|
|
30
|
+
const jsonMode = shouldOutputJson(flags);
|
|
31
|
+
// Define choices once, use for both JSON and interactive modes
|
|
32
|
+
const menuChoices = [
|
|
33
|
+
{ name: 'List staff agents', value: 'list' },
|
|
34
|
+
{ name: 'Add staff agent', value: 'add' },
|
|
35
|
+
{ name: 'Remove staff agent', value: 'remove' },
|
|
36
|
+
{ name: 'Cancel', value: 'cancel' },
|
|
37
|
+
];
|
|
38
|
+
const message = 'What would you like to do?';
|
|
39
|
+
// In JSON mode, output menu prompt
|
|
40
|
+
if (jsonMode) {
|
|
41
|
+
outputPromptAsJson(buildPromptConfig('list', 'action', message, menuChoices), createMetadata('agent staff', flags));
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
this.log(colors.primary('Staff Agents'));
|
|
45
|
+
this.log(colors.textMuted('Persistent agents with dedicated worktrees.\n'));
|
|
46
|
+
const { action } = await inquirer.prompt([{
|
|
47
|
+
type: 'list',
|
|
48
|
+
name: 'action',
|
|
49
|
+
message,
|
|
50
|
+
choices: [
|
|
51
|
+
{ name: 'š ' + menuChoices[0].name, value: menuChoices[0].value },
|
|
52
|
+
{ name: 'ā ' + menuChoices[1].name, value: menuChoices[1].value },
|
|
53
|
+
{ name: 'šļø ' + menuChoices[2].name, value: menuChoices[2].value },
|
|
54
|
+
new inquirer.Separator(),
|
|
55
|
+
{ name: 'ā ' + menuChoices[3].name, value: menuChoices[3].value },
|
|
56
|
+
]
|
|
57
|
+
}]);
|
|
58
|
+
if (action === 'cancel') {
|
|
59
|
+
this.log(colors.textMuted('Operation cancelled.'));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
switch (action) {
|
|
64
|
+
case 'list': {
|
|
65
|
+
const { default: ListCommand } = await import('./list.js');
|
|
66
|
+
const cmd = new ListCommand([], this.config);
|
|
67
|
+
await cmd.run();
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
case 'add': {
|
|
71
|
+
const { default: AddCommand } = await import('./add.js');
|
|
72
|
+
const cmd = new AddCommand([], this.config);
|
|
73
|
+
await cmd.run();
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
case 'remove': {
|
|
77
|
+
const { default: RemoveCommand } = await import('./remove.js');
|
|
78
|
+
const cmd = new RemoveCommand([], this.config);
|
|
79
|
+
await cmd.run();
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
default:
|
|
83
|
+
this.error(`Unknown action: ${action}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
this.error(`Failed to execute staff ${action}: ${error instanceof Error ? error.message : String(error)}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import * as fs from 'node:fs';
|
|
5
|
+
import { getWorkspaceInfo, getAllAgentsStatus } from '../../../lib/agents/commands.js';
|
|
6
|
+
export default class List extends Command {
|
|
7
|
+
static description = 'List all staff (persistent) agents and their status';
|
|
8
|
+
static examples = [
|
|
9
|
+
'<%= config.bin %> <%= command.id %>',
|
|
10
|
+
];
|
|
11
|
+
static flags = {};
|
|
12
|
+
async run() {
|
|
13
|
+
try {
|
|
14
|
+
// Get workspace information
|
|
15
|
+
const workspaceInfo = getWorkspaceInfo();
|
|
16
|
+
// Filter to staff agents only
|
|
17
|
+
const staffAgents = workspaceInfo.agents.filter(a => a.type === 'persistent');
|
|
18
|
+
if (staffAgents.length === 0) {
|
|
19
|
+
this.log(chalk.yellow('No staff agents found. Add staff agents with "prlt agent staff add"'));
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
// Get status for all agents and filter to staff
|
|
23
|
+
const agentsStatus = getAllAgentsStatus(workspaceInfo);
|
|
24
|
+
const staffStatus = agentsStatus.filter(a => staffAgents.some(s => s.name === a.name));
|
|
25
|
+
this.log(chalk.bold.cyan('\n Staff Agents:\n'));
|
|
26
|
+
for (const agentStatus of staffStatus) {
|
|
27
|
+
// Agent info line
|
|
28
|
+
const statusIcon = agentStatus.exists ? 'š¢' : 'š“';
|
|
29
|
+
const status = agentStatus.exists ? chalk.green('Active') : chalk.red('Missing');
|
|
30
|
+
this.log(`${statusIcon} ${chalk.bold(agentStatus.name)} - ${status}`);
|
|
31
|
+
if (agentStatus.exists) {
|
|
32
|
+
// Show branch info
|
|
33
|
+
if (agentStatus.branch) {
|
|
34
|
+
this.log(chalk.cyan(` Branch: ${agentStatus.branch}`));
|
|
35
|
+
}
|
|
36
|
+
// Show repository status
|
|
37
|
+
if (agentStatus.repositories.length > 0) {
|
|
38
|
+
const dirtyRepos = agentStatus.repositories.filter(r => r.status === 'dirty').length;
|
|
39
|
+
const reposWithCommits = agentStatus.repositories.filter(r => r.commitsAhead > 0);
|
|
40
|
+
let repoStatusText = `${agentStatus.repositories.length} repo(s)`;
|
|
41
|
+
if (dirtyRepos > 0) {
|
|
42
|
+
repoStatusText += `, ${dirtyRepos} dirty`;
|
|
43
|
+
}
|
|
44
|
+
if (reposWithCommits.length > 0) {
|
|
45
|
+
const commitDetails = reposWithCommits.map(r => `${r.name}(+${r.commitsAhead})`).join(', ');
|
|
46
|
+
repoStatusText += `, commits ahead: ${commitDetails}`;
|
|
47
|
+
}
|
|
48
|
+
this.log(chalk.white(` Repositories: ${repoStatusText}`));
|
|
49
|
+
}
|
|
50
|
+
// Show ticket info
|
|
51
|
+
if (agentStatus.assignedTickets.length > 0) {
|
|
52
|
+
this.log(chalk.blue(` Current tickets: ${agentStatus.assignedTickets.join(', ')}`));
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
this.log(chalk.white(' No active tickets'));
|
|
56
|
+
}
|
|
57
|
+
if (agentStatus.completedTickets.length > 0) {
|
|
58
|
+
this.log(chalk.white(` Completed: ${agentStatus.completedTickets.length} ticket(s)`));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
const agentDir = path.join(workspaceInfo.agentsPath, agentStatus.name);
|
|
63
|
+
const dirExists = fs.existsSync(agentDir);
|
|
64
|
+
if (dirExists) {
|
|
65
|
+
this.log(chalk.red(` Invalid or broken worktrees`));
|
|
66
|
+
this.log(chalk.yellow(' Agent directory exists but worktrees are missing or corrupted'));
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
this.log(chalk.red(` Agent directory not found`));
|
|
70
|
+
}
|
|
71
|
+
this.log(chalk.white(' Run "prlt agent staff add" to recreate'));
|
|
72
|
+
}
|
|
73
|
+
this.log(''); // Empty line between agents
|
|
74
|
+
}
|
|
75
|
+
// Summary
|
|
76
|
+
const activeCount = staffStatus.filter(a => a.exists).length;
|
|
77
|
+
const totalAssignedTickets = staffStatus.reduce((sum, a) => sum + a.assignedTickets.length, 0);
|
|
78
|
+
this.log(chalk.bold(`Summary:`));
|
|
79
|
+
this.log(` Total staff agents: ${staffAgents.length}`);
|
|
80
|
+
this.log(` Active: ${activeCount}`);
|
|
81
|
+
this.log(` Inactive: ${staffAgents.length - activeCount}`);
|
|
82
|
+
if (workspaceInfo.hasPMO) {
|
|
83
|
+
this.log(` Tickets assigned: ${totalAssignedTickets}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
this.error(error instanceof Error ? error.message : String(error));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PMOCommand } from '../../../lib/pmo/index.js';
|
|
2
|
+
export default class Remove extends PMOCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
name: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
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,137 @@
|
|
|
1
|
+
import { Args, Flags } from '@oclif/core';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import { colors, format } from '../../../lib/colors.js';
|
|
4
|
+
import { getWorkspaceInfo, removeAgentsFromWorkspace } from '../../../lib/agents/commands.js';
|
|
5
|
+
import { PMOCommand, pmoBaseFlags } from '../../../lib/pmo/index.js';
|
|
6
|
+
import { shouldOutputJson, outputPromptAsJson, outputErrorAsJson, createMetadata, buildPromptConfig, } from '../../../lib/prompt-json.js';
|
|
7
|
+
export default class Remove extends PMOCommand {
|
|
8
|
+
static description = 'Remove a specific agent from the workspace';
|
|
9
|
+
static examples = [
|
|
10
|
+
'<%= config.bin %> <%= command.id %> camry',
|
|
11
|
+
'<%= config.bin %> <%= command.id %>',
|
|
12
|
+
];
|
|
13
|
+
static args = {
|
|
14
|
+
name: Args.string({
|
|
15
|
+
description: 'Agent name to remove',
|
|
16
|
+
required: false,
|
|
17
|
+
}),
|
|
18
|
+
};
|
|
19
|
+
static flags = {
|
|
20
|
+
...pmoBaseFlags,
|
|
21
|
+
json: Flags.boolean({
|
|
22
|
+
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
23
|
+
default: false,
|
|
24
|
+
}),
|
|
25
|
+
};
|
|
26
|
+
getPMOOptions() {
|
|
27
|
+
return { promptIfMultiple: false };
|
|
28
|
+
}
|
|
29
|
+
async execute() {
|
|
30
|
+
const { args, flags } = await this.parse(Remove);
|
|
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('agent remove', flags));
|
|
37
|
+
this.exit(1);
|
|
38
|
+
}
|
|
39
|
+
this.error(message);
|
|
40
|
+
};
|
|
41
|
+
// Get workspace information
|
|
42
|
+
const workspaceInfo = getWorkspaceInfo();
|
|
43
|
+
if (workspaceInfo.agents.length === 0) {
|
|
44
|
+
if (jsonMode) {
|
|
45
|
+
outputErrorAsJson('NO_AGENTS', 'No agents to remove.', createMetadata('agent remove', flags));
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
this.log(colors.warning('No agents to remove.'));
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
let agentName = args.name;
|
|
52
|
+
// Interactive mode if no agent specified
|
|
53
|
+
if (!agentName) {
|
|
54
|
+
// Build choices once, use for both JSON and interactive modes
|
|
55
|
+
const agentChoices = [
|
|
56
|
+
...workspaceInfo.agents.map((agent) => ({ name: agent.name, value: agent.name })),
|
|
57
|
+
{ name: 'Cancel', value: 'cancel' },
|
|
58
|
+
];
|
|
59
|
+
const selectMessage = 'Select agent to remove:';
|
|
60
|
+
// In JSON mode, output agent selection prompt
|
|
61
|
+
if (jsonMode) {
|
|
62
|
+
outputPromptAsJson(buildPromptConfig('list', 'name', selectMessage, agentChoices), createMetadata('agent remove', flags));
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const { selected } = await inquirer.prompt([
|
|
66
|
+
{
|
|
67
|
+
type: 'list',
|
|
68
|
+
name: 'selected',
|
|
69
|
+
message: selectMessage,
|
|
70
|
+
choices: [
|
|
71
|
+
...agentChoices.slice(0, -1),
|
|
72
|
+
new inquirer.Separator(),
|
|
73
|
+
{ name: 'ā ' + agentChoices[agentChoices.length - 1].name, value: agentChoices[agentChoices.length - 1].value }
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
]);
|
|
77
|
+
if (selected === 'cancel') {
|
|
78
|
+
this.log(colors.textMuted('Operation cancelled.'));
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
agentName = selected;
|
|
82
|
+
}
|
|
83
|
+
// Validate agent exists
|
|
84
|
+
const agent = workspaceInfo.agents.find((a) => a.name === agentName);
|
|
85
|
+
if (!agent) {
|
|
86
|
+
return handleError('AGENT_NOT_FOUND', `Agent "${agentName}" not found. Available agents: ${workspaceInfo.agents.map((a) => a.name).join(', ')}`);
|
|
87
|
+
}
|
|
88
|
+
const agentsToRemove = [agentName];
|
|
89
|
+
// Build choices once, use for both JSON and interactive modes
|
|
90
|
+
const confirmChoices = [
|
|
91
|
+
{ name: 'No, cancel', value: 'false' },
|
|
92
|
+
{ name: 'Yes, remove agent', value: 'true' },
|
|
93
|
+
];
|
|
94
|
+
const confirmMessage = `Are you sure you want to remove agent "${agentName}"? This will delete its worktree.`;
|
|
95
|
+
// Confirm removal
|
|
96
|
+
// In JSON mode, output confirmation prompt
|
|
97
|
+
if (jsonMode) {
|
|
98
|
+
outputPromptAsJson(buildPromptConfig('list', 'confirmed', confirmMessage, confirmChoices), createMetadata('agent remove', flags));
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const { confirm } = await inquirer.prompt([
|
|
102
|
+
{
|
|
103
|
+
type: 'list',
|
|
104
|
+
name: 'confirm',
|
|
105
|
+
message: confirmMessage,
|
|
106
|
+
choices: [
|
|
107
|
+
{ name: 'ā ' + confirmChoices[0].name, value: false },
|
|
108
|
+
{ name: 'ā ļø ' + confirmChoices[1].name, value: true }
|
|
109
|
+
],
|
|
110
|
+
default: 0 // Default to "No, cancel"
|
|
111
|
+
}
|
|
112
|
+
]);
|
|
113
|
+
if (!confirm) {
|
|
114
|
+
this.log(colors.textMuted('Removal cancelled.'));
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
// Remove agents
|
|
118
|
+
this.log(colors.primary(`Removing agent "${agentName}"...`));
|
|
119
|
+
const { removed, failed } = await removeAgentsFromWorkspace(workspaceInfo, agentsToRemove);
|
|
120
|
+
// Show results for each agent
|
|
121
|
+
for (const agentName of agentsToRemove) {
|
|
122
|
+
if (removed.includes(agentName)) {
|
|
123
|
+
this.log(format.success(`Agent ${agentName} removed`));
|
|
124
|
+
}
|
|
125
|
+
else if (failed.includes(agentName)) {
|
|
126
|
+
this.log(format.error(`Failed to remove agent ${agentName}`));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Summary
|
|
130
|
+
if (removed.length > 0) {
|
|
131
|
+
this.log(format.success(`\nSuccessfully removed ${removed.length} agent(s): ${removed.join(', ')}`));
|
|
132
|
+
}
|
|
133
|
+
if (failed.length > 0) {
|
|
134
|
+
this.log(format.error(`\nFailed to remove ${failed.length} agent(s): ${failed.join(', ')}`));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { PMOCommand } from '../../lib/pmo/index.js';
|
|
2
|
+
export default class Status extends PMOCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
name: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
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
|
+
private showDetailedStatus;
|
|
17
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { Args, Flags } from '@oclif/core';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import { colors, format } from '../../lib/colors.js';
|
|
4
|
+
import { getWorkspaceInfo, getAgentStatus } from '../../lib/agents/commands.js';
|
|
5
|
+
import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
|
|
6
|
+
import { shouldOutputJson, outputPromptAsJson, outputErrorAsJson, createMetadata, buildPromptConfig, } from '../../lib/prompt-json.js';
|
|
7
|
+
export default class Status extends PMOCommand {
|
|
8
|
+
static description = 'Show detailed status for a specific agent';
|
|
9
|
+
static examples = [
|
|
10
|
+
'<%= config.bin %> <%= command.id %> agent-1',
|
|
11
|
+
'<%= config.bin %> <%= command.id %>',
|
|
12
|
+
];
|
|
13
|
+
static args = {
|
|
14
|
+
name: Args.string({
|
|
15
|
+
description: 'Agent name for detailed status',
|
|
16
|
+
required: false,
|
|
17
|
+
}),
|
|
18
|
+
};
|
|
19
|
+
static flags = {
|
|
20
|
+
...pmoBaseFlags,
|
|
21
|
+
json: Flags.boolean({
|
|
22
|
+
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
23
|
+
default: false,
|
|
24
|
+
}),
|
|
25
|
+
};
|
|
26
|
+
getPMOOptions() {
|
|
27
|
+
return { promptIfMultiple: false };
|
|
28
|
+
}
|
|
29
|
+
async execute() {
|
|
30
|
+
const { args, flags } = await this.parse(Status);
|
|
31
|
+
// Check if JSON output mode is active
|
|
32
|
+
const jsonMode = shouldOutputJson(flags);
|
|
33
|
+
// Get workspace information
|
|
34
|
+
const workspaceInfo = getWorkspaceInfo();
|
|
35
|
+
if (workspaceInfo.agents.length === 0) {
|
|
36
|
+
if (jsonMode) {
|
|
37
|
+
outputErrorAsJson('NO_AGENTS', 'No agents found. Add agents with "prlt agent add"', createMetadata('agent status', flags));
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
this.log(colors.warning('No agents found. Add agents with "prlt agent add"'));
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
let agentName = args.name;
|
|
44
|
+
// Interactive mode if no agent specified
|
|
45
|
+
if (!agentName) {
|
|
46
|
+
// In JSON mode, output agent selection prompt
|
|
47
|
+
if (jsonMode) {
|
|
48
|
+
const agentChoices = workspaceInfo.agents.map((agent) => ({ name: agent.name, value: agent.name }));
|
|
49
|
+
outputPromptAsJson(buildPromptConfig('list', 'name', 'Select agent to view status:', agentChoices), createMetadata('agent status', flags));
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const { selected } = await inquirer.prompt([
|
|
53
|
+
{
|
|
54
|
+
type: 'list',
|
|
55
|
+
name: 'selected',
|
|
56
|
+
message: 'Select agent to view status:',
|
|
57
|
+
choices: workspaceInfo.agents.map((agent) => ({
|
|
58
|
+
name: agent.name,
|
|
59
|
+
value: agent.name
|
|
60
|
+
}))
|
|
61
|
+
}
|
|
62
|
+
]);
|
|
63
|
+
agentName = selected;
|
|
64
|
+
}
|
|
65
|
+
await this.showDetailedStatus(workspaceInfo, agentName);
|
|
66
|
+
}
|
|
67
|
+
async showDetailedStatus(workspaceInfo, agentName) {
|
|
68
|
+
// Validate agent exists
|
|
69
|
+
const agent = workspaceInfo.agents.find((a) => a.name === agentName);
|
|
70
|
+
if (!agent) {
|
|
71
|
+
this.error(`Agent "${agentName}" not found. Available agents: ${workspaceInfo.agents.map((a) => a.name).join(', ')}`);
|
|
72
|
+
}
|
|
73
|
+
const agentStatus = getAgentStatus(workspaceInfo, agentName);
|
|
74
|
+
this.log(format.title(`š¤ Agent: ${agentName}`));
|
|
75
|
+
// Basic status
|
|
76
|
+
const statusIcon = agentStatus.exists ? 'š¢' : 'š“';
|
|
77
|
+
const status = agentStatus.exists ? colors.active('Active') : colors.inactive('Missing');
|
|
78
|
+
this.log(`${statusIcon} Status: ${status}`);
|
|
79
|
+
if (!agentStatus.exists) {
|
|
80
|
+
this.log(colors.error(' Agent directory not found'));
|
|
81
|
+
this.log(colors.textSecondary(' Run "prlt agent add" to recreate'));
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
// Location
|
|
85
|
+
this.log(`š Location: ${colors.path(`${workspaceInfo.agentsPath}/${agentName}`)}`);
|
|
86
|
+
// Branch info
|
|
87
|
+
if (agentStatus.branch) {
|
|
88
|
+
this.log(`šæ Branch: ${colors.warning(agentStatus.branch)}`);
|
|
89
|
+
}
|
|
90
|
+
// Repository status
|
|
91
|
+
this.log(format.subtitle('\nš Repositories:'));
|
|
92
|
+
if (agentStatus.repositories.length === 0) {
|
|
93
|
+
this.log(colors.textMuted(' No repositories configured'));
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
for (const repo of agentStatus.repositories) {
|
|
97
|
+
let statusText = '';
|
|
98
|
+
let statusColor = colors.textMuted;
|
|
99
|
+
switch (repo.status) {
|
|
100
|
+
case 'clean':
|
|
101
|
+
statusText = 'clean';
|
|
102
|
+
statusColor = colors.repoClean;
|
|
103
|
+
break;
|
|
104
|
+
case 'dirty':
|
|
105
|
+
statusText = 'dirty';
|
|
106
|
+
statusColor = colors.repoDirty;
|
|
107
|
+
break;
|
|
108
|
+
case 'missing':
|
|
109
|
+
statusText = 'missing';
|
|
110
|
+
statusColor = colors.repoMissing;
|
|
111
|
+
break;
|
|
112
|
+
default:
|
|
113
|
+
statusText = repo.status;
|
|
114
|
+
statusColor = colors.textMuted;
|
|
115
|
+
}
|
|
116
|
+
let repoLine = ` ⢠${colors.text(repo.name)} (${statusColor(statusText)})`;
|
|
117
|
+
if (repo.commitsAhead > 0) {
|
|
118
|
+
repoLine += colors.commitsAhead(` ${repo.commitsAhead} commits ahead`);
|
|
119
|
+
}
|
|
120
|
+
this.log(repoLine);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Ticket assignments
|
|
124
|
+
if (workspaceInfo.hasPMO) {
|
|
125
|
+
this.log(format.subtitle('\nš« Tickets:'));
|
|
126
|
+
if (agentStatus.assignedTickets.length === 0 && agentStatus.completedTickets.length === 0) {
|
|
127
|
+
this.log(colors.textSecondary(' No tickets assigned'));
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
if (agentStatus.assignedTickets.length > 0) {
|
|
131
|
+
this.log(` Active: ${colors.primary(agentStatus.assignedTickets.join(', '))}`);
|
|
132
|
+
}
|
|
133
|
+
if (agentStatus.completedTickets.length > 0) {
|
|
134
|
+
this.log(` Completed: ${colors.textMuted(agentStatus.completedTickets.length + ' ticket(s)')}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { PMOCommand } from '../../../lib/pmo/index.js';
|
|
2
|
+
export default class Cleanup extends PMOCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
name: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
temp: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
all: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
|
+
yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
14
|
+
push: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
15
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
|
+
'no-interactive': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
17
|
+
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
|
+
};
|
|
19
|
+
protected getPMOOptions(): {
|
|
20
|
+
promptIfMultiple: boolean;
|
|
21
|
+
};
|
|
22
|
+
execute(): Promise<void>;
|
|
23
|
+
}
|