@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,67 @@
|
|
|
1
|
+
import { Command, Args } from '@oclif/core';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { getWorkspaceInfo } from '../../../lib/agents/commands.js';
|
|
4
|
+
import { isValidAgentName, normalizeAgentName } from '../../../lib/themes.js';
|
|
5
|
+
import { getTheme, addThemeNames, getThemeNames } from '../../../lib/database/index.js';
|
|
6
|
+
export default class ThemesAddNames extends Command {
|
|
7
|
+
static description = 'Add names to a theme';
|
|
8
|
+
static examples = [
|
|
9
|
+
'<%= config.bin %> <%= command.id %> greek-gods zeus athena poseidon',
|
|
10
|
+
'<%= config.bin %> <%= command.id %> my-theme agent-a agent-b',
|
|
11
|
+
];
|
|
12
|
+
static args = {
|
|
13
|
+
theme: Args.string({
|
|
14
|
+
description: 'Theme ID to add names to',
|
|
15
|
+
required: true,
|
|
16
|
+
}),
|
|
17
|
+
};
|
|
18
|
+
static strict = false; // Allow multiple name arguments
|
|
19
|
+
async run() {
|
|
20
|
+
const { args, argv } = await this.parse(ThemesAddNames);
|
|
21
|
+
try {
|
|
22
|
+
const workspaceInfo = getWorkspaceInfo();
|
|
23
|
+
// Validate theme exists
|
|
24
|
+
const theme = getTheme(workspaceInfo.path, args.theme);
|
|
25
|
+
if (!theme) {
|
|
26
|
+
this.error(`Theme "${args.theme}" not found. Run "prlt agent themes list" to see available themes.`);
|
|
27
|
+
}
|
|
28
|
+
// Get names from remaining arguments (skip the theme arg)
|
|
29
|
+
const rawNames = argv.slice(1);
|
|
30
|
+
if (rawNames.length === 0) {
|
|
31
|
+
this.error('Please provide at least one name to add.');
|
|
32
|
+
}
|
|
33
|
+
// Normalize and validate names
|
|
34
|
+
const validNames = [];
|
|
35
|
+
const normalized = [];
|
|
36
|
+
for (const name of rawNames) {
|
|
37
|
+
const normalizedName = normalizeAgentName(name);
|
|
38
|
+
if (normalizedName && isValidAgentName(normalizedName)) {
|
|
39
|
+
validNames.push(normalizedName);
|
|
40
|
+
if (normalizedName !== name) {
|
|
41
|
+
normalized.push({ original: name, normalized: normalizedName });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (validNames.length === 0) {
|
|
46
|
+
this.error('No valid names to add after normalization.');
|
|
47
|
+
}
|
|
48
|
+
// Show normalizations
|
|
49
|
+
if (normalized.length > 0) {
|
|
50
|
+
this.log(chalk.blue('Normalized names:'));
|
|
51
|
+
for (const { original, normalized: norm } of normalized) {
|
|
52
|
+
this.log(chalk.dim(` ${original} ā ${norm}`));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Add names to theme
|
|
56
|
+
addThemeNames(workspaceInfo.path, theme.id, validNames);
|
|
57
|
+
// Get updated count
|
|
58
|
+
const allNames = getThemeNames(workspaceInfo.path, theme.id);
|
|
59
|
+
this.log(chalk.green(`\n Added ${validNames.length} name(s) to ${theme.display_name}:`));
|
|
60
|
+
this.log(chalk.gray(` ${validNames.join(', ')}`));
|
|
61
|
+
this.log(chalk.gray(`\n Theme now has ${allNames.length} names total.`));
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
this.error(error instanceof Error ? error.message : String(error));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class ThemesCreate extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
name: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
'display-name': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Command, Args, Flags } from '@oclif/core';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { getWorkspaceInfo } from '../../../lib/agents/commands.js';
|
|
4
|
+
import { createTheme, getTheme } from '../../../lib/database/index.js';
|
|
5
|
+
export default class ThemesCreate extends Command {
|
|
6
|
+
static description = 'Create a custom agent theme';
|
|
7
|
+
static examples = [
|
|
8
|
+
'<%= config.bin %> <%= command.id %> greek-gods',
|
|
9
|
+
'<%= config.bin %> <%= command.id %> greek-gods --description "Mount Olympus crew"',
|
|
10
|
+
'<%= config.bin %> <%= command.id %> greek-gods --display-name "Greek Gods"',
|
|
11
|
+
];
|
|
12
|
+
static args = {
|
|
13
|
+
name: Args.string({
|
|
14
|
+
description: 'Theme name (used as ID, lowercase with hyphens)',
|
|
15
|
+
required: true,
|
|
16
|
+
}),
|
|
17
|
+
};
|
|
18
|
+
static flags = {
|
|
19
|
+
description: Flags.string({
|
|
20
|
+
char: 'd',
|
|
21
|
+
description: 'Theme description',
|
|
22
|
+
}),
|
|
23
|
+
'display-name': Flags.string({
|
|
24
|
+
description: 'Display name (defaults to formatted name)',
|
|
25
|
+
}),
|
|
26
|
+
};
|
|
27
|
+
async run() {
|
|
28
|
+
const { args, flags } = await this.parse(ThemesCreate);
|
|
29
|
+
try {
|
|
30
|
+
const workspaceInfo = getWorkspaceInfo();
|
|
31
|
+
// Validate theme name format
|
|
32
|
+
const name = args.name.toLowerCase().replace(/\s+/g, '-');
|
|
33
|
+
if (!/^[a-z0-9][a-z0-9-]*$/.test(name)) {
|
|
34
|
+
this.error('Theme name must be lowercase alphanumeric with optional hyphens.');
|
|
35
|
+
}
|
|
36
|
+
// Check if theme already exists
|
|
37
|
+
const existing = getTheme(workspaceInfo.path, name);
|
|
38
|
+
if (existing) {
|
|
39
|
+
this.error(`Theme "${name}" already exists.`);
|
|
40
|
+
}
|
|
41
|
+
// Create display name from name if not provided
|
|
42
|
+
const displayName = flags['display-name'] || name
|
|
43
|
+
.split('-')
|
|
44
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
|
|
45
|
+
.join(' ');
|
|
46
|
+
// Create the theme
|
|
47
|
+
const theme = createTheme(workspaceInfo.path, {
|
|
48
|
+
id: name,
|
|
49
|
+
name: name,
|
|
50
|
+
displayName: displayName,
|
|
51
|
+
description: flags.description,
|
|
52
|
+
builtin: false,
|
|
53
|
+
});
|
|
54
|
+
this.log(chalk.green(`\n Created theme: ${theme.display_name}`));
|
|
55
|
+
this.log(chalk.gray(` ID: ${theme.id}`));
|
|
56
|
+
if (theme.description) {
|
|
57
|
+
this.log(chalk.gray(` ${theme.description}`));
|
|
58
|
+
}
|
|
59
|
+
this.log('');
|
|
60
|
+
this.log(chalk.blue('Add names with: prlt agent themes add-names ' + name + ' <names...>'));
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
this.error(error instanceof Error ? error.message : String(error));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { Command, Flags } from '@oclif/core';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { getWorkspaceInfo } from '../../../lib/agents/commands.js';
|
|
5
|
+
import { ensureBuiltinThemes } from '../../../lib/themes.js';
|
|
6
|
+
import { getThemes, getThemeNames } from '../../../lib/database/index.js';
|
|
7
|
+
import { shouldOutputJson, outputPromptAsJson, createMetadata, buildPromptConfig, } from '../../../lib/prompt-json.js';
|
|
8
|
+
export default class Themes extends Command {
|
|
9
|
+
static description = 'Manage agent naming themes';
|
|
10
|
+
static examples = [
|
|
11
|
+
'<%= config.bin %> <%= command.id %> list',
|
|
12
|
+
'<%= config.bin %> <%= command.id %> create greek-gods',
|
|
13
|
+
'<%= config.bin %> <%= command.id %> add-names greek-gods zeus athena',
|
|
14
|
+
];
|
|
15
|
+
static flags = {
|
|
16
|
+
json: Flags.boolean({
|
|
17
|
+
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
18
|
+
default: false,
|
|
19
|
+
}),
|
|
20
|
+
};
|
|
21
|
+
async run() {
|
|
22
|
+
const { flags } = await this.parse(Themes);
|
|
23
|
+
// Check if JSON output mode is active
|
|
24
|
+
const jsonMode = shouldOutputJson(flags);
|
|
25
|
+
// Define choices once, use for both JSON and interactive modes
|
|
26
|
+
// Each choice includes the full command for AI agents to execute
|
|
27
|
+
const menuChoices = [
|
|
28
|
+
{ id: 'list', name: 'List themes', command: 'prlt agent themes list --format json' },
|
|
29
|
+
{ id: 'create', name: 'Create a new theme', command: 'prlt agent themes create --json' },
|
|
30
|
+
{ id: 'add-names', name: 'Add names to a theme', command: 'prlt agent themes add-names --json' },
|
|
31
|
+
{ id: 'cancel', name: 'Cancel', command: '' },
|
|
32
|
+
];
|
|
33
|
+
const message = 'What would you like to do?';
|
|
34
|
+
// In JSON mode, output menu prompt with commands for AI agents
|
|
35
|
+
if (jsonMode) {
|
|
36
|
+
outputPromptAsJson(buildPromptConfig('list', 'action', message, menuChoices.map(c => ({
|
|
37
|
+
name: c.name,
|
|
38
|
+
value: c.id,
|
|
39
|
+
command: c.command,
|
|
40
|
+
}))), createMetadata('agent themes', flags));
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
this.log(chalk.bold('\nAgent Themes'));
|
|
44
|
+
this.log(chalk.dim('Optional themed name pools for your agents.\n'));
|
|
45
|
+
const { action } = await inquirer.prompt([{
|
|
46
|
+
type: 'list',
|
|
47
|
+
name: 'action',
|
|
48
|
+
message,
|
|
49
|
+
choices: [
|
|
50
|
+
...menuChoices.slice(0, 3).map(c => ({ name: c.name, value: c.id })),
|
|
51
|
+
new inquirer.Separator(),
|
|
52
|
+
{ name: menuChoices[3].name, value: menuChoices[3].id }
|
|
53
|
+
]
|
|
54
|
+
}]);
|
|
55
|
+
if (action === 'cancel') {
|
|
56
|
+
this.log(chalk.dim('Cancelled.'));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
switch (action) {
|
|
61
|
+
case 'list': {
|
|
62
|
+
const { default: ListCommand } = await import('./list.js');
|
|
63
|
+
const cmd = new ListCommand([], this.config);
|
|
64
|
+
await cmd.run();
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
case 'create': {
|
|
68
|
+
// Prompt for theme name interactively
|
|
69
|
+
const { themeName } = await inquirer.prompt([{
|
|
70
|
+
type: 'input',
|
|
71
|
+
name: 'themeName',
|
|
72
|
+
message: 'Theme name:',
|
|
73
|
+
validate: (input) => {
|
|
74
|
+
if (!input.trim())
|
|
75
|
+
return 'Theme name is required';
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
}]);
|
|
79
|
+
// Normalize: lowercase, spaces to dashes
|
|
80
|
+
const normalized = themeName.trim().toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '');
|
|
81
|
+
if (themeName.trim() !== normalized) {
|
|
82
|
+
this.log(chalk.blue(`Normalized: ${themeName.trim()} ā ${normalized}`));
|
|
83
|
+
}
|
|
84
|
+
const { default: CreateCommand } = await import('./create.js');
|
|
85
|
+
const cmd = new CreateCommand([normalized], this.config);
|
|
86
|
+
await cmd.run();
|
|
87
|
+
// Prompt to add names immediately
|
|
88
|
+
const { addNamesNow } = await inquirer.prompt([{
|
|
89
|
+
type: 'list',
|
|
90
|
+
name: 'addNamesNow',
|
|
91
|
+
message: 'Add names to this theme now?',
|
|
92
|
+
choices: [
|
|
93
|
+
{ name: 'Yes', value: true },
|
|
94
|
+
{ name: 'No', value: false },
|
|
95
|
+
],
|
|
96
|
+
}]);
|
|
97
|
+
if (addNamesNow) {
|
|
98
|
+
const { names } = await inquirer.prompt([{
|
|
99
|
+
type: 'input',
|
|
100
|
+
name: 'names',
|
|
101
|
+
message: 'Enter names (space-separated):',
|
|
102
|
+
validate: (input) => input.trim() ? true : 'At least one name is required'
|
|
103
|
+
}]);
|
|
104
|
+
const args = [normalized, ...names.trim().split(/\s+/)];
|
|
105
|
+
const { default: AddNamesCommand } = await import('./add-names.js');
|
|
106
|
+
const addCmd = new AddNamesCommand(args, this.config);
|
|
107
|
+
await addCmd.run();
|
|
108
|
+
}
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
case 'add-names': {
|
|
112
|
+
// Get available themes and show a selection list
|
|
113
|
+
const workspaceInfo = getWorkspaceInfo();
|
|
114
|
+
ensureBuiltinThemes(workspaceInfo.path);
|
|
115
|
+
const themes = getThemes(workspaceInfo.path);
|
|
116
|
+
if (themes.length === 0) {
|
|
117
|
+
this.log(chalk.yellow('No themes found. Create one first.'));
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
// Build choices with theme info
|
|
121
|
+
const themeChoices = themes.map(t => {
|
|
122
|
+
const names = getThemeNames(workspaceInfo.path, t.id);
|
|
123
|
+
const available = names.filter(n => !n.used).length;
|
|
124
|
+
const builtinTag = t.builtin ? chalk.dim(' [built-in]') : '';
|
|
125
|
+
return {
|
|
126
|
+
name: `${t.display_name}${builtinTag} ${chalk.dim(`(${available} names available)`)}`,
|
|
127
|
+
value: t.id
|
|
128
|
+
};
|
|
129
|
+
});
|
|
130
|
+
// Add option to create new theme
|
|
131
|
+
themeChoices.push(new inquirer.Separator());
|
|
132
|
+
themeChoices.push({ name: chalk.green('+ Create new theme'), value: '__create_new__' });
|
|
133
|
+
const { selectedTheme } = await inquirer.prompt([{
|
|
134
|
+
type: 'list',
|
|
135
|
+
name: 'selectedTheme',
|
|
136
|
+
message: 'Select theme to add names to:',
|
|
137
|
+
choices: themeChoices
|
|
138
|
+
}]);
|
|
139
|
+
// If they want to create a new theme first
|
|
140
|
+
if (selectedTheme === '__create_new__') {
|
|
141
|
+
const { themeName } = await inquirer.prompt([{
|
|
142
|
+
type: 'input',
|
|
143
|
+
name: 'themeName',
|
|
144
|
+
message: 'Theme name:',
|
|
145
|
+
validate: (input) => {
|
|
146
|
+
if (!input.trim())
|
|
147
|
+
return 'Theme name is required';
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
}]);
|
|
151
|
+
// Normalize: lowercase, spaces to dashes
|
|
152
|
+
const normalizedTheme = themeName.trim().toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '');
|
|
153
|
+
if (themeName.trim() !== normalizedTheme) {
|
|
154
|
+
this.log(chalk.blue(`Normalized: ${themeName.trim()} ā ${normalizedTheme}`));
|
|
155
|
+
}
|
|
156
|
+
const { default: CreateCommand } = await import('./create.js');
|
|
157
|
+
const createCmd = new CreateCommand([normalizedTheme], this.config);
|
|
158
|
+
await createCmd.run();
|
|
159
|
+
// Now prompt for names to add to the new theme
|
|
160
|
+
const { names } = await inquirer.prompt([{
|
|
161
|
+
type: 'input',
|
|
162
|
+
name: 'names',
|
|
163
|
+
message: 'Names to add (space-separated):',
|
|
164
|
+
validate: (input) => input.trim() ? true : 'At least one name is required'
|
|
165
|
+
}]);
|
|
166
|
+
const args = [normalizedTheme, ...names.trim().split(/\s+/)];
|
|
167
|
+
const { default: AddNamesCommand } = await import('./add-names.js');
|
|
168
|
+
const cmd = new AddNamesCommand(args, this.config);
|
|
169
|
+
await cmd.run();
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
// Prompt for names to add
|
|
173
|
+
const { names } = await inquirer.prompt([{
|
|
174
|
+
type: 'input',
|
|
175
|
+
name: 'names',
|
|
176
|
+
message: 'Names to add (space-separated):',
|
|
177
|
+
validate: (input) => input.trim() ? true : 'At least one name is required'
|
|
178
|
+
}]);
|
|
179
|
+
const args = [selectedTheme, ...names.trim().split(/\s+/)];
|
|
180
|
+
const { default: AddNamesCommand } = await import('./add-names.js');
|
|
181
|
+
const cmd = new AddNamesCommand(args, this.config);
|
|
182
|
+
await cmd.run();
|
|
183
|
+
}
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
default:
|
|
187
|
+
this.error(`Unknown action: ${action}`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
this.error(error instanceof Error ? error.message : String(error));
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { getWorkspaceInfo } from '../../../lib/agents/commands.js';
|
|
4
|
+
import { ensureBuiltinThemes } from '../../../lib/themes.js';
|
|
5
|
+
import { getThemes, getThemeNames } from '../../../lib/database/index.js';
|
|
6
|
+
export default class ThemesList extends Command {
|
|
7
|
+
static description = 'List available agent themes';
|
|
8
|
+
static examples = [
|
|
9
|
+
'<%= config.bin %> <%= command.id %>',
|
|
10
|
+
];
|
|
11
|
+
async run() {
|
|
12
|
+
try {
|
|
13
|
+
const workspaceInfo = getWorkspaceInfo();
|
|
14
|
+
// Ensure built-in themes are seeded
|
|
15
|
+
ensureBuiltinThemes(workspaceInfo.path);
|
|
16
|
+
const themes = getThemes(workspaceInfo.path);
|
|
17
|
+
if (themes.length === 0) {
|
|
18
|
+
this.log(chalk.yellow('No themes found.'));
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
this.log(chalk.bold('\nAgent Themes\n'));
|
|
22
|
+
for (const theme of themes) {
|
|
23
|
+
const names = getThemeNames(workspaceInfo.path, theme.id);
|
|
24
|
+
const available = names.filter(n => !n.used).length;
|
|
25
|
+
const used = names.filter(n => n.used).length;
|
|
26
|
+
const builtinTag = theme.builtin ? chalk.gray(' [built-in]') : '';
|
|
27
|
+
this.log(` ${chalk.cyan(theme.display_name)}${builtinTag}`);
|
|
28
|
+
this.log(chalk.gray(` ID: ${theme.id}`));
|
|
29
|
+
if (theme.description) {
|
|
30
|
+
this.log(chalk.gray(` ${theme.description}`));
|
|
31
|
+
}
|
|
32
|
+
this.log(chalk.gray(` Names: ${chalk.green(available + ' available')}, ${chalk.yellow(used + ' in use')}`));
|
|
33
|
+
this.log('');
|
|
34
|
+
}
|
|
35
|
+
this.log(chalk.blue('Use: prlt agent add --theme <theme-id>'));
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
this.error(error instanceof Error ? error.message : String(error));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class ThemesSet extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
theme: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
};
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Command, Args, Flags } from '@oclif/core';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import inquirer from 'inquirer';
|
|
4
|
+
import { getWorkspaceInfo } from '../../../lib/agents/commands.js';
|
|
5
|
+
import { ensureBuiltinThemes } from '../../../lib/themes.js';
|
|
6
|
+
import { getThemes, getAvailableThemeNames, setActiveTheme, getActiveTheme } from '../../../lib/database/index.js';
|
|
7
|
+
import { shouldOutputJson, outputPromptAsJson, createMetadata, buildPromptConfig, } from '../../../lib/prompt-json.js';
|
|
8
|
+
export default class ThemesSet extends Command {
|
|
9
|
+
static description = 'Set the active theme for this workspace';
|
|
10
|
+
static examples = [
|
|
11
|
+
'<%= config.bin %> <%= command.id %> billionaires',
|
|
12
|
+
'<%= config.bin %> <%= command.id %>',
|
|
13
|
+
];
|
|
14
|
+
static args = {
|
|
15
|
+
theme: Args.string({
|
|
16
|
+
description: 'Theme ID to set as active',
|
|
17
|
+
required: false,
|
|
18
|
+
}),
|
|
19
|
+
};
|
|
20
|
+
static flags = {
|
|
21
|
+
json: Flags.boolean({
|
|
22
|
+
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
23
|
+
default: false,
|
|
24
|
+
}),
|
|
25
|
+
};
|
|
26
|
+
async run() {
|
|
27
|
+
const { args, flags } = await this.parse(ThemesSet);
|
|
28
|
+
// Check if JSON output mode is active
|
|
29
|
+
const jsonMode = shouldOutputJson(flags);
|
|
30
|
+
try {
|
|
31
|
+
const workspaceInfo = getWorkspaceInfo();
|
|
32
|
+
ensureBuiltinThemes(workspaceInfo.path);
|
|
33
|
+
let themeId = args.theme;
|
|
34
|
+
if (!themeId) {
|
|
35
|
+
// Interactive selection
|
|
36
|
+
const themes = getThemes(workspaceInfo.path);
|
|
37
|
+
const currentTheme = getActiveTheme(workspaceInfo.path);
|
|
38
|
+
// In JSON mode, output theme selection prompt
|
|
39
|
+
if (jsonMode) {
|
|
40
|
+
const themeChoices = themes.map(t => {
|
|
41
|
+
const availableCount = getAvailableThemeNames(workspaceInfo.path, t.id).length;
|
|
42
|
+
const isCurrent = currentTheme?.id === t.id;
|
|
43
|
+
return {
|
|
44
|
+
name: `${t.display_name} (${availableCount} available)${isCurrent ? ' ā current' : ''}`,
|
|
45
|
+
value: t.id
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
outputPromptAsJson(buildPromptConfig('list', 'theme', 'Select theme for this workspace:', themeChoices), createMetadata('agent themes set', flags));
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const choices = themes.map(t => {
|
|
52
|
+
const availableCount = getAvailableThemeNames(workspaceInfo.path, t.id).length;
|
|
53
|
+
const isCurrent = currentTheme?.id === t.id;
|
|
54
|
+
return {
|
|
55
|
+
name: `${t.display_name} ${chalk.dim(`(${availableCount} available)`)}${isCurrent ? chalk.green(' ā current') : ''}`,
|
|
56
|
+
value: t.id
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
const { selected } = await inquirer.prompt([{
|
|
60
|
+
type: 'list',
|
|
61
|
+
name: 'selected',
|
|
62
|
+
message: 'Select theme for this workspace:',
|
|
63
|
+
choices
|
|
64
|
+
}]);
|
|
65
|
+
themeId = selected;
|
|
66
|
+
}
|
|
67
|
+
setActiveTheme(workspaceInfo.path, themeId);
|
|
68
|
+
const themes = getThemes(workspaceInfo.path);
|
|
69
|
+
const theme = themes.find(t => t.id === themeId);
|
|
70
|
+
this.log(chalk.green(`\nā Active theme set to: ${theme?.display_name || themeId}`));
|
|
71
|
+
this.log(chalk.dim(' New agents will be selected from this theme.'));
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
this.error(error instanceof Error ? error.message : String(error));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PMOCommand } from '../../lib/pmo/index.js';
|
|
2
|
+
export default class Visit 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,88 @@
|
|
|
1
|
+
import { Args, Flags } from '@oclif/core';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import inquirer from 'inquirer';
|
|
4
|
+
import { colors } from '../../lib/colors.js';
|
|
5
|
+
import { getWorkspaceInfo } from '../../lib/agents/commands.js';
|
|
6
|
+
import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
|
|
7
|
+
import { shouldOutputJson, outputPromptAsJson, outputErrorAsJson, createMetadata, buildPromptConfig, } from '../../lib/prompt-json.js';
|
|
8
|
+
export default class Visit extends PMOCommand {
|
|
9
|
+
static description = 'Navigate to agent directory';
|
|
10
|
+
static examples = [
|
|
11
|
+
'<%= config.bin %> <%= command.id %> camry',
|
|
12
|
+
'<%= config.bin %> <%= command.id %>',
|
|
13
|
+
];
|
|
14
|
+
static args = {
|
|
15
|
+
name: Args.string({
|
|
16
|
+
description: 'Agent name to visit',
|
|
17
|
+
required: false,
|
|
18
|
+
}),
|
|
19
|
+
};
|
|
20
|
+
static flags = {
|
|
21
|
+
...pmoBaseFlags,
|
|
22
|
+
json: Flags.boolean({
|
|
23
|
+
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
24
|
+
default: false,
|
|
25
|
+
}),
|
|
26
|
+
};
|
|
27
|
+
getPMOOptions() {
|
|
28
|
+
return { promptIfMultiple: false };
|
|
29
|
+
}
|
|
30
|
+
async execute() {
|
|
31
|
+
const { args, flags } = await this.parse(Visit);
|
|
32
|
+
// Check if JSON output mode is active
|
|
33
|
+
const jsonMode = shouldOutputJson(flags);
|
|
34
|
+
// Helper to handle errors in JSON mode
|
|
35
|
+
const handleError = (code, message) => {
|
|
36
|
+
if (jsonMode) {
|
|
37
|
+
outputErrorAsJson(code, message, createMetadata('agent visit', flags));
|
|
38
|
+
this.exit(1);
|
|
39
|
+
}
|
|
40
|
+
this.error(message);
|
|
41
|
+
};
|
|
42
|
+
// Get workspace information
|
|
43
|
+
const workspaceInfo = getWorkspaceInfo();
|
|
44
|
+
if (workspaceInfo.agents.length === 0) {
|
|
45
|
+
if (jsonMode) {
|
|
46
|
+
outputErrorAsJson('NO_AGENTS', 'No agents found. Add agents with "prlt agent add"', createMetadata('agent visit', flags));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
this.log(colors.warning('No agents found. Add agents with "prlt agent add"'));
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
let agentName = args.name;
|
|
53
|
+
// Interactive mode if no agent specified
|
|
54
|
+
if (!agentName) {
|
|
55
|
+
// In JSON mode, output agent selection prompt
|
|
56
|
+
if (jsonMode) {
|
|
57
|
+
const agentChoices = workspaceInfo.agents.map((agent) => ({ name: agent.name, value: agent.name }));
|
|
58
|
+
outputPromptAsJson(buildPromptConfig('list', 'name', 'Select agent to visit:', agentChoices), createMetadata('agent visit', flags));
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const { selected } = await inquirer.prompt([
|
|
62
|
+
{
|
|
63
|
+
type: 'list',
|
|
64
|
+
name: 'selected',
|
|
65
|
+
message: 'Select agent to visit:',
|
|
66
|
+
choices: workspaceInfo.agents.map(agent => ({
|
|
67
|
+
name: agent.name,
|
|
68
|
+
value: agent.name
|
|
69
|
+
}))
|
|
70
|
+
}
|
|
71
|
+
]);
|
|
72
|
+
agentName = selected;
|
|
73
|
+
}
|
|
74
|
+
// Validate agent exists
|
|
75
|
+
const agent = workspaceInfo.agents.find(a => a.name === agentName);
|
|
76
|
+
if (!agent) {
|
|
77
|
+
return handleError('AGENT_NOT_FOUND', `Agent "${agentName}" not found. Available agents: ${workspaceInfo.agents.map(a => a.name).join(', ')}`);
|
|
78
|
+
}
|
|
79
|
+
// Calculate path to agent directory
|
|
80
|
+
const agentDir = path.join(workspaceInfo.agentsPath, agentName);
|
|
81
|
+
const relativePath = path.relative(process.cwd(), agentDir);
|
|
82
|
+
// Display navigation command
|
|
83
|
+
this.log(colors.primary(`š¤ Visiting agent: ${agentName}`));
|
|
84
|
+
this.log(colors.command(`cd ${relativePath}`));
|
|
85
|
+
this.log('');
|
|
86
|
+
this.log(colors.textSecondary('Note: Due to shell limitations, you need to run this command manually.'));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class AutocompleteSetup extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
install: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
shell: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
};
|
|
9
|
+
run(): Promise<void>;
|
|
10
|
+
private detectShell;
|
|
11
|
+
private getShellConfig;
|
|
12
|
+
private showInstructions;
|
|
13
|
+
private installAutocomplete;
|
|
14
|
+
}
|