@proletariat/cli 0.3.93 → 0.3.95
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/dist/commands/action/create.d.ts +1 -1
- package/dist/commands/action/delete.d.ts +1 -1
- package/dist/commands/action/index.d.ts +1 -1
- package/dist/commands/action/list.d.ts +1 -1
- package/dist/commands/action/run.d.ts +1 -1
- package/dist/commands/action/show.d.ts +1 -1
- package/dist/commands/action/update.d.ts +1 -1
- package/dist/commands/agent/cleanup.d.ts +3 -4
- package/dist/commands/agent/cleanup.js +5 -4
- package/dist/commands/agent/cleanup.js.map +1 -1
- package/dist/commands/agent/gc.d.ts +3 -4
- package/dist/commands/agent/gc.js +5 -4
- package/dist/commands/agent/gc.js.map +1 -1
- package/dist/commands/agent/index.d.ts +3 -4
- package/dist/commands/agent/index.js +5 -4
- package/dist/commands/agent/index.js.map +1 -1
- package/dist/commands/agent/list.d.ts +3 -4
- package/dist/commands/agent/list.js +5 -4
- package/dist/commands/agent/list.js.map +1 -1
- package/dist/commands/agent/login.d.ts +1 -1
- package/dist/commands/agent/rebuild.d.ts +1 -1
- package/dist/commands/agent/remove.d.ts +3 -4
- package/dist/commands/agent/remove.js +5 -4
- package/dist/commands/agent/remove.js.map +1 -1
- package/dist/commands/agent/restart.d.ts +1 -1
- package/dist/commands/agent/shell.d.ts +1 -1
- package/dist/commands/agent/staff/index.d.ts +3 -4
- package/dist/commands/agent/staff/index.js +5 -4
- package/dist/commands/agent/staff/index.js.map +1 -1
- package/dist/commands/agent/staff/remove.d.ts +3 -4
- package/dist/commands/agent/staff/remove.js +5 -4
- package/dist/commands/agent/staff/remove.js.map +1 -1
- package/dist/commands/agent/status.d.ts +3 -4
- package/dist/commands/agent/status.js +5 -4
- package/dist/commands/agent/status.js.map +1 -1
- package/dist/commands/agent/visit.d.ts +3 -4
- package/dist/commands/agent/visit.js +5 -4
- package/dist/commands/agent/visit.js.map +1 -1
- package/dist/commands/asana/import.d.ts +1 -1
- package/dist/commands/branch/create.d.ts +1 -1
- package/dist/commands/branch/create.js +1 -12
- package/dist/commands/branch/create.js.map +1 -1
- package/dist/commands/branch/index.d.ts +1 -1
- package/dist/commands/branch/list.d.ts +3 -4
- package/dist/commands/branch/list.js +5 -4
- package/dist/commands/branch/list.js.map +1 -1
- package/dist/commands/branch/validate.d.ts +3 -4
- package/dist/commands/branch/validate.js +6 -5
- package/dist/commands/branch/validate.js.map +1 -1
- package/dist/commands/branch/where.d.ts +3 -4
- package/dist/commands/branch/where.js +5 -4
- package/dist/commands/branch/where.js.map +1 -1
- package/dist/commands/commit.js +1 -1
- package/dist/commands/commit.js.map +1 -1
- package/dist/commands/config/index.js +2 -2
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/db/backup.d.ts +16 -0
- package/dist/commands/db/backup.js +125 -0
- package/dist/commands/db/backup.js.map +1 -0
- package/dist/commands/db/repair.js +8 -11
- package/dist/commands/db/repair.js.map +1 -1
- package/dist/commands/diet.d.ts +1 -1
- package/dist/commands/docker/index.js +2 -0
- package/dist/commands/docker/index.js.map +1 -1
- package/dist/commands/docker/rebuild-cache.d.ts +12 -0
- package/dist/commands/docker/rebuild-cache.js +144 -0
- package/dist/commands/docker/rebuild-cache.js.map +1 -0
- package/dist/commands/execution/config.d.ts +3 -4
- package/dist/commands/execution/config.js +5 -4
- package/dist/commands/execution/config.js.map +1 -1
- package/dist/commands/execution/index.d.ts +3 -4
- package/dist/commands/execution/index.js +5 -4
- package/dist/commands/execution/index.js.map +1 -1
- package/dist/commands/execution/list.d.ts +3 -4
- package/dist/commands/execution/list.js +5 -4
- package/dist/commands/execution/list.js.map +1 -1
- package/dist/commands/execution/logs.d.ts +3 -4
- package/dist/commands/execution/logs.js +5 -4
- package/dist/commands/execution/logs.js.map +1 -1
- package/dist/commands/execution/stop.d.ts +3 -4
- package/dist/commands/execution/stop.js +5 -4
- package/dist/commands/execution/stop.js.map +1 -1
- package/dist/commands/execution/view.d.ts +3 -4
- package/dist/commands/execution/view.js +5 -4
- package/dist/commands/execution/view.js.map +1 -1
- package/dist/commands/hook/export.d.ts +3 -4
- package/dist/commands/hook/export.js +5 -4
- package/dist/commands/hook/export.js.map +1 -1
- package/dist/commands/hook/fire.d.ts +3 -4
- package/dist/commands/hook/fire.js +5 -4
- package/dist/commands/hook/fire.js.map +1 -1
- package/dist/commands/hook/index.d.ts +1 -1
- package/dist/commands/hook/list.d.ts +3 -4
- package/dist/commands/hook/list.js +5 -4
- package/dist/commands/hook/list.js.map +1 -1
- package/dist/commands/hook/preset.d.ts +3 -4
- package/dist/commands/hook/preset.js +5 -4
- package/dist/commands/hook/preset.js.map +1 -1
- package/dist/commands/linear/auth.d.ts +1 -1
- package/dist/commands/linear/connect.d.ts +1 -1
- package/dist/commands/linear/import.d.ts +1 -1
- package/dist/commands/linear/status.d.ts +1 -1
- package/dist/commands/linear/sync.d.ts +1 -1
- package/dist/commands/mcp-server.d.ts +8 -2
- package/dist/commands/mcp-server.js +15 -28
- package/dist/commands/mcp-server.js.map +1 -1
- package/dist/commands/monday/connect.d.ts +1 -1
- package/dist/commands/monday/sync.d.ts +1 -1
- package/dist/commands/orchestrate/index.d.ts +3 -4
- package/dist/commands/orchestrate/index.js +5 -4
- package/dist/commands/orchestrate/index.js.map +1 -1
- package/dist/commands/orchestrator/index.d.ts +3 -4
- package/dist/commands/orchestrator/index.js +5 -4
- package/dist/commands/orchestrator/index.js.map +1 -1
- package/dist/commands/orchestrator/start.d.ts +3 -3
- package/dist/commands/orchestrator/start.js +38 -40
- package/dist/commands/orchestrator/start.js.map +1 -1
- package/dist/commands/pr/checks.d.ts +3 -4
- package/dist/commands/pr/checks.js +5 -4
- package/dist/commands/pr/checks.js.map +1 -1
- package/dist/commands/pr/close.d.ts +1 -1
- package/dist/commands/pr/create.d.ts +1 -1
- package/dist/commands/pr/index.d.ts +1 -1
- package/dist/commands/pr/link.d.ts +1 -1
- package/dist/commands/pr/list.d.ts +1 -1
- package/dist/commands/pr/merge.d.ts +1 -1
- package/dist/commands/pr/status.d.ts +1 -1
- package/dist/commands/pull.d.ts +1 -1
- package/dist/commands/repo/add.d.ts +3 -4
- package/dist/commands/repo/add.js +5 -4
- package/dist/commands/repo/add.js.map +1 -1
- package/dist/commands/repo/create.d.ts +3 -4
- package/dist/commands/repo/create.js +5 -4
- package/dist/commands/repo/create.js.map +1 -1
- package/dist/commands/repo/fix-remotes.d.ts +3 -4
- package/dist/commands/repo/fix-remotes.js +5 -4
- package/dist/commands/repo/fix-remotes.js.map +1 -1
- package/dist/commands/repo/index.d.ts +3 -4
- package/dist/commands/repo/index.js +5 -4
- package/dist/commands/repo/index.js.map +1 -1
- package/dist/commands/repo/list.d.ts +3 -4
- package/dist/commands/repo/list.js +5 -4
- package/dist/commands/repo/list.js.map +1 -1
- package/dist/commands/repo/remove.d.ts +1 -1
- package/dist/commands/repo/view.d.ts +1 -1
- package/dist/commands/session/attach.d.ts +1 -1
- package/dist/commands/session/cleanup.d.ts +3 -4
- package/dist/commands/session/cleanup.js +5 -4
- package/dist/commands/session/cleanup.js.map +1 -1
- package/dist/commands/session/create.d.ts +3 -4
- package/dist/commands/session/create.js +5 -4
- package/dist/commands/session/create.js.map +1 -1
- package/dist/commands/session/exec.d.ts +3 -4
- package/dist/commands/session/exec.js +5 -4
- package/dist/commands/session/exec.js.map +1 -1
- package/dist/commands/session/health.d.ts +1 -1
- package/dist/commands/session/health.js +18 -0
- package/dist/commands/session/health.js.map +1 -1
- package/dist/commands/session/index.d.ts +3 -4
- package/dist/commands/session/index.js +9 -4
- package/dist/commands/session/index.js.map +1 -1
- package/dist/commands/session/inspect.d.ts +3 -4
- package/dist/commands/session/inspect.js +5 -4
- package/dist/commands/session/inspect.js.map +1 -1
- package/dist/commands/session/list.d.ts +3 -4
- package/dist/commands/session/list.js +19 -5
- package/dist/commands/session/list.js.map +1 -1
- package/dist/commands/session/peek.d.ts +1 -1
- package/dist/commands/session/prune.d.ts +3 -4
- package/dist/commands/session/prune.js +5 -4
- package/dist/commands/session/prune.js.map +1 -1
- package/dist/commands/session/report.d.ts +25 -5
- package/dist/commands/session/report.js +201 -5
- package/dist/commands/session/report.js.map +1 -1
- package/dist/commands/session/restart.d.ts +3 -4
- package/dist/commands/session/restart.js +5 -4
- package/dist/commands/session/restart.js.map +1 -1
- package/dist/commands/session/watch.d.ts +17 -0
- package/dist/commands/session/watch.js +139 -0
- package/dist/commands/session/watch.js.map +1 -0
- package/dist/commands/shortcut/connect.d.ts +1 -1
- package/dist/commands/support/logs.d.ts +1 -1
- package/dist/commands/ticket/create.d.ts +1 -1
- package/dist/commands/ticket/delete.d.ts +1 -1
- package/dist/commands/ticket/edit.d.ts +1 -1
- package/dist/commands/ticket/index.d.ts +3 -4
- package/dist/commands/ticket/index.js +11 -40
- package/dist/commands/ticket/index.js.map +1 -1
- package/dist/commands/ticket/list.d.ts +1 -1
- package/dist/commands/ticket/move.d.ts +1 -1
- package/dist/commands/ticket/show.d.ts +8 -7
- package/dist/commands/ticket/show.js +101 -8
- package/dist/commands/ticket/show.js.map +1 -1
- package/dist/commands/ticket/update.d.ts +1 -1
- package/dist/commands/trello/configure.d.ts +1 -1
- package/dist/commands/trello/import.d.ts +1 -1
- package/dist/commands/trello/sync.d.ts +1 -1
- package/dist/commands/{dashboard/index.d.ts → web.d.ts} +10 -4
- package/dist/commands/web.js +82 -0
- package/dist/commands/web.js.map +1 -0
- package/dist/commands/work/asana.d.ts +1 -1
- package/dist/commands/work/complete.d.ts +1 -1
- package/dist/commands/work/groom.d.ts +1 -1
- package/dist/commands/work/hooks/add.d.ts +3 -4
- package/dist/commands/work/hooks/add.js +5 -4
- package/dist/commands/work/hooks/add.js.map +1 -1
- package/dist/commands/work/hooks/index.d.ts +1 -1
- package/dist/commands/work/hooks/list.d.ts +3 -4
- package/dist/commands/work/hooks/list.js +5 -4
- package/dist/commands/work/hooks/list.js.map +1 -1
- package/dist/commands/work/hooks/remove.d.ts +1 -1
- package/dist/commands/work/hooks/toggle.d.ts +3 -4
- package/dist/commands/work/hooks/toggle.js +5 -4
- package/dist/commands/work/hooks/toggle.js.map +1 -1
- package/dist/commands/work/implement.d.ts +1 -1
- package/dist/commands/work/index.d.ts +1 -1
- package/dist/commands/work/jira.d.ts +1 -1
- package/dist/commands/work/linear.d.ts +1 -1
- package/dist/commands/work/peek.d.ts +3 -4
- package/dist/commands/work/peek.js +5 -4
- package/dist/commands/work/peek.js.map +1 -1
- package/dist/commands/{ticket/cancel.d.ts → work/propose.d.ts} +11 -5
- package/dist/commands/work/propose.js +57 -0
- package/dist/commands/work/propose.js.map +1 -0
- package/dist/commands/work/ready.d.ts +1 -1
- package/dist/commands/work/ready.js +2 -2
- package/dist/commands/work/ready.js.map +1 -1
- package/dist/commands/work/rebase.d.ts +2 -2
- package/dist/commands/work/rebase.js +52 -49
- package/dist/commands/work/rebase.js.map +1 -1
- package/dist/commands/work/resolve.d.ts +1 -1
- package/dist/commands/work/review.d.ts +1 -1
- package/dist/commands/work/ship.d.ts +7 -1
- package/dist/commands/work/ship.js +217 -48
- package/dist/commands/work/ship.js.map +1 -1
- package/dist/commands/work/shortcut.d.ts +1 -1
- package/dist/commands/work/source/set.d.ts +1 -1
- package/dist/commands/work/source.d.ts +1 -1
- package/dist/commands/work/spawn.d.ts +1 -1
- package/dist/commands/work/start.d.ts +1 -1
- package/dist/commands/work/start.js +3 -6
- package/dist/commands/work/start.js.map +1 -1
- package/dist/commands/work/status.d.ts +1 -1
- package/dist/commands/work/stop.d.ts +3 -4
- package/dist/commands/work/stop.js +5 -4
- package/dist/commands/work/stop.js.map +1 -1
- package/dist/commands/work/watch.d.ts +1 -1
- package/dist/hooks/init.js +12 -2
- package/dist/hooks/init.js.map +1 -1
- package/dist/lib/asana/config.js +13 -7
- package/dist/lib/asana/config.js.map +1 -1
- package/dist/lib/branch/index.d.ts +6 -5
- package/dist/lib/branch/index.js +8 -13
- package/dist/lib/branch/index.js.map +1 -1
- package/dist/lib/clickup/client.d.ts +92 -0
- package/dist/lib/clickup/client.js +150 -0
- package/dist/lib/clickup/client.js.map +1 -0
- package/dist/lib/clickup/config.d.ts +41 -0
- package/dist/lib/clickup/config.js +104 -0
- package/dist/lib/clickup/config.js.map +1 -0
- package/dist/lib/clickup/index.d.ts +4 -0
- package/dist/lib/clickup/index.js +4 -0
- package/dist/lib/clickup/index.js.map +1 -0
- package/dist/lib/clickup/types.d.ts +104 -0
- package/dist/lib/clickup/types.js +34 -0
- package/dist/lib/clickup/types.js.map +1 -0
- package/dist/lib/dashboard/html.d.ts +2 -1
- package/dist/lib/dashboard/html.js +150 -522
- package/dist/lib/dashboard/html.js.map +1 -1
- package/dist/lib/database/credential-store.d.ts +64 -0
- package/dist/lib/database/credential-store.js +306 -0
- package/dist/lib/database/credential-store.js.map +1 -0
- package/dist/lib/database/db-safety.d.ts +48 -9
- package/dist/lib/database/db-safety.js +308 -43
- package/dist/lib/database/db-safety.js.map +1 -1
- package/dist/lib/database/index.d.ts +2 -1
- package/dist/lib/database/index.js +3 -1
- package/dist/lib/database/index.js.map +1 -1
- package/dist/lib/database/pmo-bootstrap.d.ts +7 -0
- package/dist/lib/database/pmo-bootstrap.js +45 -20
- package/dist/lib/database/pmo-bootstrap.js.map +1 -1
- package/dist/lib/database/workspace.js +7 -1
- package/dist/lib/database/workspace.js.map +1 -1
- package/dist/lib/execution/devcontainer.js +51 -0
- package/dist/lib/execution/devcontainer.js.map +1 -1
- package/dist/lib/execution/runners/docker-management.d.ts +23 -0
- package/dist/lib/execution/runners/docker-management.js +99 -7
- package/dist/lib/execution/runners/docker-management.js.map +1 -1
- package/dist/lib/execution/runners/docker.js +8 -0
- package/dist/lib/execution/runners/docker.js.map +1 -1
- package/dist/lib/execution/runners/prompt-builder.js +9 -6
- package/dist/lib/execution/runners/prompt-builder.js.map +1 -1
- package/dist/lib/execution/session-utils.d.ts +4 -0
- package/dist/lib/execution/session-utils.js +34 -24
- package/dist/lib/execution/session-utils.js.map +1 -1
- package/dist/lib/execution/spawner.js +2 -4
- package/dist/lib/execution/spawner.js.map +1 -1
- package/dist/lib/execution/storage.d.ts +29 -1
- package/dist/lib/execution/storage.js +77 -0
- package/dist/lib/execution/storage.js.map +1 -1
- package/dist/lib/execution/types.d.ts +17 -6
- package/dist/lib/execution/types.js +11 -8
- package/dist/lib/execution/types.js.map +1 -1
- package/dist/lib/external-issues/types.d.ts +3 -3
- package/dist/lib/external-issues/types.js +1 -1
- package/dist/lib/external-issues/types.js.map +1 -1
- package/dist/lib/jira/config.js +10 -4
- package/dist/lib/jira/config.js.map +1 -1
- package/dist/lib/linear/config.js +13 -8
- package/dist/lib/linear/config.js.map +1 -1
- package/dist/lib/machine-config.d.ts +8 -0
- package/dist/lib/machine-config.js +37 -0
- package/dist/lib/machine-config.js.map +1 -1
- package/dist/lib/mcp/generator.d.ts +26 -0
- package/dist/lib/mcp/generator.js +219 -0
- package/dist/lib/mcp/generator.js.map +1 -0
- package/dist/lib/mcp/index.d.ts +1 -0
- package/dist/lib/mcp/index.js +1 -0
- package/dist/lib/mcp/index.js.map +1 -1
- package/dist/lib/mcp/tools/index.d.ts +0 -11
- package/dist/lib/mcp/tools/index.js +0 -11
- package/dist/lib/mcp/tools/index.js.map +1 -1
- package/dist/lib/mcp/tools/overrides/index.d.ts +23 -0
- package/dist/lib/mcp/tools/overrides/index.js +30 -0
- package/dist/lib/mcp/tools/overrides/index.js.map +1 -0
- package/dist/lib/mcp/tools/overrides/tmux.d.ts +11 -0
- package/dist/lib/mcp/tools/overrides/tmux.js +184 -0
- package/dist/lib/mcp/tools/overrides/tmux.js.map +1 -0
- package/dist/lib/mcp/tools/overrides/work-start.d.ts +12 -0
- package/dist/lib/mcp/tools/overrides/work-start.js +108 -0
- package/dist/lib/mcp/tools/overrides/work-start.js.map +1 -0
- package/dist/lib/mcp/tools/ticket.js +10 -48
- package/dist/lib/mcp/tools/ticket.js.map +1 -1
- package/dist/lib/monday/config.js +11 -5
- package/dist/lib/monday/config.js.map +1 -1
- package/dist/lib/orchestrate/poller.d.ts +1 -1
- package/dist/lib/orchestrate/poller.js +1 -1
- package/dist/lib/pmo/base-command.d.ts +20 -152
- package/dist/lib/pmo/base-command.js +32 -198
- package/dist/lib/pmo/base-command.js.map +1 -1
- package/dist/lib/pmo/index.d.ts +1 -0
- package/dist/lib/pmo/index.js +3 -0
- package/dist/lib/pmo/index.js.map +1 -1
- package/dist/lib/pmo/storage/base.d.ts +0 -18
- package/dist/lib/pmo/storage/base.js +5 -234
- package/dist/lib/pmo/storage/base.js.map +1 -1
- package/dist/lib/pmo/storage/index.d.ts +1 -76
- package/dist/lib/pmo/storage/index.js +1 -215
- package/dist/lib/pmo/storage/index.js.map +1 -1
- package/dist/lib/pmo/storage/tickets.d.ts +2 -2
- package/dist/lib/pmo/storage/tickets.js +4 -34
- package/dist/lib/pmo/storage/tickets.js.map +1 -1
- package/dist/lib/pmo/types.d.ts +0 -37
- package/dist/lib/providers/clickup-provider.d.ts +28 -0
- package/dist/lib/providers/clickup-provider.js +353 -0
- package/dist/lib/providers/clickup-provider.js.map +1 -0
- package/dist/lib/providers/index.d.ts +1 -0
- package/dist/lib/providers/index.js +1 -0
- package/dist/lib/providers/index.js.map +1 -1
- package/dist/lib/providers/resolver.d.ts +1 -1
- package/dist/lib/providers/resolver.js +32 -5
- package/dist/lib/providers/resolver.js.map +1 -1
- package/dist/lib/providers/trello-provider.d.ts +28 -0
- package/dist/lib/providers/trello-provider.js +381 -0
- package/dist/lib/providers/trello-provider.js.map +1 -0
- package/dist/lib/providers/types.d.ts +1 -1
- package/dist/lib/runners/claude-code-runner.js +13 -4
- package/dist/lib/runners/claude-code-runner.js.map +1 -1
- package/dist/lib/runtime-command.d.ts +219 -0
- package/dist/lib/runtime-command.js +320 -0
- package/dist/lib/runtime-command.js.map +1 -0
- package/dist/lib/session/heartbeat.d.ts +45 -0
- package/dist/lib/session/heartbeat.js +150 -0
- package/dist/lib/session/heartbeat.js.map +1 -0
- package/dist/lib/session/index.d.ts +7 -0
- package/dist/lib/session/index.js +8 -0
- package/dist/lib/session/index.js.map +1 -0
- package/dist/lib/session/watcher.d.ts +79 -0
- package/dist/lib/session/watcher.js +142 -0
- package/dist/lib/session/watcher.js.map +1 -0
- package/dist/lib/shipping/auto-merge.d.ts +57 -0
- package/dist/lib/shipping/auto-merge.js +311 -0
- package/dist/lib/shipping/auto-merge.js.map +1 -0
- package/dist/lib/shipping/github.d.ts +68 -0
- package/dist/lib/shipping/github.js +217 -0
- package/dist/lib/shipping/github.js.map +1 -0
- package/dist/lib/shipping/index.d.ts +13 -0
- package/dist/lib/shipping/index.js +11 -0
- package/dist/lib/shipping/index.js.map +1 -0
- package/dist/lib/shipping/rebase.d.ts +35 -0
- package/dist/lib/shipping/rebase.js +107 -0
- package/dist/lib/shipping/rebase.js.map +1 -0
- package/dist/lib/shipping/types.d.ts +181 -0
- package/dist/lib/shipping/types.js +9 -0
- package/dist/lib/shipping/types.js.map +1 -0
- package/dist/lib/shortcut/config.js +13 -7
- package/dist/lib/shortcut/config.js.map +1 -1
- package/dist/lib/trello/client.d.ts +1 -0
- package/dist/lib/trello/client.js +6 -0
- package/dist/lib/trello/client.js.map +1 -1
- package/dist/lib/trello/config.js +17 -12
- package/dist/lib/trello/config.js.map +1 -1
- package/dist/lib/work-lifecycle/events.d.ts +1 -1
- package/dist/lib/work-source/config.d.ts +1 -1
- package/dist/lib/work-source/config.js +11 -1
- package/dist/lib/work-source/config.js.map +1 -1
- package/dist/lib/work-source/provider-sources.js +6 -1
- package/dist/lib/work-source/provider-sources.js.map +1 -1
- package/oclif.manifest.json +3810 -5723
- package/package.json +8 -8
- package/dist/commands/board/index.d.ts +0 -21
- package/dist/commands/board/index.js +0 -263
- package/dist/commands/board/index.js.map +0 -1
- package/dist/commands/board/view.d.ts +0 -15
- package/dist/commands/board/view.js +0 -137
- package/dist/commands/board/view.js.map +0 -1
- package/dist/commands/board/watch.d.ts +0 -15
- package/dist/commands/board/watch.js +0 -59
- package/dist/commands/board/watch.js.map +0 -1
- package/dist/commands/dashboard/index.js +0 -117
- package/dist/commands/dashboard/index.js.map +0 -1
- package/dist/commands/dashboard.d.ts +0 -38
- package/dist/commands/dashboard.js +0 -353
- package/dist/commands/dashboard.js.map +0 -1
- package/dist/commands/pmo/init.d.ts +0 -28
- package/dist/commands/pmo/init.js +0 -410
- package/dist/commands/pmo/init.js.map +0 -1
- package/dist/commands/project/archive.d.ts +0 -18
- package/dist/commands/project/archive.js +0 -79
- package/dist/commands/project/archive.js.map +0 -1
- package/dist/commands/project/create.d.ts +0 -24
- package/dist/commands/project/create.js +0 -191
- package/dist/commands/project/create.js.map +0 -1
- package/dist/commands/project/delete.d.ts +0 -18
- package/dist/commands/project/delete.js +0 -115
- package/dist/commands/project/delete.js.map +0 -1
- package/dist/commands/project/index.d.ts +0 -14
- package/dist/commands/project/index.js +0 -60
- package/dist/commands/project/index.js.map +0 -1
- package/dist/commands/project/list.d.ts +0 -16
- package/dist/commands/project/list.js +0 -115
- package/dist/commands/project/list.js.map +0 -1
- package/dist/commands/project/spec.d.ts +0 -19
- package/dist/commands/project/spec.js +0 -218
- package/dist/commands/project/spec.js.map +0 -1
- package/dist/commands/project/unarchive.d.ts +0 -17
- package/dist/commands/project/unarchive.js +0 -55
- package/dist/commands/project/unarchive.js.map +0 -1
- package/dist/commands/project/update.d.ts +0 -19
- package/dist/commands/project/update.js +0 -161
- package/dist/commands/project/update.js.map +0 -1
- package/dist/commands/project/view.d.ts +0 -17
- package/dist/commands/project/view.js +0 -107
- package/dist/commands/project/view.js.map +0 -1
- package/dist/commands/ticket/bulk.d.ts +0 -14
- package/dist/commands/ticket/bulk.js +0 -141
- package/dist/commands/ticket/bulk.js.map +0 -1
- package/dist/commands/ticket/cancel.js +0 -206
- package/dist/commands/ticket/cancel.js.map +0 -1
- package/dist/commands/ticket/category.d.ts +0 -15
- package/dist/commands/ticket/category.js +0 -64
- package/dist/commands/ticket/category.js.map +0 -1
- package/dist/commands/ticket/complete.d.ts +0 -17
- package/dist/commands/ticket/complete.js +0 -193
- package/dist/commands/ticket/complete.js.map +0 -1
- package/dist/commands/ticket/epic.d.ts +0 -21
- package/dist/commands/ticket/epic.js +0 -306
- package/dist/commands/ticket/epic.js.map +0 -1
- package/dist/commands/ticket/link/block.d.ts +0 -15
- package/dist/commands/ticket/link/block.js +0 -96
- package/dist/commands/ticket/link/block.js.map +0 -1
- package/dist/commands/ticket/link/duplicates.d.ts +0 -15
- package/dist/commands/ticket/link/duplicates.js +0 -96
- package/dist/commands/ticket/link/duplicates.js.map +0 -1
- package/dist/commands/ticket/link/index.d.ts +0 -14
- package/dist/commands/ticket/link/index.js +0 -99
- package/dist/commands/ticket/link/index.js.map +0 -1
- package/dist/commands/ticket/link/relates.d.ts +0 -15
- package/dist/commands/ticket/link/relates.js +0 -96
- package/dist/commands/ticket/link/relates.js.map +0 -1
- package/dist/commands/ticket/project.d.ts +0 -19
- package/dist/commands/ticket/project.js +0 -257
- package/dist/commands/ticket/project.js.map +0 -1
- package/dist/commands/ticket/reassign.d.ts +0 -20
- package/dist/commands/ticket/reassign.js +0 -340
- package/dist/commands/ticket/reassign.js.map +0 -1
- package/dist/commands/ticket/resolve.d.ts +0 -68
- package/dist/commands/ticket/resolve.js +0 -306
- package/dist/commands/ticket/resolve.js.map +0 -1
- package/dist/commands/ticket/spec.d.ts +0 -19
- package/dist/commands/ticket/spec.js +0 -260
- package/dist/commands/ticket/spec.js.map +0 -1
- package/dist/commands/ticket/status.d.ts +0 -14
- package/dist/commands/ticket/status.js +0 -84
- package/dist/commands/ticket/status.js.map +0 -1
- package/dist/commands/ticket/view.d.ts +0 -14
- package/dist/commands/ticket/view.js +0 -113
- package/dist/commands/ticket/view.js.map +0 -1
- package/dist/lib/mcp/tools/board.d.ts +0 -6
- package/dist/lib/mcp/tools/board.js +0 -190
- package/dist/lib/mcp/tools/board.js.map +0 -1
- package/dist/lib/mcp/tools/category.d.ts +0 -6
- package/dist/lib/mcp/tools/category.js +0 -85
- package/dist/lib/mcp/tools/category.js.map +0 -1
- package/dist/lib/mcp/tools/epic.d.ts +0 -6
- package/dist/lib/mcp/tools/epic.js +0 -184
- package/dist/lib/mcp/tools/epic.js.map +0 -1
- package/dist/lib/mcp/tools/label.d.ts +0 -6
- package/dist/lib/mcp/tools/label.js +0 -339
- package/dist/lib/mcp/tools/label.js.map +0 -1
- package/dist/lib/mcp/tools/phase.d.ts +0 -6
- package/dist/lib/mcp/tools/phase.js +0 -132
- package/dist/lib/mcp/tools/phase.js.map +0 -1
- package/dist/lib/mcp/tools/project.d.ts +0 -6
- package/dist/lib/mcp/tools/project.js +0 -197
- package/dist/lib/mcp/tools/project.js.map +0 -1
- package/dist/lib/mcp/tools/roadmap.d.ts +0 -6
- package/dist/lib/mcp/tools/roadmap.js +0 -124
- package/dist/lib/mcp/tools/roadmap.js.map +0 -1
- package/dist/lib/mcp/tools/status.d.ts +0 -6
- package/dist/lib/mcp/tools/status.js +0 -110
- package/dist/lib/mcp/tools/status.js.map +0 -1
- package/dist/lib/mcp/tools/template.d.ts +0 -6
- package/dist/lib/mcp/tools/template.js +0 -108
- package/dist/lib/mcp/tools/template.js.map +0 -1
- package/dist/lib/mcp/tools/view.d.ts +0 -6
- package/dist/lib/mcp/tools/view.js +0 -77
- package/dist/lib/mcp/tools/view.js.map +0 -1
- package/dist/lib/mcp/tools/workflow.d.ts +0 -6
- package/dist/lib/mcp/tools/workflow.js +0 -96
- package/dist/lib/mcp/tools/workflow.js.map +0 -1
- package/dist/lib/pmo/storage/categories.d.ts +0 -50
- package/dist/lib/pmo/storage/categories.js +0 -206
- package/dist/lib/pmo/storage/categories.js.map +0 -1
- package/dist/lib/pmo/storage/labels.d.ts +0 -55
- package/dist/lib/pmo/storage/labels.js +0 -347
- package/dist/lib/pmo/storage/labels.js.map +0 -1
- package/dist/lib/pmo/storage/phases.d.ts +0 -65
- package/dist/lib/pmo/storage/phases.js +0 -393
- package/dist/lib/pmo/storage/phases.js.map +0 -1
- package/dist/lib/pmo/storage/roadmaps.d.ts +0 -64
- package/dist/lib/pmo/storage/roadmaps.js +0 -373
- package/dist/lib/pmo/storage/roadmaps.js.map +0 -1
- package/dist/lib/pmo/storage/views.d.ts +0 -57
- package/dist/lib/pmo/storage/views.js +0 -456
- package/dist/lib/pmo/storage/views.js.map +0 -1
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-Merge Orchestration
|
|
3
|
+
*
|
|
4
|
+
* Implements the --when-green watch loop that polls CI status and
|
|
5
|
+
* automatically merges a PR once all checks pass. Handles the full
|
|
6
|
+
* rebase+CI cycle automatically.
|
|
7
|
+
*
|
|
8
|
+
* Flow:
|
|
9
|
+
* 1. Optionally enable native auto-merge as a safety net
|
|
10
|
+
* 2. Poll CI status at regular intervals
|
|
11
|
+
* 3. If CI is green and branch is up to date, merge
|
|
12
|
+
* 4. If branch has conflicts, rebase and wait for CI to rerun
|
|
13
|
+
* 5. If CI fails, exit with error
|
|
14
|
+
* 6. If timeout, exit with error
|
|
15
|
+
*/
|
|
16
|
+
import { getPRChecks, mergePR, } from '../pr/index.js';
|
|
17
|
+
import { execSync } from 'node:child_process';
|
|
18
|
+
const DEFAULT_TIMEOUT_MS = 60 * 60 * 1000; // 60 minutes
|
|
19
|
+
const DEFAULT_POLL_INTERVAL_MS = 30 * 1000; // 30 seconds
|
|
20
|
+
function sleep(ms) {
|
|
21
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Check if a PR has merge conflicts with its base branch.
|
|
25
|
+
*/
|
|
26
|
+
function checkMergeConflicts(prNumber, cwd) {
|
|
27
|
+
try {
|
|
28
|
+
const result = execSync(`gh pr view ${prNumber} --json mergeable -q .mergeable`, {
|
|
29
|
+
cwd,
|
|
30
|
+
encoding: 'utf-8',
|
|
31
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
32
|
+
}).trim();
|
|
33
|
+
return result === 'CONFLICTING';
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Check if a PR has already been merged.
|
|
41
|
+
*/
|
|
42
|
+
function isPRMerged(prNumber, cwd) {
|
|
43
|
+
try {
|
|
44
|
+
const result = execSync(`gh pr view ${prNumber} --json state -q .state`, {
|
|
45
|
+
cwd,
|
|
46
|
+
encoding: 'utf-8',
|
|
47
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
48
|
+
}).trim();
|
|
49
|
+
return result === 'MERGED';
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Rebase a PR branch onto its base branch and force-push.
|
|
57
|
+
*/
|
|
58
|
+
function rebaseOntoBase(headBranch, baseBranch, cwd) {
|
|
59
|
+
try {
|
|
60
|
+
execSync('git fetch origin', {
|
|
61
|
+
cwd,
|
|
62
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
63
|
+
});
|
|
64
|
+
execSync(`git checkout ${headBranch}`, {
|
|
65
|
+
cwd,
|
|
66
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
67
|
+
});
|
|
68
|
+
execSync(`git rebase origin/${baseBranch}`, {
|
|
69
|
+
cwd,
|
|
70
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
71
|
+
});
|
|
72
|
+
execSync(`git push --force-with-lease origin ${headBranch}`, {
|
|
73
|
+
cwd,
|
|
74
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
75
|
+
});
|
|
76
|
+
return { success: true };
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
try {
|
|
80
|
+
execSync('git rebase --abort', {
|
|
81
|
+
cwd,
|
|
82
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// Ignore abort failures
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
success: false,
|
|
90
|
+
error: error instanceof Error ? error.message : 'Unknown rebase error',
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const defaultDeps = {
|
|
95
|
+
getPRChecks,
|
|
96
|
+
mergePR,
|
|
97
|
+
checkMergeConflicts,
|
|
98
|
+
isPRMerged,
|
|
99
|
+
rebaseOntoBase,
|
|
100
|
+
sleep,
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Watch a PR and ship it when CI turns green.
|
|
104
|
+
*
|
|
105
|
+
* This is the core implementation of `--when-green`. It enters a poll loop
|
|
106
|
+
* that checks CI status and handles the rebase+merge cycle automatically.
|
|
107
|
+
*
|
|
108
|
+
* If a native auto-merge provider is given, it will be enabled as a safety net
|
|
109
|
+
* so that even if this process dies, the PR will still auto-merge when ready.
|
|
110
|
+
*
|
|
111
|
+
* @param options - Watch loop configuration
|
|
112
|
+
* @param autoMergeProvider - Optional provider for native auto-merge
|
|
113
|
+
* @param deps - Injectable dependencies for testing
|
|
114
|
+
*/
|
|
115
|
+
export async function watchAndShip(options, autoMergeProvider, deps = defaultDeps) {
|
|
116
|
+
const { prNumber, method, deleteBranch, admin, noRebase, cwd, headBranch, baseBranch, onProgress, onWarning, timeoutMs = DEFAULT_TIMEOUT_MS, pollIntervalMs = DEFAULT_POLL_INTERVAL_MS, } = options;
|
|
117
|
+
let autoMergeEnabled = false;
|
|
118
|
+
let pollCycles = 0;
|
|
119
|
+
let rebasePerformed = false;
|
|
120
|
+
// Step 1: Try to enable native auto-merge as a safety net
|
|
121
|
+
if (autoMergeProvider) {
|
|
122
|
+
const autoResult = autoMergeProvider.enableAutoMerge(prNumber, method, cwd);
|
|
123
|
+
if (autoResult.success) {
|
|
124
|
+
autoMergeEnabled = true;
|
|
125
|
+
if (autoResult.alreadyEnabled) {
|
|
126
|
+
onProgress?.('Auto-merge already enabled');
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
onProgress?.('Enabled native auto-merge as safety net');
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
onWarning?.(`Could not enable native auto-merge: ${autoResult.error}. Will poll manually.`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Step 2: Enter poll loop
|
|
137
|
+
const startTime = Date.now();
|
|
138
|
+
const maxRebasesPerCycle = 3; // Prevent infinite rebase loops
|
|
139
|
+
let rebaseCount = 0;
|
|
140
|
+
while (Date.now() - startTime < timeoutMs) {
|
|
141
|
+
pollCycles++;
|
|
142
|
+
// Check if PR was already merged (by auto-merge or someone else)
|
|
143
|
+
if (deps.isPRMerged(prNumber, cwd)) {
|
|
144
|
+
onProgress?.('PR was merged (auto-merge or external)');
|
|
145
|
+
return {
|
|
146
|
+
merged: true,
|
|
147
|
+
autoMergeEnabled,
|
|
148
|
+
pollCycles,
|
|
149
|
+
rebasePerformed,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
// Check CI status
|
|
153
|
+
const checks = deps.getPRChecks(prNumber, cwd);
|
|
154
|
+
// No checks configured — can merge immediately
|
|
155
|
+
if (checks.length === 0) {
|
|
156
|
+
onProgress?.('No CI checks configured — merging immediately');
|
|
157
|
+
const mergeResult = deps.mergePR(prNumber, { method, deleteBranch, admin, cwd });
|
|
158
|
+
if (mergeResult.success) {
|
|
159
|
+
return {
|
|
160
|
+
merged: true,
|
|
161
|
+
autoMergeEnabled,
|
|
162
|
+
pollCycles,
|
|
163
|
+
rebasePerformed,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
merged: false,
|
|
168
|
+
autoMergeEnabled,
|
|
169
|
+
pollCycles,
|
|
170
|
+
rebasePerformed,
|
|
171
|
+
error: `Merge failed: ${mergeResult.error}`,
|
|
172
|
+
errorCode: 'MERGE_FAILED',
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
const failed = checks.filter(c => c.conclusion === 'FAILURE');
|
|
176
|
+
const pending = checks.filter(c => !c.conclusion || c.status === 'IN_PROGRESS' || c.status === 'QUEUED');
|
|
177
|
+
const passed = checks.filter(c => c.conclusion === 'SUCCESS' || c.conclusion === 'SKIPPED');
|
|
178
|
+
// CI has failures — exit
|
|
179
|
+
if (pending.length === 0 && failed.length > 0) {
|
|
180
|
+
const failedNames = failed.map(c => c.name).join(', ');
|
|
181
|
+
// Disable auto-merge if we enabled it
|
|
182
|
+
if (autoMergeEnabled && autoMergeProvider) {
|
|
183
|
+
autoMergeProvider.disableAutoMerge(prNumber, cwd);
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
merged: false,
|
|
187
|
+
autoMergeEnabled,
|
|
188
|
+
pollCycles,
|
|
189
|
+
rebasePerformed,
|
|
190
|
+
error: `CI checks failed: ${failedNames}. Fix the failures before shipping.`,
|
|
191
|
+
errorCode: 'CI_FAILED',
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
// CI still pending — wait
|
|
195
|
+
if (pending.length > 0) {
|
|
196
|
+
if (pollCycles === 1) {
|
|
197
|
+
onProgress?.(`Waiting for CI (${pending.length} pending, ${passed.length} passed)...`);
|
|
198
|
+
}
|
|
199
|
+
else if (pollCycles % 4 === 0) {
|
|
200
|
+
// Log progress every ~2 minutes
|
|
201
|
+
const elapsed = Math.round((Date.now() - startTime) / 60_000);
|
|
202
|
+
onProgress?.(`Still waiting for CI — ${pending.length} pending (${elapsed}m elapsed)`);
|
|
203
|
+
}
|
|
204
|
+
await deps.sleep(pollIntervalMs);
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
// All CI checks passed! Check for merge conflicts.
|
|
208
|
+
onProgress?.(`CI green (${passed.length} checks passed)`);
|
|
209
|
+
const hasConflicts = deps.checkMergeConflicts(prNumber, cwd);
|
|
210
|
+
if (hasConflicts) {
|
|
211
|
+
if (noRebase) {
|
|
212
|
+
if (autoMergeEnabled && autoMergeProvider) {
|
|
213
|
+
autoMergeProvider.disableAutoMerge(prNumber, cwd);
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
merged: false,
|
|
217
|
+
autoMergeEnabled,
|
|
218
|
+
pollCycles,
|
|
219
|
+
rebasePerformed,
|
|
220
|
+
error: `PR #${prNumber} has merge conflicts. Resolve them manually or run without --no-rebase.`,
|
|
221
|
+
errorCode: 'MERGE_CONFLICTS',
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
if (rebaseCount >= maxRebasesPerCycle) {
|
|
225
|
+
if (autoMergeEnabled && autoMergeProvider) {
|
|
226
|
+
autoMergeProvider.disableAutoMerge(prNumber, cwd);
|
|
227
|
+
}
|
|
228
|
+
return {
|
|
229
|
+
merged: false,
|
|
230
|
+
autoMergeEnabled,
|
|
231
|
+
pollCycles,
|
|
232
|
+
rebasePerformed,
|
|
233
|
+
error: `Rebase limit reached (${maxRebasesPerCycle}). Base branch is changing too quickly.`,
|
|
234
|
+
errorCode: 'REBASE_LIMIT',
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
onProgress?.('Merge conflicts detected, rebasing...');
|
|
238
|
+
const rebaseResult = deps.rebaseOntoBase(headBranch, baseBranch, cwd);
|
|
239
|
+
if (!rebaseResult.success) {
|
|
240
|
+
if (autoMergeEnabled && autoMergeProvider) {
|
|
241
|
+
autoMergeProvider.disableAutoMerge(prNumber, cwd);
|
|
242
|
+
}
|
|
243
|
+
return {
|
|
244
|
+
merged: false,
|
|
245
|
+
autoMergeEnabled,
|
|
246
|
+
pollCycles,
|
|
247
|
+
rebasePerformed,
|
|
248
|
+
error: `Rebase failed: ${rebaseResult.error}. Resolve conflicts manually.`,
|
|
249
|
+
errorCode: 'REBASE_FAILED',
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
rebasePerformed = true;
|
|
253
|
+
rebaseCount++;
|
|
254
|
+
onProgress?.('Rebased and force-pushed. Waiting for CI to rerun...');
|
|
255
|
+
await deps.sleep(pollIntervalMs);
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
// CI green + no conflicts — merge!
|
|
259
|
+
// If auto-merge is enabled, it may have already merged. Check first.
|
|
260
|
+
if (deps.isPRMerged(prNumber, cwd)) {
|
|
261
|
+
onProgress?.('PR was auto-merged');
|
|
262
|
+
return {
|
|
263
|
+
merged: true,
|
|
264
|
+
autoMergeEnabled,
|
|
265
|
+
pollCycles,
|
|
266
|
+
rebasePerformed,
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
onProgress?.(`Merging PR #${prNumber} (${method})...`);
|
|
270
|
+
const mergeResult = deps.mergePR(prNumber, { method, deleteBranch, admin, cwd });
|
|
271
|
+
if (mergeResult.success) {
|
|
272
|
+
return {
|
|
273
|
+
merged: true,
|
|
274
|
+
autoMergeEnabled,
|
|
275
|
+
pollCycles,
|
|
276
|
+
rebasePerformed,
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
// Merge failed — could be a race condition. Check if already merged.
|
|
280
|
+
if (deps.isPRMerged(prNumber, cwd)) {
|
|
281
|
+
onProgress?.('PR was merged by another process');
|
|
282
|
+
return {
|
|
283
|
+
merged: true,
|
|
284
|
+
autoMergeEnabled,
|
|
285
|
+
pollCycles,
|
|
286
|
+
rebasePerformed,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
return {
|
|
290
|
+
merged: false,
|
|
291
|
+
autoMergeEnabled,
|
|
292
|
+
pollCycles,
|
|
293
|
+
rebasePerformed,
|
|
294
|
+
error: `Merge failed: ${mergeResult.error}`,
|
|
295
|
+
errorCode: 'MERGE_FAILED',
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
// Timeout — auto-merge may still complete later if enabled
|
|
299
|
+
const timeoutMinutes = Math.round(timeoutMs / 60_000);
|
|
300
|
+
return {
|
|
301
|
+
merged: false,
|
|
302
|
+
autoMergeEnabled,
|
|
303
|
+
pollCycles,
|
|
304
|
+
rebasePerformed,
|
|
305
|
+
error: autoMergeEnabled
|
|
306
|
+
? `Timed out after ${timeoutMinutes} minutes. Native auto-merge is still enabled — PR will merge automatically when ready.`
|
|
307
|
+
: `Timed out after ${timeoutMinutes} minutes waiting for CI. Check manually.`,
|
|
308
|
+
errorCode: 'TIMEOUT',
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=auto-merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-merge.js","sourceRoot":"","sources":["../../../src/lib/shipping/auto-merge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Git Provider & Auto-Merge Provider
|
|
3
|
+
*
|
|
4
|
+
* Implements the GitProvider interface for sibling rebase (PRLT-1143)
|
|
5
|
+
* and the AutoMergeProvider interface for auto-merge (PRLT-1144),
|
|
6
|
+
* both using the GitHub API via `gh` CLI.
|
|
7
|
+
*/
|
|
8
|
+
import type { PRInfo, MergeableState } from '../pr/index.js';
|
|
9
|
+
import type { GitProvider, UpdateBranchResult, AutoMergeProvider, AutoMergeResult } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* GitHub implementation of GitProvider.
|
|
12
|
+
*
|
|
13
|
+
* Uses the `gh api` CLI for API-based operations where possible,
|
|
14
|
+
* falling back to local git operations when the API is unavailable.
|
|
15
|
+
*/
|
|
16
|
+
export declare class GitHubProvider implements GitProvider {
|
|
17
|
+
readonly name: "github";
|
|
18
|
+
listOpenPRs(cwd?: string): PRInfo[];
|
|
19
|
+
getMergeableState(prNumber: number, cwd?: string): MergeableState;
|
|
20
|
+
/**
|
|
21
|
+
* Update a PR branch using GitHub's update-branch API.
|
|
22
|
+
*
|
|
23
|
+
* Uses: PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch
|
|
24
|
+
*
|
|
25
|
+
* This merges the base branch into the PR branch server-side,
|
|
26
|
+
* without requiring a local checkout or force-push.
|
|
27
|
+
*
|
|
28
|
+
* Falls back to local git rebase if the API call fails with a
|
|
29
|
+
* non-conflict error (e.g., permissions, network issues).
|
|
30
|
+
*/
|
|
31
|
+
updatePRBranch(prNumber: number, cwd?: string): UpdateBranchResult;
|
|
32
|
+
/**
|
|
33
|
+
* Add a label to a GitHub PR.
|
|
34
|
+
*/
|
|
35
|
+
addLabel(prNumber: number, label: string, cwd?: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Add a comment to a GitHub PR.
|
|
38
|
+
*/
|
|
39
|
+
addComment(prNumber: number, body: string, cwd?: string): boolean;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* GitHub implementation of AutoMergeProvider.
|
|
43
|
+
*
|
|
44
|
+
* Uses GitHub's native auto-merge feature when available, which
|
|
45
|
+
* automatically merges a PR once all required status checks pass.
|
|
46
|
+
*/
|
|
47
|
+
export declare class GitHubAutoMergeProvider implements AutoMergeProvider {
|
|
48
|
+
readonly name: "github";
|
|
49
|
+
/**
|
|
50
|
+
* Enable GitHub's native auto-merge on a PR.
|
|
51
|
+
*
|
|
52
|
+
* Uses `gh pr merge --auto` which sets the PR to auto-merge once
|
|
53
|
+
* all required status checks pass and branch protections are satisfied.
|
|
54
|
+
*
|
|
55
|
+
* Requires: auto-merge must be enabled in the repository settings.
|
|
56
|
+
*/
|
|
57
|
+
enableAutoMerge(prNumber: number, method: 'merge' | 'squash' | 'rebase', cwd?: string): AutoMergeResult;
|
|
58
|
+
/**
|
|
59
|
+
* Disable GitHub's native auto-merge on a PR.
|
|
60
|
+
*
|
|
61
|
+
* Uses `gh pr merge --disable-auto` to cancel auto-merge.
|
|
62
|
+
*/
|
|
63
|
+
disableAutoMerge(prNumber: number, cwd?: string): AutoMergeResult;
|
|
64
|
+
/**
|
|
65
|
+
* Check if a PR has been merged.
|
|
66
|
+
*/
|
|
67
|
+
isPRMerged(prNumber: number, cwd?: string): boolean;
|
|
68
|
+
}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Git Provider & Auto-Merge Provider
|
|
3
|
+
*
|
|
4
|
+
* Implements the GitProvider interface for sibling rebase (PRLT-1143)
|
|
5
|
+
* and the AutoMergeProvider interface for auto-merge (PRLT-1144),
|
|
6
|
+
* both using the GitHub API via `gh` CLI.
|
|
7
|
+
*/
|
|
8
|
+
import { execSync, spawnSync } from 'node:child_process';
|
|
9
|
+
import { listOpenPRs, getMergeableState, getGitHubRepo, rebasePRBranch, getPRByNumber, } from '../pr/index.js';
|
|
10
|
+
// =============================================================================
|
|
11
|
+
// GitHubProvider — Sibling Rebase (PRLT-1143)
|
|
12
|
+
// =============================================================================
|
|
13
|
+
/**
|
|
14
|
+
* GitHub implementation of GitProvider.
|
|
15
|
+
*
|
|
16
|
+
* Uses the `gh api` CLI for API-based operations where possible,
|
|
17
|
+
* falling back to local git operations when the API is unavailable.
|
|
18
|
+
*/
|
|
19
|
+
export class GitHubProvider {
|
|
20
|
+
name = 'github';
|
|
21
|
+
listOpenPRs(cwd) {
|
|
22
|
+
return listOpenPRs(cwd);
|
|
23
|
+
}
|
|
24
|
+
getMergeableState(prNumber, cwd) {
|
|
25
|
+
return getMergeableState(prNumber, cwd);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Update a PR branch using GitHub's update-branch API.
|
|
29
|
+
*
|
|
30
|
+
* Uses: PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch
|
|
31
|
+
*
|
|
32
|
+
* This merges the base branch into the PR branch server-side,
|
|
33
|
+
* without requiring a local checkout or force-push.
|
|
34
|
+
*
|
|
35
|
+
* Falls back to local git rebase if the API call fails with a
|
|
36
|
+
* non-conflict error (e.g., permissions, network issues).
|
|
37
|
+
*/
|
|
38
|
+
updatePRBranch(prNumber, cwd) {
|
|
39
|
+
const repo = getGitHubRepo(cwd);
|
|
40
|
+
if (!repo) {
|
|
41
|
+
return {
|
|
42
|
+
success: false,
|
|
43
|
+
prNumber,
|
|
44
|
+
headBranch: '',
|
|
45
|
+
error: 'Could not determine GitHub repository from git remote',
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// Get PR info for the head branch name
|
|
49
|
+
let headBranch = '';
|
|
50
|
+
let baseBranch = '';
|
|
51
|
+
try {
|
|
52
|
+
const prJson = execSync(`gh pr view ${prNumber} --json headRefName,baseRefName`, { cwd, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
|
|
53
|
+
const prData = JSON.parse(prJson);
|
|
54
|
+
headBranch = prData.headRefName;
|
|
55
|
+
baseBranch = prData.baseRefName;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return {
|
|
59
|
+
success: false,
|
|
60
|
+
prNumber,
|
|
61
|
+
headBranch: '',
|
|
62
|
+
error: `Could not fetch PR #${prNumber} details`,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
// Try API-based update-branch first
|
|
66
|
+
try {
|
|
67
|
+
execSync(`gh api repos/${repo}/pulls/${prNumber}/update-branch -X PUT -f expected_head_sha="$(gh pr view ${prNumber} --json headRefOid -q .headRefOid)"`, { cwd, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
|
|
68
|
+
return {
|
|
69
|
+
success: true,
|
|
70
|
+
prNumber,
|
|
71
|
+
headBranch,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
catch (apiError) {
|
|
75
|
+
const errorMsg = apiError instanceof Error ? apiError.message : String(apiError);
|
|
76
|
+
// Check if the error indicates merge conflicts
|
|
77
|
+
if (errorMsg.includes('merge conflict') || errorMsg.includes('Merge conflict')) {
|
|
78
|
+
return {
|
|
79
|
+
success: false,
|
|
80
|
+
prNumber,
|
|
81
|
+
headBranch,
|
|
82
|
+
error: 'Merge conflicts detected — manual resolution required',
|
|
83
|
+
hasConflicts: true,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// API failed for non-conflict reason — fall back to local git rebase
|
|
87
|
+
const fallbackResult = rebasePRBranch(headBranch, baseBranch, cwd);
|
|
88
|
+
if (fallbackResult.success) {
|
|
89
|
+
return {
|
|
90
|
+
success: true,
|
|
91
|
+
prNumber,
|
|
92
|
+
headBranch,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
// Check if fallback failure was due to conflicts
|
|
96
|
+
const fallbackError = fallbackResult.error || '';
|
|
97
|
+
const isConflict = fallbackError.includes('CONFLICT') ||
|
|
98
|
+
fallbackError.includes('conflict') ||
|
|
99
|
+
fallbackError.includes('could not apply');
|
|
100
|
+
return {
|
|
101
|
+
success: false,
|
|
102
|
+
prNumber,
|
|
103
|
+
headBranch,
|
|
104
|
+
error: fallbackResult.error || 'Rebase failed',
|
|
105
|
+
hasConflicts: isConflict,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Add a label to a GitHub PR.
|
|
111
|
+
*/
|
|
112
|
+
addLabel(prNumber, label, cwd) {
|
|
113
|
+
try {
|
|
114
|
+
execSync(`gh pr edit ${prNumber} --add-label "${label}"`, {
|
|
115
|
+
cwd,
|
|
116
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
117
|
+
});
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Add a comment to a GitHub PR.
|
|
126
|
+
*/
|
|
127
|
+
addComment(prNumber, body, cwd) {
|
|
128
|
+
try {
|
|
129
|
+
execSync(`gh pr comment ${prNumber} --body "${body.replace(/"/g, '\\"')}"`, {
|
|
130
|
+
cwd,
|
|
131
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
132
|
+
});
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// =============================================================================
|
|
141
|
+
// GitHubAutoMergeProvider — Auto-Merge (PRLT-1144)
|
|
142
|
+
// =============================================================================
|
|
143
|
+
/**
|
|
144
|
+
* GitHub implementation of AutoMergeProvider.
|
|
145
|
+
*
|
|
146
|
+
* Uses GitHub's native auto-merge feature when available, which
|
|
147
|
+
* automatically merges a PR once all required status checks pass.
|
|
148
|
+
*/
|
|
149
|
+
export class GitHubAutoMergeProvider {
|
|
150
|
+
name = 'github';
|
|
151
|
+
/**
|
|
152
|
+
* Enable GitHub's native auto-merge on a PR.
|
|
153
|
+
*
|
|
154
|
+
* Uses `gh pr merge --auto` which sets the PR to auto-merge once
|
|
155
|
+
* all required status checks pass and branch protections are satisfied.
|
|
156
|
+
*
|
|
157
|
+
* Requires: auto-merge must be enabled in the repository settings.
|
|
158
|
+
*/
|
|
159
|
+
enableAutoMerge(prNumber, method, cwd) {
|
|
160
|
+
const args = ['pr', 'merge', String(prNumber), '--auto', `--${method}`];
|
|
161
|
+
const result = spawnSync('gh', args, {
|
|
162
|
+
cwd,
|
|
163
|
+
encoding: 'utf-8',
|
|
164
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
165
|
+
});
|
|
166
|
+
if (result.status !== 0) {
|
|
167
|
+
const stderr = result.stderr?.trim() || '';
|
|
168
|
+
// Check if auto-merge is already enabled
|
|
169
|
+
if (stderr.includes('already set to auto-merge') || stderr.includes('auto-merge is already enabled')) {
|
|
170
|
+
return {
|
|
171
|
+
success: true,
|
|
172
|
+
prNumber,
|
|
173
|
+
alreadyEnabled: true,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
return {
|
|
177
|
+
success: false,
|
|
178
|
+
prNumber,
|
|
179
|
+
error: stderr || 'Failed to enable auto-merge',
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
return { success: true, prNumber };
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Disable GitHub's native auto-merge on a PR.
|
|
186
|
+
*
|
|
187
|
+
* Uses `gh pr merge --disable-auto` to cancel auto-merge.
|
|
188
|
+
*/
|
|
189
|
+
disableAutoMerge(prNumber, cwd) {
|
|
190
|
+
const result = spawnSync('gh', ['pr', 'merge', String(prNumber), '--disable-auto'], {
|
|
191
|
+
cwd,
|
|
192
|
+
encoding: 'utf-8',
|
|
193
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
194
|
+
});
|
|
195
|
+
if (result.status !== 0) {
|
|
196
|
+
const stderr = result.stderr?.trim() || '';
|
|
197
|
+
// Not an error if auto-merge wasn't enabled
|
|
198
|
+
if (stderr.includes('not set to auto-merge') || stderr.includes('auto-merge is not enabled')) {
|
|
199
|
+
return { success: true, prNumber };
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
success: false,
|
|
203
|
+
prNumber,
|
|
204
|
+
error: stderr || 'Failed to disable auto-merge',
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
return { success: true, prNumber };
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Check if a PR has been merged.
|
|
211
|
+
*/
|
|
212
|
+
isPRMerged(prNumber, cwd) {
|
|
213
|
+
const prInfo = getPRByNumber(prNumber, cwd);
|
|
214
|
+
return prInfo?.state === 'MERGED';
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/lib/shipping/github.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shipping Module — Public API
|
|
3
|
+
*
|
|
4
|
+
* Provider-agnostic shipping operations: sibling PR rebase,
|
|
5
|
+
* conflict labeling, git provider abstraction, and auto-merge orchestration.
|
|
6
|
+
*/
|
|
7
|
+
export type { GitProvider, GitProviderName, UpdateBranchResult, SiblingRebaseResult, RebaseSiblingOptions, } from './types.js';
|
|
8
|
+
export { GitHubProvider } from './github.js';
|
|
9
|
+
export { rebaseSiblingPRs, detectGitProvider } from './rebase.js';
|
|
10
|
+
export type { AutoMergeResult, AutoMergeProvider, WhenGreenOptions, WhenGreenResult, } from './types.js';
|
|
11
|
+
export { GitHubAutoMergeProvider } from './github.js';
|
|
12
|
+
export { watchAndShip } from './auto-merge.js';
|
|
13
|
+
export type { WatchAndShipDeps } from './auto-merge.js';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shipping Module — Public API
|
|
3
|
+
*
|
|
4
|
+
* Provider-agnostic shipping operations: sibling PR rebase,
|
|
5
|
+
* conflict labeling, git provider abstraction, and auto-merge orchestration.
|
|
6
|
+
*/
|
|
7
|
+
export { GitHubProvider } from './github.js';
|
|
8
|
+
export { rebaseSiblingPRs, detectGitProvider } from './rebase.js';
|
|
9
|
+
export { GitHubAutoMergeProvider } from './github.js';
|
|
10
|
+
export { watchAndShip } from './auto-merge.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/shipping/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAUjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA"}
|