@camaradesuk/git-worktree-tools 1.2.1 → 1.4.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 +323 -16
- package/dist/api/clean.d.ts +65 -0
- package/dist/api/clean.d.ts.map +1 -0
- package/dist/api/clean.js +209 -0
- package/dist/api/clean.js.map +1 -0
- package/dist/api/create.d.ts +88 -0
- package/dist/api/create.d.ts.map +1 -0
- package/dist/api/create.js +370 -0
- package/dist/api/create.js.map +1 -0
- package/dist/api/index.d.ts +15 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +19 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/list.d.ts +74 -0
- package/dist/api/list.d.ts.map +1 -0
- package/dist/api/list.js +80 -0
- package/dist/api/list.js.map +1 -0
- package/dist/api/state.d.ts +43 -0
- package/dist/api/state.d.ts.map +1 -0
- package/dist/api/state.js +70 -0
- package/dist/api/state.js.map +1 -0
- package/dist/cli/cleanpr.js +171 -28
- package/dist/cli/cleanpr.js.map +1 -1
- package/dist/cli/cleanpr.test.js +460 -7
- package/dist/cli/cleanpr.test.js.map +1 -1
- package/dist/cli/lswt.js +8 -1
- package/dist/cli/lswt.js.map +1 -1
- package/dist/cli/lswt.test.js +2 -0
- package/dist/cli/lswt.test.js.map +1 -1
- package/dist/cli/newpr.js +189 -28
- package/dist/cli/newpr.js.map +1 -1
- package/dist/cli/newpr.test.js +350 -0
- package/dist/cli/newpr.test.js.map +1 -1
- package/dist/cli/wtconfig.d.ts +14 -0
- package/dist/cli/wtconfig.d.ts.map +1 -0
- package/dist/cli/wtconfig.js +948 -0
- package/dist/cli/wtconfig.js.map +1 -0
- package/dist/cli/wtconfig.test.d.ts +5 -0
- package/dist/cli/wtconfig.test.d.ts.map +1 -0
- package/dist/cli/wtconfig.test.js +1281 -0
- package/dist/cli/wtconfig.test.js.map +1 -0
- package/dist/cli/wtlink.js +5 -0
- package/dist/cli/wtlink.js.map +1 -1
- package/dist/cli/wtstate.d.ts +8 -0
- package/dist/cli/wtstate.d.ts.map +1 -0
- package/dist/cli/wtstate.js +83 -0
- package/dist/cli/wtstate.js.map +1 -0
- package/dist/cli/wtstate.test.d.ts +5 -0
- package/dist/cli/wtstate.test.d.ts.map +1 -0
- package/dist/cli/wtstate.test.js +193 -0
- package/dist/cli/wtstate.test.js.map +1 -0
- package/dist/e2e/cleanpr/cleanpr.e2e.test.d.ts +2 -0
- package/dist/e2e/cleanpr/cleanpr.e2e.test.d.ts.map +1 -0
- package/dist/e2e/cleanpr/cleanpr.e2e.test.js +326 -0
- package/dist/e2e/cleanpr/cleanpr.e2e.test.js.map +1 -0
- package/dist/e2e/helpers/cli-runner.d.ts +103 -0
- package/dist/e2e/helpers/cli-runner.d.ts.map +1 -0
- package/dist/e2e/helpers/cli-runner.js +200 -0
- package/dist/e2e/helpers/cli-runner.js.map +1 -0
- package/dist/e2e/helpers/gh-mock.d.ts +87 -0
- package/dist/e2e/helpers/gh-mock.d.ts.map +1 -0
- package/dist/e2e/helpers/gh-mock.js +384 -0
- package/dist/e2e/helpers/gh-mock.js.map +1 -0
- package/dist/e2e/helpers/index.d.ts +12 -0
- package/dist/e2e/helpers/index.d.ts.map +1 -0
- package/dist/e2e/helpers/index.js +16 -0
- package/dist/e2e/helpers/index.js.map +1 -0
- package/dist/e2e/helpers/pty-wrapper.d.ts +118 -0
- package/dist/e2e/helpers/pty-wrapper.d.ts.map +1 -0
- package/dist/e2e/helpers/pty-wrapper.js +276 -0
- package/dist/e2e/helpers/pty-wrapper.js.map +1 -0
- package/dist/e2e/helpers/scenario-harness.d.ts +55 -0
- package/dist/e2e/helpers/scenario-harness.d.ts.map +1 -0
- package/dist/e2e/helpers/scenario-harness.js +360 -0
- package/dist/e2e/helpers/scenario-harness.js.map +1 -0
- package/dist/e2e/helpers/test-context.d.ts +120 -0
- package/dist/e2e/helpers/test-context.d.ts.map +1 -0
- package/dist/e2e/helpers/test-context.js +263 -0
- package/dist/e2e/helpers/test-context.js.map +1 -0
- package/dist/e2e/lswt/lswt.e2e.test.d.ts +2 -0
- package/dist/e2e/lswt/lswt.e2e.test.d.ts.map +1 -0
- package/dist/e2e/lswt/lswt.e2e.test.js +328 -0
- package/dist/e2e/lswt/lswt.e2e.test.js.map +1 -0
- package/dist/e2e/newpr/newpr.e2e.test.d.ts +2 -0
- package/dist/e2e/newpr/newpr.e2e.test.d.ts.map +1 -0
- package/dist/e2e/newpr/newpr.e2e.test.js +286 -0
- package/dist/e2e/newpr/newpr.e2e.test.js.map +1 -0
- package/dist/e2e/newpr/scenarios.e2e.test.d.ts +2 -0
- package/dist/e2e/newpr/scenarios.e2e.test.d.ts.map +1 -0
- package/dist/e2e/newpr/scenarios.e2e.test.js +426 -0
- package/dist/e2e/newpr/scenarios.e2e.test.js.map +1 -0
- package/dist/e2e/workflows/pr-lifecycle.e2e.test.d.ts +2 -0
- package/dist/e2e/workflows/pr-lifecycle.e2e.test.d.ts.map +1 -0
- package/dist/e2e/workflows/pr-lifecycle.e2e.test.js +298 -0
- package/dist/e2e/workflows/pr-lifecycle.e2e.test.js.map +1 -0
- package/dist/e2e/wtlink/wtlink.e2e.test.d.ts +2 -0
- package/dist/e2e/wtlink/wtlink.e2e.test.d.ts.map +1 -0
- package/dist/e2e/wtlink/wtlink.e2e.test.js +364 -0
- package/dist/e2e/wtlink/wtlink.e2e.test.js.map +1 -0
- package/dist/index.d.ts +15 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/ai/base-provider.d.ts +58 -0
- package/dist/lib/ai/base-provider.d.ts.map +1 -0
- package/dist/lib/ai/base-provider.js +246 -0
- package/dist/lib/ai/base-provider.js.map +1 -0
- package/dist/lib/ai/base-provider.test.d.ts +7 -0
- package/dist/lib/ai/base-provider.test.d.ts.map +1 -0
- package/dist/lib/ai/base-provider.test.js +320 -0
- package/dist/lib/ai/base-provider.test.js.map +1 -0
- package/dist/lib/ai/cli-provider.d.ts +87 -0
- package/dist/lib/ai/cli-provider.d.ts.map +1 -0
- package/dist/lib/ai/cli-provider.js +280 -0
- package/dist/lib/ai/cli-provider.js.map +1 -0
- package/dist/lib/ai/cli-provider.test.d.ts +5 -0
- package/dist/lib/ai/cli-provider.test.d.ts.map +1 -0
- package/dist/lib/ai/cli-provider.test.js +462 -0
- package/dist/lib/ai/cli-provider.test.js.map +1 -0
- package/dist/lib/ai/fallback-provider.d.ts +20 -0
- package/dist/lib/ai/fallback-provider.d.ts.map +1 -0
- package/dist/lib/ai/fallback-provider.js +125 -0
- package/dist/lib/ai/fallback-provider.js.map +1 -0
- package/dist/lib/ai/fallback-provider.test.d.ts +7 -0
- package/dist/lib/ai/fallback-provider.test.d.ts.map +1 -0
- package/dist/lib/ai/fallback-provider.test.js +165 -0
- package/dist/lib/ai/fallback-provider.test.js.map +1 -0
- package/dist/lib/ai/generation-service.d.ts +44 -0
- package/dist/lib/ai/generation-service.d.ts.map +1 -0
- package/dist/lib/ai/generation-service.js +107 -0
- package/dist/lib/ai/generation-service.js.map +1 -0
- package/dist/lib/ai/generation-service.test.d.ts +7 -0
- package/dist/lib/ai/generation-service.test.d.ts.map +1 -0
- package/dist/lib/ai/generation-service.test.js +213 -0
- package/dist/lib/ai/generation-service.test.js.map +1 -0
- package/dist/lib/ai/index.d.ts +19 -0
- package/dist/lib/ai/index.d.ts.map +1 -0
- package/dist/lib/ai/index.js +22 -0
- package/dist/lib/ai/index.js.map +1 -0
- package/dist/lib/ai/provider-manager.d.ts +109 -0
- package/dist/lib/ai/provider-manager.d.ts.map +1 -0
- package/dist/lib/ai/provider-manager.js +270 -0
- package/dist/lib/ai/provider-manager.js.map +1 -0
- package/dist/lib/ai/provider-manager.test.d.ts +5 -0
- package/dist/lib/ai/provider-manager.test.d.ts.map +1 -0
- package/dist/lib/ai/provider-manager.test.js +312 -0
- package/dist/lib/ai/provider-manager.test.js.map +1 -0
- package/dist/lib/ai/types.d.ts +166 -0
- package/dist/lib/ai/types.d.ts.map +1 -0
- package/dist/lib/ai/types.js +19 -0
- package/dist/lib/ai/types.js.map +1 -0
- package/dist/lib/cleanpr/args.d.ts.map +1 -1
- package/dist/lib/cleanpr/args.js +18 -0
- package/dist/lib/cleanpr/args.js.map +1 -1
- package/dist/lib/cleanpr/args.test.js +88 -11
- package/dist/lib/cleanpr/args.test.js.map +1 -1
- package/dist/lib/cleanpr/cleanup.d.ts +2 -0
- package/dist/lib/cleanpr/cleanup.d.ts.map +1 -1
- package/dist/lib/cleanpr/cleanup.js +30 -2
- package/dist/lib/cleanpr/cleanup.js.map +1 -1
- package/dist/lib/cleanpr/cleanup.test.js +37 -5
- package/dist/lib/cleanpr/cleanup.test.js.map +1 -1
- package/dist/lib/cleanpr/types.d.ts +10 -0
- package/dist/lib/cleanpr/types.d.ts.map +1 -1
- package/dist/lib/cleanpr/worktree-info.test.js +72 -1
- package/dist/lib/cleanpr/worktree-info.test.js.map +1 -1
- package/dist/lib/config.d.ts +176 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +130 -2
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/config.test.js +406 -2
- package/dist/lib/config.test.js.map +1 -1
- package/dist/lib/git.test.js +58 -0
- package/dist/lib/git.test.js.map +1 -1
- package/dist/lib/github.test.js +20 -0
- package/dist/lib/github.test.js.map +1 -1
- package/dist/lib/hooks/executor.d.ts +35 -0
- package/dist/lib/hooks/executor.d.ts.map +1 -0
- package/dist/lib/hooks/executor.js +401 -0
- package/dist/lib/hooks/executor.js.map +1 -0
- package/dist/lib/hooks/executor.test.d.ts +5 -0
- package/dist/lib/hooks/executor.test.d.ts.map +1 -0
- package/dist/lib/hooks/executor.test.js +648 -0
- package/dist/lib/hooks/executor.test.js.map +1 -0
- package/dist/lib/hooks/index.d.ts +25 -0
- package/dist/lib/hooks/index.d.ts.map +1 -0
- package/dist/lib/hooks/index.js +26 -0
- package/dist/lib/hooks/index.js.map +1 -0
- package/dist/lib/hooks/templates.d.ts +74 -0
- package/dist/lib/hooks/templates.d.ts.map +1 -0
- package/dist/lib/hooks/templates.js +270 -0
- package/dist/lib/hooks/templates.js.map +1 -0
- package/dist/lib/hooks/templates.test.d.ts +5 -0
- package/dist/lib/hooks/templates.test.d.ts.map +1 -0
- package/dist/lib/hooks/templates.test.js +163 -0
- package/dist/lib/hooks/templates.test.js.map +1 -0
- package/dist/lib/hooks/types.d.ts +161 -0
- package/dist/lib/hooks/types.d.ts.map +1 -0
- package/dist/lib/hooks/types.js +73 -0
- package/dist/lib/hooks/types.js.map +1 -0
- package/dist/lib/hooks/types.test.d.ts +5 -0
- package/dist/lib/hooks/types.test.d.ts.map +1 -0
- package/dist/lib/hooks/types.test.js +132 -0
- package/dist/lib/hooks/types.test.js.map +1 -0
- package/dist/lib/json-output.d.ts +172 -0
- package/dist/lib/json-output.d.ts.map +1 -0
- package/dist/lib/json-output.js +134 -0
- package/dist/lib/json-output.js.map +1 -0
- package/dist/lib/json-output.test.d.ts +5 -0
- package/dist/lib/json-output.test.d.ts.map +1 -0
- package/dist/lib/json-output.test.js +259 -0
- package/dist/lib/json-output.test.js.map +1 -0
- package/dist/lib/lswt/action-executors.d.ts +32 -0
- package/dist/lib/lswt/action-executors.d.ts.map +1 -0
- package/dist/lib/lswt/action-executors.js +489 -0
- package/dist/lib/lswt/action-executors.js.map +1 -0
- package/dist/lib/lswt/action-executors.test.d.ts +2 -0
- package/dist/lib/lswt/action-executors.test.d.ts.map +1 -0
- package/dist/lib/lswt/action-executors.test.js +755 -0
- package/dist/lib/lswt/action-executors.test.js.map +1 -0
- package/dist/lib/lswt/actions.d.ts +25 -0
- package/dist/lib/lswt/actions.d.ts.map +1 -0
- package/dist/lib/lswt/actions.js +187 -0
- package/dist/lib/lswt/actions.js.map +1 -0
- package/dist/lib/lswt/actions.test.d.ts +2 -0
- package/dist/lib/lswt/actions.test.d.ts.map +1 -0
- package/dist/lib/lswt/actions.test.js +359 -0
- package/dist/lib/lswt/actions.test.js.map +1 -0
- package/dist/lib/lswt/args.d.ts.map +1 -1
- package/dist/lib/lswt/args.js +44 -8
- package/dist/lib/lswt/args.js.map +1 -1
- package/dist/lib/lswt/args.test.js +70 -10
- package/dist/lib/lswt/args.test.js.map +1 -1
- package/dist/lib/lswt/environment.d.ts +43 -0
- package/dist/lib/lswt/environment.d.ts.map +1 -0
- package/dist/lib/lswt/environment.js +143 -0
- package/dist/lib/lswt/environment.js.map +1 -0
- package/dist/lib/lswt/environment.test.d.ts +2 -0
- package/dist/lib/lswt/environment.test.d.ts.map +1 -0
- package/dist/lib/lswt/environment.test.js +339 -0
- package/dist/lib/lswt/environment.test.js.map +1 -0
- package/dist/lib/lswt/formatters.d.ts.map +1 -1
- package/dist/lib/lswt/formatters.js +1 -0
- package/dist/lib/lswt/formatters.js.map +1 -1
- package/dist/lib/lswt/formatters.test.js +26 -0
- package/dist/lib/lswt/formatters.test.js.map +1 -1
- package/dist/lib/lswt/index.d.ts +7 -2
- package/dist/lib/lswt/index.d.ts.map +1 -1
- package/dist/lib/lswt/index.js +7 -0
- package/dist/lib/lswt/index.js.map +1 -1
- package/dist/lib/lswt/interactive.d.ts +24 -0
- package/dist/lib/lswt/interactive.d.ts.map +1 -0
- package/dist/lib/lswt/interactive.js +245 -0
- package/dist/lib/lswt/interactive.js.map +1 -0
- package/dist/lib/lswt/interactive.test.d.ts +2 -0
- package/dist/lib/lswt/interactive.test.d.ts.map +1 -0
- package/dist/lib/lswt/interactive.test.js +383 -0
- package/dist/lib/lswt/interactive.test.js.map +1 -0
- package/dist/lib/lswt/types.d.ts +52 -1
- package/dist/lib/lswt/types.d.ts.map +1 -1
- package/dist/lib/lswt/worktree-info.d.ts +8 -1
- package/dist/lib/lswt/worktree-info.d.ts.map +1 -1
- package/dist/lib/lswt/worktree-info.js +14 -4
- package/dist/lib/lswt/worktree-info.js.map +1 -1
- package/dist/lib/lswt/worktree-info.test.js +153 -16
- package/dist/lib/lswt/worktree-info.test.js.map +1 -1
- package/dist/lib/newpr/action-deps.d.ts +15 -0
- package/dist/lib/newpr/action-deps.d.ts.map +1 -0
- package/dist/lib/newpr/action-deps.js +22 -0
- package/dist/lib/newpr/action-deps.js.map +1 -0
- package/dist/lib/newpr/args.d.ts.map +1 -1
- package/dist/lib/newpr/args.js +56 -0
- package/dist/lib/newpr/args.js.map +1 -1
- package/dist/lib/newpr/hook-runner.d.ts +80 -0
- package/dist/lib/newpr/hook-runner.d.ts.map +1 -0
- package/dist/lib/newpr/hook-runner.js +182 -0
- package/dist/lib/newpr/hook-runner.js.map +1 -0
- package/dist/lib/newpr/hook-runner.test.d.ts +7 -0
- package/dist/lib/newpr/hook-runner.test.d.ts.map +1 -0
- package/dist/lib/newpr/hook-runner.test.js +301 -0
- package/dist/lib/newpr/hook-runner.test.js.map +1 -0
- package/dist/lib/newpr/index.d.ts +3 -0
- package/dist/lib/newpr/index.d.ts.map +1 -1
- package/dist/lib/newpr/index.js +3 -0
- package/dist/lib/newpr/index.js.map +1 -1
- package/dist/lib/newpr/types.d.ts +9 -0
- package/dist/lib/newpr/types.d.ts.map +1 -1
- package/dist/lib/prompts.test.js +208 -1
- package/dist/lib/prompts.test.js.map +1 -1
- package/dist/lib/wtconfig/config-manager.d.ts +72 -0
- package/dist/lib/wtconfig/config-manager.d.ts.map +1 -0
- package/dist/lib/wtconfig/config-manager.js +408 -0
- package/dist/lib/wtconfig/config-manager.js.map +1 -0
- package/dist/lib/wtconfig/config-manager.test.d.ts +5 -0
- package/dist/lib/wtconfig/config-manager.test.d.ts.map +1 -0
- package/dist/lib/wtconfig/config-manager.test.js +501 -0
- package/dist/lib/wtconfig/config-manager.test.js.map +1 -0
- package/dist/lib/wtconfig/environment.d.ts +23 -0
- package/dist/lib/wtconfig/environment.d.ts.map +1 -0
- package/dist/lib/wtconfig/environment.js +238 -0
- package/dist/lib/wtconfig/environment.js.map +1 -0
- package/dist/lib/wtconfig/environment.test.d.ts +5 -0
- package/dist/lib/wtconfig/environment.test.d.ts.map +1 -0
- package/dist/lib/wtconfig/environment.test.js +246 -0
- package/dist/lib/wtconfig/environment.test.js.map +1 -0
- package/dist/lib/wtconfig/index.d.ts +7 -0
- package/dist/lib/wtconfig/index.d.ts.map +1 -0
- package/dist/lib/wtconfig/index.js +8 -0
- package/dist/lib/wtconfig/index.js.map +1 -0
- package/dist/lib/wtconfig/types.d.ts +97 -0
- package/dist/lib/wtconfig/types.d.ts.map +1 -0
- package/dist/lib/wtconfig/types.js +5 -0
- package/dist/lib/wtconfig/types.js.map +1 -0
- package/dist/lib/wtstate/analyze.d.ts +13 -0
- package/dist/lib/wtstate/analyze.d.ts.map +1 -0
- package/dist/lib/wtstate/analyze.js +165 -0
- package/dist/lib/wtstate/analyze.js.map +1 -0
- package/dist/lib/wtstate/analyze.test.d.ts +5 -0
- package/dist/lib/wtstate/analyze.test.d.ts.map +1 -0
- package/dist/lib/wtstate/analyze.test.js +282 -0
- package/dist/lib/wtstate/analyze.test.js.map +1 -0
- package/dist/lib/wtstate/args.d.ts +17 -0
- package/dist/lib/wtstate/args.d.ts.map +1 -0
- package/dist/lib/wtstate/args.js +91 -0
- package/dist/lib/wtstate/args.js.map +1 -0
- package/dist/lib/wtstate/args.test.d.ts +5 -0
- package/dist/lib/wtstate/args.test.d.ts.map +1 -0
- package/dist/lib/wtstate/args.test.js +120 -0
- package/dist/lib/wtstate/args.test.js.map +1 -0
- package/dist/lib/wtstate/index.d.ts +7 -0
- package/dist/lib/wtstate/index.d.ts.map +1 -0
- package/dist/lib/wtstate/index.js +8 -0
- package/dist/lib/wtstate/index.js.map +1 -0
- package/dist/lib/wtstate/types.d.ts +64 -0
- package/dist/lib/wtstate/types.d.ts.map +1 -0
- package/dist/lib/wtstate/types.js +5 -0
- package/dist/lib/wtstate/types.js.map +1 -0
- package/dist/mcp/server.d.ts +14 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +339 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/server.test.d.ts +9 -0
- package/dist/mcp/server.test.d.ts.map +1 -0
- package/dist/mcp/server.test.js +390 -0
- package/dist/mcp/server.test.js.map +1 -0
- package/package.json +8 -2
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON output utilities for AI-friendly CLI output
|
|
3
|
+
*
|
|
4
|
+
* Provides structured, machine-readable output for all CLI commands
|
|
5
|
+
* to enable AI agents to programmatically interact with git-worktree-tools.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Standard error codes for programmatic handling
|
|
9
|
+
*/
|
|
10
|
+
export var ErrorCode;
|
|
11
|
+
(function (ErrorCode) {
|
|
12
|
+
// Git errors
|
|
13
|
+
ErrorCode["NOT_GIT_REPO"] = "NOT_GIT_REPO";
|
|
14
|
+
ErrorCode["DETACHED_HEAD"] = "DETACHED_HEAD";
|
|
15
|
+
ErrorCode["UNCOMMITTED_CHANGES"] = "UNCOMMITTED_CHANGES";
|
|
16
|
+
ErrorCode["BRANCH_EXISTS"] = "BRANCH_EXISTS";
|
|
17
|
+
ErrorCode["WORKTREE_EXISTS"] = "WORKTREE_EXISTS";
|
|
18
|
+
ErrorCode["BRANCH_NOT_FOUND"] = "BRANCH_NOT_FOUND";
|
|
19
|
+
ErrorCode["MERGE_CONFLICT"] = "MERGE_CONFLICT";
|
|
20
|
+
ErrorCode["STASH_FAILED"] = "STASH_FAILED";
|
|
21
|
+
// GitHub errors
|
|
22
|
+
ErrorCode["GH_NOT_INSTALLED"] = "GH_NOT_INSTALLED";
|
|
23
|
+
ErrorCode["GH_NOT_AUTHENTICATED"] = "GH_NOT_AUTHENTICATED";
|
|
24
|
+
ErrorCode["PR_NOT_FOUND"] = "PR_NOT_FOUND";
|
|
25
|
+
ErrorCode["PR_ALREADY_EXISTS"] = "PR_ALREADY_EXISTS";
|
|
26
|
+
ErrorCode["PR_CREATE_FAILED"] = "PR_CREATE_FAILED";
|
|
27
|
+
// Config errors
|
|
28
|
+
ErrorCode["INVALID_CONFIG"] = "INVALID_CONFIG";
|
|
29
|
+
// User errors
|
|
30
|
+
ErrorCode["USER_CANCELLED"] = "USER_CANCELLED";
|
|
31
|
+
ErrorCode["INVALID_ARGUMENT"] = "INVALID_ARGUMENT";
|
|
32
|
+
ErrorCode["MISSING_ARGUMENT"] = "MISSING_ARGUMENT";
|
|
33
|
+
ErrorCode["INVALID_ACTION"] = "INVALID_ACTION";
|
|
34
|
+
// Hook errors
|
|
35
|
+
ErrorCode["HOOK_FAILED"] = "HOOK_FAILED";
|
|
36
|
+
// System errors
|
|
37
|
+
ErrorCode["UNKNOWN_ERROR"] = "UNKNOWN_ERROR";
|
|
38
|
+
ErrorCode["OPERATION_FAILED"] = "OPERATION_FAILED";
|
|
39
|
+
})(ErrorCode || (ErrorCode = {}));
|
|
40
|
+
/**
|
|
41
|
+
* Validate a string is a valid StateActionKey
|
|
42
|
+
*/
|
|
43
|
+
export function isValidStateActionKey(key) {
|
|
44
|
+
const validKeys = [
|
|
45
|
+
'empty_commit',
|
|
46
|
+
'commit_staged',
|
|
47
|
+
'commit_all',
|
|
48
|
+
'stash_and_empty',
|
|
49
|
+
'use_commits',
|
|
50
|
+
'push_then_branch',
|
|
51
|
+
'use_commits_and_commit_all',
|
|
52
|
+
'use_commits_and_stash',
|
|
53
|
+
'create_pr_for_branch',
|
|
54
|
+
'pr_for_branch_commit_all',
|
|
55
|
+
'pr_for_branch_stash',
|
|
56
|
+
'branch_from_detached',
|
|
57
|
+
];
|
|
58
|
+
return validKeys.includes(key);
|
|
59
|
+
}
|
|
60
|
+
// ============================================================================
|
|
61
|
+
// Factory functions
|
|
62
|
+
// ============================================================================
|
|
63
|
+
/**
|
|
64
|
+
* Create a successful command result
|
|
65
|
+
*/
|
|
66
|
+
export function createSuccessResult(command, data, warnings) {
|
|
67
|
+
return {
|
|
68
|
+
success: true,
|
|
69
|
+
command,
|
|
70
|
+
timestamp: new Date().toISOString(),
|
|
71
|
+
data,
|
|
72
|
+
warnings: warnings?.length ? warnings : undefined,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Create a failed command result
|
|
77
|
+
*/
|
|
78
|
+
export function createErrorResult(command, code, message, details) {
|
|
79
|
+
return {
|
|
80
|
+
success: false,
|
|
81
|
+
command,
|
|
82
|
+
timestamp: new Date().toISOString(),
|
|
83
|
+
error: {
|
|
84
|
+
code,
|
|
85
|
+
message,
|
|
86
|
+
details,
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Format result as JSON string for output
|
|
92
|
+
*/
|
|
93
|
+
export function formatJsonResult(result) {
|
|
94
|
+
return JSON.stringify(result, null, 2);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Check if an error has an ErrorCode property
|
|
98
|
+
*/
|
|
99
|
+
function hasErrorCode(error) {
|
|
100
|
+
return (error instanceof Error &&
|
|
101
|
+
'code' in error &&
|
|
102
|
+
typeof error.code === 'string');
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Map error class names to error codes
|
|
106
|
+
*/
|
|
107
|
+
export function getErrorCodeFromError(error) {
|
|
108
|
+
if (error instanceof Error) {
|
|
109
|
+
// Handle errors that carry their own ErrorCode (e.g., NonInteractiveError)
|
|
110
|
+
if (hasErrorCode(error) && Object.values(ErrorCode).includes(error.code)) {
|
|
111
|
+
return error.code;
|
|
112
|
+
}
|
|
113
|
+
switch (error.name) {
|
|
114
|
+
case 'GitCommandError':
|
|
115
|
+
return ErrorCode.OPERATION_FAILED;
|
|
116
|
+
case 'GitHubCliError':
|
|
117
|
+
return ErrorCode.OPERATION_FAILED;
|
|
118
|
+
case 'ConfigurationError':
|
|
119
|
+
return ErrorCode.INVALID_CONFIG;
|
|
120
|
+
case 'WorktreeError':
|
|
121
|
+
return ErrorCode.OPERATION_FAILED;
|
|
122
|
+
case 'ManifestError':
|
|
123
|
+
return ErrorCode.INVALID_CONFIG;
|
|
124
|
+
case 'UserCancelledError':
|
|
125
|
+
return ErrorCode.USER_CANCELLED;
|
|
126
|
+
case 'NonInteractiveError':
|
|
127
|
+
return ErrorCode.INVALID_ARGUMENT;
|
|
128
|
+
default:
|
|
129
|
+
return ErrorCode.UNKNOWN_ERROR;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return ErrorCode.UNKNOWN_ERROR;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=json-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-output.js","sourceRoot":"","sources":["../../src/lib/json-output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-output.test.d.ts","sourceRoot":"","sources":["../../src/lib/json-output.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON Output Utilities Tests
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
5
|
+
import { ErrorCode, createSuccessResult, createErrorResult, formatJsonResult, getErrorCodeFromError, isValidStateActionKey, } from './json-output.js';
|
|
6
|
+
describe('json-output', () => {
|
|
7
|
+
describe('ErrorCode enum', () => {
|
|
8
|
+
it('has all expected git error codes', () => {
|
|
9
|
+
expect(ErrorCode.NOT_GIT_REPO).toBe('NOT_GIT_REPO');
|
|
10
|
+
expect(ErrorCode.DETACHED_HEAD).toBe('DETACHED_HEAD');
|
|
11
|
+
expect(ErrorCode.UNCOMMITTED_CHANGES).toBe('UNCOMMITTED_CHANGES');
|
|
12
|
+
expect(ErrorCode.BRANCH_EXISTS).toBe('BRANCH_EXISTS');
|
|
13
|
+
expect(ErrorCode.WORKTREE_EXISTS).toBe('WORKTREE_EXISTS');
|
|
14
|
+
expect(ErrorCode.BRANCH_NOT_FOUND).toBe('BRANCH_NOT_FOUND');
|
|
15
|
+
expect(ErrorCode.MERGE_CONFLICT).toBe('MERGE_CONFLICT');
|
|
16
|
+
expect(ErrorCode.STASH_FAILED).toBe('STASH_FAILED');
|
|
17
|
+
});
|
|
18
|
+
it('has all expected GitHub error codes', () => {
|
|
19
|
+
expect(ErrorCode.GH_NOT_INSTALLED).toBe('GH_NOT_INSTALLED');
|
|
20
|
+
expect(ErrorCode.GH_NOT_AUTHENTICATED).toBe('GH_NOT_AUTHENTICATED');
|
|
21
|
+
expect(ErrorCode.PR_NOT_FOUND).toBe('PR_NOT_FOUND');
|
|
22
|
+
expect(ErrorCode.PR_ALREADY_EXISTS).toBe('PR_ALREADY_EXISTS');
|
|
23
|
+
expect(ErrorCode.PR_CREATE_FAILED).toBe('PR_CREATE_FAILED');
|
|
24
|
+
});
|
|
25
|
+
it('has all expected user error codes', () => {
|
|
26
|
+
expect(ErrorCode.USER_CANCELLED).toBe('USER_CANCELLED');
|
|
27
|
+
expect(ErrorCode.INVALID_ARGUMENT).toBe('INVALID_ARGUMENT');
|
|
28
|
+
expect(ErrorCode.MISSING_ARGUMENT).toBe('MISSING_ARGUMENT');
|
|
29
|
+
expect(ErrorCode.INVALID_ACTION).toBe('INVALID_ACTION');
|
|
30
|
+
});
|
|
31
|
+
it('has all expected system error codes', () => {
|
|
32
|
+
expect(ErrorCode.UNKNOWN_ERROR).toBe('UNKNOWN_ERROR');
|
|
33
|
+
expect(ErrorCode.OPERATION_FAILED).toBe('OPERATION_FAILED');
|
|
34
|
+
expect(ErrorCode.INVALID_CONFIG).toBe('INVALID_CONFIG');
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe('isValidStateActionKey', () => {
|
|
38
|
+
it('returns true for valid action keys', () => {
|
|
39
|
+
expect(isValidStateActionKey('empty_commit')).toBe(true);
|
|
40
|
+
expect(isValidStateActionKey('commit_staged')).toBe(true);
|
|
41
|
+
expect(isValidStateActionKey('commit_all')).toBe(true);
|
|
42
|
+
expect(isValidStateActionKey('stash_and_empty')).toBe(true);
|
|
43
|
+
expect(isValidStateActionKey('use_commits')).toBe(true);
|
|
44
|
+
expect(isValidStateActionKey('push_then_branch')).toBe(true);
|
|
45
|
+
expect(isValidStateActionKey('use_commits_and_commit_all')).toBe(true);
|
|
46
|
+
expect(isValidStateActionKey('use_commits_and_stash')).toBe(true);
|
|
47
|
+
expect(isValidStateActionKey('create_pr_for_branch')).toBe(true);
|
|
48
|
+
expect(isValidStateActionKey('pr_for_branch_commit_all')).toBe(true);
|
|
49
|
+
expect(isValidStateActionKey('pr_for_branch_stash')).toBe(true);
|
|
50
|
+
expect(isValidStateActionKey('branch_from_detached')).toBe(true);
|
|
51
|
+
});
|
|
52
|
+
it('returns false for invalid action keys', () => {
|
|
53
|
+
expect(isValidStateActionKey('invalid_action')).toBe(false);
|
|
54
|
+
expect(isValidStateActionKey('')).toBe(false);
|
|
55
|
+
expect(isValidStateActionKey('EMPTY_COMMIT')).toBe(false); // Wrong case
|
|
56
|
+
expect(isValidStateActionKey('random_string')).toBe(false);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
describe('createSuccessResult', () => {
|
|
60
|
+
beforeEach(() => {
|
|
61
|
+
vi.useFakeTimers();
|
|
62
|
+
vi.setSystemTime(new Date('2024-01-15T10:30:00.000Z'));
|
|
63
|
+
});
|
|
64
|
+
afterEach(() => {
|
|
65
|
+
vi.useRealTimers();
|
|
66
|
+
});
|
|
67
|
+
it('creates a success result with required fields', () => {
|
|
68
|
+
const data = { prNumber: 123, branch: 'feat/test' };
|
|
69
|
+
const result = createSuccessResult('newpr', data);
|
|
70
|
+
expect(result.success).toBe(true);
|
|
71
|
+
expect(result.command).toBe('newpr');
|
|
72
|
+
expect(result.timestamp).toBe('2024-01-15T10:30:00.000Z');
|
|
73
|
+
expect(result.data).toEqual(data);
|
|
74
|
+
expect(result.error).toBeUndefined();
|
|
75
|
+
expect(result.warnings).toBeUndefined();
|
|
76
|
+
});
|
|
77
|
+
it('creates a success result with warnings', () => {
|
|
78
|
+
const data = { status: 'ok' };
|
|
79
|
+
const warnings = ['Warning 1', 'Warning 2'];
|
|
80
|
+
const result = createSuccessResult('test', data, warnings);
|
|
81
|
+
expect(result.success).toBe(true);
|
|
82
|
+
expect(result.warnings).toEqual(warnings);
|
|
83
|
+
});
|
|
84
|
+
it('omits empty warnings array', () => {
|
|
85
|
+
const data = { status: 'ok' };
|
|
86
|
+
const result = createSuccessResult('test', data, []);
|
|
87
|
+
expect(result.warnings).toBeUndefined();
|
|
88
|
+
});
|
|
89
|
+
it('works with newpr result data', () => {
|
|
90
|
+
const data = {
|
|
91
|
+
prNumber: 42,
|
|
92
|
+
prUrl: 'https://github.com/owner/repo/pull/42',
|
|
93
|
+
branch: 'feat/new-feature',
|
|
94
|
+
worktreePath: '/path/to/worktree',
|
|
95
|
+
draft: false,
|
|
96
|
+
scenario: 'main_clean_same',
|
|
97
|
+
actionTaken: 'empty_commit',
|
|
98
|
+
};
|
|
99
|
+
const result = createSuccessResult('newpr', data);
|
|
100
|
+
expect(result.data).toEqual(data);
|
|
101
|
+
});
|
|
102
|
+
it('works with cleanpr result data', () => {
|
|
103
|
+
const data = {
|
|
104
|
+
cleaned: [
|
|
105
|
+
{
|
|
106
|
+
prNumber: 1,
|
|
107
|
+
branch: 'feat/branch-1',
|
|
108
|
+
path: '/path/to/worktree',
|
|
109
|
+
prState: 'merged',
|
|
110
|
+
localBranchDeleted: true,
|
|
111
|
+
remoteBranchDeleted: true,
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
skipped: [],
|
|
115
|
+
totalCleaned: 1,
|
|
116
|
+
totalSkipped: 0,
|
|
117
|
+
};
|
|
118
|
+
const result = createSuccessResult('cleanpr', data);
|
|
119
|
+
expect(result.data).toEqual(data);
|
|
120
|
+
});
|
|
121
|
+
it('works with wtstate result data', () => {
|
|
122
|
+
const data = {
|
|
123
|
+
scenario: 'main_clean_same',
|
|
124
|
+
scenarioDescription: 'On main, clean working tree',
|
|
125
|
+
currentBranch: 'main',
|
|
126
|
+
baseBranch: 'main',
|
|
127
|
+
worktreeType: 'main_worktree',
|
|
128
|
+
hasChanges: false,
|
|
129
|
+
hasStagedChanges: false,
|
|
130
|
+
hasUnstagedChanges: false,
|
|
131
|
+
localCommits: [],
|
|
132
|
+
stagedFiles: [],
|
|
133
|
+
unstagedFiles: [],
|
|
134
|
+
availableActions: [{ key: 'empty_commit', label: 'Create empty commit' }],
|
|
135
|
+
recommendedAction: 'empty_commit',
|
|
136
|
+
};
|
|
137
|
+
const result = createSuccessResult('wtstate', data);
|
|
138
|
+
expect(result.data).toEqual(data);
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
describe('createErrorResult', () => {
|
|
142
|
+
beforeEach(() => {
|
|
143
|
+
vi.useFakeTimers();
|
|
144
|
+
vi.setSystemTime(new Date('2024-01-15T10:30:00.000Z'));
|
|
145
|
+
});
|
|
146
|
+
afterEach(() => {
|
|
147
|
+
vi.useRealTimers();
|
|
148
|
+
});
|
|
149
|
+
it('creates an error result with required fields', () => {
|
|
150
|
+
const result = createErrorResult('newpr', ErrorCode.NOT_GIT_REPO, 'Not in a git repository');
|
|
151
|
+
expect(result.success).toBe(false);
|
|
152
|
+
expect(result.command).toBe('newpr');
|
|
153
|
+
expect(result.timestamp).toBe('2024-01-15T10:30:00.000Z');
|
|
154
|
+
expect(result.error).toEqual({
|
|
155
|
+
code: ErrorCode.NOT_GIT_REPO,
|
|
156
|
+
message: 'Not in a git repository',
|
|
157
|
+
});
|
|
158
|
+
expect(result.data).toBeUndefined();
|
|
159
|
+
});
|
|
160
|
+
it('creates an error result with details', () => {
|
|
161
|
+
const details = { branch: 'feat/test', file: 'README.md' };
|
|
162
|
+
const result = createErrorResult('cleanpr', ErrorCode.UNCOMMITTED_CHANGES, 'Uncommitted changes detected', details);
|
|
163
|
+
expect(result.error?.details).toEqual(details);
|
|
164
|
+
});
|
|
165
|
+
it('creates error for GitHub errors', () => {
|
|
166
|
+
const result = createErrorResult('newpr', ErrorCode.GH_NOT_AUTHENTICATED, 'GitHub CLI is not authenticated');
|
|
167
|
+
expect(result.error?.code).toBe(ErrorCode.GH_NOT_AUTHENTICATED);
|
|
168
|
+
});
|
|
169
|
+
it('creates error for user cancellation', () => {
|
|
170
|
+
const result = createErrorResult('newpr', ErrorCode.USER_CANCELLED, 'Operation cancelled');
|
|
171
|
+
expect(result.error?.code).toBe(ErrorCode.USER_CANCELLED);
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
describe('formatJsonResult', () => {
|
|
175
|
+
it('formats success result as pretty-printed JSON', () => {
|
|
176
|
+
const result = {
|
|
177
|
+
success: true,
|
|
178
|
+
command: 'test',
|
|
179
|
+
timestamp: '2024-01-15T10:30:00.000Z',
|
|
180
|
+
data: { value: 42 },
|
|
181
|
+
};
|
|
182
|
+
const json = formatJsonResult(result);
|
|
183
|
+
const parsed = JSON.parse(json);
|
|
184
|
+
expect(parsed.success).toBe(true);
|
|
185
|
+
expect(parsed.data.value).toBe(42);
|
|
186
|
+
});
|
|
187
|
+
it('formats error result as pretty-printed JSON', () => {
|
|
188
|
+
const result = {
|
|
189
|
+
success: false,
|
|
190
|
+
command: 'test',
|
|
191
|
+
timestamp: '2024-01-15T10:30:00.000Z',
|
|
192
|
+
error: {
|
|
193
|
+
code: ErrorCode.UNKNOWN_ERROR,
|
|
194
|
+
message: 'Something went wrong',
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
const json = formatJsonResult(result);
|
|
198
|
+
const parsed = JSON.parse(json);
|
|
199
|
+
expect(parsed.success).toBe(false);
|
|
200
|
+
expect(parsed.error.code).toBe('UNKNOWN_ERROR');
|
|
201
|
+
});
|
|
202
|
+
it('produces valid JSON string with indentation', () => {
|
|
203
|
+
const result = {
|
|
204
|
+
success: true,
|
|
205
|
+
command: 'test',
|
|
206
|
+
timestamp: '2024-01-15T10:30:00.000Z',
|
|
207
|
+
data: { test: 'value' },
|
|
208
|
+
};
|
|
209
|
+
const json = formatJsonResult(result);
|
|
210
|
+
// Should be indented (pretty-printed)
|
|
211
|
+
expect(json).toContain('\n');
|
|
212
|
+
expect(json).toContain(' ');
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
describe('getErrorCodeFromError', () => {
|
|
216
|
+
it('returns OPERATION_FAILED for GitCommandError', () => {
|
|
217
|
+
const error = new Error('Git command failed');
|
|
218
|
+
error.name = 'GitCommandError';
|
|
219
|
+
expect(getErrorCodeFromError(error)).toBe(ErrorCode.OPERATION_FAILED);
|
|
220
|
+
});
|
|
221
|
+
it('returns OPERATION_FAILED for GitHubCliError', () => {
|
|
222
|
+
const error = new Error('GitHub CLI error');
|
|
223
|
+
error.name = 'GitHubCliError';
|
|
224
|
+
expect(getErrorCodeFromError(error)).toBe(ErrorCode.OPERATION_FAILED);
|
|
225
|
+
});
|
|
226
|
+
it('returns INVALID_CONFIG for ConfigurationError', () => {
|
|
227
|
+
const error = new Error('Invalid config');
|
|
228
|
+
error.name = 'ConfigurationError';
|
|
229
|
+
expect(getErrorCodeFromError(error)).toBe(ErrorCode.INVALID_CONFIG);
|
|
230
|
+
});
|
|
231
|
+
it('returns OPERATION_FAILED for WorktreeError', () => {
|
|
232
|
+
const error = new Error('Worktree error');
|
|
233
|
+
error.name = 'WorktreeError';
|
|
234
|
+
expect(getErrorCodeFromError(error)).toBe(ErrorCode.OPERATION_FAILED);
|
|
235
|
+
});
|
|
236
|
+
it('returns INVALID_CONFIG for ManifestError', () => {
|
|
237
|
+
const error = new Error('Manifest error');
|
|
238
|
+
error.name = 'ManifestError';
|
|
239
|
+
expect(getErrorCodeFromError(error)).toBe(ErrorCode.INVALID_CONFIG);
|
|
240
|
+
});
|
|
241
|
+
it('returns USER_CANCELLED for UserCancelledError', () => {
|
|
242
|
+
const error = new Error('User cancelled');
|
|
243
|
+
error.name = 'UserCancelledError';
|
|
244
|
+
expect(getErrorCodeFromError(error)).toBe(ErrorCode.USER_CANCELLED);
|
|
245
|
+
});
|
|
246
|
+
it('returns UNKNOWN_ERROR for generic Error', () => {
|
|
247
|
+
const error = new Error('Generic error');
|
|
248
|
+
expect(getErrorCodeFromError(error)).toBe(ErrorCode.UNKNOWN_ERROR);
|
|
249
|
+
});
|
|
250
|
+
it('returns UNKNOWN_ERROR for non-Error values', () => {
|
|
251
|
+
expect(getErrorCodeFromError('string error')).toBe(ErrorCode.UNKNOWN_ERROR);
|
|
252
|
+
expect(getErrorCodeFromError(null)).toBe(ErrorCode.UNKNOWN_ERROR);
|
|
253
|
+
expect(getErrorCodeFromError(undefined)).toBe(ErrorCode.UNKNOWN_ERROR);
|
|
254
|
+
expect(getErrorCodeFromError(123)).toBe(ErrorCode.UNKNOWN_ERROR);
|
|
255
|
+
expect(getErrorCodeFromError({ message: 'object' })).toBe(ErrorCode.UNKNOWN_ERROR);
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
});
|
|
259
|
+
//# sourceMappingURL=json-output.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-output.test.js","sourceRoot":"","sources":["../../src/lib/json-output.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* lswt action-executors - execute actions on worktrees
|
|
3
|
+
*/
|
|
4
|
+
import type { WorktreeConfig } from '../config.js';
|
|
5
|
+
import type { WorktreeDisplay, WorktreeAction, ActionResult, EnvironmentInfo } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Dependencies for action executors (for testing)
|
|
8
|
+
*/
|
|
9
|
+
export interface ExecutorDeps {
|
|
10
|
+
execCommand: (cmd: string, options?: {
|
|
11
|
+
cwd?: string;
|
|
12
|
+
}) => void;
|
|
13
|
+
spawnDetached: (cmd: string, args: string[], options?: {
|
|
14
|
+
cwd?: string;
|
|
15
|
+
}) => void;
|
|
16
|
+
copyToClipboard: (text: string) => void;
|
|
17
|
+
openUrl: (url: string) => void;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Create default executor dependencies
|
|
21
|
+
*/
|
|
22
|
+
export declare function createDefaultExecutorDeps(): ExecutorDeps;
|
|
23
|
+
/**
|
|
24
|
+
* Execute an action on a worktree
|
|
25
|
+
*/
|
|
26
|
+
export declare function executeAction(action: WorktreeAction, worktree: WorktreeDisplay, env: EnvironmentInfo, config: WorktreeConfig, deps?: ExecutorDeps): Promise<ActionResult>;
|
|
27
|
+
/**
|
|
28
|
+
* Format branch name as PR title
|
|
29
|
+
* Exported for testing
|
|
30
|
+
*/
|
|
31
|
+
export declare function formatBranchAsTitle(branch: string): string;
|
|
32
|
+
//# sourceMappingURL=action-executors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-executors.d.ts","sourceRoot":"","sources":["../../../src/lib/lswt/action-executors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEjG;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/D,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACjF,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,YAAY,CA0CxD;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,eAAe,EACzB,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,cAAc,EACtB,IAAI,GAAE,YAA0C,GAC/C,OAAO,CAAC,YAAY,CAAC,CAgCvB;AAsTD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAiB1D"}
|