@camaradesuk/git-worktree-tools 1.9.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -31
- package/dist/cli/cleanpr.js +74 -53
- package/dist/cli/cleanpr.js.map +1 -1
- package/dist/cli/lswt.js +32 -56
- package/dist/cli/lswt.js.map +1 -1
- package/dist/cli/newpr.d.ts +13 -1
- package/dist/cli/newpr.d.ts.map +1 -1
- package/dist/cli/newpr.js +159 -153
- package/dist/cli/newpr.js.map +1 -1
- package/dist/cli/prs.d.ts +3 -10
- package/dist/cli/prs.d.ts.map +1 -1
- package/dist/cli/prs.js +6 -168
- package/dist/cli/prs.js.map +1 -1
- package/dist/cli/wt/clean.d.ts +6 -2
- package/dist/cli/wt/clean.d.ts.map +1 -1
- package/dist/cli/wt/clean.js +401 -20
- package/dist/cli/wt/clean.js.map +1 -1
- package/dist/cli/wt/completion.d.ts +3 -0
- package/dist/cli/wt/completion.d.ts.map +1 -1
- package/dist/cli/wt/completion.js +80 -9
- package/dist/cli/wt/completion.js.map +1 -1
- package/dist/cli/wt/config.d.ts +3 -1
- package/dist/cli/wt/config.d.ts.map +1 -1
- package/dist/cli/wt/config.js +323 -32
- package/dist/cli/wt/config.js.map +1 -1
- package/dist/cli/wt/interactive-menu.d.ts +2 -0
- package/dist/cli/wt/interactive-menu.d.ts.map +1 -1
- package/dist/cli/wt/interactive-menu.js +346 -73
- package/dist/cli/wt/interactive-menu.js.map +1 -1
- package/dist/cli/wt/link.d.ts +3 -1
- package/dist/cli/wt/link.d.ts.map +1 -1
- package/dist/cli/wt/link.js +125 -38
- package/dist/cli/wt/link.js.map +1 -1
- package/dist/cli/wt/list.d.ts +4 -1
- package/dist/cli/wt/list.d.ts.map +1 -1
- package/dist/cli/wt/list.js +85 -16
- package/dist/cli/wt/list.js.map +1 -1
- package/dist/cli/wt/new.d.ts +8 -2
- package/dist/cli/wt/new.d.ts.map +1 -1
- package/dist/cli/wt/new.js +91 -46
- package/dist/cli/wt/new.js.map +1 -1
- package/dist/cli/wt/prs.d.ts +2 -1
- package/dist/cli/wt/prs.d.ts.map +1 -1
- package/dist/cli/wt/prs.js +3 -164
- package/dist/cli/wt/prs.js.map +1 -1
- package/dist/cli/wt/run-command.d.ts +4 -2
- package/dist/cli/wt/run-command.d.ts.map +1 -1
- package/dist/cli/wt/run-command.js +6 -4
- package/dist/cli/wt/run-command.js.map +1 -1
- package/dist/cli/wt/state.d.ts +3 -1
- package/dist/cli/wt/state.d.ts.map +1 -1
- package/dist/cli/wt/state.js +74 -10
- package/dist/cli/wt/state.js.map +1 -1
- package/dist/cli/wt.d.ts.map +1 -1
- package/dist/cli/wt.js +50 -36
- package/dist/cli/wt.js.map +1 -1
- package/dist/cli/wtconfig.js +99 -22
- package/dist/cli/wtconfig.js.map +1 -1
- package/dist/cli/wtlink.js +85 -61
- package/dist/cli/wtlink.js.map +1 -1
- package/dist/cli/wtstate.js +21 -2
- package/dist/cli/wtstate.js.map +1 -1
- package/dist/lib/cleanpr/args.d.ts.map +1 -1
- package/dist/lib/cleanpr/args.js +20 -0
- package/dist/lib/cleanpr/args.js.map +1 -1
- package/dist/lib/cleanpr/types.d.ts +6 -0
- package/dist/lib/cleanpr/types.d.ts.map +1 -1
- package/dist/lib/colors.d.ts +5 -0
- package/dist/lib/colors.d.ts.map +1 -1
- package/dist/lib/colors.js +13 -6
- package/dist/lib/colors.js.map +1 -1
- package/dist/lib/constants.d.ts +12 -4
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +24 -5
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/deprecation.d.ts +18 -0
- package/dist/lib/deprecation.d.ts.map +1 -0
- package/dist/lib/deprecation.js +28 -0
- package/dist/lib/deprecation.js.map +1 -0
- package/dist/lib/logger.d.ts +40 -155
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +349 -420
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/lswt/args.d.ts.map +1 -1
- package/dist/lib/lswt/args.js +15 -1
- package/dist/lib/lswt/args.js.map +1 -1
- package/dist/lib/lswt/index.d.ts +1 -0
- package/dist/lib/lswt/index.d.ts.map +1 -1
- package/dist/lib/lswt/index.js +2 -0
- package/dist/lib/lswt/index.js.map +1 -1
- package/dist/lib/lswt/table.d.ts +15 -0
- package/dist/lib/lswt/table.d.ts.map +1 -0
- package/dist/lib/lswt/table.js +61 -0
- package/dist/lib/lswt/table.js.map +1 -0
- package/dist/lib/lswt/types.d.ts +4 -0
- package/dist/lib/lswt/types.d.ts.map +1 -1
- package/dist/lib/newpr/args.d.ts.map +1 -1
- package/dist/lib/newpr/args.js +21 -0
- package/dist/lib/newpr/args.js.map +1 -1
- package/dist/lib/newpr/types.d.ts +6 -0
- package/dist/lib/newpr/types.d.ts.map +1 -1
- package/dist/lib/prs/command.d.ts +21 -0
- package/dist/lib/prs/command.d.ts.map +1 -0
- package/dist/lib/prs/command.js +175 -0
- package/dist/lib/prs/command.js.map +1 -0
- package/dist/lib/prs/interactive.d.ts.map +1 -1
- package/dist/lib/prs/interactive.js +15 -2
- package/dist/lib/prs/interactive.js.map +1 -1
- package/dist/lib/prs/types.d.ts +15 -0
- package/dist/lib/prs/types.d.ts.map +1 -1
- package/dist/lib/ui/error.d.ts +31 -0
- package/dist/lib/ui/error.d.ts.map +1 -0
- package/dist/lib/ui/error.js +47 -0
- package/dist/lib/ui/error.js.map +1 -0
- package/dist/lib/ui/index.d.ts +15 -0
- package/dist/lib/ui/index.d.ts.map +1 -0
- package/dist/lib/ui/index.js +19 -0
- package/dist/lib/ui/index.js.map +1 -0
- package/dist/lib/ui/output.d.ts +18 -0
- package/dist/lib/ui/output.d.ts.map +1 -0
- package/dist/lib/ui/output.js +31 -0
- package/dist/lib/ui/output.js.map +1 -0
- package/dist/lib/ui/spinner.d.ts +10 -0
- package/dist/lib/ui/spinner.d.ts.map +1 -0
- package/dist/lib/ui/spinner.js +10 -0
- package/dist/lib/ui/spinner.js.map +1 -0
- package/dist/lib/ui/status.d.ts +65 -0
- package/dist/lib/ui/status.d.ts.map +1 -0
- package/dist/lib/ui/status.js +100 -0
- package/dist/lib/ui/status.js.map +1 -0
- package/dist/lib/ui/table.d.ts +39 -0
- package/dist/lib/ui/table.d.ts.map +1 -0
- package/dist/lib/ui/table.js +45 -0
- package/dist/lib/ui/table.js.map +1 -0
- package/dist/lib/ui/theme.d.ts +34 -0
- package/dist/lib/ui/theme.d.ts.map +1 -0
- package/dist/lib/ui/theme.js +37 -0
- package/dist/lib/ui/theme.js.map +1 -0
- package/dist/lib/wtlink/link-configs.js +7 -7
- package/dist/lib/wtlink/link-configs.js.map +1 -1
- package/dist/lib/wtlink/validate-manifest.d.ts.map +1 -1
- package/dist/lib/wtlink/validate-manifest.js +5 -5
- package/dist/lib/wtlink/validate-manifest.js.map +1 -1
- package/dist/lib/wtstate/args.d.ts.map +1 -1
- package/dist/lib/wtstate/args.js +2 -0
- package/dist/lib/wtstate/args.js.map +1 -1
- package/dist/mcp/server.d.ts +2 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +264 -44
- package/dist/mcp/server.js.map +1 -1
- package/package.json +13 -3
- package/dist/api/list.test.d.ts +0 -5
- package/dist/api/list.test.d.ts.map +0 -1
- package/dist/api/list.test.js +0 -390
- package/dist/api/list.test.js.map +0 -1
- package/dist/cli/cleanpr.test.d.ts +0 -2
- package/dist/cli/cleanpr.test.d.ts.map +0 -1
- package/dist/cli/cleanpr.test.js +0 -954
- package/dist/cli/cleanpr.test.js.map +0 -1
- package/dist/cli/lswt.test.d.ts +0 -2
- package/dist/cli/lswt.test.d.ts.map +0 -1
- package/dist/cli/lswt.test.js +0 -386
- package/dist/cli/lswt.test.js.map +0 -1
- package/dist/cli/newpr.test.d.ts +0 -2
- package/dist/cli/newpr.test.d.ts.map +0 -1
- package/dist/cli/newpr.test.js +0 -1182
- package/dist/cli/newpr.test.js.map +0 -1
- package/dist/cli/prs.test.d.ts +0 -8
- package/dist/cli/prs.test.d.ts.map +0 -1
- package/dist/cli/prs.test.js +0 -410
- package/dist/cli/prs.test.js.map +0 -1
- package/dist/cli/wt/completion.test.d.ts +0 -5
- package/dist/cli/wt/completion.test.d.ts.map +0 -1
- package/dist/cli/wt/completion.test.js +0 -173
- package/dist/cli/wt/completion.test.js.map +0 -1
- package/dist/cli/wt/config.test.d.ts +0 -5
- package/dist/cli/wt/config.test.d.ts.map +0 -1
- package/dist/cli/wt/config.test.js +0 -260
- package/dist/cli/wt/config.test.js.map +0 -1
- package/dist/cli/wt/entry.test.d.ts +0 -8
- package/dist/cli/wt/entry.test.d.ts.map +0 -1
- package/dist/cli/wt/entry.test.js +0 -201
- package/dist/cli/wt/entry.test.js.map +0 -1
- package/dist/cli/wt/init.test.d.ts +0 -5
- package/dist/cli/wt/init.test.d.ts.map +0 -1
- package/dist/cli/wt/init.test.js +0 -165
- package/dist/cli/wt/init.test.js.map +0 -1
- package/dist/cli/wt/init.unit.test.d.ts +0 -5
- package/dist/cli/wt/init.unit.test.d.ts.map +0 -1
- package/dist/cli/wt/init.unit.test.js +0 -432
- package/dist/cli/wt/init.unit.test.js.map +0 -1
- package/dist/cli/wt/interactive-menu.test.d.ts +0 -10
- package/dist/cli/wt/interactive-menu.test.d.ts.map +0 -1
- package/dist/cli/wt/interactive-menu.test.js +0 -739
- package/dist/cli/wt/interactive-menu.test.js.map +0 -1
- package/dist/cli/wt/prs.test.d.ts +0 -5
- package/dist/cli/wt/prs.test.d.ts.map +0 -1
- package/dist/cli/wt/prs.test.js +0 -410
- package/dist/cli/wt/prs.test.js.map +0 -1
- package/dist/cli/wt/run-command.test.d.ts +0 -5
- package/dist/cli/wt/run-command.test.d.ts.map +0 -1
- package/dist/cli/wt/run-command.test.js +0 -88
- package/dist/cli/wt/run-command.test.js.map +0 -1
- package/dist/cli/wt/wt.test.d.ts +0 -8
- package/dist/cli/wt/wt.test.d.ts.map +0 -1
- package/dist/cli/wt/wt.test.js +0 -521
- package/dist/cli/wt/wt.test.js.map +0 -1
- package/dist/cli/wt.unit.test.d.ts +0 -7
- package/dist/cli/wt.unit.test.d.ts.map +0 -1
- package/dist/cli/wt.unit.test.js +0 -182
- package/dist/cli/wt.unit.test.js.map +0 -1
- package/dist/cli/wtconfig.test.d.ts +0 -5
- package/dist/cli/wtconfig.test.d.ts.map +0 -1
- package/dist/cli/wtconfig.test.js +0 -1289
- package/dist/cli/wtconfig.test.js.map +0 -1
- package/dist/cli/wtlink.test.d.ts +0 -2
- package/dist/cli/wtlink.test.d.ts.map +0 -1
- package/dist/cli/wtlink.test.js +0 -249
- package/dist/cli/wtlink.test.js.map +0 -1
- package/dist/cli/wtstate.test.d.ts +0 -5
- package/dist/cli/wtstate.test.d.ts.map +0 -1
- package/dist/cli/wtstate.test.js +0 -193
- package/dist/cli/wtstate.test.js.map +0 -1
- package/dist/e2e/cleanpr/cleanpr.e2e.test.d.ts +0 -2
- package/dist/e2e/cleanpr/cleanpr.e2e.test.d.ts.map +0 -1
- package/dist/e2e/cleanpr/cleanpr.e2e.test.js +0 -326
- package/dist/e2e/cleanpr/cleanpr.e2e.test.js.map +0 -1
- package/dist/e2e/cli.e2e.test.d.ts +0 -2
- package/dist/e2e/cli.e2e.test.d.ts.map +0 -1
- package/dist/e2e/cli.e2e.test.js +0 -417
- package/dist/e2e/cli.e2e.test.js.map +0 -1
- package/dist/e2e/lswt/lswt.e2e.test.d.ts +0 -2
- package/dist/e2e/lswt/lswt.e2e.test.d.ts.map +0 -1
- package/dist/e2e/lswt/lswt.e2e.test.js +0 -361
- package/dist/e2e/lswt/lswt.e2e.test.js.map +0 -1
- package/dist/e2e/newpr/newpr.e2e.test.d.ts +0 -2
- package/dist/e2e/newpr/newpr.e2e.test.d.ts.map +0 -1
- package/dist/e2e/newpr/newpr.e2e.test.js +0 -286
- package/dist/e2e/newpr/newpr.e2e.test.js.map +0 -1
- package/dist/e2e/newpr/scenarios.e2e.test.d.ts +0 -2
- package/dist/e2e/newpr/scenarios.e2e.test.d.ts.map +0 -1
- package/dist/e2e/newpr/scenarios.e2e.test.js +0 -426
- package/dist/e2e/newpr/scenarios.e2e.test.js.map +0 -1
- package/dist/e2e/newpr-full-flow.e2e.test.d.ts +0 -2
- package/dist/e2e/newpr-full-flow.e2e.test.d.ts.map +0 -1
- package/dist/e2e/newpr-full-flow.e2e.test.js +0 -280
- package/dist/e2e/newpr-full-flow.e2e.test.js.map +0 -1
- package/dist/e2e/prs/prs.e2e.test.d.ts +0 -7
- package/dist/e2e/prs/prs.e2e.test.d.ts.map +0 -1
- package/dist/e2e/prs/prs.e2e.test.js +0 -606
- package/dist/e2e/prs/prs.e2e.test.js.map +0 -1
- package/dist/e2e/workflows/pr-lifecycle.e2e.test.d.ts +0 -2
- package/dist/e2e/workflows/pr-lifecycle.e2e.test.d.ts.map +0 -1
- package/dist/e2e/workflows/pr-lifecycle.e2e.test.js +0 -298
- package/dist/e2e/workflows/pr-lifecycle.e2e.test.js.map +0 -1
- package/dist/e2e/wt/interactive-menu.e2e.test.d.ts +0 -8
- package/dist/e2e/wt/interactive-menu.e2e.test.d.ts.map +0 -1
- package/dist/e2e/wt/interactive-menu.e2e.test.js +0 -583
- package/dist/e2e/wt/interactive-menu.e2e.test.js.map +0 -1
- package/dist/e2e/wt/wt.e2e.test.d.ts +0 -9
- package/dist/e2e/wt/wt.e2e.test.d.ts.map +0 -1
- package/dist/e2e/wt/wt.e2e.test.js +0 -597
- package/dist/e2e/wt/wt.e2e.test.js.map +0 -1
- package/dist/e2e/wtlink/wtlink.e2e.test.d.ts +0 -2
- package/dist/e2e/wtlink/wtlink.e2e.test.d.ts.map +0 -1
- package/dist/e2e/wtlink/wtlink.e2e.test.js +0 -416
- package/dist/e2e/wtlink/wtlink.e2e.test.js.map +0 -1
- package/dist/integration/git.integration.test.d.ts +0 -2
- package/dist/integration/git.integration.test.d.ts.map +0 -1
- package/dist/integration/git.integration.test.js +0 -336
- package/dist/integration/git.integration.test.js.map +0 -1
- package/dist/integration/lswt-remote-pr.integration.test.d.ts +0 -2
- package/dist/integration/lswt-remote-pr.integration.test.d.ts.map +0 -1
- package/dist/integration/lswt-remote-pr.integration.test.js +0 -222
- package/dist/integration/lswt-remote-pr.integration.test.js.map +0 -1
- package/dist/integration/newpr-branchfrom-head.integration.test.d.ts +0 -2
- package/dist/integration/newpr-branchfrom-head.integration.test.d.ts.map +0 -1
- package/dist/integration/newpr-branchfrom-head.integration.test.js +0 -498
- package/dist/integration/newpr-branchfrom-head.integration.test.js.map +0 -1
- package/dist/integration/newpr.integration.test.d.ts +0 -2
- package/dist/integration/newpr.integration.test.d.ts.map +0 -1
- package/dist/integration/newpr.integration.test.js +0 -460
- package/dist/integration/newpr.integration.test.js.map +0 -1
- package/dist/integration/prs.integration.test.d.ts +0 -8
- package/dist/integration/prs.integration.test.d.ts.map +0 -1
- package/dist/integration/prs.integration.test.js +0 -478
- package/dist/integration/prs.integration.test.js.map +0 -1
- package/dist/lib/ai/base-provider.test.d.ts +0 -7
- package/dist/lib/ai/base-provider.test.d.ts.map +0 -1
- package/dist/lib/ai/base-provider.test.js +0 -319
- package/dist/lib/ai/base-provider.test.js.map +0 -1
- package/dist/lib/ai/cli-provider.test.d.ts +0 -5
- package/dist/lib/ai/cli-provider.test.d.ts.map +0 -1
- package/dist/lib/ai/cli-provider.test.js +0 -460
- package/dist/lib/ai/cli-provider.test.js.map +0 -1
- package/dist/lib/ai/fallback-provider.test.d.ts +0 -7
- package/dist/lib/ai/fallback-provider.test.d.ts.map +0 -1
- package/dist/lib/ai/fallback-provider.test.js +0 -165
- package/dist/lib/ai/fallback-provider.test.js.map +0 -1
- package/dist/lib/ai/generation-service.test.d.ts +0 -7
- package/dist/lib/ai/generation-service.test.d.ts.map +0 -1
- package/dist/lib/ai/generation-service.test.js +0 -213
- package/dist/lib/ai/generation-service.test.js.map +0 -1
- package/dist/lib/ai/provider-manager.test.d.ts +0 -5
- package/dist/lib/ai/provider-manager.test.d.ts.map +0 -1
- package/dist/lib/ai/provider-manager.test.js +0 -312
- package/dist/lib/ai/provider-manager.test.js.map +0 -1
- package/dist/lib/ai/repo-docs.test.d.ts +0 -5
- package/dist/lib/ai/repo-docs.test.d.ts.map +0 -1
- package/dist/lib/ai/repo-docs.test.js +0 -357
- package/dist/lib/ai/repo-docs.test.js.map +0 -1
- package/dist/lib/cleanpr/args.test.d.ts +0 -2
- package/dist/lib/cleanpr/args.test.d.ts.map +0 -1
- package/dist/lib/cleanpr/args.test.js +0 -269
- package/dist/lib/cleanpr/args.test.js.map +0 -1
- package/dist/lib/cleanpr/cleanup.test.d.ts +0 -2
- package/dist/lib/cleanpr/cleanup.test.d.ts.map +0 -1
- package/dist/lib/cleanpr/cleanup.test.js +0 -296
- package/dist/lib/cleanpr/cleanup.test.js.map +0 -1
- package/dist/lib/cleanpr/worktree-info.test.d.ts +0 -2
- package/dist/lib/cleanpr/worktree-info.test.d.ts.map +0 -1
- package/dist/lib/cleanpr/worktree-info.test.js +0 -228
- package/dist/lib/cleanpr/worktree-info.test.js.map +0 -1
- package/dist/lib/colors.test.d.ts +0 -2
- package/dist/lib/colors.test.d.ts.map +0 -1
- package/dist/lib/colors.test.js +0 -142
- package/dist/lib/colors.test.js.map +0 -1
- package/dist/lib/config-editor.test.d.ts +0 -11
- package/dist/lib/config-editor.test.d.ts.map +0 -1
- package/dist/lib/config-editor.test.js +0 -526
- package/dist/lib/config-editor.test.js.map +0 -1
- package/dist/lib/config-migration/detector.test.d.ts +0 -5
- package/dist/lib/config-migration/detector.test.d.ts.map +0 -1
- package/dist/lib/config-migration/detector.test.js +0 -201
- package/dist/lib/config-migration/detector.test.js.map +0 -1
- package/dist/lib/config-migration/reporter.test.d.ts +0 -5
- package/dist/lib/config-migration/reporter.test.d.ts.map +0 -1
- package/dist/lib/config-migration/reporter.test.js +0 -305
- package/dist/lib/config-migration/reporter.test.js.map +0 -1
- package/dist/lib/config-migration/runner.test.d.ts +0 -5
- package/dist/lib/config-migration/runner.test.d.ts.map +0 -1
- package/dist/lib/config-migration/runner.test.js +0 -235
- package/dist/lib/config-migration/runner.test.js.map +0 -1
- package/dist/lib/config-validation.test.d.ts +0 -5
- package/dist/lib/config-validation.test.d.ts.map +0 -1
- package/dist/lib/config-validation.test.js +0 -423
- package/dist/lib/config-validation.test.js.map +0 -1
- package/dist/lib/config.test.d.ts +0 -2
- package/dist/lib/config.test.d.ts.map +0 -1
- package/dist/lib/config.test.js +0 -566
- package/dist/lib/config.test.js.map +0 -1
- package/dist/lib/constants.test.d.ts +0 -5
- package/dist/lib/constants.test.d.ts.map +0 -1
- package/dist/lib/constants.test.js +0 -121
- package/dist/lib/constants.test.js.map +0 -1
- package/dist/lib/errors.test.d.ts +0 -2
- package/dist/lib/errors.test.d.ts.map +0 -1
- package/dist/lib/errors.test.js +0 -117
- package/dist/lib/errors.test.js.map +0 -1
- package/dist/lib/git.test.d.ts +0 -2
- package/dist/lib/git.test.d.ts.map +0 -1
- package/dist/lib/git.test.js +0 -608
- package/dist/lib/git.test.js.map +0 -1
- package/dist/lib/github.test.d.ts +0 -2
- package/dist/lib/github.test.d.ts.map +0 -1
- package/dist/lib/github.test.js +0 -441
- package/dist/lib/github.test.js.map +0 -1
- package/dist/lib/global-check.test.d.ts +0 -5
- package/dist/lib/global-check.test.d.ts.map +0 -1
- package/dist/lib/global-check.test.js +0 -150
- package/dist/lib/global-check.test.js.map +0 -1
- package/dist/lib/global-config.test.d.ts +0 -5
- package/dist/lib/global-config.test.d.ts.map +0 -1
- package/dist/lib/global-config.test.js +0 -282
- package/dist/lib/global-config.test.js.map +0 -1
- package/dist/lib/hooks/confirmation.test.d.ts +0 -7
- package/dist/lib/hooks/confirmation.test.d.ts.map +0 -1
- package/dist/lib/hooks/confirmation.test.js +0 -300
- package/dist/lib/hooks/confirmation.test.js.map +0 -1
- package/dist/lib/hooks/executor.test.d.ts +0 -5
- package/dist/lib/hooks/executor.test.d.ts.map +0 -1
- package/dist/lib/hooks/executor.test.js +0 -648
- package/dist/lib/hooks/executor.test.js.map +0 -1
- package/dist/lib/hooks/templates.test.d.ts +0 -5
- package/dist/lib/hooks/templates.test.d.ts.map +0 -1
- package/dist/lib/hooks/templates.test.js +0 -163
- package/dist/lib/hooks/templates.test.js.map +0 -1
- package/dist/lib/hooks/types.test.d.ts +0 -5
- package/dist/lib/hooks/types.test.d.ts.map +0 -1
- package/dist/lib/hooks/types.test.js +0 -132
- package/dist/lib/hooks/types.test.js.map +0 -1
- package/dist/lib/json-output.test.d.ts +0 -5
- package/dist/lib/json-output.test.d.ts.map +0 -1
- package/dist/lib/json-output.test.js +0 -261
- package/dist/lib/json-output.test.js.map +0 -1
- package/dist/lib/logger.test.d.ts +0 -5
- package/dist/lib/logger.test.d.ts.map +0 -1
- package/dist/lib/logger.test.js +0 -292
- package/dist/lib/logger.test.js.map +0 -1
- package/dist/lib/lswt/action-executors.test.d.ts +0 -2
- package/dist/lib/lswt/action-executors.test.d.ts.map +0 -1
- package/dist/lib/lswt/action-executors.test.js +0 -1127
- package/dist/lib/lswt/action-executors.test.js.map +0 -1
- package/dist/lib/lswt/actions.test.d.ts +0 -2
- package/dist/lib/lswt/actions.test.d.ts.map +0 -1
- package/dist/lib/lswt/actions.test.js +0 -497
- package/dist/lib/lswt/actions.test.js.map +0 -1
- package/dist/lib/lswt/args.test.d.ts +0 -2
- package/dist/lib/lswt/args.test.d.ts.map +0 -1
- package/dist/lib/lswt/args.test.js +0 -195
- package/dist/lib/lswt/args.test.js.map +0 -1
- package/dist/lib/lswt/environment.test.d.ts +0 -2
- package/dist/lib/lswt/environment.test.d.ts.map +0 -1
- package/dist/lib/lswt/environment.test.js +0 -544
- package/dist/lib/lswt/environment.test.js.map +0 -1
- package/dist/lib/lswt/formatters.test.d.ts +0 -2
- package/dist/lib/lswt/formatters.test.d.ts.map +0 -1
- package/dist/lib/lswt/formatters.test.js +0 -323
- package/dist/lib/lswt/formatters.test.js.map +0 -1
- package/dist/lib/lswt/fuzzy-search.test.d.ts +0 -5
- package/dist/lib/lswt/fuzzy-search.test.d.ts.map +0 -1
- package/dist/lib/lswt/fuzzy-search.test.js +0 -207
- package/dist/lib/lswt/fuzzy-search.test.js.map +0 -1
- package/dist/lib/lswt/interactive.test.d.ts +0 -2
- package/dist/lib/lswt/interactive.test.d.ts.map +0 -1
- package/dist/lib/lswt/interactive.test.js +0 -771
- package/dist/lib/lswt/interactive.test.js.map +0 -1
- package/dist/lib/lswt/worktree-info.test.d.ts +0 -2
- package/dist/lib/lswt/worktree-info.test.d.ts.map +0 -1
- package/dist/lib/lswt/worktree-info.test.js +0 -484
- package/dist/lib/lswt/worktree-info.test.js.map +0 -1
- package/dist/lib/newpr/action-deps.test.d.ts +0 -5
- package/dist/lib/newpr/action-deps.test.d.ts.map +0 -1
- package/dist/lib/newpr/action-deps.test.js +0 -111
- package/dist/lib/newpr/action-deps.test.js.map +0 -1
- package/dist/lib/newpr/actions.test.d.ts +0 -2
- package/dist/lib/newpr/actions.test.d.ts.map +0 -1
- package/dist/lib/newpr/actions.test.js +0 -254
- package/dist/lib/newpr/actions.test.js.map +0 -1
- package/dist/lib/newpr/args.test.d.ts +0 -2
- package/dist/lib/newpr/args.test.d.ts.map +0 -1
- package/dist/lib/newpr/args.test.js +0 -479
- package/dist/lib/newpr/args.test.js.map +0 -1
- package/dist/lib/newpr/hook-runner.test.d.ts +0 -7
- package/dist/lib/newpr/hook-runner.test.d.ts.map +0 -1
- package/dist/lib/newpr/hook-runner.test.js +0 -422
- package/dist/lib/newpr/hook-runner.test.js.map +0 -1
- package/dist/lib/newpr/plan-generator.test.d.ts +0 -7
- package/dist/lib/newpr/plan-generator.test.d.ts.map +0 -1
- package/dist/lib/newpr/plan-generator.test.js +0 -387
- package/dist/lib/newpr/plan-generator.test.js.map +0 -1
- package/dist/lib/newpr/scenario-handler.test.d.ts +0 -2
- package/dist/lib/newpr/scenario-handler.test.d.ts.map +0 -1
- package/dist/lib/newpr/scenario-handler.test.js +0 -256
- package/dist/lib/newpr/scenario-handler.test.js.map +0 -1
- package/dist/lib/prompts.test.d.ts +0 -2
- package/dist/lib/prompts.test.d.ts.map +0 -1
- package/dist/lib/prompts.test.js +0 -807
- package/dist/lib/prompts.test.js.map +0 -1
- package/dist/lib/prs/actions.test.d.ts +0 -5
- package/dist/lib/prs/actions.test.d.ts.map +0 -1
- package/dist/lib/prs/actions.test.js +0 -356
- package/dist/lib/prs/actions.test.js.map +0 -1
- package/dist/lib/prs/data.test.d.ts +0 -5
- package/dist/lib/prs/data.test.d.ts.map +0 -1
- package/dist/lib/prs/data.test.js +0 -417
- package/dist/lib/prs/data.test.js.map +0 -1
- package/dist/lib/prs/details.test.d.ts +0 -5
- package/dist/lib/prs/details.test.d.ts.map +0 -1
- package/dist/lib/prs/details.test.js +0 -325
- package/dist/lib/prs/details.test.js.map +0 -1
- package/dist/lib/prs/filters.test.d.ts +0 -5
- package/dist/lib/prs/filters.test.d.ts.map +0 -1
- package/dist/lib/prs/filters.test.js +0 -312
- package/dist/lib/prs/filters.test.js.map +0 -1
- package/dist/lib/prs/formatters.test.d.ts +0 -2
- package/dist/lib/prs/formatters.test.d.ts.map +0 -1
- package/dist/lib/prs/formatters.test.js +0 -387
- package/dist/lib/prs/formatters.test.js.map +0 -1
- package/dist/lib/prs/interactive.test.d.ts +0 -5
- package/dist/lib/prs/interactive.test.d.ts.map +0 -1
- package/dist/lib/prs/interactive.test.js +0 -364
- package/dist/lib/prs/interactive.test.js.map +0 -1
- package/dist/lib/schema.test.d.ts +0 -10
- package/dist/lib/schema.test.d.ts.map +0 -1
- package/dist/lib/schema.test.js +0 -309
- package/dist/lib/schema.test.js.map +0 -1
- package/dist/lib/state-detection.test.d.ts +0 -2
- package/dist/lib/state-detection.test.d.ts.map +0 -1
- package/dist/lib/state-detection.test.js +0 -451
- package/dist/lib/state-detection.test.js.map +0 -1
- package/dist/lib/wtconfig/config-manager.test.d.ts +0 -5
- package/dist/lib/wtconfig/config-manager.test.d.ts.map +0 -1
- package/dist/lib/wtconfig/config-manager.test.js +0 -501
- package/dist/lib/wtconfig/config-manager.test.js.map +0 -1
- package/dist/lib/wtconfig/environment.test.d.ts +0 -5
- package/dist/lib/wtconfig/environment.test.d.ts.map +0 -1
- package/dist/lib/wtconfig/environment.test.js +0 -285
- package/dist/lib/wtconfig/environment.test.js.map +0 -1
- package/dist/lib/wtlink/config-manifest.test.d.ts +0 -2
- package/dist/lib/wtlink/config-manifest.test.d.ts.map +0 -1
- package/dist/lib/wtlink/config-manifest.test.js +0 -486
- package/dist/lib/wtlink/config-manifest.test.js.map +0 -1
- package/dist/lib/wtlink/link-configs.test.d.ts +0 -2
- package/dist/lib/wtlink/link-configs.test.d.ts.map +0 -1
- package/dist/lib/wtlink/link-configs.test.js +0 -612
- package/dist/lib/wtlink/link-configs.test.js.map +0 -1
- package/dist/lib/wtlink/main-menu.test.d.ts +0 -5
- package/dist/lib/wtlink/main-menu.test.d.ts.map +0 -1
- package/dist/lib/wtlink/main-menu.test.js +0 -126
- package/dist/lib/wtlink/main-menu.test.js.map +0 -1
- package/dist/lib/wtlink/manage-manifest.test.d.ts +0 -2
- package/dist/lib/wtlink/manage-manifest.test.d.ts.map +0 -1
- package/dist/lib/wtlink/manage-manifest.test.js +0 -714
- package/dist/lib/wtlink/manage-manifest.test.js.map +0 -1
- package/dist/lib/wtlink/validate-manifest.test.d.ts +0 -2
- package/dist/lib/wtlink/validate-manifest.test.d.ts.map +0 -1
- package/dist/lib/wtlink/validate-manifest.test.js +0 -220
- package/dist/lib/wtlink/validate-manifest.test.js.map +0 -1
- package/dist/lib/wtstate/analyze.test.d.ts +0 -5
- package/dist/lib/wtstate/analyze.test.d.ts.map +0 -1
- package/dist/lib/wtstate/analyze.test.js +0 -282
- package/dist/lib/wtstate/analyze.test.js.map +0 -1
- package/dist/lib/wtstate/args.test.d.ts +0 -5
- package/dist/lib/wtstate/args.test.d.ts.map +0 -1
- package/dist/lib/wtstate/args.test.js +0 -120
- package/dist/lib/wtstate/args.test.js.map +0 -1
- package/dist/mcp/server.test.d.ts +0 -9
- package/dist/mcp/server.test.d.ts.map +0 -1
- package/dist/mcp/server.test.js +0 -439
- package/dist/mcp/server.test.js.map +0 -1
package/dist/cli/newpr.js
CHANGED
|
@@ -6,9 +6,11 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import path from 'path';
|
|
8
8
|
import fs from 'fs';
|
|
9
|
+
import { printDeprecationNotice } from '../lib/deprecation.js';
|
|
9
10
|
import * as git from '../lib/git.js';
|
|
10
11
|
import * as github from '../lib/github.js';
|
|
11
|
-
import
|
|
12
|
+
import { setColorEnabled } from '../lib/colors.js';
|
|
13
|
+
import { logger, initializeLogger, setAuditContext } from '../lib/logger.js';
|
|
12
14
|
import { promptChoiceIndex, promptConfirm, withSpinner } from '../lib/prompts.js';
|
|
13
15
|
import { getEnabledFiles } from '../lib/wtlink/config-manifest.js';
|
|
14
16
|
import { run as runWtlink } from '../lib/wtlink/link-configs.js';
|
|
@@ -17,10 +19,7 @@ import { analyzeGitState, detectScenario } from '../lib/state-detection.js';
|
|
|
17
19
|
import { parseArgs, getHelpText, getScenarioContext, isPrWorktreeScenario, isExistingBranchAction, executeStateAction, getBranchPoint, getScenarioMessageLevel, createHookRunner, createActionDeps, } from '../lib/newpr/index.js';
|
|
18
20
|
import { createSuccessResult, createErrorResult, formatJsonResult, ErrorCode, getErrorCodeFromError, getErrorSuggestion, } from '../lib/json-output.js';
|
|
19
21
|
import { shouldGeneratePlan, resolvePlanPath, buildPathTemplateVars, generatePlanDocument, } from '../lib/newpr/plan-generator.js';
|
|
20
|
-
|
|
21
|
-
* Debug logging - enabled with DEBUG=newpr or DEBUG=*
|
|
22
|
-
*/
|
|
23
|
-
const DEBUG_ENABLED = process.env.DEBUG === 'newpr' || process.env.DEBUG === '*' || process.env.DEBUG === '1';
|
|
22
|
+
import { printStatus, printDim, printSummaryBox, printNextSteps, printError, errorToDisplay, setJsonMode, } from '../lib/ui/index.js';
|
|
24
23
|
/**
|
|
25
24
|
* Error class for non-interactive mode failures
|
|
26
25
|
*/
|
|
@@ -32,47 +31,26 @@ class NonInteractiveError extends Error {
|
|
|
32
31
|
this.name = 'NonInteractiveError';
|
|
33
32
|
}
|
|
34
33
|
}
|
|
35
|
-
function debug(message, data) {
|
|
36
|
-
if (!DEBUG_ENABLED)
|
|
37
|
-
return;
|
|
38
|
-
const timestamp = new Date().toISOString();
|
|
39
|
-
console.error(colors.dim(`[DEBUG ${timestamp}] ${message}`));
|
|
40
|
-
if (data) {
|
|
41
|
-
for (const [key, value] of Object.entries(data)) {
|
|
42
|
-
console.error(colors.dim(` ${key}: ${JSON.stringify(value)}`));
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Progress logging - suppressed in JSON mode for clean output
|
|
48
|
-
*/
|
|
49
|
-
function progress(options, ...args) {
|
|
50
|
-
if (!options.json) {
|
|
51
|
-
console.log(...args);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Progress error logging - suppressed in JSON mode
|
|
56
|
-
*/
|
|
57
|
-
function progressError(options, ...args) {
|
|
58
|
-
if (!options.json) {
|
|
59
|
-
console.error(...args);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
34
|
/**
|
|
63
35
|
* Check prerequisites
|
|
64
36
|
*/
|
|
65
37
|
function checkPrerequisites() {
|
|
66
|
-
|
|
38
|
+
printStatus('info', 'Checking prerequisites...');
|
|
67
39
|
if (!github.isGhInstalled()) {
|
|
68
|
-
|
|
40
|
+
printError({
|
|
41
|
+
title: 'GitHub CLI (gh) is required.',
|
|
42
|
+
hint: 'Install: https://cli.github.com',
|
|
43
|
+
});
|
|
69
44
|
process.exit(1);
|
|
70
45
|
}
|
|
71
46
|
if (!github.isAuthenticated()) {
|
|
72
|
-
|
|
47
|
+
printError({
|
|
48
|
+
title: 'GitHub CLI not authenticated.',
|
|
49
|
+
hint: 'Run: gh auth login',
|
|
50
|
+
});
|
|
73
51
|
process.exit(1);
|
|
74
52
|
}
|
|
75
|
-
|
|
53
|
+
printStatus('success', 'Prerequisites OK');
|
|
76
54
|
}
|
|
77
55
|
/**
|
|
78
56
|
* Show local commits not in base branch
|
|
@@ -136,7 +114,7 @@ async function handleScenario(state, baseBranch, options) {
|
|
|
136
114
|
// In non-interactive mode, cannot proceed from PR worktree
|
|
137
115
|
throw new NonInteractiveError('Cannot create PR from a PR worktree in non-interactive mode. Switch to the main worktree first.', ErrorCode.INVALID_ARGUMENT);
|
|
138
116
|
}
|
|
139
|
-
|
|
117
|
+
printStatus('warning', 'You are in a PR worktree, not the main worktree.');
|
|
140
118
|
console.log();
|
|
141
119
|
console.log('Creating a new PR is best done from the main worktree.');
|
|
142
120
|
const choice = await promptChoiceIndex('How would you like to proceed?', [
|
|
@@ -181,10 +159,10 @@ async function handleScenario(state, baseBranch, options) {
|
|
|
181
159
|
// Interactive mode: display info and prompt
|
|
182
160
|
const level = getScenarioMessageLevel(scenario);
|
|
183
161
|
if (level === 'warning') {
|
|
184
|
-
|
|
162
|
+
printStatus('warning', context.message);
|
|
185
163
|
}
|
|
186
164
|
else {
|
|
187
|
-
|
|
165
|
+
printStatus('info', context.message);
|
|
188
166
|
}
|
|
189
167
|
if (context.subMessage) {
|
|
190
168
|
console.log();
|
|
@@ -243,7 +221,7 @@ async function setupWorktree(worktreePath, config, options, repoRoot) {
|
|
|
243
221
|
const parentDir = path.dirname(repoRoot);
|
|
244
222
|
// Create symlinks for shared repos
|
|
245
223
|
if (config.sharedRepos.length > 0) {
|
|
246
|
-
|
|
224
|
+
printStatus('info', 'Creating symlinks for shared repositories...');
|
|
247
225
|
for (const repo of config.sharedRepos) {
|
|
248
226
|
const target = path.join(parentDir, repo);
|
|
249
227
|
const link = path.join(worktreePath, repo);
|
|
@@ -251,18 +229,18 @@ async function setupWorktree(worktreePath, config, options, repoRoot) {
|
|
|
251
229
|
if (!fs.existsSync(link)) {
|
|
252
230
|
try {
|
|
253
231
|
fs.symlinkSync(target, link, 'dir');
|
|
254
|
-
|
|
232
|
+
printStatus('success', `Linked ${repo}`);
|
|
255
233
|
}
|
|
256
234
|
catch (error) {
|
|
257
|
-
|
|
235
|
+
printStatus('warning', `Failed to link ${repo}: ${error}`);
|
|
258
236
|
}
|
|
259
237
|
}
|
|
260
238
|
else {
|
|
261
|
-
|
|
239
|
+
printStatus('warning', `${repo} already exists in worktree`);
|
|
262
240
|
}
|
|
263
241
|
}
|
|
264
242
|
else {
|
|
265
|
-
|
|
243
|
+
printStatus('warning', `${repo} not found at ${target}`);
|
|
266
244
|
}
|
|
267
245
|
}
|
|
268
246
|
}
|
|
@@ -273,7 +251,7 @@ async function setupWorktree(worktreePath, config, options, repoRoot) {
|
|
|
273
251
|
}
|
|
274
252
|
catch {
|
|
275
253
|
// If we can't determine main worktree, skip linking
|
|
276
|
-
debug('Could not determine main worktree root, skipping config file linking');
|
|
254
|
+
logger.debug('Could not determine main worktree root, skipping config file linking');
|
|
277
255
|
return;
|
|
278
256
|
}
|
|
279
257
|
const enabledFiles = getEnabledFiles(mainWorktreeRoot);
|
|
@@ -281,29 +259,28 @@ async function setupWorktree(worktreePath, config, options, repoRoot) {
|
|
|
281
259
|
let shouldLink = false;
|
|
282
260
|
if (config.linkConfigFiles === false) {
|
|
283
261
|
// Explicitly disabled - skip
|
|
284
|
-
debug('linkConfigFiles is false, skipping auto-link');
|
|
262
|
+
logger.debug('linkConfigFiles is false, skipping auto-link');
|
|
285
263
|
}
|
|
286
264
|
else if (config.linkConfigFiles === true) {
|
|
287
265
|
// Explicitly enabled - auto-link
|
|
288
266
|
shouldLink = true;
|
|
289
|
-
debug('linkConfigFiles is true, auto-linking');
|
|
267
|
+
logger.debug('linkConfigFiles is true, auto-linking');
|
|
290
268
|
}
|
|
291
269
|
else if (!options.nonInteractive && !options.json) {
|
|
292
270
|
// Not configured - prompt user
|
|
293
|
-
|
|
294
|
-
progress(options, colors.info(`Found ${enabledFiles.length} config file(s) to link:`));
|
|
271
|
+
printStatus('info', `Found ${enabledFiles.length} config file(s) to link:`);
|
|
295
272
|
for (const file of enabledFiles.slice(0, 5)) {
|
|
296
|
-
|
|
273
|
+
printDim(` - ${file}`);
|
|
297
274
|
}
|
|
298
275
|
if (enabledFiles.length > 5) {
|
|
299
|
-
|
|
276
|
+
printDim(` ... and ${enabledFiles.length - 5} more`);
|
|
300
277
|
}
|
|
301
278
|
shouldLink = await promptConfirm('Link these config files from the main worktree?', true);
|
|
302
279
|
}
|
|
303
280
|
else {
|
|
304
281
|
// Non-interactive/JSON mode - default to linking
|
|
305
282
|
shouldLink = true;
|
|
306
|
-
debug('Non-interactive mode, defaulting to auto-link');
|
|
283
|
+
logger.debug('Non-interactive mode, defaulting to auto-link');
|
|
307
284
|
}
|
|
308
285
|
if (shouldLink) {
|
|
309
286
|
try {
|
|
@@ -315,11 +292,11 @@ async function setupWorktree(worktreePath, config, options, repoRoot) {
|
|
|
315
292
|
type: 'hard',
|
|
316
293
|
yes: true,
|
|
317
294
|
});
|
|
318
|
-
|
|
295
|
+
printStatus('success', `Linked ${enabledFiles.length} config file(s)`);
|
|
319
296
|
}
|
|
320
297
|
catch (error) {
|
|
321
298
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
322
|
-
|
|
299
|
+
printStatus('warning', `Failed to link config files: ${errorMessage}`);
|
|
323
300
|
}
|
|
324
301
|
}
|
|
325
302
|
}
|
|
@@ -341,20 +318,16 @@ function printSummary(prNumber, branchName, worktreePath, prUrl, options, extra)
|
|
|
341
318
|
console.log(formatJsonResult(createSuccessResult('newpr', data)));
|
|
342
319
|
return;
|
|
343
320
|
}
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
console.log(colors.dim(` cd ${worktreePath}`));
|
|
355
|
-
console.log(colors.dim(` gh pr view ${prNumber} --web # Open PR in browser`));
|
|
356
|
-
console.log(colors.dim(` wtlink link # Link config files from main worktree`));
|
|
357
|
-
console.log();
|
|
321
|
+
printSummaryBox(`PR #${prNumber} worktree ready!`, [
|
|
322
|
+
{ label: 'Branch', value: branchName },
|
|
323
|
+
{ label: 'Worktree', value: worktreePath },
|
|
324
|
+
{ label: 'PR URL', value: prUrl },
|
|
325
|
+
]);
|
|
326
|
+
printNextSteps([
|
|
327
|
+
{ command: `cd ${worktreePath}` },
|
|
328
|
+
{ command: `gh pr view ${prNumber} --web`, description: 'Open PR in browser' },
|
|
329
|
+
{ command: 'wtlink link', description: 'Link config files from main worktree' },
|
|
330
|
+
]);
|
|
358
331
|
}
|
|
359
332
|
/**
|
|
360
333
|
* Handle plan generation based on options and config
|
|
@@ -379,10 +352,10 @@ async function handlePlanGeneration(options, config, context) {
|
|
|
379
352
|
shouldGenerate = await promptConfirm('Generate AI implementation plan document?', false);
|
|
380
353
|
}
|
|
381
354
|
if (!shouldGenerate) {
|
|
382
|
-
debug('Plan generation skipped', { reason: decision.reason });
|
|
355
|
+
logger.debug('Plan generation skipped', { reason: decision.reason });
|
|
383
356
|
return undefined;
|
|
384
357
|
}
|
|
385
|
-
|
|
358
|
+
printStatus('info', 'Generating AI implementation plan...');
|
|
386
359
|
// Build path template variables
|
|
387
360
|
const vars = buildPathTemplateVars({
|
|
388
361
|
prNumber: context.prNumber,
|
|
@@ -400,10 +373,10 @@ async function handlePlanGeneration(options, config, context) {
|
|
|
400
373
|
baseBranch: options.baseBranch,
|
|
401
374
|
});
|
|
402
375
|
if (result.generated) {
|
|
403
|
-
|
|
376
|
+
printStatus('success', `Created plan: ${result.path}`);
|
|
404
377
|
}
|
|
405
378
|
else if (result.error) {
|
|
406
|
-
|
|
379
|
+
printStatus('warning', `Plan generation failed: ${result.error}`);
|
|
407
380
|
}
|
|
408
381
|
return result;
|
|
409
382
|
}
|
|
@@ -432,7 +405,7 @@ async function executePostWorktreeSequence(worktreePath, config, options, contex
|
|
|
432
405
|
* Mode: Setup worktree for existing PR
|
|
433
406
|
*/
|
|
434
407
|
async function modeExistingPr(prNumber, options) {
|
|
435
|
-
|
|
408
|
+
printStatus('info', `Setting up worktree for existing PR #${prNumber}...`);
|
|
436
409
|
const repoRoot = git.getRepoRoot();
|
|
437
410
|
const repoName = git.getRepoName(repoRoot);
|
|
438
411
|
const config = loadConfig(repoRoot);
|
|
@@ -441,7 +414,7 @@ async function modeExistingPr(prNumber, options) {
|
|
|
441
414
|
repoRoot,
|
|
442
415
|
baseBranch: options.baseBranch,
|
|
443
416
|
}, {
|
|
444
|
-
verbose:
|
|
417
|
+
verbose: options.verbose ?? false,
|
|
445
418
|
showOutput: true,
|
|
446
419
|
defaultTimeout: config.hookDefaults?.timeout,
|
|
447
420
|
maxTimeout: config.hookDefaults?.maxTimeout,
|
|
@@ -452,9 +425,9 @@ async function modeExistingPr(prNumber, options) {
|
|
|
452
425
|
exitWithError(`Could not find PR #${prNumber}`, ErrorCode.PR_NOT_FOUND, options.json);
|
|
453
426
|
}
|
|
454
427
|
if (pr.state !== 'OPEN') {
|
|
455
|
-
|
|
428
|
+
printStatus('warning', `PR #${prNumber} is ${pr.state}`);
|
|
456
429
|
}
|
|
457
|
-
|
|
430
|
+
printStatus('info', `PR branch: ${pr.headBranch}`);
|
|
458
431
|
const worktreePath = generateWorktreePath(config, repoRoot, repoName, prNumber);
|
|
459
432
|
if (fs.existsSync(worktreePath)) {
|
|
460
433
|
exitWithError(`Worktree already exists: ${worktreePath}`, ErrorCode.WORKTREE_EXISTS, options.json);
|
|
@@ -500,7 +473,7 @@ async function modeExistingPr(prNumber, options) {
|
|
|
500
473
|
}
|
|
501
474
|
});
|
|
502
475
|
}
|
|
503
|
-
|
|
476
|
+
printStatus('success', `Created worktree: ${worktreePath}`);
|
|
504
477
|
await setupWorktree(worktreePath, config, options, repoRoot);
|
|
505
478
|
// Generate description from branch name for plan context
|
|
506
479
|
const descriptionFromBranch = pr.headBranch
|
|
@@ -513,13 +486,14 @@ async function modeExistingPr(prNumber, options) {
|
|
|
513
486
|
branchName: pr.headBranch,
|
|
514
487
|
description: descriptionFromBranch,
|
|
515
488
|
}, hookRunner);
|
|
489
|
+
setAuditContext({ prNumber, worktreePath, gitBranch: pr.headBranch });
|
|
516
490
|
printSummary(prNumber, pr.headBranch, worktreePath, pr.url, options, { draft: pr.isDraft });
|
|
517
491
|
}
|
|
518
492
|
/**
|
|
519
493
|
* Mode: Create PR for existing branch
|
|
520
494
|
*/
|
|
521
495
|
async function modeExistingBranch(branchName, options) {
|
|
522
|
-
|
|
496
|
+
printStatus('info', `Creating PR for existing branch: ${branchName}...`);
|
|
523
497
|
const repoRoot = git.getRepoRoot();
|
|
524
498
|
const repoName = git.getRepoName(repoRoot);
|
|
525
499
|
const config = loadConfig(repoRoot);
|
|
@@ -528,7 +502,7 @@ async function modeExistingBranch(branchName, options) {
|
|
|
528
502
|
repoRoot,
|
|
529
503
|
baseBranch: options.baseBranch,
|
|
530
504
|
}, {
|
|
531
|
-
verbose:
|
|
505
|
+
verbose: options.verbose ?? false,
|
|
532
506
|
showOutput: true,
|
|
533
507
|
defaultTimeout: config.hookDefaults?.timeout,
|
|
534
508
|
maxTimeout: config.hookDefaults?.maxTimeout,
|
|
@@ -561,11 +535,11 @@ async function modeExistingBranch(branchName, options) {
|
|
|
561
535
|
}
|
|
562
536
|
const existingPr = github.getPrByBranch(branchName);
|
|
563
537
|
if (existingPr) {
|
|
564
|
-
|
|
538
|
+
printStatus('info', `PR #${existingPr.number} already exists for branch ${branchName}`);
|
|
565
539
|
await modeExistingPr(existingPr.number, options);
|
|
566
540
|
return;
|
|
567
541
|
}
|
|
568
|
-
|
|
542
|
+
printStatus('info', 'Creating pull request...');
|
|
569
543
|
// Generate description from branch name for AI context
|
|
570
544
|
const descriptionFromBranch = branchName
|
|
571
545
|
.replace(/^(feat|fix|chore)\//, '')
|
|
@@ -580,7 +554,7 @@ async function modeExistingBranch(branchName, options) {
|
|
|
580
554
|
commitMessages: git.getCommitMessages(`origin/${options.baseBranch}`, branchName),
|
|
581
555
|
});
|
|
582
556
|
if (prContent.aiGenerated) {
|
|
583
|
-
|
|
557
|
+
printStatus('info', '✨ AI-generated PR content');
|
|
584
558
|
}
|
|
585
559
|
const defaultBody = `## Summary
|
|
586
560
|
|
|
@@ -603,7 +577,7 @@ PR created from existing branch: \`${branchName}\`
|
|
|
603
577
|
head: branchName,
|
|
604
578
|
draft: options.draft,
|
|
605
579
|
});
|
|
606
|
-
|
|
580
|
+
printStatus('success', `Created PR #${pr.number}: ${pr.url}`);
|
|
607
581
|
// Update hook context
|
|
608
582
|
hookRunner.updateContext({
|
|
609
583
|
branchName,
|
|
@@ -636,7 +610,7 @@ PR created from existing branch: \`${branchName}\`
|
|
|
636
610
|
}
|
|
637
611
|
});
|
|
638
612
|
}
|
|
639
|
-
|
|
613
|
+
printStatus('success', `Created worktree: ${worktreePath}`);
|
|
640
614
|
await setupWorktree(worktreePath, config, options, repoRoot);
|
|
641
615
|
// Execute unified post-worktree sequence (plan generation + hook)
|
|
642
616
|
await executePostWorktreeSequence(worktreePath, config, options, {
|
|
@@ -644,6 +618,7 @@ PR created from existing branch: \`${branchName}\`
|
|
|
644
618
|
branchName,
|
|
645
619
|
description: descriptionFromBranch,
|
|
646
620
|
}, hookRunner);
|
|
621
|
+
setAuditContext({ prNumber: pr.number, worktreePath, gitBranch: branchName });
|
|
647
622
|
printSummary(pr.number, branchName, worktreePath, pr.url, options);
|
|
648
623
|
}
|
|
649
624
|
/**
|
|
@@ -660,7 +635,7 @@ async function modeNewFeature(description, options) {
|
|
|
660
635
|
baseBranch: options.baseBranch,
|
|
661
636
|
description,
|
|
662
637
|
}, {
|
|
663
|
-
verbose:
|
|
638
|
+
verbose: options.verbose ?? false,
|
|
664
639
|
showOutput: true,
|
|
665
640
|
defaultTimeout: config.hookDefaults?.timeout,
|
|
666
641
|
maxTimeout: config.hookDefaults?.maxTimeout,
|
|
@@ -682,7 +657,7 @@ async function modeNewFeature(description, options) {
|
|
|
682
657
|
}
|
|
683
658
|
}
|
|
684
659
|
catch {
|
|
685
|
-
|
|
660
|
+
printStatus('warning', 'Could not fetch from origin (network unavailable?)');
|
|
686
661
|
}
|
|
687
662
|
const state = analyzeGitState(options.baseBranch);
|
|
688
663
|
const scenario = detectScenario(state);
|
|
@@ -696,7 +671,7 @@ async function modeNewFeature(description, options) {
|
|
|
696
671
|
if (!(await hookRunner.runHook('post-analyze'))) {
|
|
697
672
|
exitWithError('Aborted by post-analyze hook.', ErrorCode.HOOK_FAILED, options.json);
|
|
698
673
|
}
|
|
699
|
-
debug('State analysis complete', {
|
|
674
|
+
logger.debug('State analysis complete', {
|
|
700
675
|
scenario,
|
|
701
676
|
branchType: state.branchType,
|
|
702
677
|
currentBranch: state.currentBranch,
|
|
@@ -712,10 +687,10 @@ async function modeNewFeature(description, options) {
|
|
|
712
687
|
console.log(formatJsonResult(createErrorResult('newpr', ErrorCode.USER_CANCELLED, 'User cancelled')));
|
|
713
688
|
process.exit(1);
|
|
714
689
|
}
|
|
715
|
-
|
|
690
|
+
printStatus('error', 'Aborted by user.');
|
|
716
691
|
process.exit(1);
|
|
717
692
|
}
|
|
718
|
-
debug('User selected action', {
|
|
693
|
+
logger.debug('User selected action', {
|
|
719
694
|
action: action.action,
|
|
720
695
|
branchFrom: action.branchFrom,
|
|
721
696
|
stashUnstaged: action.stashUnstaged,
|
|
@@ -734,36 +709,36 @@ async function modeNewFeature(description, options) {
|
|
|
734
709
|
const deps = createActionDeps(repoRoot);
|
|
735
710
|
executeStateAction(action, description, currentBranch, deps, repoRoot);
|
|
736
711
|
if (!git.remoteBranchExists(currentBranch)) {
|
|
737
|
-
|
|
712
|
+
printStatus('info', 'Pushing branch to origin...');
|
|
738
713
|
git.push({ setUpstream: true, remote: 'origin', branch: currentBranch });
|
|
739
714
|
}
|
|
740
715
|
await modeExistingBranch(currentBranch, options);
|
|
741
716
|
return;
|
|
742
717
|
}
|
|
743
|
-
|
|
718
|
+
printStatus('info', `Creating feature branch: ${branchName}`);
|
|
744
719
|
if (git.remoteBranchExists(branchName)) {
|
|
745
|
-
|
|
720
|
+
printStatus('warning', `Branch ${branchName} already exists on remote`);
|
|
746
721
|
const existingPr = github.getPrByBranch(branchName);
|
|
747
722
|
if (existingPr) {
|
|
748
|
-
|
|
723
|
+
printStatus('info', `PR #${existingPr.number} already exists, setting up worktree...`);
|
|
749
724
|
await modeExistingPr(existingPr.number, options);
|
|
750
725
|
}
|
|
751
726
|
else {
|
|
752
|
-
|
|
727
|
+
printStatus('info', 'No PR exists, creating one...');
|
|
753
728
|
await modeExistingBranch(branchName, options);
|
|
754
729
|
}
|
|
755
730
|
return;
|
|
756
731
|
}
|
|
757
732
|
const originalBranch = git.getCurrentBranch() || 'main';
|
|
758
733
|
const deps = createActionDeps(repoRoot);
|
|
759
|
-
debug('Before executeStateAction', {
|
|
734
|
+
logger.debug('Before executeStateAction', {
|
|
760
735
|
originalBranch,
|
|
761
736
|
branchName,
|
|
762
737
|
stagedFilesBefore: git.getStagedFiles(),
|
|
763
738
|
unstagedFilesBefore: git.getUnstagedFiles(),
|
|
764
739
|
});
|
|
765
740
|
const actionResult = executeStateAction(action, description, branchName, deps, repoRoot);
|
|
766
|
-
debug('After executeStateAction', {
|
|
741
|
+
logger.debug('After executeStateAction', {
|
|
767
742
|
success: actionResult.success,
|
|
768
743
|
stashRef: actionResult.stashRef,
|
|
769
744
|
stagedFilesAfter: git.getStagedFiles(),
|
|
@@ -775,7 +750,7 @@ async function modeNewFeature(description, options) {
|
|
|
775
750
|
// Stash unstaged changes if needed
|
|
776
751
|
let unstagedStashRef = null;
|
|
777
752
|
if (action.stashUnstaged) {
|
|
778
|
-
|
|
753
|
+
printStatus('info', 'Stashing unstaged changes (will move to worktree)...');
|
|
779
754
|
unstagedStashRef = git.stash({
|
|
780
755
|
keepIndex: true,
|
|
781
756
|
message: 'newpr: unstaged changes for worktree',
|
|
@@ -787,8 +762,8 @@ async function modeNewFeature(description, options) {
|
|
|
787
762
|
if (!(await hookRunner.runHook('pre-branch'))) {
|
|
788
763
|
exitWithError('Aborted by pre-branch hook.', ErrorCode.HOOK_FAILED, options.json);
|
|
789
764
|
}
|
|
790
|
-
|
|
791
|
-
debug('Before checkout', {
|
|
765
|
+
printStatus('info', `Creating branch from ${branchFrom}...`);
|
|
766
|
+
logger.debug('Before checkout', {
|
|
792
767
|
branchFrom,
|
|
793
768
|
branchName,
|
|
794
769
|
currentBranch: git.getCurrentBranch(),
|
|
@@ -802,16 +777,19 @@ async function modeNewFeature(description, options) {
|
|
|
802
777
|
// the staged files in the index - no data is lost. Provide a helpful message.
|
|
803
778
|
const errorMessage = checkoutError instanceof Error ? checkoutError.message : String(checkoutError);
|
|
804
779
|
if (errorMessage.includes('overwritten') || errorMessage.includes('conflict')) {
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
780
|
+
printError({
|
|
781
|
+
title: 'Checkout failed due to conflicting changes.',
|
|
782
|
+
detail: 'Your staged changes are preserved in the index.',
|
|
783
|
+
hint: 'To resolve this, either:\n' +
|
|
784
|
+
' 1. Commit your changes first, then run newpr again\n' +
|
|
785
|
+
' 2. Stash your changes: git stash push\n' +
|
|
786
|
+
' 3. Use a different branch point (e.g., HEAD instead of origin/main)',
|
|
787
|
+
});
|
|
810
788
|
}
|
|
811
789
|
throw checkoutError;
|
|
812
790
|
}
|
|
813
791
|
const stagedFiles = git.getStagedFiles();
|
|
814
|
-
debug('After checkout', {
|
|
792
|
+
logger.debug('After checkout', {
|
|
815
793
|
newBranch: git.getCurrentBranch(),
|
|
816
794
|
stagedFilesAfterCheckout: stagedFiles,
|
|
817
795
|
stagedFilesCount: stagedFiles.length,
|
|
@@ -825,9 +803,9 @@ async function modeNewFeature(description, options) {
|
|
|
825
803
|
if (!(await hookRunner.runHook('pre-commit'))) {
|
|
826
804
|
exitWithError('Aborted by pre-commit hook.', ErrorCode.HOOK_FAILED, options.json);
|
|
827
805
|
}
|
|
828
|
-
|
|
806
|
+
printStatus('info', 'Committing staged changes...');
|
|
829
807
|
git.commit({ message: `feat: ${description}\n\n🤖 Created with newpr` });
|
|
830
|
-
debug('Committed staged changes');
|
|
808
|
+
logger.debug('Committed staged changes');
|
|
831
809
|
// Run post-commit hook
|
|
832
810
|
await hookRunner.runHook('post-commit');
|
|
833
811
|
}
|
|
@@ -836,12 +814,12 @@ async function modeNewFeature(description, options) {
|
|
|
836
814
|
if (!(await hookRunner.runHook('pre-commit'))) {
|
|
837
815
|
exitWithError('Aborted by pre-commit hook.', ErrorCode.HOOK_FAILED, options.json);
|
|
838
816
|
}
|
|
839
|
-
|
|
817
|
+
printStatus('info', 'Creating initial commit (required for PR creation)...');
|
|
840
818
|
git.commit({
|
|
841
819
|
message: `chore: initialize ${branchName}\n\nBranch created for: ${description}\n\n🤖 Created with newpr`,
|
|
842
820
|
allowEmpty: true,
|
|
843
821
|
});
|
|
844
|
-
debug('Created empty commit (no staged files found)');
|
|
822
|
+
logger.debug('Created empty commit (no staged files found)');
|
|
845
823
|
// Run post-commit hook
|
|
846
824
|
await hookRunner.runHook('post-commit');
|
|
847
825
|
}
|
|
@@ -865,7 +843,7 @@ async function modeNewFeature(description, options) {
|
|
|
865
843
|
if (!(await hookRunner.runHook('pre-pr'))) {
|
|
866
844
|
exitWithError('Aborted by pre-pr hook.', ErrorCode.HOOK_FAILED, options.json);
|
|
867
845
|
}
|
|
868
|
-
|
|
846
|
+
printStatus('info', 'Creating pull request...');
|
|
869
847
|
// Generate AI-enhanced PR content if enabled
|
|
870
848
|
// Use origin/baseBranch to compare against remote, not potentially stale local branch
|
|
871
849
|
const prContent = await generatePRContentAsync(config, {
|
|
@@ -876,7 +854,7 @@ async function modeNewFeature(description, options) {
|
|
|
876
854
|
commitMessages: git.getCommitMessages(`origin/${options.baseBranch}`, branchName),
|
|
877
855
|
});
|
|
878
856
|
if (prContent.aiGenerated) {
|
|
879
|
-
|
|
857
|
+
printStatus('info', '✨ AI-generated PR content');
|
|
880
858
|
}
|
|
881
859
|
const defaultBody = `## Summary
|
|
882
860
|
|
|
@@ -899,7 +877,7 @@ ${description}
|
|
|
899
877
|
head: branchName,
|
|
900
878
|
draft: options.draft,
|
|
901
879
|
});
|
|
902
|
-
|
|
880
|
+
printStatus('success', `Created PR #${pr.number}: ${pr.url}`);
|
|
903
881
|
// Update context with PR info
|
|
904
882
|
hookRunner.updateContext({
|
|
905
883
|
prNumber: pr.number,
|
|
@@ -923,17 +901,17 @@ ${description}
|
|
|
923
901
|
await git.addWorktreeAsync(worktreePath, branchName, { cwd: repoRoot });
|
|
924
902
|
});
|
|
925
903
|
}
|
|
926
|
-
|
|
904
|
+
printStatus('success', `Created worktree: ${worktreePath}`);
|
|
927
905
|
if (unstagedStashRef) {
|
|
928
|
-
|
|
906
|
+
printStatus('info', 'Moving unstaged changes to worktree...');
|
|
929
907
|
try {
|
|
930
908
|
git.stashApply(unstagedStashRef, worktreePath);
|
|
931
|
-
|
|
909
|
+
printStatus('success', 'Unstaged changes applied to worktree');
|
|
932
910
|
git.stashDrop(unstagedStashRef);
|
|
933
911
|
}
|
|
934
912
|
catch {
|
|
935
|
-
|
|
936
|
-
|
|
913
|
+
printStatus('warning', 'Failed to apply unstaged changes to worktree.');
|
|
914
|
+
printStatus('warning', "Run 'git stash pop' in main worktree to recover them.");
|
|
937
915
|
}
|
|
938
916
|
}
|
|
939
917
|
await setupWorktree(worktreePath, config, options, repoRoot);
|
|
@@ -943,6 +921,7 @@ ${description}
|
|
|
943
921
|
branchName,
|
|
944
922
|
description,
|
|
945
923
|
}, hookRunner);
|
|
924
|
+
setAuditContext({ prNumber: pr.number, worktreePath, gitBranch: branchName });
|
|
946
925
|
printSummary(pr.number, branchName, worktreePath, pr.url, options, {
|
|
947
926
|
scenario,
|
|
948
927
|
actionTaken: action.action,
|
|
@@ -952,12 +931,12 @@ ${description}
|
|
|
952
931
|
// Run cleanup hook
|
|
953
932
|
await hookRunner.runCleanup(error instanceof Error ? error : undefined);
|
|
954
933
|
if (actionResult.stashRef) {
|
|
955
|
-
|
|
934
|
+
printStatus('info', 'Restoring stashed changes...');
|
|
956
935
|
try {
|
|
957
936
|
git.stashPop(actionResult.stashRef);
|
|
958
937
|
}
|
|
959
938
|
catch {
|
|
960
|
-
|
|
939
|
+
printStatus('warning', "Failed to restore stash. Run 'git stash pop' manually.");
|
|
961
940
|
}
|
|
962
941
|
}
|
|
963
942
|
throw error;
|
|
@@ -977,25 +956,23 @@ function exitWithError(message, code, useJson) {
|
|
|
977
956
|
console.log(formatJsonResult(createErrorResult('newpr', code, message)));
|
|
978
957
|
}
|
|
979
958
|
else {
|
|
980
|
-
|
|
959
|
+
const hint = getErrorSuggestion(code);
|
|
960
|
+
printError({ title: message, hint });
|
|
981
961
|
}
|
|
982
962
|
process.exit(1);
|
|
983
963
|
}
|
|
984
964
|
/**
|
|
985
|
-
*
|
|
965
|
+
* Run the newpr handler with already-parsed options.
|
|
966
|
+
*
|
|
967
|
+
* This is the core newpr workflow, callable both from the standalone CLI
|
|
968
|
+
* entry point and from the `wt new` handler (in-process delegation).
|
|
969
|
+
*
|
|
970
|
+
* Callers are responsible for:
|
|
971
|
+
* - Initializing the logger (initializeLogger)
|
|
972
|
+
* - Setting JSON mode (setJsonMode)
|
|
973
|
+
* - Setting color enabled state (setColorEnabled)
|
|
986
974
|
*/
|
|
987
|
-
async function
|
|
988
|
-
const rawArgs = process.argv.slice(2);
|
|
989
|
-
const useJson = hasJsonFlag(rawArgs);
|
|
990
|
-
const result = parseArgs(rawArgs);
|
|
991
|
-
if (result.kind === 'help') {
|
|
992
|
-
console.log(getHelpText());
|
|
993
|
-
process.exit(0);
|
|
994
|
-
}
|
|
995
|
-
if (result.kind === 'error') {
|
|
996
|
-
exitWithError(result.message, ErrorCode.INVALID_ARGUMENT, useJson);
|
|
997
|
-
}
|
|
998
|
-
const { options } = result;
|
|
975
|
+
export async function runNewprHandler(options) {
|
|
999
976
|
// Apply config.draftPr if user didn't explicitly set --draft or --ready
|
|
1000
977
|
try {
|
|
1001
978
|
const repoRoot = git.getRepoRoot();
|
|
@@ -1032,26 +1009,55 @@ async function main() {
|
|
|
1032
1009
|
break;
|
|
1033
1010
|
}
|
|
1034
1011
|
}
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
const
|
|
1042
|
-
const
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1012
|
+
/**
|
|
1013
|
+
* Main entry point (standalone CLI)
|
|
1014
|
+
*/
|
|
1015
|
+
async function main() {
|
|
1016
|
+
printDeprecationNotice('newpr', 'wt new');
|
|
1017
|
+
const rawArgs = process.argv.slice(2);
|
|
1018
|
+
const useJson = hasJsonFlag(rawArgs);
|
|
1019
|
+
const result = parseArgs(rawArgs);
|
|
1020
|
+
if (result.kind === 'help') {
|
|
1021
|
+
console.log(getHelpText());
|
|
1022
|
+
process.exit(0);
|
|
1046
1023
|
}
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
console.error(colors.error(`Error: ${message}`));
|
|
1050
|
-
if (suggestion) {
|
|
1051
|
-
console.error('');
|
|
1052
|
-
console.error(colors.dim(suggestion));
|
|
1053
|
-
}
|
|
1054
|
-
process.exit(1);
|
|
1024
|
+
if (result.kind === 'error') {
|
|
1025
|
+
exitWithError(result.message, ErrorCode.INVALID_ARGUMENT, useJson);
|
|
1055
1026
|
}
|
|
1056
|
-
}
|
|
1027
|
+
const { options } = result;
|
|
1028
|
+
// Initialize logger (only when run as standalone CLI)
|
|
1029
|
+
initializeLogger({
|
|
1030
|
+
verbose: options.verbose,
|
|
1031
|
+
quiet: options.quiet,
|
|
1032
|
+
noColor: options.noColor,
|
|
1033
|
+
json: options.json,
|
|
1034
|
+
commandName: 'newpr',
|
|
1035
|
+
});
|
|
1036
|
+
setJsonMode(options.json);
|
|
1037
|
+
if (options.noColor) {
|
|
1038
|
+
setColorEnabled(false);
|
|
1039
|
+
}
|
|
1040
|
+
await runNewprHandler(options);
|
|
1041
|
+
}
|
|
1042
|
+
// Only run main() when this file is executed directly (not when imported)
|
|
1043
|
+
const isMain = import.meta.url.endsWith(process.argv[1]?.replace(/\\/g, '/') || '');
|
|
1044
|
+
if (isMain || process.argv[1]?.endsWith('newpr.js')) {
|
|
1045
|
+
main().catch((error) => {
|
|
1046
|
+
// Determine if JSON output is expected
|
|
1047
|
+
const useJson = hasJsonFlag(process.argv.slice(2));
|
|
1048
|
+
if (error instanceof NonInteractiveError) {
|
|
1049
|
+
exitWithError(error.message, error.code, useJson);
|
|
1050
|
+
}
|
|
1051
|
+
if (useJson) {
|
|
1052
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
1053
|
+
const code = getErrorCodeFromError(error);
|
|
1054
|
+
exitWithError(message, code, useJson);
|
|
1055
|
+
}
|
|
1056
|
+
else {
|
|
1057
|
+
const display = errorToDisplay(error);
|
|
1058
|
+
printError(display);
|
|
1059
|
+
process.exit(1);
|
|
1060
|
+
}
|
|
1061
|
+
});
|
|
1062
|
+
}
|
|
1057
1063
|
//# sourceMappingURL=newpr.js.map
|