@northflare/runner 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/DEBUG_LOGGING.md +60 -0
  2. package/LICENSE +21 -0
  3. package/MIGRATION_PLAN.md +52 -0
  4. package/README.md +220 -0
  5. package/SDK_IMPLEMENTATION_GUIDE.md +1036 -0
  6. package/bin/northflare-runner +367 -0
  7. package/coverage/base.css +224 -0
  8. package/coverage/block-navigation.js +87 -0
  9. package/coverage/coverage-final.json +12 -0
  10. package/coverage/favicon.png +0 -0
  11. package/coverage/index.html +176 -0
  12. package/coverage/lib/index.html +116 -0
  13. package/coverage/lib/preload-script.js.html +964 -0
  14. package/coverage/prettify.css +1 -0
  15. package/coverage/prettify.js +2 -0
  16. package/coverage/sort-arrow-sprite.png +0 -0
  17. package/coverage/sorter.js +196 -0
  18. package/coverage/src/collections/index.html +116 -0
  19. package/coverage/src/collections/runner-messages.ts.html +312 -0
  20. package/coverage/src/components/claude-manager.ts.html +1290 -0
  21. package/coverage/src/components/index.html +146 -0
  22. package/coverage/src/components/message-handler.ts.html +730 -0
  23. package/coverage/src/components/repository-manager.ts.html +841 -0
  24. package/coverage/src/index.html +131 -0
  25. package/coverage/src/index.ts.html +448 -0
  26. package/coverage/src/runner.ts.html +1239 -0
  27. package/coverage/src/utils/config.ts.html +780 -0
  28. package/coverage/src/utils/console.ts.html +121 -0
  29. package/coverage/src/utils/index.html +161 -0
  30. package/coverage/src/utils/logger.ts.html +475 -0
  31. package/coverage/src/utils/status-line.ts.html +445 -0
  32. package/dist/collections/runner-messages.d.ts +52 -0
  33. package/dist/collections/runner-messages.d.ts.map +1 -0
  34. package/dist/collections/runner-messages.js +161 -0
  35. package/dist/collections/runner-messages.js.map +1 -0
  36. package/dist/components/claude-manager.d.ts +39 -0
  37. package/dist/components/claude-manager.d.ts.map +1 -0
  38. package/dist/components/claude-manager.js +783 -0
  39. package/dist/components/claude-manager.js.map +1 -0
  40. package/dist/components/claude-sdk-manager.d.ts +47 -0
  41. package/dist/components/claude-sdk-manager.d.ts.map +1 -0
  42. package/dist/components/claude-sdk-manager.js +1088 -0
  43. package/dist/components/claude-sdk-manager.js.map +1 -0
  44. package/dist/components/enhanced-repository-manager.d.ts +134 -0
  45. package/dist/components/enhanced-repository-manager.d.ts.map +1 -0
  46. package/dist/components/enhanced-repository-manager.js +602 -0
  47. package/dist/components/enhanced-repository-manager.js.map +1 -0
  48. package/dist/components/message-handler-sse.d.ts +46 -0
  49. package/dist/components/message-handler-sse.d.ts.map +1 -0
  50. package/dist/components/message-handler-sse.js +734 -0
  51. package/dist/components/message-handler-sse.js.map +1 -0
  52. package/dist/components/message-handler.d.ts +35 -0
  53. package/dist/components/message-handler.d.ts.map +1 -0
  54. package/dist/components/message-handler.js +689 -0
  55. package/dist/components/message-handler.js.map +1 -0
  56. package/dist/components/repository-manager.d.ts +51 -0
  57. package/dist/components/repository-manager.d.ts.map +1 -0
  58. package/dist/components/repository-manager.js +295 -0
  59. package/dist/components/repository-manager.js.map +1 -0
  60. package/dist/index.d.ts +9 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +166 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/runner-sse.d.ts +57 -0
  65. package/dist/runner-sse.d.ts.map +1 -0
  66. package/dist/runner-sse.js +698 -0
  67. package/dist/runner-sse.js.map +1 -0
  68. package/dist/runner.d.ts +51 -0
  69. package/dist/runner.d.ts.map +1 -0
  70. package/dist/runner.js +530 -0
  71. package/dist/runner.js.map +1 -0
  72. package/dist/services/RunnerAPIClient.d.ts +30 -0
  73. package/dist/services/RunnerAPIClient.d.ts.map +1 -0
  74. package/dist/services/RunnerAPIClient.js +112 -0
  75. package/dist/services/RunnerAPIClient.js.map +1 -0
  76. package/dist/services/SSEClient.d.ts +60 -0
  77. package/dist/services/SSEClient.d.ts.map +1 -0
  78. package/dist/services/SSEClient.js +204 -0
  79. package/dist/services/SSEClient.js.map +1 -0
  80. package/dist/types/claude.d.ts +45 -0
  81. package/dist/types/claude.d.ts.map +1 -0
  82. package/dist/types/claude.js +6 -0
  83. package/dist/types/claude.js.map +1 -0
  84. package/dist/types/index.d.ts +47 -0
  85. package/dist/types/index.d.ts.map +1 -0
  86. package/dist/types/index.js +23 -0
  87. package/dist/types/index.js.map +1 -0
  88. package/dist/types/messages.d.ts +31 -0
  89. package/dist/types/messages.d.ts.map +1 -0
  90. package/dist/types/messages.js +6 -0
  91. package/dist/types/messages.js.map +1 -0
  92. package/dist/types/runner-interface.d.ts +24 -0
  93. package/dist/types/runner-interface.d.ts.map +1 -0
  94. package/dist/types/runner-interface.js +6 -0
  95. package/dist/types/runner-interface.js.map +1 -0
  96. package/dist/utils/StateManager.d.ts +52 -0
  97. package/dist/utils/StateManager.d.ts.map +1 -0
  98. package/dist/utils/StateManager.js +162 -0
  99. package/dist/utils/StateManager.js.map +1 -0
  100. package/dist/utils/config.d.ts +41 -0
  101. package/dist/utils/config.d.ts.map +1 -0
  102. package/dist/utils/config.js +250 -0
  103. package/dist/utils/config.js.map +1 -0
  104. package/dist/utils/console.d.ts +11 -0
  105. package/dist/utils/console.d.ts.map +1 -0
  106. package/dist/utils/console.js +15 -0
  107. package/dist/utils/console.js.map +1 -0
  108. package/dist/utils/expand-env.d.ts +2 -0
  109. package/dist/utils/expand-env.d.ts.map +1 -0
  110. package/dist/utils/expand-env.js +20 -0
  111. package/dist/utils/expand-env.js.map +1 -0
  112. package/dist/utils/logger.d.ts +9 -0
  113. package/dist/utils/logger.d.ts.map +1 -0
  114. package/dist/utils/logger.js +108 -0
  115. package/dist/utils/logger.js.map +1 -0
  116. package/dist/utils/status-line.d.ts +37 -0
  117. package/dist/utils/status-line.d.ts.map +1 -0
  118. package/dist/utils/status-line.js +113 -0
  119. package/dist/utils/status-line.js.map +1 -0
  120. package/docs/claude-manager.md +91 -0
  121. package/exceptions.log +22 -0
  122. package/lib/preload-script.js +293 -0
  123. package/package.json +55 -0
  124. package/rejections.log +63 -0
  125. package/runner.log +488 -0
  126. package/src/components/claude-sdk-manager.ts +1354 -0
  127. package/src/components/enhanced-repository-manager.ts +823 -0
  128. package/src/components/message-handler-sse.ts +1011 -0
  129. package/src/components/repository-manager.ts +337 -0
  130. package/src/index.ts +166 -0
  131. package/src/runner-sse.ts +847 -0
  132. package/src/services/RunnerAPIClient.ts +135 -0
  133. package/src/services/SSEClient.ts +258 -0
  134. package/src/types/claude.ts +55 -0
  135. package/src/types/computer-name.d.ts +4 -0
  136. package/src/types/index.ts +63 -0
  137. package/src/types/messages.ts +39 -0
  138. package/src/types/runner-interface.ts +34 -0
  139. package/src/utils/StateManager.ts +187 -0
  140. package/src/utils/codex-sdk.js +448 -0
  141. package/src/utils/config.ts +315 -0
  142. package/src/utils/console.ts +13 -0
  143. package/src/utils/expand-env.ts +22 -0
  144. package/src/utils/logger.ts +131 -0
  145. package/src/utils/sdk-demo.js +34 -0
  146. package/src/utils/status-line.ts +121 -0
  147. package/test-debug.sh +26 -0
  148. package/tests/retry-strategies.test.ts +410 -0
  149. package/tests/sdk-integration.test.ts +329 -0
  150. package/tests/sdk-streaming.test.ts +1180 -0
  151. package/tests/setup.ts +5 -0
  152. package/tests/test-claude-manager.ts +120 -0
  153. package/tsconfig.json +36 -0
  154. package/vitest.config.ts +27 -0
@@ -0,0 +1,602 @@
1
+ "use strict";
2
+ /**
3
+ * EnhancedRepositoryManager - Advanced Git repository management with worktree support
4
+ *
5
+ * This enhanced version builds upon the original RepositoryManager to add:
6
+ * - Task-level Git isolation through worktrees
7
+ * - Git operations (stage, commit, push, merge, rebase)
8
+ * - State persistence and recovery
9
+ * - Backward compatibility with workspace-based operations
10
+ *
11
+ * Directory structure:
12
+ * /workspace/repos/<owner>__<repo>/
13
+ * control/ # Primary clone (.git directory owner)
14
+ * .git/
15
+ * worktrees/
16
+ * workspace_<workspaceId>/ # Backward compatibility - workspace default branch
17
+ * task_<taskId>/ # New - isolated task worktrees
18
+ * state.json # Persistent state mapping
19
+ */
20
+ var __importDefault = (this && this.__importDefault) || function (mod) {
21
+ return (mod && mod.__esModule) ? mod : { "default": mod };
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.EnhancedRepositoryManager = void 0;
25
+ const repository_manager_1 = require("./repository-manager");
26
+ const path_1 = __importDefault(require("path"));
27
+ const promises_1 = __importDefault(require("fs/promises"));
28
+ const simple_git_1 = __importDefault(require("simple-git"));
29
+ const console_1 = require("../utils/console");
30
+ class EnhancedRepositoryManager extends repository_manager_1.RepositoryManager {
31
+ repoStates;
32
+ stateFilePath;
33
+ constructor(runner) {
34
+ super(runner);
35
+ this.repoStates = new Map();
36
+ // this.repoBasePath is set by parent constructor, so we can use it now
37
+ this.stateFilePath = path_1.default.join(this.repoBasePath, "repository-state.json");
38
+ // Load persisted state on initialization
39
+ this.restoreState().catch((err) => {
40
+ console_1.console.error("Failed to restore repository state:", err);
41
+ });
42
+ }
43
+ /**
44
+ * Get repository key from owner and repo name
45
+ */
46
+ getRepoKey(repoUrl) {
47
+ // Handle local repository URLs
48
+ if (repoUrl.startsWith("file://")) {
49
+ const localPath = repoUrl.replace("file://", "");
50
+ const pathParts = localPath.split("/");
51
+ const repoName = pathParts[pathParts.length - 1] || "local";
52
+ return { key: `local__${repoName}`, owner: "local", repo: repoName };
53
+ }
54
+ // Extract owner and repo from URL
55
+ const match = repoUrl.match(/github\.com[:/]([^/]+)\/([^/.]+)(\.git)?$/);
56
+ if (!match) {
57
+ throw new Error(`Invalid GitHub repository URL: ${repoUrl}`);
58
+ }
59
+ const owner = match[1] || "";
60
+ const repo = match[2] || "";
61
+ const key = `${owner}__${repo}`;
62
+ return { key, owner, repo };
63
+ }
64
+ /**
65
+ * Ensure control repository exists
66
+ */
67
+ async ensureControlRepository(repoUrl, githubToken) {
68
+ const { key, owner, repo } = this.getRepoKey(repoUrl);
69
+ const controlPath = path_1.default.join(this.repoBasePath, "repos", key, "control");
70
+ // Check if control repository already exists
71
+ try {
72
+ await promises_1.default.access(path_1.default.join(controlPath, ".git"));
73
+ console_1.console.log(`Control repository already exists for ${key}`);
74
+ // Update remote URL if token changed
75
+ if (githubToken) {
76
+ const git = (0, simple_git_1.default)(controlPath);
77
+ const authUrl = this.getAuthenticatedUrl(repoUrl, githubToken);
78
+ await git.remote(["set-url", "origin", authUrl]);
79
+ }
80
+ // Fetch latest changes
81
+ const git = (0, simple_git_1.default)(controlPath);
82
+ await git.fetch("origin");
83
+ return controlPath;
84
+ }
85
+ catch {
86
+ // Control repository doesn't exist, create it
87
+ console_1.console.log(`Creating control repository for ${key}...`);
88
+ await this.ensureDirectory(path_1.default.dirname(controlPath));
89
+ const authUrl = this.getAuthenticatedUrl(repoUrl, githubToken);
90
+ await this.executeGit(["clone", "--bare", authUrl, controlPath]);
91
+ // Convert to regular repository for worktree support
92
+ const git = (0, simple_git_1.default)(controlPath);
93
+ await git.raw(["config", "--bool", "core.bare", "false"]);
94
+ console_1.console.log(`Successfully created control repository for ${key}`);
95
+ return controlPath;
96
+ }
97
+ }
98
+ /**
99
+ * Create a task-specific worktree for local workspaces
100
+ */
101
+ async createLocalTaskHandle(taskId, localPath) {
102
+ // For local workspaces, we don't create worktrees or branches
103
+ // Just return a handle pointing to the local path
104
+ const handle = {
105
+ taskId,
106
+ worktreePath: localPath,
107
+ branch: "local", // Placeholder branch name for local workspaces
108
+ baseBranch: "local",
109
+ };
110
+ // Create and persist state for tracking
111
+ const state = {
112
+ taskId,
113
+ branch: "local",
114
+ baseBranch: "local",
115
+ worktreePath: localPath,
116
+ status: "active",
117
+ createdAt: new Date(),
118
+ updatedAt: new Date(),
119
+ };
120
+ // Store state using a special key for local workspaces
121
+ await this.updateTaskState("__local__", state);
122
+ console_1.console.log(`Created local task handle for task ${taskId} at ${localPath}`);
123
+ return handle;
124
+ }
125
+ /**
126
+ * Create a task-specific worktree
127
+ */
128
+ async createTaskWorktree(taskId, workspaceId, repoUrl, baseBranch = "main", githubToken) {
129
+ // For local repositories, just return the path without creating worktrees
130
+ if (repoUrl.startsWith("file://")) {
131
+ const localPath = repoUrl.replace("file://", "");
132
+ console_1.console.log(`Using local repository for task ${taskId}: ${localPath}`);
133
+ // Verify the path exists
134
+ try {
135
+ const stats = await promises_1.default.stat(localPath);
136
+ if (!stats.isDirectory()) {
137
+ throw new Error(`Path is not a directory: ${localPath}`);
138
+ }
139
+ }
140
+ catch (error) {
141
+ console_1.console.error(`Local repository path not found: ${localPath}`);
142
+ throw new Error(`Local repository path not found: ${localPath}`);
143
+ }
144
+ return {
145
+ taskId,
146
+ worktreePath: localPath,
147
+ branch: "local",
148
+ baseBranch: "local",
149
+ };
150
+ }
151
+ const { key } = this.getRepoKey(repoUrl);
152
+ // Ensure control repository exists
153
+ const controlPath = await this.ensureControlRepository(repoUrl, githubToken);
154
+ const worktreesPath = path_1.default.join(this.repoBasePath, "repos", key, "worktrees");
155
+ const taskWorktreePath = path_1.default.join(worktreesPath, `task_${taskId}`);
156
+ // Create unique branch name for the task
157
+ const timestamp = Date.now();
158
+ const shortTaskId = taskId.substring(0, 8);
159
+ const branchName = `task/${shortTaskId}-${timestamp}`;
160
+ try {
161
+ console_1.console.log(`Creating worktree for task ${taskId} on branch ${branchName}...`);
162
+ // Create worktree directory
163
+ await this.ensureDirectory(worktreesPath);
164
+ // Add worktree with new branch based on baseBranch
165
+ const git = (0, simple_git_1.default)(controlPath);
166
+ await git.raw([
167
+ "worktree",
168
+ "add",
169
+ "-b",
170
+ branchName,
171
+ taskWorktreePath,
172
+ `origin/${baseBranch}`,
173
+ ]);
174
+ // Configure the worktree
175
+ const worktreeGit = (0, simple_git_1.default)(taskWorktreePath);
176
+ await worktreeGit.addConfig("user.name", "Northflare");
177
+ await worktreeGit.addConfig("user.email", "runner@northflare.ai");
178
+ // Create and persist state
179
+ const state = {
180
+ taskId,
181
+ branch: branchName,
182
+ baseBranch,
183
+ worktreePath: taskWorktreePath,
184
+ status: "active",
185
+ createdAt: new Date(),
186
+ updatedAt: new Date(),
187
+ };
188
+ await this.updateTaskState(key, state);
189
+ console_1.console.log(`Successfully created worktree for task ${taskId}`);
190
+ return {
191
+ taskId,
192
+ worktreePath: taskWorktreePath,
193
+ branch: branchName,
194
+ baseBranch,
195
+ };
196
+ }
197
+ catch (error) {
198
+ console_1.console.error(`Failed to create worktree for task ${taskId}:`, error);
199
+ // Cleanup on failure
200
+ await this.cleanupDirectory(taskWorktreePath);
201
+ throw error;
202
+ }
203
+ }
204
+ /**
205
+ * Remove a task worktree
206
+ */
207
+ async removeTaskWorktree(taskId, options = {}) {
208
+ // Find the task state across all repositories
209
+ let repoKey = null;
210
+ let taskState = null;
211
+ for (const [key, state] of this.repoStates) {
212
+ const repo = state.repositories[key];
213
+ if (repo?.worktrees[taskId]) {
214
+ repoKey = key;
215
+ taskState = repo.worktrees[taskId];
216
+ break;
217
+ }
218
+ }
219
+ if (!repoKey || !taskState) {
220
+ console_1.console.log(`No worktree found for task ${taskId}`);
221
+ return;
222
+ }
223
+ // Handle local workspaces differently
224
+ if (repoKey === "__local__") {
225
+ // Just remove from state, don't touch the filesystem
226
+ const repoState = this.repoStates.get(repoKey);
227
+ const repo = repoState?.repositories?.[repoKey];
228
+ if (repo?.worktrees?.[taskId]) {
229
+ delete repo.worktrees[taskId];
230
+ }
231
+ await this.persistState();
232
+ console_1.console.log(`Removed local task handle for task ${taskId}`);
233
+ return;
234
+ }
235
+ const { key } = this.getRepoKey(repoKey);
236
+ const controlPath = path_1.default.join(this.repoBasePath, "repos", key, "control");
237
+ try {
238
+ console_1.console.log(`Removing worktree for task ${taskId}...`);
239
+ // Remove the worktree
240
+ const git = (0, simple_git_1.default)(controlPath);
241
+ await git.raw(["worktree", "remove", taskState.worktreePath, "--force"]);
242
+ // Delete the branch if not preserving
243
+ if (!options.preserveBranch) {
244
+ try {
245
+ await git.raw(["branch", "-D", taskState.branch]);
246
+ }
247
+ catch (error) {
248
+ console_1.console.warn(`Failed to delete branch ${taskState.branch}:`, error);
249
+ }
250
+ }
251
+ // Remove from state
252
+ const repoState = this.repoStates.get(repoKey);
253
+ if (repoState?.repositories[key]?.worktrees) {
254
+ delete repoState.repositories[key].worktrees[taskId];
255
+ }
256
+ await this.persistState();
257
+ console_1.console.log(`Successfully removed worktree for task ${taskId}`);
258
+ }
259
+ catch (error) {
260
+ console_1.console.error(`Failed to remove worktree for task ${taskId}:`, error);
261
+ if (options.force) {
262
+ // Force cleanup
263
+ await this.cleanupDirectory(taskState.worktreePath);
264
+ }
265
+ else {
266
+ throw error;
267
+ }
268
+ }
269
+ }
270
+ /**
271
+ * Stage all changes in a task worktree
272
+ */
273
+ async stageAll(taskId) {
274
+ const taskState = await this.getTaskState(taskId);
275
+ if (!taskState) {
276
+ throw new Error(`No worktree found for task ${taskId}`);
277
+ }
278
+ // Skip Git operations for local workspaces
279
+ if (taskState.branch === "local") {
280
+ console_1.console.log(`Skipping stage operation for local workspace task ${taskId}`);
281
+ return;
282
+ }
283
+ const git = (0, simple_git_1.default)(taskState.worktreePath);
284
+ await git.add(".");
285
+ console_1.console.log(`Staged all changes for task ${taskId}`);
286
+ }
287
+ /**
288
+ * Commit changes in a task worktree
289
+ */
290
+ async commit(taskId, message, author) {
291
+ const taskState = await this.getTaskState(taskId);
292
+ if (!taskState) {
293
+ throw new Error(`No worktree found for task ${taskId}`);
294
+ }
295
+ // Skip Git operations for local workspaces
296
+ if (taskState.branch === "local") {
297
+ console_1.console.log(`Skipping commit operation for local workspace task ${taskId}`);
298
+ return "local-commit"; // Return a placeholder commit hash
299
+ }
300
+ const git = (0, simple_git_1.default)(taskState.worktreePath);
301
+ // Set author if provided
302
+ if (author) {
303
+ await git.addConfig("user.name", author.name);
304
+ await git.addConfig("user.email", author.email);
305
+ }
306
+ // Commit changes
307
+ const result = await git.commit(message);
308
+ const commitHash = result.commit;
309
+ // Update task state
310
+ taskState.lastCommit = commitHash;
311
+ taskState.updatedAt = new Date();
312
+ await this.updateTaskStateByTaskId(taskId, taskState);
313
+ console_1.console.log(`Created commit ${commitHash} for task ${taskId}`);
314
+ return commitHash;
315
+ }
316
+ /**
317
+ * Create a new branch for a task
318
+ */
319
+ async createBranch(taskId, branchName) {
320
+ const taskState = await this.getTaskState(taskId);
321
+ if (!taskState) {
322
+ throw new Error(`No worktree found for task ${taskId}`);
323
+ }
324
+ // Skip Git operations for local workspaces
325
+ if (taskState.branch === "local") {
326
+ console_1.console.log(`Skipping branch creation for local workspace task ${taskId}`);
327
+ return;
328
+ }
329
+ const git = (0, simple_git_1.default)(taskState.worktreePath);
330
+ await git.checkoutBranch(branchName, taskState.branch);
331
+ // Update task state
332
+ taskState.branch = branchName;
333
+ taskState.updatedAt = new Date();
334
+ await this.updateTaskStateByTaskId(taskId, taskState);
335
+ console_1.console.log(`Created branch ${branchName} for task ${taskId}`);
336
+ }
337
+ /**
338
+ * Rebase a task branch onto target branch
339
+ */
340
+ async rebaseTask(taskId, targetBranch) {
341
+ const taskState = await this.getTaskState(taskId);
342
+ if (!taskState) {
343
+ throw new Error(`No worktree found for task ${taskId}`);
344
+ }
345
+ // Skip Git operations for local workspaces
346
+ if (taskState.branch === "local") {
347
+ console_1.console.log(`Skipping rebase operation for local workspace task ${taskId}`);
348
+ return { success: true }; // Return success for local workspaces
349
+ }
350
+ const git = (0, simple_git_1.default)(taskState.worktreePath);
351
+ try {
352
+ // Fetch latest changes
353
+ await git.fetch("origin", targetBranch);
354
+ // Perform rebase
355
+ await git.rebase([`origin/${targetBranch}`]);
356
+ // Update base branch in state
357
+ taskState.baseBranch = targetBranch;
358
+ taskState.updatedAt = new Date();
359
+ await this.updateTaskStateByTaskId(taskId, taskState);
360
+ console_1.console.log(`Successfully rebased task ${taskId} onto ${targetBranch}`);
361
+ return { success: true };
362
+ }
363
+ catch (error) {
364
+ console_1.console.error(`Rebase failed for task ${taskId}:`, error);
365
+ // Check for conflicts
366
+ const status = await git.status();
367
+ if (status.conflicted.length > 0) {
368
+ taskState.status = "conflicted";
369
+ await this.updateTaskStateByTaskId(taskId, taskState);
370
+ return {
371
+ success: false,
372
+ conflicts: status.conflicted,
373
+ error: "Rebase resulted in conflicts",
374
+ };
375
+ }
376
+ // Abort rebase on error
377
+ try {
378
+ await git.rebase(["--abort"]);
379
+ }
380
+ catch {
381
+ // Ignore abort errors
382
+ }
383
+ return {
384
+ success: false,
385
+ error: error instanceof Error ? error.message : String(error),
386
+ };
387
+ }
388
+ }
389
+ /**
390
+ * Merge a task branch into target branch
391
+ */
392
+ async mergeTask(taskId, targetBranch, mode = "no-ff") {
393
+ const taskState = await this.getTaskState(taskId);
394
+ if (!taskState) {
395
+ throw new Error(`No worktree found for task ${taskId}`);
396
+ }
397
+ // Skip Git operations for local workspaces
398
+ if (taskState.branch === "local") {
399
+ console_1.console.log(`Skipping merge operation for local workspace task ${taskId}`);
400
+ return { success: true, mergedCommit: "local-merge" }; // Return success for local workspaces
401
+ }
402
+ const git = (0, simple_git_1.default)(taskState.worktreePath);
403
+ try {
404
+ // Fetch latest changes
405
+ await git.fetch("origin", targetBranch);
406
+ // Checkout target branch
407
+ await git.checkout(targetBranch);
408
+ await git.pull("origin", targetBranch);
409
+ // Perform merge based on mode
410
+ let mergeArgs = [];
411
+ switch (mode) {
412
+ case "ff-only":
413
+ mergeArgs = ["--ff-only"];
414
+ break;
415
+ case "no-ff":
416
+ mergeArgs = ["--no-ff"];
417
+ break;
418
+ case "squash":
419
+ mergeArgs = ["--squash"];
420
+ break;
421
+ }
422
+ const result = await git.merge([taskState.branch, ...mergeArgs]);
423
+ // For squash merge, we need to commit
424
+ if (mode === "squash") {
425
+ const commitResult = await git.commit(`Merge task ${taskId} (${taskState.branch})`);
426
+ result.result = commitResult.commit;
427
+ }
428
+ // Update task state
429
+ taskState.status = "merged";
430
+ taskState.updatedAt = new Date();
431
+ await this.updateTaskStateByTaskId(taskId, taskState);
432
+ console_1.console.log(`Successfully merged task ${taskId} into ${targetBranch}`);
433
+ return {
434
+ success: true,
435
+ mergedCommit: result.result,
436
+ };
437
+ }
438
+ catch (error) {
439
+ console_1.console.error(`Merge failed for task ${taskId}:`, error);
440
+ // Check for conflicts
441
+ const status = await git.status();
442
+ if (status.conflicted.length > 0) {
443
+ taskState.status = "conflicted";
444
+ await this.updateTaskStateByTaskId(taskId, taskState);
445
+ return {
446
+ success: false,
447
+ conflicts: status.conflicted,
448
+ error: "Merge resulted in conflicts",
449
+ };
450
+ }
451
+ return {
452
+ success: false,
453
+ error: error instanceof Error ? error.message : String(error),
454
+ };
455
+ }
456
+ }
457
+ /**
458
+ * Get task Git state
459
+ */
460
+ async getTaskState(taskId) {
461
+ for (const state of this.repoStates.values()) {
462
+ for (const repo of Object.values(state.repositories)) {
463
+ if (repo.worktrees[taskId]) {
464
+ return repo.worktrees[taskId];
465
+ }
466
+ }
467
+ }
468
+ return null;
469
+ }
470
+ /**
471
+ * Update task state
472
+ */
473
+ async updateTaskState(repoKey, state) {
474
+ if (!this.repoStates.has(repoKey)) {
475
+ this.repoStates.set(repoKey, {
476
+ repositories: {},
477
+ });
478
+ }
479
+ const repoState = this.repoStates.get(repoKey);
480
+ if (!repoState.repositories[repoKey]) {
481
+ // Handle special case for local workspaces
482
+ if (repoKey === "__local__") {
483
+ repoState.repositories[repoKey] = {
484
+ owner: "local",
485
+ repo: "local",
486
+ controlPath: "local",
487
+ worktrees: {},
488
+ };
489
+ }
490
+ else {
491
+ const { owner, repo } = this.getRepoKey(repoKey);
492
+ repoState.repositories[repoKey] = {
493
+ owner,
494
+ repo,
495
+ controlPath: path_1.default.join(this.repoBasePath, "repos", repoKey, "control"),
496
+ worktrees: {},
497
+ };
498
+ }
499
+ }
500
+ repoState.repositories[repoKey].worktrees[state.taskId] = state;
501
+ await this.persistState();
502
+ }
503
+ /**
504
+ * Update task state by task ID
505
+ */
506
+ async updateTaskStateByTaskId(taskId, state) {
507
+ for (const [repoKey, repoState] of this.repoStates) {
508
+ for (const repo of Object.values(repoState.repositories)) {
509
+ if (repo.worktrees[taskId]) {
510
+ repo.worktrees[taskId] = state;
511
+ await this.persistState();
512
+ return;
513
+ }
514
+ }
515
+ }
516
+ }
517
+ /**
518
+ * Persist state to disk
519
+ */
520
+ async persistState() {
521
+ try {
522
+ const stateData = {};
523
+ for (const [key, value] of this.repoStates) {
524
+ stateData[key] = value;
525
+ }
526
+ await promises_1.default.writeFile(this.stateFilePath, JSON.stringify(stateData, null, 2));
527
+ console_1.console.log("Persisted repository state");
528
+ }
529
+ catch (error) {
530
+ console_1.console.error("Failed to persist repository state:", error);
531
+ }
532
+ }
533
+ /**
534
+ * Restore state from disk
535
+ */
536
+ async restoreState() {
537
+ try {
538
+ const data = await promises_1.default.readFile(this.stateFilePath, "utf-8");
539
+ const stateData = JSON.parse(data);
540
+ this.repoStates.clear();
541
+ for (const [key, value] of Object.entries(stateData)) {
542
+ // Convert date strings back to Date objects
543
+ for (const repo of Object.values(value.repositories)) {
544
+ for (const worktree of Object.values(repo.worktrees)) {
545
+ worktree.createdAt = new Date(worktree.createdAt);
546
+ worktree.updatedAt = new Date(worktree.updatedAt);
547
+ }
548
+ }
549
+ this.repoStates.set(key, value);
550
+ }
551
+ console_1.console.log("Restored repository state");
552
+ }
553
+ catch (error) {
554
+ if (error.code !== "ENOENT") {
555
+ console_1.console.error("Failed to restore repository state:", error);
556
+ }
557
+ // If file doesn't exist, that's okay - we'll start fresh
558
+ }
559
+ }
560
+ /**
561
+ * Override parent's checkoutRepository to use worktrees for backward compatibility
562
+ */
563
+ async checkoutRepository(workspaceId, repoUrl, branch, githubToken) {
564
+ // If it's a local repository URL, delegate to parent's checkoutLocalRepository
565
+ if (repoUrl.startsWith("file://")) {
566
+ const localPath = repoUrl.replace("file://", "");
567
+ return super.checkoutLocalRepository(workspaceId, localPath);
568
+ }
569
+ const { key } = this.getRepoKey(repoUrl);
570
+ // Ensure control repository exists
571
+ await this.ensureControlRepository(repoUrl, githubToken);
572
+ // Create or update workspace worktree
573
+ const worktreesPath = path_1.default.join(this.repoBasePath, "repos", key, "worktrees");
574
+ const workspaceWorktreePath = path_1.default.join(worktreesPath, `workspace_${workspaceId}`);
575
+ try {
576
+ // Check if workspace worktree already exists
577
+ await promises_1.default.access(workspaceWorktreePath);
578
+ // Update existing worktree
579
+ const git = (0, simple_git_1.default)(workspaceWorktreePath);
580
+ await git.fetch("origin");
581
+ await git.reset(["--hard", `origin/${branch}`]);
582
+ await git.clean("f", ["-d"]);
583
+ console_1.console.log(`Updated workspace worktree for ${workspaceId}`);
584
+ }
585
+ catch {
586
+ // Create new workspace worktree
587
+ const controlPath = path_1.default.join(this.repoBasePath, "repos", key, "control");
588
+ const git = (0, simple_git_1.default)(controlPath);
589
+ await this.ensureDirectory(worktreesPath);
590
+ await git.raw([
591
+ "worktree",
592
+ "add",
593
+ workspaceWorktreePath,
594
+ `origin/${branch}`,
595
+ ]);
596
+ console_1.console.log(`Created workspace worktree for ${workspaceId}`);
597
+ }
598
+ return workspaceWorktreePath;
599
+ }
600
+ }
601
+ exports.EnhancedRepositoryManager = EnhancedRepositoryManager;
602
+ //# sourceMappingURL=enhanced-repository-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhanced-repository-manager.js","sourceRoot":"","sources":["../../src/components/enhanced-repository-manager.ts"],"names":[],"mappings":"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"}