@proletariat/cli 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +512 -253
- package/bin/dev.cmd +3 -0
- package/bin/dev.js +5 -0
- package/bin/run.cmd +3 -0
- package/bin/run.js +23 -0
- package/dist/commands/action/create.d.ts +21 -0
- package/dist/commands/action/create.js +126 -0
- package/dist/commands/action/delete.d.ts +17 -0
- package/dist/commands/action/delete.js +78 -0
- package/dist/commands/action/index.d.ts +15 -0
- package/dist/commands/action/index.js +107 -0
- package/dist/commands/action/list.d.ts +14 -0
- package/dist/commands/action/list.js +89 -0
- package/dist/commands/action/run.d.ts +19 -0
- package/dist/commands/action/run.js +179 -0
- package/dist/commands/action/show.d.ts +15 -0
- package/dist/commands/action/show.js +47 -0
- package/dist/commands/action/update.d.ts +22 -0
- package/dist/commands/action/update.js +168 -0
- package/dist/commands/agent/index.d.ts +13 -0
- package/dist/commands/agent/index.js +131 -0
- package/dist/commands/agent/list.d.ts +7 -0
- package/dist/commands/agent/list.js +126 -0
- package/dist/commands/agent/login.d.ts +16 -0
- package/dist/commands/agent/login.js +146 -0
- package/dist/commands/agent/rebuild.d.ts +18 -0
- package/dist/commands/agent/rebuild.js +133 -0
- package/dist/commands/agent/restart.d.ts +17 -0
- package/dist/commands/agent/restart.js +116 -0
- package/dist/commands/agent/shell.d.ts +23 -0
- package/dist/commands/agent/shell.js +378 -0
- package/dist/commands/agent/staff/add.d.ts +15 -0
- package/dist/commands/agent/staff/add.js +281 -0
- package/dist/commands/agent/staff/index.d.ts +14 -0
- package/dist/commands/agent/staff/index.js +90 -0
- package/dist/commands/agent/staff/list.d.ts +7 -0
- package/dist/commands/agent/staff/list.js +90 -0
- package/dist/commands/agent/staff/remove.d.ts +16 -0
- package/dist/commands/agent/staff/remove.js +137 -0
- package/dist/commands/agent/status.d.ts +17 -0
- package/dist/commands/agent/status.js +139 -0
- package/dist/commands/agent/temp/cleanup.d.ts +23 -0
- package/dist/commands/agent/temp/cleanup.js +388 -0
- package/dist/commands/agent/temp/index.d.ts +14 -0
- package/dist/commands/agent/temp/index.js +82 -0
- package/dist/commands/agent/temp/list.d.ts +7 -0
- package/dist/commands/agent/temp/list.js +108 -0
- package/dist/commands/agent/themes/add-names.d.ts +10 -0
- package/dist/commands/agent/themes/add-names.js +67 -0
- package/dist/commands/agent/themes/create.d.ts +13 -0
- package/dist/commands/agent/themes/create.js +66 -0
- package/dist/commands/agent/themes/index.d.ts +9 -0
- package/dist/commands/agent/themes/index.js +194 -0
- package/dist/commands/agent/themes/list.d.ts +6 -0
- package/dist/commands/agent/themes/list.js +41 -0
- package/dist/commands/agent/themes/set.d.ts +12 -0
- package/dist/commands/agent/themes/set.js +77 -0
- package/dist/commands/agent/visit.d.ts +16 -0
- package/dist/commands/agent/visit.js +88 -0
- package/dist/commands/autocomplete/setup.d.ts +14 -0
- package/dist/commands/autocomplete/setup.js +154 -0
- package/dist/commands/board/index.d.ts +17 -0
- package/dist/commands/board/index.js +255 -0
- package/dist/commands/board/watch.d.ts +13 -0
- package/dist/commands/board/watch.js +52 -0
- package/dist/commands/branch/create.d.ts +50 -0
- package/dist/commands/branch/create.js +624 -0
- package/dist/commands/branch/index.d.ts +13 -0
- package/dist/commands/branch/index.js +50 -0
- package/dist/commands/branch/list.d.ts +17 -0
- package/dist/commands/branch/list.js +120 -0
- package/dist/commands/branch/validate.d.ts +15 -0
- package/dist/commands/branch/validate.js +73 -0
- package/dist/commands/commit.d.ts +71 -0
- package/dist/commands/commit.js +499 -0
- package/dist/commands/docker/clean.d.ts +13 -0
- package/dist/commands/docker/clean.js +224 -0
- package/dist/commands/docker/index.d.ts +19 -0
- package/dist/commands/docker/index.js +274 -0
- package/dist/commands/docker/list.d.ts +16 -0
- package/dist/commands/docker/list.js +200 -0
- package/dist/commands/docker/logs.d.ts +14 -0
- package/dist/commands/docker/logs.js +118 -0
- package/dist/commands/docker/prune.d.ts +14 -0
- package/dist/commands/docker/prune.js +211 -0
- package/dist/commands/docker/restart.d.ts +14 -0
- package/dist/commands/docker/restart.js +129 -0
- package/dist/commands/docker/shell.d.ts +14 -0
- package/dist/commands/docker/shell.js +103 -0
- package/dist/commands/docker/start.d.ts +12 -0
- package/dist/commands/docker/start.js +92 -0
- package/dist/commands/docker/status.d.ts +7 -0
- package/dist/commands/docker/status.js +40 -0
- package/dist/commands/docker/stop.d.ts +14 -0
- package/dist/commands/docker/stop.js +134 -0
- package/dist/commands/docker/sync.d.ts +15 -0
- package/dist/commands/docker/sync.js +112 -0
- package/dist/commands/epic/activate.d.ts +13 -0
- package/dist/commands/epic/activate.js +118 -0
- package/dist/commands/epic/archive.d.ts +14 -0
- package/dist/commands/epic/archive.js +132 -0
- package/dist/commands/epic/create.d.ts +15 -0
- package/dist/commands/epic/create.js +137 -0
- package/dist/commands/epic/index.d.ts +13 -0
- package/dist/commands/epic/index.js +88 -0
- package/dist/commands/epic/link/block.d.ts +14 -0
- package/dist/commands/epic/link/block.js +79 -0
- package/dist/commands/epic/link/duplicates.d.ts +14 -0
- package/dist/commands/epic/link/duplicates.js +66 -0
- package/dist/commands/epic/link/index.d.ts +19 -0
- package/dist/commands/epic/link/index.js +242 -0
- package/dist/commands/epic/link/relates.d.ts +14 -0
- package/dist/commands/epic/link/relates.js +66 -0
- package/dist/commands/epic/link/remove.d.ts +16 -0
- package/dist/commands/epic/link/remove.js +89 -0
- package/dist/commands/epic/list.d.ts +11 -0
- package/dist/commands/epic/list.js +87 -0
- package/dist/commands/epic/move.d.ts +15 -0
- package/dist/commands/epic/move.js +184 -0
- package/dist/commands/epic/progress.d.ts +16 -0
- package/dist/commands/epic/progress.js +166 -0
- package/dist/commands/epic/project.d.ts +15 -0
- package/dist/commands/epic/project.js +219 -0
- package/dist/commands/epic/reorder.d.ts +21 -0
- package/dist/commands/epic/reorder.js +160 -0
- package/dist/commands/epic/spec.d.ts +15 -0
- package/dist/commands/epic/spec.js +191 -0
- package/dist/commands/epic/ticket.d.ts +18 -0
- package/dist/commands/epic/ticket.js +291 -0
- package/dist/commands/epic/view.d.ts +13 -0
- package/dist/commands/epic/view.js +117 -0
- package/dist/commands/execution/index.d.ts +13 -0
- package/dist/commands/execution/index.js +70 -0
- package/dist/commands/execution/list.d.ts +15 -0
- package/dist/commands/execution/list.js +144 -0
- package/dist/commands/execution/logs.d.ts +18 -0
- package/dist/commands/execution/logs.js +161 -0
- package/dist/commands/execution/stop.d.ts +22 -0
- package/dist/commands/execution/stop.js +248 -0
- package/dist/commands/gh/index.d.ts +9 -0
- package/dist/commands/gh/index.js +53 -0
- package/dist/commands/gh/login.d.ts +6 -0
- package/dist/commands/gh/login.js +57 -0
- package/dist/commands/gh/status.d.ts +6 -0
- package/dist/commands/gh/status.js +48 -0
- package/dist/commands/gh/token.d.ts +6 -0
- package/dist/commands/gh/token.js +59 -0
- package/dist/commands/init.d.ts +26 -0
- package/dist/commands/init.js +200 -0
- package/dist/commands/phase/create.d.ts +22 -0
- package/dist/commands/phase/create.js +123 -0
- package/dist/commands/phase/delete.d.ts +17 -0
- package/dist/commands/phase/delete.js +73 -0
- package/dist/commands/phase/list.d.ts +12 -0
- package/dist/commands/phase/list.js +76 -0
- package/dist/commands/phase/move.d.ts +17 -0
- package/dist/commands/phase/move.js +115 -0
- package/dist/commands/phase/template/apply.d.ts +17 -0
- package/dist/commands/phase/template/apply.js +106 -0
- package/dist/commands/phase/template/create.d.ts +16 -0
- package/dist/commands/phase/template/create.js +58 -0
- package/dist/commands/phase/template/delete.d.ts +17 -0
- package/dist/commands/phase/template/delete.js +98 -0
- package/dist/commands/phase/template/index.d.ts +15 -0
- package/dist/commands/phase/template/index.js +128 -0
- package/dist/commands/phase/template/list.d.ts +16 -0
- package/dist/commands/phase/template/list.js +95 -0
- package/dist/commands/phase/template/update.d.ts +17 -0
- package/dist/commands/phase/template/update.js +89 -0
- package/dist/commands/phase/update.d.ts +23 -0
- package/dist/commands/phase/update.js +174 -0
- package/dist/commands/pmo/init.d.ts +25 -0
- package/dist/commands/pmo/init.js +341 -0
- package/dist/commands/pr/create.d.ts +17 -0
- package/dist/commands/pr/create.js +242 -0
- package/dist/commands/pr/index.d.ts +9 -0
- package/dist/commands/pr/index.js +68 -0
- package/dist/commands/pr/link.d.ts +14 -0
- package/dist/commands/pr/link.js +212 -0
- package/dist/commands/pr/status.d.ts +12 -0
- package/dist/commands/pr/status.js +161 -0
- package/dist/commands/project/archive.d.ts +17 -0
- package/dist/commands/project/archive.js +83 -0
- package/dist/commands/project/create.d.ts +22 -0
- package/dist/commands/project/create.js +143 -0
- package/dist/commands/project/delete.d.ts +17 -0
- package/dist/commands/project/delete.js +128 -0
- package/dist/commands/project/index.d.ts +13 -0
- package/dist/commands/project/index.js +64 -0
- package/dist/commands/project/list.d.ts +14 -0
- package/dist/commands/project/list.js +96 -0
- package/dist/commands/project/spec.d.ts +18 -0
- package/dist/commands/project/spec.js +216 -0
- package/dist/commands/project/unarchive.d.ts +15 -0
- package/dist/commands/project/unarchive.js +35 -0
- package/dist/commands/project/view.d.ts +16 -0
- package/dist/commands/project/view.js +94 -0
- package/dist/commands/repo/add.d.ts +21 -0
- package/dist/commands/repo/add.js +118 -0
- package/dist/commands/repo/index.d.ts +13 -0
- package/dist/commands/repo/index.js +114 -0
- package/dist/commands/repo/list.d.ts +13 -0
- package/dist/commands/repo/list.js +96 -0
- package/dist/commands/repo/remove.d.ts +23 -0
- package/dist/commands/repo/remove.js +217 -0
- package/dist/commands/repo/view.d.ts +15 -0
- package/dist/commands/repo/view.js +99 -0
- package/dist/commands/session/attach.d.ts +40 -0
- package/dist/commands/session/attach.js +307 -0
- package/dist/commands/session/index.d.ts +13 -0
- package/dist/commands/session/index.js +64 -0
- package/dist/commands/session/list.d.ts +21 -0
- package/dist/commands/session/list.js +181 -0
- package/dist/commands/spec/create.d.ts +19 -0
- package/dist/commands/spec/create.js +130 -0
- package/dist/commands/spec/index.d.ts +13 -0
- package/dist/commands/spec/index.js +68 -0
- package/dist/commands/spec/link/depends.d.ts +14 -0
- package/dist/commands/spec/link/depends.js +64 -0
- package/dist/commands/spec/link/duplicates.d.ts +14 -0
- package/dist/commands/spec/link/duplicates.js +63 -0
- package/dist/commands/spec/link/index.d.ts +19 -0
- package/dist/commands/spec/link/index.js +200 -0
- package/dist/commands/spec/link/relates.d.ts +14 -0
- package/dist/commands/spec/link/relates.js +63 -0
- package/dist/commands/spec/link/remove.d.ts +16 -0
- package/dist/commands/spec/link/remove.js +94 -0
- package/dist/commands/spec/list.d.ts +12 -0
- package/dist/commands/spec/list.js +75 -0
- package/dist/commands/spec/plan.d.ts +15 -0
- package/dist/commands/spec/plan.js +108 -0
- package/dist/commands/spec/ticket.d.ts +18 -0
- package/dist/commands/spec/ticket.js +160 -0
- package/dist/commands/spec/view.d.ts +15 -0
- package/dist/commands/spec/view.js +163 -0
- package/dist/commands/status/create.d.ts +21 -0
- package/dist/commands/status/create.js +140 -0
- package/dist/commands/status/delete.d.ts +13 -0
- package/dist/commands/status/delete.js +77 -0
- package/dist/commands/status/index.d.ts +14 -0
- package/dist/commands/status/index.js +91 -0
- package/dist/commands/status/list.d.ts +12 -0
- package/dist/commands/status/list.js +93 -0
- package/dist/commands/status/move.d.ts +14 -0
- package/dist/commands/status/move.js +120 -0
- package/dist/commands/status/update.d.ts +20 -0
- package/dist/commands/status/update.js +180 -0
- package/dist/commands/template/delete.d.ts +15 -0
- package/dist/commands/template/delete.js +142 -0
- package/dist/commands/template/index.d.ts +10 -0
- package/dist/commands/template/index.js +64 -0
- package/dist/commands/template/list.d.ts +18 -0
- package/dist/commands/template/list.js +157 -0
- package/dist/commands/template/phase/apply.d.ts +14 -0
- package/dist/commands/template/phase/apply.js +41 -0
- package/dist/commands/template/phase/create.d.ts +12 -0
- package/dist/commands/template/phase/create.js +29 -0
- package/dist/commands/template/phase/delete.d.ts +13 -0
- package/dist/commands/template/phase/delete.js +34 -0
- package/dist/commands/template/phase/index.d.ts +10 -0
- package/dist/commands/template/phase/index.js +62 -0
- package/dist/commands/template/phase/list.d.ts +11 -0
- package/dist/commands/template/phase/list.js +34 -0
- package/dist/commands/template/phase/update.d.ts +13 -0
- package/dist/commands/template/phase/update.js +35 -0
- package/dist/commands/template/ticket/apply.d.ts +17 -0
- package/dist/commands/template/ticket/apply.js +58 -0
- package/dist/commands/template/ticket/delete.d.ts +13 -0
- package/dist/commands/template/ticket/delete.js +34 -0
- package/dist/commands/template/ticket/index.d.ts +10 -0
- package/dist/commands/template/ticket/index.js +62 -0
- package/dist/commands/template/ticket/list.d.ts +11 -0
- package/dist/commands/template/ticket/list.js +34 -0
- package/dist/commands/template/ticket/save.d.ts +13 -0
- package/dist/commands/template/ticket/save.js +35 -0
- package/dist/commands/ticket/bulk.d.ts +13 -0
- package/dist/commands/ticket/bulk.js +145 -0
- package/dist/commands/ticket/complete.d.ts +16 -0
- package/dist/commands/ticket/complete.js +170 -0
- package/dist/commands/ticket/create.d.ts +22 -0
- package/dist/commands/ticket/create.js +390 -0
- package/dist/commands/ticket/delete.d.ts +16 -0
- package/dist/commands/ticket/delete.js +178 -0
- package/dist/commands/ticket/edit.d.ts +27 -0
- package/dist/commands/ticket/edit.js +322 -0
- package/dist/commands/ticket/epic.d.ts +20 -0
- package/dist/commands/ticket/epic.js +333 -0
- package/dist/commands/ticket/index.d.ts +13 -0
- package/dist/commands/ticket/index.js +103 -0
- package/dist/commands/ticket/link/block.d.ts +14 -0
- package/dist/commands/ticket/link/block.js +94 -0
- package/dist/commands/ticket/link/duplicates.d.ts +14 -0
- package/dist/commands/ticket/link/duplicates.js +93 -0
- package/dist/commands/ticket/link/index.d.ts +19 -0
- package/dist/commands/ticket/link/index.js +239 -0
- package/dist/commands/ticket/link/relates.d.ts +14 -0
- package/dist/commands/ticket/link/relates.js +93 -0
- package/dist/commands/ticket/link/remove.d.ts +16 -0
- package/dist/commands/ticket/link/remove.js +128 -0
- package/dist/commands/ticket/list.d.ts +24 -0
- package/dist/commands/ticket/list.js +431 -0
- package/dist/commands/ticket/move.d.ts +18 -0
- package/dist/commands/ticket/move.js +212 -0
- package/dist/commands/ticket/project.d.ts +18 -0
- package/dist/commands/ticket/project.js +254 -0
- package/dist/commands/ticket/reassign.d.ts +19 -0
- package/dist/commands/ticket/reassign.js +279 -0
- package/dist/commands/ticket/spec.d.ts +18 -0
- package/dist/commands/ticket/spec.js +259 -0
- package/dist/commands/ticket/status.d.ts +13 -0
- package/dist/commands/ticket/status.js +87 -0
- package/dist/commands/ticket/template/apply.d.ts +25 -0
- package/dist/commands/ticket/template/apply.js +249 -0
- package/dist/commands/ticket/template/create.d.ts +19 -0
- package/dist/commands/ticket/template/create.js +210 -0
- package/dist/commands/ticket/template/delete.d.ts +17 -0
- package/dist/commands/ticket/template/delete.js +92 -0
- package/dist/commands/ticket/template/index.d.ts +15 -0
- package/dist/commands/ticket/template/index.js +118 -0
- package/dist/commands/ticket/template/list.d.ts +16 -0
- package/dist/commands/ticket/template/list.js +110 -0
- package/dist/commands/ticket/template/save.d.ts +14 -0
- package/dist/commands/ticket/template/save.js +110 -0
- package/dist/commands/ticket/update.d.ts +18 -0
- package/dist/commands/ticket/update.js +325 -0
- package/dist/commands/ticket/view.d.ts +13 -0
- package/dist/commands/ticket/view.js +80 -0
- package/dist/commands/whoami.d.ts +9 -0
- package/dist/commands/whoami.js +103 -0
- package/dist/commands/work/complete.d.ts +13 -0
- package/dist/commands/work/complete.js +121 -0
- package/dist/commands/work/index.d.ts +13 -0
- package/dist/commands/work/index.js +70 -0
- package/dist/commands/work/ready.d.ts +24 -0
- package/dist/commands/work/ready.js +290 -0
- package/dist/commands/work/revise.d.ts +19 -0
- package/dist/commands/work/revise.js +377 -0
- package/dist/commands/work/spawn-all.d.ts +17 -0
- package/dist/commands/work/spawn-all.js +58 -0
- package/dist/commands/work/spawn.d.ts +29 -0
- package/dist/commands/work/spawn.js +728 -0
- package/dist/commands/work/start.d.ts +39 -0
- package/dist/commands/work/start.js +1393 -0
- package/dist/commands/work/watch.d.ts +31 -0
- package/dist/commands/work/watch.js +359 -0
- package/dist/commands/workflow/create.d.ts +18 -0
- package/dist/commands/workflow/create.js +119 -0
- package/dist/commands/workflow/delete.d.ts +17 -0
- package/dist/commands/workflow/delete.js +119 -0
- package/dist/commands/workflow/index.d.ts +15 -0
- package/dist/commands/workflow/index.js +75 -0
- package/dist/commands/workflow/list.d.ts +15 -0
- package/dist/commands/workflow/list.js +75 -0
- package/dist/commands/workflow/switch.d.ts +13 -0
- package/dist/commands/workflow/switch.js +117 -0
- package/dist/commands/workflow/view.d.ts +16 -0
- package/dist/commands/workflow/view.js +114 -0
- package/dist/commands/workspace/add.d.ts +12 -0
- package/dist/commands/workspace/add.js +74 -0
- package/dist/commands/workspace/list.d.ts +9 -0
- package/dist/commands/workspace/list.js +153 -0
- package/dist/commands/workspace/remove.d.ts +13 -0
- package/dist/commands/workspace/remove.js +98 -0
- package/dist/commands/workspace/use.d.ts +12 -0
- package/dist/commands/workspace/use.js +111 -0
- package/dist/hooks/init.d.ts +11 -0
- package/dist/hooks/init.js +57 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/lib/agents/commands.d.ts +189 -0
- package/dist/lib/agents/commands.js +893 -0
- package/dist/lib/agents/index.d.ts +54 -0
- package/dist/lib/agents/index.js +382 -0
- package/dist/lib/branch/index.d.ts +120 -0
- package/dist/lib/branch/index.js +334 -0
- package/dist/lib/colors.d.ts +94 -0
- package/dist/lib/colors.js +68 -0
- package/dist/lib/commands/docker-command.d.ts +21 -0
- package/dist/lib/commands/docker-command.js +27 -0
- package/dist/lib/database/index.d.ts +176 -0
- package/dist/lib/database/index.js +581 -0
- package/dist/lib/docker/resolve.d.ts +38 -0
- package/dist/lib/docker/resolve.js +175 -0
- package/dist/lib/execution/config.d.ts +150 -0
- package/dist/lib/execution/config.js +541 -0
- package/dist/lib/execution/devcontainer.d.ts +85 -0
- package/dist/lib/execution/devcontainer.js +594 -0
- package/dist/lib/execution/index.d.ts +10 -0
- package/dist/lib/execution/index.js +10 -0
- package/dist/lib/execution/runners.d.ts +53 -0
- package/dist/lib/execution/runners.js +1182 -0
- package/dist/lib/execution/spawner.d.ts +85 -0
- package/dist/lib/execution/spawner.js +548 -0
- package/dist/lib/execution/storage.d.ts +159 -0
- package/dist/lib/execution/storage.js +425 -0
- package/dist/lib/execution/types.d.ts +145 -0
- package/dist/lib/execution/types.js +157 -0
- package/dist/lib/init/index.d.ts +75 -0
- package/dist/lib/init/index.js +355 -0
- package/dist/lib/machine-config.d.ts +170 -0
- package/dist/lib/machine-config.js +386 -0
- package/dist/lib/pmo/base-command.d.ts +195 -0
- package/dist/lib/pmo/base-command.js +319 -0
- package/dist/lib/pmo/create-spec-folders.d.ts +43 -0
- package/dist/lib/pmo/create-spec-folders.js +64 -0
- package/dist/lib/pmo/epic-files.d.ts +56 -0
- package/dist/lib/pmo/epic-files.js +195 -0
- package/dist/lib/pmo/find-pmo.d.ts +14 -0
- package/dist/lib/pmo/find-pmo.js +172 -0
- package/dist/lib/pmo/index.d.ts +109 -0
- package/dist/lib/pmo/index.js +501 -0
- package/dist/lib/pmo/markdown.d.ts +31 -0
- package/dist/lib/pmo/markdown.js +245 -0
- package/dist/lib/pmo/pmo-context.d.ts +27 -0
- package/dist/lib/pmo/pmo-context.js +44 -0
- package/dist/lib/pmo/schema.d.ts +82 -0
- package/dist/lib/pmo/schema.js +531 -0
- package/dist/lib/pmo/spec-parser.d.ts +25 -0
- package/dist/lib/pmo/spec-parser.js +205 -0
- package/dist/lib/pmo/spec-types.d.ts +43 -0
- package/dist/lib/pmo/spec-types.js +7 -0
- package/dist/lib/pmo/storage/actions.d.ts +34 -0
- package/dist/lib/pmo/storage/actions.js +177 -0
- package/dist/lib/pmo/storage/base.d.ts +47 -0
- package/dist/lib/pmo/storage/base.js +858 -0
- package/dist/lib/pmo/storage/dependencies.d.ts +61 -0
- package/dist/lib/pmo/storage/dependencies.js +267 -0
- package/dist/lib/pmo/storage/epics.d.ts +46 -0
- package/dist/lib/pmo/storage/epics.js +243 -0
- package/dist/lib/pmo/storage/helpers.d.ts +33 -0
- package/dist/lib/pmo/storage/helpers.js +148 -0
- package/dist/lib/pmo/storage/index.d.ts +186 -0
- package/dist/lib/pmo/storage/index.js +689 -0
- package/dist/lib/pmo/storage/phases.d.ts +65 -0
- package/dist/lib/pmo/storage/phases.js +392 -0
- package/dist/lib/pmo/storage/projects.d.ts +79 -0
- package/dist/lib/pmo/storage/projects.js +303 -0
- package/dist/lib/pmo/storage/specs.d.ts +77 -0
- package/dist/lib/pmo/storage/specs.js +389 -0
- package/dist/lib/pmo/storage/statuses.d.ts +63 -0
- package/dist/lib/pmo/storage/statuses.js +404 -0
- package/dist/lib/pmo/storage/subtasks.d.ts +37 -0
- package/dist/lib/pmo/storage/subtasks.js +184 -0
- package/dist/lib/pmo/storage/templates.d.ts +40 -0
- package/dist/lib/pmo/storage/templates.js +210 -0
- package/dist/lib/pmo/storage/tickets.d.ts +57 -0
- package/dist/lib/pmo/storage/tickets.js +453 -0
- package/dist/lib/pmo/storage/types.d.ts +200 -0
- package/dist/lib/pmo/storage/types.js +5 -0
- package/dist/lib/pmo/storage/views.d.ts +44 -0
- package/dist/lib/pmo/storage/views.js +355 -0
- package/dist/lib/pmo/storage-sqlite.d.ts +7 -0
- package/dist/lib/pmo/storage-sqlite.js +7 -0
- package/dist/lib/pmo/sync-manager.d.ts +92 -0
- package/dist/lib/pmo/sync-manager.js +229 -0
- package/dist/lib/pmo/types.d.ts +710 -0
- package/dist/lib/pmo/types.js +108 -0
- package/dist/lib/pmo/utils.d.ts +122 -0
- package/dist/lib/pmo/utils.js +174 -0
- package/dist/lib/pmo/watcher.d.ts +43 -0
- package/dist/lib/pmo/watcher.js +208 -0
- package/dist/lib/pr/index.d.ts +150 -0
- package/dist/lib/pr/index.js +483 -0
- package/dist/lib/prompt-json.d.ts +231 -0
- package/dist/lib/prompt-json.js +213 -0
- package/dist/lib/repos/index.d.ts +81 -0
- package/dist/lib/repos/index.js +679 -0
- package/dist/lib/styles.d.ts +98 -0
- package/dist/lib/styles.js +195 -0
- package/dist/lib/themes.d.ts +128 -0
- package/dist/lib/themes.js +301 -0
- package/dist/lib/ui/BoardUI.d.ts +21 -0
- package/dist/lib/ui/BoardUI.js +85 -0
- package/dist/lib/ui/ClaimTicketUI.d.ts +17 -0
- package/dist/lib/ui/ClaimTicketUI.js +64 -0
- package/dist/lib/ui/CreateTicketUI.d.ts +13 -0
- package/dist/lib/ui/CreateTicketUI.js +101 -0
- package/dist/lib/workspace.d.ts +66 -0
- package/dist/lib/workspace.js +204 -0
- package/oclif.manifest.json +10593 -0
- package/package.json +103 -56
- package/LICENSE +0 -21
- package/dist/bin/prlt.d.ts +0 -11
- package/dist/bin/prlt.d.ts.map +0 -1
- package/dist/bin/prlt.js +0 -144
- package/dist/bin/prlt.js.map +0 -1
- package/dist/lib/config/index.d.ts +0 -14
- package/dist/lib/config/index.d.ts.map +0 -1
- package/dist/lib/config/index.js +0 -142
- package/dist/lib/config/index.js.map +0 -1
- package/dist/lib/config/upgrade.d.ts +0 -2
- package/dist/lib/config/upgrade.d.ts.map +0 -1
- package/dist/lib/config/upgrade.js +0 -248
- package/dist/lib/config/upgrade.js.map +0 -1
- package/dist/lib/themes/index.d.ts +0 -8
- package/dist/lib/themes/index.d.ts.map +0 -1
- package/dist/lib/themes/index.js +0 -80
- package/dist/lib/themes/index.js.map +0 -1
- package/dist/lib/utils/helpers.d.ts +0 -4
- package/dist/lib/utils/helpers.d.ts.map +0 -1
- package/dist/lib/utils/helpers.js +0 -39
- package/dist/lib/utils/helpers.js.map +0 -1
- package/dist/lib/utils/logger.d.ts +0 -4
- package/dist/lib/utils/logger.d.ts.map +0 -1
- package/dist/lib/utils/logger.js +0 -28
- package/dist/lib/utils/logger.js.map +0 -1
- package/dist/lib/workspace/index.d.ts +0 -13
- package/dist/lib/workspace/index.d.ts.map +0 -1
- package/dist/lib/workspace/index.js +0 -116
- package/dist/lib/workspace/index.js.map +0 -1
- package/dist/lib/worktree/index.d.ts +0 -7
- package/dist/lib/worktree/index.d.ts.map +0 -1
- package/dist/lib/worktree/index.js +0 -362
- package/dist/lib/worktree/index.js.map +0 -1
- package/dist/lib/worktree/migrate.d.ts +0 -2
- package/dist/lib/worktree/migrate.d.ts.map +0 -1
- package/dist/lib/worktree/migrate.js +0 -214
- package/dist/lib/worktree/migrate.js.map +0 -1
- package/dist/lib/worktree/repair.d.ts +0 -3
- package/dist/lib/worktree/repair.d.ts.map +0 -1
- package/dist/lib/worktree/repair.js +0 -320
- package/dist/lib/worktree/repair.js.map +0 -1
- package/dist/types/index.d.ts +0 -57
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -3
- package/dist/types/index.js.map +0 -1
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { execSync } from 'node:child_process';
|
|
4
|
+
import inquirer from 'inquirer';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import { ensureBuiltinThemes, getThemePersistentDir, getThemeEphemeralDir } from '../themes.js';
|
|
7
|
+
import { createAgentWorktrees } from '../agents/index.js';
|
|
8
|
+
import { addRepositoriesToHQ, isInGitRepo } from '../repos/index.js';
|
|
9
|
+
import { createPMO, } from '../pmo/index.js';
|
|
10
|
+
import { createWorkspaceDatabase, addRepositoriesToDatabase, addAgentsToDatabase, createTheme, addThemeNames, setActiveTheme } from '../database/index.js';
|
|
11
|
+
import { ensureMachineConfigDir, registerHeadquarters, getOrganizations, createOrganization, } from '../machine-config.js';
|
|
12
|
+
/**
|
|
13
|
+
* Validate that HQ path is not inside a git repository or another HQ
|
|
14
|
+
* Returns: { valid: true } or { valid: false, reason: string }
|
|
15
|
+
*/
|
|
16
|
+
export function validateHQLocation(location) {
|
|
17
|
+
const resolvedPath = path.resolve(location);
|
|
18
|
+
const parentDir = path.dirname(resolvedPath);
|
|
19
|
+
// Check if inside a git repo
|
|
20
|
+
try {
|
|
21
|
+
const gitRoot = execSync('git rev-parse --show-toplevel', {
|
|
22
|
+
cwd: parentDir,
|
|
23
|
+
stdio: 'pipe',
|
|
24
|
+
encoding: 'utf-8'
|
|
25
|
+
}).trim();
|
|
26
|
+
// Use realpath to resolve symlinks and /private prefix on macOS
|
|
27
|
+
const normalizedPath = fs.realpathSync(parentDir);
|
|
28
|
+
const normalizedGitRoot = fs.realpathSync(gitRoot);
|
|
29
|
+
if (normalizedPath.startsWith(normalizedGitRoot)) {
|
|
30
|
+
return { valid: false, reason: 'inside-git' };
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Not in a git repo - this is fine
|
|
35
|
+
}
|
|
36
|
+
// Check if inside an existing HQ (look for .proletariat/config.json with type: 'hq')
|
|
37
|
+
// Note: ~/.proletariat is the machine config, not an HQ, so we check the config type
|
|
38
|
+
let checkDir = parentDir;
|
|
39
|
+
while (checkDir !== '/' && checkDir !== path.dirname(checkDir)) {
|
|
40
|
+
const configPath = path.join(checkDir, '.proletariat', 'config.json');
|
|
41
|
+
if (fs.existsSync(configPath)) {
|
|
42
|
+
try {
|
|
43
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
44
|
+
if (config.type === 'hq') {
|
|
45
|
+
return { valid: false, reason: 'inside-hq' };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Invalid JSON, skip
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
checkDir = path.dirname(checkDir);
|
|
53
|
+
}
|
|
54
|
+
return { valid: true };
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Prompt user for HQ name
|
|
58
|
+
*/
|
|
59
|
+
export async function promptForHQName() {
|
|
60
|
+
const inGitRepo = isInGitRepo();
|
|
61
|
+
const defaultName = inGitRepo
|
|
62
|
+
? path.basename(process.cwd()) // Use repo name as default
|
|
63
|
+
: ''; // No default outside repo
|
|
64
|
+
const { name } = await inquirer.prompt([{
|
|
65
|
+
type: 'input',
|
|
66
|
+
name: 'name',
|
|
67
|
+
message: 'HQ name (company, project, or team name):',
|
|
68
|
+
default: defaultName,
|
|
69
|
+
validate: (input) => {
|
|
70
|
+
if (!input.trim())
|
|
71
|
+
return 'Name is required';
|
|
72
|
+
if (!/^[a-zA-Z0-9-_]+$/.test(input)) {
|
|
73
|
+
return 'Name can only contain letters, numbers, hyphens, and underscores';
|
|
74
|
+
}
|
|
75
|
+
return true;
|
|
76
|
+
},
|
|
77
|
+
}]);
|
|
78
|
+
return name;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Check if current directory is inside an HQ and return the HQ root path
|
|
82
|
+
*/
|
|
83
|
+
function findContainingHQ() {
|
|
84
|
+
let checkDir = process.cwd();
|
|
85
|
+
while (checkDir !== '/' && checkDir !== path.dirname(checkDir)) {
|
|
86
|
+
const configPath = path.join(checkDir, '.proletariat', 'config.json');
|
|
87
|
+
if (fs.existsSync(configPath)) {
|
|
88
|
+
try {
|
|
89
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
90
|
+
if (config.type === 'hq') {
|
|
91
|
+
return checkDir;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// Invalid JSON, skip
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
checkDir = path.dirname(checkDir);
|
|
99
|
+
}
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Prompt user for HQ location
|
|
104
|
+
*/
|
|
105
|
+
export async function promptForHQLocation(hqName) {
|
|
106
|
+
const inGitRepo = isInGitRepo();
|
|
107
|
+
const containingHQ = findContainingHQ();
|
|
108
|
+
const folderName = `${hqName}-hq`;
|
|
109
|
+
// Determine default path based on context
|
|
110
|
+
let defaultPath;
|
|
111
|
+
if (containingHQ) {
|
|
112
|
+
// Inside an HQ - suggest sibling to the HQ
|
|
113
|
+
defaultPath = path.join(path.dirname(containingHQ), folderName);
|
|
114
|
+
}
|
|
115
|
+
else if (inGitRepo) {
|
|
116
|
+
// Inside a git repo - suggest sibling to repo
|
|
117
|
+
defaultPath = path.join('..', folderName);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
// Nowhere special - suggest subdirectory
|
|
121
|
+
defaultPath = `./${folderName}`;
|
|
122
|
+
}
|
|
123
|
+
while (true) {
|
|
124
|
+
const { location } = await inquirer.prompt([{
|
|
125
|
+
type: 'input',
|
|
126
|
+
name: 'location',
|
|
127
|
+
message: `Where to create HQ [press Enter for ${defaultPath}]:`,
|
|
128
|
+
default: defaultPath,
|
|
129
|
+
}]);
|
|
130
|
+
// Validate location
|
|
131
|
+
const validation = validateHQLocation(location);
|
|
132
|
+
if (!validation.valid) {
|
|
133
|
+
if (validation.reason === 'inside-git') {
|
|
134
|
+
console.log(chalk.red('Cannot create HQ inside a git repository.'));
|
|
135
|
+
}
|
|
136
|
+
else if (validation.reason === 'inside-hq') {
|
|
137
|
+
console.log(chalk.red('Cannot create HQ inside another HQ. No HQ-ception allowed!'));
|
|
138
|
+
}
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
// Check if directory already exists
|
|
142
|
+
const resolvedPath = path.resolve(location);
|
|
143
|
+
if (fs.existsSync(resolvedPath)) {
|
|
144
|
+
console.log(chalk.red(`Directory ${resolvedPath} already exists.`));
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
return resolvedPath;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Prompt user for organization selection or creation
|
|
152
|
+
*/
|
|
153
|
+
export async function promptForOrganization() {
|
|
154
|
+
const existingOrgs = getOrganizations();
|
|
155
|
+
if (existingOrgs.length === 0) {
|
|
156
|
+
// First organization - prompt for name
|
|
157
|
+
const { orgName } = await inquirer.prompt([{
|
|
158
|
+
type: 'input',
|
|
159
|
+
name: 'orgName',
|
|
160
|
+
message: 'Organization name (company or team):',
|
|
161
|
+
validate: (input) => {
|
|
162
|
+
if (!input.trim())
|
|
163
|
+
return 'Organization name is required';
|
|
164
|
+
return true;
|
|
165
|
+
},
|
|
166
|
+
}]);
|
|
167
|
+
createOrganization(orgName.trim());
|
|
168
|
+
return orgName.trim();
|
|
169
|
+
}
|
|
170
|
+
// Show existing organizations with option to create new
|
|
171
|
+
const { choice } = await inquirer.prompt([{
|
|
172
|
+
type: 'list',
|
|
173
|
+
name: 'choice',
|
|
174
|
+
message: 'Select organization:',
|
|
175
|
+
choices: [
|
|
176
|
+
...existingOrgs.map(o => ({ name: o.name, value: o.name })),
|
|
177
|
+
new inquirer.Separator(),
|
|
178
|
+
{ name: '+ Create new organization', value: '__new__' },
|
|
179
|
+
],
|
|
180
|
+
}]);
|
|
181
|
+
if (choice === '__new__') {
|
|
182
|
+
const { orgName } = await inquirer.prompt([{
|
|
183
|
+
type: 'input',
|
|
184
|
+
name: 'orgName',
|
|
185
|
+
message: 'New organization name:',
|
|
186
|
+
validate: (input) => {
|
|
187
|
+
if (!input.trim())
|
|
188
|
+
return 'Organization name is required';
|
|
189
|
+
return true;
|
|
190
|
+
},
|
|
191
|
+
}]);
|
|
192
|
+
createOrganization(orgName.trim());
|
|
193
|
+
return orgName.trim();
|
|
194
|
+
}
|
|
195
|
+
return choice;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Create the basic HQ directory structure
|
|
199
|
+
*
|
|
200
|
+
* Structure:
|
|
201
|
+
* my-hq/
|
|
202
|
+
* .proletariat/ # HQ config and database
|
|
203
|
+
* repos/ # Repositories
|
|
204
|
+
* agents/
|
|
205
|
+
* staff/ # Persistent agents
|
|
206
|
+
* temp/ # Ephemeral agents
|
|
207
|
+
*/
|
|
208
|
+
export function createHQStructure(hqPath, hqName, themeId, quiet) {
|
|
209
|
+
if (!quiet)
|
|
210
|
+
console.log(chalk.blue(`\n🏗️ Creating HQ at ${hqPath}...`));
|
|
211
|
+
// Get theme-specific directory names
|
|
212
|
+
const persistentDir = getThemePersistentDir(themeId);
|
|
213
|
+
const ephemeralDir = getThemeEphemeralDir(themeId);
|
|
214
|
+
// Create directories
|
|
215
|
+
fs.mkdirSync(hqPath, { recursive: true });
|
|
216
|
+
fs.mkdirSync(path.join(hqPath, '.proletariat'), { recursive: true });
|
|
217
|
+
fs.mkdirSync(path.join(hqPath, 'repos'), { recursive: true });
|
|
218
|
+
fs.mkdirSync(path.join(hqPath, 'agents'), { recursive: true });
|
|
219
|
+
fs.mkdirSync(path.join(hqPath, 'agents', persistentDir), { recursive: true });
|
|
220
|
+
fs.mkdirSync(path.join(hqPath, 'agents', ephemeralDir), { recursive: true });
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Create HQ database and config
|
|
224
|
+
*/
|
|
225
|
+
export function initializeHQDatabase(hqPath, options) {
|
|
226
|
+
if (!options.pmoSetup || !options.hqName) {
|
|
227
|
+
throw new Error('initializeHQDatabase requires hqName and pmoSetup to be defined');
|
|
228
|
+
}
|
|
229
|
+
const hasPMO = options.pmoSetup.includePMO;
|
|
230
|
+
// Create the database with HQ configuration
|
|
231
|
+
const db = createWorkspaceDatabase(hqPath, 'hq', options.hqName, hasPMO);
|
|
232
|
+
db.close();
|
|
233
|
+
// Create HQ config.json (required for HQ detection)
|
|
234
|
+
const configPath = path.join(hqPath, '.proletariat', 'config.json');
|
|
235
|
+
const config = {
|
|
236
|
+
version: "1.0.0",
|
|
237
|
+
schemaVersion: 1,
|
|
238
|
+
type: 'hq',
|
|
239
|
+
name: options.hqName
|
|
240
|
+
};
|
|
241
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
242
|
+
}
|
|
243
|
+
/** @deprecated Use initializeHQDatabase instead */
|
|
244
|
+
export const initializeWorkspaceDatabase = initializeHQDatabase;
|
|
245
|
+
/**
|
|
246
|
+
* Complete HQ initialization workflow
|
|
247
|
+
*/
|
|
248
|
+
export async function initializeHQ(options) {
|
|
249
|
+
const { hqPath, hqName, selectedAgents, repos, pmoSetup, themeId, customTheme, orgName, quiet, } = options;
|
|
250
|
+
// Helper to log only in non-quiet mode
|
|
251
|
+
const log = (message) => {
|
|
252
|
+
if (!quiet)
|
|
253
|
+
console.log(message);
|
|
254
|
+
};
|
|
255
|
+
// All these fields are required for HQ type
|
|
256
|
+
if (!hqPath || !hqName || repos === undefined || !pmoSetup) {
|
|
257
|
+
throw new Error('Missing required fields for HQ initialization');
|
|
258
|
+
}
|
|
259
|
+
// Create basic structure (pass hqName and themeId for correct directory names)
|
|
260
|
+
createHQStructure(hqPath, hqName, themeId, quiet);
|
|
261
|
+
// Create database and HQ configuration
|
|
262
|
+
initializeHQDatabase(hqPath, options);
|
|
263
|
+
// Ensure builtin themes exist
|
|
264
|
+
ensureBuiltinThemes(hqPath);
|
|
265
|
+
// Save custom theme if one was created during init
|
|
266
|
+
if (customTheme) {
|
|
267
|
+
createTheme(hqPath, {
|
|
268
|
+
id: customTheme.name,
|
|
269
|
+
name: customTheme.name,
|
|
270
|
+
displayName: customTheme.displayName,
|
|
271
|
+
builtin: false,
|
|
272
|
+
});
|
|
273
|
+
addThemeNames(hqPath, customTheme.name, customTheme.names);
|
|
274
|
+
log(chalk.blue(`Created custom theme: ${customTheme.displayName}`));
|
|
275
|
+
}
|
|
276
|
+
// Set active theme if one was selected
|
|
277
|
+
if (themeId) {
|
|
278
|
+
setActiveTheme(hqPath, themeId);
|
|
279
|
+
}
|
|
280
|
+
// Handle repositories - add to file system AND database
|
|
281
|
+
const addedRepos = await addRepositoriesToHQ(hqPath, repos);
|
|
282
|
+
// Convert to database format
|
|
283
|
+
const dbRepos = addedRepos.map(repoName => {
|
|
284
|
+
const repoData = repos.find(r => path.basename(r.path).replace(/\.git$/, '') === repoName);
|
|
285
|
+
return {
|
|
286
|
+
name: repoName,
|
|
287
|
+
path: `repos/${repoName}`,
|
|
288
|
+
source_url: repoData?.path,
|
|
289
|
+
action: repoData?.action
|
|
290
|
+
};
|
|
291
|
+
});
|
|
292
|
+
addRepositoriesToDatabase(hqPath, dbRepos);
|
|
293
|
+
// Create PMO if requested
|
|
294
|
+
if (pmoSetup.includePMO) {
|
|
295
|
+
await createPMO({
|
|
296
|
+
hqPath,
|
|
297
|
+
location: pmoSetup.location,
|
|
298
|
+
boardTemplate: pmoSetup.boardTemplate,
|
|
299
|
+
boardName: pmoSetup.boardName,
|
|
300
|
+
columns: pmoSetup.columns,
|
|
301
|
+
storageType: pmoSetup.storageType,
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
// Add agents if selected - create worktrees AND add to database
|
|
305
|
+
if (selectedAgents.length > 0) {
|
|
306
|
+
const persistentDir = getThemePersistentDir(themeId);
|
|
307
|
+
const agentsPath = path.join(hqPath, 'agents', persistentDir);
|
|
308
|
+
// Create physical worktrees
|
|
309
|
+
await createAgentWorktrees(agentsPath, selectedAgents, hqPath);
|
|
310
|
+
// Add to database
|
|
311
|
+
addAgentsToDatabase(hqPath, selectedAgents);
|
|
312
|
+
}
|
|
313
|
+
// Register headquarters in machine config
|
|
314
|
+
ensureMachineConfigDir();
|
|
315
|
+
registerHeadquarters(hqPath, hqName, true, orgName);
|
|
316
|
+
log(chalk.gray(`Registered headquarters in ~/.proletariat/config.json`));
|
|
317
|
+
log(chalk.green(`\n✅ Headquarters created successfully at ${hqPath}`));
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Show next steps to user
|
|
321
|
+
*/
|
|
322
|
+
export async function showNextSteps(options) {
|
|
323
|
+
const relativePath = path.relative(process.cwd(), options.hqPath);
|
|
324
|
+
const hasPMO = options.pmoSetup?.includePMO ?? false;
|
|
325
|
+
// Show navigation instructions
|
|
326
|
+
console.log(chalk.blue(`\n📂 Your headquarters is ready! Navigate to it:`));
|
|
327
|
+
console.log(chalk.yellow(` cd ${relativePath}`));
|
|
328
|
+
// Ask if they want to see the next steps
|
|
329
|
+
const { showNextSteps } = await inquirer.prompt([{
|
|
330
|
+
type: 'list',
|
|
331
|
+
name: 'showNextSteps',
|
|
332
|
+
message: 'Show additional next steps?',
|
|
333
|
+
choices: [
|
|
334
|
+
{ name: 'Yes', value: true },
|
|
335
|
+
{ name: 'No', value: false }
|
|
336
|
+
],
|
|
337
|
+
default: true,
|
|
338
|
+
}]);
|
|
339
|
+
// Show additional next steps if requested
|
|
340
|
+
if (showNextSteps) {
|
|
341
|
+
const hasCommands = (options.selectedAgents.length === 0) || hasPMO;
|
|
342
|
+
if (hasCommands) {
|
|
343
|
+
console.log(chalk.cyan(`\nOnce you're in the headquarters, you can run:`));
|
|
344
|
+
if (options.selectedAgents.length === 0) {
|
|
345
|
+
console.log(chalk.white(` prlt agent add <name>`));
|
|
346
|
+
}
|
|
347
|
+
if (hasPMO) {
|
|
348
|
+
console.log(chalk.white(` prlt ticket create`));
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
console.log(chalk.green(`\nYour headquarters is fully set up and ready to use!`));
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Machine-level configuration for Proletariat headquarters.
|
|
3
|
+
*
|
|
4
|
+
* This module manages the ~/.proletariat/config.json registry that tracks
|
|
5
|
+
* all known headquarters on the machine, solving the HQ discovery
|
|
6
|
+
* chicken-and-egg problem.
|
|
7
|
+
*
|
|
8
|
+
* Registry schema:
|
|
9
|
+
* {
|
|
10
|
+
* "version": "1.0.0",
|
|
11
|
+
* "headquarters": [
|
|
12
|
+
* { "name": "hq-name", "path": "/absolute/path", "registeredAt": "ISO8601" }
|
|
13
|
+
* ],
|
|
14
|
+
* "activeHeadquarters": "/absolute/path" | null
|
|
15
|
+
* }
|
|
16
|
+
*/
|
|
17
|
+
export interface Organization {
|
|
18
|
+
name: string;
|
|
19
|
+
createdAt: string;
|
|
20
|
+
}
|
|
21
|
+
export interface RegisteredHeadquarters {
|
|
22
|
+
name: string;
|
|
23
|
+
path: string;
|
|
24
|
+
registeredAt: string;
|
|
25
|
+
orgName?: string;
|
|
26
|
+
}
|
|
27
|
+
/** @deprecated Use RegisteredHeadquarters instead */
|
|
28
|
+
export type RegisteredWorkspace = RegisteredHeadquarters;
|
|
29
|
+
export interface MachineConfig {
|
|
30
|
+
type: 'machine';
|
|
31
|
+
version: string;
|
|
32
|
+
organizations: Organization[];
|
|
33
|
+
headquarters: RegisteredHeadquarters[];
|
|
34
|
+
activeHeadquarters: string | null;
|
|
35
|
+
activeOrganization: string | null;
|
|
36
|
+
/** @deprecated Use headquarters instead */
|
|
37
|
+
workspaces?: RegisteredHeadquarters[];
|
|
38
|
+
/** @deprecated Use activeHeadquarters instead */
|
|
39
|
+
activeWorkspace?: string | null;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get the path to the machine-level config directory (~/.proletariat/).
|
|
43
|
+
*/
|
|
44
|
+
export declare function getMachineConfigDir(): string;
|
|
45
|
+
/**
|
|
46
|
+
* Get the path to the machine-level config file (~/.proletariat/config.json).
|
|
47
|
+
*/
|
|
48
|
+
export declare function getMachineConfigPath(): string;
|
|
49
|
+
/**
|
|
50
|
+
* Ensure the machine config directory exists.
|
|
51
|
+
* Creates ~/.proletariat/ if it doesn't exist.
|
|
52
|
+
*/
|
|
53
|
+
export declare function ensureMachineConfigDir(): void;
|
|
54
|
+
/**
|
|
55
|
+
* Normalize a workspace path for consistent storage.
|
|
56
|
+
* - Resolves symlinks
|
|
57
|
+
* - Makes path absolute
|
|
58
|
+
* - Removes trailing slashes
|
|
59
|
+
*/
|
|
60
|
+
export declare function normalizePath(inputPath: string): string;
|
|
61
|
+
/**
|
|
62
|
+
* Read the machine config file.
|
|
63
|
+
* Returns a default empty config if file doesn't exist or is invalid.
|
|
64
|
+
* Handles migration from old 'workspaces' format to new 'headquarters' format.
|
|
65
|
+
*/
|
|
66
|
+
export declare function readMachineConfig(): MachineConfig;
|
|
67
|
+
/**
|
|
68
|
+
* Write the machine config file atomically.
|
|
69
|
+
* Uses write-to-temp-then-rename pattern for safety.
|
|
70
|
+
*/
|
|
71
|
+
export declare function writeMachineConfig(config: MachineConfig): void;
|
|
72
|
+
/**
|
|
73
|
+
* Register a headquarters in the machine config.
|
|
74
|
+
*
|
|
75
|
+
* @param hqPath Absolute path to the headquarters (will be normalized)
|
|
76
|
+
* @param name Optional HQ name (defaults to directory basename)
|
|
77
|
+
* @param setActive If true, set as active HQ when no active HQ exists
|
|
78
|
+
* @param orgName Optional organization name to associate this HQ with
|
|
79
|
+
* @returns The registered headquarters entry
|
|
80
|
+
*/
|
|
81
|
+
export declare function registerHeadquarters(hqPath: string, name?: string, setActive?: boolean, orgName?: string): RegisteredHeadquarters;
|
|
82
|
+
/** @deprecated Use registerHeadquarters instead */
|
|
83
|
+
export declare const registerWorkspace: typeof registerHeadquarters;
|
|
84
|
+
/**
|
|
85
|
+
* Unregister a headquarters from the machine config.
|
|
86
|
+
*
|
|
87
|
+
* @param pathOrName HQ path or name to unregister
|
|
88
|
+
* @returns true if HQ was found and removed, false otherwise
|
|
89
|
+
*/
|
|
90
|
+
export declare function unregisterHeadquarters(pathOrName: string): boolean;
|
|
91
|
+
/** @deprecated Use unregisterHeadquarters instead */
|
|
92
|
+
export declare const unregisterWorkspace: typeof unregisterHeadquarters;
|
|
93
|
+
/**
|
|
94
|
+
* Get all registered headquarters.
|
|
95
|
+
*/
|
|
96
|
+
export declare function getRegisteredHeadquarters(): RegisteredHeadquarters[];
|
|
97
|
+
/** @deprecated Use getRegisteredHeadquarters instead */
|
|
98
|
+
export declare const getRegisteredWorkspaces: typeof getRegisteredHeadquarters;
|
|
99
|
+
/**
|
|
100
|
+
* Get the active headquarters path.
|
|
101
|
+
* Returns null if no active HQ is set.
|
|
102
|
+
*/
|
|
103
|
+
export declare function getActiveHeadquarters(): string | null;
|
|
104
|
+
/** @deprecated Use getActiveHeadquarters instead */
|
|
105
|
+
export declare const getActiveWorkspace: typeof getActiveHeadquarters;
|
|
106
|
+
/**
|
|
107
|
+
* Set the active headquarters.
|
|
108
|
+
*
|
|
109
|
+
* @param pathOrName HQ path or name
|
|
110
|
+
* @returns The path of the HQ that was set as active
|
|
111
|
+
* @throws Error if HQ not found or not valid
|
|
112
|
+
*/
|
|
113
|
+
export declare function setActiveHeadquarters(pathOrName: string): string;
|
|
114
|
+
/** @deprecated Use setActiveHeadquarters instead */
|
|
115
|
+
export declare const setActiveWorkspace: typeof setActiveHeadquarters;
|
|
116
|
+
/**
|
|
117
|
+
* Find headquarters by name.
|
|
118
|
+
* Returns array of matches (may be multiple if names are not unique).
|
|
119
|
+
*/
|
|
120
|
+
export declare function findHeadquartersByName(name: string): RegisteredHeadquarters[];
|
|
121
|
+
/** @deprecated Use findHeadquartersByName instead */
|
|
122
|
+
export declare const findWorkspacesByName: typeof findHeadquartersByName;
|
|
123
|
+
/**
|
|
124
|
+
* Find headquarters by path.
|
|
125
|
+
*/
|
|
126
|
+
export declare function findHeadquartersByPath(hqPath: string): RegisteredHeadquarters | null;
|
|
127
|
+
/** @deprecated Use findHeadquartersByPath instead */
|
|
128
|
+
export declare const findWorkspaceByPath: typeof findHeadquartersByPath;
|
|
129
|
+
/**
|
|
130
|
+
* Check if a headquarters path is registered.
|
|
131
|
+
*/
|
|
132
|
+
export declare function isHeadquartersRegistered(hqPath: string): boolean;
|
|
133
|
+
/** @deprecated Use isHeadquartersRegistered instead */
|
|
134
|
+
export declare const isWorkspaceRegistered: typeof isHeadquartersRegistered;
|
|
135
|
+
/**
|
|
136
|
+
* Get headquarters name from path (for existing HQ).
|
|
137
|
+
* Reads the HQ config to get the name, or falls back to directory basename.
|
|
138
|
+
*/
|
|
139
|
+
export declare function getHeadquartersNameFromPath(hqPath: string): string;
|
|
140
|
+
/** @deprecated Use getHeadquartersNameFromPath instead */
|
|
141
|
+
export declare const getWorkspaceNameFromPath: typeof getHeadquartersNameFromPath;
|
|
142
|
+
/**
|
|
143
|
+
* Check if there are duplicate headquarters names in the registry.
|
|
144
|
+
*/
|
|
145
|
+
export declare function hasDuplicateNames(): {
|
|
146
|
+
name: string;
|
|
147
|
+
paths: string[];
|
|
148
|
+
}[];
|
|
149
|
+
/**
|
|
150
|
+
* Get all organizations.
|
|
151
|
+
*/
|
|
152
|
+
export declare function getOrganizations(): Organization[];
|
|
153
|
+
/**
|
|
154
|
+
* Get the active organization name.
|
|
155
|
+
*/
|
|
156
|
+
export declare function getActiveOrganization(): string | null;
|
|
157
|
+
/**
|
|
158
|
+
* Create a new organization.
|
|
159
|
+
*/
|
|
160
|
+
export declare function createOrganization(name: string): Organization;
|
|
161
|
+
/**
|
|
162
|
+
* Set the active organization.
|
|
163
|
+
*/
|
|
164
|
+
export declare function setActiveOrganization(name: string): void;
|
|
165
|
+
/**
|
|
166
|
+
* Get headquarters belonging to a specific organization.
|
|
167
|
+
*/
|
|
168
|
+
export declare function getOrganizationHeadquarters(orgName: string): RegisteredHeadquarters[];
|
|
169
|
+
/** @deprecated Use getOrganizationHeadquarters instead */
|
|
170
|
+
export declare const getOrganizationWorkspaces: typeof getOrganizationHeadquarters;
|