@sudocode-ai/local-server 0.1.7 → 0.1.8
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 +6 -0
- package/dist/errors/agent-errors.d.ts +43 -0
- package/dist/errors/agent-errors.d.ts.map +1 -0
- package/dist/errors/agent-errors.js +69 -0
- package/dist/errors/agent-errors.js.map +1 -0
- package/dist/execution/adapters/claude-adapter.d.ts +63 -0
- package/dist/execution/adapters/claude-adapter.d.ts.map +1 -0
- package/dist/execution/adapters/claude-adapter.js +82 -0
- package/dist/execution/adapters/claude-adapter.js.map +1 -0
- package/dist/execution/adapters/codex-adapter.d.ts +67 -0
- package/dist/execution/adapters/codex-adapter.d.ts.map +1 -0
- package/dist/execution/adapters/codex-adapter.js +183 -0
- package/dist/execution/adapters/codex-adapter.js.map +1 -0
- package/dist/execution/adapters/codex-config-builder.d.ts +30 -0
- package/dist/execution/adapters/codex-config-builder.d.ts.map +1 -0
- package/dist/execution/adapters/codex-config-builder.js +110 -0
- package/dist/execution/adapters/codex-config-builder.js.map +1 -0
- package/dist/execution/adapters/copilot-adapter.d.ts +94 -0
- package/dist/execution/adapters/copilot-adapter.d.ts.map +1 -0
- package/dist/execution/adapters/copilot-adapter.js +163 -0
- package/dist/execution/adapters/copilot-adapter.js.map +1 -0
- package/dist/execution/adapters/copilot-config-builder.d.ts +48 -0
- package/dist/execution/adapters/copilot-config-builder.d.ts.map +1 -0
- package/dist/execution/adapters/copilot-config-builder.js +125 -0
- package/dist/execution/adapters/copilot-config-builder.js.map +1 -0
- package/dist/execution/adapters/cursor-adapter.d.ts +66 -0
- package/dist/execution/adapters/cursor-adapter.d.ts.map +1 -0
- package/dist/execution/adapters/cursor-adapter.js +121 -0
- package/dist/execution/adapters/cursor-adapter.js.map +1 -0
- package/dist/execution/adapters/cursor-config-builder.d.ts +29 -0
- package/dist/execution/adapters/cursor-config-builder.d.ts.map +1 -0
- package/dist/execution/adapters/cursor-config-builder.js +49 -0
- package/dist/execution/adapters/cursor-config-builder.js.map +1 -0
- package/dist/execution/adapters/shared/config-presets.d.ts +102 -0
- package/dist/execution/adapters/shared/config-presets.d.ts.map +1 -0
- package/dist/execution/adapters/shared/config-presets.js +205 -0
- package/dist/execution/adapters/shared/config-presets.js.map +1 -0
- package/dist/execution/adapters/shared/config-utils.d.ts +95 -0
- package/dist/execution/adapters/shared/config-utils.d.ts.map +1 -0
- package/dist/execution/adapters/shared/config-utils.js +163 -0
- package/dist/execution/adapters/shared/config-utils.js.map +1 -0
- package/dist/execution/adapters/shared/index.d.ts +8 -0
- package/dist/execution/adapters/shared/index.d.ts.map +1 -0
- package/dist/execution/adapters/shared/index.js +8 -0
- package/dist/execution/adapters/shared/index.js.map +1 -0
- package/dist/execution/executors/agent-executor-wrapper.d.ts +153 -0
- package/dist/execution/executors/agent-executor-wrapper.d.ts.map +1 -0
- package/dist/execution/executors/agent-executor-wrapper.js +652 -0
- package/dist/execution/executors/agent-executor-wrapper.js.map +1 -0
- package/dist/execution/executors/executor-factory.d.ts +95 -0
- package/dist/execution/executors/executor-factory.d.ts.map +1 -0
- package/dist/execution/executors/executor-factory.js +120 -0
- package/dist/execution/executors/executor-factory.js.map +1 -0
- package/dist/execution/output/ag-ui-adapter.d.ts +0 -2
- package/dist/execution/output/ag-ui-adapter.d.ts.map +1 -1
- package/dist/execution/output/ag-ui-adapter.js +0 -2
- package/dist/execution/output/ag-ui-adapter.js.map +1 -1
- package/dist/execution/output/index.d.ts +0 -3
- package/dist/execution/output/index.d.ts.map +1 -1
- package/dist/execution/output/index.js +0 -2
- package/dist/execution/output/index.js.map +1 -1
- package/dist/execution/output/normalized-to-ag-ui-adapter.d.ts +108 -0
- package/dist/execution/output/normalized-to-ag-ui-adapter.d.ts.map +1 -0
- package/dist/execution/output/normalized-to-ag-ui-adapter.js +321 -0
- package/dist/execution/output/normalized-to-ag-ui-adapter.js.map +1 -0
- package/dist/execution/process/builders/claude.d.ts +24 -57
- package/dist/execution/process/builders/claude.d.ts.map +1 -1
- package/dist/execution/process/builders/claude.js +153 -19
- package/dist/execution/process/builders/claude.js.map +1 -1
- package/dist/execution/transport/ipc-transport-manager.d.ts +74 -0
- package/dist/execution/transport/ipc-transport-manager.d.ts.map +1 -0
- package/dist/execution/transport/ipc-transport-manager.js +104 -0
- package/dist/execution/transport/ipc-transport-manager.js.map +1 -0
- package/dist/execution/transport/transport-manager.d.ts.map +1 -1
- package/dist/execution/transport/transport-manager.js +3 -0
- package/dist/execution/transport/transport-manager.js.map +1 -1
- package/dist/execution/worktree/conflict-detector.d.ts +85 -0
- package/dist/execution/worktree/conflict-detector.d.ts.map +1 -0
- package/dist/execution/worktree/conflict-detector.js +129 -0
- package/dist/execution/worktree/conflict-detector.js.map +1 -0
- package/dist/execution/worktree/git-cli.d.ts +9 -0
- package/dist/execution/worktree/git-cli.d.ts.map +1 -1
- package/dist/execution/worktree/git-cli.js +10 -0
- package/dist/execution/worktree/git-cli.js.map +1 -1
- package/dist/execution/worktree/git-sync-cli.d.ts +187 -0
- package/dist/execution/worktree/git-sync-cli.d.ts.map +1 -0
- package/dist/execution/worktree/git-sync-cli.js +350 -0
- package/dist/execution/worktree/git-sync-cli.js.map +1 -0
- package/dist/execution/worktree/manager.d.ts +18 -0
- package/dist/execution/worktree/manager.d.ts.map +1 -1
- package/dist/execution/worktree/manager.js +9 -3
- package/dist/execution/worktree/manager.js.map +1 -1
- package/dist/index.d.ts +1 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +132 -211
- package/dist/index.js.map +1 -1
- package/dist/middleware/project-context.d.ts +37 -0
- package/dist/middleware/project-context.d.ts.map +1 -0
- package/dist/middleware/project-context.js +91 -0
- package/dist/middleware/project-context.js.map +1 -0
- package/dist/public/assets/index-Bb_W5bUr.css +1 -0
- package/dist/public/assets/index-CFKL113G.js +710 -0
- package/dist/public/assets/index-CFKL113G.js.map +1 -0
- package/dist/public/assets/{react-vendor-ByUx1V_q.js → react-vendor-DiL5hC7l.js} +2 -2
- package/dist/public/assets/{react-vendor-ByUx1V_q.js.map → react-vendor-DiL5hC7l.js.map} +1 -1
- package/dist/public/assets/ui-vendor-B4WMPEfa.js +54 -0
- package/dist/public/assets/ui-vendor-B4WMPEfa.js.map +1 -0
- package/dist/public/index.html +4 -4
- package/dist/routes/agents.d.ts +3 -0
- package/dist/routes/agents.d.ts.map +1 -0
- package/dist/routes/agents.js +62 -0
- package/dist/routes/agents.js.map +1 -0
- package/dist/routes/config.d.ts +3 -0
- package/dist/routes/config.d.ts.map +1 -0
- package/dist/routes/config.js +25 -0
- package/dist/routes/config.js.map +1 -0
- package/dist/routes/editors.d.ts +15 -0
- package/dist/routes/editors.d.ts.map +1 -0
- package/dist/routes/editors.js +98 -0
- package/dist/routes/editors.js.map +1 -0
- package/dist/routes/executions-stream.d.ts +8 -5
- package/dist/routes/executions-stream.d.ts.map +1 -1
- package/dist/routes/executions-stream.js +10 -6
- package/dist/routes/executions-stream.js.map +1 -1
- package/dist/routes/executions.d.ts +6 -10
- package/dist/routes/executions.d.ts.map +1 -1
- package/dist/routes/executions.js +506 -54
- package/dist/routes/executions.js.map +1 -1
- package/dist/routes/feedback.d.ts +3 -2
- package/dist/routes/feedback.d.ts.map +1 -1
- package/dist/routes/feedback.js +12 -10
- package/dist/routes/feedback.js.map +1 -1
- package/dist/routes/files.d.ts +18 -0
- package/dist/routes/files.d.ts.map +1 -0
- package/dist/routes/files.js +89 -0
- package/dist/routes/files.js.map +1 -0
- package/dist/routes/issues.d.ts +3 -2
- package/dist/routes/issues.d.ts.map +1 -1
- package/dist/routes/issues.js +19 -18
- package/dist/routes/issues.js.map +1 -1
- package/dist/routes/projects.d.ts +11 -0
- package/dist/routes/projects.d.ts.map +1 -0
- package/dist/routes/projects.js +447 -0
- package/dist/routes/projects.js.map +1 -0
- package/dist/routes/relationships.d.ts +3 -2
- package/dist/routes/relationships.d.ts.map +1 -1
- package/dist/routes/relationships.js +12 -10
- package/dist/routes/relationships.js.map +1 -1
- package/dist/routes/repo-info.d.ts +3 -0
- package/dist/routes/repo-info.d.ts.map +1 -0
- package/dist/routes/repo-info.js +126 -0
- package/dist/routes/repo-info.js.map +1 -0
- package/dist/routes/specs.d.ts +3 -2
- package/dist/routes/specs.d.ts.map +1 -1
- package/dist/routes/specs.js +19 -18
- package/dist/routes/specs.js.map +1 -1
- package/dist/services/agent-registry.d.ts +140 -0
- package/dist/services/agent-registry.d.ts.map +1 -0
- package/dist/services/agent-registry.js +272 -0
- package/dist/services/agent-registry.js.map +1 -0
- package/dist/services/editor-service.d.ts +57 -0
- package/dist/services/editor-service.d.ts.map +1 -0
- package/dist/services/editor-service.js +204 -0
- package/dist/services/editor-service.js.map +1 -0
- package/dist/services/execution-changes-service.d.ts +92 -0
- package/dist/services/execution-changes-service.d.ts.map +1 -0
- package/dist/services/execution-changes-service.js +546 -0
- package/dist/services/execution-changes-service.js.map +1 -0
- package/dist/services/execution-lifecycle.d.ts +1 -0
- package/dist/services/execution-lifecycle.d.ts.map +1 -1
- package/dist/services/execution-lifecycle.js +37 -7
- package/dist/services/execution-lifecycle.js.map +1 -1
- package/dist/services/execution-logs-store.d.ts +75 -0
- package/dist/services/execution-logs-store.d.ts.map +1 -1
- package/dist/services/execution-logs-store.js +142 -2
- package/dist/services/execution-logs-store.js.map +1 -1
- package/dist/services/execution-service.d.ts +50 -58
- package/dist/services/execution-service.d.ts.map +1 -1
- package/dist/services/execution-service.js +433 -469
- package/dist/services/execution-service.js.map +1 -1
- package/dist/services/execution-worker-pool.d.ts +116 -0
- package/dist/services/execution-worker-pool.d.ts.map +1 -0
- package/dist/services/execution-worker-pool.js +326 -0
- package/dist/services/execution-worker-pool.js.map +1 -0
- package/dist/services/executions.d.ts +3 -0
- package/dist/services/executions.d.ts.map +1 -1
- package/dist/services/executions.js +11 -17
- package/dist/services/executions.js.map +1 -1
- package/dist/services/export.d.ts +8 -2
- package/dist/services/export.d.ts.map +1 -1
- package/dist/services/export.js +29 -23
- package/dist/services/export.js.map +1 -1
- package/dist/services/file-search/git-ls-files-strategy.d.ts +72 -0
- package/dist/services/file-search/git-ls-files-strategy.d.ts.map +1 -0
- package/dist/services/file-search/git-ls-files-strategy.js +176 -0
- package/dist/services/file-search/git-ls-files-strategy.js.map +1 -0
- package/dist/services/file-search/index.d.ts +9 -0
- package/dist/services/file-search/index.d.ts.map +1 -0
- package/dist/services/file-search/index.js +10 -0
- package/dist/services/file-search/index.js.map +1 -0
- package/dist/services/file-search/registry.d.ts +97 -0
- package/dist/services/file-search/registry.d.ts.map +1 -0
- package/dist/services/file-search/registry.js +140 -0
- package/dist/services/file-search/registry.js.map +1 -0
- package/dist/services/file-search/strategy.d.ts +58 -0
- package/dist/services/file-search/strategy.d.ts.map +1 -0
- package/dist/services/file-search/strategy.js +8 -0
- package/dist/services/file-search/strategy.js.map +1 -0
- package/dist/services/project-context.d.ts +69 -0
- package/dist/services/project-context.d.ts.map +1 -0
- package/dist/services/project-context.js +113 -0
- package/dist/services/project-context.js.map +1 -0
- package/dist/services/project-manager.d.ts +95 -0
- package/dist/services/project-manager.d.ts.map +1 -0
- package/dist/services/project-manager.js +388 -0
- package/dist/services/project-manager.js.map +1 -0
- package/dist/services/project-registry.d.ts +98 -0
- package/dist/services/project-registry.d.ts.map +1 -0
- package/dist/services/project-registry.js +289 -0
- package/dist/services/project-registry.js.map +1 -0
- package/dist/services/prompt-resolver.d.ts +97 -0
- package/dist/services/prompt-resolver.d.ts.map +1 -0
- package/dist/services/prompt-resolver.js +377 -0
- package/dist/services/prompt-resolver.js.map +1 -0
- package/dist/services/repo-info.d.ts +12 -0
- package/dist/services/repo-info.d.ts.map +1 -1
- package/dist/services/repo-info.js +46 -0
- package/dist/services/repo-info.js.map +1 -1
- package/dist/services/watcher.d.ts +3 -4
- package/dist/services/watcher.d.ts.map +1 -1
- package/dist/services/watcher.js +18 -35
- package/dist/services/watcher.js.map +1 -1
- package/dist/services/websocket.d.ts +30 -16
- package/dist/services/websocket.d.ts.map +1 -1
- package/dist/services/websocket.js +102 -37
- package/dist/services/websocket.js.map +1 -1
- package/dist/services/worktree-sync-service.d.ts +228 -0
- package/dist/services/worktree-sync-service.d.ts.map +1 -0
- package/dist/services/worktree-sync-service.js +563 -0
- package/dist/services/worktree-sync-service.js.map +1 -0
- package/dist/types/editor.d.ts +49 -0
- package/dist/types/editor.d.ts.map +1 -0
- package/dist/types/editor.js +50 -0
- package/dist/types/editor.js.map +1 -0
- package/dist/types/project.d.ts +58 -0
- package/dist/types/project.d.ts.map +1 -0
- package/dist/types/project.js +10 -0
- package/dist/types/project.js.map +1 -0
- package/dist/utils/executable-check.d.ts +36 -0
- package/dist/utils/executable-check.d.ts.map +1 -0
- package/dist/utils/executable-check.js +79 -0
- package/dist/utils/executable-check.js.map +1 -0
- package/dist/workers/execution-worker.d.ts +18 -0
- package/dist/workers/execution-worker.d.ts.map +1 -0
- package/dist/workers/execution-worker.js +340 -0
- package/dist/workers/execution-worker.js.map +1 -0
- package/dist/workers/worker-ipc.d.ts +84 -0
- package/dist/workers/worker-ipc.d.ts.map +1 -0
- package/dist/workers/worker-ipc.js +29 -0
- package/dist/workers/worker-ipc.js.map +1 -0
- package/package.json +6 -5
- package/dist/execution/output/ag-ui-integration.d.ts +0 -96
- package/dist/execution/output/ag-ui-integration.d.ts.map +0 -1
- package/dist/execution/output/ag-ui-integration.js +0 -96
- package/dist/execution/output/ag-ui-integration.js.map +0 -1
- package/dist/execution/output/claude-code-output-processor.d.ts +0 -321
- package/dist/execution/output/claude-code-output-processor.d.ts.map +0 -1
- package/dist/execution/output/claude-code-output-processor.js +0 -769
- package/dist/execution/output/claude-code-output-processor.js.map +0 -1
- package/dist/public/assets/index-B3SEMufD.js +0 -580
- package/dist/public/assets/index-B3SEMufD.js.map +0 -1
- package/dist/public/assets/index-D2YGL3gX.css +0 -1
- package/dist/public/assets/ui-vendor-CotR6bx9.js +0 -54
- package/dist/public/assets/ui-vendor-CotR6bx9.js.map +0 -1
|
@@ -0,0 +1,563 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worktree Sync Service
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates worktree sync operations including conflict detection,
|
|
5
|
+
* JSONL resolution, git operations, and database updates.
|
|
6
|
+
*
|
|
7
|
+
* @module services/worktree-sync-service
|
|
8
|
+
*/
|
|
9
|
+
import * as fs from "fs";
|
|
10
|
+
import * as path from "path";
|
|
11
|
+
import { execSync } from "child_process";
|
|
12
|
+
import { GitSyncCli } from "../execution/worktree/git-sync-cli.js";
|
|
13
|
+
import { ConflictDetector } from "../execution/worktree/conflict-detector.js";
|
|
14
|
+
import { mergeThreeWay } from "@sudocode-ai/cli/dist/merge-resolver.js";
|
|
15
|
+
import { writeJSONL } from "@sudocode-ai/cli/dist/jsonl.js";
|
|
16
|
+
/**
|
|
17
|
+
* Worktree sync error codes
|
|
18
|
+
*/
|
|
19
|
+
export var WorktreeSyncErrorCode;
|
|
20
|
+
(function (WorktreeSyncErrorCode) {
|
|
21
|
+
WorktreeSyncErrorCode["NO_WORKTREE"] = "NO_WORKTREE";
|
|
22
|
+
WorktreeSyncErrorCode["WORKTREE_MISSING"] = "WORKTREE_MISSING";
|
|
23
|
+
WorktreeSyncErrorCode["BRANCH_MISSING"] = "BRANCH_MISSING";
|
|
24
|
+
WorktreeSyncErrorCode["DIRTY_WORKING_TREE"] = "DIRTY_WORKING_TREE";
|
|
25
|
+
WorktreeSyncErrorCode["TARGET_BRANCH_MISSING"] = "TARGET_BRANCH_MISSING";
|
|
26
|
+
WorktreeSyncErrorCode["NO_COMMON_BASE"] = "NO_COMMON_BASE";
|
|
27
|
+
WorktreeSyncErrorCode["CODE_CONFLICTS"] = "CODE_CONFLICTS";
|
|
28
|
+
WorktreeSyncErrorCode["MERGE_FAILED"] = "MERGE_FAILED";
|
|
29
|
+
WorktreeSyncErrorCode["JSONL_RESOLUTION_FAILED"] = "JSONL_RESOLUTION_FAILED";
|
|
30
|
+
WorktreeSyncErrorCode["DATABASE_SYNC_FAILED"] = "DATABASE_SYNC_FAILED";
|
|
31
|
+
WorktreeSyncErrorCode["EXECUTION_NOT_FOUND"] = "EXECUTION_NOT_FOUND";
|
|
32
|
+
})(WorktreeSyncErrorCode || (WorktreeSyncErrorCode = {}));
|
|
33
|
+
/**
|
|
34
|
+
* Worktree sync error class
|
|
35
|
+
*/
|
|
36
|
+
export class WorktreeSyncError extends Error {
|
|
37
|
+
code;
|
|
38
|
+
cause;
|
|
39
|
+
constructor(message, code, cause) {
|
|
40
|
+
super(message);
|
|
41
|
+
this.code = code;
|
|
42
|
+
this.cause = cause;
|
|
43
|
+
this.name = "WorktreeSyncError";
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* WorktreeSyncService
|
|
48
|
+
*
|
|
49
|
+
* Main service class for orchestrating worktree sync operations
|
|
50
|
+
*/
|
|
51
|
+
export class WorktreeSyncService {
|
|
52
|
+
db;
|
|
53
|
+
repoPath;
|
|
54
|
+
gitSync;
|
|
55
|
+
conflictDetector;
|
|
56
|
+
constructor(db, repoPath) {
|
|
57
|
+
this.db = db;
|
|
58
|
+
this.repoPath = repoPath;
|
|
59
|
+
this.gitSync = new GitSyncCli(repoPath);
|
|
60
|
+
this.conflictDetector = new ConflictDetector(repoPath);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Preview sync without making changes
|
|
64
|
+
*
|
|
65
|
+
* @param executionId - Execution ID to preview sync for
|
|
66
|
+
* @returns Preview result with conflicts, diff, and warnings
|
|
67
|
+
*/
|
|
68
|
+
async previewSync(executionId) {
|
|
69
|
+
// 1. Load execution and validate
|
|
70
|
+
const execution = await this._loadAndValidateExecution(executionId);
|
|
71
|
+
// 2. Validate preconditions
|
|
72
|
+
try {
|
|
73
|
+
await this._validateSyncPreconditions(execution);
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
// Return preview with error details
|
|
77
|
+
return {
|
|
78
|
+
canSync: false,
|
|
79
|
+
conflicts: {
|
|
80
|
+
hasConflicts: false,
|
|
81
|
+
codeConflicts: [],
|
|
82
|
+
jsonlConflicts: [],
|
|
83
|
+
totalFiles: 0,
|
|
84
|
+
summary: "",
|
|
85
|
+
},
|
|
86
|
+
diff: { files: [], additions: 0, deletions: 0 },
|
|
87
|
+
commits: [],
|
|
88
|
+
mergeBase: "",
|
|
89
|
+
uncommittedJSONLChanges: [],
|
|
90
|
+
executionStatus: execution.status,
|
|
91
|
+
warnings: [error.message],
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
// 3. Find merge base
|
|
95
|
+
const mergeBase = this.gitSync.getMergeBase(execution.branch_name, execution.target_branch);
|
|
96
|
+
// 4. Get commit list
|
|
97
|
+
const commits = this.gitSync.getCommitList(mergeBase, execution.branch_name);
|
|
98
|
+
// 5. Get diff summary
|
|
99
|
+
const diff = this.gitSync.getDiff(mergeBase, execution.branch_name);
|
|
100
|
+
// 6. Detect conflicts
|
|
101
|
+
const conflicts = this.conflictDetector.detectConflicts(execution.branch_name, execution.target_branch);
|
|
102
|
+
// 7. Check for uncommitted JSONL changes
|
|
103
|
+
const uncommittedJSONL = this._getUncommittedJSONLFiles(execution.worktree_path);
|
|
104
|
+
// 8. Generate warnings
|
|
105
|
+
const warnings = [];
|
|
106
|
+
// Warn if execution is running/paused
|
|
107
|
+
if (execution.status === "running" ||
|
|
108
|
+
execution.status === "paused") {
|
|
109
|
+
warnings.push("Execution is currently active. Synced state may not reflect final execution result.");
|
|
110
|
+
}
|
|
111
|
+
// Warn about code conflicts
|
|
112
|
+
if (conflicts.codeConflicts.length > 0) {
|
|
113
|
+
warnings.push(`${conflicts.codeConflicts.length} code conflict(s) detected. Manual resolution required.`);
|
|
114
|
+
}
|
|
115
|
+
// Warn about uncommitted JSONL
|
|
116
|
+
if (uncommittedJSONL.length > 0) {
|
|
117
|
+
warnings.push(`${uncommittedJSONL.length} uncommitted JSONL file(s) will be included in sync.`);
|
|
118
|
+
}
|
|
119
|
+
// 9. Determine if sync can proceed
|
|
120
|
+
const canSync = conflicts.codeConflicts.length === 0;
|
|
121
|
+
return {
|
|
122
|
+
canSync,
|
|
123
|
+
conflicts,
|
|
124
|
+
diff,
|
|
125
|
+
commits,
|
|
126
|
+
mergeBase,
|
|
127
|
+
uncommittedJSONLChanges: uncommittedJSONL,
|
|
128
|
+
executionStatus: execution.status,
|
|
129
|
+
warnings,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Load execution from database and validate it exists
|
|
134
|
+
*
|
|
135
|
+
* Used by previewSync() and will be used in i-9gz4 (squash sync)
|
|
136
|
+
*
|
|
137
|
+
* @param executionId - Execution ID to load
|
|
138
|
+
* @returns Execution record
|
|
139
|
+
* @throws WorktreeSyncError if execution not found
|
|
140
|
+
*/
|
|
141
|
+
async _loadAndValidateExecution(executionId) {
|
|
142
|
+
const stmt = this.db.prepare("SELECT * FROM executions WHERE id = ?");
|
|
143
|
+
const execution = stmt.get(executionId);
|
|
144
|
+
if (!execution) {
|
|
145
|
+
throw new WorktreeSyncError(`Execution ${executionId} not found`, WorktreeSyncErrorCode.EXECUTION_NOT_FOUND);
|
|
146
|
+
}
|
|
147
|
+
return execution;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Validate preconditions for sync
|
|
151
|
+
*
|
|
152
|
+
* Used by previewSync() and will be used in i-9gz4 (squash sync)
|
|
153
|
+
*
|
|
154
|
+
* Checks:
|
|
155
|
+
* - Worktree exists
|
|
156
|
+
* - Worktree branch exists
|
|
157
|
+
* - Local working tree is clean
|
|
158
|
+
* - Target branch exists
|
|
159
|
+
* - Branches have common base
|
|
160
|
+
*
|
|
161
|
+
* @param execution - Execution to validate
|
|
162
|
+
* @throws WorktreeSyncError if any precondition fails
|
|
163
|
+
*/
|
|
164
|
+
async _validateSyncPreconditions(execution) {
|
|
165
|
+
// 1. Check worktree path exists
|
|
166
|
+
if (!execution.worktree_path) {
|
|
167
|
+
throw new WorktreeSyncError("No worktree path for execution", WorktreeSyncErrorCode.NO_WORKTREE);
|
|
168
|
+
}
|
|
169
|
+
// 2. Check worktree still exists on filesystem
|
|
170
|
+
if (!fs.existsSync(execution.worktree_path)) {
|
|
171
|
+
throw new WorktreeSyncError("Worktree no longer exists", WorktreeSyncErrorCode.WORKTREE_MISSING);
|
|
172
|
+
}
|
|
173
|
+
// 3. Get list of branches
|
|
174
|
+
const branches = this._getBranches();
|
|
175
|
+
// 4. Check worktree branch exists
|
|
176
|
+
if (!branches.includes(execution.branch_name)) {
|
|
177
|
+
throw new WorktreeSyncError(`Worktree branch '${execution.branch_name}' not found`, WorktreeSyncErrorCode.BRANCH_MISSING);
|
|
178
|
+
}
|
|
179
|
+
// 5. Check target branch exists
|
|
180
|
+
if (!branches.includes(execution.target_branch)) {
|
|
181
|
+
throw new WorktreeSyncError(`Target branch '${execution.target_branch}' not found`, WorktreeSyncErrorCode.TARGET_BRANCH_MISSING);
|
|
182
|
+
}
|
|
183
|
+
// 6. Check local working tree is clean
|
|
184
|
+
if (!this.gitSync.isWorkingTreeClean()) {
|
|
185
|
+
throw new WorktreeSyncError("Local working tree has uncommitted changes. Stash or commit them first.", WorktreeSyncErrorCode.DIRTY_WORKING_TREE);
|
|
186
|
+
}
|
|
187
|
+
// 7. Verify branches have common base
|
|
188
|
+
try {
|
|
189
|
+
this.gitSync.getMergeBase(execution.branch_name, execution.target_branch);
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
throw new WorktreeSyncError("Worktree and target branch have diverged without common history", WorktreeSyncErrorCode.NO_COMMON_BASE, error);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Create safety snapshot before sync
|
|
197
|
+
*
|
|
198
|
+
* Creates a git tag pointing to current target branch HEAD
|
|
199
|
+
* for rollback capability
|
|
200
|
+
*
|
|
201
|
+
* @param executionId - Execution ID
|
|
202
|
+
* @param targetBranch - Target branch name
|
|
203
|
+
* @returns Tag name created
|
|
204
|
+
*/
|
|
205
|
+
async _createSafetySnapshot(executionId, targetBranch) {
|
|
206
|
+
const tagName = `sudocode-sync-before-${executionId}`;
|
|
207
|
+
// Get current commit of target branch
|
|
208
|
+
const currentCommit = this._getCurrentCommit(targetBranch);
|
|
209
|
+
// Create annotated tag
|
|
210
|
+
this.gitSync.createSafetyTag(tagName, currentCommit);
|
|
211
|
+
return tagName;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Get uncommitted JSONL files from worktree
|
|
215
|
+
*
|
|
216
|
+
* Used by previewSync() and will be used in i-3wmx (JSONL conflict resolution)
|
|
217
|
+
*
|
|
218
|
+
* @param worktreePath - Path to worktree
|
|
219
|
+
* @returns Array of uncommitted JSONL file paths
|
|
220
|
+
*/
|
|
221
|
+
_getUncommittedJSONLFiles(worktreePath) {
|
|
222
|
+
const gitSyncWorktree = new GitSyncCli(worktreePath);
|
|
223
|
+
// Get all uncommitted files
|
|
224
|
+
const uncommitted = gitSyncWorktree.getUncommittedFiles();
|
|
225
|
+
// Filter for JSONL files in .sudocode/
|
|
226
|
+
return uncommitted.filter((file) => file.endsWith(".jsonl") &&
|
|
227
|
+
(file.includes(".sudocode/") || file.startsWith(".sudocode/")));
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Check if local working tree is clean
|
|
231
|
+
*
|
|
232
|
+
* TODO: Will be used in i-7ya6 (sync preview)
|
|
233
|
+
*
|
|
234
|
+
* @returns true if clean, false if dirty
|
|
235
|
+
*/
|
|
236
|
+
// @ts-expect-error - Foundation method, will be used in i-7ya6
|
|
237
|
+
_isLocalTreeClean() {
|
|
238
|
+
return this.gitSync.isWorkingTreeClean();
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Get list of branches in repository
|
|
242
|
+
*
|
|
243
|
+
* @returns Array of branch names
|
|
244
|
+
*/
|
|
245
|
+
_getBranches() {
|
|
246
|
+
try {
|
|
247
|
+
const output = execSync("git branch --format='%(refname:short)'", {
|
|
248
|
+
cwd: this.repoPath,
|
|
249
|
+
encoding: "utf8",
|
|
250
|
+
stdio: "pipe",
|
|
251
|
+
shell: "/bin/bash",
|
|
252
|
+
});
|
|
253
|
+
return output
|
|
254
|
+
.split("\n")
|
|
255
|
+
.map((line) => line.trim())
|
|
256
|
+
.filter((line) => line.length > 0);
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
throw new WorktreeSyncError(`Failed to get branch list: ${error.message}`, WorktreeSyncErrorCode.BRANCH_MISSING, error);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Get current commit SHA for a branch
|
|
264
|
+
*
|
|
265
|
+
* @param branchName - Branch name
|
|
266
|
+
* @returns Commit SHA
|
|
267
|
+
*/
|
|
268
|
+
_getCurrentCommit(branchName) {
|
|
269
|
+
try {
|
|
270
|
+
const output = execSync(`git rev-parse ${this._escapeShellArg(branchName)}`, {
|
|
271
|
+
cwd: this.repoPath,
|
|
272
|
+
encoding: "utf8",
|
|
273
|
+
stdio: "pipe",
|
|
274
|
+
});
|
|
275
|
+
return output.trim();
|
|
276
|
+
}
|
|
277
|
+
catch (error) {
|
|
278
|
+
throw new WorktreeSyncError(`Failed to get commit for branch ${branchName}: ${error.message}`, WorktreeSyncErrorCode.BRANCH_MISSING, error);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Escape shell argument for safe command execution
|
|
283
|
+
*
|
|
284
|
+
* @param arg - Argument to escape
|
|
285
|
+
* @returns Escaped argument
|
|
286
|
+
*/
|
|
287
|
+
_escapeShellArg(arg) {
|
|
288
|
+
// Escape single quotes and wrap in single quotes
|
|
289
|
+
return `'${arg.replace(/'/g, "'\\''")}'`;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Resolve JSONL conflicts using three-way merge
|
|
293
|
+
*
|
|
294
|
+
* Used in squash sync to auto-resolve JSONL conflicts
|
|
295
|
+
*
|
|
296
|
+
* @param execution - Execution record
|
|
297
|
+
* @param jsonlConflicts - List of JSONL conflicts to resolve
|
|
298
|
+
* @throws WorktreeSyncError if resolution fails
|
|
299
|
+
*/
|
|
300
|
+
async resolveJSONLConflicts(execution, jsonlConflicts) {
|
|
301
|
+
if (jsonlConflicts.length === 0) {
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
const mergeBase = this.gitSync.getMergeBase(execution.branch_name, execution.target_branch);
|
|
305
|
+
for (const conflict of jsonlConflicts) {
|
|
306
|
+
try {
|
|
307
|
+
// Read three versions of the file
|
|
308
|
+
const baseVersion = await this._readJSONLVersion(conflict.filePath, mergeBase);
|
|
309
|
+
const ourVersion = await this._readJSONLVersion(conflict.filePath, execution.target_branch);
|
|
310
|
+
const theirVersion = await this._readJSONLVersion(conflict.filePath, execution.branch_name);
|
|
311
|
+
// Perform three-way merge
|
|
312
|
+
const { entities: merged } = mergeThreeWay(baseVersion, ourVersion, theirVersion);
|
|
313
|
+
// Write resolved version to local repo
|
|
314
|
+
const resolvedPath = path.join(this.repoPath, conflict.filePath);
|
|
315
|
+
await writeJSONL(resolvedPath, merged);
|
|
316
|
+
// Stage the resolved file
|
|
317
|
+
execSync(`git add ${this._escapeShellArg(conflict.filePath)}`, {
|
|
318
|
+
cwd: this.repoPath,
|
|
319
|
+
stdio: "pipe",
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
catch (error) {
|
|
323
|
+
throw new WorktreeSyncError(`Failed to resolve JSONL conflict in ${conflict.filePath}: ${error.message}`, WorktreeSyncErrorCode.JSONL_RESOLUTION_FAILED, error);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Read JSONL file at a specific git revision
|
|
329
|
+
*
|
|
330
|
+
* @param filePath - Relative path to JSONL file
|
|
331
|
+
* @param revision - Git revision (commit SHA or branch name)
|
|
332
|
+
* @returns Array of JSONL entities
|
|
333
|
+
*/
|
|
334
|
+
async _readJSONLVersion(filePath, revision) {
|
|
335
|
+
try {
|
|
336
|
+
// Get file content at revision using git show
|
|
337
|
+
const content = execSync(`git show ${this._escapeShellArg(revision)}:${this._escapeShellArg(filePath)}`, {
|
|
338
|
+
cwd: this.repoPath,
|
|
339
|
+
encoding: "utf8",
|
|
340
|
+
stdio: "pipe",
|
|
341
|
+
});
|
|
342
|
+
// Parse JSONL content
|
|
343
|
+
const lines = content.split("\n").filter((line) => line.trim().length > 0);
|
|
344
|
+
return lines.map((line) => JSON.parse(line));
|
|
345
|
+
}
|
|
346
|
+
catch (error) {
|
|
347
|
+
// File might not exist at this revision (new file)
|
|
348
|
+
if (error.status === 128) {
|
|
349
|
+
return [];
|
|
350
|
+
}
|
|
351
|
+
throw error;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Commit uncommitted JSONL files in worktree
|
|
356
|
+
*
|
|
357
|
+
* Used during sync to include uncommitted JSONL changes
|
|
358
|
+
*
|
|
359
|
+
* @param worktreePath - Path to worktree
|
|
360
|
+
* @param uncommittedFiles - List of uncommitted JSONL file paths
|
|
361
|
+
* @throws WorktreeSyncError if commit fails
|
|
362
|
+
*/
|
|
363
|
+
async commitUncommittedJSONL(worktreePath, uncommittedFiles) {
|
|
364
|
+
if (uncommittedFiles.length === 0) {
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
try {
|
|
368
|
+
// Stage all uncommitted JSONL files
|
|
369
|
+
for (const file of uncommittedFiles) {
|
|
370
|
+
execSync(`git add ${this._escapeShellArg(file)}`, {
|
|
371
|
+
cwd: worktreePath,
|
|
372
|
+
stdio: "pipe",
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
// Create commit with descriptive message
|
|
376
|
+
const fileList = uncommittedFiles.join(", ");
|
|
377
|
+
const message = `Auto-commit uncommitted JSONL changes before sync\n\nFiles: ${fileList}`;
|
|
378
|
+
execSync(`git commit -m ${this._escapeShellArg(message)}`, {
|
|
379
|
+
cwd: worktreePath,
|
|
380
|
+
stdio: "pipe",
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
catch (error) {
|
|
384
|
+
throw new WorktreeSyncError(`Failed to commit uncommitted JSONL files: ${error.message}`, WorktreeSyncErrorCode.DATABASE_SYNC_FAILED, error);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Perform git merge --squash operation
|
|
389
|
+
*
|
|
390
|
+
* @param sourceBranch - Branch to merge from (worktree branch)
|
|
391
|
+
* @param targetBranch - Branch to merge into
|
|
392
|
+
* @returns Object with filesChanged count
|
|
393
|
+
* @throws WorktreeSyncError if merge fails
|
|
394
|
+
*/
|
|
395
|
+
_performSquashMerge(sourceBranch, targetBranch) {
|
|
396
|
+
try {
|
|
397
|
+
// Checkout target branch
|
|
398
|
+
execSync(`git checkout ${this._escapeShellArg(targetBranch)}`, {
|
|
399
|
+
cwd: this.repoPath,
|
|
400
|
+
stdio: "pipe",
|
|
401
|
+
});
|
|
402
|
+
// Perform squash merge
|
|
403
|
+
execSync(`git merge --squash ${this._escapeShellArg(sourceBranch)}`, {
|
|
404
|
+
cwd: this.repoPath,
|
|
405
|
+
stdio: "pipe",
|
|
406
|
+
});
|
|
407
|
+
// Count staged files
|
|
408
|
+
const statusOutput = execSync("git diff --cached --name-only", {
|
|
409
|
+
cwd: this.repoPath,
|
|
410
|
+
encoding: "utf8",
|
|
411
|
+
stdio: "pipe",
|
|
412
|
+
});
|
|
413
|
+
const filesChanged = statusOutput
|
|
414
|
+
.split("\n")
|
|
415
|
+
.filter((line) => line.trim().length > 0).length;
|
|
416
|
+
return { filesChanged };
|
|
417
|
+
}
|
|
418
|
+
catch (error) {
|
|
419
|
+
throw new WorktreeSyncError(`Failed to perform squash merge: ${error.message}`, WorktreeSyncErrorCode.MERGE_FAILED, error);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
/**
|
|
423
|
+
* Generate commit message for squash sync
|
|
424
|
+
*
|
|
425
|
+
* @param execution - Execution record
|
|
426
|
+
* @param commitCount - Number of commits being squashed
|
|
427
|
+
* @returns Generated commit message
|
|
428
|
+
*/
|
|
429
|
+
_generateCommitMessage(execution, commitCount) {
|
|
430
|
+
const issueId = execution.issue_id || "unknown";
|
|
431
|
+
const branchName = execution.branch_name;
|
|
432
|
+
return `Squash merge from ${branchName} (${commitCount} commit${commitCount !== 1 ? "s" : ""})
|
|
433
|
+
|
|
434
|
+
Issue: ${issueId}
|
|
435
|
+
Execution: ${execution.id}
|
|
436
|
+
|
|
437
|
+
Synced changes from worktree execution.`;
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Create commit with staged changes
|
|
441
|
+
*
|
|
442
|
+
* @param message - Commit message
|
|
443
|
+
* @returns Commit SHA
|
|
444
|
+
* @throws WorktreeSyncError if commit fails
|
|
445
|
+
*/
|
|
446
|
+
_createCommit(message) {
|
|
447
|
+
try {
|
|
448
|
+
execSync(`git commit -m ${this._escapeShellArg(message)}`, {
|
|
449
|
+
cwd: this.repoPath,
|
|
450
|
+
stdio: "pipe",
|
|
451
|
+
});
|
|
452
|
+
// Get the commit SHA
|
|
453
|
+
const sha = execSync("git rev-parse HEAD", {
|
|
454
|
+
cwd: this.repoPath,
|
|
455
|
+
encoding: "utf8",
|
|
456
|
+
stdio: "pipe",
|
|
457
|
+
}).trim();
|
|
458
|
+
return sha;
|
|
459
|
+
}
|
|
460
|
+
catch (error) {
|
|
461
|
+
throw new WorktreeSyncError(`Failed to create commit: ${error.message}`, WorktreeSyncErrorCode.MERGE_FAILED, error);
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Rollback to safety snapshot
|
|
466
|
+
*
|
|
467
|
+
* @param targetBranch - Target branch to reset
|
|
468
|
+
* @param tagName - Safety tag to rollback to
|
|
469
|
+
* @throws WorktreeSyncError if rollback fails
|
|
470
|
+
*/
|
|
471
|
+
async _rollbackToSnapshot(targetBranch, tagName) {
|
|
472
|
+
try {
|
|
473
|
+
// Checkout target branch
|
|
474
|
+
execSync(`git checkout ${this._escapeShellArg(targetBranch)}`, {
|
|
475
|
+
cwd: this.repoPath,
|
|
476
|
+
stdio: "pipe",
|
|
477
|
+
});
|
|
478
|
+
// Reset to tag
|
|
479
|
+
execSync(`git reset --hard ${this._escapeShellArg(tagName)}`, {
|
|
480
|
+
cwd: this.repoPath,
|
|
481
|
+
stdio: "pipe",
|
|
482
|
+
});
|
|
483
|
+
console.log(`Rolled back ${targetBranch} to ${tagName}`);
|
|
484
|
+
}
|
|
485
|
+
catch (error) {
|
|
486
|
+
throw new WorktreeSyncError(`Failed to rollback to snapshot ${tagName}: ${error.message}`, WorktreeSyncErrorCode.MERGE_FAILED, error);
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* Perform squash sync operation
|
|
491
|
+
*
|
|
492
|
+
* Squashes all worktree commits into a single commit on the target branch.
|
|
493
|
+
* Auto-resolves JSONL conflicts but blocks on code conflicts.
|
|
494
|
+
*
|
|
495
|
+
* @param executionId - Execution ID to sync
|
|
496
|
+
* @param customCommitMessage - Optional custom commit message
|
|
497
|
+
* @returns Sync result with details
|
|
498
|
+
* @throws WorktreeSyncError if sync fails
|
|
499
|
+
*/
|
|
500
|
+
async squashSync(executionId, customCommitMessage) {
|
|
501
|
+
// 1. Load and validate execution
|
|
502
|
+
const execution = await this._loadAndValidateExecution(executionId);
|
|
503
|
+
// 2. Validate preconditions
|
|
504
|
+
await this._validateSyncPreconditions(execution);
|
|
505
|
+
// 3. Preview sync to check for conflicts
|
|
506
|
+
const preview = await this.previewSync(executionId);
|
|
507
|
+
// 4. Block if code conflicts exist
|
|
508
|
+
if (preview.conflicts.codeConflicts.length > 0) {
|
|
509
|
+
return {
|
|
510
|
+
success: false,
|
|
511
|
+
filesChanged: 0,
|
|
512
|
+
conflictsResolved: 0,
|
|
513
|
+
uncommittedJSONLIncluded: false,
|
|
514
|
+
error: `Cannot sync: ${preview.conflicts.codeConflicts.length} code conflict(s) detected. Please resolve manually.`,
|
|
515
|
+
};
|
|
516
|
+
}
|
|
517
|
+
let safetyTag;
|
|
518
|
+
try {
|
|
519
|
+
// 5. Handle uncommitted JSONL files
|
|
520
|
+
const uncommittedJSONL = preview.uncommittedJSONLChanges;
|
|
521
|
+
if (uncommittedJSONL.length > 0) {
|
|
522
|
+
await this.commitUncommittedJSONL(execution.worktree_path, uncommittedJSONL);
|
|
523
|
+
}
|
|
524
|
+
// 6. Create safety snapshot
|
|
525
|
+
safetyTag = await this._createSafetySnapshot(executionId, execution.target_branch);
|
|
526
|
+
// 7. Perform git merge --squash
|
|
527
|
+
const mergeResult = this._performSquashMerge(execution.branch_name, execution.target_branch);
|
|
528
|
+
// 8. Resolve JSONL conflicts
|
|
529
|
+
let conflictsResolved = 0;
|
|
530
|
+
if (preview.conflicts.jsonlConflicts.length > 0) {
|
|
531
|
+
await this.resolveJSONLConflicts(execution, preview.conflicts.jsonlConflicts);
|
|
532
|
+
conflictsResolved = preview.conflicts.jsonlConflicts.length;
|
|
533
|
+
}
|
|
534
|
+
// 9. Generate commit message
|
|
535
|
+
const commitMessage = customCommitMessage ||
|
|
536
|
+
this._generateCommitMessage(execution, preview.commits.length);
|
|
537
|
+
// 10. Create commit
|
|
538
|
+
const finalCommit = this._createCommit(commitMessage);
|
|
539
|
+
// 11. Return success result
|
|
540
|
+
return {
|
|
541
|
+
success: true,
|
|
542
|
+
finalCommit,
|
|
543
|
+
filesChanged: mergeResult.filesChanged,
|
|
544
|
+
conflictsResolved,
|
|
545
|
+
uncommittedJSONLIncluded: uncommittedJSONL.length > 0,
|
|
546
|
+
cleanupOffered: true,
|
|
547
|
+
};
|
|
548
|
+
}
|
|
549
|
+
catch (error) {
|
|
550
|
+
// Rollback to safety snapshot on failure
|
|
551
|
+
if (safetyTag) {
|
|
552
|
+
try {
|
|
553
|
+
await this._rollbackToSnapshot(execution.target_branch, safetyTag);
|
|
554
|
+
}
|
|
555
|
+
catch (rollbackError) {
|
|
556
|
+
console.error(`Failed to rollback to snapshot ${safetyTag}:`, rollbackError);
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
throw new WorktreeSyncError(`Squash sync failed: ${error.message}`, WorktreeSyncErrorCode.MERGE_FAILED, error);
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
//# sourceMappingURL=worktree-sync-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-sync-service.js","sourceRoot":"","sources":["../../src/services/worktree-sync-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editor types and configuration for IDE opening functionality
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Supported editor types for opening worktrees
|
|
6
|
+
*/
|
|
7
|
+
export declare enum EditorType {
|
|
8
|
+
VS_CODE = "vs-code",
|
|
9
|
+
CURSOR = "cursor",
|
|
10
|
+
WINDSURF = "windsurf",
|
|
11
|
+
INTELLIJ = "intellij",
|
|
12
|
+
ZED = "zed",
|
|
13
|
+
XCODE = "xcode",
|
|
14
|
+
CUSTOM = "custom"
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Editor configuration interface
|
|
18
|
+
* Loaded from .sudocode/config.local.json
|
|
19
|
+
*/
|
|
20
|
+
export interface EditorConfig {
|
|
21
|
+
editorType: EditorType;
|
|
22
|
+
customCommand?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Error codes for editor opening failures
|
|
26
|
+
*/
|
|
27
|
+
export type EditorErrorCode = "EDITOR_NOT_FOUND" | "WORKTREE_MISSING" | "SPAWN_FAILED";
|
|
28
|
+
/**
|
|
29
|
+
* Custom error class for editor opening failures
|
|
30
|
+
* Provides structured error information for API responses
|
|
31
|
+
*/
|
|
32
|
+
export declare class EditorOpenError extends Error {
|
|
33
|
+
code: EditorErrorCode;
|
|
34
|
+
editorType: EditorType;
|
|
35
|
+
details?: string | undefined;
|
|
36
|
+
constructor(code: EditorErrorCode, editorType: EditorType, message: string, details?: string | undefined);
|
|
37
|
+
/**
|
|
38
|
+
* Convert error to JSON for API responses
|
|
39
|
+
*/
|
|
40
|
+
toJSON(): {
|
|
41
|
+
error: {
|
|
42
|
+
code: EditorErrorCode;
|
|
43
|
+
message: string;
|
|
44
|
+
details: string | undefined;
|
|
45
|
+
editorType: EditorType;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/types/editor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,MAAM,WAAW;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,kBAAkB,GAClB,kBAAkB,GAClB,cAAc,CAAC;AAEnB;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IAE/B,IAAI,EAAE,eAAe;IACrB,UAAU,EAAE,UAAU;IAEtB,OAAO,CAAC,EAAE,MAAM;gBAHhB,IAAI,EAAE,eAAe,EACrB,UAAU,EAAE,UAAU,EAC7B,OAAO,EAAE,MAAM,EACR,OAAO,CAAC,EAAE,MAAM,YAAA;IAWzB;;OAEG;IACH,MAAM;;;;;;;;CAUP"}
|