@proletariat/cli 0.2.0 → 0.3.1
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 +561 -251
- 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,179 @@
|
|
|
1
|
+
import { Args, Flags } from '@oclif/core';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
|
|
4
|
+
import { styles } from '../../lib/styles.js';
|
|
5
|
+
import { shouldOutputJson, outputPromptAsJson, outputErrorAsJson, createMetadata, buildPromptConfig, } from '../../lib/prompt-json.js';
|
|
6
|
+
export default class ActionRun extends PMOCommand {
|
|
7
|
+
static description = 'Run an action on one or more tickets (bulk action support)';
|
|
8
|
+
static examples = [
|
|
9
|
+
'<%= config.bin %> <%= command.id %> TKT-001 --action implement',
|
|
10
|
+
'<%= config.bin %> <%= command.id %> TKT-001 TKT-002 TKT-003 --action groom',
|
|
11
|
+
'<%= config.bin %> <%= command.id %> --all --action groom # All backlog tickets',
|
|
12
|
+
'<%= config.bin %> <%= command.id %> --category started --action review',
|
|
13
|
+
];
|
|
14
|
+
static strict = false; // Allow multiple ticket IDs
|
|
15
|
+
static args = {
|
|
16
|
+
ticketIds: Args.string({
|
|
17
|
+
description: 'Ticket ID(s) to run action on',
|
|
18
|
+
required: false,
|
|
19
|
+
}),
|
|
20
|
+
};
|
|
21
|
+
static flags = {
|
|
22
|
+
...pmoBaseFlags,
|
|
23
|
+
action: Flags.string({
|
|
24
|
+
char: 'A',
|
|
25
|
+
description: 'Action to run (e.g., groom, implement, review)',
|
|
26
|
+
required: true,
|
|
27
|
+
}),
|
|
28
|
+
all: Flags.boolean({
|
|
29
|
+
char: 'a',
|
|
30
|
+
description: 'Run on all tickets in backlog',
|
|
31
|
+
default: false,
|
|
32
|
+
}),
|
|
33
|
+
category: Flags.string({
|
|
34
|
+
char: 'c',
|
|
35
|
+
description: 'Filter tickets by status category',
|
|
36
|
+
options: ['backlog', 'unstarted', 'started', 'completed', 'canceled'],
|
|
37
|
+
}),
|
|
38
|
+
'dry-run': Flags.boolean({
|
|
39
|
+
description: 'Show what would be done without executing',
|
|
40
|
+
default: false,
|
|
41
|
+
}),
|
|
42
|
+
force: Flags.boolean({
|
|
43
|
+
char: 'f',
|
|
44
|
+
description: 'Skip confirmation prompt',
|
|
45
|
+
default: false,
|
|
46
|
+
}),
|
|
47
|
+
json: Flags.boolean({
|
|
48
|
+
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
49
|
+
default: false,
|
|
50
|
+
}),
|
|
51
|
+
};
|
|
52
|
+
async execute() {
|
|
53
|
+
const { argv, flags } = await this.parse(ActionRun);
|
|
54
|
+
const ticketIds = argv;
|
|
55
|
+
// Check if JSON output mode is active
|
|
56
|
+
const jsonMode = shouldOutputJson(flags);
|
|
57
|
+
// Helper to handle errors in JSON mode
|
|
58
|
+
const handleError = (code, message) => {
|
|
59
|
+
if (jsonMode) {
|
|
60
|
+
outputErrorAsJson(code, message, createMetadata('action run', flags));
|
|
61
|
+
this.exit(1);
|
|
62
|
+
}
|
|
63
|
+
this.error(message);
|
|
64
|
+
};
|
|
65
|
+
// Get the action
|
|
66
|
+
const action = await this.storage.getAction(flags.action);
|
|
67
|
+
if (!action) {
|
|
68
|
+
return handleError('ACTION_NOT_FOUND', `Action not found: ${flags.action}\nRun 'prlt action list' to see available actions.`);
|
|
69
|
+
}
|
|
70
|
+
// Get tickets to operate on
|
|
71
|
+
// Use -P flag to filter by project, or undefined to show all projects
|
|
72
|
+
const projectId = flags.project;
|
|
73
|
+
let tickets = [];
|
|
74
|
+
if (flags.all || flags.category) {
|
|
75
|
+
// Get tickets by filter
|
|
76
|
+
const allTickets = await this.storage.listTickets(projectId);
|
|
77
|
+
if (flags.category) {
|
|
78
|
+
tickets = allTickets.filter(t => t.statusCategory === flags.category);
|
|
79
|
+
}
|
|
80
|
+
else if (flags.all) {
|
|
81
|
+
// Default to backlog for --all
|
|
82
|
+
tickets = allTickets.filter(t => t.statusCategory === 'backlog' || !t.statusCategory);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else if (ticketIds.length > 0) {
|
|
86
|
+
// Get specific tickets
|
|
87
|
+
for (const id of ticketIds) {
|
|
88
|
+
const ticket = await this.storage.getTicket(id);
|
|
89
|
+
if (ticket) {
|
|
90
|
+
tickets.push(ticket);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
this.warn(`Ticket not found: ${id}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
// Interactive: show list of tickets to select
|
|
99
|
+
const allTickets = await this.storage.listTickets(projectId);
|
|
100
|
+
if (allTickets.length === 0) {
|
|
101
|
+
return handleError('NO_TICKETS', 'No tickets found.');
|
|
102
|
+
}
|
|
103
|
+
// In JSON mode, output ticket selection prompt
|
|
104
|
+
if (jsonMode) {
|
|
105
|
+
const ticketChoices = allTickets.map(t => ({
|
|
106
|
+
name: `${t.id} - ${t.title} [${t.statusName || t.statusCategory || 'unknown'}]`,
|
|
107
|
+
value: t.id,
|
|
108
|
+
}));
|
|
109
|
+
outputPromptAsJson(buildPromptConfig('checkbox', 'ticketIds', `Select tickets for "${action.name}" action:`, ticketChoices), createMetadata('action run', flags));
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const { selectedTickets } = await inquirer.prompt([{
|
|
113
|
+
type: 'checkbox',
|
|
114
|
+
name: 'selectedTickets',
|
|
115
|
+
message: `Select tickets for "${action.name}" action:`,
|
|
116
|
+
choices: allTickets.map(t => ({
|
|
117
|
+
name: `${t.id} - ${t.title} [${t.statusName || t.statusCategory || 'unknown'}]`,
|
|
118
|
+
value: t.id,
|
|
119
|
+
checked: action.suggestedForCategories?.includes(t.statusCategory),
|
|
120
|
+
})),
|
|
121
|
+
validate: (input) => input.length > 0 || 'Select at least one ticket',
|
|
122
|
+
}]);
|
|
123
|
+
for (const id of selectedTickets) {
|
|
124
|
+
const ticket = await this.storage.getTicket(id);
|
|
125
|
+
if (ticket)
|
|
126
|
+
tickets.push(ticket);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (tickets.length === 0) {
|
|
130
|
+
this.error('No tickets matched the criteria.');
|
|
131
|
+
}
|
|
132
|
+
// Show what will be done
|
|
133
|
+
this.log('');
|
|
134
|
+
this.log(styles.header(`🎬 Action: ${action.name}`));
|
|
135
|
+
if (action.description) {
|
|
136
|
+
this.log(styles.muted(` ${action.description}`));
|
|
137
|
+
}
|
|
138
|
+
this.log('');
|
|
139
|
+
this.log(styles.emphasis(`Tickets (${tickets.length}):`));
|
|
140
|
+
for (const ticket of tickets) {
|
|
141
|
+
const status = ticket.statusName || ticket.statusCategory || 'unknown';
|
|
142
|
+
this.log(styles.muted(` • ${ticket.id}: ${ticket.title} [${status}]`));
|
|
143
|
+
}
|
|
144
|
+
this.log('');
|
|
145
|
+
if (action.defaultMoveToCategory) {
|
|
146
|
+
this.log(styles.muted(`After action: tickets will move to "${action.defaultMoveToCategory}"`));
|
|
147
|
+
this.log('');
|
|
148
|
+
}
|
|
149
|
+
if (flags['dry-run']) {
|
|
150
|
+
this.log(styles.warning('DRY RUN - no changes made'));
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
// Confirm unless --force
|
|
154
|
+
if (!flags.force && tickets.length > 1) {
|
|
155
|
+
const { confirm } = await inquirer.prompt([{
|
|
156
|
+
type: 'confirm',
|
|
157
|
+
name: 'confirm',
|
|
158
|
+
message: `Run "${action.name}" on ${tickets.length} tickets?`,
|
|
159
|
+
default: true,
|
|
160
|
+
}]);
|
|
161
|
+
if (!confirm) {
|
|
162
|
+
this.log(styles.muted('Cancelled.'));
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Queue the action for each ticket
|
|
167
|
+
// For now, this just outputs what would be done
|
|
168
|
+
// Full implementation would integrate with work/start
|
|
169
|
+
this.log('');
|
|
170
|
+
this.log(styles.muted('To execute, run for each ticket:'));
|
|
171
|
+
for (const ticket of tickets) {
|
|
172
|
+
this.log(styles.muted(` prlt work start ${ticket.id} --action ${action.id}`));
|
|
173
|
+
}
|
|
174
|
+
this.log('');
|
|
175
|
+
this.log(styles.muted('Or use spawn-all to distribute to agents:'));
|
|
176
|
+
this.log(styles.muted(` prlt work spawn-all --action ${action.id}`));
|
|
177
|
+
this.log('');
|
|
178
|
+
}
|
|
179
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PMOCommand } from '../../lib/pmo/index.js';
|
|
2
|
+
export default class ActionShow extends PMOCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
};
|
|
11
|
+
protected getPMOOptions(): {
|
|
12
|
+
promptIfMultiple: boolean;
|
|
13
|
+
};
|
|
14
|
+
execute(): Promise<void>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Args } from '@oclif/core';
|
|
2
|
+
import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
|
|
3
|
+
import { styles } from '../../lib/styles.js';
|
|
4
|
+
export default class ActionShow extends PMOCommand {
|
|
5
|
+
static description = 'Show details of a work action';
|
|
6
|
+
static examples = [
|
|
7
|
+
'<%= config.bin %> <%= command.id %> groom',
|
|
8
|
+
'<%= config.bin %> <%= command.id %> implement',
|
|
9
|
+
];
|
|
10
|
+
static args = {
|
|
11
|
+
id: Args.string({
|
|
12
|
+
description: 'Action ID to show',
|
|
13
|
+
required: true,
|
|
14
|
+
}),
|
|
15
|
+
};
|
|
16
|
+
static flags = {
|
|
17
|
+
...pmoBaseFlags,
|
|
18
|
+
};
|
|
19
|
+
getPMOOptions() {
|
|
20
|
+
return { promptIfMultiple: false };
|
|
21
|
+
}
|
|
22
|
+
async execute() {
|
|
23
|
+
const { args } = await this.parse(ActionShow);
|
|
24
|
+
const action = await this.storage.getAction(args.id);
|
|
25
|
+
if (!action) {
|
|
26
|
+
this.error(`Action not found: ${args.id}`);
|
|
27
|
+
}
|
|
28
|
+
this.log(`\n${styles.emphasis(`Action: ${action.name}`)} ${styles.muted(`(${action.id})`)}`);
|
|
29
|
+
this.log('');
|
|
30
|
+
if (action.description) {
|
|
31
|
+
this.log(`${styles.muted('Description:')} ${action.description}`);
|
|
32
|
+
}
|
|
33
|
+
if (action.suggestedForCategories?.length) {
|
|
34
|
+
this.log(`${styles.muted('Suggested for:')} ${action.suggestedForCategories.join(', ')}`);
|
|
35
|
+
}
|
|
36
|
+
if (action.defaultMoveToCategory) {
|
|
37
|
+
this.log(`${styles.muted('Moves to:')} ${action.defaultMoveToCategory}`);
|
|
38
|
+
}
|
|
39
|
+
this.log(`${styles.muted('Built-in:')} ${action.isBuiltin ? 'Yes' : 'No'}`);
|
|
40
|
+
this.log('');
|
|
41
|
+
this.log(styles.muted('Prompt:'));
|
|
42
|
+
this.log('─'.repeat(40));
|
|
43
|
+
this.log(action.prompt);
|
|
44
|
+
this.log('─'.repeat(40));
|
|
45
|
+
this.log('');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { PMOCommand } from '../../lib/pmo/index.js';
|
|
2
|
+
export default class ActionUpdate extends PMOCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
prompt: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
'suggested-for': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
'move-to': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
interactive: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
15
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
|
+
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
|
+
};
|
|
18
|
+
protected getPMOOptions(): {
|
|
19
|
+
promptIfMultiple: boolean;
|
|
20
|
+
};
|
|
21
|
+
execute(): Promise<void>;
|
|
22
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { Args, Flags } from '@oclif/core';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
|
|
4
|
+
import { styles } from '../../lib/styles.js';
|
|
5
|
+
import { STATE_CATEGORY_ORDER } from '../../lib/pmo/types.js';
|
|
6
|
+
import { shouldOutputJson, outputPromptAsJson, outputErrorAsJson, createMetadata, buildFormPromptConfig, } from '../../lib/prompt-json.js';
|
|
7
|
+
export default class ActionUpdate extends PMOCommand {
|
|
8
|
+
static description = 'Update a work action';
|
|
9
|
+
static examples = [
|
|
10
|
+
'<%= config.bin %> <%= command.id %> my-action --name "New Name"',
|
|
11
|
+
'<%= config.bin %> <%= command.id %> my-action --prompt "Updated prompt..."',
|
|
12
|
+
'<%= config.bin %> <%= command.id %> my-action # Interactive mode',
|
|
13
|
+
];
|
|
14
|
+
static args = {
|
|
15
|
+
id: Args.string({
|
|
16
|
+
description: 'Action ID to update',
|
|
17
|
+
required: true,
|
|
18
|
+
}),
|
|
19
|
+
};
|
|
20
|
+
static flags = {
|
|
21
|
+
...pmoBaseFlags,
|
|
22
|
+
name: Flags.string({
|
|
23
|
+
char: 'n',
|
|
24
|
+
description: 'New action name',
|
|
25
|
+
}),
|
|
26
|
+
prompt: Flags.string({
|
|
27
|
+
char: 'p',
|
|
28
|
+
description: 'New prompt text',
|
|
29
|
+
}),
|
|
30
|
+
description: Flags.string({
|
|
31
|
+
char: 'd',
|
|
32
|
+
description: 'New description',
|
|
33
|
+
}),
|
|
34
|
+
'suggested-for': Flags.string({
|
|
35
|
+
description: 'Categories this action is suggested for (comma-separated)',
|
|
36
|
+
}),
|
|
37
|
+
'move-to': Flags.string({
|
|
38
|
+
description: 'Category to move ticket to after action',
|
|
39
|
+
options: ['backlog', 'unstarted', 'started', 'completed', 'canceled', ''],
|
|
40
|
+
}),
|
|
41
|
+
interactive: Flags.boolean({
|
|
42
|
+
char: 'i',
|
|
43
|
+
description: 'Interactive mode - prompt for all fields',
|
|
44
|
+
default: false,
|
|
45
|
+
}),
|
|
46
|
+
json: Flags.boolean({
|
|
47
|
+
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
48
|
+
default: false,
|
|
49
|
+
}),
|
|
50
|
+
};
|
|
51
|
+
getPMOOptions() {
|
|
52
|
+
return { promptIfMultiple: false };
|
|
53
|
+
}
|
|
54
|
+
async execute() {
|
|
55
|
+
const { args, flags } = await this.parse(ActionUpdate);
|
|
56
|
+
// Check if JSON output mode is active
|
|
57
|
+
const jsonMode = shouldOutputJson(flags);
|
|
58
|
+
// Helper to handle errors in JSON mode
|
|
59
|
+
const handleError = (code, message) => {
|
|
60
|
+
if (jsonMode) {
|
|
61
|
+
outputErrorAsJson(code, message, createMetadata('action update', flags));
|
|
62
|
+
this.exit(1);
|
|
63
|
+
}
|
|
64
|
+
this.error(message);
|
|
65
|
+
};
|
|
66
|
+
// Get current action
|
|
67
|
+
const existingAction = await this.storage.getAction(args.id);
|
|
68
|
+
if (!existingAction) {
|
|
69
|
+
return handleError('ACTION_NOT_FOUND', `Action not found: ${args.id}`);
|
|
70
|
+
}
|
|
71
|
+
if (existingAction.isBuiltin) {
|
|
72
|
+
return handleError('CANNOT_UPDATE_BUILTIN', 'Cannot update built-in actions. Create a custom action instead.');
|
|
73
|
+
}
|
|
74
|
+
const hasFlags = flags.name || flags.prompt || flags.description !== undefined ||
|
|
75
|
+
flags['suggested-for'] || flags['move-to'] !== undefined;
|
|
76
|
+
const changes = {};
|
|
77
|
+
// Interactive mode if no flags provided or --interactive flag
|
|
78
|
+
if (!hasFlags || flags.interactive) {
|
|
79
|
+
// Build choices once - single source of truth
|
|
80
|
+
const suggestedForChoices = STATE_CATEGORY_ORDER.map(c => ({ name: c, value: c }));
|
|
81
|
+
const moveToChoices = [
|
|
82
|
+
{ name: '(no change)', value: '__none__' },
|
|
83
|
+
...STATE_CATEGORY_ORDER.map(c => ({ name: c, value: c })),
|
|
84
|
+
];
|
|
85
|
+
// Define fields once - single source of truth for both JSON and interactive modes
|
|
86
|
+
const fields = [
|
|
87
|
+
{ type: 'input', name: 'name', message: 'Name:', default: existingAction.name },
|
|
88
|
+
{ type: 'input', name: 'description', message: 'Description:', default: existingAction.description || '' },
|
|
89
|
+
{ type: 'editor', name: 'prompt', message: 'Prompt (opens editor):', default: existingAction.prompt },
|
|
90
|
+
{ type: 'checkbox', name: 'suggestedFor', message: 'Suggested for categories:', choices: suggestedForChoices, default: existingAction.suggestedForCategories || [] },
|
|
91
|
+
{ type: 'list', name: 'moveTo', message: 'Move ticket to category after action:', choices: moveToChoices, default: existingAction.defaultMoveToCategory || '__none__' },
|
|
92
|
+
];
|
|
93
|
+
// In JSON mode, output form prompt
|
|
94
|
+
if (jsonMode) {
|
|
95
|
+
outputPromptAsJson(buildFormPromptConfig(fields), createMetadata('action update', flags));
|
|
96
|
+
}
|
|
97
|
+
this.log('');
|
|
98
|
+
this.log(styles.header(`Updating action: ${existingAction.name}`));
|
|
99
|
+
this.log(styles.muted('Press Enter to keep current value, or enter new value.'));
|
|
100
|
+
this.log('');
|
|
101
|
+
// Build inquirer prompts from fields, adding checkbox 'checked' state
|
|
102
|
+
const answers = await inquirer.prompt(fields.map(field => ({
|
|
103
|
+
...field,
|
|
104
|
+
// For checkbox, convert default array to checked property on choices
|
|
105
|
+
choices: field.type === 'checkbox' && field.choices
|
|
106
|
+
? field.choices.map(c => ({
|
|
107
|
+
...c,
|
|
108
|
+
checked: field.default?.includes(c.value),
|
|
109
|
+
}))
|
|
110
|
+
: field.choices,
|
|
111
|
+
})));
|
|
112
|
+
if (answers.name !== existingAction.name)
|
|
113
|
+
changes.name = answers.name;
|
|
114
|
+
if (answers.description !== (existingAction.description || ''))
|
|
115
|
+
changes.description = answers.description;
|
|
116
|
+
if (answers.prompt !== existingAction.prompt)
|
|
117
|
+
changes.prompt = answers.prompt;
|
|
118
|
+
const currentSuggested = existingAction.suggestedForCategories?.sort().join(',') || '';
|
|
119
|
+
const newSuggested = answers.suggestedFor.sort().join(',');
|
|
120
|
+
if (newSuggested !== currentSuggested) {
|
|
121
|
+
changes.suggestedForCategories = answers.suggestedFor;
|
|
122
|
+
}
|
|
123
|
+
const currentMoveTo = existingAction.defaultMoveToCategory || '__none__';
|
|
124
|
+
if (answers.moveTo !== currentMoveTo) {
|
|
125
|
+
changes.defaultMoveToCategory = answers.moveTo === '__none__' ? null : answers.moveTo;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
// Flag-based update
|
|
130
|
+
if (flags.name)
|
|
131
|
+
changes.name = flags.name;
|
|
132
|
+
if (flags.prompt)
|
|
133
|
+
changes.prompt = flags.prompt;
|
|
134
|
+
if (flags.description !== undefined)
|
|
135
|
+
changes.description = flags.description;
|
|
136
|
+
if (flags['suggested-for']) {
|
|
137
|
+
changes.suggestedForCategories = flags['suggested-for'].split(',').map(s => s.trim());
|
|
138
|
+
}
|
|
139
|
+
if (flags['move-to'] !== undefined) {
|
|
140
|
+
changes.defaultMoveToCategory = flags['move-to'] || null;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Check if any changes
|
|
144
|
+
if (Object.keys(changes).length === 0) {
|
|
145
|
+
this.log(styles.muted('No changes made.'));
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
// Convert null to undefined for storage layer compatibility
|
|
149
|
+
const updatePayload = {
|
|
150
|
+
...changes,
|
|
151
|
+
defaultMoveToCategory: changes.defaultMoveToCategory === null
|
|
152
|
+
? undefined
|
|
153
|
+
: changes.defaultMoveToCategory,
|
|
154
|
+
};
|
|
155
|
+
const action = await this.storage.updateAction(args.id, updatePayload);
|
|
156
|
+
this.log(styles.success(`\nUpdated action "${styles.emphasis(action.name)}"`));
|
|
157
|
+
if (changes.name)
|
|
158
|
+
this.log(styles.muted(` Name: ${action.name}`));
|
|
159
|
+
if (changes.description !== undefined)
|
|
160
|
+
this.log(styles.muted(` Description: ${action.description || '(none)'}`));
|
|
161
|
+
if (changes.prompt)
|
|
162
|
+
this.log(styles.muted(` Prompt: (updated)`));
|
|
163
|
+
if (changes.suggestedForCategories)
|
|
164
|
+
this.log(styles.muted(` Suggested for: ${action.suggestedForCategories?.join(', ') || '(none)'}`));
|
|
165
|
+
if (changes.defaultMoveToCategory !== undefined)
|
|
166
|
+
this.log(styles.muted(` Moves to: ${action.defaultMoveToCategory || '(none)'}`));
|
|
167
|
+
}
|
|
168
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { PMOCommand } from '../../lib/pmo/index.js';
|
|
2
|
+
export default class Agent extends PMOCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
};
|
|
9
|
+
protected getPMOOptions(): {
|
|
10
|
+
promptIfMultiple: boolean;
|
|
11
|
+
};
|
|
12
|
+
execute(): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { Flags } from '@oclif/core';
|
|
2
|
+
import { colors } from '../../lib/colors.js';
|
|
3
|
+
import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
|
|
4
|
+
import { shouldOutputJson, } from '../../lib/prompt-json.js';
|
|
5
|
+
export default class Agent extends PMOCommand {
|
|
6
|
+
static description = 'Manage agents in the workspace';
|
|
7
|
+
static examples = [
|
|
8
|
+
'<%= config.bin %> <%= command.id %> list',
|
|
9
|
+
'<%= config.bin %> <%= command.id %> status camry',
|
|
10
|
+
'<%= config.bin %> <%= command.id %> visit tacoma',
|
|
11
|
+
'<%= config.bin %> <%= command.id %> staff add',
|
|
12
|
+
'<%= config.bin %> <%= command.id %> staff remove camry',
|
|
13
|
+
'<%= config.bin %> <%= command.id %> temp cleanup --temp',
|
|
14
|
+
'<%= config.bin %> <%= command.id %> restart altman',
|
|
15
|
+
'<%= config.bin %> <%= command.id %> rebuild altman',
|
|
16
|
+
'<%= config.bin %> <%= command.id %> shell altman',
|
|
17
|
+
'<%= config.bin %> <%= command.id %> themes list',
|
|
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 { flags } = await this.parse(Agent);
|
|
31
|
+
// Check if JSON output mode is active
|
|
32
|
+
const jsonMode = shouldOutputJson(flags);
|
|
33
|
+
// Define choices once, use for both JSON and interactive modes
|
|
34
|
+
// Each choice includes the full command for AI agents to execute
|
|
35
|
+
const menuChoices = [
|
|
36
|
+
{ id: 'list', name: 'List all agents', command: 'prlt agent list --format json' },
|
|
37
|
+
{ id: 'status', name: 'Show status', command: 'prlt agent status --json' },
|
|
38
|
+
{ id: 'visit', name: 'Visit directory', command: 'prlt agent visit --json' },
|
|
39
|
+
{ id: 'staff', name: 'Manage staff agents', command: 'prlt agent staff --json' },
|
|
40
|
+
{ id: 'temp', name: 'Manage temp agents', command: 'prlt agent temp --json' },
|
|
41
|
+
{ id: 'themes', name: 'Manage themes', command: 'prlt agent themes --json' },
|
|
42
|
+
{ id: 'shell', name: 'Open shell', command: 'prlt agent shell --json' },
|
|
43
|
+
{ id: 'restart', name: 'Restart', command: 'prlt agent restart --json' },
|
|
44
|
+
{ id: 'rebuild', name: 'Rebuild', command: 'prlt agent rebuild --json' },
|
|
45
|
+
{ id: 'cancel', name: 'Cancel', command: '' },
|
|
46
|
+
];
|
|
47
|
+
const message = 'What would you like to do?';
|
|
48
|
+
this.log(colors.primary('🤖 Agent Management'));
|
|
49
|
+
this.log('');
|
|
50
|
+
this.log(colors.textMuted('Note: Agent pre-registration is no longer required!'));
|
|
51
|
+
this.log(colors.textMuted('Use "prlt work spawn" to create ephemeral agents automatically.'));
|
|
52
|
+
this.log('');
|
|
53
|
+
const action = await this.selectFromList({
|
|
54
|
+
message,
|
|
55
|
+
items: menuChoices,
|
|
56
|
+
getName: (c) => c.name,
|
|
57
|
+
getValue: (c) => c.id,
|
|
58
|
+
getCommand: (c) => c.command,
|
|
59
|
+
jsonMode: jsonMode ? { flags, commandName: 'agent' } : null,
|
|
60
|
+
});
|
|
61
|
+
if (action === 'cancel' || !action) {
|
|
62
|
+
this.log(colors.textMuted('Operation cancelled.'));
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
// Execute the selected command directly (no subprocess)
|
|
66
|
+
try {
|
|
67
|
+
this.log(colors.primary(`\nExecuting: agent ${action}`));
|
|
68
|
+
switch (action) {
|
|
69
|
+
case 'list': {
|
|
70
|
+
const { default: ListCommand } = await import('./list.js');
|
|
71
|
+
const cmd = new ListCommand([], this.config);
|
|
72
|
+
await cmd.run();
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
case 'status': {
|
|
76
|
+
const { default: StatusCommand } = await import('./status.js');
|
|
77
|
+
const cmd = new StatusCommand([], this.config);
|
|
78
|
+
await cmd.run();
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
case 'visit': {
|
|
82
|
+
const { default: VisitCommand } = await import('./visit.js');
|
|
83
|
+
const cmd = new VisitCommand([], this.config);
|
|
84
|
+
await cmd.run();
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
case 'staff': {
|
|
88
|
+
const { default: StaffCommand } = await import('./staff/index.js');
|
|
89
|
+
const cmd = new StaffCommand([], this.config);
|
|
90
|
+
await cmd.run();
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
case 'temp': {
|
|
94
|
+
const { default: TempCommand } = await import('./temp/index.js');
|
|
95
|
+
const cmd = new TempCommand([], this.config);
|
|
96
|
+
await cmd.run();
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
case 'themes': {
|
|
100
|
+
const { default: ThemesCommand } = await import('./themes/index.js');
|
|
101
|
+
const cmd = new ThemesCommand([], this.config);
|
|
102
|
+
await cmd.run();
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
case 'restart': {
|
|
106
|
+
const { default: RestartCommand } = await import('./restart.js');
|
|
107
|
+
const cmd = new RestartCommand([], this.config);
|
|
108
|
+
await cmd.run();
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
case 'rebuild': {
|
|
112
|
+
const { default: RebuildCommand } = await import('./rebuild.js');
|
|
113
|
+
const cmd = new RebuildCommand([], this.config);
|
|
114
|
+
await cmd.run();
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
case 'shell': {
|
|
118
|
+
const { default: ShellCommand } = await import('./shell.js');
|
|
119
|
+
const cmd = new ShellCommand([], this.config);
|
|
120
|
+
await cmd.run();
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
default:
|
|
124
|
+
this.error(`Unknown action: ${action}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
this.error(`Failed to execute agent ${action}: ${error instanceof Error ? error.message : String(error)}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|