@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,129 @@
|
|
|
1
|
+
import { Args, Command, Flags } from '@oclif/core';
|
|
2
|
+
import { execSync } from 'child_process';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import Database from 'better-sqlite3';
|
|
5
|
+
import inquirer from 'inquirer';
|
|
6
|
+
import { styles } from '../../lib/styles.js';
|
|
7
|
+
import { getWorkspaceInfo } from '../../lib/agents/commands.js';
|
|
8
|
+
import { ExecutionStorage } from '../../lib/execution/storage.js';
|
|
9
|
+
import { isDockerRunning } from '../../lib/execution/runners.js';
|
|
10
|
+
import { resolveContainerId, containerExists, sanitizeContainerId } from '../../lib/docker/resolve.js';
|
|
11
|
+
import { shouldOutputJson, outputPromptAsJson, createMetadata, buildPromptConfig, } from '../../lib/prompt-json.js';
|
|
12
|
+
export default class DockerRestart extends Command {
|
|
13
|
+
static description = 'Restart a container (by execution ID, agent name, or container ID)';
|
|
14
|
+
static examples = [
|
|
15
|
+
'<%= config.bin %> <%= command.id %> WORK-001',
|
|
16
|
+
'<%= config.bin %> <%= command.id %> kalanick',
|
|
17
|
+
'<%= config.bin %> <%= command.id %> abc123 --force',
|
|
18
|
+
];
|
|
19
|
+
static flags = {
|
|
20
|
+
force: Flags.boolean({
|
|
21
|
+
char: 'f',
|
|
22
|
+
aliases: ['yes', 'y'],
|
|
23
|
+
description: 'Skip confirmation prompt',
|
|
24
|
+
default: false,
|
|
25
|
+
}),
|
|
26
|
+
time: Flags.integer({
|
|
27
|
+
char: 't',
|
|
28
|
+
description: 'Seconds to wait before killing the container during stop',
|
|
29
|
+
default: 10,
|
|
30
|
+
}),
|
|
31
|
+
json: Flags.boolean({
|
|
32
|
+
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
33
|
+
default: false,
|
|
34
|
+
}),
|
|
35
|
+
};
|
|
36
|
+
static args = {
|
|
37
|
+
target: Args.string({
|
|
38
|
+
description: 'Execution ID (WORK-XXX), agent name, or container ID',
|
|
39
|
+
required: true,
|
|
40
|
+
}),
|
|
41
|
+
};
|
|
42
|
+
async run() {
|
|
43
|
+
const { args, flags } = await this.parse(DockerRestart);
|
|
44
|
+
if (!isDockerRunning()) {
|
|
45
|
+
this.error('Docker is not running. Start Docker Desktop or the Docker daemon first.');
|
|
46
|
+
}
|
|
47
|
+
// Get workspace info
|
|
48
|
+
let workspaceInfo;
|
|
49
|
+
try {
|
|
50
|
+
workspaceInfo = getWorkspaceInfo();
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
this.error('Not in a workspace. Run "prlt init" first.');
|
|
54
|
+
}
|
|
55
|
+
// Open database
|
|
56
|
+
const dbPath = path.join(workspaceInfo.path, '.proletariat', 'workspace.db');
|
|
57
|
+
let db;
|
|
58
|
+
try {
|
|
59
|
+
db = new Database(dbPath);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
this.error('Could not open workspace database.');
|
|
63
|
+
}
|
|
64
|
+
const executionStorage = new ExecutionStorage(db);
|
|
65
|
+
try {
|
|
66
|
+
const result = resolveContainerId(args.target, executionStorage);
|
|
67
|
+
if (!result.containerId) {
|
|
68
|
+
db.close();
|
|
69
|
+
this.error(result.error || 'Could not find container');
|
|
70
|
+
}
|
|
71
|
+
// Check if container exists
|
|
72
|
+
if (!containerExists(result.containerId)) {
|
|
73
|
+
db.close();
|
|
74
|
+
this.error(`Container ${result.displayName} does not exist`);
|
|
75
|
+
}
|
|
76
|
+
this.log(`\n${styles.header('Restart Container')}`);
|
|
77
|
+
this.log(styles.muted(`Target: ${result.displayName}`));
|
|
78
|
+
this.log(styles.muted(`Container: ${result.containerId.substring(0, 12)}\n`));
|
|
79
|
+
// Confirm
|
|
80
|
+
if (!flags.force) {
|
|
81
|
+
// Check if JSON output mode is active
|
|
82
|
+
const jsonMode = shouldOutputJson(flags);
|
|
83
|
+
// Build choices once, use for both JSON and interactive modes
|
|
84
|
+
const confirmChoices = [
|
|
85
|
+
{ name: 'Yes', value: 'true' },
|
|
86
|
+
{ name: 'No', value: 'false' },
|
|
87
|
+
];
|
|
88
|
+
const confirmMessage = `Restart container ${result.displayName}?`;
|
|
89
|
+
// In JSON mode, output confirmation prompt
|
|
90
|
+
if (jsonMode) {
|
|
91
|
+
outputPromptAsJson(buildPromptConfig('list', 'confirmed', confirmMessage, confirmChoices), createMetadata('docker restart', flags));
|
|
92
|
+
db.close();
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const { confirm } = await inquirer.prompt([
|
|
96
|
+
{
|
|
97
|
+
type: 'confirm',
|
|
98
|
+
name: 'confirm',
|
|
99
|
+
message: confirmMessage,
|
|
100
|
+
default: true,
|
|
101
|
+
},
|
|
102
|
+
]);
|
|
103
|
+
if (!confirm) {
|
|
104
|
+
this.log(`${styles.muted('Aborted.')}\n`);
|
|
105
|
+
db.close();
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Restart container
|
|
110
|
+
this.log(styles.muted(`Restarting container (timeout: ${flags.time}s)...`));
|
|
111
|
+
try {
|
|
112
|
+
const safeId = sanitizeContainerId(result.containerId);
|
|
113
|
+
execSync(`docker restart -t ${flags.time} ${safeId}`, {
|
|
114
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
115
|
+
timeout: (flags.time + 30) * 1000, // Extra time for startup
|
|
116
|
+
});
|
|
117
|
+
this.log(`${styles.success('Container restarted successfully')}\n`);
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
this.log(`${styles.error(`Failed to restart container: ${error instanceof Error ? error.message : error}`)}\n`);
|
|
121
|
+
}
|
|
122
|
+
db.close();
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
db.close();
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class DockerShell extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
shell: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
user: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
workdir: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
};
|
|
10
|
+
static args: {
|
|
11
|
+
target: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { Args, Command, Flags } from '@oclif/core';
|
|
2
|
+
import { spawn } from 'child_process';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import Database from 'better-sqlite3';
|
|
5
|
+
import { styles } from '../../lib/styles.js';
|
|
6
|
+
import { getWorkspaceInfo } from '../../lib/agents/commands.js';
|
|
7
|
+
import { ExecutionStorage } from '../../lib/execution/storage.js';
|
|
8
|
+
import { isDockerRunning } from '../../lib/execution/runners.js';
|
|
9
|
+
import { resolveContainerId, isContainerRunning } from '../../lib/docker/resolve.js';
|
|
10
|
+
export default class DockerShell extends Command {
|
|
11
|
+
static description = 'Open a shell in a running container (by execution ID, agent name, or container ID)';
|
|
12
|
+
static examples = [
|
|
13
|
+
'<%= config.bin %> <%= command.id %> WORK-001',
|
|
14
|
+
'<%= config.bin %> <%= command.id %> kalanick',
|
|
15
|
+
'<%= config.bin %> <%= command.id %> abc123 --shell /bin/bash',
|
|
16
|
+
];
|
|
17
|
+
static flags = {
|
|
18
|
+
shell: Flags.string({
|
|
19
|
+
char: 's',
|
|
20
|
+
description: 'Shell to use',
|
|
21
|
+
default: '/bin/sh',
|
|
22
|
+
}),
|
|
23
|
+
user: Flags.string({
|
|
24
|
+
char: 'u',
|
|
25
|
+
description: 'User to run as',
|
|
26
|
+
}),
|
|
27
|
+
workdir: Flags.string({
|
|
28
|
+
char: 'w',
|
|
29
|
+
description: 'Working directory inside the container',
|
|
30
|
+
}),
|
|
31
|
+
};
|
|
32
|
+
static args = {
|
|
33
|
+
target: Args.string({
|
|
34
|
+
description: 'Execution ID (WORK-XXX), agent name, or container ID',
|
|
35
|
+
required: true,
|
|
36
|
+
}),
|
|
37
|
+
};
|
|
38
|
+
async run() {
|
|
39
|
+
const { args, flags } = await this.parse(DockerShell);
|
|
40
|
+
if (!isDockerRunning()) {
|
|
41
|
+
this.error('Docker is not running. Start Docker Desktop or the Docker daemon first.');
|
|
42
|
+
}
|
|
43
|
+
// Get workspace info
|
|
44
|
+
let workspaceInfo;
|
|
45
|
+
try {
|
|
46
|
+
workspaceInfo = getWorkspaceInfo();
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
this.error('Not in a workspace. Run "prlt init" first.');
|
|
50
|
+
}
|
|
51
|
+
// Open database
|
|
52
|
+
const dbPath = path.join(workspaceInfo.path, '.proletariat', 'workspace.db');
|
|
53
|
+
let db;
|
|
54
|
+
try {
|
|
55
|
+
db = new Database(dbPath);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
this.error('Could not open workspace database.');
|
|
59
|
+
}
|
|
60
|
+
const executionStorage = new ExecutionStorage(db);
|
|
61
|
+
try {
|
|
62
|
+
const result = resolveContainerId(args.target, executionStorage);
|
|
63
|
+
if (!result.containerId) {
|
|
64
|
+
db.close();
|
|
65
|
+
this.error(result.error || 'Could not find container');
|
|
66
|
+
}
|
|
67
|
+
// Check if container is running
|
|
68
|
+
if (!isContainerRunning(result.containerId)) {
|
|
69
|
+
db.close();
|
|
70
|
+
this.error(`Container ${result.displayName} is not running. Start it first or use 'docker restart'.`);
|
|
71
|
+
}
|
|
72
|
+
this.log(`\n${styles.header(`Shell into ${result.displayName}`)}`);
|
|
73
|
+
this.log(styles.muted(`Container: ${result.containerId.substring(0, 12)}`));
|
|
74
|
+
this.log(styles.muted(`Shell: ${flags.shell}`));
|
|
75
|
+
this.log('─'.repeat(50) + '\n');
|
|
76
|
+
db.close();
|
|
77
|
+
// Build docker exec command
|
|
78
|
+
const dockerArgs = ['exec', '-it'];
|
|
79
|
+
if (flags.user) {
|
|
80
|
+
dockerArgs.push('--user', flags.user);
|
|
81
|
+
}
|
|
82
|
+
if (flags.workdir) {
|
|
83
|
+
dockerArgs.push('--workdir', flags.workdir);
|
|
84
|
+
}
|
|
85
|
+
dockerArgs.push(result.containerId, flags.shell);
|
|
86
|
+
// Spawn interactive shell
|
|
87
|
+
const proc = spawn('docker', dockerArgs, {
|
|
88
|
+
stdio: 'inherit',
|
|
89
|
+
});
|
|
90
|
+
proc.on('error', (err) => {
|
|
91
|
+
this.error(`Failed to open shell: ${err.message}`);
|
|
92
|
+
});
|
|
93
|
+
proc.on('exit', (code) => {
|
|
94
|
+
this.log('');
|
|
95
|
+
this.log(styles.muted(`Shell exited with code ${code}`));
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
db.close();
|
|
100
|
+
throw error;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class DockerStart extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
attach: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
};
|
|
8
|
+
static args: {
|
|
9
|
+
target: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
10
|
+
};
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { Args, Command, Flags } from '@oclif/core';
|
|
2
|
+
import { execSync } from 'child_process';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import Database from 'better-sqlite3';
|
|
5
|
+
import { styles } from '../../lib/styles.js';
|
|
6
|
+
import { getWorkspaceInfo } from '../../lib/agents/commands.js';
|
|
7
|
+
import { ExecutionStorage } from '../../lib/execution/storage.js';
|
|
8
|
+
import { isDockerRunning } from '../../lib/execution/runners.js';
|
|
9
|
+
import { resolveContainerId, isContainerRunning, sanitizeContainerId } from '../../lib/docker/resolve.js';
|
|
10
|
+
export default class DockerStart extends Command {
|
|
11
|
+
static description = 'Start a stopped container (by execution ID, agent name, or container ID)';
|
|
12
|
+
static examples = [
|
|
13
|
+
'<%= config.bin %> <%= command.id %> WORK-001',
|
|
14
|
+
'<%= config.bin %> <%= command.id %> kalanick',
|
|
15
|
+
'<%= config.bin %> <%= command.id %> abc123',
|
|
16
|
+
];
|
|
17
|
+
static flags = {
|
|
18
|
+
attach: Flags.boolean({
|
|
19
|
+
char: 'a',
|
|
20
|
+
description: 'Attach to container after starting',
|
|
21
|
+
default: false,
|
|
22
|
+
}),
|
|
23
|
+
};
|
|
24
|
+
static args = {
|
|
25
|
+
target: Args.string({
|
|
26
|
+
description: 'Execution ID (WORK-XXX), agent name, or container ID',
|
|
27
|
+
required: true,
|
|
28
|
+
}),
|
|
29
|
+
};
|
|
30
|
+
async run() {
|
|
31
|
+
const { args, flags } = await this.parse(DockerStart);
|
|
32
|
+
if (!isDockerRunning()) {
|
|
33
|
+
this.error('Docker is not running. Start Docker Desktop or the Docker daemon first.');
|
|
34
|
+
}
|
|
35
|
+
// Get workspace info
|
|
36
|
+
let workspaceInfo;
|
|
37
|
+
try {
|
|
38
|
+
workspaceInfo = getWorkspaceInfo();
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
this.error('Not in a workspace. Run "prlt init" first.');
|
|
42
|
+
}
|
|
43
|
+
// Open database
|
|
44
|
+
const dbPath = path.join(workspaceInfo.path, '.proletariat', 'workspace.db');
|
|
45
|
+
let db;
|
|
46
|
+
try {
|
|
47
|
+
db = new Database(dbPath);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
this.error('Could not open workspace database.');
|
|
51
|
+
}
|
|
52
|
+
const executionStorage = new ExecutionStorage(db);
|
|
53
|
+
try {
|
|
54
|
+
const result = resolveContainerId(args.target, executionStorage);
|
|
55
|
+
if (!result.containerId) {
|
|
56
|
+
db.close();
|
|
57
|
+
this.error(result.error || 'Could not find container');
|
|
58
|
+
}
|
|
59
|
+
// Check if container is already running
|
|
60
|
+
if (isContainerRunning(result.containerId)) {
|
|
61
|
+
this.log(`\n${styles.warning(`Container ${result.displayName} is already running`)}\n`);
|
|
62
|
+
db.close();
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
this.log(`\n${styles.header('Start Container')}`);
|
|
66
|
+
this.log(styles.muted(`Target: ${result.displayName}`));
|
|
67
|
+
this.log(styles.muted(`Container: ${result.containerId.substring(0, 12)}\n`));
|
|
68
|
+
// Start container
|
|
69
|
+
this.log(styles.muted('Starting container...'));
|
|
70
|
+
try {
|
|
71
|
+
const attachFlag = flags.attach ? '-a' : '';
|
|
72
|
+
const safeId = sanitizeContainerId(result.containerId);
|
|
73
|
+
execSync(`docker start ${attachFlag} ${safeId}`, {
|
|
74
|
+
stdio: flags.attach ? 'inherit' : ['pipe', 'pipe', 'pipe'],
|
|
75
|
+
});
|
|
76
|
+
// Update execution status if we have an execution ID
|
|
77
|
+
if (result.executionId) {
|
|
78
|
+
executionStorage.updateStatus(result.executionId, 'running');
|
|
79
|
+
}
|
|
80
|
+
this.log(`${styles.success('Container started successfully')}\n`);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
this.log(`${styles.error(`Failed to start container: ${error instanceof Error ? error.message : error}`)}\n`);
|
|
84
|
+
}
|
|
85
|
+
db.close();
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
db.close();
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
import { execSync } from 'child_process';
|
|
3
|
+
import { styles } from '../../lib/styles.js';
|
|
4
|
+
import { isDockerRunning } from '../../lib/execution/runners.js';
|
|
5
|
+
export default class DockerStatus extends Command {
|
|
6
|
+
static description = 'Check if Docker daemon is running';
|
|
7
|
+
static examples = [
|
|
8
|
+
'<%= config.bin %> <%= command.id %>',
|
|
9
|
+
];
|
|
10
|
+
static flags = {};
|
|
11
|
+
async run() {
|
|
12
|
+
this.log(`\n${styles.header('Docker Status')}`);
|
|
13
|
+
this.log('─'.repeat(50));
|
|
14
|
+
const running = isDockerRunning();
|
|
15
|
+
if (running) {
|
|
16
|
+
this.log(`${styles.success('Running')} Docker daemon is available`);
|
|
17
|
+
// Get more details
|
|
18
|
+
try {
|
|
19
|
+
const version = execSync('docker version --format "{{.Server.Version}}"', {
|
|
20
|
+
encoding: 'utf-8',
|
|
21
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
22
|
+
}).trim();
|
|
23
|
+
const info = execSync('docker info --format "{{.Containers}} containers ({{.ContainersRunning}} running)"', {
|
|
24
|
+
encoding: 'utf-8',
|
|
25
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
26
|
+
}).trim();
|
|
27
|
+
this.log(`\n${styles.muted(` Version: ${version}`)}`);
|
|
28
|
+
this.log(styles.muted(` ${info}\n`));
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// Ignore errors getting additional info
|
|
32
|
+
this.log('');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
this.log(`${styles.error('Not Running')} Docker daemon is not available\n`);
|
|
37
|
+
this.log(`${styles.muted('Start Docker Desktop or the Docker daemon to use devcontainer features.')}\n`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class DockerStop extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
time: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
};
|
|
10
|
+
static args: {
|
|
11
|
+
target: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { Args, Command, Flags } from '@oclif/core';
|
|
2
|
+
import { execSync } from 'child_process';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import Database from 'better-sqlite3';
|
|
5
|
+
import inquirer from 'inquirer';
|
|
6
|
+
import { styles } from '../../lib/styles.js';
|
|
7
|
+
import { getWorkspaceInfo } from '../../lib/agents/commands.js';
|
|
8
|
+
import { ExecutionStorage } from '../../lib/execution/storage.js';
|
|
9
|
+
import { isDockerRunning } from '../../lib/execution/runners.js';
|
|
10
|
+
import { resolveContainerId, isContainerRunning, sanitizeContainerId } from '../../lib/docker/resolve.js';
|
|
11
|
+
import { shouldOutputJson, outputPromptAsJson, createMetadata, buildPromptConfig, } from '../../lib/prompt-json.js';
|
|
12
|
+
export default class DockerStop extends Command {
|
|
13
|
+
static description = 'Stop a running container (by execution ID, agent name, or container ID)';
|
|
14
|
+
static examples = [
|
|
15
|
+
'<%= config.bin %> <%= command.id %> WORK-001',
|
|
16
|
+
'<%= config.bin %> <%= command.id %> kalanick',
|
|
17
|
+
'<%= config.bin %> <%= command.id %> abc123 --force',
|
|
18
|
+
];
|
|
19
|
+
static flags = {
|
|
20
|
+
force: Flags.boolean({
|
|
21
|
+
char: 'f',
|
|
22
|
+
aliases: ['yes', 'y'],
|
|
23
|
+
description: 'Skip confirmation prompt',
|
|
24
|
+
default: false,
|
|
25
|
+
}),
|
|
26
|
+
time: Flags.integer({
|
|
27
|
+
char: 't',
|
|
28
|
+
description: 'Seconds to wait before killing the container',
|
|
29
|
+
default: 10,
|
|
30
|
+
}),
|
|
31
|
+
json: Flags.boolean({
|
|
32
|
+
description: 'Output prompt configuration as JSON (for AI agents/scripts)',
|
|
33
|
+
default: false,
|
|
34
|
+
}),
|
|
35
|
+
};
|
|
36
|
+
static args = {
|
|
37
|
+
target: Args.string({
|
|
38
|
+
description: 'Execution ID (WORK-XXX), agent name, or container ID',
|
|
39
|
+
required: true,
|
|
40
|
+
}),
|
|
41
|
+
};
|
|
42
|
+
async run() {
|
|
43
|
+
const { args, flags } = await this.parse(DockerStop);
|
|
44
|
+
if (!isDockerRunning()) {
|
|
45
|
+
this.error('Docker is not running. Start Docker Desktop or the Docker daemon first.');
|
|
46
|
+
}
|
|
47
|
+
// Get workspace info
|
|
48
|
+
let workspaceInfo;
|
|
49
|
+
try {
|
|
50
|
+
workspaceInfo = getWorkspaceInfo();
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
this.error('Not in a workspace. Run "prlt init" first.');
|
|
54
|
+
}
|
|
55
|
+
// Open database
|
|
56
|
+
const dbPath = path.join(workspaceInfo.path, '.proletariat', 'workspace.db');
|
|
57
|
+
let db;
|
|
58
|
+
try {
|
|
59
|
+
db = new Database(dbPath);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
this.error('Could not open workspace database.');
|
|
63
|
+
}
|
|
64
|
+
const executionStorage = new ExecutionStorage(db);
|
|
65
|
+
try {
|
|
66
|
+
const result = resolveContainerId(args.target, executionStorage);
|
|
67
|
+
if (!result.containerId) {
|
|
68
|
+
db.close();
|
|
69
|
+
this.error(result.error || 'Could not find container');
|
|
70
|
+
}
|
|
71
|
+
// Check if container is running
|
|
72
|
+
if (!isContainerRunning(result.containerId)) {
|
|
73
|
+
this.log(`\n${styles.warning(`Container ${result.displayName} is not running`)}\n`);
|
|
74
|
+
db.close();
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
this.log(`\n${styles.header('Stop Container')}`);
|
|
78
|
+
this.log(styles.muted(`Target: ${result.displayName}`));
|
|
79
|
+
this.log(styles.muted(`Container: ${result.containerId.substring(0, 12)}\n`));
|
|
80
|
+
// Confirm
|
|
81
|
+
if (!flags.force) {
|
|
82
|
+
// Check if JSON output mode is active
|
|
83
|
+
const jsonMode = shouldOutputJson(flags);
|
|
84
|
+
// Build choices once, use for both JSON and interactive modes
|
|
85
|
+
const confirmChoices = [
|
|
86
|
+
{ name: 'No', value: 'false' },
|
|
87
|
+
{ name: 'Yes', value: 'true' },
|
|
88
|
+
];
|
|
89
|
+
const confirmMessage = `Stop container ${result.displayName}?`;
|
|
90
|
+
// In JSON mode, output confirmation prompt
|
|
91
|
+
if (jsonMode) {
|
|
92
|
+
outputPromptAsJson(buildPromptConfig('list', 'confirmed', confirmMessage, confirmChoices), createMetadata('docker stop', flags));
|
|
93
|
+
db.close();
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const { confirm } = await inquirer.prompt([
|
|
97
|
+
{
|
|
98
|
+
type: 'confirm',
|
|
99
|
+
name: 'confirm',
|
|
100
|
+
message: confirmMessage,
|
|
101
|
+
default: false,
|
|
102
|
+
},
|
|
103
|
+
]);
|
|
104
|
+
if (!confirm) {
|
|
105
|
+
this.log(`${styles.muted('Aborted.')}\n`);
|
|
106
|
+
db.close();
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Stop container
|
|
111
|
+
this.log(styles.muted(`Stopping container (timeout: ${flags.time}s)...`));
|
|
112
|
+
try {
|
|
113
|
+
const safeId = sanitizeContainerId(result.containerId);
|
|
114
|
+
execSync(`docker stop -t ${flags.time} ${safeId}`, {
|
|
115
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
116
|
+
timeout: (flags.time + 5) * 1000,
|
|
117
|
+
});
|
|
118
|
+
// Update execution status if we have an execution ID
|
|
119
|
+
if (result.executionId) {
|
|
120
|
+
executionStorage.updateStatus(result.executionId, 'stopped');
|
|
121
|
+
}
|
|
122
|
+
this.log(`${styles.success('Container stopped successfully')}\n`);
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
this.log(`${styles.error(`Failed to stop container: ${error instanceof Error ? error.message : error}`)}\n`);
|
|
126
|
+
}
|
|
127
|
+
db.close();
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
db.close();
|
|
131
|
+
throw error;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class DockerSync extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
run(): Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
* Get raw container info from Docker
|
|
8
|
+
*/
|
|
9
|
+
private getDockerContainers;
|
|
10
|
+
/**
|
|
11
|
+
* Extract agent name from devcontainer image name.
|
|
12
|
+
* Only used for initial sync - DB is source of truth after that.
|
|
13
|
+
*/
|
|
14
|
+
private extractAgentFromImage;
|
|
15
|
+
}
|