sync-worktrees 3.6.3 → 4.1.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.
Files changed (126) hide show
  1. package/README.md +383 -261
  2. package/dist/components/App.d.ts +50 -0
  3. package/dist/components/App.d.ts.map +1 -0
  4. package/dist/components/BranchCreationWizard.d.ts +26 -0
  5. package/dist/components/BranchCreationWizard.d.ts.map +1 -0
  6. package/dist/components/HelpModal.d.ts +7 -0
  7. package/dist/components/HelpModal.d.ts.map +1 -0
  8. package/dist/components/LogPanel.d.ts +10 -0
  9. package/dist/components/LogPanel.d.ts.map +1 -0
  10. package/dist/components/LogViewer.d.ts +9 -0
  11. package/dist/components/LogViewer.d.ts.map +1 -0
  12. package/dist/components/OpenEditorWizard.d.ts +25 -0
  13. package/dist/components/OpenEditorWizard.d.ts.map +1 -0
  14. package/dist/components/StatusBar.d.ts +14 -0
  15. package/dist/components/StatusBar.d.ts.map +1 -0
  16. package/dist/components/WorktreeStatusView.d.ts +14 -0
  17. package/dist/components/WorktreeStatusView.d.ts.map +1 -0
  18. package/dist/constants.d.ts +112 -0
  19. package/dist/constants.d.ts.map +1 -0
  20. package/dist/errors/index.d.ts +59 -0
  21. package/dist/errors/index.d.ts.map +1 -0
  22. package/dist/index.d.ts +5 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +2523 -1106
  25. package/dist/index.js.map +4 -4
  26. package/dist/mcp/context.d.ts +143 -0
  27. package/dist/mcp/context.d.ts.map +1 -0
  28. package/dist/mcp/handlers.d.ts +46 -0
  29. package/dist/mcp/handlers.d.ts.map +1 -0
  30. package/dist/mcp/index.d.ts +2 -0
  31. package/dist/mcp/index.d.ts.map +1 -0
  32. package/dist/mcp/server.d.ts +9 -0
  33. package/dist/mcp/server.d.ts.map +1 -0
  34. package/dist/mcp/utils.d.ts +14 -0
  35. package/dist/mcp/utils.d.ts.map +1 -0
  36. package/dist/mcp/worktree-summary.d.ts +14 -0
  37. package/dist/mcp/worktree-summary.d.ts.map +1 -0
  38. package/dist/mcp-server.js +2347 -640
  39. package/dist/mcp-server.js.map +4 -4
  40. package/dist/services/InteractiveUIService.d.ts +85 -0
  41. package/dist/services/InteractiveUIService.d.ts.map +1 -0
  42. package/dist/services/branch-created-actions.service.d.ts +27 -0
  43. package/dist/services/branch-created-actions.service.d.ts.map +1 -0
  44. package/dist/services/clone-sync.service.d.ts +93 -0
  45. package/dist/services/clone-sync.service.d.ts.map +1 -0
  46. package/dist/services/config-loader.service.d.ts +28 -0
  47. package/dist/services/config-loader.service.d.ts.map +1 -0
  48. package/dist/services/file-copy.service.d.ts +19 -0
  49. package/dist/services/file-copy.service.d.ts.map +1 -0
  50. package/dist/services/git.service.d.ts +94 -0
  51. package/dist/services/git.service.d.ts.map +1 -0
  52. package/dist/services/hook-execution.service.d.ts +20 -0
  53. package/dist/services/hook-execution.service.d.ts.map +1 -0
  54. package/dist/services/logger.service.d.ts +24 -0
  55. package/dist/services/logger.service.d.ts.map +1 -0
  56. package/dist/services/path-resolution.service.d.ts +10 -0
  57. package/dist/services/path-resolution.service.d.ts.map +1 -0
  58. package/dist/services/progress-emitter.d.ts +14 -0
  59. package/dist/services/progress-emitter.d.ts.map +1 -0
  60. package/dist/services/repo-operation-lock.d.ts +16 -0
  61. package/dist/services/repo-operation-lock.d.ts.map +1 -0
  62. package/dist/services/sparse-checkout.service.d.ts +45 -0
  63. package/dist/services/sparse-checkout.service.d.ts.map +1 -0
  64. package/dist/services/sync-outcome.d.ts +47 -0
  65. package/dist/services/sync-outcome.d.ts.map +1 -0
  66. package/dist/services/sync-retry-policy.d.ts +18 -0
  67. package/dist/services/sync-retry-policy.d.ts.map +1 -0
  68. package/dist/services/worktree-metadata.service.d.ts +25 -0
  69. package/dist/services/worktree-metadata.service.d.ts.map +1 -0
  70. package/dist/services/worktree-mode-sync-runner.d.ts +36 -0
  71. package/dist/services/worktree-mode-sync-runner.d.ts.map +1 -0
  72. package/dist/services/worktree-status.service.d.ts +60 -0
  73. package/dist/services/worktree-status.service.d.ts.map +1 -0
  74. package/dist/services/worktree-sync-planner.d.ts +62 -0
  75. package/dist/services/worktree-sync-planner.d.ts.map +1 -0
  76. package/dist/services/worktree-sync.service.d.ts +49 -0
  77. package/dist/services/worktree-sync.service.d.ts.map +1 -0
  78. package/dist/types/index.d.ts +303 -0
  79. package/dist/types/index.d.ts.map +1 -0
  80. package/dist/types/sync-metadata.d.ts +16 -0
  81. package/dist/types/sync-metadata.d.ts.map +1 -0
  82. package/dist/utils/app-events.d.ts +31 -0
  83. package/dist/utils/app-events.d.ts.map +1 -0
  84. package/dist/utils/branch-filter.d.ts +3 -0
  85. package/dist/utils/branch-filter.d.ts.map +1 -0
  86. package/dist/utils/cli.d.ts +21 -0
  87. package/dist/utils/cli.d.ts.map +1 -0
  88. package/dist/utils/clone-skip-format.d.ts +3 -0
  89. package/dist/utils/clone-skip-format.d.ts.map +1 -0
  90. package/dist/utils/config-generator.d.ts +10 -0
  91. package/dist/utils/config-generator.d.ts.map +1 -0
  92. package/dist/utils/date-filter.d.ts +10 -0
  93. package/dist/utils/date-filter.d.ts.map +1 -0
  94. package/dist/utils/disk-space.d.ts +23 -0
  95. package/dist/utils/disk-space.d.ts.map +1 -0
  96. package/dist/utils/file-exists.d.ts +2 -0
  97. package/dist/utils/file-exists.d.ts.map +1 -0
  98. package/dist/utils/git-progress.d.ts +25 -0
  99. package/dist/utils/git-progress.d.ts.map +1 -0
  100. package/dist/utils/git-url.d.ts +23 -0
  101. package/dist/utils/git-url.d.ts.map +1 -0
  102. package/dist/utils/git-validation.d.ts +5 -0
  103. package/dist/utils/git-validation.d.ts.map +1 -0
  104. package/dist/utils/interactive.d.ts +3 -0
  105. package/dist/utils/interactive.d.ts.map +1 -0
  106. package/dist/utils/lfs-error.d.ts +35 -0
  107. package/dist/utils/lfs-error.d.ts.map +1 -0
  108. package/dist/utils/lock-path.d.ts +9 -0
  109. package/dist/utils/lock-path.d.ts.map +1 -0
  110. package/dist/utils/path-compare.d.ts +16 -0
  111. package/dist/utils/path-compare.d.ts.map +1 -0
  112. package/dist/utils/repo-mode.d.ts +8 -0
  113. package/dist/utils/repo-mode.d.ts.map +1 -0
  114. package/dist/utils/retry.d.ts +24 -0
  115. package/dist/utils/retry.d.ts.map +1 -0
  116. package/dist/utils/sanitize-name.d.ts +2 -0
  117. package/dist/utils/sanitize-name.d.ts.map +1 -0
  118. package/dist/utils/shell-escape.d.ts +5 -0
  119. package/dist/utils/shell-escape.d.ts.map +1 -0
  120. package/dist/utils/signal-handlers.d.ts +14 -0
  121. package/dist/utils/signal-handlers.d.ts.map +1 -0
  122. package/dist/utils/timing.d.ts +24 -0
  123. package/dist/utils/timing.d.ts.map +1 -0
  124. package/dist/utils/worktree-list-parser.d.ts +10 -0
  125. package/dist/utils/worktree-list-parser.d.ts.map +1 -0
  126. package/package.json +5 -2
@@ -0,0 +1,85 @@
1
+ import * as cron from "node-cron";
2
+ import { WorktreeSyncService } from "./worktree-sync.service";
3
+ import { AppEventEmitter } from "../utils/app-events";
4
+ import type { HookContext, WorktreeStatusEntry, DivergedDirectoryInfo, RepositoryListEntry, RepositoryDiskUsage } from "../types";
5
+ export declare class InteractiveUIService {
6
+ private app;
7
+ private syncServices;
8
+ private configPath?;
9
+ private cronSchedule?;
10
+ private cronJobs;
11
+ private repositoryCount;
12
+ private logBuffer;
13
+ private uiReady;
14
+ private hookExecutionService;
15
+ private branchCreatedActions;
16
+ private pathResolution;
17
+ private limit;
18
+ private maxProgressLines;
19
+ private reloadInProgress;
20
+ private isDestroyed;
21
+ private events;
22
+ private ownsEvents;
23
+ private unsubscribeCallbacks;
24
+ private progressUnsubscribers;
25
+ constructor(syncServices: WorktreeSyncService[], configPath?: string, cronSchedule?: string, maxParallel?: number, events?: AppEventEmitter);
26
+ getEvents(): AppEventEmitter;
27
+ private startBufferFlushCheck;
28
+ private createOutputFn;
29
+ private injectLoggersIntoServices;
30
+ private subscribeToServiceProgress;
31
+ addLog(message: string, level?: "info" | "warn" | "error"): void;
32
+ private flushLogBuffer;
33
+ setupCronJobs(): void;
34
+ private cancelCronJobs;
35
+ registerCronJob(job: cron.ScheduledTask): void;
36
+ private renderUI;
37
+ private handleManualSync;
38
+ triggerInitialSync(): Promise<void>;
39
+ private handleReload;
40
+ private handleQuit;
41
+ private waitForInProgressSyncs;
42
+ updateLastSyncTime(): void;
43
+ setStatus(status: "idle" | "syncing"): void;
44
+ setDiskSpace(diskSpace: string): void;
45
+ calculateAndUpdateDiskSpace(): Promise<void>;
46
+ getRepositoryList(): RepositoryListEntry[];
47
+ private getRepoName;
48
+ getRepositoryDiskUsage(repoIndex: number): Promise<RepositoryDiskUsage>;
49
+ getBranchesForRepo(repoIndex: number): Promise<string[]>;
50
+ getDefaultBranchForRepo(repoIndex: number): string;
51
+ fetchForRepo(repoIndex: number): Promise<void>;
52
+ createAndPushBranch(repoIndex: number, baseBranch: string, branchName: string): Promise<{
53
+ success: boolean;
54
+ finalName: string;
55
+ error?: string;
56
+ }>;
57
+ getWorktreesForRepo(repoIndex: number): Promise<Array<{
58
+ path: string;
59
+ branch: string;
60
+ }>>;
61
+ getWorktreeStatusForRepo(repoIndex: number): Promise<WorktreeStatusEntry[]>;
62
+ private getWorktreesFromService;
63
+ getDivergedDirectoriesForRepo(repoIndex: number): Promise<DivergedDirectoryInfo[]>;
64
+ deleteDivergedDirectory(repoIndex: number, name: string): Promise<void>;
65
+ createWorktreeForBranch(repoIndex: number, branchName: string): Promise<void>;
66
+ openEditorInWorktree(worktreePath: string): {
67
+ success: boolean;
68
+ error?: string;
69
+ };
70
+ openTerminalInWorktree(repoIndex: number, worktreePath: string, branchName: string): {
71
+ success: boolean;
72
+ error?: string;
73
+ };
74
+ private resolveTerminalLauncher;
75
+ private parseCommandString;
76
+ private commandExists;
77
+ private runSyncCycle;
78
+ private recordSyncOutcome;
79
+ private runSyncServices;
80
+ private buildUiLogger;
81
+ executeOnBranchCreatedHooks(repoIndex: number, context: HookContext): void;
82
+ copyBranchFiles(repoIndex: number, baseBranch: string, targetBranch: string): Promise<void>;
83
+ destroy(fast?: boolean): Promise<void>;
84
+ }
85
+ //# sourceMappingURL=InteractiveUIService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InteractiveUIService.d.ts","sourceRoot":"","sources":["../../src/services/InteractiveUIService.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { FileCopyService } from "./file-copy.service";
2
+ import type { HookExecutionService } from "./hook-execution.service";
3
+ import type { Logger } from "./logger.service";
4
+ import type { Config } from "../types";
5
+ export interface CopyFilesParams {
6
+ config: Pick<Config, "filesToCopyOnBranchCreate">;
7
+ branchName: string;
8
+ worktreePath: string;
9
+ sourceDir: string;
10
+ logger: Logger;
11
+ }
12
+ export interface RunHooksParams {
13
+ config: Pick<Config, "hooks" | "repoUrl">;
14
+ repoName: string;
15
+ branchName: string;
16
+ worktreePath: string;
17
+ baseBranch: string;
18
+ logger: Logger;
19
+ hookExecutionService: HookExecutionService;
20
+ }
21
+ export declare class BranchCreatedActionsService {
22
+ private fileCopyService;
23
+ constructor(fileCopyService?: FileCopyService);
24
+ copyFiles(params: CopyFilesParams): Promise<void>;
25
+ runHooks(params: RunHooksParams): void;
26
+ }
27
+ //# sourceMappingURL=branch-created-actions.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-created-actions.service.d.ts","sourceRoot":"","sources":["../../src/services/branch-created-actions.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAe,MAAM,UAAU,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;IAClD,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB,EAAE,oBAAoB,CAAC;CAC5C;AAED,qBAAa,2BAA2B;IACtC,OAAO,CAAC,eAAe,CAAkB;gBAE7B,eAAe,CAAC,EAAE,eAAe;IAIvC,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBvD,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;CA2BvC"}
@@ -0,0 +1,93 @@
1
+ import { BranchCreatedActionsService } from "./branch-created-actions.service";
2
+ import type { GitService } from "./git.service";
3
+ import type { Logger } from "./logger.service";
4
+ import type { SyncOutcomeAccumulator } from "./sync-outcome";
5
+ import type { Config } from "../types";
6
+ import type { GitProgressEmitter } from "../utils/git-progress";
7
+ export type CloneSkipReason = {
8
+ kind: "branch_mismatch";
9
+ phase: "init" | "sync";
10
+ currentBranch: string;
11
+ expectedBranch: string;
12
+ } | {
13
+ kind: "head_unreadable";
14
+ phase: "init" | "sync";
15
+ error: string;
16
+ } | {
17
+ kind: "dirty_tree";
18
+ } | {
19
+ kind: "diverged";
20
+ branch: string;
21
+ } | {
22
+ kind: "ahead_unpushed";
23
+ branch: string;
24
+ } | {
25
+ kind: "missing_remote_ref";
26
+ branch: string;
27
+ source: "fetch_error" | "post_fetch_verify";
28
+ } | {
29
+ kind: "indeterminate_shallow";
30
+ branch: string;
31
+ deepenedTo: number | null;
32
+ } | {
33
+ kind: "origin_mismatch";
34
+ actual: string;
35
+ expected: string;
36
+ };
37
+ export type CloneSkipListener = (reason: CloneSkipReason) => void;
38
+ export declare class CloneSyncService {
39
+ private config;
40
+ private gitService;
41
+ private logger;
42
+ private initialized;
43
+ private resolvedBranch;
44
+ private branchCreatedActions;
45
+ private progressEmitter?;
46
+ private onSkip?;
47
+ private outcomeAccumulator?;
48
+ private pendingInitSkip;
49
+ constructor(config: Config, gitService: GitService, logger: Logger, options?: {
50
+ branchCreatedActions?: BranchCreatedActionsService;
51
+ progressEmitter?: GitProgressEmitter;
52
+ onSkip?: CloneSkipListener;
53
+ });
54
+ updateLogger(logger: Logger): void;
55
+ isInitialized(): boolean;
56
+ clearPendingInitSkip(): void;
57
+ getWorktrees(): Promise<Array<{
58
+ path: string;
59
+ branch: string;
60
+ }>>;
61
+ private get repoName();
62
+ private getCloneTimeoutMs;
63
+ private getFetchTimeoutMs;
64
+ private isLfsSkipEnabled;
65
+ private buildGitOptions;
66
+ private emitProgress;
67
+ private withOutcome;
68
+ private recordSkip;
69
+ private clientFor;
70
+ private buildGitEnv;
71
+ private buildCloneArgs;
72
+ private buildFetchArgs;
73
+ private ensureAllRemoteBranchesRefspec;
74
+ private isOriginRemoteBranchTrackingRefspec;
75
+ private recordMissingRemoteRefSkip;
76
+ private fetchWithRecovery;
77
+ private hasRemoteBranch;
78
+ private isShallowRepository;
79
+ private unshallowIfDepthRemoved;
80
+ private getDeepenTargets;
81
+ private deepenShallowHistoryToDepth;
82
+ resolveBranch(): Promise<string>;
83
+ initialize(outcome?: SyncOutcomeAccumulator): Promise<void>;
84
+ private initializeInternal;
85
+ private evaluateOriginMatch;
86
+ private validateExistingClone;
87
+ private maybeCleanupPartialClone;
88
+ private getInitMarkerPath;
89
+ private runInitialFileCopy;
90
+ runSyncAttempt(outcome?: SyncOutcomeAccumulator): Promise<void>;
91
+ private runSyncAttemptInternal;
92
+ }
93
+ //# sourceMappingURL=clone-sync.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clone-sync.service.d.ts","sourceRoot":"","sources":["../../src/services/clone-sync.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { Config, ConfigFile, RepositoryConfig } from "../types";
2
+ export declare class ConfigLoaderService {
3
+ findConfigUpward(startDir: string): Promise<string | null>;
4
+ loadConfigFile(configPath: string): Promise<ConfigFile>;
5
+ private validateConfigFile;
6
+ private validateDepth;
7
+ private validateRetryConfig;
8
+ private validateParallelismConfig;
9
+ private validateFilesToCopyConfig;
10
+ private validateSparseCheckoutConfig;
11
+ private warnOnDuplicateRepoUrls;
12
+ private validateRepositoryMode;
13
+ private validateHooksConfig;
14
+ resolveRepositoryConfig(repo: RepositoryConfig, defaults?: Partial<Config>, configDir?: string, globalRetry?: Config["retry"], allRepositories?: RepositoryConfig[]): RepositoryConfig;
15
+ private isDuplicateRepoUrl;
16
+ detectBareRepoDirCollisions(repositories: RepositoryConfig[]): void;
17
+ private isValidGitUrl;
18
+ private resolvePath;
19
+ filterRepositories(repositories: RepositoryConfig[], filter?: string): RepositoryConfig[];
20
+ buildRepositories(configPath: string, overrides?: {
21
+ filter?: string;
22
+ }): Promise<{
23
+ repositories: RepositoryConfig[];
24
+ configFile: ConfigFile;
25
+ configDir: string;
26
+ }>;
27
+ }
28
+ //# sourceMappingURL=config-loader.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.service.d.ts","sourceRoot":"","sources":["../../src/services/config-loader.service.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAkB,MAAM,UAAU,CAAC;AAUrF,qBAAa,mBAAmB;IACxB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAkB1D,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA4B7D,OAAO,CAAC,kBAAkB;IA0J1B,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,mBAAmB;IA+C3B,OAAO,CAAC,yBAAyB;IA2CjC,OAAO,CAAC,yBAAyB;IAejC,OAAO,CAAC,4BAA4B;IAyCpC,OAAO,CAAC,uBAAuB;IAoB/B,OAAO,CAAC,sBAAsB;IAyD9B,OAAO,CAAC,mBAAmB;IAuB3B,uBAAuB,CACrB,IAAI,EAAE,gBAAgB,EACtB,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAC1B,SAAS,CAAC,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,EAC7B,eAAe,CAAC,EAAE,gBAAgB,EAAE,GACnC,gBAAgB;IA0FnB,OAAO,CAAC,kBAAkB;IAS1B,2BAA2B,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAiBnE,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,WAAW;IAQnB,kBAAkB,CAAC,YAAY,EAAE,gBAAgB,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAYnF,iBAAiB,CACrB,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9B,OAAO,CAAC;QAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC;QAAC,UAAU,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAgB5F"}
@@ -0,0 +1,19 @@
1
+ export interface FileCopyResult {
2
+ copied: string[];
3
+ skipped: string[];
4
+ errors: Array<{
5
+ file: string;
6
+ error: string;
7
+ }>;
8
+ }
9
+ export declare class FileCopyService {
10
+ /**
11
+ * Copy files matching patterns from source to destination directory.
12
+ * Skips files that already exist at destination.
13
+ * Preserves directory structure relative to source.
14
+ */
15
+ copyFiles(sourceDir: string, destDir: string, patterns: string[]): Promise<FileCopyResult>;
16
+ private expandPatterns;
17
+ private copyFile;
18
+ }
19
+ //# sourceMappingURL=file-copy.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-copy.service.d.ts","sourceRoot":"","sources":["../../src/services/file-copy.service.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAED,qBAAa,eAAe;IAC1B;;;;OAIG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;YAmClF,cAAc;YAuBd,QAAQ;CAWvB"}
@@ -0,0 +1,94 @@
1
+ import { Logger } from "./logger.service";
2
+ import { SparseCheckoutService } from "./sparse-checkout.service";
3
+ import type { WorktreeStatusResult } from "./worktree-status.service";
4
+ import type { Config } from "../types";
5
+ import type { SyncMetadata } from "../types/sync-metadata";
6
+ import type { GitProgressEmitter } from "../utils/git-progress";
7
+ import type { SimpleGit } from "simple-git";
8
+ export type RemoteRelationship = "up_to_date" | "fast_forward" | "local_ahead" | "diverged" | "indeterminate_shallow";
9
+ export type GitServiceOptions = Pick<Config, "repoUrl" | "worktreeDir" | "bareRepoDir" | "skipLfs" | "debug" | "sparseCheckout" | "fetchTimeoutMs" | "cloneTimeoutMs">;
10
+ export declare class GitService {
11
+ private config;
12
+ private progressEmitter?;
13
+ private git;
14
+ private bareRepoPath;
15
+ private mainWorktreePath;
16
+ private defaultBranch;
17
+ private metadataService;
18
+ private statusService;
19
+ private sparseCheckoutService;
20
+ private logger;
21
+ private lfsSkipOverride;
22
+ private gitInstances;
23
+ constructor(config: GitServiceOptions, logger?: Logger, progressEmitter?: GitProgressEmitter | undefined);
24
+ getSparseCheckoutService(): SparseCheckoutService;
25
+ private getFetchTimeoutMs;
26
+ private getCloneTimeoutMs;
27
+ private getCachedGit;
28
+ private buildSimpleGitOptions;
29
+ updateLogger(logger: Logger): void;
30
+ initialize(): Promise<SimpleGit>;
31
+ getGit(): SimpleGit;
32
+ isInitialized(): boolean;
33
+ getDefaultBranch(): string;
34
+ getBareRepoPath(): string;
35
+ getRemoteDefaultBranch(repoUrl: string): Promise<string>;
36
+ verifyLfs(worktreePath: string, label: string): Promise<void>;
37
+ fetchAll(): Promise<void>;
38
+ fetchBranch(branchName: string): Promise<void>;
39
+ private assertInitialized;
40
+ getRemoteBranches(): Promise<string[]>;
41
+ getRemoteBranchesWithActivity(): Promise<{
42
+ branch: string;
43
+ lastActivity: Date;
44
+ }[]>;
45
+ private verifyLfsFilesDownloaded;
46
+ checkoutHead(worktreePath: string): Promise<void>;
47
+ private applySparseAndCheckout;
48
+ private rollbackPartialWorktree;
49
+ private createWorktreeMetadata;
50
+ addWorktree(branchName: string, worktreePath: string): Promise<void>;
51
+ private runWorktreeAddByMatrix;
52
+ private runSparseStepWithRollback;
53
+ private wrapUpstreamFailure;
54
+ removeWorktree(worktreePath: string): Promise<void>;
55
+ pruneWorktrees(): Promise<void>;
56
+ checkWorktreeStatus(worktreePath: string): Promise<boolean>;
57
+ hasUnpushedCommits(worktreePath: string): Promise<boolean>;
58
+ hasUpstreamGone(worktreePath: string): Promise<boolean>;
59
+ hasStashedChanges(worktreePath: string): Promise<boolean>;
60
+ getFullWorktreeStatus(worktreePath: string, includeDetails?: boolean): Promise<WorktreeStatusResult>;
61
+ hasModifiedSubmodules(worktreePath: string): Promise<boolean>;
62
+ hasOperationInProgress(worktreePath: string): Promise<boolean>;
63
+ getCurrentBranch(): Promise<string>;
64
+ private detectDefaultBranch;
65
+ setLfsSkipEnabled(value: boolean): void;
66
+ private isLfsSkipEnabled;
67
+ getWorktrees(): Promise<{
68
+ path: string;
69
+ branch: string;
70
+ }[]>;
71
+ isWorktreeBehind(worktreePath: string): Promise<boolean>;
72
+ updateWorktree(worktreePath: string): Promise<void>;
73
+ hasDivergedHistory(worktreePath: string, expectedBranch: string): Promise<boolean>;
74
+ canFastForward(worktreePath: string, branch: string): Promise<boolean>;
75
+ isLocalAheadOfRemote(worktreePath: string, branch: string): Promise<boolean>;
76
+ classifyRemoteRelationship(worktreePath: string, branch: string): Promise<RemoteRelationship>;
77
+ private isShallowRepository;
78
+ getChangedPathsInRange(worktreePath: string, fromRef: string, toRef: string): Promise<string[] | null>;
79
+ compareTreeContent(worktreePath: string, branch: string): Promise<boolean>;
80
+ resetToUpstream(worktreePath: string, branch: string): Promise<void>;
81
+ getCurrentCommit(worktreePath: string): Promise<string>;
82
+ getRemoteCommit(ref: string): Promise<string>;
83
+ branchExists(branchName: string): Promise<{
84
+ local: boolean;
85
+ remote: boolean;
86
+ }>;
87
+ getLocalBranches(): Promise<string[]>;
88
+ private resolveCreateBranchBaseRef;
89
+ createBranch(branchName: string, baseBranch: string): Promise<void>;
90
+ pushBranch(branchName: string): Promise<void>;
91
+ getWorktreeMetadata(worktreePath: string): Promise<SyncMetadata | null>;
92
+ private getWorktreesFromBare;
93
+ }
94
+ //# sourceMappingURL=git.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.service.d.ts","sourceRoot":"","sources":["../../src/services/git.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { HookContext, HooksConfig } from "../types";
2
+ export interface HookExecutionCallbacks {
3
+ onStdout?: (data: string) => void;
4
+ onStderr?: (data: string) => void;
5
+ onError?: (command: string, error: Error) => void;
6
+ onComplete?: (command: string, exitCode: number | null) => void;
7
+ }
8
+ export declare class HookExecutionService {
9
+ private activeProcesses;
10
+ private killTimers;
11
+ private timeoutTimers;
12
+ private timeoutMs;
13
+ setTimeoutMs(ms: number): void;
14
+ executeOnBranchCreated(hooks: HooksConfig | undefined, context: HookContext, callbacks?: HookExecutionCallbacks): void;
15
+ cleanup(): void;
16
+ private buildEnvironment;
17
+ private resolveCommandPlaceholders;
18
+ private executeCommandInBackground;
19
+ }
20
+ //# sourceMappingURL=hook-execution.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-execution.service.d.ts","sourceRoot":"","sources":["../../src/services/hook-execution.service.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGzD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAClD,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACjE;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,UAAU,CAA4C;IAC9D,OAAO,CAAC,aAAa,CAA4C;IACjE,OAAO,CAAC,SAAS,CAA0C;IAE3D,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI9B,sBAAsB,CACpB,KAAK,EAAE,WAAW,GAAG,SAAS,EAC9B,OAAO,EAAE,WAAW,EACpB,SAAS,GAAE,sBAA2B,GACrC,IAAI;IAaA,OAAO,IAAI,IAAI;IA8BtB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,0BAA0B;IASlC,OAAO,CAAC,0BAA0B;CAwEnC"}
@@ -0,0 +1,24 @@
1
+ export type LogLevel = "info" | "warn" | "error" | "debug";
2
+ export type LogOutputFn = (message: string, level: LogLevel) => void;
3
+ export interface LoggerOptions {
4
+ repoName?: string;
5
+ debug?: boolean;
6
+ disableColors?: boolean;
7
+ outputFn?: LogOutputFn;
8
+ }
9
+ export declare class Logger {
10
+ private repoName?;
11
+ private debugEnabled;
12
+ private outputFn?;
13
+ constructor(options?: LoggerOptions);
14
+ private prefix;
15
+ debug(message: string, ...args: unknown[]): void;
16
+ info(message: string, ...args: unknown[]): void;
17
+ warn(message: string, ...args: unknown[]): void;
18
+ error(message: string, error?: Error | unknown): void;
19
+ table(content: string): void;
20
+ private formatMessage;
21
+ static createDefault(repoName?: string, debug?: boolean): Logger;
22
+ withPassthrough(passthrough: LogOutputFn): Logger;
23
+ }
24
+ //# sourceMappingURL=logger.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.service.d.ts","sourceRoot":"","sources":["../../src/services/logger.service.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAC3D,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,QAAQ,CAAC,CAAc;gBAEnB,OAAO,GAAE,aAAkB;IAMvC,OAAO,CAAC,MAAM;IAId,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAUhD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAS/C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAS/C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,IAAI;IAoBrD,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAS5B,OAAO,CAAC,aAAa;IAQrB,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM;IAIhE,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM;CAmBlD"}
@@ -0,0 +1,10 @@
1
+ export declare class PathResolutionService {
2
+ sanitizeBranchName(branchName: string): string;
3
+ getBranchWorktreePath(worktreeDir: string, branchName: string): string;
4
+ private resolveRealPath;
5
+ private isResolvedPathInsideBase;
6
+ normalizeWorktreePath(worktreePath: string, worktreeBaseDir: string): string;
7
+ isPathInsideBaseDir(targetPath: string, baseDir: string): boolean;
8
+ extractBranchFromWorktreePath(worktreePath: string, worktreeBaseDir: string): string;
9
+ }
10
+ //# sourceMappingURL=path-resolution.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-resolution.service.d.ts","sourceRoot":"","sources":["../../src/services/path-resolution.service.ts"],"names":[],"mappings":"AASA,qBAAa,qBAAqB;IAChC,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAS9C,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAItE,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,wBAAwB;IAQhC,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM;IAS5E,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAMjE,6BAA6B,CAAC,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM;CAGrF"}
@@ -0,0 +1,14 @@
1
+ export interface ProgressEvent {
2
+ phase: string;
3
+ message: string;
4
+ progress?: number;
5
+ processed?: number;
6
+ total?: number;
7
+ }
8
+ export type ProgressListener = (event: ProgressEvent) => void;
9
+ export declare class ProgressEmitter {
10
+ private listeners;
11
+ onProgress(listener: ProgressListener): () => void;
12
+ emit(event: ProgressEvent): void;
13
+ }
14
+ //# sourceMappingURL=progress-emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-emitter.d.ts","sourceRoot":"","sources":["../../src/services/progress-emitter.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAE9D,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAA+B;IAEhD,UAAU,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,IAAI;IAKlD,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;CAWjC"}
@@ -0,0 +1,16 @@
1
+ import { Logger } from "./logger.service";
2
+ import type { Config } from "../types";
3
+ import type { GitService } from "./git.service";
4
+ export type RepoLockRelease = () => Promise<void>;
5
+ export declare class RepoOperationLock {
6
+ private config;
7
+ private gitService;
8
+ private logger;
9
+ constructor(config: Config, gitService: GitService, logger?: Logger);
10
+ updateLogger(logger: Logger): void;
11
+ acquire(): Promise<RepoLockRelease | null>;
12
+ private acquireCloneModeLock;
13
+ private acquireWorktreeModeLock;
14
+ private lockPath;
15
+ }
16
+ //# sourceMappingURL=repo-operation-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-operation-lock.d.ts","sourceRoot":"","sources":["../../src/services/repo-operation-lock.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAElD,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;gBAFN,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,MAAM,GAAE,MAA+B;IAGjD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI5B,OAAO,IAAI,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;YAYlC,oBAAoB;YAepB,uBAAuB;YAUvB,QAAQ;CAuBvB"}
@@ -0,0 +1,45 @@
1
+ import { Logger } from "./logger.service";
2
+ import type { SparseCheckoutConfig, SparseCheckoutMode } from "../types";
3
+ import type { SimpleGit } from "simple-git";
4
+ export type GitFactory = (worktreePath: string) => SimpleGit;
5
+ export declare class SparseCheckoutService {
6
+ private logger;
7
+ private gitFactory;
8
+ private warnedConfigs;
9
+ private matcherCache;
10
+ constructor(logger?: Logger, gitFactory?: GitFactory);
11
+ updateLogger(logger: Logger): void;
12
+ resolveMode(cfg: SparseCheckoutConfig): SparseCheckoutMode;
13
+ buildPatterns(cfg: SparseCheckoutConfig): string[];
14
+ private buildPatternsForMode;
15
+ applyToWorktree(worktreePath: string, cfg: SparseCheckoutConfig): Promise<void>;
16
+ readCurrent(worktreePath: string): Promise<string[] | null>;
17
+ readCurrentMode(worktreePath: string): Promise<SparseCheckoutMode | null>;
18
+ needsUpdate(worktreePath: string, cfg: SparseCheckoutConfig): Promise<boolean>;
19
+ isNarrowing(currentPatterns: string[] | null, nextPatterns: string[]): boolean;
20
+ patternsEqual(a: string[], b: string[]): boolean;
21
+ /**
22
+ * Decide whether a list of changed file paths intersects the sparse-checkout
23
+ * set defined by `cfg`. Used to skip fast-forward updates when upstream
24
+ * commits only touch files outside the materialized worktree.
25
+ *
26
+ * Cone mode materializes:
27
+ * - all files at the repository root,
28
+ * - all files directly inside every ancestor of an included directory
29
+ * (e.g. include `tools/build` keeps `tools/foo.txt` checked out too),
30
+ * - everything inside an included directory.
31
+ * We mirror those rules here. Missing the ancestor-files case would let
32
+ * stale files linger when only those parent files change upstream.
33
+ *
34
+ * No-cone mode: gitignore-style matching with negation is non-trivial and
35
+ * not implemented here yet. We return `true` so the caller falls back to
36
+ * the safe behavior of always running the update.
37
+ *
38
+ * The matcher derived from `cfg` is cached on the cfg object identity
39
+ * (WeakMap), so callers should reuse the same `cfg` reference across
40
+ * invocations to benefit from the cache.
41
+ */
42
+ pathsTouchSparse(changedPaths: string[], cfg: SparseCheckoutConfig): boolean;
43
+ private getMatcher;
44
+ }
45
+ //# sourceMappingURL=sparse-checkout.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sparse-checkout.service.d.ts","sourceRoot":"","sources":["../../src/services/sparse-checkout.service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK,SAAS,CAAC;AAQ7D,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,aAAa,CAAuC;IAC5D,OAAO,CAAC,YAAY,CAAsD;gBAE9D,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU;IAKpD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIlC,WAAW,CAAC,GAAG,EAAE,oBAAoB,GAAG,kBAAkB;IAiB1D,aAAa,CAAC,GAAG,EAAE,oBAAoB,GAAG,MAAM,EAAE;IAIlD,OAAO,CAAC,oBAAoB;IAetB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/E,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;IAc3D,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAazE,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IASpF,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO;IAuB9E,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO;IAOhD;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,oBAAoB,GAAG,OAAO;IAgB5E,OAAO,CAAC,UAAU;CA4BnB"}
@@ -0,0 +1,47 @@
1
+ import type { CloneSkipReason } from "./clone-sync.service";
2
+ import type { SyncOutcome, SyncOutcomeAction, SyncOutcomeCounts, SyncOutcomeMode, SyncOutcomeScope } from "../types";
3
+ export declare class SyncOutcomeAccumulator {
4
+ private readonly options;
5
+ private counts;
6
+ private actions;
7
+ constructor(options: {
8
+ mode: SyncOutcomeMode;
9
+ repoName?: string;
10
+ });
11
+ add(action: SyncOutcomeAction): void;
12
+ recordCreated(branch: string, path: string): void;
13
+ recordRemoved(branch: string, path: string): void;
14
+ recordUpdated(branch: string, path: string, reason?: string): void;
15
+ recordNoop(scope: SyncOutcomeScope, reason: string, details: {
16
+ branch?: string;
17
+ path?: string;
18
+ message?: string;
19
+ }): void;
20
+ recordSkipped(scope: SyncOutcomeScope, reason: string, details: {
21
+ branch?: string;
22
+ path?: string;
23
+ message?: string;
24
+ }): void;
25
+ recordPreservedDiverged(branch: string, path: string, preservedPath: string): void;
26
+ recordFailed(scope: SyncOutcomeScope, error: string, details?: {
27
+ reason?: string;
28
+ branch?: string;
29
+ path?: string;
30
+ }): void;
31
+ getCounts(): SyncOutcomeCounts;
32
+ snapshot(): {
33
+ counts: SyncOutcomeCounts;
34
+ actions: SyncOutcomeAction[];
35
+ };
36
+ restore(snapshot: {
37
+ counts: SyncOutcomeCounts;
38
+ actions: SyncOutcomeAction[];
39
+ }): void;
40
+ toOutcome(durationMs?: number): SyncOutcome;
41
+ }
42
+ export declare function createEmptySyncOutcome(mode: SyncOutcomeMode, repoName?: string, durationMs?: number): SyncOutcome;
43
+ export declare function cloneSkipToOutcomeAction(reason: CloneSkipReason, details?: {
44
+ branch?: string;
45
+ path?: string;
46
+ }): SyncOutcomeAction;
47
+ //# sourceMappingURL=sync-outcome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-outcome.d.ts","sourceRoot":"","sources":["../../src/services/sync-outcome.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AA2CrH,qBAAa,sBAAsB;IAK/B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,OAAO,CAAC,MAAM,CAAgD;IAC9D,OAAO,CAAC,OAAO,CAA2B;gBAGvB,OAAO,EAAE;QACxB,IAAI,EAAE,eAAe,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;IAGH,GAAG,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAKpC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAIjD,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAIjD,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAIlE,UAAU,CACR,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5D,IAAI;IAIP,aAAa,CACX,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5D,IAAI;IAIP,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAIlF,YAAY,CACV,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAO,GAChE,IAAI;IAIP,SAAS,IAAI,iBAAiB;IAI9B,QAAQ,IAAI;QAAE,MAAM,EAAE,iBAAiB,CAAC;QAAC,OAAO,EAAE,iBAAiB,EAAE,CAAA;KAAE;IAOvE,OAAO,CAAC,QAAQ,EAAE;QAAE,MAAM,EAAE,iBAAiB,CAAC;QAAC,OAAO,EAAE,iBAAiB,EAAE,CAAA;KAAE,GAAG,IAAI;IAKpF,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW;CAU5C;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,CASjH;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,eAAe,EACvB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/C,iBAAiB,CAanB"}
@@ -0,0 +1,18 @@
1
+ import type { GitService } from "./git.service";
2
+ import type { Logger } from "./logger.service";
3
+ import type { Config } from "../types";
4
+ import type { RetryOptions } from "../utils/retry";
5
+ export interface SyncRetryContext {
6
+ lfsSkipEnabled: boolean;
7
+ }
8
+ export declare class SyncRetryPolicy {
9
+ private config;
10
+ private gitService;
11
+ private logger;
12
+ constructor(config: Config, gitService: GitService, logger: Logger);
13
+ updateLogger(logger: Logger): void;
14
+ createContext(): SyncRetryContext;
15
+ createOptions(syncContext: SyncRetryContext): RetryOptions;
16
+ resetLfsSkipIfNeeded(syncContext: SyncRetryContext): void;
17
+ }
18
+ //# sourceMappingURL=sync-retry-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-retry-policy.d.ts","sourceRoot":"","sources":["../../src/services/sync-retry-policy.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,eAAe;IAExB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;gBAFN,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM;IAGxB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIlC,aAAa,IAAI,gBAAgB;IAIjC,aAAa,CAAC,WAAW,EAAE,gBAAgB,GAAG,YAAY;IA4B1D,oBAAoB,CAAC,WAAW,EAAE,gBAAgB,GAAG,IAAI;CAK1D"}